Skip to content

Commit c7d9fe0

Browse files
Merge pull request #324 from swiftwasm/katei/move-runtime-files-template
Apply tsc check for `Plugins/PackageToJS/Templates` files
2 parents fdeefea + 8df1a9d commit c7d9fe0

File tree

10 files changed

+74
-171
lines changed

10 files changed

+74
-171
lines changed

.editorconfig

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
root = true
2+
3+
[*]
4+
indent_style = space
5+
indent_size = 4
6+
trim_trailing_whitespace = true
7+
insert_final_newline = true

Plugins/PackageToJS/Templates/instantiate.js

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
// @ts-check
2-
// @ts-ignore
32
import { SwiftRuntime } from "./runtime.js"
43

54
export const MODULE_PATH = "@PACKAGE_TO_JS_MODULE_PATH@";

Plugins/PackageToJS/Templates/platforms/browser.js

+2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
import { MODULE_PATH /* #if USE_SHARED_MEMORY */, MEMORY_TYPE /* #endif */} from "../instantiate.js"
33
/* #if IS_WASI */
44
/* #if USE_WASI_CDN */
5+
// @ts-ignore
56
import { WASI, File, OpenFile, ConsoleStdout, PreopenDirectory } from 'https://cdn.jsdelivr.net/npm/@bjorn3/[email protected]/+esm';
67
/* #else */
8+
// @ts-ignore
79
import { WASI, File, OpenFile, ConsoleStdout, PreopenDirectory } from '@bjorn3/browser_wasi_shim';
810
/* #endif */
911
/* #endif */

Plugins/PackageToJS/Templates/runtime.d.ts

+3-53
Original file line numberDiff line numberDiff line change
@@ -18,58 +18,8 @@ declare class Memory {
1818
writeFloat64: (ptr: pointer, value: number) => void;
1919
}
2020

21-
declare const enum Kind {
22-
Boolean = 0,
23-
String = 1,
24-
Number = 2,
25-
Object = 3,
26-
Null = 4,
27-
Undefined = 5,
28-
Function = 6,
29-
Symbol = 7,
30-
BigInt = 8
31-
}
32-
3321
type ref = number;
3422
type pointer = number;
35-
type bool = number;
36-
type JavaScriptValueKind = number;
37-
type JavaScriptValueKindAndFlags = number;
38-
interface ImportedFunctions {
39-
swjs_set_prop(ref: number, name: number, kind: Kind, payload1: number, payload2: number): void;
40-
swjs_get_prop(ref: number, name: number, payload1_ptr: pointer, payload2_ptr: pointer): JavaScriptValueKind;
41-
swjs_set_subscript(ref: number, index: number, kind: Kind, payload1: number, payload2: number): void;
42-
swjs_get_subscript(ref: number, index: number, payload1_ptr: pointer, payload2_ptr: pointer): JavaScriptValueKind;
43-
swjs_encode_string(ref: number, bytes_ptr_result: pointer): number;
44-
swjs_decode_string(bytes_ptr: pointer, length: number): number;
45-
swjs_load_string(ref: number, buffer: pointer): void;
46-
swjs_call_function(ref: number, argv: pointer, argc: number, payload1_ptr: pointer, payload2_ptr: pointer): JavaScriptValueKindAndFlags;
47-
swjs_call_function_no_catch(ref: number, argv: pointer, argc: number, payload1_ptr: pointer, payload2_ptr: pointer): JavaScriptValueKindAndFlags;
48-
swjs_call_function_with_this(obj_ref: ref, func_ref: ref, argv: pointer, argc: number, payload1_ptr: pointer, payload2_ptr: pointer): JavaScriptValueKindAndFlags;
49-
swjs_call_function_with_this_no_catch(obj_ref: ref, func_ref: ref, argv: pointer, argc: number, payload1_ptr: pointer, payload2_ptr: pointer): JavaScriptValueKindAndFlags;
50-
swjs_call_new(ref: number, argv: pointer, argc: number): number;
51-
swjs_call_throwing_new(ref: number, argv: pointer, argc: number, exception_kind_ptr: pointer, exception_payload1_ptr: pointer, exception_payload2_ptr: pointer): number;
52-
swjs_instanceof(obj_ref: ref, constructor_ref: ref): boolean;
53-
swjs_value_equals(lhs_ref: ref, rhs_ref: ref): boolean;
54-
swjs_create_function(host_func_id: number, line: number, file: ref): number;
55-
swjs_create_typed_array(constructor_ref: ref, elementsPtr: pointer, length: number): number;
56-
swjs_create_object(): number;
57-
swjs_load_typed_array(ref: ref, buffer: pointer): void;
58-
swjs_release(ref: number): void;
59-
swjs_release_remote(tid: number, ref: number): void;
60-
swjs_i64_to_bigint(value: bigint, signed: bool): ref;
61-
swjs_bigint_to_i64(ref: ref, signed: bool): bigint;
62-
swjs_i64_to_bigint_slow(lower: number, upper: number, signed: bool): ref;
63-
swjs_unsafe_event_loop_yield: () => void;
64-
swjs_send_job_to_main_thread: (unowned_job: number) => void;
65-
swjs_listen_message_from_main_thread: () => void;
66-
swjs_wake_up_worker_thread: (tid: number) => void;
67-
swjs_listen_message_from_worker_thread: (tid: number) => void;
68-
swjs_terminate_worker_thread: (tid: number) => void;
69-
swjs_get_worker_thread_id: () => number;
70-
swjs_request_sending_object: (sending_object: ref, transferring_objects: pointer, transferring_objects_count: number, object_source_tid: number, sending_context: pointer) => void;
71-
swjs_request_sending_objects: (sending_objects: pointer, sending_objects_count: number, transferring_objects: pointer, transferring_objects_count: number, object_source_tid: number, sending_context: pointer) => void;
72-
}
7323

7424
/**
7525
* A thread channel is a set of functions that are used to communicate between
@@ -254,11 +204,11 @@ declare class SwiftRuntime {
254204
private get closureDeallocator();
255205
private callHostFunction;
256206
/** @deprecated Use `wasmImports` instead */
257-
importObjects: () => ImportedFunctions;
258-
get wasmImports(): ImportedFunctions;
207+
importObjects: () => WebAssembly.ModuleImports;
208+
get wasmImports(): WebAssembly.ModuleImports;
259209
private postMessageToMainThread;
260210
private postMessageToWorkerThread;
261211
}
262212

263213
export { SwiftRuntime };
264-
export type { SwiftRuntimeOptions };
214+
export type { SwiftRuntimeOptions, SwiftRuntimeThreadChannel };
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"compilerOptions": {
3+
"module": "esnext",
4+
"noEmit": true,
5+
"allowJs": true,
6+
"skipLibCheck": true,
7+
"moduleResolution": "node"
8+
},
9+
"include": ["**/*.d.ts", "**/*.js"]
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import Testing
2+
import Foundation
3+
@testable import PackageToJS
4+
5+
@Suite struct TemplatesTests {
6+
static let templatesPath = URL(fileURLWithPath: #filePath)
7+
.deletingLastPathComponent()
8+
.deletingLastPathComponent()
9+
.appendingPathComponent("Templates")
10+
11+
/// `npx tsc -p Templates/tsconfig.json`
12+
@Test func tscCheck() throws {
13+
let tsc = Process()
14+
tsc.executableURL = try which("npx")
15+
tsc.arguments = ["tsc", "-p", Self.templatesPath.appending(path: "tsconfig.json").path]
16+
try tsc.run()
17+
tsc.waitUntilExit()
18+
#expect(tsc.terminationStatus == 0)
19+
}
20+
}

Runtime/src/index.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ import {
55
ref,
66
pointer,
77
TypedArray,
8-
ImportedFunctions,
98
MAIN_THREAD_TID,
109
} from "./types.js";
1110
import * as JSValue from "./js-value.js";
1211
import { Memory } from "./memory.js";
1312
import { deserializeError, MainToWorkerMessage, MessageBroker, ResponseMessage, ITCInterface, serializeError, SwiftRuntimeThreadChannel, WorkerToMainMessage } from "./itc.js";
1413
import { decodeObjectRefs } from "./js-value.js";
14+
export { SwiftRuntimeThreadChannel };
1515

1616
export type SwiftRuntimeOptions = {
1717
/**
@@ -181,7 +181,7 @@ export class SwiftRuntime {
181181
/** @deprecated Use `wasmImports` instead */
182182
importObjects = () => this.wasmImports;
183183

184-
get wasmImports(): ImportedFunctions {
184+
get wasmImports(): WebAssembly.ModuleImports {
185185
let broker: MessageBroker | null = null;
186186
const getMessageBroker = (threadChannel: SwiftRuntimeThreadChannel) => {
187187
if (broker) return broker;
@@ -575,7 +575,7 @@ export class SwiftRuntime {
575575
return BigInt.asIntN(64, object);
576576
}
577577
},
578-
swjs_i64_to_bigint_slow: (lower, upper, signed) => {
578+
swjs_i64_to_bigint_slow: (lower: number, upper: number, signed: number) => {
579579
const value =
580580
BigInt.asUintN(32, BigInt(lower)) +
581581
(BigInt.asUintN(32, BigInt(upper)) << BigInt(32));
@@ -586,7 +586,7 @@ export class SwiftRuntime {
586586
swjs_unsafe_event_loop_yield: () => {
587587
throw new UnsafeEventLoopYield();
588588
},
589-
swjs_send_job_to_main_thread: (unowned_job) => {
589+
swjs_send_job_to_main_thread: (unowned_job: number) => {
590590
this.postMessageToMainThread({ type: "job", data: unowned_job });
591591
},
592592
swjs_listen_message_from_main_thread: () => {
@@ -616,10 +616,10 @@ export class SwiftRuntime {
616616
}
617617
});
618618
},
619-
swjs_wake_up_worker_thread: (tid) => {
619+
swjs_wake_up_worker_thread: (tid: number) => {
620620
this.postMessageToWorkerThread(tid, { type: "wake" });
621621
},
622-
swjs_listen_message_from_worker_thread: (tid) => {
622+
swjs_listen_message_from_worker_thread: (tid: number) => {
623623
const threadChannel = this.options.threadChannel;
624624
if (!(threadChannel && "listenMessageFromWorkerThread" in threadChannel)) {
625625
throw new Error(
@@ -648,7 +648,7 @@ export class SwiftRuntime {
648648
},
649649
);
650650
},
651-
swjs_terminate_worker_thread: (tid) => {
651+
swjs_terminate_worker_thread: (tid: number) => {
652652
const threadChannel = this.options.threadChannel;
653653
if (threadChannel && "terminateWorkerThread" in threadChannel) {
654654
threadChannel.terminateWorkerThread?.(tid);

Runtime/src/types.ts

-110
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import * as JSValue from "./js-value.js";
2-
31
export type ref = number;
42
export type pointer = number;
53
export type bool = number;
@@ -26,114 +24,6 @@ export interface ExportedFunctions {
2624
swjs_receive_error(error: ref, context: number): void;
2725
}
2826

29-
export interface ImportedFunctions {
30-
swjs_set_prop(
31-
ref: number,
32-
name: number,
33-
kind: JSValue.Kind,
34-
payload1: number,
35-
payload2: number
36-
): void;
37-
swjs_get_prop(
38-
ref: number,
39-
name: number,
40-
payload1_ptr: pointer,
41-
payload2_ptr: pointer
42-
): JavaScriptValueKind;
43-
swjs_set_subscript(
44-
ref: number,
45-
index: number,
46-
kind: JSValue.Kind,
47-
payload1: number,
48-
payload2: number
49-
): void;
50-
swjs_get_subscript(
51-
ref: number,
52-
index: number,
53-
payload1_ptr: pointer,
54-
payload2_ptr: pointer
55-
): JavaScriptValueKind;
56-
swjs_encode_string(ref: number, bytes_ptr_result: pointer): number;
57-
swjs_decode_string(bytes_ptr: pointer, length: number): number;
58-
swjs_load_string(ref: number, buffer: pointer): void;
59-
swjs_call_function(
60-
ref: number,
61-
argv: pointer,
62-
argc: number,
63-
payload1_ptr: pointer,
64-
payload2_ptr: pointer
65-
): JavaScriptValueKindAndFlags;
66-
swjs_call_function_no_catch(
67-
ref: number,
68-
argv: pointer,
69-
argc: number,
70-
payload1_ptr: pointer,
71-
payload2_ptr: pointer
72-
): JavaScriptValueKindAndFlags;
73-
swjs_call_function_with_this(
74-
obj_ref: ref,
75-
func_ref: ref,
76-
argv: pointer,
77-
argc: number,
78-
payload1_ptr: pointer,
79-
payload2_ptr: pointer
80-
): JavaScriptValueKindAndFlags;
81-
swjs_call_function_with_this_no_catch(
82-
obj_ref: ref,
83-
func_ref: ref,
84-
argv: pointer,
85-
argc: number,
86-
payload1_ptr: pointer,
87-
payload2_ptr: pointer
88-
): JavaScriptValueKindAndFlags;
89-
swjs_call_new(ref: number, argv: pointer, argc: number): number;
90-
swjs_call_throwing_new(
91-
ref: number,
92-
argv: pointer,
93-
argc: number,
94-
exception_kind_ptr: pointer,
95-
exception_payload1_ptr: pointer,
96-
exception_payload2_ptr: pointer
97-
): number;
98-
swjs_instanceof(obj_ref: ref, constructor_ref: ref): boolean;
99-
swjs_value_equals(lhs_ref: ref, rhs_ref: ref): boolean;
100-
swjs_create_function(host_func_id: number, line: number, file: ref): number;
101-
swjs_create_typed_array(
102-
constructor_ref: ref,
103-
elementsPtr: pointer,
104-
length: number
105-
): number;
106-
swjs_create_object(): number;
107-
swjs_load_typed_array(ref: ref, buffer: pointer): void;
108-
swjs_release(ref: number): void;
109-
swjs_release_remote(tid: number, ref: number): void;
110-
swjs_i64_to_bigint(value: bigint, signed: bool): ref;
111-
swjs_bigint_to_i64(ref: ref, signed: bool): bigint;
112-
swjs_i64_to_bigint_slow(lower: number, upper: number, signed: bool): ref;
113-
swjs_unsafe_event_loop_yield: () => void;
114-
swjs_send_job_to_main_thread: (unowned_job: number) => void;
115-
swjs_listen_message_from_main_thread: () => void;
116-
swjs_wake_up_worker_thread: (tid: number) => void;
117-
swjs_listen_message_from_worker_thread: (tid: number) => void;
118-
swjs_terminate_worker_thread: (tid: number) => void;
119-
swjs_get_worker_thread_id: () => number;
120-
swjs_request_sending_object: (
121-
sending_object: ref,
122-
transferring_objects: pointer,
123-
transferring_objects_count: number,
124-
object_source_tid: number,
125-
sending_context: pointer,
126-
) => void;
127-
swjs_request_sending_objects: (
128-
sending_objects: pointer,
129-
sending_objects_count: number,
130-
transferring_objects: pointer,
131-
transferring_objects_count: number,
132-
object_source_tid: number,
133-
sending_context: pointer,
134-
) => void;
135-
}
136-
13727
export const enum LibraryFeatures {
13828
WeakRefs = 1 << 0,
13929
}

package-lock.json

+23
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@
3434
"author": "swiftwasm",
3535
"license": "MIT",
3636
"devDependencies": {
37+
"@bjorn3/browser_wasi_shim": "^0.4.1",
3738
"@rollup/plugin-typescript": "^12.1.2",
39+
"@types/node": "^22.13.14",
3840
"playwright": "^1.51.0",
3941
"prettier": "3.5.3",
4042
"rollup": "^4.37.0",

0 commit comments

Comments
 (0)