@swiftbrowser/cli 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +340 -65
  2. package/dist/assetSymbols.d.ts +25 -0
  3. package/dist/assetSymbols.js +218 -0
  4. package/dist/assetSymbols.js.map +1 -0
  5. package/dist/build.d.ts +27 -2
  6. package/dist/build.js +71 -14
  7. package/dist/build.js.map +1 -1
  8. package/dist/buildSettings.d.ts +15 -0
  9. package/dist/buildSettings.js +74 -0
  10. package/dist/buildSettings.js.map +1 -0
  11. package/dist/cli.d.ts +6 -0
  12. package/dist/cli.js +66 -11
  13. package/dist/cli.js.map +1 -1
  14. package/dist/commands/build.js +6 -5
  15. package/dist/commands/build.js.map +1 -1
  16. package/dist/commands/check.js +2 -2
  17. package/dist/commands/check.js.map +1 -1
  18. package/dist/commands/dev.d.ts +5 -2
  19. package/dist/commands/dev.js +19 -13
  20. package/dist/commands/dev.js.map +1 -1
  21. package/dist/commands/init.d.ts +18 -0
  22. package/dist/commands/init.js +59 -0
  23. package/dist/commands/init.js.map +1 -0
  24. package/dist/commands/kit.d.ts +3 -0
  25. package/dist/commands/kit.js +21 -0
  26. package/dist/commands/kit.js.map +1 -0
  27. package/dist/commands/shared.d.ts +28 -4
  28. package/dist/commands/shared.js +106 -11
  29. package/dist/commands/shared.js.map +1 -1
  30. package/dist/commands/test.d.ts +22 -0
  31. package/dist/commands/test.js +95 -0
  32. package/dist/commands/test.js.map +1 -0
  33. package/dist/compat.d.ts +44 -6
  34. package/dist/compat.js +64 -36
  35. package/dist/compat.js.map +1 -1
  36. package/dist/config.d.ts +48 -10
  37. package/dist/config.js +64 -8
  38. package/dist/config.js.map +1 -1
  39. package/dist/coreml.d.ts +194 -0
  40. package/dist/coreml.js +626 -0
  41. package/dist/coreml.js.map +1 -0
  42. package/dist/icu.d.ts +17 -4
  43. package/dist/icu.js +32 -18
  44. package/dist/icu.js.map +1 -1
  45. package/dist/kit.d.ts +133 -0
  46. package/dist/kit.js +403 -0
  47. package/dist/kit.js.map +1 -0
  48. package/dist/objc.d.ts +31 -0
  49. package/dist/objc.js +319 -0
  50. package/dist/objc.js.map +1 -0
  51. package/dist/packagePatches.d.ts +24 -0
  52. package/dist/packagePatches.js +107 -0
  53. package/dist/packagePatches.js.map +1 -0
  54. package/dist/packages.d.ts +59 -0
  55. package/dist/packages.js +149 -0
  56. package/dist/packages.js.map +1 -0
  57. package/dist/project.d.ts +97 -4
  58. package/dist/project.js +157 -20
  59. package/dist/project.js.map +1 -1
  60. package/dist/protobuf.d.ts +62 -0
  61. package/dist/protobuf.js +233 -0
  62. package/dist/protobuf.js.map +1 -0
  63. package/dist/stage.d.ts +175 -28
  64. package/dist/stage.js +551 -85
  65. package/dist/stage.js.map +1 -1
  66. package/dist/strings.d.ts +44 -0
  67. package/dist/strings.js +386 -0
  68. package/dist/strings.js.map +1 -0
  69. package/dist/template.d.ts +39 -0
  70. package/dist/template.js +678 -0
  71. package/dist/template.js.map +1 -0
  72. package/dist/testRunner.d.ts +1 -0
  73. package/dist/testRunner.js +44 -0
  74. package/dist/testRunner.js.map +1 -0
  75. package/dist/threadStacks.d.ts +14 -0
  76. package/dist/threadStacks.js +78 -0
  77. package/dist/threadStacks.js.map +1 -0
  78. package/dist/toolchain.d.ts +7 -1
  79. package/dist/toolchain.js +8 -2
  80. package/dist/toolchain.js.map +1 -1
  81. package/dist/urlSchemes.d.ts +11 -0
  82. package/dist/urlSchemes.js +58 -0
  83. package/dist/urlSchemes.js.map +1 -0
  84. package/dist/vendor.d.ts +109 -0
  85. package/dist/vendor.js +440 -0
  86. package/dist/vendor.js.map +1 -0
  87. package/dist/wasm.d.ts +28 -0
  88. package/dist/wasm.js +84 -0
  89. package/dist/wasm.js.map +1 -0
  90. package/package.json +7 -6
package/dist/kit.js ADDED
@@ -0,0 +1,403 @@
1
+ // The shim compiled once: its modules and objects for WebAssembly, and the
2
+ // host executable of its macros, kept in the cache so that an app's build
3
+ // compiles the app (and its packages) only.
4
+ //
5
+ // A kit is built from the shim's sources the first time a build needs it,
6
+ // for one shim, toolchain and Swift SDK (`kitId`). It holds, per target of
7
+ // the shim's library products, the compiled module (`.swiftmodule`) and an
8
+ // archive of its objects, plus a SwiftPM package named SwiftBrowser with the
9
+ // same products as the shim's: one empty target per shim target that links
10
+ // its archive whole, with the shim's dependencies between them. The staged
11
+ // app depends on that package in place of the shim (stage.ts, vendor.ts), so
12
+ // SwiftPM links what the app's imports need and nothing else, and the build
13
+ // finds the modules through `-I` (`kitSwiftFlags`).
14
+ //
15
+ // Released CLIs come with their kit: @swiftbrowser/kit holds its modules and
16
+ // archives, and one small package per host (@swiftbrowser/kit-linux-x64 and
17
+ // so on) its macros (`packagedKit`). The CLI copies the one made for its shim
18
+ // into the cache, checks that the toolchain can read its modules, and builds
19
+ // a kit only when there is none to use.
20
+ import { createHash } from 'node:crypto';
21
+ import { createRequire } from 'node:module';
22
+ import { chmodSync, copyFileSync, cpSync, existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, statSync, writeFileSync } from 'node:fs';
23
+ import path from 'node:path';
24
+ import { run } from './build.js';
25
+ import { CliError } from './log.js';
26
+ import { WASM_SDK, WASM_SDK_CHECKSUM, cacheDir, toolchainEnv } from './toolchain.js';
27
+ /** Bumped when the layout of a kit, or how one is built, changes. */
28
+ export const KIT_FORMAT = 1;
29
+ /** The target triple a kit's modules and archives are built for. */
30
+ export const KIT_TRIPLE = 'wasm32-unknown-wasip1';
31
+ /** Turned off with SWIFTBROWSER_KIT=0: the build compiles the shim from its sources, as before kits. */
32
+ export function kitEnabled(env = process.env) {
33
+ return env['SWIFTBROWSER_KIT'] !== '0';
34
+ }
35
+ export function kitsDir() {
36
+ return path.join(cacheDir(), 'kits');
37
+ }
38
+ /**
39
+ * The files a kit is built from: the shim's manifest and sources, as
40
+ * @swiftbrowser/swift publishes them (so a kit made for a release has the id
41
+ * the release computes).
42
+ */
43
+ export function shimFiles(swiftPackagePath) {
44
+ const files = ['Package.swift'];
45
+ const walk = (dir) => {
46
+ for (const entry of readdirSync(path.join(swiftPackagePath, dir), { withFileTypes: true })) {
47
+ const rel = path.join(dir, entry.name);
48
+ if (entry.isDirectory())
49
+ walk(rel);
50
+ else if (entry.isFile())
51
+ files.push(rel);
52
+ }
53
+ };
54
+ walk('Sources');
55
+ return files.sort();
56
+ }
57
+ /** Names the kit for this shim, toolchain and SDK: any change to one of them is another kit. */
58
+ export function kitId(swiftPackagePath, toolchain, sdkChecksum = WASM_SDK_CHECKSUM) {
59
+ const hash = createHash('sha256').update(`kit ${KIT_FORMAT}\nswift ${toolchain.version}\nsdk ${sdkChecksum}\n`);
60
+ for (const file of shimFiles(swiftPackagePath)) {
61
+ hash.update(`${file.split(path.sep).join('/')}\n`);
62
+ hash.update(readFileSync(path.join(swiftPackagePath, file)));
63
+ hash.update('\n');
64
+ }
65
+ return hash.digest('hex').slice(0, 20);
66
+ }
67
+ /** The shim's library products, the targets they need (in dependency order) and its macros. */
68
+ export function shimGraph(dump) {
69
+ const byName = new Map(dump.targets.map((target) => [target.name, target]));
70
+ const macros = dump.targets.filter((target) => target.type === 'macro').map((target) => target.name);
71
+ const products = {};
72
+ for (const product of dump.products) {
73
+ if (product.type['library'] === undefined)
74
+ continue;
75
+ products[product.name] = product.targets;
76
+ }
77
+ const targets = {};
78
+ const visit = (name) => {
79
+ const target = byName.get(name);
80
+ if (!target || target.type !== 'regular' || targets[name])
81
+ return;
82
+ const dependencies = target.dependencies.flatMap((dependency) => {
83
+ const local = 'byName' in dependency ? dependency.byName?.[0] : 'target' in dependency ? dependency.target?.[0] : undefined;
84
+ return local && byName.get(local)?.type === 'regular' ? [local] : [];
85
+ });
86
+ for (const dependency of dependencies)
87
+ visit(dependency);
88
+ targets[name] = dependencies;
89
+ };
90
+ for (const product of Object.values(products))
91
+ for (const target of product)
92
+ visit(target);
93
+ return { targets, products, macros };
94
+ }
95
+ /** The empty target that stands in for one of the shim's. */
96
+ export function stubTarget(target) {
97
+ return `SwiftBrowserKit_${target}`;
98
+ }
99
+ export function kitArchive(dir, target) {
100
+ return path.join(dir, KIT_TRIPLE, 'lib', `lib${target}.a`);
101
+ }
102
+ export function kitModules(dir) {
103
+ return path.join(dir, KIT_TRIPLE, 'Modules');
104
+ }
105
+ export function kitPlugin(dir, macro) {
106
+ return path.join(dir, 'plugins', macro);
107
+ }
108
+ /**
109
+ * The manifest of the package that stands in for the shim. Each stub is an
110
+ * empty C target (no Swift module of its own to shadow the kit's), and links
111
+ * its archive whole, as SwiftPM links a target's objects: an object that only
112
+ * registers conformances is kept.
113
+ */
114
+ export function kitPackageManifest(dir, manifest) {
115
+ const products = Object.entries(manifest.products)
116
+ .filter(([, targets]) => targets.every((target) => manifest.targets[target]))
117
+ .map(([name, targets]) => ` .library(name: ${JSON.stringify(name)}, targets: [${targets.map((t) => JSON.stringify(stubTarget(t))).join(', ')}]),`);
118
+ const targets = Object.entries(manifest.targets).map(([name, dependencies]) => {
119
+ const flags = ['-Xlinker', '--whole-archive', '-Xlinker', kitArchive(dir, name), '-Xlinker', '--no-whole-archive'];
120
+ return ` .target(name: ${JSON.stringify(stubTarget(name))}, dependencies: [${dependencies.map((d) => JSON.stringify(stubTarget(d))).join(', ')}], path: ${JSON.stringify(`Sources/${name}`)},
121
+ linkerSettings: [.unsafeFlags([${flags.map((flag) => JSON.stringify(flag)).join(', ')}], .when(platforms: [.wasi]))]),`;
122
+ });
123
+ return `// swift-tools-version: 6.0
124
+ // Generated by @swiftbrowser/cli (kit.ts): stands in for the SwiftBrowser
125
+ // package with the shim compiled ahead of time. Each target links one module's
126
+ // objects; the modules themselves are found through -I.
127
+ import PackageDescription
128
+
129
+ let package = Package(
130
+ name: "SwiftBrowser",
131
+ products: [
132
+ ${products.join('\n')}
133
+ ],
134
+ targets: [
135
+ ${targets.join('\n')}
136
+ ]
137
+ )
138
+ `;
139
+ }
140
+ /** Writes the stand-in package into the kit (again when the kit moved). */
141
+ export function writeKitPackage(dir, manifest) {
142
+ const pkg = path.join(dir, 'package');
143
+ rmSync(pkg, { recursive: true, force: true });
144
+ for (const target of Object.keys(manifest.targets)) {
145
+ const sources = path.join(pkg, 'Sources', target);
146
+ mkdirSync(path.join(sources, 'include'), { recursive: true });
147
+ writeFileSync(path.join(sources, 'stub.c'), `// Empty: ${target}'s objects are in ${path.relative(sources, kitArchive(dir, target))}.\n`);
148
+ writeFileSync(path.join(sources, 'include', 'stub.h'), '');
149
+ }
150
+ writeFileSync(path.join(pkg, 'Package.swift'), kitPackageManifest(dir, manifest));
151
+ return pkg;
152
+ }
153
+ /** The swiftc flags that find the kit's modules and macros (the build adds them with -Xswiftc). */
154
+ export function kitSwiftFlags(kit) {
155
+ return [
156
+ '-I', kitModules(kit.dir),
157
+ ...kit.manifest.macros.flatMap((macro) => ['-load-plugin-executable', `${kitPlugin(kit.dir, macro)}#${macro}`]),
158
+ ];
159
+ }
160
+ /** The kit with this id, if it was built (its package rewritten if the kit moved). */
161
+ export function findKit(id, toolchain) {
162
+ const dir = path.join(kitsDir(), id);
163
+ const file = path.join(dir, 'kit.json');
164
+ if (!existsSync(file))
165
+ return null;
166
+ let manifest;
167
+ try {
168
+ manifest = JSON.parse(readFileSync(file, 'utf8'));
169
+ }
170
+ catch {
171
+ return null;
172
+ }
173
+ if (manifest.format !== KIT_FORMAT || manifest.swift !== toolchain.version || manifest.sdk !== WASM_SDK_CHECKSUM)
174
+ return null;
175
+ const pkg = path.join(dir, 'package');
176
+ if (manifest.dir !== dir || !existsSync(path.join(pkg, 'Package.swift'))) {
177
+ manifest = { ...manifest, dir };
178
+ writeKitPackage(dir, manifest);
179
+ writeFileSync(file, `${JSON.stringify(manifest, null, 2)}\n`);
180
+ }
181
+ return { dir, manifest, package: pkg };
182
+ }
183
+ /** The package that compiles every module of the shim: one target depending on all its library products. */
184
+ export function kitBuilderManifest(swiftPackagePath, products) {
185
+ return `// swift-tools-version: 6.0
186
+ // Generated by @swiftbrowser/cli (kit.ts): compiles the SwiftBrowser shim's
187
+ // modules for a kit.
188
+ import PackageDescription
189
+
190
+ let package = Package(
191
+ name: "SwiftBrowserKit",
192
+ platforms: [.macOS(.v14)],
193
+ dependencies: [.package(name: "SwiftBrowser", path: ${JSON.stringify(swiftPackagePath)})],
194
+ targets: [
195
+ .target(
196
+ name: "Kit",
197
+ dependencies: [
198
+ ${products.map((p) => ` .product(name: ${JSON.stringify(p)}, package: "SwiftBrowser"),`).join('\n')}
199
+ ],
200
+ path: "Sources/Kit"
201
+ ),
202
+ ]
203
+ )
204
+ `;
205
+ }
206
+ /**
207
+ * Builds the kit for this shim, toolchain and SDK into the cache. The
208
+ * builder's SwiftPM scratch path stays (kits/build), so a kit for an edited
209
+ * shim recompiles only what the edit touched.
210
+ */
211
+ export async function buildKit(toolchain, swiftPackagePath, id, progress = {}) {
212
+ const env = toolchainEnv(toolchain);
213
+ const builder = path.join(kitsDir(), 'build');
214
+ const scratch = path.join(builder, '.build');
215
+ mkdirSync(builder, { recursive: true });
216
+ const dumped = await run(toolchain.swift, ['package', '--scratch-path', path.join(scratch, 'dump'), 'dump-package'], { cwd: swiftPackagePath, env });
217
+ if (dumped.status !== 0)
218
+ throw new CliError(`swift package dump-package failed for the shim:\n${dumped.output}`);
219
+ // The JSON object, without what SwiftPM may print around it.
220
+ const json = dumped.output.slice(dumped.output.indexOf('{'), dumped.output.lastIndexOf('}') + 1);
221
+ const graph = shimGraph(JSON.parse(json));
222
+ const products = Object.keys(graph.products);
223
+ writeIfDifferent(path.join(builder, 'Package.swift'), kitBuilderManifest(swiftPackagePath, products));
224
+ writeIfDifferent(path.join(builder, 'Sources', 'Kit', 'Kit.swift'), '// Empty: the package builds the shim modules it depends on.\n');
225
+ const common = ['--swift-sdk', WASM_SDK, '-c', 'release', '--scratch-path', scratch];
226
+ const compile = () => run(toolchain.swift, ['build', ...common, '--target', 'Kit'], { cwd: builder, env, ...(progress.onOutput ? { onOutput: progress.onOutput } : {}) });
227
+ const reused = existsSync(path.join(scratch, 'out'));
228
+ let built = await compile();
229
+ if (built.status !== 0 && reused) {
230
+ // A scratch path SwiftPM cannot build in (moved, or left by another
231
+ // toolchain) fails before the shim's own code does: start it over once.
232
+ rmSync(path.join(scratch, 'out'), { recursive: true, force: true });
233
+ built = await compile();
234
+ }
235
+ if (built.status !== 0)
236
+ throw new CliError(`building the shim for the kit failed:\n${built.output.split('\n').slice(-40).join('\n')}`);
237
+ const binPath = await run(toolchain.swift, ['build', ...common, '--show-bin-path'], { cwd: builder, env });
238
+ if (binPath.status !== 0)
239
+ throw new CliError(`swift build --show-bin-path failed:\n${binPath.output}`);
240
+ const products_ = binPath.output.trim().split('\n').pop();
241
+ const dir = path.join(kitsDir(), id);
242
+ const temp = `${dir}.tmp-${process.pid}`;
243
+ rmSync(temp, { recursive: true, force: true });
244
+ mkdirSync(path.join(temp, KIT_TRIPLE, 'lib'), { recursive: true });
245
+ mkdirSync(kitModules(temp), { recursive: true });
246
+ const ar = existsSync(path.join(toolchain.bin, 'llvm-ar')) ? path.join(toolchain.bin, 'llvm-ar') : 'ar';
247
+ for (const target of Object.keys(graph.targets)) {
248
+ const objlib = path.join(products_, `${target}.objlib`);
249
+ const module = path.join(products_, `${target}.swiftmodule`);
250
+ if (!existsSync(objlib) || !existsSync(module))
251
+ throw new CliError(`the shim's build left no objects or module for ${target} in ${products_}`);
252
+ const objects = readdirSync(objlib).filter((file) => file.endsWith('.o')).sort().map((file) => path.join(objlib, file));
253
+ const archived = await run(ar, ['crs', kitArchive(temp, target), ...objects], { cwd: temp, env });
254
+ if (archived.status !== 0)
255
+ throw new CliError(`${ar} failed for ${target}:\n${archived.output}`);
256
+ cpSync(module, path.join(kitModules(temp), `${target}.swiftmodule`), { recursive: true });
257
+ }
258
+ // The macros run on the host: their executables sit in the host's products directory.
259
+ mkdirSync(path.join(temp, 'plugins'), { recursive: true });
260
+ const hostProducts = readdirSync(path.dirname(products_)).map((name) => path.join(path.dirname(products_), name)).filter((candidate) => candidate !== products_);
261
+ for (const macro of graph.macros) {
262
+ const executable = hostProducts.map((candidate) => path.join(candidate, macro)).find((candidate) => existsSync(candidate) && statSync(candidate).isFile());
263
+ if (!executable)
264
+ throw new CliError(`the shim's build left no host executable for the macro ${macro} next to ${products_}`);
265
+ copyFileSync(executable, kitPlugin(temp, macro));
266
+ chmodSync(kitPlugin(temp, macro), 0o755);
267
+ }
268
+ const manifest = { format: KIT_FORMAT, id, swift: toolchain.version, sdk: WASM_SDK_CHECKSUM, dir, ...graph };
269
+ // Another build that made the same kit meanwhile may be using it already.
270
+ const other = findKit(id, toolchain);
271
+ if (other) {
272
+ rmSync(temp, { recursive: true, force: true });
273
+ return other;
274
+ }
275
+ rmSync(dir, { recursive: true, force: true });
276
+ renameSync(temp, dir);
277
+ writeKitPackage(dir, manifest);
278
+ writeFileSync(path.join(dir, 'kit.json'), `${JSON.stringify(manifest, null, 2)}\n`);
279
+ pruneKits(id);
280
+ return { dir, manifest, package: path.join(dir, 'package') };
281
+ }
282
+ /** Kits kept besides the current one: the latest few, for switching between shim versions. */
283
+ const KEPT_KITS = 2;
284
+ /** Removes all but the newest kits (and leftovers of interrupted builds). */
285
+ export function pruneKits(current, root = kitsDir()) {
286
+ if (!existsSync(root))
287
+ return;
288
+ const kits = readdirSync(root, { withFileTypes: true })
289
+ .filter((entry) => entry.isDirectory() && entry.name !== 'build' && entry.name !== current)
290
+ .map((entry) => ({ name: entry.name, dir: path.join(root, entry.name), time: statSync(path.join(root, entry.name)).mtimeMs }));
291
+ const leftovers = kits.filter((kit) => kit.name.includes('.tmp-') && !kit.name.endsWith(`.tmp-${process.pid}`));
292
+ const complete = kits.filter((kit) => !kit.name.includes('.tmp-')).sort((a, b) => b.time - a.time);
293
+ for (const kit of [...leftovers, ...complete.slice(KEPT_KITS)])
294
+ rmSync(kit.dir, { recursive: true, force: true });
295
+ }
296
+ /** The package with this host's macros: @swiftbrowser/kit-linux-x64, -linux-arm64, -darwin-arm64. */
297
+ export function hostKitPackage(platform = process.platform, arch = process.arch) {
298
+ return `@swiftbrowser/kit-${platform}-${arch}`;
299
+ }
300
+ /** @swiftbrowser/kit and this host's package, as npm installed them next to the CLI; null when either is missing. */
301
+ export function packagedKit(from = import.meta.url, host = hostKitPackage()) {
302
+ try {
303
+ const dir = path.dirname(createRequire(from).resolve('@swiftbrowser/kit/package.json'));
304
+ // The host package is an optional dependency of @swiftbrowser/kit: npm puts it where the kit resolves it.
305
+ const plugins = path.join(path.dirname(createRequire(path.join(dir, 'package.json')).resolve(`${host}/package.json`)), 'plugins');
306
+ return existsSync(path.join(dir, 'kit.json')) && existsSync(plugins) ? { dir, plugins } : null;
307
+ }
308
+ catch {
309
+ return null;
310
+ }
311
+ }
312
+ /**
313
+ * Copies a released kit into the cache as the kit `id`, when it was made for
314
+ * this shim, toolchain and SDK and has this host's macros; null otherwise.
315
+ * The copy is what builds use: npm may replace or remove the package.
316
+ */
317
+ export function installPackagedKit(packaged, id, toolchain) {
318
+ let manifest;
319
+ try {
320
+ manifest = JSON.parse(readFileSync(path.join(packaged.dir, 'kit.json'), 'utf8'));
321
+ }
322
+ catch {
323
+ return null;
324
+ }
325
+ if (manifest.format !== KIT_FORMAT || manifest.id !== id || manifest.swift !== toolchain.version || manifest.sdk !== WASM_SDK_CHECKSUM)
326
+ return null;
327
+ if (!manifest.macros.every((macro) => existsSync(path.join(packaged.plugins, macro))))
328
+ return null;
329
+ const dir = path.join(kitsDir(), id);
330
+ const temp = `${dir}.tmp-${process.pid}`;
331
+ rmSync(temp, { recursive: true, force: true });
332
+ mkdirSync(temp, { recursive: true });
333
+ cpSync(path.join(packaged.dir, KIT_TRIPLE), path.join(temp, KIT_TRIPLE), { recursive: true });
334
+ mkdirSync(path.join(temp, 'plugins'), { recursive: true });
335
+ for (const macro of manifest.macros) {
336
+ copyFileSync(path.join(packaged.plugins, macro), kitPlugin(temp, macro));
337
+ chmodSync(kitPlugin(temp, macro), 0o755);
338
+ }
339
+ rmSync(dir, { recursive: true, force: true });
340
+ renameSync(temp, dir);
341
+ const installed = { ...manifest, dir, packaged: true };
342
+ writeKitPackage(dir, installed);
343
+ writeFileSync(path.join(dir, 'kit.json'), `${JSON.stringify(installed, null, 2)}\n`);
344
+ return { dir, manifest: installed, package: path.join(dir, 'package') };
345
+ }
346
+ /**
347
+ * Whether this toolchain reads a kit's modules: a released kit was compiled
348
+ * on Linux, and a compiler reads only the modules its own build wrote. Type-
349
+ * checks a file importing every module of the kit's products against it.
350
+ */
351
+ export async function probeKit(toolchain, kit) {
352
+ const probe = path.join(kitsDir(), 'probe');
353
+ const products = Object.keys(kit.manifest.products);
354
+ writeIfDifferent(path.join(probe, 'Package.swift'), `// swift-tools-version: 6.0
355
+ // Generated by @swiftbrowser/cli (kit.ts): checks that the toolchain reads a kit.
356
+ import PackageDescription
357
+
358
+ let package = Package(
359
+ name: "SwiftBrowserKitProbe",
360
+ platforms: [.macOS(.v14)],
361
+ dependencies: [.package(name: "SwiftBrowser", path: ${JSON.stringify(kit.package)})],
362
+ targets: [
363
+ .target(name: "Probe", dependencies: [
364
+ ${products.map((p) => ` .product(name: ${JSON.stringify(p)}, package: "SwiftBrowser"),`).join('\n')}
365
+ ], path: "Sources/Probe"),
366
+ ]
367
+ )
368
+ `);
369
+ const modules = Object.keys(kit.manifest.targets);
370
+ writeIfDifferent(path.join(probe, 'Sources', 'Probe', 'Probe.swift'), `${modules.map((m) => `import ${m}`).join('\n')}\n`);
371
+ const flags = kitSwiftFlags(kit).flatMap((flag) => ['-Xswiftc', flag]);
372
+ const result = await run(toolchain.swift, ['build', '--swift-sdk', WASM_SDK, '-c', 'release', '--scratch-path', path.join(probe, '.build'), '--target', 'Probe', ...flags], { cwd: probe, env: toolchainEnv(toolchain) });
373
+ return { ok: result.status === 0, output: result.output };
374
+ }
375
+ /**
376
+ * The kit for this shim, toolchain and SDK: the cache's, else the released
377
+ * one npm installed (`packagedKit`), else one built from the shim's sources.
378
+ */
379
+ export async function ensureKit(toolchain, swiftPackagePath, events = {}, packaged = packagedKit()) {
380
+ const id = kitId(swiftPackagePath, toolchain);
381
+ const found = findKit(id, toolchain);
382
+ if (found)
383
+ return found;
384
+ const installed = packaged ? installPackagedKit(packaged, id, toolchain) : null;
385
+ if (installed) {
386
+ const probe = await probeKit(toolchain, installed);
387
+ if (probe.ok) {
388
+ events.onPackaged?.(installed);
389
+ return installed;
390
+ }
391
+ rmSync(installed.dir, { recursive: true, force: true });
392
+ events.onPackagedRejected?.(probe.output.split('\n').find((line) => /error:/.test(line))?.trim() ?? 'its modules do not load');
393
+ }
394
+ events.onBuild?.();
395
+ return buildKit(toolchain, swiftPackagePath, id, events);
396
+ }
397
+ function writeIfDifferent(file, text) {
398
+ if (existsSync(file) && readFileSync(file, 'utf8') === text)
399
+ return;
400
+ mkdirSync(path.dirname(file), { recursive: true });
401
+ writeFileSync(file, text);
402
+ }
403
+ //# sourceMappingURL=kit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kit.js","sourceRoot":"","sources":["../src/kit.ts"],"names":[],"mappings":"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"}
package/dist/objc.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * `@objc protocol Delegate { @objc optional func didFinish() }` →
3
+ * `protocol Delegate: AnyObject { func didFinish() } extension Delegate { func didFinish() {} }`
4
+ * (the extension on the line of the closing brace).
5
+ *
6
+ * A default answers what an unimplemented optional requirement left to its
7
+ * caller as nil: nothing for `Void`, `nil` for an optional, and the type's
8
+ * zero for the common value types (`false`, `0`, `""`, empty collections).
9
+ * A call that read nil as "not implemented" (`delegate?.isEnabled ?? true`)
10
+ * now gets that zero instead. A requirement of another type has no value to
11
+ * answer and traps if a conformer leaves it out.
12
+ */
13
+ export declare function objcProtocols(text: string): string;
14
+ /** The names of the `optional` requirements the sources declare. */
15
+ export declare function optionalRequirementNames(texts: Iterable<string>): Set<string>;
16
+ /**
17
+ * Calls of optional requirements, as plain calls: `delegate?.method?(…)` →
18
+ * `delegate?.method(…)`, `delegate.method?(…)` → `delegate.method(…)`, and
19
+ * `if let impl = delegate.method {` → `if let impl = Optional(delegate.method) {`
20
+ * (the requirement is always there now).
21
+ */
22
+ export declare function optionalRequirementCalls(text: string, names: ReadonlySet<string>): string;
23
+ /**
24
+ * Blanks every `override` member declared in an extension. Swift allows
25
+ * one only for an `@objc` member of the superclass (`description`,
26
+ * `isEqual(_:)` on NSObject subclasses), which needs the Objective-C
27
+ * runtime; without it, the superclass's member stays.
28
+ */
29
+ export declare function extensionOverrides(text: string): string;
30
+ /** `#keyPath(Type.isFinished)` → `"isFinished"`; `#keyPath(model.name)` → `"model.name"`. */
31
+ export declare function keyPathStrings(text: string): string;