@pwfabric/cli 1.0.0-rc.0 → 1.0.0-rc.1

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 (132) hide show
  1. package/dist/args.d.ts +0 -1
  2. package/dist/args.js.map +1 -1
  3. package/dist/bin.d.ts +0 -1
  4. package/dist/bin.js.map +1 -1
  5. package/dist/commands/add.d.ts +0 -1
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/build.d.ts +0 -1
  8. package/dist/commands/build.js.map +1 -1
  9. package/dist/commands/create.d.ts +0 -1
  10. package/dist/commands/create.js.map +1 -1
  11. package/dist/commands/dev.d.ts +0 -1
  12. package/dist/commands/dev.js.map +1 -1
  13. package/dist/commands/lib/flags.d.ts +0 -1
  14. package/dist/commands/lib/flags.js.map +1 -1
  15. package/dist/commands/lib/identity.d.ts +0 -1
  16. package/dist/commands/lib/identity.js.map +1 -1
  17. package/dist/commands/lib/project.d.ts +0 -1
  18. package/dist/commands/lib/project.js.map +1 -1
  19. package/dist/commands/lib/report.d.ts +0 -1
  20. package/dist/commands/lib/report.js.map +1 -1
  21. package/dist/commands/lib/starter.d.ts +0 -1
  22. package/dist/commands/lib/starter.js.map +1 -1
  23. package/dist/commands/lib/static-server.d.ts +0 -1
  24. package/dist/commands/lib/static-server.js +5 -2
  25. package/dist/commands/lib/static-server.js.map +1 -1
  26. package/dist/commands/pack.d.ts +0 -1
  27. package/dist/commands/pack.js.map +1 -1
  28. package/dist/commands/registry.d.ts +0 -1
  29. package/dist/commands/registry.js.map +1 -1
  30. package/dist/commands/run.d.ts +0 -1
  31. package/dist/commands/run.js +2 -2
  32. package/dist/commands/run.js.map +1 -1
  33. package/dist/commands/types.d.ts +0 -1
  34. package/dist/commands/types.js.map +1 -1
  35. package/dist/commands/validate.d.ts +0 -1
  36. package/dist/commands/validate.js.map +1 -1
  37. package/dist/dev/assemble.d.ts +0 -1
  38. package/dist/dev/assemble.js.map +1 -1
  39. package/dist/dev/compile.d.ts +0 -1
  40. package/dist/dev/compile.js.map +1 -1
  41. package/dist/dev/csp.d.ts +0 -1
  42. package/dist/dev/csp.js.map +1 -1
  43. package/dist/dev/diagnostics.d.ts +0 -1
  44. package/dist/dev/diagnostics.js.map +1 -1
  45. package/dist/dev/envelope.d.ts +0 -1
  46. package/dist/dev/envelope.js.map +1 -1
  47. package/dist/dev/media.d.ts +0 -1
  48. package/dist/dev/media.js.map +1 -1
  49. package/dist/dev/needs-host.d.ts +0 -1
  50. package/dist/dev/needs-host.js.map +1 -1
  51. package/dist/dev/output.d.ts +0 -1
  52. package/dist/dev/output.js.map +1 -1
  53. package/dist/dev/overlay.d.ts +0 -1
  54. package/dist/dev/overlay.js.map +1 -1
  55. package/dist/dev/server.d.ts +0 -1
  56. package/dist/dev/server.js +5 -1
  57. package/dist/dev/server.js.map +1 -1
  58. package/dist/dev/shell.d.ts +12 -1
  59. package/dist/dev/shell.js +23 -0
  60. package/dist/dev/shell.js.map +1 -1
  61. package/dist/dev/sources.d.ts +0 -1
  62. package/dist/dev/sources.js.map +1 -1
  63. package/dist/dev/theme.d.ts +0 -1
  64. package/dist/dev/theme.js.map +1 -1
  65. package/dist/dev/types.d.ts +0 -1
  66. package/dist/dev/types.js.map +1 -1
  67. package/dist/dev/watcher.d.ts +0 -1
  68. package/dist/dev/watcher.js.map +1 -1
  69. package/dist/host/definitions.d.ts +0 -1
  70. package/dist/host/definitions.js.map +1 -1
  71. package/dist/host/http.d.ts +0 -1
  72. package/dist/host/http.js.map +1 -1
  73. package/dist/host/local-host.d.ts +0 -1
  74. package/dist/host/local-host.js.map +1 -1
  75. package/dist/host/oidc.d.ts +0 -1
  76. package/dist/host/oidc.js.map +1 -1
  77. package/dist/host/query.d.ts +0 -1
  78. package/dist/host/query.js.map +1 -1
  79. package/dist/host/receipts.d.ts +0 -1
  80. package/dist/host/receipts.js.map +1 -1
  81. package/dist/host/records.d.ts +0 -1
  82. package/dist/host/records.js.map +1 -1
  83. package/dist/host/tokens.d.ts +0 -1
  84. package/dist/host/tokens.js.map +1 -1
  85. package/dist/host/types.d.ts +0 -1
  86. package/dist/host/types.js.map +1 -1
  87. package/dist/index.d.ts +2 -1
  88. package/dist/index.js +11 -1
  89. package/dist/index.js.map +1 -1
  90. package/package.json +26 -25
  91. package/dist/args.d.ts.map +0 -1
  92. package/dist/bin.d.ts.map +0 -1
  93. package/dist/commands/add.d.ts.map +0 -1
  94. package/dist/commands/build.d.ts.map +0 -1
  95. package/dist/commands/create.d.ts.map +0 -1
  96. package/dist/commands/dev.d.ts.map +0 -1
  97. package/dist/commands/lib/flags.d.ts.map +0 -1
  98. package/dist/commands/lib/identity.d.ts.map +0 -1
  99. package/dist/commands/lib/project.d.ts.map +0 -1
  100. package/dist/commands/lib/report.d.ts.map +0 -1
  101. package/dist/commands/lib/starter.d.ts.map +0 -1
  102. package/dist/commands/lib/static-server.d.ts.map +0 -1
  103. package/dist/commands/pack.d.ts.map +0 -1
  104. package/dist/commands/registry.d.ts.map +0 -1
  105. package/dist/commands/run.d.ts.map +0 -1
  106. package/dist/commands/types.d.ts.map +0 -1
  107. package/dist/commands/validate.d.ts.map +0 -1
  108. package/dist/dev/assemble.d.ts.map +0 -1
  109. package/dist/dev/compile.d.ts.map +0 -1
  110. package/dist/dev/csp.d.ts.map +0 -1
  111. package/dist/dev/diagnostics.d.ts.map +0 -1
  112. package/dist/dev/envelope.d.ts.map +0 -1
  113. package/dist/dev/media.d.ts.map +0 -1
  114. package/dist/dev/needs-host.d.ts.map +0 -1
  115. package/dist/dev/output.d.ts.map +0 -1
  116. package/dist/dev/overlay.d.ts.map +0 -1
  117. package/dist/dev/server.d.ts.map +0 -1
  118. package/dist/dev/shell.d.ts.map +0 -1
  119. package/dist/dev/sources.d.ts.map +0 -1
  120. package/dist/dev/theme.d.ts.map +0 -1
  121. package/dist/dev/types.d.ts.map +0 -1
  122. package/dist/dev/watcher.d.ts.map +0 -1
  123. package/dist/host/definitions.d.ts.map +0 -1
  124. package/dist/host/http.d.ts.map +0 -1
  125. package/dist/host/local-host.d.ts.map +0 -1
  126. package/dist/host/oidc.d.ts.map +0 -1
  127. package/dist/host/query.d.ts.map +0 -1
  128. package/dist/host/receipts.d.ts.map +0 -1
  129. package/dist/host/records.d.ts.map +0 -1
  130. package/dist/host/tokens.d.ts.map +0 -1
  131. package/dist/host/types.d.ts.map +0 -1
  132. package/dist/index.d.ts.map +0 -1
package/dist/args.d.ts CHANGED
@@ -9,4 +9,3 @@ export declare function parseArgs(argv: readonly string[]): {
9
9
  command: string | undefined;
10
10
  args: ParsedArgs;
11
11
  };
12
- //# sourceMappingURL=args.d.ts.map
package/dist/args.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,IAAuB;IAC/C,MAAM,WAAW,GAAa,EAAE,CAAA;IAChC,MAAM,KAAK,GAAqC,EAAE,CAAA;IAClD,IAAI,IAAI,GAAG,KAAK,CAAA;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAW,CAAA;QAC3B,IAAI,IAAI,EAAE,CAAC;YACT,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC;aAAM,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,GAAG,IAAI,CAAA;QACb,CAAC;aAAM,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC5B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACZ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;YAC/C,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBACxB,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;oBAClB,CAAC,EAAE,CAAA;gBACL,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IACD,MAAM,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,WAAW,CAAA;IACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAA;AACzD,CAAC"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,IAAuB;IAC/C,MAAM,WAAW,GAAa,EAAE,CAAA;IAChC,MAAM,KAAK,GAAqC,EAAE,CAAA;IAClD,IAAI,IAAI,GAAG,KAAK,CAAA;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAW,CAAA;QAC3B,IAAI,IAAI,EAAE,CAAC;YACT,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC;aAAM,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,GAAG,IAAI,CAAA;QACb,CAAC;aAAM,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC5B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACZ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;YAC/C,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBACxB,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;oBAClB,CAAC,EAAE,CAAA;gBACL,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IACD,MAAM,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,WAAW,CAAA;IACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAA;AACzD,CAAC","sourcesContent":["import type { ParsedArgs } from './commands/types.js'\n\n/**\n * Splits argv (without the node binary and script) into the command name and\n * its arguments. `--flag value` and `--flag=value` become strings, a bare\n * `--flag` (or one followed by another flag) becomes true, and everything\n * after a lone `--` is positional.\n */\nexport function parseArgs(argv: readonly string[]): { command: string | undefined; args: ParsedArgs } {\n const positionals: string[] = []\n const flags: Record<string, string | boolean> = {}\n let rest = false\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i] as string\n if (rest) {\n positionals.push(a)\n } else if (a === '--') {\n rest = true\n } else if (a.startsWith('--')) {\n const body = a.slice(2)\n const eq = body.indexOf('=')\n if (eq >= 0) {\n flags[body.slice(0, eq)] = body.slice(eq + 1)\n } else {\n const next = argv[i + 1]\n if (next !== undefined && !next.startsWith('--')) {\n flags[body] = next\n i++\n } else {\n flags[body] = true\n }\n }\n } else {\n positionals.push(a)\n }\n }\n const [command, ...rest_] = positionals\n return { command, args: { positionals: rest_, flags } }\n}\n"]}
package/dist/bin.d.ts CHANGED
@@ -1,3 +1,2 @@
1
1
  #!/usr/bin/env node
2
2
  export {};
3
- //# sourceMappingURL=bin.d.ts.map
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAC7C,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;IAClB,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAChD,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAChD,GAAG,EAAE,OAAO,CAAC,GAAG;CACjB,CAAC,CAAA;AACF,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAA"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAC7C,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;IAClB,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAChD,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAChD,GAAG,EAAE,OAAO,CAAC,GAAG;CACjB,CAAC,CAAA;AACF,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAA","sourcesContent":["#!/usr/bin/env node\nimport { main } from './index.js'\n\nconst code = await main(process.argv.slice(2), {\n cwd: process.cwd(),\n out: (line) => process.stdout.write(line + '\\n'),\n err: (line) => process.stderr.write(line + '\\n'),\n env: process.env,\n})\nprocess.exitCode = code\n"]}
@@ -1,4 +1,3 @@
1
1
  import type { Command, CommandIO, ParsedArgs } from './types.js';
2
2
  export declare function runAdd(args: ParsedArgs, io: CommandIO): Promise<number>;
3
3
  export declare const add: Command;
4
- //# sourceMappingURL=add.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `pwf add <pack>` — install a pack build into the project cache and pin it.\n */\nimport { hashPack, packContent, validatePack } from '@pwfabric/pack'\nimport type { Command, CommandIO, ParsedArgs } from './types.js'\nimport { guard, stringFlag, UsageError } from './lib/flags.js'\nimport { cacheDir, cacheRelDir, readPackSource, resolveFrom, writePackFolder } from './lib/project.js'\nimport { caretRange, readIdentityFile, upsertPin, upsertRequirement, writeIdentityFile } from './lib/identity.js'\nimport { printIssues } from './lib/report.js'\n\nexport async function runAdd(args: ParsedArgs, io: CommandIO): Promise<number> {\n const source = args.positionals[0]\n if (source === undefined) throw new UsageError('missing <path-to.pwpack|dir>')\n const root = resolveFrom(io.cwd, stringFlag(args, 'dir'))\n const doc = await readIdentityFile(root)\n\n const sourceAbs = resolveFrom(io.cwd, source)\n const incoming = await readPackSource(sourceAbs)\n const checked = validatePack(incoming)\n if (!checked.ok || !checked.identity) {\n io.err(`pwf add: ${sourceAbs} is not a valid pack`)\n printIssues(io, checked.issues.filter((i) => i.severity === 'error'))\n return 1\n }\n const { id, version } = checked.identity\n if (id === doc.id) {\n io.err(`pwf add: ${id} is this project itself`)\n return 1\n }\n // Only the pack content is installed; the pin is the hash of exactly that.\n const content = packContent(incoming)\n const hash = hashPack(content)\n await writePackFolder(cacheDir(root, id, version), content)\n upsertPin(doc, { id, version, hash })\n upsertRequirement(doc, id, caretRange(version))\n await writeIdentityFile(root, doc)\n\n io.out(`Added ${id}@${version}`)\n io.out(` cached in ${cacheRelDir(id, version)}`)\n io.out(` pinned ${hash}`)\n io.out(` requires ${caretRange(version)}`)\n return 0\n}\n\nexport const add: Command = {\n name: 'add',\n summary: 'Install a pack (.pwpack or folder) into the project and pin it',\n usage: `pwf add <path-to.pwpack|dir> [--dir <project>]\n\n <path> a .pwpack (or .tgz) archive, or a pwpack folder\n --dir <path> the project folder (default: the current folder)\n\nValidates the pack, copies its pack content (no tooling) to\n.pwf/packs/<id>@<version>/, pins it in\npwpack.json packs[] by content hash and adds { id, range: ^<major>.0.0 } to\nrequires. Only local files and folders: resolving packs from npm or a pack\nregistry is not supported.`,\n run: (args, io) => guard('add', io, () => runAdd(args, io)),\n}\n"]}
@@ -1,4 +1,3 @@
1
1
  import type { Command, CommandIO, ParsedArgs } from './types.js';
2
2
  export declare function runBuild(args: ParsedArgs, io: CommandIO): Promise<number>;
3
3
  export declare const buildCommand: Command;
4
- //# sourceMappingURL=build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `pwf build [dir] [--out <dir>]` — assembles the app into a static pwapp on\n * disk (default `<dir>/.pwf/out/`), ready for any static host or `pwf run`.\n */\nimport { isAbsolute, relative, resolve } from 'node:path'\nimport { assemblePwapp } from '../dev/assemble.js'\nimport { formatDiagnostic } from '../dev/diagnostics.js'\nimport { OutputFolderError, writePwapp } from '../dev/output.js'\nimport type { Command, CommandIO, ParsedArgs } from './types.js'\n\nfunction shown(cwd: string, path: string): string {\n const rel = relative(cwd, path)\n return rel && !rel.startsWith('..') && !isAbsolute(rel) ? rel : path\n}\n\nexport async function runBuild(args: ParsedArgs, io: CommandIO): Promise<number> {\n const root = resolve(io.cwd, args.positionals[0] ?? '.')\n const outFlag = args.flags['out']\n if (outFlag === true || outFlag === '') {\n io.err('pwf build: --out needs a folder')\n return 2\n }\n const out = typeof outFlag === 'string' ? resolve(io.cwd, outFlag) : resolve(root, '.pwf', 'out')\n\n const result = await assemblePwapp(root)\n for (const d of result.diagnostics) {\n const line = formatDiagnostic(d)\n if (d.severity === 'error') io.err(line)\n else io.out(line)\n }\n const { stats } = result\n if (!result.ok) {\n const errors = result.diagnostics.filter((d) => d.severity === 'error').length\n io.err(`pwf build: ${errors} error${errors === 1 ? '' : 's'}; nothing written`)\n return 1\n }\n try {\n await writePwapp(result.files, out)\n } catch (e) {\n if (e instanceof OutputFolderError) {\n io.err(`pwf build: ${e.message}`)\n return 1\n }\n throw e\n }\n io.out(\n `built ${stats.pages} page${stats.pages === 1 ? '' : 's'}, ${stats.blocks} block type${stats.blocks === 1 ? '' : 's'}, ${\n stats.engines\n } engine${stats.engines === 1 ? '' : 's'} — ${stats.compiled}/${stats.atoms} atoms compiled (${stats.fromCache} from cache${\n stats.failed ? `, ${stats.failed} failed` : ''\n }) in ${result.ms} ms`\n )\n io.out(`wrote ${result.files.size} files to ${shown(io.cwd, out)}`)\n return 0\n}\n\nexport const buildCommand: Command = {\n name: 'build',\n summary: 'Assemble the app into a static pwapp folder',\n usage: 'pwf build [dir] [--out <dir>]',\n run: runBuild,\n}\n"]}
@@ -7,4 +7,3 @@ export interface CreateOptions {
7
7
  }
8
8
  export declare function runCreate(args: ParsedArgs, io: CommandIO, options?: CreateOptions): Promise<number>;
9
9
  export declare const create: Command;
10
- //# sourceMappingURL=create.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `pwf create <name>` — a new app folder standing on a foundation pack.\n */\nimport { mkdir, readdir, writeFile } from 'node:fs/promises'\nimport { dirname, isAbsolute, join, relative } from 'node:path'\nimport { hashPack, packContent, validatePack } from '@pwfabric/pack'\nimport type { Command, CommandIO, ParsedArgs } from './types.js'\nimport { boolFlag, guard, stringFlag, UsageError } from './lib/flags.js'\nimport { cacheDir, cacheRelDir, readPackSource, resolveFrom, writePackFolder, ATOMS_README } from './lib/project.js'\nimport { caretRange, engineRange, engineVersion, formatIdentity, formatJson } from './lib/identity.js'\nimport { printIssues } from './lib/report.js'\nimport {\n ATOMS_README_TEXT,\n catalogOf,\n GITIGNORE_TEXT,\n starterAppearance,\n starterBlocks,\n starterNavigation,\n starterPlan,\n starterReceipt,\n starterTheme,\n titleOf,\n} from './lib/starter.js'\n\n/** Environment variable naming the foundation pack when `--foundation` is not given. */\nexport const FOUNDATION_ENV = 'PWF_FOUNDATION'\n\nconst NAME = /^[a-z0-9][a-z0-9-]*$/\n\nconst NO_FOUNDATION = [\n 'pwf create: no foundation pack given.',\n 'Every app stands on a foundation pack (its blocks, themes and shells). The',\n 'foundation pack is not published to a registry yet, so point pwf at a copy:',\n ' pwf create <name> --foundation <folder or .pwpack>',\n `or set ${FOUNDATION_ENV} to that path once for every create.`,\n]\n\nasync function isNonEmptyDir(dir: string): Promise<boolean> {\n const entries = await readdir(dir).catch(() => null)\n return entries !== null && entries.length > 0\n}\n\nexport interface CreateOptions {\n /** Engine version to declare a range for; defaults to the installed contracts version. */\n readonly engineVersion?: string\n}\n\nexport async function runCreate(args: ParsedArgs, io: CommandIO, options: CreateOptions = {}): Promise<number> {\n const name = args.positionals[0]\n if (name === undefined) throw new UsageError('missing <name>')\n if (!NAME.test(name)) throw new UsageError(`\"${name}\" is not a valid name: use lower-case letters, digits and hyphens`)\n const target = resolveFrom(io.cwd, stringFlag(args, 'dir') ?? name)\n const force = boolFlag(args, 'force')\n\n const foundationPath = stringFlag(args, 'foundation') ?? io.env[FOUNDATION_ENV]\n if (!foundationPath) {\n for (const line of NO_FOUNDATION) io.err(line)\n return 1\n }\n if (!force && (await isNonEmptyDir(target))) {\n io.err(`pwf create: ${target} is not empty; choose another --dir or pass --force to write into it`)\n return 1\n }\n\n const foundationAbs = resolveFrom(io.cwd, foundationPath)\n const foundation = await readPackSource(foundationAbs)\n const checked = validatePack(foundation)\n if (!checked.ok || !checked.identity) {\n io.err(`pwf create: the foundation pack at ${foundationAbs} is not valid`)\n printIssues(io, checked.issues.filter((i) => i.severity === 'error'))\n return 1\n }\n const { id: foundationId, version: foundationVersion } = checked.identity\n const catalog = catalogOf(foundation, checked)\n const title = titleOf(name)\n const blocks = starterBlocks(catalog, title)\n if (blocks.length === 0) {\n io.err(`pwf create: ${foundationId}@${foundationVersion} has no heading, text or button block to start a page with`)\n return 1\n }\n const theme = starterTheme(catalog)\n // What is cached and pinned is the pack content: a foundation read from its\n // source folder brings its package.json, scripts and tests, none of which\n // the app stands on.\n const foundationContent = packContent(foundation)\n const foundationHash = hashPack(foundationContent)\n\n const identity = {\n id: `@pwpack/local/${name}`,\n version: '0.1.0',\n formatVersion: '1.0',\n engines: { pwfabric: engineRange(options.engineVersion ?? engineVersion()) },\n requires: [{ id: foundationId, range: caretRange(foundationVersion) }],\n license: { fork: true, redistribute: true },\n app: { entry: 'home', surfaceOrder: ['home'] },\n packs: [{ id: foundationId, version: foundationVersion, hash: foundationHash }],\n }\n\n const files: Record<string, string> = {\n 'pwpack.json': formatIdentity(identity),\n 'app/plan.json': formatJson(starterPlan(name, title, blocks, foundationId, theme)),\n 'app/definitions/appearance.json': formatJson(starterAppearance(theme)),\n 'app/definitions/navigation.json': formatJson(starterNavigation()),\n 'app/surfaces/home.receipt.json': formatJson(starterReceipt(blocks)),\n [ATOMS_README]: ATOMS_README_TEXT,\n '.gitignore': GITIGNORE_TEXT,\n }\n for (const [path, text] of Object.entries(files)) {\n const abs = join(target, ...path.split('/'))\n await mkdir(dirname(abs), { recursive: true })\n await writeFile(abs, text)\n }\n await writePackFolder(cacheDir(target, foundationId, foundationVersion), foundationContent)\n\n const rel = relative(io.cwd, target)\n const shown = rel === '' ? '.' : rel.startsWith('..') || isAbsolute(rel) ? target : rel\n io.out(`Created ${identity.id} in ${target}`)\n io.out(` foundation ${foundationId}@${foundationVersion} (${foundationHash})`)\n io.out(` cached in ${cacheRelDir(foundationId, foundationVersion)}`)\n io.out(` home page ${blocks.map((b) => b.type).join(', ')}${theme ? `; theme ${theme}` : ''}`)\n io.out('')\n io.out('Next:')\n io.out(` cd ${shown}`)\n io.out(' pwf dev # serve it and rebuild on change')\n io.out(' pwf validate # check the folder')\n io.out(' pwf pack # write the .pwpack')\n return 0\n}\n\nexport const create: Command = {\n name: 'create',\n summary: 'Create a new app folder standing on a foundation pack',\n usage: `pwf create <name> [--dir <path>] [--foundation <folder|.pwpack>] [--force]\n\n <name> lower-case letters, digits and hyphens; the app id is @pwpack/local/<name>\n --dir <path> where to write it (default ./<name>)\n --foundation the foundation pack to stand on (default: $${FOUNDATION_ENV})\n --force write into a folder that is not empty\n\nThe foundation is copied into .pwf/packs/<id>@<version>/ and pinned in\npwpack.json by content hash, so dev and run work offline.`,\n run: (args, io) => guard('create', io, () => runCreate(args, io)),\n}\n"]}
@@ -10,4 +10,3 @@ export interface DevCommandOptions {
10
10
  }
11
11
  export declare function runDev(args: ParsedArgs, io: CommandIO, options?: DevCommandOptions): Promise<number>;
12
12
  export declare const devCommand: Command;
13
- //# sourceMappingURL=dev.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `pwf dev [dir] [--port <n>] [--host <name>] [--local-host | --no-host]` —\n * serves the app locally, rebuilds on every change and reloads the page. Runs\n * until interrupted.\n *\n * This is where the dev server and the local host meet (ARCHITECTURE.md:\n * `dev/` knows the host's interface only). The host is mounted under\n * `/_host` when the app declares sign-in or records, or when `--local-host`\n * asks for it; `--no-host` serves the pages alone.\n */\nimport { resolve } from 'node:path'\nimport { createDevServer, DEFAULT_HOSTNAME, DEFAULT_PORT, HOST_PREFIX, type DevServerInternals } from '../dev/server.js'\nimport { createLocalHost } from '../host/local-host.js'\nimport type { Command, CommandIO, ParsedArgs } from './types.js'\n\n/** Resolves when the process is asked to stop (Ctrl+C or a termination signal). */\nexport function untilInterrupted(): Promise<void> {\n return new Promise((done) => {\n const stop = (): void => {\n process.off('SIGINT', stop)\n process.off('SIGTERM', stop)\n done()\n }\n process.once('SIGINT', stop)\n process.once('SIGTERM', stop)\n })\n}\n\nexport interface DevCommandOptions {\n /** What keeps the server running; default {@link untilInterrupted}. */\n readonly until?: () => Promise<void>\n /** Passed through to the server (tests turn watching off). */\n readonly internals?: DevServerInternals\n}\n\nexport async function runDev(args: ParsedArgs, io: CommandIO, options: DevCommandOptions = {}): Promise<number> {\n const portFlag = args.flags['port']\n let port = DEFAULT_PORT\n if (portFlag !== undefined) {\n const n = typeof portFlag === 'string' ? Number(portFlag) : NaN\n if (!Number.isInteger(n) || n < 0 || n > 65535) {\n io.err('pwf dev: --port needs a number from 0 to 65535')\n return 2\n }\n port = n\n }\n const hostFlag = args.flags['host']\n if (hostFlag === true || hostFlag === '') {\n io.err('pwf dev: --host needs an interface name or address')\n return 2\n }\n const hostname = typeof hostFlag === 'string' ? hostFlag : DEFAULT_HOSTNAME\n\n // A switch followed by the folder (`pwf dev --no-host ./app`) is read by the\n // argument parser as the switch's value; take it back as the folder.\n let dirArg = args.positionals[0]\n const extra: string[] = []\n const switchOn = (name: string): boolean => {\n const v = args.flags[name]\n if (v === undefined || v === false || v === 'false') return false\n if (typeof v === 'string' && v !== 'true') {\n if (dirArg === undefined) dirArg = v\n else extra.push(v)\n }\n return true\n }\n const forceHost = switchOn('local-host')\n const noHost = switchOn('no-host')\n if (extra.length > 0) {\n io.err(`pwf dev: unexpected argument ${extra.map((e) => `\"${e}\"`).join(', ')}; pwf dev serves one folder`)\n return 2\n }\n if (forceHost && noHost) {\n io.err('pwf dev: --local-host and --no-host contradict each other; pass one')\n return 2\n }\n const root = resolve(io.cwd, dirArg ?? '.')\n\n // Undefined lets the server decide from the app's declarations.\n const localHost = noHost ? false : forceHost ? true : undefined\n const internals: DevServerInternals = { createHost: createLocalHost, ...options.internals }\n\n let server\n try {\n server = await createDevServer(\n { root, port, hostname, log: io.out, ...(localHost !== undefined ? { localHost } : {}) },\n internals\n )\n } catch (e) {\n const err = e as NodeJS.ErrnoException\n io.err(\n err.code === 'EADDRINUSE'\n ? `pwf dev: port ${port} is in use; pass --port <n> (or --port 0 for any free port)`\n : `pwf dev: ${err.message}`\n )\n return 1\n }\n io.out(`pwf dev: serving ${root} at ${server.url}`)\n io.out('press Ctrl+C to stop')\n await (options.until ?? untilInterrupted)()\n await server.close()\n io.out('pwf dev: stopped')\n return 0\n}\n\nexport const devCommand: Command = {\n name: 'dev',\n summary: 'Serve the app locally and reload it on every change',\n usage: `pwf dev [dir] [--port <n>] [--host <name>] [--local-host | --no-host]\n\n dir the app folder (default: the current folder)\n --port <n> port to listen on (default ${DEFAULT_PORT}; 0 picks a free one)\n --host <name> interface to bind (default ${DEFAULT_HOSTNAME})\n --local-host mount the local host for sign-in and data even when the app declares neither\n --no-host do not mount the local host, even when the app declares sign-in or records\n\nThe local host (under ${HOST_PREFIX}) is for development only: records live in\nmemory and are seeded from app/data/, the one development user signs in\nwith any password, and nothing survives a restart.`,\n run: (args, io) => runDev(args, io),\n}\n"]}
@@ -8,4 +8,3 @@ export declare function stringFlag(args: ParsedArgs, name: string): string | und
8
8
  export declare function boolFlag(args: ParsedArgs, name: string): boolean;
9
9
  /** Runs a command body, turning usage errors into exit 2 and other failures into exit 1. */
10
10
  export declare function guard(name: string, io: CommandIO, body: () => Promise<number>): Promise<number>;
11
- //# sourceMappingURL=flags.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flags.js","sourceRoot":"","sources":["../../../src/commands/lib/flags.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,MAAM,OAAO,UAAW,SAAQ,KAAK;CAAG;AAExC,iFAAiF;AACjF,MAAM,UAAU,UAAU,CAAC,IAAgB,EAAE,IAAY;IACvD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC1B,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACrC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;QAAE,MAAM,IAAI,UAAU,CAAC,KAAK,IAAI,gBAAgB,CAAC,CAAA;IAC3E,OAAO,CAAW,CAAA;AACpB,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,QAAQ,CAAC,IAAgB,EAAE,IAAY;IACrD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC1B,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,OAAO,CAAA;AACxD,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAY,EAAE,EAAa,EAAE,IAA2B;IAClF,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAA;IACrB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;YAC5B,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;YACnC,EAAE,CAAC,GAAG,CAAC,aAAa,IAAI,sBAAsB,CAAC,CAAA;YAC/C,OAAO,CAAC,CAAA;QACV,CAAC;QACD,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAA;QAC9C,OAAO,CAAC,CAAA;IACV,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"flags.js","sourceRoot":"","sources":["../../../src/commands/lib/flags.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,MAAM,OAAO,UAAW,SAAQ,KAAK;CAAG;AAExC,iFAAiF;AACjF,MAAM,UAAU,UAAU,CAAC,IAAgB,EAAE,IAAY;IACvD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC1B,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACrC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;QAAE,MAAM,IAAI,UAAU,CAAC,KAAK,IAAI,gBAAgB,CAAC,CAAA;IAC3E,OAAO,CAAW,CAAA;AACpB,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,QAAQ,CAAC,IAAgB,EAAE,IAAY;IACrD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC1B,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,OAAO,CAAA;AACxD,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAY,EAAE,EAAa,EAAE,IAA2B;IAClF,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAA;IACrB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;YAC5B,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;YACnC,EAAE,CAAC,GAAG,CAAC,aAAa,IAAI,sBAAsB,CAAC,CAAA;YAC/C,OAAO,CAAC,CAAA;QACV,CAAC;QACD,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAA;QAC9C,OAAO,CAAC,CAAA;IACV,CAAC;AACH,CAAC","sourcesContent":["import type { CommandIO, ParsedArgs } from '../types.js'\n\n/** Thrown for a malformed invocation; commands turn it into exit code 2. */\nexport class UsageError extends Error {}\n\n/** A flag that takes a value: absent → undefined, bare `--flag` → UsageError. */\nexport function stringFlag(args: ParsedArgs, name: string): string | undefined {\n const v = args.flags[name]\n if (v === undefined) return undefined\n if (v === true || v === '') throw new UsageError(`--${name} needs a value`)\n return v as string\n}\n\n/** A switch: present (bare or with any value but \"false\") → true. */\nexport function boolFlag(args: ParsedArgs, name: string): boolean {\n const v = args.flags[name]\n return v !== undefined && v !== false && v !== 'false'\n}\n\n/** Runs a command body, turning usage errors into exit 2 and other failures into exit 1. */\nexport async function guard(name: string, io: CommandIO, body: () => Promise<number>): Promise<number> {\n try {\n return await body()\n } catch (e) {\n if (e instanceof UsageError) {\n io.err(`pwf ${name}: ${e.message}`)\n io.err(`Run \\`pwf ${name} --help\\` for usage.`)\n return 2\n }\n io.err(`pwf ${name}: ${(e as Error).message}`)\n return 1\n }\n}\n"]}
@@ -36,4 +36,3 @@ export declare function engineVersion(fromDir?: string): string;
36
36
  export declare function engineRange(version: string): string;
37
37
  /** Text without a leading byte-order mark. */
38
38
  export declare function stripBom(text: string): string;
39
- //# sourceMappingURL=identity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/commands/lib/identity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/commands/lib/identity.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Reading and writing a project's `pwpack.json`: stable key order, pins and\n * requirements, and the engine range a new project declares.\n */\nimport { existsSync, readFileSync } from 'node:fs'\nimport { readFile, writeFile } from 'node:fs/promises'\nimport { dirname, join } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\n/** The order `pwpack.json` members are written in. Members not listed follow, in their original order. */\nexport const IDENTITY_KEY_ORDER = ['id', 'version', 'formatVersion', 'engines', 'requires', 'license', 'app', 'packs'] as const\n\nexport const IDENTITY_FILE = 'pwpack.json'\n\nexport type IdentityJson = Record<string, unknown>\n\nexport interface PackPin {\n readonly id: string\n readonly version: string\n readonly hash: string\n}\n\n/** A copy of `doc` with its members in {@link IDENTITY_KEY_ORDER}. */\nexport function orderIdentity(doc: IdentityJson): IdentityJson {\n const out: IdentityJson = {}\n for (const key of IDENTITY_KEY_ORDER) if (doc[key] !== undefined) out[key] = doc[key]\n for (const [key, value] of Object.entries(doc)) if (!(key in out) && value !== undefined) out[key] = value\n return out\n}\n\n/** The JSON text of `pwpack.json`: ordered members, two-space indent, trailing newline. */\nexport function formatIdentity(doc: IdentityJson): string {\n return `${JSON.stringify(orderIdentity(doc), null, 2)}\\n`\n}\n\n/** Two-space JSON with a trailing newline, the format of every file the commands write. */\nexport function formatJson(value: unknown): string {\n return `${JSON.stringify(value, null, 2)}\\n`\n}\n\nexport async function readIdentityFile(root: string): Promise<IdentityJson> {\n const text = await readFile(join(root, IDENTITY_FILE), 'utf8').catch(() => null)\n if (text === null) throw new Error(`${join(root, IDENTITY_FILE)} not found; run this inside a pwpack folder or pass --dir`)\n let value: unknown\n try {\n value = JSON.parse(stripBom(text))\n } catch (e) {\n throw new Error(`${IDENTITY_FILE} is not JSON: ${(e as Error).message}`)\n }\n if (value === null || typeof value !== 'object' || Array.isArray(value)) throw new Error(`${IDENTITY_FILE} is not a JSON object`)\n return value as IdentityJson\n}\n\nexport async function writeIdentityFile(root: string, doc: IdentityJson): Promise<void> {\n await writeFile(join(root, IDENTITY_FILE), formatIdentity(doc))\n}\n\n/** `^<major>.0.0` for a semver version — the range a requirement on that build declares. */\nexport function caretRange(version: string): string {\n const major = /^(\\d+)\\./.exec(version)?.[1]\n if (major === undefined) throw new Error(`\"${version}\" is not a semver version`)\n return `^${major}.0.0`\n}\n\n/** Adds the pin, or replaces the pin with the same id. Order of the others is kept. */\nexport function upsertPin(doc: IdentityJson, pin: PackPin): void {\n const pins = Array.isArray(doc.packs) ? [...(doc.packs as unknown[])] : []\n const entry = { id: pin.id, version: pin.version, hash: pin.hash }\n const at = pins.findIndex((p) => p !== null && typeof p === 'object' && (p as { id?: unknown }).id === pin.id)\n if (at >= 0) pins[at] = entry\n else pins.push(entry)\n doc.packs = pins\n}\n\n/** Adds `{ id, range }` to `requires`, or updates the entry (object or bare name) for that id. */\nexport function upsertRequirement(doc: IdentityJson, id: string, range: string): void {\n const list = Array.isArray(doc.requires) ? [...(doc.requires as unknown[])] : []\n const at = list.findIndex((r) => r === id || (r !== null && typeof r === 'object' && (r as { id?: unknown }).id === id))\n const entry = { id, range }\n if (at >= 0) list[at] = entry\n else list.push(entry)\n doc.requires = list\n}\n\n/** Pins listed in a parsed `pwpack.json`. */\nexport function pinsOf(doc: { readonly packs?: readonly PackPin[] } | null): readonly PackPin[] {\n return doc?.packs ?? []\n}\n\n/**\n * Finds `node_modules/<name>/package.json` the way Node resolves a bare\n * import, walking up from `fromDir`. Returns null when it is not installed.\n */\nexport function findPackageJson(name: string, fromDir: string): string | null {\n let dir = fromDir\n for (;;) {\n const candidate = join(dir, 'node_modules', ...name.split('/'), 'package.json')\n if (existsSync(candidate)) return candidate\n const parent = dirname(dir)\n if (parent === dir) return null\n dir = parent\n }\n}\n\nconst CONTRACTS_PACKAGE = '@pwfabric/contracts'\n\n/** The engine version this command line runs with: the contracts package's version. */\nexport function engineVersion(fromDir: string = dirname(fileURLToPath(import.meta.url))): string {\n const path = findPackageJson(CONTRACTS_PACKAGE, fromDir)\n if (!path) throw new Error(`cannot find ${CONTRACTS_PACKAGE}; reinstall pwf`)\n const { version } = JSON.parse(readFileSync(path, 'utf8')) as { version?: unknown }\n if (typeof version !== 'string') throw new Error(`${path} has no version`)\n return version\n}\n\n/** `>=<major>.<minor> <<major+1>`: this engine's release and every later one before the next major. */\nexport function engineRange(version: string): string {\n const m = /^(\\d+)\\.(\\d+)\\./.exec(version)\n if (!m) throw new Error(`engine version \"${version}\" is not semver`)\n return `>=${m[1]}.${m[2]} <${Number(m[1]) + 1}`\n}\n\n/** Text without a leading byte-order mark. */\nexport function stripBom(text: string): string {\n return text.charCodeAt(0) === 0xfeff ? text.slice(1) : text\n}\n"]}
@@ -32,4 +32,3 @@ export declare function readCachedPack(dir: string): Promise<PackFolder>;
32
32
  export declare function writePackFolder(dir: string, pack: PackFolder): Promise<void>;
33
33
  /** Resolves a user-given path against the command's working directory. */
34
34
  export declare function resolveFrom(cwd: string, path: string | undefined): string;
35
- //# sourceMappingURL=project.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/commands/lib/project.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACvE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,UAAU,EACV,UAAU,GAEX,MAAM,gBAAgB,CAAA;AAEvB,wFAAwF;AACxF,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAA;AAC7B,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,OAAO,QAAQ,CAAA;AAChD,qHAAqH;AACrH,MAAM,CAAC,MAAM,YAAY,GAAG,iBAAiB,CAAA;AAE7C,0GAA0G;AAC1G,MAAM,CAAC,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC,CAAC,GAAG,qBAAqB,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAA;AAEpH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW;IAC3C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAA;IACrE,yEAAyE;IACzE,kEAAkE;IAClE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;AACtF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAC7C,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAA;IAC3D,IAAI,EAAE,CAAC,WAAW,EAAE;QAAE,OAAO,WAAW,CAAC,IAAI,CAAC,CAAA;IAC9C,OAAO,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,EAAU,EAAE,OAAe;IACrD,MAAM,GAAG,GAAG,GAAG,EAAE,IAAI,OAAO,EAAE,CAAA;IAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,mBAAmB,OAAO,wCAAwC,CAAC,CAAA;IACpJ,OAAO,GAAG,cAAc,IAAI,GAAG,EAAE,CAAA;AACnC,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,EAAU,EAAE,OAAe;IAChE,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;AAC3D,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,OAAO,UAAU,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;AAC/C,CAAC;AAED,kEAAkE;AAClE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,IAAgB;IACjE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACrC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QAC5C,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACjD,MAAM,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAChC,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,IAAwB;IAC/D,OAAO,OAAO,CAAC,GAAG,EAAE,IAAI,IAAI,GAAG,CAAC,CAAA;AAClC,CAAC"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/commands/lib/project.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The project folder as the commands see it: which files belong to the pack,\n * where the local pack cache lives, and how a pack source (folder or archive)\n * is opened.\n *\n * A project is a pwpack folder plus things that are never packed: the `.pwf/`\n * cache (installed pack builds), the `.gitignore` next to it, and anything\n * else outside the pack content (`packContent`: `pwpack.json`, `LICENSE`,\n * `NOTICE`, `README.md`, `app/`, `atoms/`, `media/`).\n */\nimport { mkdir, readFile, rm, stat, writeFile } from 'node:fs/promises'\nimport { dirname, join, resolve } from 'node:path'\nimport {\n DEFAULT_IGNORED_NAMES,\n isSafePackPath,\n readFolder,\n readPwpack,\n type PackFolder,\n} from '@pwfabric/pack'\n\n/** The project-local working directory (pack cache, build output of other commands). */\nexport const PWF_DIR = '.pwf'\n/** Installed pack builds, one folder per `<id>@<version>`. */\nexport const PACK_CACHE_DIR = `${PWF_DIR}/packs`\n/** The note `create` writes into `atoms/`. Pack content (documentation, `DOC_FILE`), so it travels with the pack. */\nexport const ATOMS_README = 'atoms/README.md'\n\n/** Names skipped at any depth when a project is read: the defaults plus the cache and VCS ignore file. */\nexport const PROJECT_IGNORED_NAMES: ReadonlySet<string> = new Set([...DEFAULT_IGNORED_NAMES, PWF_DIR, '.gitignore'])\n\n/**\n * Reads a project folder into memory, without the cache. The author's tooling\n * (`package.json`, `scripts/`, …) is still in it — validation reports on it;\n * `packContent` is what is packed, installed and hashed.\n */\nexport async function readProject(dir: string): Promise<PackFolder> {\n const read = await readFolder(dir, { ignore: PROJECT_IGNORED_NAMES })\n // A dot entry at the root (`.editorconfig`, `.vscode/`, …) is never pack\n // content; it is the author's environment and is not reported on.\n return { files: new Map([...read.files].filter(([path]) => !path.startsWith('.'))) }\n}\n\n/**\n * Opens a pack source: a folder (read like a project, so its own `.pwf/`\n * cache never travels) or a `.pwpack` / `.tgz` archive.\n */\nexport async function readPackSource(path: string): Promise<PackFolder> {\n const st = await stat(path).catch(() => null)\n if (!st) throw new Error(`no such file or folder: ${path}`)\n if (st.isDirectory()) return readProject(path)\n return readPwpack(new Uint8Array(await readFile(path)))\n}\n\n/**\n * Relative folder of one pack build in the cache: `.pwf/packs/<id>@<version>`.\n * A scoped id (`@pwpack/acme/cards`) nests the way npm scopes do. Throws when\n * the id or version could escape the cache.\n */\nexport function cacheRelDir(id: string, version: string): string {\n const rel = `${id}@${version}`\n if (!isSafePackPath(rel) || /[<>:\"|?*]/.test(rel)) throw new Error(`pack id \"${id}\" with version \"${version}\" is not usable as a cache folder name`)\n return `${PACK_CACHE_DIR}/${rel}`\n}\n\n/** Absolute folder of one pack build in a project's cache. */\nexport function cacheDir(root: string, id: string, version: string): string {\n return join(root, ...cacheRelDir(id, version).split('/'))\n}\n\n/** Reads a cached pack build exactly as it was written: nothing is skipped. */\nexport async function readCachedPack(dir: string): Promise<PackFolder> {\n return readFolder(dir, { ignore: new Set() })\n}\n\n/** Writes a pack folder to disk, replacing whatever was there. */\nexport async function writePackFolder(dir: string, pack: PackFolder): Promise<void> {\n await rm(dir, { recursive: true, force: true })\n await mkdir(dir, { recursive: true })\n for (const [path, bytes] of pack.files) {\n const target = join(dir, ...path.split('/'))\n await mkdir(dirname(target), { recursive: true })\n await writeFile(target, bytes)\n }\n}\n\n/** Resolves a user-given path against the command's working directory. */\nexport function resolveFrom(cwd: string, path: string | undefined): string {\n return resolve(cwd, path ?? '.')\n}\n"]}
@@ -13,4 +13,3 @@ export declare function validateProject(root: string, pack: PackFolder): Promise
13
13
  export declare function printIssues(io: CommandIO, issues: readonly PackIssue[]): void;
14
14
  /** `n errors, n warnings` for a summary line. */
15
15
  export declare function countLine(issues: readonly PackIssue[]): string;
16
- //# sourceMappingURL=report.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/commands/lib/report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/commands/lib/report.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Validation as the commands report it: the pack library's findings plus\n * the project's pins checked against its local cache.\n */\nimport { existsSync } from 'node:fs'\nimport { hashPack, validatePack, type PackFolder, type PackIssue, type PackValidation } from '@pwfabric/pack'\nimport type { CommandIO } from '../types.js'\nimport { cacheDir, cacheRelDir, readCachedPack } from './project.js'\nimport { pinsOf } from './identity.js'\n\n/**\n * Checks every `packs[]` pin against `.pwf/packs/<id>@<version>/`.\n * A build that is not cached is a warning (`PIN_NOT_CACHED`: `pwf add` it);\n * a cached build whose content hash differs from the pin is an error\n * (`PIN_HASH_MISMATCH`).\n */\nexport async function checkPins(root: string, identity: PackValidation['identity']): Promise<PackIssue[]> {\n const issues: PackIssue[] = []\n for (const pin of pinsOf(identity)) {\n let dir: string\n try {\n dir = cacheDir(root, pin.id, pin.version)\n } catch (e) {\n issues.push({ severity: 'error', code: 'PIN_INVALID', path: 'pwpack.json', message: (e as Error).message })\n continue\n }\n const rel = cacheRelDir(pin.id, pin.version)\n if (!existsSync(dir)) {\n issues.push({\n severity: 'warning',\n code: 'PIN_NOT_CACHED',\n path: rel,\n message: `${pin.id}@${pin.version} is pinned but not in ${rel}; run \\`pwf add <its .pwpack or folder>\\``,\n })\n continue\n }\n const actual = hashPack(await readCachedPack(dir))\n if (actual !== pin.hash) {\n issues.push({\n severity: 'error',\n code: 'PIN_HASH_MISMATCH',\n path: rel,\n message: `${pin.id}@${pin.version} is pinned at ${pin.hash} but the cached build hashes ${actual}`,\n })\n }\n }\n return issues\n}\n\n/** `validatePack` plus {@link checkPins}, as one result. */\nexport async function validateProject(root: string, pack: PackFolder): Promise<PackValidation> {\n const result = validatePack(pack)\n const pinIssues = await checkPins(root, result.identity)\n const issues = [...result.issues, ...pinIssues]\n return { ...result, issues, ok: !issues.some((i) => i.severity === 'error') }\n}\n\nconst SEVERITIES = ['error', 'warning', 'info'] as const\nconst HEADINGS = { error: 'Errors', warning: 'Warnings', info: 'Notes' } as const\n\n/** Prints issues grouped by severity, errors first. Prints nothing for an empty list. */\nexport function printIssues(io: CommandIO, issues: readonly PackIssue[]): void {\n for (const severity of SEVERITIES) {\n const group = issues.filter((i) => i.severity === severity)\n if (group.length === 0) continue\n const write = severity === 'error' ? io.err.bind(io) : io.out.bind(io)\n write(`${HEADINGS[severity]} (${group.length}):`)\n for (const issue of group) write(` ${issue.code}${issue.path ? ` ${issue.path}` : ''}: ${issue.message}`)\n }\n}\n\n/** `n errors, n warnings` for a summary line. */\nexport function countLine(issues: readonly PackIssue[]): string {\n const n = (s: PackIssue['severity']): number => issues.filter((i) => i.severity === s).length\n const plural = (count: number, word: string): string => `${count} ${word}${count === 1 ? '' : 's'}`\n return `${plural(n('error'), 'error')}, ${plural(n('warning'), 'warning')}`\n}\n"]}
@@ -39,4 +39,3 @@ export declare function starterNavigation(): unknown;
39
39
  export declare function starterReceipt(blocks: readonly BlockNode[]): unknown;
40
40
  export declare const ATOMS_README_TEXT = "# atoms/\n\nThis app's own reusable parts. Empty to start: the app is composed from the\nfoundation pack pinned in `pwpack.json`.\n\nAdd a block as `atoms/blocks/<category>/<name>/component.tsx` with a\n`manifest.json` next to it; see the pwpack format and block manifest\ndocuments of the PWFabric specification for every atom family.\n\nThis README is documentation, not an atom: it travels with the pack and\nvalidation notes it as such (DOC_FILE).\n";
41
41
  export declare const GITIGNORE_TEXT = ".pwf/\n*.pwpack\n";
42
- //# sourceMappingURL=starter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"starter.js","sourceRoot":"","sources":["../../../src/commands/lib/starter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"starter.js","sourceRoot":"","sources":["../../../src/commands/lib/starter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * What `pwf create` writes: the starter app's documents, composed only from\n * the block types and themes the foundation pack actually carries.\n */\nimport type { PackFolder, PackValidation } from '@pwfabric/pack'\nimport { stripBom } from './identity.js'\n\nexport interface FoundationBlock {\n /** Block type a receipt names (the manifest's `name`). */\n readonly type: string\n /** Atom id, `<category>.<name>`. */\n readonly id: string\n /** Prop names the manifest declares. */\n readonly props: readonly string[]\n}\n\nexport interface FoundationCatalog {\n readonly blocks: readonly FoundationBlock[]\n /** Theme ids (`ui-appearance` atoms). */\n readonly themes: readonly string[]\n}\n\nfunction parseObject(bytes: Uint8Array | undefined): Record<string, unknown> | null {\n if (!bytes) return null\n try {\n const v: unknown = JSON.parse(stripBom(new TextDecoder().decode(bytes)))\n return v !== null && typeof v === 'object' && !Array.isArray(v) ? (v as Record<string, unknown>) : null\n } catch {\n return null\n }\n}\n\n/**\n * Block types and themes of a pack, from its derived atoms. A block's type is\n * the `name` of the `manifest.json` next to its component (falling back to the\n * last segment of its id); its props are the manifest's `definition.props`.\n */\nexport function catalogOf(pack: PackFolder, validation: PackValidation): FoundationCatalog {\n const blocks: FoundationBlock[] = []\n const themes: string[] = []\n for (const atom of validation.atoms) {\n if (atom.kind === 'ui-appearance') {\n const manifest = parseObject(pack.files.get(atom.relPath))\n themes.push(typeof manifest?.id === 'string' ? manifest.id : atom.id)\n continue\n }\n if (atom.kind !== 'block') continue\n const dir = atom.relPath.slice(0, atom.relPath.lastIndexOf('/') + 1)\n const manifest = parseObject(pack.files.get(`${dir}manifest.json`))\n const name = typeof manifest?.name === 'string' ? manifest.name : (atom.id.split('.').pop() as string)\n const definition = manifest?.definition as { props?: unknown } | undefined\n const props = Array.isArray(definition?.props)\n ? (definition.props as unknown[]).flatMap((p) =>\n p !== null && typeof p === 'object' && typeof (p as { name?: unknown }).name === 'string' ? [(p as { name: string }).name] : []\n )\n : []\n blocks.push({ type: name, id: atom.id, props })\n }\n return { blocks, themes }\n}\n\ninterface Slot {\n readonly id: string\n readonly types: readonly string[]\n readonly textProps: readonly string[]\n readonly text: (title: string) => string\n readonly extra: Readonly<Record<string, unknown>>\n}\n\n/** The starter page, in order: a heading, a paragraph and a button. */\nconst SLOTS: readonly Slot[] = [\n { id: 'title', types: ['heading', 'title'], textProps: ['text', 'content', 'title', 'label'], text: (t) => t, extra: { level: 'h1' } },\n {\n id: 'intro',\n types: ['text', 'paragraph', 'prose'],\n textProps: ['content', 'text', 'body', 'markdown'],\n text: () => 'Edit app/surfaces/home.receipt.json to change this page, then run pwf dev to see it.',\n extra: {},\n },\n { id: 'cta', types: ['button'], textProps: ['label', 'text'], text: () => 'Get started', extra: { href: '/' } },\n]\n\nexport interface BlockNode {\n readonly id: string\n readonly type: string\n readonly props: Record<string, unknown>\n}\n\n/** Starter blocks for the home page, using only block types the catalog has. */\nexport function starterBlocks(catalog: FoundationCatalog, title: string): BlockNode[] {\n const out: BlockNode[] = []\n for (const slot of SLOTS) {\n const block = slot.types.map((t) => catalog.blocks.find((b) => b.type === t)).find((b) => b !== undefined)\n if (!block) continue\n const props: Record<string, unknown> = {}\n const textProp = slot.textProps.find((p) => block.props.includes(p))\n if (textProp) props[textProp] = slot.text(title)\n for (const [k, v] of Object.entries(slot.extra)) if (block.props.includes(k)) props[k] = v\n out.push({ id: slot.id, type: block.type, props })\n }\n return out\n}\n\n/** The theme the starter uses: `theme-zinc` when present (a neutral default), otherwise the first by id. */\nexport function starterTheme(catalog: FoundationCatalog): string | undefined {\n if (catalog.themes.includes('theme-zinc')) return 'theme-zinc'\n return [...catalog.themes].sort()[0]\n}\n\n/** `my-shop` → `My Shop`. */\nexport function titleOf(name: string): string {\n return name\n .split(/[-_]+/)\n .filter(Boolean)\n .map((w) => w[0]?.toUpperCase() + w.slice(1))\n .join(' ')\n}\n\nexport function starterPlan(name: string, title: string, blocks: readonly BlockNode[], foundationId: string, theme: string | undefined): unknown {\n return {\n title: title.slice(0, 80),\n intent: {\n purpose: `${title}: describe what this app is for`,\n audience: 'Describe who will use it',\n tone: 'Clear and friendly',\n successCriteria: 'The home page renders',\n },\n theme: { direction: 'Clean and neutral', paletteHint: theme ?? 'the foundation default', status: 'applied' },\n capabilities: [],\n media: [],\n customBlocks: [],\n surfaces: [\n {\n key: 'home',\n name: 'Home',\n isEntry: true,\n purpose: `The first page of ${name}`,\n keyContent: blocks.map((b) => b.id),\n linksTo: [],\n usesCapabilities: [],\n usesMedia: [],\n usesCustomBlocks: [],\n status: 'applied',\n },\n ],\n packs: [{ id: foundationId }],\n }\n}\n\nexport function starterAppearance(theme: string | undefined): unknown {\n return theme ? { use: theme } : { config: { mode: { policy: 'light' } } }\n}\n\nexport function starterNavigation(): unknown {\n return { navbar: { links: [{ label: 'Home', href: '/' }] } }\n}\n\nexport function starterReceipt(blocks: readonly BlockNode[]): unknown {\n return { title: 'Home', blocks }\n}\n\nexport const ATOMS_README_TEXT = `# atoms/\n\nThis app's own reusable parts. Empty to start: the app is composed from the\nfoundation pack pinned in \\`pwpack.json\\`.\n\nAdd a block as \\`atoms/blocks/<category>/<name>/component.tsx\\` with a\n\\`manifest.json\\` next to it; see the pwpack format and block manifest\ndocuments of the PWFabric specification for every atom family.\n\nThis README is documentation, not an atom: it travels with the pack and\nvalidation notes it as such (DOC_FILE).\n`\n\nexport const GITIGNORE_TEXT = `.pwf/\\n*.pwpack\\n`\n"]}
@@ -43,4 +43,3 @@ export declare function parseHeadersFile(text: string): HeaderRule[];
43
43
  export declare function headerPatternMatches(pattern: string, path: string): boolean;
44
44
  /** Starts the server; resolves once it is listening. */
45
45
  export declare function startStaticServer(options: StaticServerOptions): Promise<StaticServer>;
46
- //# sourceMappingURL=static-server.d.ts.map
@@ -6,6 +6,7 @@
6
6
  import { createServer } from 'node:http';
7
7
  import { readFile, stat } from 'node:fs/promises';
8
8
  import { extname, join, resolve, sep } from 'node:path';
9
+ import { withBaseHref } from '../../dev/shell.js';
9
10
  export const CONTENT_TYPES = {
10
11
  '.html': 'text/html; charset=utf-8',
11
12
  '.js': 'text/javascript; charset=utf-8',
@@ -132,16 +133,18 @@ async function handle(source, req, res) {
132
133
  res.writeHead(404, TEXT).end('not found\n');
133
134
  return;
134
135
  }
136
+ // A page path answered with the shell gets the app's base (see withBaseHref).
137
+ const body = found.path === 'index.html' && rel !== '' && rel !== 'index.html' ? withBaseHref(found.body) : found.body;
135
138
  res.writeHead(200, {
136
139
  ...(await extraHeaders(source, rel ?? '')),
137
140
  'content-type': contentTypeOf(found.path),
138
- 'content-length': String(found.body.byteLength),
141
+ 'content-length': String(body.byteLength),
139
142
  'cache-control': 'no-cache',
140
143
  });
141
144
  if (req.method === 'HEAD')
142
145
  res.end();
143
146
  else
144
- res.end(found.body);
147
+ res.end(body);
145
148
  }
146
149
  /** Starts the server; resolves once it is listening. */
147
150
  export function startStaticServer(options) {
@@ -1 +1 @@
1
- {"version":3,"file":"static-server.js","sourceRoot":"","sources":["../../../src/commands/lib/static-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"static-server.js","sourceRoot":"","sources":["../../../src/commands/lib/static-server.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * A small static file server for a built pwapp: correct content types, no\n * directory listings, no path escapes, and an SPA fallback to `index.html`\n * for page paths.\n */\nimport { createServer, type IncomingMessage, type ServerResponse } from 'node:http'\nimport { readFile, stat } from 'node:fs/promises'\nimport { extname, join, resolve, sep } from 'node:path'\nimport type { AddressInfo } from 'node:net'\nimport { withBaseHref } from '../../dev/shell.js'\n\nexport const CONTENT_TYPES: Readonly<Record<string, string>> = {\n '.html': 'text/html; charset=utf-8',\n '.js': 'text/javascript; charset=utf-8',\n '.mjs': 'text/javascript; charset=utf-8',\n '.json': 'application/json; charset=utf-8',\n '.css': 'text/css; charset=utf-8',\n '.svg': 'image/svg+xml',\n '.map': 'application/json; charset=utf-8',\n '.txt': 'text/plain; charset=utf-8',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.gif': 'image/gif',\n '.webp': 'image/webp',\n '.avif': 'image/avif',\n '.ico': 'image/x-icon',\n '.woff': 'font/woff',\n '.woff2': 'font/woff2',\n '.wasm': 'application/wasm',\n}\n\nexport function contentTypeOf(path: string): string {\n return CONTENT_TYPES[extname(path).toLowerCase()] ?? 'application/octet-stream'\n}\n\n/** Where the files come from: a folder on disk, or files held in memory (an opened archive). */\nexport type StaticSource = { readonly dir: string } | { readonly files: ReadonlyMap<string, Uint8Array> }\n\nexport interface StaticServerOptions {\n readonly source: StaticSource\n /** 0 picks a free port. */\n readonly port: number\n /** Default 127.0.0.1. */\n readonly hostname?: string\n}\n\nexport interface StaticServer {\n readonly url: string\n readonly port: number\n close(): Promise<void>\n}\n\n/** The request path as a safe relative POSIX path, or null when it is malformed or escapes the root. */\nexport function requestPath(rawUrl: string): string | null {\n let pathname: string\n try {\n pathname = decodeURIComponent(new URL(rawUrl, 'http://localhost').pathname)\n } catch {\n return null\n }\n if (pathname.includes('\\0') || pathname.includes('\\\\')) return null\n const parts: string[] = []\n for (const seg of pathname.split('/')) {\n if (seg === '' || seg === '.') continue\n if (seg === '..') return null\n parts.push(seg)\n }\n return parts.join('/')\n}\n\nasync function load(source: StaticSource, rel: string): Promise<Uint8Array | null> {\n if ('files' in source) return source.files.get(rel) ?? null\n const root = resolve(source.dir)\n const abs = resolve(join(root, ...rel.split('/')))\n if (abs !== root && !abs.startsWith(root + sep)) return null\n const st = await stat(abs).catch(() => null)\n if (!st?.isFile()) return null\n return new Uint8Array(await readFile(abs))\n}\n\n/** Resolves a request to a file: the path itself, `<path>/index.html`, then the SPA fallback for page paths. */\nexport async function resolveRequest(source: StaticSource, rel: string): Promise<{ path: string; body: Uint8Array } | null> {\n const candidates = rel === '' ? ['index.html'] : [rel, `${rel}/index.html`]\n // A path whose last segment has no extension is a page path: answer it with the shell.\n if (rel !== '' && extname(rel) === '') candidates.push('index.html')\n for (const path of candidates) {\n const body = await load(source, path)\n if (body) return { path, body }\n }\n return null\n}\n\nconst TEXT = { 'content-type': 'text/plain; charset=utf-8' }\n\n/** The static-host headers file a build writes beside `index.html`. */\nexport const HEADERS_FILE = '_headers'\n\n/** One rule of a `_headers` file: a path pattern and the headers it adds. */\nexport interface HeaderRule {\n readonly pattern: string\n readonly headers: readonly (readonly [string, string])[]\n}\n\n/**\n * Parses the `_headers` convention of static hosts: a line that starts at\n * column 0 is a path pattern (`/*`, `/assets/*`, `/about`), the indented\n * `Name: value` lines under it are the headers it adds. `#` lines are\n * comments.\n */\nexport function parseHeadersFile(text: string): HeaderRule[] {\n const rules: { pattern: string; headers: [string, string][] }[] = []\n for (const raw of text.split(/\\r?\\n/)) {\n if (!raw.trim() || raw.trim().startsWith('#')) continue\n if (!/^\\s/.test(raw)) {\n rules.push({ pattern: raw.trim(), headers: [] })\n continue\n }\n const at = raw.indexOf(':')\n const rule = rules[rules.length - 1]\n if (at > 0 && rule) rule.headers.push([raw.slice(0, at).trim(), raw.slice(at + 1).trim()])\n }\n return rules\n}\n\n/** Whether a `_headers` pattern matches a request path (`/` + the relative path). */\nexport function headerPatternMatches(pattern: string, path: string): boolean {\n if (pattern.endsWith('*')) return path.startsWith(pattern.slice(0, -1))\n return pattern === path\n}\n\n/** The headers the `_headers` file adds for a relative path. */\nasync function extraHeaders(source: StaticSource, rel: string): Promise<Record<string, string>> {\n const out: Record<string, string> = {}\n const file = await load(source, HEADERS_FILE)\n if (!file) return out\n for (const rule of parseHeadersFile(new TextDecoder().decode(file))) {\n if (!headerPatternMatches(rule.pattern, `/${rel}`)) continue\n for (const [name, value] of rule.headers) out[name.toLowerCase()] = value\n }\n return out\n}\n\nasync function handle(source: StaticSource, req: IncomingMessage, res: ServerResponse): Promise<void> {\n if (req.method !== 'GET' && req.method !== 'HEAD') {\n res.writeHead(405, { ...TEXT, allow: 'GET, HEAD' }).end('method not allowed\\n')\n return\n }\n const rel = requestPath(req.url ?? '/')\n // The headers file configures the server; it is not part of the site.\n const found = rel === null || rel === HEADERS_FILE ? null : await resolveRequest(source, rel)\n if (!found) {\n res.writeHead(404, TEXT).end('not found\\n')\n return\n }\n // A page path answered with the shell gets the app's base (see withBaseHref).\n const body = found.path === 'index.html' && rel !== '' && rel !== 'index.html' ? withBaseHref(found.body) : found.body\n res.writeHead(200, {\n ...(await extraHeaders(source, rel ?? '')),\n 'content-type': contentTypeOf(found.path),\n 'content-length': String(body.byteLength),\n 'cache-control': 'no-cache',\n })\n if (req.method === 'HEAD') res.end()\n else res.end(body)\n}\n\n/** Starts the server; resolves once it is listening. */\nexport function startStaticServer(options: StaticServerOptions): Promise<StaticServer> {\n const hostname = options.hostname ?? '127.0.0.1'\n const server = createServer((req, res) => {\n handle(options.source, req, res).catch(() => {\n if (!res.headersSent) res.writeHead(500, TEXT)\n res.end('internal error\\n')\n })\n })\n return new Promise((resolveStart, reject) => {\n server.once('error', reject)\n server.listen(options.port, hostname, () => {\n server.off('error', reject)\n const { port } = server.address() as AddressInfo\n const host = hostname.includes(':') ? `[${hostname}]` : hostname\n resolveStart({\n url: `http://${host}:${port}/`,\n port,\n close: () =>\n new Promise<void>((done, fail) => {\n server.closeAllConnections()\n server.close((err) => (err ? fail(err) : done()))\n }),\n })\n })\n })\n}\n"]}
@@ -3,4 +3,3 @@ import type { Command, CommandIO, ParsedArgs } from './types.js';
3
3
  export declare function archiveName(id: string, version: string): string;
4
4
  export declare function runPack(args: ParsedArgs, io: CommandIO): Promise<number>;
5
5
  export declare const pack: Command;
6
- //# sourceMappingURL=pack.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/commands/pack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/commands/pack.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `pwf pack [dir]` — the deterministic `.pwpack` archive of a valid folder.\n */\nimport { mkdir, writeFile } from 'node:fs/promises'\nimport { dirname, join } from 'node:path'\nimport { hashPack, packContent, writePwpack } from '@pwfabric/pack'\nimport type { Command, CommandIO, ParsedArgs } from './types.js'\nimport { guard, stringFlag } from './lib/flags.js'\nimport { readProject, resolveFrom } from './lib/project.js'\nimport { countLine, printIssues, validateProject } from './lib/report.js'\n\n/** `<name>-<version>.pwpack`, where name is the last segment of the pack id. */\nexport function archiveName(id: string, version: string): string {\n const name = id.split('/').pop()?.replace(/^@/, '') || 'pack'\n return `${name}-${version}.pwpack`\n}\n\nexport async function runPack(args: ParsedArgs, io: CommandIO): Promise<number> {\n const root = resolveFrom(io.cwd, args.positionals[0])\n const pack = await readProject(root)\n const result = await validateProject(root, pack)\n if (!result.ok || !result.identity) {\n printIssues(io, result.issues)\n io.err(`pwf pack: ${root} is not valid (${countLine(result.issues)}); nothing written`)\n return 1\n }\n printIssues(\n io,\n result.issues.filter((i) => i.severity === 'warning')\n )\n const { id, version } = result.identity\n const outFlag = stringFlag(args, 'out')\n const out = outFlag ? resolveFrom(io.cwd, outFlag) : join(root, archiveName(id, version))\n // The archive carries the pack content only: an author's tooling never\n // ships, and the archive hashes the same as the folder it came from.\n const content = packContent(pack)\n const bytes = await writePwpack(content)\n await mkdir(dirname(out), { recursive: true })\n await writeFile(out, bytes)\n const left = pack.files.size - content.files.size\n io.out(`Packed ${id}@${version}`)\n io.out(` file ${out}`)\n io.out(` size ${bytes.byteLength} bytes, ${content.files.size} files${left > 0 ? ` (${left} outside the pack content left out)` : ''}`)\n io.out(` hash ${hashPack(content)}`)\n return 0\n}\n\nexport const pack: Command = {\n name: 'pack',\n summary: 'Write the deterministic .pwpack archive of a folder',\n usage: `pwf pack [dir] [--out <file>]\n\n dir the pwpack folder (default: the current folder)\n --out <file> where to write (default <dir>/<name>-<version>.pwpack)\n\nValidates first and refuses on errors. The archive holds the pack content\nonly — pwpack.json, LICENSE, NOTICE, README.md, app/, atoms/ and media/ —\nnever .pwf/, .gitignore or the author's tooling (package.json, scripts/, …).\nThe same folder always gives the same bytes; the printed hash is the\ncontent hash pins use.`,\n run: (args, io) => guard('pack', io, () => runPack(args, io)),\n}\n"]}
@@ -5,4 +5,3 @@ import type { Command } from './types.js';
5
5
  */
6
6
  export declare const COMMANDS: Command[];
7
7
  export declare function findCommand(name: string): Command | undefined;
8
- //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/commands/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAE9B;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAc,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAE/F,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;AAC9C,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/commands/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAE9B;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAc,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAE/F,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;AAC9C,CAAC","sourcesContent":["import type { Command } from './types.js'\nimport { create } from './create.js'\nimport { devCommand } from './dev.js'\nimport { buildCommand } from './build.js'\nimport { validate } from './validate.js'\nimport { pack } from './pack.js'\nimport { add } from './add.js'\nimport { run } from './run.js'\n\n/**\n * Every `pwf` command. Lanes add their command module here and nowhere else.\n * Order is the order `pwf help` prints.\n */\nexport const COMMANDS: Command[] = [create, devCommand, buildCommand, validate, pack, add, run]\n\nexport function findCommand(name: string): Command | undefined {\n return COMMANDS.find((c) => c.name === name)\n}\n"]}
@@ -12,4 +12,3 @@ export interface RunOptions {
12
12
  }
13
13
  export declare function runRun(args: ParsedArgs, io: CommandIO, options?: RunOptions): Promise<number>;
14
14
  export declare const run: Command;
15
- //# sourceMappingURL=run.d.ts.map
@@ -72,8 +72,8 @@ export const run = {
72
72
  --port <n> port to listen on (default ${DEFAULT_RUN_PORT}; 0 picks a free one)
73
73
  --host <name> interface to bind (default 127.0.0.1)
74
74
 
75
- Page paths without a file extension are answered with index.html, so
76
- path-routed apps work; a missing asset is a 404.`,
75
+ Page paths without a file extension are answered with index.html and a
76
+ <base href="/">, so path-routed apps work at any depth; a missing asset is a 404.`,
77
77
  run: (args, io) => guard('run', io, () => runRun(args, io)),
78
78
  };
79
79
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE3C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAwC,MAAM,wBAAwB,CAAA;AAEhG,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAA;AAEpC,sEAAsE;AACtE,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,GAAS,EAAE;YACtB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YAC5B,IAAI,EAAE,CAAA;QACR,CAAC,CAAA;QACD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC1B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAyB;IACjD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAA;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,KAAK;QAAE,MAAM,IAAI,UAAU,CAAC,WAAW,KAAK,wBAAwB,CAAC,CAAA;IACxG,OAAO,IAAI,CAAA;AACb,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAC7C,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAA;IAC3D,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QACpE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,qDAAqD,CAAC,CAAA;QACnG,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;IACtB,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACxE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,yDAAyD,CAAC,CAAA;IAC/G,OAAO,EAAE,KAAK,EAAE,CAAA;AAClB,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAgB,EAAE,EAAa,EAAE,UAAsB,EAAE;IACpF,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IAClC,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAA;IAC1E,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;IAChD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,WAAW,CAAA;IACxD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IAClE,EAAE,CAAC,GAAG,CAAC,WAAW,MAAM,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,CAAA;IAC5C,EAAE,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;IAC/B,IAAI,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;IAC9C,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAY;IAC1B,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,wDAAwD;IACjE,KAAK,EAAE;;;;8CAIqC,gBAAgB;;;;iDAIb;IAC/C,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;CAC5D,CAAA"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `pwf run <dir|file.pwapp>` — serve a built pwapp locally.\n */\nimport { readFile, stat } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { readPwpack } from '@pwfabric/pack'\nimport type { Command, CommandIO, ParsedArgs } from './types.js'\nimport { guard, stringFlag, UsageError } from './lib/flags.js'\nimport { resolveFrom } from './lib/project.js'\nimport { startStaticServer, type StaticServer, type StaticSource } from './lib/static-server.js'\n\nexport const DEFAULT_RUN_PORT = 4700\n\n/** Resolves when the process is asked to stop (Ctrl-C or SIGTERM). */\nexport function untilSignal(): Promise<void> {\n return new Promise((done) => {\n const stop = (): void => {\n process.off('SIGINT', stop)\n process.off('SIGTERM', stop)\n done()\n }\n process.on('SIGINT', stop)\n process.on('SIGTERM', stop)\n })\n}\n\nexport function parsePort(value: string | undefined): number {\n if (value === undefined) return DEFAULT_RUN_PORT\n const port = Number(value)\n if (!/^\\d+$/.test(value) || port > 65535) throw new UsageError(`--port \"${value}\" is not a port number`)\n return port\n}\n\n/** The source to serve: a folder with an `index.html`, or a `.pwapp` archive opened in memory. */\nexport async function openRunSource(path: string): Promise<StaticSource> {\n const st = await stat(path).catch(() => null)\n if (!st) throw new Error(`no such file or folder: ${path}`)\n if (st.isDirectory()) {\n const index = await stat(join(path, 'index.html')).catch(() => null)\n if (!index?.isFile()) throw new Error(`${path} has no index.html; build the app first (pwf build)`)\n return { dir: path }\n }\n const { files } = await readPwpack(new Uint8Array(await readFile(path)))\n if (!files.has('index.html')) throw new Error(`${path} has no index.html at its root; it is not a built pwapp`)\n return { files }\n}\n\nexport interface RunOptions {\n /** Resolves when the server should stop. Default: SIGINT or SIGTERM. */\n readonly until?: (server: StaticServer) => Promise<void>\n}\n\nexport async function runRun(args: ParsedArgs, io: CommandIO, options: RunOptions = {}): Promise<number> {\n const target = args.positionals[0]\n if (target === undefined) throw new UsageError('missing <dir|file.pwapp>')\n const port = parsePort(stringFlag(args, 'port'))\n const hostname = stringFlag(args, 'host') ?? '127.0.0.1'\n const source = await openRunSource(resolveFrom(io.cwd, target))\n const server = await startStaticServer({ source, port, hostname })\n io.out(`Serving ${target} at ${server.url}`)\n io.out('Press Ctrl-C to stop.')\n try {\n await (options.until ?? untilSignal)(server)\n } finally {\n await server.close()\n }\n return 0\n}\n\nexport const run: Command = {\n name: 'run',\n summary: 'Serve a built pwapp (folder or .pwapp) on a local port',\n usage: `pwf run <dir|file.pwapp> [--port <n>] [--host <name>]\n\n <dir> a built pwapp folder with an index.html (see pwf build)\n <file.pwapp> a packaged pwapp (gzipped tar, read like a .pwpack), served from memory\n --port <n> port to listen on (default ${DEFAULT_RUN_PORT}; 0 picks a free one)\n --host <name> interface to bind (default 127.0.0.1)\n\nPage paths without a file extension are answered with index.html and a\n<base href=\"/\">, so path-routed apps work at any depth; a missing asset is a 404.`,\n run: (args, io) => guard('run', io, () => runRun(args, io)),\n}\n"]}
@@ -32,4 +32,3 @@ export interface Command {
32
32
  /** Runs the command. Resolves to the process exit code (0 = success). */
33
33
  run(args: ParsedArgs, io: CommandIO): Promise<number>;
34
34
  }
35
- //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG","sourcesContent":["/**\n * The contract every `pwf` command implements.\n *\n * A command is a plain object registered in ./registry.ts. It never calls\n * `process.exit` and never writes to `process.stdout` directly: it writes\n * through the `io` it is given and returns an exit code. That keeps every\n * command testable in-process.\n */\n\nexport interface CommandIO {\n /** Working directory the command runs in (absolute). */\n readonly cwd: string\n /** Normal output. */\n out(line: string): void\n /** Diagnostics and errors. */\n err(line: string): void\n /** Environment variables visible to the command. */\n readonly env: Readonly<Record<string, string | undefined>>\n}\n\nexport interface ParsedArgs {\n /** Positional arguments after the command name. */\n readonly positionals: readonly string[]\n /** `--flag value` and `--flag=value` become strings; bare `--flag` becomes true. */\n readonly flags: Readonly<Record<string, string | boolean>>\n}\n\nexport interface Command {\n /** The word after `pwf`, e.g. `create`. */\n readonly name: string\n /** One line shown by `pwf help`. */\n readonly summary: string\n /** Usage line, e.g. `pwf create <name> [--dir <path>]`. */\n readonly usage: string\n /** Runs the command. Resolves to the process exit code (0 = success). */\n run(args: ParsedArgs, io: CommandIO): Promise<number>\n}\n"]}
@@ -4,4 +4,3 @@
4
4
  import type { Command, CommandIO, ParsedArgs } from './types.js';
5
5
  export declare function runValidate(args: ParsedArgs, io: CommandIO): Promise<number>;
6
6
  export declare const validate: Command;
7
- //# sourceMappingURL=validate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEzE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAgB,EAAE,EAAa;IAC/D,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IACrD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;IACnE,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QAC3B,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACvC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACvF,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9B,MAAM,OAAO,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,SAAS,CAAA;IACjJ,IAAI,MAAM,CAAC,EAAE;QAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;;QACzB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACpB,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAY;IAC/B,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,6CAA6C;IACtD,KAAK,EAAE;;;;;;;yDAOgD;IACvD,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;CACtE,CAAA"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEzE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAgB,EAAE,EAAa;IAC/D,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IACrD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;IACnE,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QAC3B,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACvC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACvF,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9B,MAAM,OAAO,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,SAAS,CAAA;IACjJ,IAAI,MAAM,CAAC,EAAE;QAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;;QACzB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACpB,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAY;IAC/B,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,6CAA6C;IACtD,KAAK,EAAE;;;;;;;yDAOgD;IACvD,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;CACtE,CAAA","sourcesContent":["/**\n * `pwf validate [dir]` — checks a pwpack folder and its pinned packs.\n */\nimport type { Command, CommandIO, ParsedArgs } from './types.js'\nimport { boolFlag, guard } from './lib/flags.js'\nimport { readProject, resolveFrom } from './lib/project.js'\nimport { countLine, printIssues, validateProject } from './lib/report.js'\n\nexport async function runValidate(args: ParsedArgs, io: CommandIO): Promise<number> {\n const root = resolveFrom(io.cwd, args.positionals[0])\n const result = await validateProject(root, await readProject(root))\n if (boolFlag(args, 'json')) {\n io.out(JSON.stringify(result, null, 2))\n return result.ok ? 0 : 1\n }\n const who = result.identity ? `${result.identity.id}@${result.identity.version}` : root\n printIssues(io, result.issues)\n const summary = `${who}: ${result.ok ? 'valid' : 'invalid'} (${countLine(result.issues)}; layout ${result.layout}; ${result.atoms.length} atoms)`\n if (result.ok) io.out(summary)\n else io.err(summary)\n return result.ok ? 0 : 1\n}\n\nexport const validate: Command = {\n name: 'validate',\n summary: 'Check a pwpack folder and the packs it pins',\n usage: `pwf validate [dir] [--json]\n\n dir the pwpack folder (default: the current folder)\n --json print the raw result (ok, issues, identity, layout, atoms)\n\nEvery packs[] pin is looked up in .pwf/packs/<id>@<version>/: a build that is\nnot there is a warning, one whose content hash differs from the pin is an\nerror. Exit code 1 when there is any error, 0 otherwise.`,\n run: (args, io) => guard('validate', io, () => runValidate(args, io)),\n}\n"]}
@@ -45,4 +45,3 @@ export interface AssembleResult {
45
45
  export declare function blockNames(atom: Pick<CompiledAtom, 'id' | 'manifest'>): string[];
46
46
  /** Assembles the pwapp for the app folder at `root`. */
47
47
  export declare function assemblePwapp(root: string, options?: AssembleOptions): Promise<AssembleResult>;
48
- //# sourceMappingURL=assemble.d.ts.map