@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,151 @@
1
+ import { createHash } from "node:crypto";
2
+ import { fileURLToPath } from "node:url";
3
+ import { existsSync } from "node:fs";
4
+ import { normalizePath } from "vite";
5
+ import { collectSharedStylesheets, compileComponentGraphStylesForBuild, generateComponent } from "@nextwebwg/html-next";
6
+ const packagedRuntime = fileURLToPath(import.meta.resolve("@nextwebwg/html-next/generated-runtime"));
7
+ const sourceRuntime = packagedRuntime.replace(/[/\\]dist[/\\]generated-runtime\.js$/, "/src/generated-runtime.ts");
8
+ // Workspace source execution can test the same entry before packages have been built.
9
+ const source = fileURLToPath(import.meta.url).endsWith(".ts");
10
+ const runtime = source && existsSync(sourceRuntime) ? sourceRuntime : packagedRuntime;
11
+ const packagedBindings = fileURLToPath(import.meta.resolve("@nextwebwg/html-next/bindings"));
12
+ const sourceBindings = packagedBindings.replace(/[/\\]dist[/\\]bindings\.js$/, "/src/bindings.ts");
13
+ const bindings = source && existsSync(sourceBindings) ? sourceBindings : packagedBindings;
14
+ const client = fileURLToPath(new URL(source ? "./client.ts" : "./client.js", import.meta.url));
15
+ const moduleComposition = fileURLToPath(new URL(source ? "./component-module.ts" : "./component-module.js", import.meta.url));
16
+ const privateClient = fileURLToPath(new URL(source ? "./private-client.ts" : "./private-client.js", import.meta.url));
17
+ export function stylesheetSources(components) {
18
+ const sources = new Map();
19
+ const shared = collectSharedStylesheets(components.map(component => component.definition));
20
+ if (shared.length > 0) {
21
+ // One stylesheet holds the page's whole graph, so it is named for the graph: pages that share a
22
+ // first component (their layout) would otherwise overwrite each other's styles.
23
+ const files = components.map(component => component.definition.source.file);
24
+ const graph = createHash("sha256").update(files.join("\0")).digest("hex").slice(0, 16);
25
+ sources.set(`${normalizePath(fileURLToPath(files[0]))}.${graph}.markupkit-shared.css`, compileComponentGraphStylesForBuild(components.map(component => component.definition)));
26
+ return sources;
27
+ }
28
+ for (const component of components) {
29
+ if (component.styles.css === "")
30
+ continue;
31
+ const id = normalizePath(fileURLToPath(component.definition.source.file)) + ".markupkit.css";
32
+ sources.set(id, (sources.get(id) ?? "") + component.styles.css);
33
+ }
34
+ return sources;
35
+ }
36
+ /** A component's compiled module: the same id on every page, so pages share its chunk. */
37
+ function componentId(definition) {
38
+ const source = createHash("sha256").update(`${definition.source.file}\0${definition.contract.tag}`).digest("hex").slice(0, 12);
39
+ return `virtual:markupkit/component/${definition.contract.tag}-${source}.js`;
40
+ }
41
+ /**
42
+ * A page's browser modules: each component compiled to direct DOM code that also adopts its
43
+ * server-rendered root, and the page's entry, `entry`, which registers them with client.ts. A page
44
+ * ships only the generated-runtime helpers its components use; controllers and declared reads are
45
+ * imported by the components that own them, and the page's stylesheets by its entry.
46
+ */
47
+ export function browserSources(components, options, entry, css = []) {
48
+ const { base } = options;
49
+ const sources = new Map();
50
+ const invocations = new Map(components.map(({ definition }) => [definition.contract.tag, { module: componentId(definition), definition }]));
51
+ for (const component of components) {
52
+ const reads = [];
53
+ const moduleId = component.module === undefined && component.client === undefined ? undefined : componentId(component.definition) + ".module.js";
54
+ if (moduleId !== undefined) {
55
+ // Native ESM caches this namespace; the binding library retains each host's passive instance.
56
+ // A behavior-only module does not download or activate the provider engine.
57
+ const options = component.binding === undefined ? "" : `, { browser: host => ({ source: ${JSON.stringify(component.binding.source)}, snapshot: preparedBinding(host.root, ${JSON.stringify(component.definition.contract.tag)}) }) }`;
58
+ const common = component.module === undefined ? "const behavior = {};" : `import * as behavior from ${JSON.stringify(component.module)};`;
59
+ const privateNames = component.binding?.readers ?? [];
60
+ const environment = `${component.client === undefined ? "" : `\nimport * as environment from ${JSON.stringify(component.client)};`}${component.client === undefined && privateNames.length === 0 ? "" : `\nimport { componentModule, connectModules } from ${JSON.stringify(moduleComposition)};`}${privateNames.length === 0 ? "" : `\nimport { privateReaders } from ${JSON.stringify(privateClient)};`}`;
61
+ const privateModule = `componentModule(behavior, privateReaders(library, ${JSON.stringify(base)}, ${JSON.stringify(component.binding?.source)}, ${JSON.stringify(component.definition.contract.tag)}, ${JSON.stringify(privateNames)}, ${JSON.stringify(Object.fromEntries(Object.entries(component.definition.contract.props).flatMap(([name, prop]) => prop.select === undefined ? [] : [[name, prop.select.from]])))}))`;
62
+ const commonModule = privateNames.length === 0 ? "behavior" : privateModule;
63
+ const composed = component.client === undefined ? commonModule : `componentModule(${commonModule}, environment)`;
64
+ sources.set(moduleId, `${component.binding === undefined ? "" : `import { preparedBinding } from ${JSON.stringify(client)};
65
+ import { generatedHost, renderedInstanceRecord, READY_INPUT } from ${JSON.stringify(runtime)};\n`}${common}${environment}
66
+ let adapter, bound;
67
+ const binding = () => adapter ??= import(${JSON.stringify(bindings)}).then(library => bound = library.bindModule(${composed}${options}));
68
+ export const connect = "props" in behavior || "create" in behavior${component.client === undefined ? "" : ' || "props" in environment || "create" in environment'}
69
+ ? (host, context) => binding().then(module => module.connect(host, context))
70
+ : ${component.client === undefined ? 'Reflect.get(behavior, "connect")' : 'connectModules(Reflect.get(behavior, "connect"), Reflect.get(environment, "connect"))'};
71
+ ${component.binding === undefined ? "" : `
72
+ export async function adoption() {
73
+ await binding();
74
+ return (root, rendered, update) => {
75
+ const snapshot = preparedBinding(rendered, ${JSON.stringify(component.definition.contract.tag)});
76
+ const record = renderedInstanceRecord(rendered, ${JSON.stringify(component.definition.contract.tag)});
77
+ if (snapshot === undefined || record === undefined) { update(); return; }
78
+ const inputs = Object.fromEntries(Object.entries(snapshot.reads).flatMap(([name, read]) =>
79
+ record.revisions?.[name] !== read.revision || !record.inputs[name]?.producer ? [] :
80
+ [[name, { value: record.props[name], status: record.availability?.[name] ?? READY_INPUT }]]));
81
+ bound.adopt(generatedHost(root, ${JSON.stringify(component.definition.contract.tag)}), { snapshot, inputs, update });
82
+ };
83
+ }
84
+ `}
85
+ `);
86
+ }
87
+ // Declared reads resolve as the page's URLs: a root-relative source under the deployment base, a
88
+ // relative one as the asset Vite emits for it.
89
+ const declarations = component.definition.declarations?.map((declaration) => {
90
+ if (declaration.kind !== "data" || declaration.source === undefined)
91
+ return declaration;
92
+ const source = declaration.source;
93
+ if (source.startsWith("/") && !source.startsWith("//")) {
94
+ return { ...declaration, source: source.startsWith(base) ? source : base + source.slice(1) };
95
+ }
96
+ if (/^(?:[A-Za-z][A-Za-z\d+.-]*:|\/\/)/.test(source))
97
+ return declaration;
98
+ const url = new URL(source, component.definition.source.file);
99
+ reads.push(`import read${reads.length} from ${JSON.stringify(fileURLToPath(url) + "?url&no-inline")};`);
100
+ return { ...declaration, source: `\u0000markupkit-read-${reads.length - 1}${url.search}${url.hash}` };
101
+ });
102
+ const definition = { ...component.definition, ...declarations === undefined ? {} : { declarations },
103
+ ...component.controller === undefined ? {} : { controller: component.controller },
104
+ ...moduleId === undefined ? {} : { module: moduleId } };
105
+ let module = generateComponent(definition, { invocations, hydrate: true })
106
+ .find((artifact) => artifact.path === `vanilla/${definition.contract.name}.js`).content
107
+ .replace('"@nextwebwg/html-next/generated-runtime"', JSON.stringify(runtime))
108
+ // The page's entry imports its stylesheets: one for the page's graph, or one per source file.
109
+ .replace(`import "../styles/${definition.contract.tag}.css";`, "")
110
+ .replaceAll(/"\\u0000markupkit-read-(\d+)([^"]*)"/g, (_, index, suffix) => `read${index} + ${JSON.stringify(suffix)}`);
111
+ if (reads.length > 0)
112
+ module = `${reads.join("\n")}\n${module}`;
113
+ sources.set(componentId(definition), module);
114
+ }
115
+ // Each component's factory and the invocation attribute each prop is written as (application.ts),
116
+ // which client navigation renders a payload's layers with.
117
+ const registered = components.map(({ definition, binding }, index) => `${JSON.stringify(definition.contract.tag)}: [c${index}, ${JSON.stringify(Object.fromEntries(Object.keys(definition.contract.props).map((name) => [name.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), name])))}${binding === undefined ? "" : `, b${index}`}]`);
118
+ const functions = "adoptRenderedProps, replaceProjectedNode, generatedHost, flushComponent";
119
+ sources.set(entry, `import { ${functions} } from ${JSON.stringify(runtime)};
120
+ import { page } from ${JSON.stringify(client)};
121
+ ${css.map(file => `import ${JSON.stringify(normalizePath(file))};`).join("\n")}
122
+ ${[...stylesheetSources(components).keys()].map(id => `import ${JSON.stringify(id)};`).join("\n")}
123
+ ${components.map(({ definition }, index) => `import { create${definition.contract.name} as c${index} } from ${JSON.stringify(componentId(definition))};`).join("\n")}
124
+ ${components.flatMap(({ definition, binding }, index) => binding === undefined ? [] : [`
125
+ const b${index} = () => import(${JSON.stringify(componentId(definition) + ".module.js")}).then(module => module.adoption());`]).join("\n")}
126
+ page({ ${functions} }, ${JSON.stringify(options)}, { ${registered.join(", ")} });
127
+ `);
128
+ return sources;
129
+ }
130
+ export function browserPlugin(sources, inputs) {
131
+ return {
132
+ name: "markupkit-browser",
133
+ // Vite adds ?direct when a document <link> requests a stylesheet; keep the query for its CSS plugin.
134
+ resolveId(id) { const path = id.split("?")[0]; if (sources.has(path))
135
+ return path.endsWith(".css") ? id : `\0${id}`; },
136
+ load(id) { return sources.get((id.startsWith("\0") ? id.slice(1) : id).split("?")[0]); },
137
+ transform(_code, id, options) {
138
+ const path = id.split("?")[0];
139
+ if (!options?.ssr && /\.server\.[cm]?[jt]sx?$/.test(path))
140
+ this.error({ id: path, message: `${path} is server-only and cannot be imported by a browser module.` });
141
+ },
142
+ generateBundle() {
143
+ // Virtual stylesheets keep their ids for Vite's CSS plugin; report only source files.
144
+ if (inputs !== undefined)
145
+ for (const id of this.getModuleIds())
146
+ if (!id.startsWith("\0") && !sources.has(id.split("?")[0]))
147
+ inputs.add(id);
148
+ },
149
+ };
150
+ }
151
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAe,MAAM,MAAM,CAAC;AAGlD,OAAO,EAAE,wBAAwB,EAAE,mCAAmC,EAAE,iBAAiB,EAA4B,MAAM,sBAAsB,CAAC;AAElJ,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,CAAC;AACrG,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,sCAAsC,EAAE,2BAA2B,CAAC,CAAC;AACnH,sFAAsF;AACtF,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9D,MAAM,OAAO,GAAG,MAAM,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC;AACtF,MAAM,gBAAgB,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC;AAC7F,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAAC,6BAA6B,EAAE,kBAAkB,CAAC,CAAC;AACnG,MAAM,QAAQ,GAAG,MAAM,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1F,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/F,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,uBAAuB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9H,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEtH,MAAM,UAAU,iBAAiB,CAAC,UAAwC;IACxE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,MAAM,MAAM,GAAG,wBAAwB,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3F,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,gGAAgG;QAChG,gFAAgF;QAChF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,IAAI,KAAK,uBAAuB,EACpF,mCAAmC,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1F,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE;YAAE,SAAS;QAC1C,MAAM,EAAE,GAAG,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,gBAAgB,CAAC;QAC7F,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,0FAA0F;AAC1F,SAAS,WAAW,CAAC,UAA+B;IAClD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/H,OAAO,+BAA+B,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI,MAAM,KAAK,CAAC;AAC/E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,UAAwC,EAAE,OAAsB,EAAE,KAAa,EAAE,GAAG,GAAsB,EAAE;IACzI,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5I,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC;QACjJ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,8FAA8F;YAC9F,4EAA4E;YAC5E,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,0CAA0C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;YACtO,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;YAC1I,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;YACtD,MAAM,WAAW,GAAG,GAAG,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kCAAkC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC,MAAM,KAAK,SAAS,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qDAAqD,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,GAAG,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oCAAoC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;YAC5Y,MAAM,aAAa,GAAG,qDAAqD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5Z,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC;YAC5E,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,mBAAmB,YAAY,gBAAgB,CAAC;YACjH,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;qEAC1D,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,WAAW;;2CAE7E,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,gDAAgD,QAAQ,GAAG,OAAO;oEACjE,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,uDAAuD;;MAE3J,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,uFAAuF;EACjK,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;;;iDAIQ,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;sDAC5C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;;;;;sCAKjE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;;;CAGtF;CACA,CAAC,CAAC;QACC,CAAC;QACD,iGAAiG;QACjG,+CAA+C;QAC/C,MAAM,YAAY,GAAG,SAAS,CAAC,UAAU,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;YAC1E,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,IAAI,WAAW,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO,WAAW,CAAC;YACxF,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;YAClC,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvD,OAAO,EAAE,GAAG,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/F,CAAC;YACD,IAAI,mCAAmC,CAAC,IAAI,CAAC,MAAM,CAAC;gBAAE,OAAO,WAAW,CAAC;YACzE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9D,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,MAAM,SAAS,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACxG,OAAO,EAAE,GAAG,WAAW,EAAE,MAAM,EAAE,wBAAwB,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QACxG,CAAC,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,EAAE,GAAG,SAAS,CAAC,UAAU,EAAE,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE;YACjG,GAAG,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE;YACjF,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;QAC1D,IAAI,MAAM,GAAG,iBAAiB,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;aACvE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAE,CAAC,OAAO;aACvF,OAAO,CAAC,0CAA0C,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC7E,8FAA8F;aAC7F,OAAO,CAAC,qBAAqB,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC;aACjE,UAAU,CAAC,uCAAuC,EAAE,CAAC,CAAC,EAAE,KAAa,EAAE,MAAc,EAAE,EAAE,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IACD,kGAAkG;IAClG,2DAA2D;IAC3D,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAChK,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7K,MAAM,SAAS,GAAG,yEAAyE,CAAC;IAC5F,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,SAAS,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;uBACrD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;EAC3C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;EAC5E,CAAC,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;EAC/F,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,kBAAkB,UAAU,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;EAClK,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC9E,KAAK,mBAAmB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,sCAAsC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;SACjI,SAAS,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;CAC3E,CAAC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAoC,EAAE,MAAoB;IACtF,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,qGAAqG;QACrG,SAAS,CAAC,EAAE,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QACvH,IAAI,CAAC,EAAE,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC;QACzF,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO;YAC1B,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,6DAA6D,EAAE,CAAC,CAAC;QACrK,CAAC;QACD,cAAc;YACZ,sFAAsF;YACtF,IAAI,MAAM,KAAK,SAAS;gBAAE,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;oBAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;wBAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9I,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ApplicationOptions, BuildManifest, BuildResult } from "./types.js";
2
+ /** Read a build's _markupkit/manifest.json, refusing a format version this MarkupKit doesn't know. */
3
+ export declare function readManifest(outDir: string): Promise<BuildManifest>;
4
+ export declare function buildApplication(input?: ApplicationOptions): Promise<BuildResult>;
5
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,kBAAkB,EAAuD,aAAa,EAAE,WAAW,EAAkD,MAAM,YAAY,CAAC;AA6BtL,sGAAsG;AACtG,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAMzE;AA2DD,wBAAsB,gBAAgB,CAAC,KAAK,GAAE,kBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CAoL3F"}
package/dist/build.js ADDED
@@ -0,0 +1,351 @@
1
+ import { lstat, mkdir, mkdtemp, readFile, readdir, realpath, rename, rm, writeFile, copyFile } from "node:fs/promises";
2
+ import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
3
+ import { parseFragment } from "parse5";
4
+ import { createApplicationInternals, headScripts, notFoundPage } from "./application.js";
5
+ import { browserSources, stylesheetSources } from "./browser.js";
6
+ import { bundleBrowser, bundleServer } from "./bundle.js";
7
+ import { configure, globalStylesheets, MarkupKitError, runHook, withPlugins, within } from "./config.js";
8
+ import { documentHTML, escapeHTML, pagePayload, payloadPath, redirectPage } from "./document.js";
9
+ import { checkLinks } from "./links.js";
10
+ import { matchRoute } from "./routes.js";
11
+ async function exists(path) {
12
+ try {
13
+ await lstat(path);
14
+ return true;
15
+ }
16
+ catch (error) {
17
+ if (error.code === "ENOENT")
18
+ return false;
19
+ throw error;
20
+ }
21
+ }
22
+ async function copyPublic(source, output) {
23
+ if (!await exists(source))
24
+ return;
25
+ if ((await lstat(source)).isSymbolicLink())
26
+ throw new MarkupKitError("Public assets must not be symbolic links.", source);
27
+ for (const file of await readdir(source, { withFileTypes: true })) {
28
+ const from = join(source, file.name);
29
+ const to = join(output, file.name);
30
+ if (file.isSymbolicLink())
31
+ throw new MarkupKitError("Public assets must not be symbolic links.", from);
32
+ if (file.isDirectory()) {
33
+ await mkdir(to, { recursive: true });
34
+ await copyPublic(from, to);
35
+ }
36
+ else if (file.isFile()) {
37
+ await mkdir(dirname(to), { recursive: true });
38
+ await copyFile(from, to);
39
+ }
40
+ }
41
+ }
42
+ async function canonicalDestination(path) {
43
+ try {
44
+ return await realpath(path);
45
+ }
46
+ catch (error) {
47
+ if (error.code !== "ENOENT")
48
+ throw error;
49
+ return join(await canonicalDestination(dirname(path)), basename(path));
50
+ }
51
+ }
52
+ /** Read a build's _markupkit/manifest.json, refusing a format version this MarkupKit doesn't know. */
53
+ export async function readManifest(outDir) {
54
+ const file = join(outDir, "_markupkit/manifest.json");
55
+ const manifest = JSON.parse(await readFile(file, "utf8"));
56
+ if (manifest.version !== 1)
57
+ throw new MarkupKitError(`Unsupported manifest version ${String(manifest.version)}; this MarkupKit reads version 1.`, file);
58
+ // Builds from before redirects or generated files have none.
59
+ return { ...manifest, redirects: manifest.redirects ?? [], files: manifest.files ?? [] };
60
+ }
61
+ /**
62
+ * Write _markupkit/server: entry.js, whose default export answers requests, and the loaders, endpoints,
63
+ * and middleware it imports. Prerendered pages need none of their code there; their files serve them.
64
+ */
65
+ async function writeServer({ root, base, canonicalOrigin, stage, redirects, files, scripts, policy, internals, serverGraphs, components }) {
66
+ const { application } = internals;
67
+ const inputs = {};
68
+ const ids = new Map();
69
+ const module = (file, kind) => {
70
+ let id = ids.get(file);
71
+ if (id === undefined) {
72
+ id = kind === "middleware" ? kind : `${kind}-${ids.size}`;
73
+ ids.set(file, id);
74
+ inputs[id] = file;
75
+ }
76
+ return id;
77
+ };
78
+ // Diagnostics name source files relative to the root, which the server need not have.
79
+ const source = (file) => relative(root, file).replaceAll("\\", "/");
80
+ const path = ({ component: _component, server: _server, layouts: _layouts, ...route }) => route;
81
+ const pages = {};
82
+ let error;
83
+ for (const { route, graph, assets } of serverGraphs) {
84
+ const layers = [...route.layouts, route];
85
+ const page = { definitions: graph.definitions, assets,
86
+ clientModules: graph.components.filter(component => component.client !== undefined).map(component => component.definition.contract.tag),
87
+ providers: Object.fromEntries(graph.components.flatMap(component => component.binding === undefined ? [] : [[component.definition.contract.tag,
88
+ { module: module(component.module, "provider"), source: component.binding.source, ...component.binding.client === undefined ? {} : { client: component.binding.client },
89
+ ...component.binding.readers === undefined ? {} : { readers: component.binding.readers } }]])),
90
+ layers: graph.layers.map((layer, i) => {
91
+ const loader = layers[i].server;
92
+ if (loader !== undefined && typeof loader !== "string")
93
+ throw new MarkupKitError("A server-rendered page's layout loaders must be files, which the build bundles into its server.", route.component);
94
+ return { definition: layer.definition, ...(loader === undefined ? {} : { module: module(loader, "loader") }), origin: source(layer.origin) };
95
+ }) };
96
+ if (route === application.error)
97
+ error = { ...page, route: path(route) };
98
+ else
99
+ pages[application.routes.indexOf(route)] = page;
100
+ }
101
+ const catalog = await internals.catalog();
102
+ const readers = Object.fromEntries(components.flatMap(component => component.server === undefined || component.binding === undefined ? [] : [[component.binding.source, {
103
+ definition: component.definition, common: module(component.module, "provider"), server: module(component.server, "reader"),
104
+ }]]));
105
+ const data = { version: 3, base, canonicalOrigin, redirects, files, scripts, ...(policy === undefined ? {} : { policy }), pages, ...(error === undefined ? {} : { error }),
106
+ readers,
107
+ routes: application.routes.map(path),
108
+ catalog: [...catalog].map(([path, route]) => [path, application.routes.indexOf(route)]),
109
+ endpoints: application.endpoints.map(endpoint => ({ ...endpoint, file: source(endpoint.file), module: module(endpoint.file, "api") })),
110
+ ...(application.middleware === undefined ? {} : { middleware: module(application.middleware, "middleware") }) };
111
+ const directory = join(stage, "_markupkit/server");
112
+ if (ids.size > 0)
113
+ await bundleServer({ root, outDir: directory, inputs });
114
+ await mkdir(directory, { recursive: true });
115
+ await writeFile(join(directory, "entry.js"), "// The build's request server: `markupkit start` serves it, and its default export's fetch answers requests on any runtime.\n" +
116
+ 'import { serverApplication } from "@threadlabs/markupkit/server";\n' +
117
+ `export function create(options) { return serverApplication(import.meta.url, JSON.parse(${JSON.stringify(JSON.stringify(data))}), {\n` +
118
+ Object.keys(inputs).map(id => ` ${JSON.stringify(id)}: () => import(${JSON.stringify(`./${id}.js`)}),\n`).join("") + "}, options); }\nexport default await create();\n");
119
+ }
120
+ export async function buildApplication(input = {}) {
121
+ const options = await withPlugins(input);
122
+ const config = configure(options);
123
+ const root = await realpath(config.root);
124
+ const destination = await canonicalDestination(config.outDir);
125
+ if (within(destination, root) || (await Promise.all(["app", "src", "public", "node_modules", ".git"].map(path => canonicalDestination(join(root, path))))).some(path => within(path, destination))) {
126
+ throw new MarkupKitError("Unsafe output directory through a filesystem alias.", config.outDir);
127
+ }
128
+ if (await exists(config.outDir) && !(await lstat(config.outDir)).isDirectory())
129
+ throw new MarkupKitError("Output must be a directory.", config.outDir);
130
+ if (await exists(config.outDir) && (await readdir(config.outDir)).length > 0 && !await exists(join(config.outDir, "_markupkit/manifest.json"))) {
131
+ throw new MarkupKitError("Refusing to replace nonempty output without a MarkupKit build manifest.", config.outDir);
132
+ }
133
+ await mkdir(dirname(config.outDir), { recursive: true });
134
+ // Before any page is read, so generated pages, data, and assets are part of the build.
135
+ await runHook(options, "buildStart", { command: "build", root: config.root, base: config.base });
136
+ const internals = await createApplicationInternals(options);
137
+ const { application } = internals;
138
+ // Sibling staging keeps rename on the same volume. No failed render or bundle replaces dist.
139
+ let stage;
140
+ try {
141
+ stage = await mkdtemp(join(dirname(config.outDir), ".markupkit-build-"));
142
+ }
143
+ catch (error) {
144
+ await application.close();
145
+ throw error;
146
+ }
147
+ const backup = stage + "-previous";
148
+ try {
149
+ const entries = await application.entries();
150
+ const serverRoutes = application.routes.filter(route => route.render === "server");
151
+ if (entries.length === 0 && serverRoutes.length === 0 && application.endpoints.length === 0)
152
+ throw new MarkupKitError("No pages found in app/pages or registered routes.", config.root);
153
+ await copyPublic(resolve(config.root, "public"), stage);
154
+ if (await exists(join(stage, "_markupkit")))
155
+ throw new MarkupKitError("Public asset collision: _markupkit is reserved for generated assets.");
156
+ if (options.robots !== undefined && options.robots !== false && await exists(join(stage, "robots.txt"))) {
157
+ throw new MarkupKitError("Public asset collision: robots.txt is generated from the robots option.");
158
+ }
159
+ const pages = [];
160
+ const sources = new Map();
161
+ const redirects = [...internals.redirects].map(([from, to]) => ({ from, to, status: 308 }));
162
+ // The not-found page renders like a page, through its layouts, and becomes 404.html.
163
+ let notFoundIndex = -1;
164
+ for (const pathname of application.notFound === undefined ? entries : [...entries, config.base + "404/"]) {
165
+ const page = await application.render(pathname);
166
+ // A loader's redirect() makes the page a redirect page.
167
+ if (page.location !== undefined) {
168
+ redirects.push({ from: page.pathname, to: page.location, status: page.status });
169
+ continue;
170
+ }
171
+ if (page.status === 404) {
172
+ // A page whose loader calls notFound() is left out; a host answers its URL with 404.html.
173
+ if (pathname !== config.base + "404/")
174
+ continue;
175
+ notFoundIndex = pages.length;
176
+ }
177
+ pages.push(page);
178
+ for (const [id, source] of browserSources(page.components, { base: config.base, prefetch: config.prefetch,
179
+ manifest: config.base + "_markupkit/manifest.json" }, `virtual:markupkit/page-${pages.length - 1}`, globalStylesheets(options, config.root)))
180
+ sources.set(id, source);
181
+ for (const [id, css] of stylesheetSources(page.components))
182
+ sources.set(id, css);
183
+ }
184
+ // A server-rendered route's browser bundle follows the pages', one per route rather than per URL.
185
+ const serverGraphs = [];
186
+ // When anything renders on request, app/error.html answers its failures, so the server renders it too.
187
+ const renders = serverRoutes.length > 0 || application.endpoints.length > 0 || application.middleware !== undefined;
188
+ for (const route of renders && application.error !== undefined ? [...serverRoutes, application.error] : serverRoutes) {
189
+ const graph = await internals.graph(route);
190
+ for (const [id, source] of browserSources(graph.components, { base: config.base, prefetch: config.prefetch,
191
+ manifest: config.base + "_markupkit/manifest.json" }, `virtual:markupkit/page-${pages.length + serverGraphs.length}`, globalStylesheets(options, config.root)))
192
+ sources.set(id, source);
193
+ for (const [id, css] of stylesheetSources(graph.components))
194
+ sources.set(id, css);
195
+ serverGraphs.push({ route, graph });
196
+ }
197
+ const browserInputs = await bundleBrowser({ root: config.root, base: config.base, outDir: stage, sources });
198
+ for (const [path, file] of application.files) {
199
+ const target = join(stage, path);
200
+ if (await exists(target))
201
+ throw new MarkupKitError(`Generated file collision at ${path}.`, file);
202
+ await mkdir(dirname(target), { recursive: true });
203
+ await copyFile(file, target);
204
+ }
205
+ const manifest = JSON.parse(await readFile(join(stage, "_markupkit/vite-manifest.json"), "utf8"));
206
+ const bundles = new Map(Object.values(manifest).filter(chunk => chunk.isEntry).map(chunk => [chunk.name, chunk]));
207
+ // A bundle's stylesheets and module, and the shared chunks it imports.
208
+ const bundled = (i, name) => {
209
+ const entry = bundles.get(`page-${i}`);
210
+ if (entry === undefined)
211
+ throw new MarkupKitError(`Missing browser bundle for ${name}.`);
212
+ // Vite's manifest includes CSS from the entry and its shared static imports.
213
+ const styles = new Set();
214
+ const seen = new Set();
215
+ const collect = (chunk) => {
216
+ if (seen.has(chunk))
217
+ return;
218
+ seen.add(chunk);
219
+ for (const css of chunk.css ?? [])
220
+ styles.add(config.base + css);
221
+ for (const id of chunk.imports ?? []) {
222
+ const imported = manifest[id];
223
+ if (imported !== undefined)
224
+ collect(imported);
225
+ }
226
+ };
227
+ collect(entry);
228
+ // Shared chunks, which links on screen may prefetch; the entry holds the page's own content.
229
+ return { entry, chunks: [...seen].filter(chunk => chunk !== entry).map(chunk => config.base + chunk.file),
230
+ assets: { styles: [...styles], modules: [config.base + entry.file] } };
231
+ };
232
+ const delivery = [];
233
+ // sitemap.xml lists each page at its own URL: no alias, redirect, not-found page, or page marked noindex.
234
+ const indexed = [];
235
+ const scripts = await headScripts(options, config.root);
236
+ const policy = await internals.policy();
237
+ let notFoundHTML = notFoundPage(scripts, policy).html;
238
+ for (let i = 0; i < pages.length; i++) {
239
+ const page = pages[i];
240
+ const path = join(stage, decodeURIComponent(page.pathname.slice(config.base.length)), "index.html");
241
+ if (i !== notFoundIndex && await exists(path))
242
+ throw new MarkupKitError(`Public asset collision with route ${page.pathname}.`, path);
243
+ const route = i === notFoundIndex ? application.notFound : matchRoute(application.routes, page.pathname, config.base).route;
244
+ const { entry, chunks, assets } = bundled(i, page.pathname);
245
+ // Served at any missing path, so it has no route, manifest entry, or payload; its asset URLs are absolute.
246
+ if (i === notFoundIndex) {
247
+ notFoundHTML = documentHTML(page.body, page.head, assets);
248
+ continue;
249
+ }
250
+ delivery.push({ pathname: page.pathname, pageName: route.pageName, browserModule: config.base + entry.file, chunks });
251
+ if (route.canonical === undefined && route.aliasOf === undefined && !parseFragment(page.head.html).childNodes.some(node => "tagName" in node && node.tagName === "meta" &&
252
+ node.attrs.some(({ name, value }) => name === "name" && value.toLowerCase() === "robots") &&
253
+ node.attrs.some(({ name, value }) => name === "content" && /\b(?:noindex|none)\b/i.test(value))))
254
+ indexed.push(page.pathname);
255
+ await mkdir(dirname(path), { recursive: true });
256
+ await writeFile(path, documentHTML(page.body, page.head, assets));
257
+ const payload = pagePayload(page, assets);
258
+ if (payload !== undefined) {
259
+ const file = join(stage, decodeURIComponent(payloadPath(config.base, page.pathname).slice(config.base.length)));
260
+ await mkdir(dirname(file), { recursive: true });
261
+ await writeFile(file, JSON.stringify(payload));
262
+ }
263
+ }
264
+ await rm(join(stage, "_markupkit/vite-manifest.json"));
265
+ if (await exists(join(stage, "404.html")))
266
+ throw new MarkupKitError("Public asset collision: 404.html is generated.");
267
+ await writeFile(join(stage, "404.html"), notFoundHTML);
268
+ // Static hosts have no server redirects, so each old URL gets a page that sends readers on.
269
+ for (const { from, to } of redirects) {
270
+ const path = join(stage, decodeURIComponent(from.slice(config.base.length)), "index.html");
271
+ if (await exists(path))
272
+ throw new MarkupKitError(`Redirect collision at ${from}: a public asset or page is already there.`, path);
273
+ await mkdir(dirname(path), { recursive: true });
274
+ await writeFile(path, redirectPage(to, policy).html);
275
+ }
276
+ // Plugins' generated files, which a public sitemap.xml or robots.txt never is, so a plugin may supply sitemap.xml.
277
+ const files = [];
278
+ for (const [pathname, { contents, type }] of application.generated) {
279
+ const target = join(stage, decodeURIComponent(pathname.slice(config.base.length)));
280
+ await mkdir(dirname(target), { recursive: true });
281
+ try {
282
+ await writeFile(target, contents, { flag: "wx" });
283
+ }
284
+ catch (error) {
285
+ if (["EEXIST", "EISDIR"].includes(error.code))
286
+ throw new MarkupKitError(`Generated file collision at ${pathname}: the build already wrote it.`);
287
+ throw error;
288
+ }
289
+ files.push({ pathname, type });
290
+ }
291
+ // A public sitemap.xml is the site's own and stays as it is.
292
+ if (options.origin !== undefined && !await exists(join(stage, "sitemap.xml"))) {
293
+ await writeFile(join(stage, "sitemap.xml"), '<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n' +
294
+ indexed.map(pathname => `<url><loc>${escapeHTML(config.origin + pathname)}</loc></url>\n`).join("") + "</urlset>\n");
295
+ }
296
+ if (options.robots !== undefined && options.robots !== false) {
297
+ const rules = options.robots === true ? "User-agent: *\nAllow: /\n" : options.robots.replace(/\n?$/, "\n");
298
+ const sitemap = options.origin === undefined || /^sitemap:/im.test(rules) ? "" : `Sitemap: ${config.origin}${config.base}sitemap.xml\n`;
299
+ await writeFile(join(stage, "robots.txt"), rules + sitemap);
300
+ }
301
+ await writeServer({ root: config.root, base: config.base, canonicalOrigin: options.origin === undefined ? "" : config.origin, stage, redirects, files, scripts, policy, internals,
302
+ components: [...pages.flatMap(page => page.components), ...serverGraphs.flatMap(({ graph }) => graph.components)], serverGraphs: serverGraphs.map(({ route, graph }, i) => ({ route, graph, assets: bundled(pages.length + i, route.pattern).assets })) });
303
+ const routes = delivery.map(page => page.pathname);
304
+ const published = { version: 1, base: config.base, routes, pages: delivery, redirects, files };
305
+ await writeFile(join(stage, "_markupkit/manifest.json"), JSON.stringify(published, null, 2) + "\n");
306
+ await runHook(options, "buildEnd", { root: config.root, base: config.base, outDir: stage, routes: application.routes, pages: routes,
307
+ async writeFile(path, contents) {
308
+ const target = resolve(stage, path);
309
+ if (isAbsolute(path) || target === stage || !within(stage, target))
310
+ throw new MarkupKitError(`Output path ${path} must be relative and inside the output.`);
311
+ if (within(join(stage, "_markupkit"), target))
312
+ throw new MarkupKitError(`Output path ${path} is in _markupkit, which is reserved for generated assets.`);
313
+ await mkdir(dirname(target), { recursive: true });
314
+ // wx refuses an existing file, so a plugin never replaces a page, an asset, or another plugin's file.
315
+ try {
316
+ await writeFile(target, contents, { flag: "wx" });
317
+ }
318
+ catch (error) {
319
+ if (error.code === "EEXIST")
320
+ throw new MarkupKitError(`Output collision at ${path}: the build already wrote it.`);
321
+ throw error;
322
+ }
323
+ } });
324
+ // After buildEnd, so the files plugins add are link targets too.
325
+ // Server-rendered pages and endpoints answer their paths on request, so links to them are whole.
326
+ await checkLinks(stage, config.origin, config.base, [...routes, ...redirects.map(redirect => redirect.from), config.base + "404.html"], options.linkCheck, pathname => matchRoute(serverRoutes, pathname, config.base) !== undefined || matchRoute(application.endpoints, pathname, config.base) !== undefined);
327
+ const previous = await exists(config.outDir);
328
+ if (previous)
329
+ await rename(config.outDir, backup);
330
+ try {
331
+ await rename(stage, config.outDir);
332
+ }
333
+ catch (error) {
334
+ if (previous)
335
+ await rename(backup, config.outDir);
336
+ throw error;
337
+ }
338
+ if (previous)
339
+ await rm(backup, { recursive: true, force: true });
340
+ return { outDir: config.outDir, routes, browserInputs };
341
+ }
342
+ finally {
343
+ try {
344
+ await application.close();
345
+ }
346
+ finally {
347
+ await rm(stage, { recursive: true, force: true });
348
+ }
349
+ }
350
+ }
351
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bundle-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-worker.d.ts","sourceRoot":"","sources":["../src/bundle-worker.ts"],"names":[],"mappings":""}