Skip to content

Commit d95c3d5

Browse files
committed
fix: make generated TypeScript and Unity SDK tests CI-safe
1 parent 641ed27 commit d95c3d5

2 files changed

Lines changed: 105 additions & 105 deletions

File tree

src/emitters/typescript.rs

Lines changed: 102 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,104 +1008,104 @@ export class MottoTransport {{
10081008
TransportMode::Runtime => {
10091009
r#"export type TransportKind = 'webtransport' | 'websocket';
10101010
1011-
export function transportKindForUrl(url: string): TransportKind {{
1011+
export function transportKindForUrl(url: string): TransportKind {
10121012
if (url.startsWith('ws://') || url.startsWith('wss://')) return 'websocket';
10131013
if (url.startsWith('https://')) return 'webtransport';
1014-
throw new Error(`Unsupported transport URL scheme: ${{url}}`);
1015-
}}
1014+
throw new Error(`Unsupported transport URL scheme: ${url}`);
1015+
}
10161016
1017-
interface MottoDatagramTransport {{
1017+
interface MottoDatagramTransport {
10181018
connect(): Promise<void>;
10191019
reconnect(): Promise<void>;
10201020
sendDatagram(data: Uint8Array): Promise<void>;
10211021
receiveDatagram(): AsyncGenerator<Uint8Array>;
10221022
getState(): ConnectionState;
10231023
close(): Promise<void>;
1024-
}}
1024+
}
10251025
1026-
export class MottoWebTransport implements MottoDatagramTransport {{
1026+
export class MottoWebTransport implements MottoDatagramTransport {
10271027
private transport: any | null = null;
10281028
private state: ConnectionState = ConnectionState.Disconnected;
10291029
private retryAttempt = 0;
10301030
10311031
constructor(
10321032
private readonly url: string,
10331033
private readonly retryConfig: RetryConfig = DEFAULT_RETRY_CONFIG,
1034-
) {{}}
1034+
) {}
10351035
1036-
async connect(): Promise<void> {{
1036+
async connect(): Promise<void> {
10371037
if (this.state === ConnectionState.Connected) return;
10381038
this.state = ConnectionState.Connecting;
10391039
1040-
try {{
1040+
try {
10411041
const WebTransportCtor = (globalThis as any).WebTransport;
1042-
if (!WebTransportCtor) {{
1042+
if (!WebTransportCtor) {
10431043
throw new Error('WebTransport is unavailable in this runtime');
1044-
}}
1044+
}
10451045
this.transport = new WebTransportCtor(this.url);
10461046
await this.transport.ready;
10471047
this.state = ConnectionState.Connected;
10481048
this.retryAttempt = 0;
1049-
}} catch (error) {{
1049+
} catch (error) {
10501050
this.state = ConnectionState.Error;
10511051
throw error;
1052-
}}
1053-
}}
1052+
}
1053+
}
10541054
1055-
async reconnect(): Promise<void> {{
1056-
if (this.retryAttempt >= this.retryConfig.maxRetries) {{
1055+
async reconnect(): Promise<void> {
1056+
if (this.retryAttempt >= this.retryConfig.maxRetries) {
10571057
throw new Error('Max retry attempts exceeded');
1058-
}}
1058+
}
10591059
this.state = ConnectionState.Reconnecting;
10601060
const delayMs = calculateRetryDelay(this.retryAttempt, this.retryConfig);
10611061
this.retryAttempt += 1;
10621062
await new Promise((resolve) => setTimeout(resolve, delayMs));
10631063
await this.connect();
1064-
}}
1064+
}
10651065
1066-
async sendDatagram(data: Uint8Array): Promise<void> {{
1067-
if (!this.transport || this.state !== ConnectionState.Connected) {{
1066+
async sendDatagram(data: Uint8Array): Promise<void> {
1067+
if (!this.transport || this.state !== ConnectionState.Connected) {
10681068
throw new Error('Not connected');
1069-
}}
1069+
}
10701070
const writer = this.transport.datagrams.writable.getWriter();
1071-
try {{
1071+
try {
10721072
await writer.write(data);
1073-
}} finally {{
1073+
} finally {
10741074
writer.releaseLock();
1075-
}}
1076-
}}
1075+
}
1076+
}
10771077
1078-
async *receiveDatagram(): AsyncGenerator<Uint8Array> {{
1079-
if (!this.transport || this.state !== ConnectionState.Connected) {{
1078+
async *receiveDatagram(): AsyncGenerator<Uint8Array> {
1079+
if (!this.transport || this.state !== ConnectionState.Connected) {
10801080
throw new Error('Not connected');
1081-
}}
1081+
}
10821082
10831083
const reader = this.transport.datagrams.readable.getReader();
1084-
try {{
1085-
while (true) {{
1086-
const {{ value, done }} = await reader.read();
1084+
try {
1085+
while (true) {
1086+
const { value, done } = await reader.read();
10871087
if (done) break;
10881088
if (value) yield value;
1089-
}}
1090-
}} finally {{
1089+
}
1090+
} finally {
10911091
reader.releaseLock();
1092-
}}
1093-
}}
1092+
}
1093+
}
10941094
1095-
getState(): ConnectionState {{
1095+
getState(): ConnectionState {
10961096
return this.state;
1097-
}}
1097+
}
10981098
1099-
async close(): Promise<void> {{
1100-
if (this.transport) {{
1099+
async close(): Promise<void> {
1100+
if (this.transport) {
11011101
this.transport.close();
11021102
this.transport = null;
1103-
}}
1103+
}
11041104
this.state = ConnectionState.Disconnected;
1105-
}}
1106-
}}
1105+
}
1106+
}
11071107
1108-
export class MottoWebSocket implements MottoDatagramTransport {{
1108+
export class MottoWebSocket implements MottoDatagramTransport {
11091109
private socket: any | null = null;
11101110
private state: ConnectionState = ConnectionState.Disconnected;
11111111
private retryAttempt = 0;
@@ -1115,146 +1115,146 @@ export class MottoWebSocket implements MottoDatagramTransport {{
11151115
constructor(
11161116
private readonly url: string,
11171117
private readonly retryConfig: RetryConfig = DEFAULT_RETRY_CONFIG,
1118-
) {{}}
1118+
) {}
11191119
1120-
async connect(): Promise<void> {{
1120+
async connect(): Promise<void> {
11211121
if (this.state === ConnectionState.Connected) return;
11221122
this.state = ConnectionState.Connecting;
11231123
11241124
const WebSocketCtor = (globalThis as any).WebSocket;
1125-
if (!WebSocketCtor) {{
1125+
if (!WebSocketCtor) {
11261126
this.state = ConnectionState.Error;
11271127
throw new Error('WebSocket is unavailable in this runtime');
1128-
}}
1128+
}
11291129
1130-
await new Promise<void>((resolve, reject) => {{
1130+
await new Promise<void>((resolve, reject) => {
11311131
const socket = new WebSocketCtor(this.url);
11321132
socket.binaryType = 'arraybuffer';
11331133
1134-
const onOpen = () => {{
1134+
const onOpen = () => {
11351135
cleanup();
11361136
this.socket = socket;
11371137
this.state = ConnectionState.Connected;
11381138
this.retryAttempt = 0;
11391139
resolve();
1140-
}};
1140+
};
11411141
1142-
const onError = () => {{
1142+
const onError = () => {
11431143
cleanup();
11441144
this.state = ConnectionState.Error;
11451145
reject(new Error('WebSocket connection failed'));
1146-
}};
1146+
};
11471147
1148-
const onClose = () => {{
1148+
const onClose = () => {
11491149
this.state = ConnectionState.Disconnected;
11501150
this.socket = null;
1151-
while (this.recvResolvers.length > 0) {{
1151+
while (this.recvResolvers.length > 0) {
11521152
const resolveNext = this.recvResolvers.shift();
11531153
if (resolveNext) resolveNext(null);
1154-
}}
1155-
}};
1154+
}
1155+
};
11561156
1157-
const onMessage = (event: any) => {{
1157+
const onMessage = (event: any) => {
11581158
const data = event.data;
11591159
if (typeof data === 'string') return;
11601160
const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);
11611161
const waiter = this.recvResolvers.shift();
11621162
if (waiter) waiter(bytes);
11631163
else this.recvQueue.push(bytes);
1164-
}};
1164+
};
11651165
1166-
const cleanup = () => {{
1166+
const cleanup = () => {
11671167
socket.removeEventListener('open', onOpen);
11681168
socket.removeEventListener('error', onError);
1169-
}};
1169+
};
11701170
1171-
socket.addEventListener('open', onOpen, {{ once: true }});
1172-
socket.addEventListener('error', onError, {{ once: true }});
1171+
socket.addEventListener('open', onOpen, { once: true });
1172+
socket.addEventListener('error', onError, { once: true });
11731173
socket.addEventListener('close', onClose);
11741174
socket.addEventListener('message', onMessage);
1175-
}});
1176-
}}
1175+
});
1176+
}
11771177
1178-
async reconnect(): Promise<void> {{
1179-
if (this.retryAttempt >= this.retryConfig.maxRetries) {{
1178+
async reconnect(): Promise<void> {
1179+
if (this.retryAttempt >= this.retryConfig.maxRetries) {
11801180
throw new Error('Max retry attempts exceeded');
1181-
}}
1181+
}
11821182
this.state = ConnectionState.Reconnecting;
11831183
const delayMs = calculateRetryDelay(this.retryAttempt, this.retryConfig);
11841184
this.retryAttempt += 1;
11851185
await new Promise((resolve) => setTimeout(resolve, delayMs));
11861186
await this.connect();
1187-
}}
1187+
}
11881188
1189-
async sendDatagram(data: Uint8Array): Promise<void> {{
1190-
if (!this.socket || this.state !== ConnectionState.Connected) {{
1189+
async sendDatagram(data: Uint8Array): Promise<void> {
1190+
if (!this.socket || this.state !== ConnectionState.Connected) {
11911191
throw new Error('Not connected');
1192-
}}
1192+
}
11931193
this.socket.send(data);
1194-
}}
1194+
}
11951195
1196-
async *receiveDatagram(): AsyncGenerator<Uint8Array> {{
1197-
while (this.state === ConnectionState.Connected || this.recvQueue.length > 0) {{
1198-
if (this.recvQueue.length > 0) {{
1196+
async *receiveDatagram(): AsyncGenerator<Uint8Array> {
1197+
while (this.state === ConnectionState.Connected || this.recvQueue.length > 0) {
1198+
if (this.recvQueue.length > 0) {
11991199
yield this.recvQueue.shift()!;
12001200
continue;
1201-
}}
1201+
}
12021202
1203-
const data = await new Promise<Uint8Array | null>((resolve) => {{
1203+
const data = await new Promise<Uint8Array | null>((resolve) => {
12041204
this.recvResolvers.push(resolve);
1205-
}});
1205+
});
12061206
12071207
if (!data) break;
12081208
yield data;
1209-
}}
1210-
}}
1209+
}
1210+
}
12111211
1212-
getState(): ConnectionState {{
1212+
getState(): ConnectionState {
12131213
return this.state;
1214-
}}
1214+
}
12151215
1216-
async close(): Promise<void> {{
1217-
if (this.socket) {{
1216+
async close(): Promise<void> {
1217+
if (this.socket) {
12181218
this.socket.close();
12191219
this.socket = null;
1220-
}}
1220+
}
12211221
this.state = ConnectionState.Disconnected;
1222-
}}
1223-
}}
1222+
}
1223+
}
12241224
1225-
export class MottoTransport implements MottoDatagramTransport {{
1225+
export class MottoTransport implements MottoDatagramTransport {
12261226
private readonly inner: MottoDatagramTransport;
12271227
1228-
constructor(url: string, retryConfig: RetryConfig = DEFAULT_RETRY_CONFIG) {{
1228+
constructor(url: string, retryConfig: RetryConfig = DEFAULT_RETRY_CONFIG) {
12291229
const kind = transportKindForUrl(url);
12301230
this.inner = kind === 'webtransport'
12311231
? new MottoWebTransport(url, retryConfig)
12321232
: new MottoWebSocket(url, retryConfig);
1233-
}}
1233+
}
12341234
1235-
connect(): Promise<void> {{
1235+
connect(): Promise<void> {
12361236
return this.inner.connect();
1237-
}}
1237+
}
12381238
1239-
reconnect(): Promise<void> {{
1239+
reconnect(): Promise<void> {
12401240
return this.inner.reconnect();
1241-
}}
1241+
}
12421242
1243-
sendDatagram(data: Uint8Array): Promise<void> {{
1243+
sendDatagram(data: Uint8Array): Promise<void> {
12441244
return this.inner.sendDatagram(data);
1245-
}}
1245+
}
12461246
1247-
receiveDatagram(): AsyncGenerator<Uint8Array> {{
1247+
receiveDatagram(): AsyncGenerator<Uint8Array> {
12481248
return this.inner.receiveDatagram();
1249-
}}
1249+
}
12501250
1251-
getState(): ConnectionState {{
1251+
getState(): ConnectionState {
12521252
return this.inner.getState();
1253-
}}
1253+
}
12541254
1255-
close(): Promise<void> {{
1255+
close(): Promise<void> {
12561256
return this.inner.close();
1257-
}}
1257+
}
12581258
}"#
12591259
}
12601260
};

src/emitters/unity.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -720,8 +720,8 @@ fn generate_runtime(
720720

721721
let content = format!(
722722
r#"{}
723+
using System;
723724
using System.Threading.Tasks;
724-
using UnityEngine;
725725
726726
namespace Motto.SDK
727727
{{
@@ -750,8 +750,8 @@ namespace Motto.SDK
750750
{{
751751
public static int CalculateDelay(int attempt, RetryConfig config)
752752
{{
753-
var delay = config.InitialDelayMs * Mathf.Pow(config.BackoffMultiplier, attempt);
754-
return Mathf.Min((int)delay, config.MaxDelayMs);
753+
var delay = config.InitialDelayMs * Math.Pow(config.BackoffMultiplier, attempt);
754+
return Math.Min((int)delay, config.MaxDelayMs);
755755
}}
756756
}}
757757

0 commit comments

Comments
 (0)