@vantail/cli 0.1.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 (97) hide show
  1. package/dist/args.d.ts +16 -0
  2. package/dist/args.d.ts.map +1 -0
  3. package/dist/args.js +86 -0
  4. package/dist/args.js.map +1 -0
  5. package/dist/bin.d.ts +9 -0
  6. package/dist/bin.d.ts.map +1 -0
  7. package/dist/bin.js +170 -0
  8. package/dist/bin.js.map +1 -0
  9. package/dist/bundle/archive.d.ts +25 -0
  10. package/dist/bundle/archive.d.ts.map +1 -0
  11. package/dist/bundle/archive.js +187 -0
  12. package/dist/bundle/archive.js.map +1 -0
  13. package/dist/bundle/common.d.ts +33 -0
  14. package/dist/bundle/common.d.ts.map +1 -0
  15. package/dist/bundle/common.js +22 -0
  16. package/dist/bundle/common.js.map +1 -0
  17. package/dist/bundle/index.d.ts +12 -0
  18. package/dist/bundle/index.d.ts.map +1 -0
  19. package/dist/bundle/index.js +47 -0
  20. package/dist/bundle/index.js.map +1 -0
  21. package/dist/bundle/macos.d.ts +19 -0
  22. package/dist/bundle/macos.d.ts.map +1 -0
  23. package/dist/bundle/macos.js +138 -0
  24. package/dist/bundle/macos.js.map +1 -0
  25. package/dist/commands/build.d.ts +21 -0
  26. package/dist/commands/build.d.ts.map +1 -0
  27. package/dist/commands/build.js +57 -0
  28. package/dist/commands/build.js.map +1 -0
  29. package/dist/commands/dev.d.ts +17 -0
  30. package/dist/commands/dev.d.ts.map +1 -0
  31. package/dist/commands/dev.js +170 -0
  32. package/dist/commands/dev.js.map +1 -0
  33. package/dist/commands/doctor.d.ts +12 -0
  34. package/dist/commands/doctor.d.ts.map +1 -0
  35. package/dist/commands/doctor.js +164 -0
  36. package/dist/commands/doctor.js.map +1 -0
  37. package/dist/commands/package.d.ts +25 -0
  38. package/dist/commands/package.d.ts.map +1 -0
  39. package/dist/commands/package.js +144 -0
  40. package/dist/commands/package.js.map +1 -0
  41. package/dist/commands/updater.d.ts +46 -0
  42. package/dist/commands/updater.d.ts.map +1 -0
  43. package/dist/commands/updater.js +116 -0
  44. package/dist/commands/updater.js.map +1 -0
  45. package/dist/icons/index.d.ts +23 -0
  46. package/dist/icons/index.d.ts.map +1 -0
  47. package/dist/icons/index.js +124 -0
  48. package/dist/icons/index.js.map +1 -0
  49. package/dist/icons/png.d.ts +18 -0
  50. package/dist/icons/png.d.ts.map +1 -0
  51. package/dist/icons/png.js +220 -0
  52. package/dist/icons/png.js.map +1 -0
  53. package/dist/icons/resize.d.ts +14 -0
  54. package/dist/icons/resize.d.ts.map +1 -0
  55. package/dist/icons/resize.js +58 -0
  56. package/dist/icons/resize.js.map +1 -0
  57. package/dist/index.d.ts +19 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +18 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/installers/common.d.ts +20 -0
  62. package/dist/installers/common.d.ts.map +1 -0
  63. package/dist/installers/common.js +2 -0
  64. package/dist/installers/common.js.map +1 -0
  65. package/dist/installers/deb.d.ts +15 -0
  66. package/dist/installers/deb.d.ts.map +1 -0
  67. package/dist/installers/deb.js +146 -0
  68. package/dist/installers/deb.js.map +1 -0
  69. package/dist/installers/dmg.d.ts +11 -0
  70. package/dist/installers/dmg.d.ts.map +1 -0
  71. package/dist/installers/dmg.js +51 -0
  72. package/dist/installers/dmg.js.map +1 -0
  73. package/dist/installers/index.d.ts +14 -0
  74. package/dist/installers/index.d.ts.map +1 -0
  75. package/dist/installers/index.js +26 -0
  76. package/dist/installers/index.js.map +1 -0
  77. package/dist/installers/msi.d.ts +23 -0
  78. package/dist/installers/msi.d.ts.map +1 -0
  79. package/dist/installers/msi.js +199 -0
  80. package/dist/installers/msi.js.map +1 -0
  81. package/dist/log.d.ts +22 -0
  82. package/dist/log.d.ts.map +1 -0
  83. package/dist/log.js +44 -0
  84. package/dist/log.js.map +1 -0
  85. package/dist/runtime-config.d.ts +27 -0
  86. package/dist/runtime-config.d.ts.map +1 -0
  87. package/dist/runtime-config.js +79 -0
  88. package/dist/runtime-config.js.map +1 -0
  89. package/dist/updater-keys.d.ts +31 -0
  90. package/dist/updater-keys.d.ts.map +1 -0
  91. package/dist/updater-keys.js +56 -0
  92. package/dist/updater-keys.js.map +1 -0
  93. package/dist/vite.d.ts +24 -0
  94. package/dist/vite.d.ts.map +1 -0
  95. package/dist/vite.js +31 -0
  96. package/dist/vite.js.map +1 -0
  97. package/package.json +40 -0
package/dist/args.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Argument parsing.
3
+ *
4
+ * Small enough to own: three commands, a handful of flags, and no need for a
5
+ * dependency that has to be kept up to date.
6
+ */
7
+ export interface ParsedArgs {
8
+ command: string | undefined;
9
+ flags: Map<string, string | boolean>;
10
+ positional: string[];
11
+ }
12
+ export declare function parseArgs(argv: string[]): ParsedArgs;
13
+ export declare function stringFlag(args: ParsedArgs, ...names: string[]): string | undefined;
14
+ export declare function boolFlag(args: ParsedArgs, ...names: string[]): boolean | undefined;
15
+ export declare function numberFlag(args: ParsedArgs, ...names: string[]): number | undefined;
16
+ //# sourceMappingURL=args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAoDpD;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,UAAU,EAChB,GAAG,KAAK,EAAE,MAAM,EAAE,GACjB,MAAM,GAAG,SAAS,CAMpB;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,GAAG,SAAS,CAQlF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAQnF"}
package/dist/args.js ADDED
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Argument parsing.
3
+ *
4
+ * Small enough to own: three commands, a handful of flags, and no need for a
5
+ * dependency that has to be kept up to date.
6
+ */
7
+ export function parseArgs(argv) {
8
+ const flags = new Map();
9
+ const positional = [];
10
+ let command;
11
+ for (let index = 0; index < argv.length; index += 1) {
12
+ const arg = argv[index];
13
+ if (arg.startsWith("--")) {
14
+ const body = arg.slice(2);
15
+ const equals = body.indexOf("=");
16
+ if (equals !== -1) {
17
+ flags.set(body.slice(0, equals), body.slice(equals + 1));
18
+ continue;
19
+ }
20
+ if (body.startsWith("no-")) {
21
+ flags.set(body.slice(3), false);
22
+ continue;
23
+ }
24
+ // A following value that is not itself a flag belongs to this one.
25
+ const next = argv[index + 1];
26
+ if (next !== undefined && !next.startsWith("-")) {
27
+ flags.set(body, next);
28
+ index += 1;
29
+ }
30
+ else {
31
+ flags.set(body, true);
32
+ }
33
+ continue;
34
+ }
35
+ if (arg.startsWith("-") && arg.length > 1) {
36
+ const short = arg.slice(1);
37
+ const next = argv[index + 1];
38
+ if (next !== undefined && !next.startsWith("-")) {
39
+ flags.set(short, next);
40
+ index += 1;
41
+ }
42
+ else {
43
+ flags.set(short, true);
44
+ }
45
+ continue;
46
+ }
47
+ if (command === undefined) {
48
+ command = arg;
49
+ }
50
+ else {
51
+ positional.push(arg);
52
+ }
53
+ }
54
+ return { command, flags, positional };
55
+ }
56
+ export function stringFlag(args, ...names) {
57
+ for (const name of names) {
58
+ const value = args.flags.get(name);
59
+ if (typeof value === "string")
60
+ return value;
61
+ }
62
+ return undefined;
63
+ }
64
+ export function boolFlag(args, ...names) {
65
+ for (const name of names) {
66
+ const value = args.flags.get(name);
67
+ if (typeof value === "boolean")
68
+ return value;
69
+ if (value === "true")
70
+ return true;
71
+ if (value === "false")
72
+ return false;
73
+ }
74
+ return undefined;
75
+ }
76
+ export function numberFlag(args, ...names) {
77
+ const value = stringFlag(args, ...names);
78
+ if (value === undefined)
79
+ return undefined;
80
+ const parsed = Number(value);
81
+ if (!Number.isFinite(parsed)) {
82
+ throw new Error(`--${names[0]} expects a number, got "${value}"`);
83
+ }
84
+ return parsed;
85
+ }
86
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
package/dist/bin.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * The `vantail` command.
4
+ *
5
+ * Four verbs, no plugins, no config file for the CLI itself. Everything it
6
+ * needs to know is in `vantail.config.ts`.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
package/dist/bin.js ADDED
@@ -0,0 +1,170 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * The `vantail` command.
4
+ *
5
+ * Four verbs, no plugins, no config file for the CLI itself. Everything it
6
+ * needs to know is in `vantail.config.ts`.
7
+ */
8
+ import { boolFlag, numberFlag, parseArgs, stringFlag } from "./args.js";
9
+ import { build } from "./commands/build.js";
10
+ import { dev } from "./commands/dev.js";
11
+ import { doctor } from "./commands/doctor.js";
12
+ import { packageApp } from "./commands/package.js";
13
+ import { keygen, manifest, sign } from "./commands/updater.js";
14
+ import { ConfigErrorName, VERSION } from "./index.js";
15
+ import { log, style } from "./log.js";
16
+ const HELP = `
17
+ ${style.bold("vantail")} ${style.dim(VERSION)} - a thin native layer for JavaScript applications
18
+
19
+ ${style.bold("USAGE")}
20
+ vantail <command> [options]
21
+
22
+ ${style.bold("COMMANDS")}
23
+ dev Run the app in a native window against the Vite dev server
24
+ build Build the web assets
25
+ package Build and lay out a distributable application
26
+ doctor Check that everything needed to run is present
27
+ updater Signing keys and release manifests for the self-updater
28
+
29
+ ${style.bold("OPTIONS")}
30
+ -c, --config <path> Path to vantail.config.ts (found automatically otherwise)
31
+ --port <number> Dev server port
32
+ --host <host> Dev server host
33
+ --mode <mode> Vite mode for build (default: production)
34
+ --no-build package: use the existing build output
35
+ --out-dir <path> package: where to write the bundle
36
+ --sign <identity> package: macOS codesign identity (default: ad-hoc)
37
+ --update package: also write the .tar.gz the updater downloads
38
+ --installer package: also build a .dmg, .msi or .deb
39
+ --allow-debug-runtime
40
+ package: allow a debug runtime (about 10x the size)
41
+ --key <path> updater: signing key (default: .vantail/updater.key,
42
+ or $VANTAIL_UPDATER_KEY)
43
+ --base-url <url> updater manifest: where the archives will be served
44
+ --notes <text> updater manifest: release notes
45
+ --date <iso> updater manifest: publication timestamp
46
+ --out <path> updater: output path
47
+ -v, --version Print the version
48
+ -h, --help Print this message
49
+
50
+ ${style.bold("UPDATER")}
51
+ vantail updater keygen
52
+ vantail updater sign <file>
53
+ vantail updater manifest <target>=<archive> [...] --base-url https://...
54
+
55
+ ${style.bold("EXAMPLES")}
56
+ vantail dev
57
+ vantail build --mode staging
58
+ vantail package --sign "Developer ID Application: Jane Doe (ABCDE12345)"
59
+ vantail package --update --installer
60
+ vantail updater manifest darwin-aarch64=build/darwin/App-1.1.0-darwin-aarch64.tar.gz \\
61
+ --base-url https://downloads.example.com/1.1.0
62
+ `.trim();
63
+ async function main() {
64
+ const args = parseArgs(process.argv.slice(2));
65
+ const cwd = process.cwd();
66
+ if (boolFlag(args, "version", "v") || args.command === "version") {
67
+ console.log(VERSION);
68
+ return 0;
69
+ }
70
+ if (args.command === undefined || args.command === "help" || boolFlag(args, "help", "h")) {
71
+ console.log(HELP);
72
+ return args.command === undefined ? 1 : 0;
73
+ }
74
+ const config = stringFlag(args, "config", "c");
75
+ switch (args.command) {
76
+ case "dev":
77
+ return dev({
78
+ cwd,
79
+ ...(config ? { config } : {}),
80
+ ...(numberFlag(args, "port") !== undefined ? { port: numberFlag(args, "port") } : {}),
81
+ ...(stringFlag(args, "host") ? { host: stringFlag(args, "host") } : {}),
82
+ });
83
+ case "build":
84
+ await build({
85
+ cwd,
86
+ ...(config ? { config } : {}),
87
+ ...(stringFlag(args, "mode") ? { mode: stringFlag(args, "mode") } : {}),
88
+ });
89
+ return 0;
90
+ case "package":
91
+ return packageApp({
92
+ cwd,
93
+ ...(config ? { config } : {}),
94
+ ...(boolFlag(args, "build") === false ? { skipBuild: true } : {}),
95
+ ...(stringFlag(args, "out-dir") ? { outDir: stringFlag(args, "out-dir") } : {}),
96
+ ...(stringFlag(args, "sign") ? { sign: stringFlag(args, "sign") } : {}),
97
+ ...(boolFlag(args, "update") ? { update: true } : {}),
98
+ ...(boolFlag(args, "installer") ? { installer: true } : {}),
99
+ ...(boolFlag(args, "allow-debug-runtime") ? { allowDebugRuntime: true } : {}),
100
+ });
101
+ case "doctor":
102
+ return doctor({ cwd, ...(config ? { config } : {}) });
103
+ case "updater":
104
+ return updaterCommand(args, cwd, config);
105
+ default:
106
+ log.error(`Unknown command "${args.command}". Try \`vantail help\`.`);
107
+ return 1;
108
+ }
109
+ }
110
+ /** `vantail updater <keygen|sign|manifest>`. */
111
+ async function updaterCommand(args, cwd, config) {
112
+ const [subcommand, ...rest] = args.positional;
113
+ const key = stringFlag(args, "key");
114
+ const out = stringFlag(args, "out");
115
+ switch (subcommand) {
116
+ case "keygen":
117
+ return keygen({
118
+ cwd,
119
+ ...(out ? { out } : {}),
120
+ ...(boolFlag(args, "force") ? { force: true } : {}),
121
+ });
122
+ case "sign": {
123
+ const file = rest[0];
124
+ if (!file) {
125
+ log.error("vantail updater sign <file>");
126
+ return 1;
127
+ }
128
+ return sign({ cwd, file, ...(key ? { key } : {}) });
129
+ }
130
+ case "manifest": {
131
+ if (rest.length === 0) {
132
+ log.error("vantail updater manifest <target>=<archive> [...] [--base-url <url>]");
133
+ return 1;
134
+ }
135
+ return manifest({
136
+ cwd,
137
+ artifacts: rest,
138
+ ...(config ? { config } : {}),
139
+ ...(key ? { key } : {}),
140
+ ...(out ? { out } : {}),
141
+ ...(stringFlag(args, "base-url") ? { baseUrl: stringFlag(args, "base-url") } : {}),
142
+ ...(stringFlag(args, "notes") ? { notes: stringFlag(args, "notes") } : {}),
143
+ ...(stringFlag(args, "date") ? { date: stringFlag(args, "date") } : {}),
144
+ });
145
+ }
146
+ default:
147
+ log.error(`Unknown updater command "${subcommand ?? ""}". Try keygen, sign or manifest.`);
148
+ return 1;
149
+ }
150
+ }
151
+ main()
152
+ .then((code) => {
153
+ process.exitCode = code;
154
+ })
155
+ .catch((error) => {
156
+ // A config problem is the user's typo, not a crash - no stack trace.
157
+ if (error instanceof Error && error.name === ConfigErrorName) {
158
+ log.error(error.message);
159
+ }
160
+ else if (error instanceof Error) {
161
+ log.error(error.message);
162
+ if (process.env["VANTAIL_DEBUG"])
163
+ console.error(error.stack);
164
+ }
165
+ else {
166
+ log.error(String(error));
167
+ }
168
+ process.exitCode = 1;
169
+ });
170
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Writing `.tar.gz` update archives.
3
+ *
4
+ * Shelling out to `tar` would be shorter, but the runtime has to be able to
5
+ * unpack whatever this produces on every platform, and Windows' bundled
6
+ * `tar` is not the same program as the one on macOS. A few hundred lines of
7
+ * ustar is a smaller risk than that difference.
8
+ *
9
+ * Only what a Vantail bundle actually contains is supported: directories and
10
+ * regular files, with the executable bit preserved. No symlinks, no hard
11
+ * links, no sparse files.
12
+ */
13
+ /**
14
+ * Archive `root` under its own name, gzipped.
15
+ *
16
+ * The single top-level entry is the convention the runtime relies on when it
17
+ * unpacks an update: whatever is in there is the new application.
18
+ */
19
+ export declare function tarGzip(root: string): Promise<Buffer>;
20
+ /**
21
+ * Archive the *contents* of a directory rather than the directory itself,
22
+ * with the `./` prefix Debian expects inside a `.deb`.
23
+ */
24
+ export declare function tarGzipContents(root: string): Promise<Buffer>;
25
+ //# sourceMappingURL=archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/bundle/archive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAqBH;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3D;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEnE"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Writing `.tar.gz` update archives.
3
+ *
4
+ * Shelling out to `tar` would be shorter, but the runtime has to be able to
5
+ * unpack whatever this produces on every platform, and Windows' bundled
6
+ * `tar` is not the same program as the one on macOS. A few hundred lines of
7
+ * ustar is a smaller risk than that difference.
8
+ *
9
+ * Only what a Vantail bundle actually contains is supported: directories and
10
+ * regular files, with the executable bit preserved. No symlinks, no hard
11
+ * links, no sparse files.
12
+ */
13
+ import { createReadStream } from "node:fs";
14
+ import { readdir, stat } from "node:fs/promises";
15
+ import { basename, join, posix, relative, sep } from "node:path";
16
+ import { gzipSync } from "node:zlib";
17
+ const BLOCK = 512;
18
+ const NAME_MAX = 100;
19
+ const PREFIX_MAX = 155;
20
+ /**
21
+ * Archive `root` under its own name, gzipped.
22
+ *
23
+ * The single top-level entry is the convention the runtime relies on when it
24
+ * unpacks an update: whatever is in there is the new application.
25
+ */
26
+ export async function tarGzip(root) {
27
+ return gzipSync(await tarball(root, basename(root)), { level: 9 });
28
+ }
29
+ /**
30
+ * Archive the *contents* of a directory rather than the directory itself,
31
+ * with the `./` prefix Debian expects inside a `.deb`.
32
+ */
33
+ export async function tarGzipContents(root) {
34
+ return gzipSync(await tarball(root, "."), { level: 9 });
35
+ }
36
+ async function tarball(root, top) {
37
+ const entries = await collect(root, top);
38
+ const blocks = [];
39
+ for (const entry of entries) {
40
+ blocks.push(...header(entry));
41
+ if (!entry.isDirectory) {
42
+ const data = await read(entry.absolute, entry.size);
43
+ blocks.push(data, padding(data.length));
44
+ }
45
+ }
46
+ // Two zero blocks mark the end of the archive.
47
+ blocks.push(Buffer.alloc(BLOCK * 2));
48
+ return Buffer.concat(blocks);
49
+ }
50
+ async function collect(root, top) {
51
+ const entries = [];
52
+ const walk = async (absolute) => {
53
+ const info = await stat(absolute);
54
+ const inside = relative(root, absolute).split(sep).filter(Boolean);
55
+ // `posix.join(".", "usr")` is `usr`, but a .deb's members are `./usr` by
56
+ // convention - so the prefix is kept rather than normalised away.
57
+ const name = top === "." ? `./${inside.join("/")}` : posix.join(top, ...inside);
58
+ if (info.isDirectory()) {
59
+ // The archive root itself is implied by its members.
60
+ if (inside.length > 0 || top !== ".") {
61
+ entries.push({
62
+ name: `${name}/`,
63
+ absolute,
64
+ isDirectory: true,
65
+ size: 0,
66
+ mode: info.mode & 0o777,
67
+ mtime: Math.floor(info.mtimeMs / 1000),
68
+ });
69
+ }
70
+ // Sorted so the same input always produces the same archive.
71
+ const children = (await readdir(absolute)).sort();
72
+ for (const child of children) {
73
+ await walk(join(absolute, child));
74
+ }
75
+ return;
76
+ }
77
+ if (!info.isFile()) {
78
+ throw new Error(`Cannot archive ${absolute}: only files and directories are supported`);
79
+ }
80
+ entries.push({
81
+ name,
82
+ absolute,
83
+ isDirectory: false,
84
+ size: info.size,
85
+ mode: info.mode & 0o777,
86
+ mtime: Math.floor(info.mtimeMs / 1000),
87
+ });
88
+ };
89
+ await walk(root);
90
+ return entries;
91
+ }
92
+ function header(entry) {
93
+ const split = splitName(entry.name);
94
+ if (!split) {
95
+ // GNU long name: the real path goes in its own entry ahead of the header.
96
+ return [...longName(entry.name), ...header({ ...entry, name: truncate(entry.name) })];
97
+ }
98
+ const block = Buffer.alloc(BLOCK);
99
+ write(block, split.name, 0, NAME_MAX);
100
+ octal(block, entry.mode, 100, 8);
101
+ octal(block, 0, 108, 8); // uid
102
+ octal(block, 0, 116, 8); // gid
103
+ octal(block, entry.size, 124, 12);
104
+ octal(block, entry.mtime, 136, 12);
105
+ block.write(entry.isDirectory ? "5" : "0", 156, 1, "ascii");
106
+ block.write("ustar\0", 257, 6, "ascii");
107
+ block.write("00", 263, 2, "ascii");
108
+ write(block, split.prefix, 345, PREFIX_MAX);
109
+ checksum(block);
110
+ return [block];
111
+ }
112
+ /** The GNU `././@LongLink` entry that carries a path over 255 bytes. */
113
+ function longName(name) {
114
+ const payload = Buffer.from(`${name}\0`, "utf8");
115
+ const block = Buffer.alloc(BLOCK);
116
+ write(block, "././@LongLink", 0, NAME_MAX);
117
+ octal(block, 0, 100, 8);
118
+ octal(block, 0, 108, 8);
119
+ octal(block, 0, 116, 8);
120
+ octal(block, payload.length, 124, 12);
121
+ octal(block, 0, 136, 12);
122
+ block.write("L", 156, 1, "ascii");
123
+ block.write("ustar ", 257, 6, "ascii");
124
+ block.write(" \0", 263, 2, "ascii");
125
+ checksum(block);
126
+ return [block, payload, padding(payload.length)];
127
+ }
128
+ /**
129
+ * ustar splits a long path across `prefix` and `name`, at a `/`. Returns
130
+ * `undefined` when no split is short enough on both sides.
131
+ */
132
+ function splitName(name) {
133
+ if (Buffer.byteLength(name) <= NAME_MAX)
134
+ return { name, prefix: "" };
135
+ const parts = name.split("/");
136
+ for (let at = 1; at < parts.length; at += 1) {
137
+ const prefix = parts.slice(0, at).join("/");
138
+ const rest = parts.slice(at).join("/");
139
+ if (Buffer.byteLength(prefix) <= PREFIX_MAX && Buffer.byteLength(rest) <= NAME_MAX) {
140
+ return { name: rest, prefix };
141
+ }
142
+ }
143
+ return undefined;
144
+ }
145
+ function truncate(name) {
146
+ const bytes = Buffer.from(name, "utf8").subarray(0, NAME_MAX - 1);
147
+ return bytes.toString("utf8");
148
+ }
149
+ function write(block, value, offset, length) {
150
+ const bytes = Buffer.from(value, "utf8");
151
+ if (bytes.length > length) {
152
+ throw new Error(`"${value}" does not fit in ${length} bytes of a tar header`);
153
+ }
154
+ bytes.copy(block, offset);
155
+ }
156
+ function octal(block, value, offset, length) {
157
+ // Numeric fields are octal, zero-padded, and NUL-terminated.
158
+ const text = Math.max(0, Math.trunc(value)).toString(8).padStart(length - 1, "0");
159
+ if (text.length > length - 1) {
160
+ throw new Error(`${value} is too large for a ${length}-byte tar field`);
161
+ }
162
+ block.write(`${text}\0`, offset, length, "ascii");
163
+ }
164
+ /** The checksum is computed with its own field read as spaces. */
165
+ function checksum(block) {
166
+ block.fill(0x20, 148, 156);
167
+ let total = 0;
168
+ for (const byte of block)
169
+ total += byte;
170
+ block.write(`${total.toString(8).padStart(6, "0")}\0 `, 148, 8, "ascii");
171
+ }
172
+ function padding(length) {
173
+ const remainder = length % BLOCK;
174
+ return remainder === 0 ? Buffer.alloc(0) : Buffer.alloc(BLOCK - remainder);
175
+ }
176
+ async function read(path, size) {
177
+ const chunks = [];
178
+ for await (const chunk of createReadStream(path)) {
179
+ chunks.push(chunk);
180
+ }
181
+ const data = Buffer.concat(chunks);
182
+ if (data.length !== size) {
183
+ throw new Error(`${path} changed size while it was being archived`);
184
+ }
185
+ return data;
186
+ }
187
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/bundle/archive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { ParsedConfig } from "@vantail/shared/load";
2
+ import type { IconSet } from "../icons/index.js";
3
+ export interface BundleInput {
4
+ config: ParsedConfig;
5
+ root: string;
6
+ /** Built web assets. */
7
+ distDir: string;
8
+ /** The precompiled runtime executable. */
9
+ runtimePath: string;
10
+ /** Directory bundles are written to. */
11
+ outDir: string;
12
+ platform: NodeJS.Platform;
13
+ /** macOS only: codesign identity, or `-` for an ad-hoc signature. */
14
+ sign?: string | undefined;
15
+ /** Generated from `app.icon`, when there is one. */
16
+ icons?: IconSet | undefined;
17
+ }
18
+ export interface BundleResult {
19
+ /** The thing a user launches. */
20
+ path: string;
21
+ kind: "app" | "portable";
22
+ }
23
+ /**
24
+ * The key the runtime looks for in an update manifest.
25
+ *
26
+ * Rust and Node disagree about how to spell an architecture, and the runtime
27
+ * builds this string from Rust's names - so the translation happens here,
28
+ * once, rather than in every publishing script.
29
+ */
30
+ export declare function updateTarget(platform?: NodeJS.Platform, arch?: string): string;
31
+ /** A file name that survives every filesystem we target. */
32
+ export declare function safeName(name: string): string;
33
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/bundle/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,IAAI,GAAE,MAAqB,GAC1B,MAAM,CAIR;AAED,4DAA4D;AAC5D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO7C"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The key the runtime looks for in an update manifest.
3
+ *
4
+ * Rust and Node disagree about how to spell an architecture, and the runtime
5
+ * builds this string from Rust's names - so the translation happens here,
6
+ * once, rather than in every publishing script.
7
+ */
8
+ export function updateTarget(platform = process.platform, arch = process.arch) {
9
+ const os = platform === "darwin" ? "darwin" : platform === "win32" ? "windows" : platform;
10
+ const cpu = arch === "arm64" ? "aarch64" : arch === "x64" ? "x86_64" : arch;
11
+ return `${os}-${cpu}`;
12
+ }
13
+ /** A file name that survives every filesystem we target. */
14
+ export function safeName(name) {
15
+ const cleaned = name
16
+ .normalize("NFKD")
17
+ .replace(/[^A-Za-z0-9 ._-]/g, "")
18
+ .trim()
19
+ .replace(/\s+/g, "-");
20
+ return cleaned.length > 0 ? cleaned : "app";
21
+ }
22
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/bundle/common.ts"],"names":[],"mappings":"AA0BA;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAQ,GAAoB,OAAO,CAAC,QAAQ,EAC5C,IAAI,GAAW,OAAO,CAAC,IAAI;IAE3B,MAAM,EAAE,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1F,MAAM,GAAG,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,OAAO,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC;AACxB,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,OAAO,GAAG,IAAI;SACjB,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,IAAI,EAAE;SACN,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxB,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Assembling a distributable application.
3
+ *
4
+ * Three ingredients, always the same three: the precompiled runtime, the
5
+ * generated `vantail.json`, and the built web assets. Where they go is the
6
+ * only thing that differs per platform, and the runtime already knows how to
7
+ * find its config in either layout.
8
+ */
9
+ import { type BundleInput, type BundleResult } from "./common.js";
10
+ export * from "./common.js";
11
+ export declare function bundle(input: BundleInput): Promise<BundleResult>;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bundle/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAAY,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAG5E,cAAc,aAAa,CAAC;AAE5B,wBAAsB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAItE"}