@w6w/cli 0.9.23 → 0.9.28

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.
@@ -0,0 +1,413 @@
1
+ /**
2
+ * `w6w build app <folder> [--out <dir>] [--pack <file>]` — turn an app folder into a
3
+ * self-describing bundle, locally.
4
+ *
5
+ * Declared in `endpoints.json` `cli.commands[]` (CLI-only: no API operation sits behind
6
+ * it, so the node and python lanes do not implement it). It never touches the network.
7
+ *
8
+ * The folder is a Node package: a `package.json` with a `w6w` block, `version`,
9
+ * `scripts.test`, `scripts.build` and a `main` that names the built single-file ESM
10
+ * bundle. The command runs `npm run test`, then `npm run build` (both streamed to
11
+ * stderr so `--json` stdout stays one document), and then writes, under the output
12
+ * directory:
13
+ *
14
+ * - `app.js` — the built file, byte for byte; its sha256 is the app's **digest**;
15
+ * - `manifest.json` — deterministic (no timestamps), with the app's definition read
16
+ * by importing the built file, and the names of its function-valued hooks. Every
17
+ * relative file the `w6w` block points at (icons) is embedded in its `app` block as a
18
+ * `data:` URI, so the bundle is self-contained.
19
+ *
20
+ * Nothing is written unless the tests and the build both pass. With `--pack`, the
21
+ * pack or index file is updated with the app's `id`, `version` and `digest` — a
22
+ * re-read, modify and rename done under an exclusive `<pack>.lock`, so many builds may
23
+ * share one pack concurrently.
24
+ *
25
+ * Host access follows the package's rule (see `src/store-fs.ts`): `node:` modules are
26
+ * imported through a non-literal specifier with structural types, so this compiles
27
+ * under the npm build's `"types": []` and runs under Deno and Node alike. The `npm`
28
+ * process is behind {@linkcode useBuildRunner}, the test suite's seam.
29
+ *
30
+ * @module
31
+ */
32
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
33
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
34
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
35
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
36
+ });
37
+ }
38
+ return path;
39
+ };
40
+ import { VERSION } from "../../mod.js";
41
+ import { argument, noExtraArguments, textFlag, usageError } from "./shared.js";
42
+ let hostPromise;
43
+ /** The `node:` built-ins, imported by variable so the npm build needs no host types. */
44
+ function host() {
45
+ hostPromise ??= (async () => {
46
+ const fsName = "node:fs/promises";
47
+ const pathName = "node:path";
48
+ const urlName = "node:url";
49
+ const fs = (await import(__rewriteRelativeImportExtension(fsName)));
50
+ const path = (await import(__rewriteRelativeImportExtension(pathName)));
51
+ const url = (await import(__rewriteRelativeImportExtension(urlName)));
52
+ return { fs, path, fileUrl: (p) => url.pathToFileURL(p).href };
53
+ })();
54
+ return hostPromise;
55
+ }
56
+ const hostRunner = async (args, cwd) => {
57
+ const name = "node:child_process";
58
+ const { spawn } = (await import(__rewriteRelativeImportExtension(name)));
59
+ const windows = globalThis.process?.platform ===
60
+ "win32" ||
61
+ globalThis.Deno?.build?.os === "windows";
62
+ return await new Promise((resolve, reject) => {
63
+ // stdout is redirected to stderr (fd 2) so the command's own stdout stays clean.
64
+ const child = spawn("npm", args, { cwd, stdio: ["ignore", 2, 2], shell: windows });
65
+ child.on("error", reject);
66
+ child.on("close", (code) => resolve(code ?? 1));
67
+ });
68
+ };
69
+ let runner = hostRunner;
70
+ /**
71
+ * Replace the `npm` runner — the test suite's seam. Returns a function that restores
72
+ * the previous one.
73
+ */
74
+ export function useBuildRunner(replacement) {
75
+ const previous = runner;
76
+ runner = replacement;
77
+ return () => {
78
+ runner = previous;
79
+ };
80
+ }
81
+ function isObject(value) {
82
+ return typeof value === "object" && value !== null && !Array.isArray(value);
83
+ }
84
+ async function sha256Hex(bytes) {
85
+ const digest = await crypto.subtle.digest("SHA-256", bytes);
86
+ return Array.from(new Uint8Array(digest), (b) => b.toString(16).padStart(2, "0")).join("");
87
+ }
88
+ async function isFile(fs, path) {
89
+ try {
90
+ return (await fs.stat(path)).isFile();
91
+ }
92
+ catch {
93
+ return false;
94
+ }
95
+ }
96
+ async function readJson(fs, path) {
97
+ return JSON.parse(await fs.readFile(path, "utf8"));
98
+ }
99
+ function toJson(value) {
100
+ return JSON.stringify(value, null, 2) + "\n";
101
+ }
102
+ function nonEmptyString(value) {
103
+ return typeof value === "string" && value.trim().length > 0;
104
+ }
105
+ /** Names of an item's function-valued properties, in declaration order. */
106
+ function hookNames(item) {
107
+ if (!isObject(item))
108
+ return [];
109
+ return Object.keys(item).filter((key) => typeof item[key] === "function");
110
+ }
111
+ /** The JSON form of one definition item, plus the hooks it carries. */
112
+ function describeItem(item) {
113
+ const plain = JSON.parse(JSON.stringify(item ?? null));
114
+ if (!isObject(plain))
115
+ return plain;
116
+ return { ...plain, hooks: hookNames(item) };
117
+ }
118
+ const DEFINITION_LISTS = ["actions", "auth", "triggers", "healthChecks"];
119
+ function describeDefinition(definition) {
120
+ if (!isObject(definition)) {
121
+ throw new Error("the built file's default export is not an app definition (an object).");
122
+ }
123
+ const result = {};
124
+ for (const key of DEFINITION_LISTS) {
125
+ const value = definition[key];
126
+ const list = value === undefined || value === null
127
+ ? []
128
+ : Array.isArray(value)
129
+ ? value
130
+ : [value];
131
+ result[key] = list.map(describeItem);
132
+ }
133
+ for (const key of Object.keys(definition)) {
134
+ if (DEFINITION_LISTS.includes(key))
135
+ continue;
136
+ const value = definition[key];
137
+ if (typeof value === "function" || value === undefined)
138
+ continue;
139
+ result[key] = JSON.parse(JSON.stringify(value));
140
+ }
141
+ return result;
142
+ }
143
+ function parsePack(context, packFlag, text) {
144
+ let data = { apps: [] };
145
+ if (text !== undefined) {
146
+ try {
147
+ data = JSON.parse(text);
148
+ }
149
+ catch {
150
+ throw usageError(context, `\`${packFlag}\` is not valid JSON.`);
151
+ }
152
+ }
153
+ if (!isObject(data) || !Array.isArray(data.apps)) {
154
+ throw usageError(context, `\`${packFlag}\` has no \`apps\` array.`);
155
+ }
156
+ return data;
157
+ }
158
+ async function readPackText(h, path) {
159
+ try {
160
+ return await h.fs.readFile(path, "utf8");
161
+ }
162
+ catch {
163
+ return undefined; // a missing pack is created
164
+ }
165
+ }
166
+ /** Validates the pack up front, so a bad file fails before test/build. */
167
+ async function checkPack(context, h, packFlag) {
168
+ const path = h.path.resolve(packFlag);
169
+ const data = parsePack(context, packFlag, await readPackText(h, path));
170
+ return { path, dir: h.path.dirname(path), data };
171
+ }
172
+ function updatePack(h, pack, folder, entry) {
173
+ const apps = pack.data.apps;
174
+ const byPath = apps.find((item) => isObject(item) && typeof item.path === "string" &&
175
+ h.path.resolve(pack.dir, item.path) === folder);
176
+ const target = byPath ?? apps.find((item) => isObject(item) && item.id === entry.id);
177
+ if (target) {
178
+ Object.assign(target, entry);
179
+ return;
180
+ }
181
+ apps.push({ ...entry });
182
+ }
183
+ const LOCK_TIMEOUT_MS = 30_000;
184
+ const LOCK_STALE_MS = 30_000;
185
+ function sleep(ms) {
186
+ return new Promise((resolve) => setTimeout(resolve, ms));
187
+ }
188
+ /** Runs `work` while holding `<pack>.lock` (created with `wx`; stale locks are removed). */
189
+ async function withPackLock(h, packPath, work) {
190
+ const lock = `${packPath}.lock`;
191
+ const deadline = Date.now() + LOCK_TIMEOUT_MS;
192
+ for (;;) {
193
+ try {
194
+ await (await h.fs.open(lock, "wx")).close();
195
+ break;
196
+ }
197
+ catch (error) {
198
+ if (error.code !== "EEXIST")
199
+ throw error;
200
+ try {
201
+ if (Date.now() - (await h.fs.stat(lock)).mtimeMs > LOCK_STALE_MS) {
202
+ await h.fs.rm(lock, { force: true });
203
+ continue;
204
+ }
205
+ }
206
+ catch {
207
+ continue; // released between the open and the stat: try again at once
208
+ }
209
+ if (Date.now() > deadline) {
210
+ throw new Error(`timed out waiting for the pack lock \`${lock}\`.`);
211
+ }
212
+ await sleep(25 + Math.floor(Math.random() * 75));
213
+ }
214
+ }
215
+ try {
216
+ return await work();
217
+ }
218
+ finally {
219
+ await h.fs.rm(lock, { force: true });
220
+ }
221
+ }
222
+ /** Re-reads the pack, applies the entry, and renames a temp file over it, under the lock. */
223
+ async function commitPack(context, h, packFlag, pack, folder, entry) {
224
+ await h.fs.mkdir(pack.dir, { recursive: true });
225
+ await withPackLock(h, pack.path, async () => {
226
+ const fresh = {
227
+ ...pack,
228
+ data: parsePack(context, packFlag, await readPackText(h, pack.path)),
229
+ };
230
+ updatePack(h, fresh, folder, entry);
231
+ const temp = `${pack.path}.${Math.random().toString(36).slice(2)}.tmp`;
232
+ try {
233
+ await h.fs.writeFile(temp, toJson(fresh.data));
234
+ await h.fs.rename(temp, pack.path);
235
+ }
236
+ catch (error) {
237
+ await h.fs.rm(temp, { force: true });
238
+ throw error;
239
+ }
240
+ });
241
+ }
242
+ // ---------------------------------------------------------------------------
243
+ // Assets
244
+ // ---------------------------------------------------------------------------
245
+ const MIME_TYPES = {
246
+ svg: "image/svg+xml",
247
+ png: "image/png",
248
+ jpg: "image/jpeg",
249
+ jpeg: "image/jpeg",
250
+ webp: "image/webp",
251
+ gif: "image/gif",
252
+ ico: "image/x-icon",
253
+ };
254
+ function base64(bytes) {
255
+ let binary = "";
256
+ for (let i = 0; i < bytes.length; i += 0x8000) {
257
+ binary += String.fromCharCode(...bytes.subarray(i, i + 0x8000));
258
+ }
259
+ return btoa(binary);
260
+ }
261
+ /**
262
+ * Every string leaf of `value` that names an existing relative file, replaced in place by
263
+ * a `data:` URI. `http(s):` and `data:` values are not relative paths and stay as they are.
264
+ */
265
+ async function embedAssets(h, folder, value, skip, context) {
266
+ if (typeof value === "string") {
267
+ if (!(value.startsWith("./") || value.startsWith("../")))
268
+ return value;
269
+ const source = h.path.resolve(folder, value);
270
+ if (skip.has(source) || !(await isFile(h.fs, source)))
271
+ return value;
272
+ const dot = source.lastIndexOf(".");
273
+ const extension = dot < 0 ? "" : source.slice(dot + 1).toLowerCase();
274
+ const mime = MIME_TYPES[extension];
275
+ if (mime === undefined) {
276
+ throw usageError(context, `cannot embed \`${value}\`: unsupported asset type \`${extension ? "." + extension : "(none)"}\` ` +
277
+ `(supported: ${Object.keys(MIME_TYPES).map((e) => "." + e).join(", ")}).`);
278
+ }
279
+ return `data:${mime};base64,${base64(await h.fs.readFile(source))}`;
280
+ }
281
+ if (Array.isArray(value)) {
282
+ const out = [];
283
+ for (const item of value)
284
+ out.push(await embedAssets(h, folder, item, skip, context));
285
+ return out;
286
+ }
287
+ if (isObject(value)) {
288
+ const out = {};
289
+ for (const key of Object.keys(value)) {
290
+ out[key] = await embedAssets(h, folder, value[key], skip, context);
291
+ }
292
+ return out;
293
+ }
294
+ return value;
295
+ }
296
+ // ---------------------------------------------------------------------------
297
+ // The command
298
+ // ---------------------------------------------------------------------------
299
+ const buildApp = async (context) => {
300
+ const folderArg = argument(context, 0, "an app folder, like `./apps/2chat`");
301
+ noExtraArguments(context, 1);
302
+ const outFlag = textFlag(context, "out");
303
+ const packFlag = textFlag(context, "pack");
304
+ const h = await host();
305
+ const { fs, path } = h;
306
+ const folder = path.resolve(folderArg);
307
+ // 1. package.json
308
+ const packagePath = path.join(folder, "package.json");
309
+ let pkg;
310
+ try {
311
+ pkg = await readJson(fs, packagePath);
312
+ }
313
+ catch (error) {
314
+ const reason = error instanceof SyntaxError ? "is not valid JSON" : "could not be read";
315
+ throw usageError(context, `\`${packagePath}\` ${reason}.`);
316
+ }
317
+ if (!isObject(pkg))
318
+ throw usageError(context, `\`${packagePath}\` is not a JSON object.`);
319
+ const block = pkg.w6w;
320
+ const scripts = isObject(pkg.scripts) ? pkg.scripts : {};
321
+ const missing = [];
322
+ if (!isObject(block) || !nonEmptyString(block.id))
323
+ missing.push("w6w.id");
324
+ if (!nonEmptyString(pkg.version))
325
+ missing.push("version");
326
+ if (!nonEmptyString(scripts.test))
327
+ missing.push("scripts.test");
328
+ if (!nonEmptyString(scripts.build))
329
+ missing.push("scripts.build");
330
+ if (!nonEmptyString(pkg.main))
331
+ missing.push("main");
332
+ if (missing.length > 0) {
333
+ throw usageError(context, `\`${packagePath}\` is missing: ${missing.join(", ")}.`);
334
+ }
335
+ const w6w = block;
336
+ const id = w6w.id;
337
+ const version = pkg.version;
338
+ const pack = packFlag === undefined ? undefined : await checkPack(context, h, packFlag);
339
+ // 2-3. test, then build
340
+ for (const script of ["test", "build"]) {
341
+ const code = await runner(["run", script], folder);
342
+ if (code !== 0) {
343
+ throw new Error(`\`npm run ${script}\` failed with exit code ${code}. Nothing was written.`);
344
+ }
345
+ }
346
+ // 4. the built file
347
+ const builtFile = path.resolve(folder, pkg.main);
348
+ if (!(await isFile(fs, builtFile))) {
349
+ throw new Error(`the build did not produce \`${builtFile}\` (package.json \`main\`).`);
350
+ }
351
+ const bytes = await fs.readFile(builtFile);
352
+ const digest = await sha256Hex(bytes);
353
+ // 7. definition (before anything is written, so an unloadable bundle writes nothing)
354
+ let definition;
355
+ try {
356
+ const module = (await import(__rewriteRelativeImportExtension(h.fileUrl(builtFile))));
357
+ definition = describeDefinition(module.default);
358
+ }
359
+ catch (error) {
360
+ const reason = error instanceof Error ? error.message : String(error);
361
+ throw new Error(`could not load \`${builtFile}\`: ${reason}`);
362
+ }
363
+ // 6. assets (resolved before writing, for the same reason)
364
+ const appBlock = { ...w6w };
365
+ const skip = new Set();
366
+ if (typeof appBlock.entry === "string")
367
+ skip.add(path.resolve(folder, appBlock.entry));
368
+ delete appBlock.entry;
369
+ delete appBlock.build;
370
+ delete appBlock.internal;
371
+ const app = await embedAssets(h, folder, appBlock, skip, context);
372
+ // 5. output
373
+ const out = outFlag === undefined ? path.dirname(builtFile) : path.resolve(outFlag);
374
+ await fs.mkdir(out, { recursive: true });
375
+ const execTarget = path.join(out, "app.js");
376
+ if (path.resolve(execTarget) !== builtFile)
377
+ await fs.writeFile(execTarget, bytes);
378
+ // 8. manifest
379
+ const manifest = {
380
+ manifestVersion: "1",
381
+ id,
382
+ name: pkg.name,
383
+ version,
384
+ description: pkg.description,
385
+ license: pkg.license,
386
+ app,
387
+ exec: { file: "app.js", sha256: digest, bytes: bytes.length, format: "esm" },
388
+ digest,
389
+ definition,
390
+ builder: `@w6w/cli@${VERSION}`,
391
+ };
392
+ await fs.writeFile(path.join(out, "manifest.json"), toJson(manifest));
393
+ // 9. pack
394
+ if (pack) {
395
+ await commitPack(context, h, packFlag, pack, folder, { id, version, digest });
396
+ }
397
+ // 10. result
398
+ const files = ["app.js", "manifest.json"];
399
+ const payload = {
400
+ id,
401
+ version,
402
+ digest,
403
+ out,
404
+ files,
405
+ ...(pack ? { pack: pack.path } : {}),
406
+ };
407
+ context.out.emit(payload, () => `built ${id}@${version} → ${out} (sha256 ${digest.slice(0, 12)})`);
408
+ };
409
+ /** `w6w build app`. */
410
+ export const BUILD_COMMANDS = {
411
+ "build app": buildApp,
412
+ };
413
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `w6w data-stores …` — data stores and their entries, at the command line.
3
+ *
4
+ * Fourteen commands, **one SDK call each** (`client.dataStores.*`). The entry
5
+ * verbs carry an `entry-` prefix (`entry-get`, `entry-set`, …) because the
6
+ * command path is capped at two tokens (`src/args.ts`); a `data-stores entries
7
+ * get` spelling would not resolve. Errors are not caught: `main()` reports a
8
+ * throw once on stderr and maps it to an exit code, so an `ApiError` exits 2
9
+ * (its `code` is on stderr, see {@linkcode withErrorCode}) and a usage error
10
+ * exits 1 with **zero requests**.
11
+ *
12
+ * The CSV pair: `import <id> --file <path|->` sends the file (or stdin) as
13
+ * `text/csv`; `export <id>` writes the CSV to stdout, or to `--out <path>`.
14
+ *
15
+ * @module
16
+ */
17
+ import type { CommandRegistry } from "../../mod.ts";
18
+ /** Every `w6w data-stores …` command, keyed by canonical command path. */
19
+ export declare const DATA_STORE_COMMANDS: CommandRegistry;
20
+ //# sourceMappingURL=data-stores.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-stores.d.ts","sourceRoot":"","sources":["../../../src/commands/data-stores.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,cAAc,CAAC;AAgQpE,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,EAAE,eAejC,CAAC"}