@threadlabs/markupkit 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +62 -2
  3. package/components/breadcrumbs.html +9 -0
  4. package/components/nav.html +51 -0
  5. package/components/pager.html +13 -0
  6. package/dist/application.d.ts +31 -0
  7. package/dist/application.d.ts.map +1 -0
  8. package/dist/application.js +488 -0
  9. package/dist/application.js.map +1 -0
  10. package/dist/browser.d.ts +13 -0
  11. package/dist/browser.d.ts.map +1 -0
  12. package/dist/browser.js +151 -0
  13. package/dist/browser.js.map +1 -0
  14. package/dist/build.d.ts +5 -0
  15. package/dist/build.d.ts.map +1 -0
  16. package/dist/build.js +351 -0
  17. package/dist/build.js.map +1 -0
  18. package/dist/bundle-worker.d.ts +2 -0
  19. package/dist/bundle-worker.d.ts.map +1 -0
  20. package/dist/bundle-worker.js +48 -0
  21. package/dist/bundle-worker.js.map +1 -0
  22. package/dist/bundle.d.ts +23 -0
  23. package/dist/bundle.d.ts.map +1 -0
  24. package/dist/bundle.js +34 -0
  25. package/dist/bundle.js.map +1 -0
  26. package/dist/cli.d.ts +3 -0
  27. package/dist/cli.d.ts.map +1 -0
  28. package/dist/cli.js +68 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/client.d.ts +40 -0
  31. package/dist/client.d.ts.map +1 -0
  32. package/dist/client.js +447 -0
  33. package/dist/client.js.map +1 -0
  34. package/dist/component-module.d.ts +20 -0
  35. package/dist/component-module.d.ts.map +1 -0
  36. package/dist/component-module.js +82 -0
  37. package/dist/component-module.js.map +1 -0
  38. package/dist/config.d.ts +36 -0
  39. package/dist/config.d.ts.map +1 -0
  40. package/dist/config.js +111 -0
  41. package/dist/config.js.map +1 -0
  42. package/dist/csp.d.ts +23 -0
  43. package/dist/csp.d.ts.map +1 -0
  44. package/dist/csp.js +91 -0
  45. package/dist/csp.js.map +1 -0
  46. package/dist/description.d.ts +45 -0
  47. package/dist/description.d.ts.map +1 -0
  48. package/dist/description.js +28 -0
  49. package/dist/description.js.map +1 -0
  50. package/dist/document.d.ts +48 -0
  51. package/dist/document.d.ts.map +1 -0
  52. package/dist/document.js +65 -0
  53. package/dist/document.js.map +1 -0
  54. package/dist/index.d.ts +13 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +9 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/links.d.ts +8 -0
  59. package/dist/links.d.ts.map +1 -0
  60. package/dist/links.js +90 -0
  61. package/dist/links.js.map +1 -0
  62. package/dist/private-api.d.ts +12 -0
  63. package/dist/private-api.d.ts.map +1 -0
  64. package/dist/private-api.js +158 -0
  65. package/dist/private-api.js.map +1 -0
  66. package/dist/private-client.d.ts +11 -0
  67. package/dist/private-client.d.ts.map +1 -0
  68. package/dist/private-client.js +18 -0
  69. package/dist/private-client.js.map +1 -0
  70. package/dist/private-readers.d.ts +26 -0
  71. package/dist/private-readers.d.ts.map +1 -0
  72. package/dist/private-readers.js +107 -0
  73. package/dist/private-readers.js.map +1 -0
  74. package/dist/provider-preparation.d.ts +20 -0
  75. package/dist/provider-preparation.d.ts.map +1 -0
  76. package/dist/provider-preparation.js +82 -0
  77. package/dist/provider-preparation.js.map +1 -0
  78. package/dist/providers.d.ts +14 -0
  79. package/dist/providers.d.ts.map +1 -0
  80. package/dist/providers.js +127 -0
  81. package/dist/providers.js.map +1 -0
  82. package/dist/read-channel.d.ts +30 -0
  83. package/dist/read-channel.d.ts.map +1 -0
  84. package/dist/read-channel.js +65 -0
  85. package/dist/read-channel.js.map +1 -0
  86. package/dist/resource.d.ts +31 -0
  87. package/dist/resource.d.ts.map +1 -0
  88. package/dist/resource.js +117 -0
  89. package/dist/resource.js.map +1 -0
  90. package/dist/routes.d.ts +90 -0
  91. package/dist/routes.d.ts.map +1 -0
  92. package/dist/routes.js +536 -0
  93. package/dist/routes.js.map +1 -0
  94. package/dist/serve.d.ts +4 -0
  95. package/dist/serve.d.ts.map +1 -0
  96. package/dist/serve.js +221 -0
  97. package/dist/serve.js.map +1 -0
  98. package/dist/server.d.ts +211 -0
  99. package/dist/server.d.ts.map +1 -0
  100. package/dist/server.js +734 -0
  101. package/dist/server.js.map +1 -0
  102. package/dist/types.d.ts +504 -0
  103. package/dist/types.d.ts.map +1 -0
  104. package/dist/types.js +2 -0
  105. package/dist/types.js.map +1 -0
  106. package/package.json +80 -4
@@ -0,0 +1,48 @@
1
+ import { parentPort, workerData } from "node:worker_threads";
2
+ import { build } from "vite";
3
+ import { join } from "node:path";
4
+ import { browserPlugin } from "./browser.js";
5
+ import { rootAlias } from "./config.js";
6
+ const work = workerData;
7
+ try {
8
+ const inputs = new Set();
9
+ const entries = {};
10
+ if ("server" in work) {
11
+ const options = work.server;
12
+ // Packages stay imports, resolved from the application's node_modules where the server runs.
13
+ const result = await build({ root: options.root, configFile: false, mode: "production", publicDir: false, resolve: { alias: rootAlias(options.root) }, logLevel: "silent",
14
+ build: { ssr: true, outDir: options.outDir, emptyOutDir: false, copyPublicDir: false, target: "es2022", minify: false,
15
+ rolldownOptions: { input: options.inputs, output: { format: "es", entryFileNames: "[name].js", chunkFileNames: "chunks/[name]-[hash].js" } } } });
16
+ for (const output of Array.isArray(result) ? result : [result]) {
17
+ if (!("output" in output))
18
+ continue;
19
+ for (const chunk of output.output)
20
+ if (chunk.type === "chunk") {
21
+ for (const file of chunk.moduleIds)
22
+ if (!file.startsWith("\0"))
23
+ inputs.add(file);
24
+ if (chunk.isEntry)
25
+ entries[chunk.name] = { file: chunk.fileName, exports: chunk.exports };
26
+ }
27
+ }
28
+ }
29
+ else {
30
+ const options = work.browser;
31
+ await build({ root: options.root, configFile: false, mode: "production", base: options.base, publicDir: join(options.root, "public"), resolve: { alias: rootAlias(options.root) },
32
+ logLevel: "silent", plugins: [browserPlugin(options.sources, inputs)],
33
+ build: { outDir: options.outDir, emptyOutDir: false, copyPublicDir: false, assetsDir: "_markupkit", target: "es2022", manifest: "_markupkit/vite-manifest.json", modulePreload: false,
34
+ rolldownOptions: { input: Object.fromEntries([...options.sources.keys()].filter(id => id.startsWith("virtual:markupkit/page-")).map(id => [id.slice("virtual:markupkit/".length), id])),
35
+ output: { entryFileNames: "_markupkit/[name]-[hash].js", chunkFileNames: "_markupkit/[name]-[hash].js", assetFileNames: "_markupkit/[name]-[hash][extname]" } } },
36
+ });
37
+ }
38
+ // oxlint-disable-next-line unicorn/require-post-message-target-origin -- Node MessagePort has no origin.
39
+ parentPort.postMessage({ inputs: [...inputs].sort(), entries });
40
+ }
41
+ catch (error) {
42
+ // oxlint-disable-next-line unicorn/require-post-message-target-origin -- Node MessagePort has no origin.
43
+ parentPort.postMessage({ error: error instanceof Error ? error.message : String(error) });
44
+ }
45
+ finally {
46
+ parentPort.close();
47
+ }
48
+ //# sourceMappingURL=bundle-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-worker.js","sourceRoot":"","sources":["../src/bundle-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface BrowserBuild {
2
+ readonly root: string;
3
+ readonly base: string;
4
+ readonly outDir: string;
5
+ readonly sources: ReadonlyMap<string, string>;
6
+ }
7
+ /** The request server's own modules: loaders, endpoints, and middleware, each built to <name>.js in outDir. */
8
+ export interface ServerBuild {
9
+ readonly root: string;
10
+ readonly outDir: string;
11
+ readonly inputs: Readonly<Record<string, string>>;
12
+ }
13
+ export interface ServerBundleEntry {
14
+ readonly file: string;
15
+ readonly exports: readonly string[];
16
+ }
17
+ export interface BundleResult {
18
+ readonly inputs: readonly string[];
19
+ readonly entries: Readonly<Record<string, ServerBundleEntry>>;
20
+ }
21
+ export declare function bundleBrowser(options: BrowserBuild): Promise<readonly string[]>;
22
+ export declare function bundleServer(options: ServerBuild, signal?: AbortSignal): Promise<BundleResult>;
23
+ //# sourceMappingURL=bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/C;AAED,+GAA+G;AAC/G,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD;AACD,MAAM,WAAW,iBAAiB;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;AACjG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;CAC/D;AA2BD,wBAAsB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAA0D;AAChJ,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAkD"}
package/dist/bundle.js ADDED
@@ -0,0 +1,34 @@
1
+ import { Worker } from "node:worker_threads";
2
+ /** Vite's build and dev APIs both use NODE_ENV. Keep each production build in its own realm. */
3
+ function inWorker(workerData, signal) {
4
+ const source = new URL(import.meta.url).pathname.endsWith(".ts");
5
+ const entry = new URL(source ? "./bundle-worker.ts" : "./bundle-worker.js", import.meta.url);
6
+ const workerEntry = source ? new URL(`data:text/javascript,${encodeURIComponent(`import { tsImport } from ${JSON.stringify(import.meta.resolve("tsx/esm/api"))}; await tsImport(${JSON.stringify(entry.href)}, ${JSON.stringify(import.meta.url)});`)}`) : entry;
7
+ return new Promise((resolve, reject) => {
8
+ if (signal?.aborted) {
9
+ reject(signal.reason);
10
+ return;
11
+ }
12
+ let replied = false;
13
+ const worker = new Worker(workerEntry, { workerData, execArgv: [], env: { ...process.env, NODE_ENV: "production" } });
14
+ const settle = (outcome) => {
15
+ if (replied)
16
+ return;
17
+ replied = true;
18
+ signal?.removeEventListener("abort", abort);
19
+ void worker.terminate().then(() => { if ("error" in outcome)
20
+ reject(outcome.error);
21
+ else
22
+ resolve(outcome.result); }, reject);
23
+ };
24
+ const abort = () => settle({ error: signal.reason });
25
+ signal?.addEventListener("abort", abort, { once: true });
26
+ worker.once("message", (reply) => settle("error" in reply ? { error: new Error(reply.error) } : { result: reply }));
27
+ worker.once("error", error => settle({ error }));
28
+ worker.once("exit", code => { if (!replied)
29
+ settle({ error: new Error(`Build worker exited without a result (code ${code}).`) }); });
30
+ });
31
+ }
32
+ export async function bundleBrowser(options) { return (await inWorker({ browser: options })).inputs; }
33
+ export function bundleServer(options, signal) { return inWorker({ server: options }, signal); }
34
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env node
2
+ import { resolve } from "node:path";
3
+ import { parseArgs } from "node:util";
4
+ import { MarkupKitError, loadConfig } from "./config.js";
5
+ const usage = `Usage: markupkit <command> [root] [options]
6
+
7
+ Commands:
8
+ dev Serve the application with live reload
9
+ build Prerender pages and write the request server to the output
10
+ preview Serve the build's files as a static host does
11
+ start Serve the build: prerendered pages, assets, and server routes, endpoints, and middleware
12
+
13
+ Options:
14
+ --base /docs/ URL path prefix (dev, build)
15
+ --origin https://example.com Origin for prerendered absolute URLs (dev, build)
16
+ --out-dir dist Build output (build, preview, start)
17
+ --port 3000 Port; start also reads PORT
18
+ --host 127.0.0.1 Host; start also reads HOST
19
+ --render-workers 4 Workers that render pages; the CPU count, up to 8, by default
20
+ -h, --help Show this help`;
21
+ async function main() {
22
+ const { values, positionals } = parseArgs({ allowPositionals: true, options: {
23
+ base: { type: "string" }, origin: { type: "string" }, "out-dir": { type: "string" },
24
+ port: { type: "string" }, host: { type: "string" }, "render-workers": { type: "string" }, help: { type: "boolean", short: "h" },
25
+ } });
26
+ if (values.help || positionals.length === 0) {
27
+ console.log(usage);
28
+ return;
29
+ }
30
+ const command = positionals[0];
31
+ if (!["dev", "build", "preview", "start"].includes(command) || positionals.length > 2)
32
+ throw new MarkupKitError("Choose dev, build, preview, or start and an optional application root.");
33
+ const root = resolve(positionals[1] ?? process.cwd());
34
+ // start runs the build alone: it reads no config file, which Vite would load.
35
+ const port = values.port ?? (command === "start" ? process.env.PORT : undefined);
36
+ const host = values.host ?? (command === "start" ? process.env.HOST : undefined);
37
+ const options = { ...command === "start" ? {} : await loadConfig(root), root,
38
+ ...(values.base === undefined ? {} : { base: values.base }),
39
+ ...(values.origin === undefined ? {} : { origin: values.origin }),
40
+ ...(values["out-dir"] === undefined ? {} : { outDir: values["out-dir"] }),
41
+ ...(host === undefined ? {} : { host }),
42
+ ...(port === undefined ? {} : { port: Number(port) }) };
43
+ if (options.port !== undefined && (!Number.isInteger(options.port) || options.port < 0 || options.port > 65535))
44
+ throw new MarkupKitError("port must be an integer from 0 to 65535.");
45
+ if (values["render-workers"] !== undefined) {
46
+ const count = Number(values["render-workers"]);
47
+ if (!Number.isInteger(count) || count < 1)
48
+ throw new MarkupKitError("render-workers must be a whole number of at least 1.");
49
+ (await import("@nextwebwg/html-next/server")).setRenderWorkers(count);
50
+ }
51
+ if (command === "build") {
52
+ const { buildApplication } = await import("./build.js");
53
+ const result = await buildApplication(options);
54
+ console.log(`Generated ${result.routes.length} pages in ${result.outDir}`);
55
+ return;
56
+ }
57
+ // Each command loads only its own modules, so start never loads Vite.
58
+ const server = command === "start"
59
+ ? await (await import("./server.js")).startApplication({ outDir: resolve(root, options.outDir ?? "dist"),
60
+ ...(options.host === undefined ? {} : { host: options.host }), ...(options.port === undefined ? {} : { port: options.port }) })
61
+ : await (await import("./serve.js"))[command === "dev" ? "devApplication" : "previewApplication"](options);
62
+ console.log(`MarkupKit ${command}: ${server.url}`);
63
+ const stop = () => { void server.close().then(() => { process.exitCode = 0; }).catch(error => { console.error(String(error)); process.exitCode = 1; }); };
64
+ process.once("SIGINT", stop);
65
+ process.once("SIGTERM", stop);
66
+ }
67
+ void main().catch(error => { console.error(error instanceof Error ? error.message : String(error)); process.exitCode = 1; });
68
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * MarkupKit's browser side, shared by every page module in a document. Each page module registers
3
+ * its components, compiled to direct DOM code, here; the first one adopts the server-rendered page
4
+ * and starts client navigation. A navigation loads the next page's module and payload, renders its
5
+ * layers with their factories as the server renders them, and swaps only the layers that changed.
6
+ * Anything the payload cannot render falls back to the page's static HTML, which the components
7
+ * adopt in place. docs/client-navigation.md records the design.
8
+ */
9
+ import type { adoptRenderedProps, flushComponent, generatedHost, replaceProjectedNode } from "@nextwebwg/html-next/generated-runtime";
10
+ import type { BindingSnapshot } from "@nextwebwg/html-next/bindings";
11
+ /** Consume only this component's read identities; the renderer adopts accepted values itself. */
12
+ export declare function preparedBinding(root: Element, tag: string): BindingSnapshot | undefined;
13
+ /** The compiled-runtime functions navigation uses, from the one runtime instance every page module shares. */
14
+ export interface Runtime {
15
+ readonly adoptRenderedProps: typeof adoptRenderedProps;
16
+ readonly replaceProjectedNode: typeof replaceProjectedNode;
17
+ readonly generatedHost: typeof generatedHost;
18
+ readonly flushComponent: typeof flushComponent;
19
+ }
20
+ export interface ClientOptions {
21
+ readonly base: string;
22
+ readonly prefetch: Prefetch;
23
+ /** The build's deployment manifest, which lists each page's shared chunks. Development has none. */
24
+ readonly manifest?: string;
25
+ }
26
+ type Prefetch = "interaction" | "visible" | "none";
27
+ /**
28
+ * A compiled component: its factory, which adopts a server-rendered root given as its third
29
+ * argument, and the invocation attribute each of its props is written as.
30
+ */
31
+ type BindingAdopter = (root: Element, rendered: Element, update: () => void) => void;
32
+ export type Component = readonly [
33
+ factory: (options: object, html?: Record<string, string>, root?: Element) => Element,
34
+ props: Readonly<Record<string, string>>,
35
+ adoption?: () => Promise<BindingAdopter>
36
+ ];
37
+ /** Each page module calls this once, when it is first imported. */
38
+ export declare function page(runtime: Runtime, options: ClientOptions, pageComponents: Readonly<Record<string, Component>>): void;
39
+ export {};
40
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AACtI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAUvF;AAED,8GAA8G;AAC9G,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IACvD,QAAQ,CAAC,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;IAC3D,QAAQ,CAAC,aAAa,EAAE,OAAO,aAAa,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,OAAO,cAAc,CAAC;CAChD;AACD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,oGAAoG;IACpG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AACD,KAAK,QAAQ,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM,CAAC;AACnD;;;GAGG;AACH,KAAK,cAAc,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;AACrF,MAAM,MAAM,SAAS,GAAG,SAAS;IAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO;IACpH,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAE,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC;CAAC,CAAC;AAiCrF,mEAAmE;AACnE,wBAAgB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAAG,IAAI,CAcxH"}