@swiftbrowser/cli 0.1.0 → 0.2.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.
- package/README.md +330 -64
- package/dist/assetSymbols.d.ts +25 -0
- package/dist/assetSymbols.js +218 -0
- package/dist/assetSymbols.js.map +1 -0
- package/dist/build.d.ts +17 -2
- package/dist/build.js +40 -13
- package/dist/build.js.map +1 -1
- package/dist/buildSettings.d.ts +15 -0
- package/dist/buildSettings.js +74 -0
- package/dist/buildSettings.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.js +60 -11
- package/dist/cli.js.map +1 -1
- package/dist/commands/build.js +6 -5
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/check.js +2 -2
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/dev.d.ts +5 -2
- package/dist/commands/dev.js +19 -13
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/init.d.ts +18 -0
- package/dist/commands/init.js +57 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/kit.d.ts +3 -0
- package/dist/commands/kit.js +21 -0
- package/dist/commands/kit.js.map +1 -0
- package/dist/commands/shared.d.ts +25 -4
- package/dist/commands/shared.js +104 -10
- package/dist/commands/shared.js.map +1 -1
- package/dist/compat.d.ts +44 -6
- package/dist/compat.js +64 -36
- package/dist/compat.js.map +1 -1
- package/dist/config.d.ts +48 -10
- package/dist/config.js +64 -8
- package/dist/config.js.map +1 -1
- package/dist/coreml.d.ts +194 -0
- package/dist/coreml.js +626 -0
- package/dist/coreml.js.map +1 -0
- package/dist/icu.d.ts +17 -4
- package/dist/icu.js +32 -18
- package/dist/icu.js.map +1 -1
- package/dist/kit.d.ts +133 -0
- package/dist/kit.js +403 -0
- package/dist/kit.js.map +1 -0
- package/dist/objc.d.ts +31 -0
- package/dist/objc.js +319 -0
- package/dist/objc.js.map +1 -0
- package/dist/packagePatches.d.ts +24 -0
- package/dist/packagePatches.js +107 -0
- package/dist/packagePatches.js.map +1 -0
- package/dist/packages.d.ts +59 -0
- package/dist/packages.js +149 -0
- package/dist/packages.js.map +1 -0
- package/dist/project.d.ts +45 -4
- package/dist/project.js +91 -18
- package/dist/project.js.map +1 -1
- package/dist/protobuf.d.ts +62 -0
- package/dist/protobuf.js +233 -0
- package/dist/protobuf.js.map +1 -0
- package/dist/stage.d.ts +155 -27
- package/dist/stage.js +483 -79
- package/dist/stage.js.map +1 -1
- package/dist/strings.d.ts +44 -0
- package/dist/strings.js +386 -0
- package/dist/strings.js.map +1 -0
- package/dist/template.d.ts +29 -0
- package/dist/template.js +438 -0
- package/dist/template.js.map +1 -0
- package/dist/threadStacks.d.ts +14 -0
- package/dist/threadStacks.js +78 -0
- package/dist/threadStacks.js.map +1 -0
- package/dist/toolchain.d.ts +7 -1
- package/dist/toolchain.js +8 -2
- package/dist/toolchain.js.map +1 -1
- package/dist/urlSchemes.d.ts +11 -0
- package/dist/urlSchemes.js +58 -0
- package/dist/urlSchemes.js.map +1 -0
- package/dist/vendor.d.ts +109 -0
- package/dist/vendor.js +440 -0
- package/dist/vendor.js.map +1 -0
- package/dist/wasm.d.ts +28 -0
- package/dist/wasm.js +84 -0
- package/dist/wasm.js.map +1 -0
- package/package.json +7 -6
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
// Xcode's generated asset symbols (ASSETCATALOG_COMPILER_GENERATE_ASSET_SYMBOLS,
|
|
2
|
+
// on by default since Xcode 15, and for Swift packages' catalogs): a static
|
|
3
|
+
// member of `ImageResource` for each image or symbol set and of
|
|
4
|
+
// `ColorResource` for each color set, so an app writes `Image(.floor1)` and
|
|
5
|
+
// `Color(.accent)`, with a nested type for each folder that provides a
|
|
6
|
+
// namespace (`ImageResource.Fountain.terracotta`); and, when the target asks
|
|
7
|
+
// for them (..._GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS, set by Xcode's
|
|
8
|
+
// templates), `Color` and `ShapeStyle` members for each color
|
|
9
|
+
// (`.foregroundStyle(.accent)`). The page's asset catalog is the whole
|
|
10
|
+
// app's, so every resource names the main bundle.
|
|
11
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
/** The staged file that holds a module's asset symbols. */
|
|
14
|
+
export const ASSET_SYMBOLS_FILE = '_SwiftBrowserAssetSymbols.swift';
|
|
15
|
+
const SWIFT_KEYWORDS = new Set([
|
|
16
|
+
'associatedtype', 'class', 'deinit', 'enum', 'extension', 'fileprivate', 'func', 'import', 'init', 'inout',
|
|
17
|
+
'internal', 'let', 'open', 'operator', 'private', 'protocol', 'public', 'rethrows', 'static', 'struct',
|
|
18
|
+
'subscript', 'typealias', 'var', 'break', 'case', 'continue', 'default', 'defer', 'do', 'else', 'fallthrough',
|
|
19
|
+
'for', 'guard', 'if', 'in', 'repeat', 'return', 'switch', 'where', 'while', 'as', 'catch', 'false', 'is', 'nil',
|
|
20
|
+
'super', 'self', 'Self', 'throw', 'throws', 'true', 'try', 'Any', 'Type',
|
|
21
|
+
]);
|
|
22
|
+
/**
|
|
23
|
+
* `Color` members SwiftUI already has: Xcode generates no `Color` or
|
|
24
|
+
* `ShapeStyle` member for a color set of the same name (the
|
|
25
|
+
* `ColorResource` member is still there).
|
|
26
|
+
*/
|
|
27
|
+
const SWIFTUI_COLORS = new Set([
|
|
28
|
+
'accentColor', 'black', 'blue', 'brown', 'clear', 'cyan', 'gray', 'green', 'indigo', 'mint', 'orange', 'pink',
|
|
29
|
+
'primary', 'purple', 'red', 'secondary', 'teal', 'white', 'yellow', 'tertiary', 'quaternary', 'quinary',
|
|
30
|
+
'foreground', 'background', 'selection', 'separator', 'placeholder', 'link', 'fill', 'tint',
|
|
31
|
+
]);
|
|
32
|
+
/** The words of a name: runs of letters and digits. */
|
|
33
|
+
function words(name) {
|
|
34
|
+
return name.split(/[^A-Za-z0-9]+/).filter((word) => word.length > 0);
|
|
35
|
+
}
|
|
36
|
+
/** Lowercases a word's leading capitals (`URL` → `url`, `URLIcon` → `urlIcon`, `Floor` → `floor`). */
|
|
37
|
+
function lowerFirst(word) {
|
|
38
|
+
const run = /^[A-Z]+/.exec(word)?.[0] ?? '';
|
|
39
|
+
if (run.length <= 1 || run.length === word.length)
|
|
40
|
+
return run.length === word.length ? word.toLowerCase() : word[0].toLowerCase() + word.slice(1);
|
|
41
|
+
// `URLIcon`: the last capital starts the next word.
|
|
42
|
+
return run.slice(0, -1).toLowerCase() + word.slice(run.length - 1);
|
|
43
|
+
}
|
|
44
|
+
function upperFirst(word) {
|
|
45
|
+
return word[0].toUpperCase() + word.slice(1);
|
|
46
|
+
}
|
|
47
|
+
function escape(identifier) {
|
|
48
|
+
if (/^[0-9]/.test(identifier))
|
|
49
|
+
return `_${identifier}`;
|
|
50
|
+
return SWIFT_KEYWORDS.has(identifier) ? `\`${identifier}\`` : identifier;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The member an asset's name becomes, as Xcode names it: a trailing `Color`
|
|
54
|
+
* (of a color set) or `Image` (of an image set) dropped, then lower camel
|
|
55
|
+
* case (`Floor 1` → `floor1`, `AccentColor` → `accent`, `bird-food` →
|
|
56
|
+
* `birdFood`); one that starts with a digit gets an underscore.
|
|
57
|
+
*/
|
|
58
|
+
export function assetIdentifier(name, kind) {
|
|
59
|
+
const suffix = kind === 'color' ? 'Color' : 'Image';
|
|
60
|
+
const trimmed = name.endsWith(suffix) && name.length > suffix.length ? name.slice(0, -suffix.length) : name;
|
|
61
|
+
const parts = words(trimmed);
|
|
62
|
+
if (parts.length === 0)
|
|
63
|
+
return '_';
|
|
64
|
+
return escape([lowerFirst(parts[0]), ...parts.slice(1).map(upperFirst)].join(''));
|
|
65
|
+
}
|
|
66
|
+
/** The type a namespace folder becomes (`Fountain`, `bird houses` → `BirdHouses`). */
|
|
67
|
+
export function namespaceIdentifier(name) {
|
|
68
|
+
const parts = words(name);
|
|
69
|
+
if (parts.length === 0)
|
|
70
|
+
return '_';
|
|
71
|
+
return escape(parts.map(upperFirst).join(''));
|
|
72
|
+
}
|
|
73
|
+
function readContents(dir) {
|
|
74
|
+
try {
|
|
75
|
+
return JSON.parse(readFileSync(path.join(dir, 'Contents.json'), 'utf8'));
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function providesNamespace(dir) {
|
|
82
|
+
const properties = readContents(dir)?.properties;
|
|
83
|
+
return properties?.['provides-namespace'] === true;
|
|
84
|
+
}
|
|
85
|
+
/** Adds a catalog folder's image and color sets to `scope`, under `prefix` (the namespace path). */
|
|
86
|
+
function scan(dir, prefix, scope) {
|
|
87
|
+
let entries;
|
|
88
|
+
try {
|
|
89
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
95
|
+
if (!entry.isDirectory() || entry.name.startsWith('.'))
|
|
96
|
+
continue;
|
|
97
|
+
const full = path.join(dir, entry.name);
|
|
98
|
+
const ext = path.extname(entry.name);
|
|
99
|
+
const base = entry.name.slice(0, entry.name.length - ext.length);
|
|
100
|
+
if (ext === '.imageset' || ext === '.symbolset' || ext === '.colorset') {
|
|
101
|
+
const kind = ext === '.colorset' ? 'color' : 'image';
|
|
102
|
+
scope.symbols.push({ kind, name: `${prefix}${base}`, identifier: assetIdentifier(base, kind) });
|
|
103
|
+
}
|
|
104
|
+
else if (ext === '') {
|
|
105
|
+
if (providesNamespace(full)) {
|
|
106
|
+
const type = namespaceIdentifier(entry.name);
|
|
107
|
+
const inner = scope.namespaces.get(type) ?? { symbols: [], namespaces: new Map() };
|
|
108
|
+
scope.namespaces.set(type, inner);
|
|
109
|
+
scan(full, `${prefix}${entry.name}/`, inner);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
scan(full, prefix, scope);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** Drops symbols whose identifier an earlier one of the same kind took (Xcode reports those). */
|
|
118
|
+
function dedupe(scope) {
|
|
119
|
+
const seen = new Set();
|
|
120
|
+
scope.symbols = scope.symbols.filter((symbol) => {
|
|
121
|
+
const key = `${symbol.kind}:${symbol.identifier}`;
|
|
122
|
+
if (seen.has(key))
|
|
123
|
+
return false;
|
|
124
|
+
seen.add(key);
|
|
125
|
+
return true;
|
|
126
|
+
});
|
|
127
|
+
for (const inner of scope.namespaces.values())
|
|
128
|
+
dedupe(inner);
|
|
129
|
+
}
|
|
130
|
+
/** Members a module's sources declare themselves (`static let floor1`), which a generated one would redeclare. */
|
|
131
|
+
export function declaredStaticMembers(sources) {
|
|
132
|
+
const names = new Set();
|
|
133
|
+
for (const text of sources) {
|
|
134
|
+
for (const match of text.matchAll(/\bstatic\s+(?:let|var)\s+(`?)([A-Za-z_][A-Za-z0-9_]*)\1/g))
|
|
135
|
+
names.add(match[2]);
|
|
136
|
+
}
|
|
137
|
+
return names;
|
|
138
|
+
}
|
|
139
|
+
function resourceMembers(scope, kind, indent) {
|
|
140
|
+
const type = kind === 'image' ? 'ImageResource' : 'ColorResource';
|
|
141
|
+
const lines = [];
|
|
142
|
+
for (const symbol of scope.symbols) {
|
|
143
|
+
if (symbol.kind !== kind)
|
|
144
|
+
continue;
|
|
145
|
+
lines.push(`${indent}static let ${symbol.identifier} = ${type}(name: ${JSON.stringify(symbol.name)}, bundle: FoundationBridge.Bundle.main)`);
|
|
146
|
+
}
|
|
147
|
+
for (const [name, inner] of scope.namespaces) {
|
|
148
|
+
const members = resourceMembers(inner, kind, `${indent} `);
|
|
149
|
+
if (members.length === 0)
|
|
150
|
+
continue;
|
|
151
|
+
lines.push(`${indent}enum ${name} {`, ...members, `${indent}}`);
|
|
152
|
+
}
|
|
153
|
+
return lines;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* The Swift source of a module's asset symbols, for its catalogs (empty
|
|
157
|
+
* when they have no image, symbol or color sets). `extensions` adds the
|
|
158
|
+
* `Color` and `ShapeStyle` members of the top level's colors, except those
|
|
159
|
+
* SwiftUI has or the module declares itself (`declared`).
|
|
160
|
+
*/
|
|
161
|
+
export function assetSymbolsSource(catalogs, options = {}) {
|
|
162
|
+
const root = { symbols: [], namespaces: new Map() };
|
|
163
|
+
for (const catalog of catalogs)
|
|
164
|
+
if (existsSync(catalog))
|
|
165
|
+
scan(catalog, '', root);
|
|
166
|
+
dedupe(root);
|
|
167
|
+
const images = resourceMembers(root, 'image', ' ');
|
|
168
|
+
const colors = resourceMembers(root, 'color', ' ');
|
|
169
|
+
if (images.length === 0 && colors.length === 0)
|
|
170
|
+
return '';
|
|
171
|
+
const out = [
|
|
172
|
+
'// Generated by @swiftbrowser/cli: the asset symbols Xcode generates for',
|
|
173
|
+
'// this module\'s asset catalogs (assetSymbols.ts).',
|
|
174
|
+
'import SwiftUI',
|
|
175
|
+
'import FoundationBridge',
|
|
176
|
+
'',
|
|
177
|
+
];
|
|
178
|
+
if (images.length > 0)
|
|
179
|
+
out.push('extension ImageResource {', ...images, '}', '');
|
|
180
|
+
if (colors.length > 0)
|
|
181
|
+
out.push('extension ColorResource {', ...colors, '}', '');
|
|
182
|
+
if (options.extensions) {
|
|
183
|
+
const declared = options.declared ?? new Set();
|
|
184
|
+
const shortcuts = root.symbols.filter((symbol) => symbol.kind === 'color'
|
|
185
|
+
&& !SWIFTUI_COLORS.has(symbol.identifier) && !declared.has(symbol.identifier.replace(/`/g, '')));
|
|
186
|
+
if (shortcuts.length > 0) {
|
|
187
|
+
const member = (symbol) => ` static var ${symbol.identifier}: Color { Color(ColorResource.${symbol.identifier}) }`;
|
|
188
|
+
out.push('extension Color {', ...shortcuts.map(member), '}', '');
|
|
189
|
+
out.push('extension ShapeStyle where Self == Color {', ...shortcuts.map(member), '}', '');
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return out.join('\n');
|
|
193
|
+
}
|
|
194
|
+
/** The asset catalogs in a package target's folder (SwiftPM processes them as the target's resources). */
|
|
195
|
+
export function targetCatalogs(sourceDir) {
|
|
196
|
+
const out = [];
|
|
197
|
+
const walk = (dir) => {
|
|
198
|
+
let entries;
|
|
199
|
+
try {
|
|
200
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
for (const entry of entries) {
|
|
206
|
+
if (!entry.isDirectory() || entry.name.startsWith('.') || entry.name === 'Tests')
|
|
207
|
+
continue;
|
|
208
|
+
const full = path.join(dir, entry.name);
|
|
209
|
+
if (entry.name.endsWith('.xcassets'))
|
|
210
|
+
out.push(full);
|
|
211
|
+
else
|
|
212
|
+
walk(full);
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
walk(sourceDir);
|
|
216
|
+
return out.sort();
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=assetSymbols.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assetSymbols.js","sourceRoot":"","sources":["../src/assetSymbols.ts"],"names":[],"mappings":"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"}
|
package/dist/build.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ import { type Toolchain } from './toolchain.js';
|
|
|
4
4
|
export interface RunResult {
|
|
5
5
|
status: number;
|
|
6
6
|
output: string;
|
|
7
|
+
/** The signal that ended the process (`SIGSEGV`), if one did. */
|
|
8
|
+
signal?: string;
|
|
7
9
|
}
|
|
8
10
|
/** Runs a command, capturing stdout+stderr interleaved; `onOutput` streams it as it arrives. */
|
|
9
11
|
export declare function run(command: string, args: string[], options: {
|
|
@@ -25,12 +27,25 @@ export interface BuildOptions {
|
|
|
25
27
|
/** `swift build` for the host: compile errors only, no module produced that we use. */
|
|
26
28
|
export declare function checkHost(options: BuildOptions): Promise<void>;
|
|
27
29
|
/**
|
|
28
|
-
* Builds the module for WebAssembly (release) and
|
|
30
|
+
* Builds the module for WebAssembly (release) and writes it to `wasmOutput(app)`;
|
|
29
31
|
* with `wasmOpt` set it is also optimized for size and stripped (the ~2.5×
|
|
30
|
-
* smaller download of a `build`; `dev` skips it for quick rebuilds).
|
|
32
|
+
* smaller download of a `build`; `dev` skips it for quick rebuilds). The
|
|
33
|
+
* autolink record is then dropped from the module (see wasm.ts).
|
|
31
34
|
*/
|
|
32
35
|
export declare function buildWasm(options: BuildOptions & {
|
|
33
36
|
wasmOpt?: string | null;
|
|
37
|
+
swiftFlags?: readonly string[];
|
|
34
38
|
}): Promise<string>;
|
|
39
|
+
/**
|
|
40
|
+
* Optimizes `input` for size and strips it into `output` with wasm-opt: what
|
|
41
|
+
* `build` does after the link, and what CI does to the unoptimized modules
|
|
42
|
+
* its tests ran on before deploying them (scripts/optimize-wasm.mjs).
|
|
43
|
+
*/
|
|
44
|
+
export declare function optimizeWasm(wasmOpt: string, input: string, output: string, options: {
|
|
45
|
+
cwd: string;
|
|
46
|
+
env: NodeJS.ProcessEnv;
|
|
47
|
+
}): Promise<void>;
|
|
48
|
+
/** Drops the Swift driver's autolink record from a linked module (`wasm.ts`). */
|
|
49
|
+
export declare function stripAutolink(wasm: string): void;
|
|
35
50
|
export declare function fileSize(file: string): number;
|
|
36
51
|
export declare function formatBytes(bytes: number): string;
|
package/dist/build.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
// Compiling the staging package: natively for `check` (fast, same
|
|
2
2
|
// diagnostics), for WebAssembly for `dev` and `build`, then wasm-opt.
|
|
3
3
|
import { spawn } from 'node:child_process';
|
|
4
|
-
import { copyFileSync, existsSync, mkdirSync, statSync } from 'node:fs';
|
|
4
|
+
import { copyFileSync, existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
5
5
|
import path from 'node:path';
|
|
6
6
|
import { CliError } from './log.js';
|
|
7
|
-
import { remapDiagnostics, wasmOutput } from './stage.js';
|
|
8
|
-
import {
|
|
7
|
+
import { remapDiagnostics, scratchPathArgs, wasmOutput } from './stage.js';
|
|
8
|
+
import { wasmOptWithThreadStacks } from './threadStacks.js';
|
|
9
|
+
import { WASM_SDK, cacheDir, toolchainEnv } from './toolchain.js';
|
|
10
|
+
import { AUTOLINK_SECTION, rewriteCustomSections } from './wasm.js';
|
|
9
11
|
/** Runs a command, capturing stdout+stderr interleaved; `onOutput` streams it as it arrives. */
|
|
10
12
|
export function run(command, args, options) {
|
|
11
13
|
return new Promise((resolve, reject) => {
|
|
@@ -19,7 +21,7 @@ export function run(command, args, options) {
|
|
|
19
21
|
child.stdout.on('data', collect);
|
|
20
22
|
child.stderr.on('data', collect);
|
|
21
23
|
child.on('error', reject);
|
|
22
|
-
child.on('close', (status) => resolve({ status: status ?? 1, output }));
|
|
24
|
+
child.on('close', (status, signal) => resolve({ status: status ?? 1, output, ...(signal ? { signal } : {}) }));
|
|
23
25
|
});
|
|
24
26
|
}
|
|
25
27
|
/** Only the diagnostics and the summary lines of a SwiftPM build log. */
|
|
@@ -67,7 +69,7 @@ export function diagnosticsOnly(output) {
|
|
|
67
69
|
/** `swift build` for the host: compile errors only, no module produced that we use. */
|
|
68
70
|
export async function checkHost(options) {
|
|
69
71
|
const { toolchain, staged, app } = options;
|
|
70
|
-
const result = await run(toolchain.swift, ['build', '--product', app.name], {
|
|
72
|
+
const result = await run(toolchain.swift, ['build', ...scratchPathArgs(), '--product', app.name], {
|
|
71
73
|
cwd: staged.dir,
|
|
72
74
|
env: toolchainEnv(toolchain),
|
|
73
75
|
...(options.onOutput ? { onOutput: options.onOutput } : {}),
|
|
@@ -76,14 +78,17 @@ export async function checkHost(options) {
|
|
|
76
78
|
throw new CliError(remapDiagnostics(diagnosticsOnly(result.output) || result.output, staged));
|
|
77
79
|
}
|
|
78
80
|
/**
|
|
79
|
-
* Builds the module for WebAssembly (release) and
|
|
81
|
+
* Builds the module for WebAssembly (release) and writes it to `wasmOutput(app)`;
|
|
80
82
|
* with `wasmOpt` set it is also optimized for size and stripped (the ~2.5×
|
|
81
|
-
* smaller download of a `build`; `dev` skips it for quick rebuilds).
|
|
83
|
+
* smaller download of a `build`; `dev` skips it for quick rebuilds). The
|
|
84
|
+
* autolink record is then dropped from the module (see wasm.ts).
|
|
82
85
|
*/
|
|
83
86
|
export async function buildWasm(options) {
|
|
84
87
|
const { toolchain, staged, app } = options;
|
|
85
88
|
const env = toolchainEnv(toolchain);
|
|
86
|
-
|
|
89
|
+
// `swiftFlags` reach every Swift target built for WebAssembly, packages
|
|
90
|
+
// included: the kit's module search path and macros (kit.ts).
|
|
91
|
+
const common = ['--swift-sdk', WASM_SDK, '-c', 'release', ...scratchPathArgs(), ...(options.swiftFlags ?? []).flatMap((flag) => ['-Xswiftc', flag])];
|
|
87
92
|
const result = await run(toolchain.swift, ['build', ...common, '--product', app.name], {
|
|
88
93
|
cwd: staged.dir,
|
|
89
94
|
env,
|
|
@@ -100,17 +105,39 @@ export async function buildWasm(options) {
|
|
|
100
105
|
const out = wasmOutput(app);
|
|
101
106
|
mkdirSync(path.dirname(out), { recursive: true });
|
|
102
107
|
if (options.wasmOpt) {
|
|
103
|
-
|
|
104
|
-
// --strip-debug drops DWARF and names, --strip-producers the toolchain record.
|
|
105
|
-
const opt = await run(options.wasmOpt, ['-Os', '--strip-debug', '--strip-producers', built, '-o', out], { cwd: staged.dir, env });
|
|
106
|
-
if (opt.status !== 0)
|
|
107
|
-
throw new CliError(`wasm-opt failed:\n${opt.output}`);
|
|
108
|
+
await optimizeWasm(options.wasmOpt, built, out, { cwd: staged.dir, env });
|
|
108
109
|
}
|
|
109
110
|
else {
|
|
110
111
|
copyFileSync(built, out);
|
|
111
112
|
}
|
|
113
|
+
stripAutolink(out);
|
|
112
114
|
return out;
|
|
113
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Optimizes `input` for size and strips it into `output` with wasm-opt: what
|
|
118
|
+
* `build` does after the link, and what CI does to the unoptimized modules
|
|
119
|
+
* its tests ran on before deploying them (scripts/optimize-wasm.mjs).
|
|
120
|
+
*/
|
|
121
|
+
export async function optimizeWasm(wasmOpt, input, output, options) {
|
|
122
|
+
// -Oz: measured as fast as -Os on an 18 MB module (31 s either way) and
|
|
123
|
+
// 1.3% smaller. --strip-debug drops DWARF and names, --strip-producers
|
|
124
|
+
// the toolchain record.
|
|
125
|
+
const args = ['-Oz', '--strip-debug', '--strip-producers', input, '-o', output];
|
|
126
|
+
// Binaryen's musl builds give worker threads 128 KiB stacks, which a large
|
|
127
|
+
// module overflows; the copy this runs gives them 8 MiB (threadStacks.ts).
|
|
128
|
+
let opt = await run(wasmOptWithThreadStacks(wasmOpt, cacheDir()), args, options);
|
|
129
|
+
if (opt.signal) {
|
|
130
|
+
// Still too deep for a worker thread: on one thread the passes run on
|
|
131
|
+
// the main thread, whose stack the shell can raise.
|
|
132
|
+
opt = await run('/bin/sh', ['-c', 'ulimit -s unlimited 2>/dev/null || ulimit -s hard 2>/dev/null; exec "$0" "$@"', wasmOpt, ...args], { cwd: options.cwd, env: { ...options.env, BINARYEN_CORES: '1' } });
|
|
133
|
+
}
|
|
134
|
+
if (opt.status !== 0)
|
|
135
|
+
throw new CliError(`wasm-opt failed${opt.signal ? ` (${opt.signal})` : ''}:\n${opt.output}`);
|
|
136
|
+
}
|
|
137
|
+
/** Drops the Swift driver's autolink record from a linked module (`wasm.ts`). */
|
|
138
|
+
export function stripAutolink(wasm) {
|
|
139
|
+
writeFileSync(wasm, rewriteCustomSections(readFileSync(wasm), { drop: [AUTOLINK_SECTION] }));
|
|
140
|
+
}
|
|
114
141
|
export function fileSize(file) {
|
|
115
142
|
return statSync(file).size;
|
|
116
143
|
}
|
package/dist/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,sEAAsE;AAEtE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SwiftLanguageMode } from './config.js';
|
|
2
|
+
export interface SwiftSettings {
|
|
3
|
+
/** `SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor`: `.defaultIsolation(MainActor.self)`. */
|
|
4
|
+
defaultIsolationMainActor: boolean;
|
|
5
|
+
/** Upcoming features to enable (`.enableUpcomingFeature`), in a stable order. */
|
|
6
|
+
upcomingFeatures: string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The concurrency settings of a target's merged build settings. Features the
|
|
10
|
+
* language mode already has are left out; `SWIFT_STRICT_CONCURRENCY =
|
|
11
|
+
* complete` is the `StrictConcurrency` feature in the Swift 5 mode.
|
|
12
|
+
*/
|
|
13
|
+
export declare function swiftSettingsOf(settings: Readonly<Record<string, string>>, languageMode: SwiftLanguageMode): SwiftSettings;
|
|
14
|
+
/** The settings as `swiftSettings` entries of a manifest (none for the defaults). */
|
|
15
|
+
export declare function swiftSettingsEntries(settings: SwiftSettings | undefined): string[];
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// The Xcode target's Swift concurrency settings, carried into the staging
|
|
2
|
+
// package's `swiftSettings` so the app compiles as it does in Xcode. Xcode 26
|
|
3
|
+
// templates make a target main-actor by default (`SWIFT_DEFAULT_ACTOR_ISOLATION
|
|
4
|
+
// = MainActor`) with "approachable concurrency" on; without them, an app
|
|
5
|
+
// written against that default fails with isolation errors (a main-actor
|
|
6
|
+
// default value of a nonisolated type, a conformance that crosses into
|
|
7
|
+
// main-actor code).
|
|
8
|
+
/** What `SWIFT_APPROACHABLE_CONCURRENCY = YES` turns on (Xcode 26). */
|
|
9
|
+
const APPROACHABLE_CONCURRENCY = [
|
|
10
|
+
'DisableOutwardActorInference',
|
|
11
|
+
'GlobalActorIsolatedTypesUsability',
|
|
12
|
+
'InferIsolatedConformances',
|
|
13
|
+
'InferSendableFromCaptures',
|
|
14
|
+
'NonisolatedNonsendingByDefault',
|
|
15
|
+
];
|
|
16
|
+
/** Upcoming features the Swift 6 language mode has on already (enabling one again is a warning). */
|
|
17
|
+
const SWIFT_6_FEATURES = new Set([
|
|
18
|
+
'ConciseMagicFile',
|
|
19
|
+
'DeprecateApplicationMain',
|
|
20
|
+
'DisableOutwardActorInference',
|
|
21
|
+
'DynamicActorIsolation',
|
|
22
|
+
'ForwardTrailingClosures',
|
|
23
|
+
'GlobalActorIsolatedTypesUsability',
|
|
24
|
+
'GlobalConcurrency',
|
|
25
|
+
'ImplicitOpenExistentials',
|
|
26
|
+
'ImportObjcForwardDeclarations',
|
|
27
|
+
'InferSendableFromCaptures',
|
|
28
|
+
'IsolatedDefaultValues',
|
|
29
|
+
'RegionBasedIsolation',
|
|
30
|
+
'StrictConcurrency',
|
|
31
|
+
]);
|
|
32
|
+
/** `SWIFT_UPCOMING_FEATURE_<NAME>` names whose feature is not the name in camel case. */
|
|
33
|
+
const FEATURE_NAMES = {
|
|
34
|
+
DISABLE_OUTWARD_ACTOR_ISOLATION: 'DisableOutwardActorInference',
|
|
35
|
+
IMPORT_OBJC_FORWARD_DECLS: 'ImportObjcForwardDeclarations',
|
|
36
|
+
};
|
|
37
|
+
const YES = /^(YES|TRUE|1)$/i;
|
|
38
|
+
/** `INFER_ISOLATED_CONFORMANCES` → `InferIsolatedConformances`. */
|
|
39
|
+
function featureName(setting) {
|
|
40
|
+
return FEATURE_NAMES[setting] ?? setting.toLowerCase().replace(/(^|_)([a-z0-9])/g, (_, __, c) => c.toUpperCase());
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The concurrency settings of a target's merged build settings. Features the
|
|
44
|
+
* language mode already has are left out; `SWIFT_STRICT_CONCURRENCY =
|
|
45
|
+
* complete` is the `StrictConcurrency` feature in the Swift 5 mode.
|
|
46
|
+
*/
|
|
47
|
+
export function swiftSettingsOf(settings, languageMode) {
|
|
48
|
+
const features = new Set();
|
|
49
|
+
if (YES.test(settings['SWIFT_APPROACHABLE_CONCURRENCY'] ?? ''))
|
|
50
|
+
for (const f of APPROACHABLE_CONCURRENCY)
|
|
51
|
+
features.add(f);
|
|
52
|
+
for (const [key, value] of Object.entries(settings)) {
|
|
53
|
+
const match = /^SWIFT_UPCOMING_FEATURE_([A-Z0-9_]+)$/.exec(key);
|
|
54
|
+
if (match && YES.test(value))
|
|
55
|
+
features.add(featureName(match[1]));
|
|
56
|
+
}
|
|
57
|
+
if ((settings['SWIFT_STRICT_CONCURRENCY'] ?? '').toLowerCase() === 'complete')
|
|
58
|
+
features.add('StrictConcurrency');
|
|
59
|
+
const upcomingFeatures = [...features].filter((f) => languageMode !== '6' || !SWIFT_6_FEATURES.has(f)).sort();
|
|
60
|
+
return {
|
|
61
|
+
defaultIsolationMainActor: (settings['SWIFT_DEFAULT_ACTOR_ISOLATION'] ?? '').trim() === 'MainActor',
|
|
62
|
+
upcomingFeatures,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/** The settings as `swiftSettings` entries of a manifest (none for the defaults). */
|
|
66
|
+
export function swiftSettingsEntries(settings) {
|
|
67
|
+
if (!settings)
|
|
68
|
+
return [];
|
|
69
|
+
return [
|
|
70
|
+
...(settings.defaultIsolationMainActor ? ['.defaultIsolation(MainActor.self)'] : []),
|
|
71
|
+
...settings.upcomingFeatures.map((f) => `.enableUpcomingFeature(${JSON.stringify(f)})`),
|
|
72
|
+
];
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=buildSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildSettings.js","sourceRoot":"","sources":["../src/buildSettings.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
export declare const VERSION = "0.1.0";
|
|
2
|
+
/**
|
|
3
|
+
* `--host` may stand alone (every interface), which parseArgs cannot express
|
|
4
|
+
* for an option that also takes a value: a bare `--host` becomes `--host=`
|
|
5
|
+
* unless an address follows it.
|
|
6
|
+
*/
|
|
7
|
+
export declare function normalizeHostFlag(argv: string[]): string[];
|
|
2
8
|
export declare function main(argv: string[]): Promise<number>;
|