@nextwebwg/htmlkit 1.0.0-alpha.60 → 1.0.0-alpha.63

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 (65) hide show
  1. package/README.md +1 -1
  2. package/dist/application.d.ts.map +1 -1
  3. package/dist/application.js +115 -11
  4. package/dist/application.js.map +1 -1
  5. package/dist/browser.d.ts.map +1 -1
  6. package/dist/browser.js +52 -5
  7. package/dist/browser.js.map +1 -1
  8. package/dist/build.d.ts.map +1 -1
  9. package/dist/build.js +16 -6
  10. package/dist/build.js.map +1 -1
  11. package/dist/bundle-worker.js +15 -2
  12. package/dist/bundle-worker.js.map +1 -1
  13. package/dist/bundle.d.ts +9 -1
  14. package/dist/bundle.d.ts.map +1 -1
  15. package/dist/bundle.js +21 -12
  16. package/dist/bundle.js.map +1 -1
  17. package/dist/client.d.ts +8 -2
  18. package/dist/client.d.ts.map +1 -1
  19. package/dist/client.js +53 -8
  20. package/dist/client.js.map +1 -1
  21. package/dist/component-module.d.ts +20 -0
  22. package/dist/component-module.d.ts.map +1 -0
  23. package/dist/component-module.js +82 -0
  24. package/dist/component-module.js.map +1 -0
  25. package/dist/document.d.ts +5 -1
  26. package/dist/document.d.ts.map +1 -1
  27. package/dist/document.js +6 -2
  28. package/dist/document.js.map +1 -1
  29. package/dist/index.d.ts +2 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/private-api.d.ts +12 -0
  33. package/dist/private-api.d.ts.map +1 -0
  34. package/dist/private-api.js +158 -0
  35. package/dist/private-api.js.map +1 -0
  36. package/dist/private-client.d.ts +11 -0
  37. package/dist/private-client.d.ts.map +1 -0
  38. package/dist/private-client.js +18 -0
  39. package/dist/private-client.js.map +1 -0
  40. package/dist/private-readers.d.ts +26 -0
  41. package/dist/private-readers.d.ts.map +1 -0
  42. package/dist/private-readers.js +107 -0
  43. package/dist/private-readers.js.map +1 -0
  44. package/dist/provider-preparation.d.ts +20 -0
  45. package/dist/provider-preparation.d.ts.map +1 -0
  46. package/dist/provider-preparation.js +82 -0
  47. package/dist/provider-preparation.js.map +1 -0
  48. package/dist/providers.d.ts +14 -0
  49. package/dist/providers.d.ts.map +1 -0
  50. package/dist/providers.js +127 -0
  51. package/dist/providers.js.map +1 -0
  52. package/dist/read-channel.d.ts +30 -0
  53. package/dist/read-channel.d.ts.map +1 -0
  54. package/dist/read-channel.js +65 -0
  55. package/dist/read-channel.js.map +1 -0
  56. package/dist/serve.d.ts.map +1 -1
  57. package/dist/serve.js +24 -11
  58. package/dist/serve.js.map +1 -1
  59. package/dist/server.d.ts +35 -2
  60. package/dist/server.d.ts.map +1 -1
  61. package/dist/server.js +88 -21
  62. package/dist/server.js.map +1 -1
  63. package/dist/types.d.ts +19 -0
  64. package/dist/types.d.ts.map +1 -1
  65. package/package.json +3 -2
@@ -31,12 +31,16 @@ export declare function payloadPath(base: string, pathname: string): string;
31
31
  * definitions are in its module. Undefined when JSON cannot carry the state exactly; such a page
32
32
  * navigates by its HTML instead.
33
33
  */
34
- export declare function pagePayload(page: Pick<RenderedPage, "status" | "head" | "layers">, assets: PageAssets): {
34
+ export declare function pagePayload(page: Pick<RenderedPage, "status" | "head" | "layers"> & Partial<Pick<RenderedPage, "body" | "prepared">>, assets: PageAssets): {
35
35
  version: number;
36
36
  head: {
37
37
  lang: string;
38
38
  canonical?: string;
39
39
  };
40
+ rendered?: {
41
+ body: string;
42
+ head: string;
43
+ };
40
44
  styles: readonly string[];
41
45
  modules: readonly string[];
42
46
  layers: readonly import("./types.js").RenderedLayer[];
@@ -1 +1 @@
1
- {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7E;;;GAGG;AACH,eAAO,MAAM,YAAY,6EAAyE,CAAC;AACnG,iGAAiG;AACjG,MAAM,WAAW,UAAU;IAAG,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;AACvG,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AACD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,GAAE,UAAwC,GAAG,MAAM,CASvH;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc;;;;EAKrE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAElE;AAYD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU;;;;;;;;;cAKrG"}
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7E;;;GAGG;AACH,eAAO,MAAM,YAAY,6EAAyE,CAAC;AACnG,iGAAiG;AACjG,MAAM,WAAW,UAAU;IAAG,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;AACvG,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AACD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,GAAE,UAAwC,GAAG,MAAM,CASvH;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc;;;;EAKrE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAElE;AAYD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU;;;;;;;QAOpH,IAAI;QAAc,IAAI;;;;;cAE1D"}
package/dist/document.js CHANGED
@@ -52,10 +52,14 @@ function exact(value, seen) {
52
52
  * navigates by its HTML instead.
53
53
  */
54
54
  export function pagePayload(page, assets) {
55
- if (page.status !== 200 || !page.layers.every(layer => layer.state === undefined || exact(layer.state, new Set())))
55
+ if (page.status !== 200 || !page.layers.every(layer => (layer.state === undefined || exact(layer.state, new Set())) &&
56
+ (layer.props === undefined || exact(layer.props, new Set()))))
56
57
  return undefined;
57
58
  const { lang = "en", canonical } = page.head;
58
- return { version: 1, head: { lang, ...(canonical === undefined ? {} : { canonical }) },
59
+ if (page.prepared && page.body === undefined)
60
+ return undefined;
61
+ return { version: page.prepared ? 2 : 1, head: { lang, ...(canonical === undefined ? {} : { canonical }) },
62
+ ...page.prepared ? { rendered: { body: page.body, head: page.head.html } } : {},
59
63
  styles: assets.styles, modules: assets.modules, layers: page.layers };
60
64
  }
61
65
  //# sourceMappingURL=document.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"document.js","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,8 @@ export { createApplication } from "./application.js";
2
2
  export { buildApplication, readManifest } from "./build.js";
3
3
  export { devApplication, previewApplication } from "./serve.js";
4
4
  export { startApplication } from "./server.js";
5
+ export type { ServerReader, ServerReaders, ServerReadContext } from "./private-readers.js";
6
+ export type { ComponentBindingDefinition, ComponentBindingModule } from "./component-module.js";
5
7
  export { discoverRoutes } from "./routes.js";
6
8
  export { HtmlKitError, loadConfig } from "./config.js";
7
9
  import type { ApplicationOptions } from "./types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAAoB;AACjG,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,4BAA4B,EACjM,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAC/J,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAChL,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,YAAY,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAAoB;AACjG,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,4BAA4B,EACjM,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAC/J,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAChL,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEvD,wEAAwE;AACxE,MAAM,UAAU,YAAY,CAAC,OAA2B,IAAwB,OAAO,OAAO,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEvD,wEAAwE;AACxE,MAAM,UAAU,YAAY,CAAC,OAA2B,IAAwB,OAAO,OAAO,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type ComponentDefinition } from "@nextwebwg/html-next";
2
+ import type { ComponentBindingModule } from "./component-module.js";
3
+ import { type ServerReaders, type ServerReadContext } from "./private-readers.js";
4
+ export interface PrivateReadRegistration {
5
+ readonly definition: ComponentDefinition;
6
+ readonly common: () => Promise<ComponentBindingModule>;
7
+ readonly readers: () => Promise<ServerReaders>;
8
+ }
9
+ export type ReadRequestContext = Omit<ServerReadContext, "sample">;
10
+ /** The existing application pipeline owns methods, origin policy and middleware before this handler. */
11
+ export declare function privateReadResponse(request: Request, base: string, sources: ReadonlyMap<string, PrivateReadRegistration>, context: (url: URL) => ReadRequestContext): Promise<Response>;
12
+ //# sourceMappingURL=private-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"private-api.d.ts","sourceRoot":"","sources":["../src/private-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+E,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC7I,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGpE,OAAO,EAA+B,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAI/G,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;CAChD;AACD,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAmEnE,wGAAwG;AACxG,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,EAC7H,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6C9D"}
@@ -0,0 +1,158 @@
1
+ import { parseTypedValue, parseTypeExpression, selectedPropType, serializePropTarget } from "@nextwebwg/html-next";
2
+ import { moduleDefinition } from "./component-module.js";
3
+ import { bindingsModule } from "./provider-preparation.js";
4
+ import { privateFailure, readPrivate } from "./private-readers.js";
5
+ function failure(status, message, code) {
6
+ return new Response(JSON.stringify({ error: { name: "ReadError", message }, ...code === undefined ? {} : { code } }), { status, headers: { "content-type": "application/json", "cache-control": "no-store" } });
7
+ }
8
+ const invalid = () => { throw new Response("Invalid component inputs.", { status: 400 }); };
9
+ function record(value) {
10
+ if (value === null || typeof value !== "object" || Array.isArray(value))
11
+ return invalid();
12
+ return value;
13
+ }
14
+ /** These are untrusted public inputs, never authorization claims or private producer state. */
15
+ function inputs(definition, input) {
16
+ const frame = record(input);
17
+ const props = record(frame.props);
18
+ const state = record(frame.state);
19
+ if (Object.keys(frame).some(key => key !== "props" && key !== "state"))
20
+ return invalid();
21
+ const values = Object.fromEntries(Object.entries(props).map(([name, value]) => {
22
+ const prop = definition.contract.props[name];
23
+ if (!Object.hasOwn(definition.contract.props, name))
24
+ return invalid();
25
+ return [name, value == null ? prop.default ?? value : value];
26
+ }));
27
+ for (const [name, value] of Object.entries(values)) {
28
+ const prop = definition.contract.props[name];
29
+ const type = selectedPropType(definition.contract, prop, { ...state, ...values });
30
+ if (type === null)
31
+ return invalid();
32
+ if (value != null && !parseTypedValue(value, type, `$${name}`, "value").ok)
33
+ return invalid();
34
+ try {
35
+ serializePropTarget({ ...prop, type }, value, name, definition.contract.tag);
36
+ }
37
+ catch {
38
+ return invalid();
39
+ }
40
+ }
41
+ const declarations = new Map();
42
+ for (const declaration of definition.declarations ?? [])
43
+ if (declaration.kind === "state" || declaration.kind === "computed" || declaration.kind === "context") {
44
+ declarations.set(declaration.kind === "context" ? declaration.as ?? declaration.name : declaration.name, declaration);
45
+ }
46
+ for (const [name, value] of Object.entries(state)) {
47
+ const declaration = declarations.get(name);
48
+ if (declaration === undefined)
49
+ return invalid();
50
+ if (declaration.kind === "state" || declaration.kind === "computed") {
51
+ const type = declaration.shape ?? declaration.type;
52
+ if (type !== undefined && !parseTypedValue(value, typeof type === "string" ? parseTypeExpression(type) : type, `$${name}`, "value").ok)
53
+ return invalid();
54
+ }
55
+ }
56
+ return { props: values, state };
57
+ }
58
+ function selection(frame, definition) {
59
+ const props = Object.create(null);
60
+ const state = Object.create(null);
61
+ for (const name of Object.keys(definition.contract.props))
62
+ Object.defineProperty(props, name, { enumerable: true, get() {
63
+ if (!Object.hasOwn(frame.props, name))
64
+ return invalid();
65
+ return frame.props[name];
66
+ } });
67
+ for (const declaration of definition.declarations ?? [])
68
+ if (["state", "computed", "context"].includes(declaration.kind)) {
69
+ const name = declaration.kind === "context" ? declaration.as ?? declaration.name : declaration.name;
70
+ Object.defineProperty(state, name, { enumerable: true, get() {
71
+ if (!Object.hasOwn(frame.state, name))
72
+ return invalid();
73
+ return frame.state[name];
74
+ } });
75
+ }
76
+ return { props, context: { state } };
77
+ }
78
+ function immediate(value) {
79
+ if (value !== null && (typeof value === "object" || typeof value === "function") && "then" in value && typeof value.then === "function") {
80
+ void Promise.resolve(value).catch(() => { });
81
+ throw new TypeError("A binding selector must return synchronously.");
82
+ }
83
+ return value;
84
+ }
85
+ /** The existing application pipeline owns methods, origin policy and middleware before this handler. */
86
+ export async function privateReadResponse(request, base, sources, context) {
87
+ request.signal.throwIfAborted();
88
+ let packet;
89
+ try {
90
+ packet = record(await request.json());
91
+ }
92
+ catch {
93
+ return failure(400, "Invalid component read packet.");
94
+ }
95
+ if (packet.version !== 1 || Object.keys(packet).some(key => !["version", "source", "tag", "name", "url", "inputs"].includes(key)) ||
96
+ typeof packet.source !== "string" || typeof packet.tag !== "string" || typeof packet.name !== "string" || typeof packet.url !== "string")
97
+ return failure(400, "Invalid component read packet.");
98
+ const registered = sources.get(packet.source);
99
+ if (registered === undefined)
100
+ return failure(409, "Component code changed. Reload this page.", "stale_source");
101
+ if (registered.definition.contract.tag !== packet.tag)
102
+ return failure(404, "Unknown component reader.");
103
+ let url;
104
+ try {
105
+ url = new URL(packet.url, request.url);
106
+ }
107
+ catch {
108
+ return failure(400, "Invalid page URL.");
109
+ }
110
+ if (!/^https?:$/.test(url.protocol) || url.username || url.password || url.host !== new URL(request.url).host || !url.pathname.startsWith(base) || url.pathname.startsWith("//"))
111
+ return failure(400, "Invalid page URL.");
112
+ const codec = await import(bindingsModule);
113
+ let decoded;
114
+ try {
115
+ decoded = codec.decodeHydrationValue(packet.inputs);
116
+ codec.encodeHydrationValue(decoded);
117
+ }
118
+ catch {
119
+ return failure(400, "Invalid component inputs.");
120
+ }
121
+ try {
122
+ const readers = await registered.readers();
123
+ const reader = Object.hasOwn(readers, packet.name) ? readers[packet.name] : undefined;
124
+ if (reader === undefined)
125
+ return failure(404, "Unknown component reader.");
126
+ const frame = inputs(registered.definition, decoded);
127
+ const common = moduleDefinition(await registered.common());
128
+ const provider = common.props?.[packet.name];
129
+ if (provider === undefined || provider === false || typeof provider.input !== "function")
130
+ throw new TypeError("A private reader requires a common input selector.");
131
+ const selected = selection(frame, registered.definition);
132
+ if (provider.when !== undefined && !immediate(provider.when(selected.props, selected.context)))
133
+ return failure(409, "This binding is not active.", "inactive_binding");
134
+ const input = codec.decodeHydrationValue(codec.encodeHydrationValue(immediate(provider.input(selected.props, selected.context))));
135
+ const sample = codec.decodeHydrationValue(codec.encodeHydrationValue(immediate(provider.sample?.(selected.props, selected.context))));
136
+ const operation = { ...context(url), sample };
137
+ operation.signal.throwIfAborted();
138
+ const value = await readPrivate(reader, input, operation);
139
+ operation.signal.throwIfAborted();
140
+ const prop = registered.definition.contract.props[packet.name];
141
+ if (prop === undefined)
142
+ throw new TypeError("Private reader output is not a declared prop.");
143
+ const type = selectedPropType(registered.definition.contract, prop, { ...frame.state, ...frame.props });
144
+ if (type === null)
145
+ throw new TypeError("Private reader output has no selected type.");
146
+ if (value != null && !parseTypedValue(value, type, `$${packet.name}`, "value").ok)
147
+ throw new TypeError("Private reader output does not satisfy its declared type.");
148
+ serializePropTarget({ ...prop, type }, value, packet.name, packet.tag);
149
+ return new Response(JSON.stringify({ value: codec.encodeHydrationValue(value) }), { headers: { "content-type": "application/json", "cache-control": "no-store" } });
150
+ }
151
+ catch (error) {
152
+ if (request.signal.aborted)
153
+ throw request.signal.reason;
154
+ const failure = await privateFailure(error);
155
+ return new Response(JSON.stringify({ error: { name: failure.name, message: failure.message } }), { status: failure.status ?? 500, headers: { "content-type": "application/json", "cache-control": "no-store" } });
156
+ }
157
+ }
158
+ //# sourceMappingURL=private-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"private-api.js","sourceRoot":"","sources":["../src/private-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { BindingOperation } from "@nextwebwg/html-next/bindings";
2
+ import type { ReadCodec } from "./read-channel.js";
3
+ /** Only selectors' typed prerequisites cross the wire; the server selects the actual reader input. */
4
+ export declare function privateReaders(codec: ReadCodec, base: string, source: string, tag: string, names: readonly string[], selectors: Readonly<Record<string, string>>): {
5
+ props: {
6
+ [k: string]: {
7
+ load(_input: unknown, operation: BindingOperation): Promise<unknown>;
8
+ };
9
+ };
10
+ };
11
+ //# sourceMappingURL=private-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"private-client.d.ts","sourceRoot":"","sources":["../src/private-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,sGAAsG;AACtG,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtJ,KAAK;;yBAAmE,OAAO,aAAa,gBAAgB;;;EAYtH"}
@@ -0,0 +1,18 @@
1
+ /** Only selectors' typed prerequisites cross the wire; the server selects the actual reader input. */
2
+ export function privateReaders(codec, base, source, tag, names, selectors) {
3
+ return { props: Object.fromEntries(names.map(name => [name, { async load(_input, operation) {
4
+ if (operation.captureInputs === undefined)
5
+ throw new TypeError("Private readers require the current HTML Next binding library.");
6
+ const frame = operation.captureInputs();
7
+ const discriminators = [...new Set([...Object.keys(frame.props), name].flatMap(name => selectors[name] === undefined ? [] : [selectors[name]]))];
8
+ const inputs = discriminators.length === 0 ? frame : operation.captureInputs(discriminators);
9
+ const response = await fetch(base + "_htmlkit/read", { method: "POST", credentials: "same-origin", signal: operation.signal,
10
+ headers: { "content-type": "application/json" }, cache: "no-store",
11
+ body: JSON.stringify({ version: 1, source, tag, name, url: location.href, inputs: codec.encodeHydrationValue(inputs) }) });
12
+ const result = await response.json();
13
+ if (!response.ok)
14
+ throw Object.assign(new Error(result.error?.message ?? "Could not load component data."), { name: result.error?.name ?? "Error", status: response.status });
15
+ return codec.decodeHydrationValue(result.value);
16
+ } }])) };
17
+ }
18
+ //# sourceMappingURL=private-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"private-client.js","sourceRoot":"","sources":["../src/private-client.ts"],"names":[],"mappings":"AAGA,sGAAsG;AACtG,MAAM,UAAU,cAAc,CAAC,KAAgB,EAAE,IAAY,EAAE,MAAc,EAAE,GAAW,EAAE,KAAwB,EAAE,SAA2C;IAC/J,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,MAAe,EAAE,SAA2B;oBACnH,IAAI,SAAS,CAAC,aAAa,KAAK,SAAS;wBAAE,MAAM,IAAI,SAAS,CAAC,gEAAgE,CAAC,CAAC;oBACjI,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;oBACxC,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClJ,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;oBAC7F,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,GAAG,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM;wBACzH,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,UAAU;wBAClE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC7H,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAqF,CAAC;oBACxH,IAAI,CAAC,QAAQ,CAAC,EAAE;wBAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,gCAAgC,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;oBAC9K,OAAO,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClD,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACX,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { BindingOperation } from "@nextwebwg/html-next/bindings";
2
+ import type { LoadContext, RouteParam } from "./types.js";
3
+ import { type ReadReply } from "./read-channel.js";
4
+ export interface ServerReadContext extends Omit<BindingOperation, "phase" | "captureInputs"> {
5
+ readonly phase: "build" | "request";
6
+ readonly url: URL;
7
+ readonly base: string;
8
+ readonly params: Readonly<Record<string, RouteParam>>;
9
+ readonly request: Request;
10
+ readonly cookies: ReadonlyMap<string, string>;
11
+ }
12
+ export interface ServerReader<I = unknown, V = unknown> {
13
+ readonly load: (input: I, context: ServerReadContext) => V | PromiseLike<V>;
14
+ }
15
+ export type ServerReaders = Readonly<Record<string, ServerReader<any, any>>>;
16
+ /** Private readers are stateless request operations, not browser component constructors or hooks. */
17
+ export declare function serverReaders(module: unknown, origin: string): ServerReaders | undefined;
18
+ /** End the operation on abort even when a reader cannot cancel its external work. */
19
+ export declare function readPrivate(reader: ServerReader, input: unknown, context: ServerReadContext): Promise<unknown>;
20
+ export declare function privateFailure(error: unknown): Promise<NonNullable<ReadReply["error"]>>;
21
+ /** Parent-owned request/services stay outside the DOM worker and never enter structured-clone data. */
22
+ export declare function privateReadBridge(readers: Readonly<Record<string, () => Promise<ServerReaders>>>, context: LoadContext, services: unknown): Promise<{
23
+ port: import("node:worker_threads").MessagePort;
24
+ close: () => void;
25
+ }>;
26
+ //# sourceMappingURL=private-readers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"private-readers.d.ts","sourceRoot":"","sources":["../src/private-readers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1D,OAAO,EAA2C,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE5F,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,eAAe,CAAC;IAC1F,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/C;AACD,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;CAAE;AACvI,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAE7E,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAaxF;AAED,qFAAqF;AACrF,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAWpH;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAO7F;AAED,uGAAuG;AACvG,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO;;iBAO5H,IAAI;GAgCvB"}
@@ -0,0 +1,107 @@
1
+ import { MessageChannel } from "node:worker_threads";
2
+ import { bindingsModule } from "./provider-preparation.js";
3
+ import { sendRead } from "./read-channel.js";
4
+ /** Private readers are stateless request operations, not browser component constructors or hooks. */
5
+ export function serverReaders(module, origin) {
6
+ const namespace = module;
7
+ if (namespace.props === undefined)
8
+ return undefined;
9
+ if (namespace.create !== undefined)
10
+ throw new TypeError(`${origin}: private readers export props with load functions; create belongs in the common or client module.`);
11
+ if (namespace.connect !== undefined || namespace.props === null || typeof namespace.props !== "object" || Array.isArray(namespace.props)) {
12
+ throw new TypeError(`${origin}: private props must contain reader objects and cannot export browser connect.`);
13
+ }
14
+ for (const [name, reader] of Object.entries(namespace.props)) {
15
+ if (reader === null || typeof reader !== "object" || Object.keys(reader).some(key => key !== "load") || typeof reader.load !== "function") {
16
+ throw new TypeError(`${origin}: private reader ${name} supplies load; declare its selector and policy in the common module.`);
17
+ }
18
+ }
19
+ return namespace.props;
20
+ }
21
+ /** End the operation on abort even when a reader cannot cancel its external work. */
22
+ export async function readPrivate(reader, input, context) {
23
+ const { signal } = context;
24
+ signal.throwIfAborted();
25
+ let abort;
26
+ const cancelled = new Promise((_resolve, reject) => {
27
+ abort = () => reject(signal.reason);
28
+ signal.addEventListener("abort", abort, { once: true });
29
+ });
30
+ try {
31
+ return await Promise.race([Promise.resolve().then(() => { signal.throwIfAborted(); return reader.load(input, context); }), cancelled]);
32
+ }
33
+ finally {
34
+ signal.removeEventListener("abort", abort);
35
+ }
36
+ }
37
+ export async function privateFailure(error) {
38
+ if (error instanceof Response && error.status >= 400) {
39
+ try {
40
+ return { name: "HttpError", message: await error.text(), status: error.status };
41
+ }
42
+ catch { /* A consumed or failed response body cannot be made public. */ }
43
+ }
44
+ console.error(error);
45
+ return { name: "Error", message: "Could not load component data.", status: 500 };
46
+ }
47
+ /** Parent-owned request/services stay outside the DOM worker and never enter structured-clone data. */
48
+ export async function privateReadBridge(readers, context, services) {
49
+ context.signal.throwIfAborted();
50
+ const codec = await import(bindingsModule);
51
+ context.signal.throwIfAborted();
52
+ const { port1, port2 } = new MessageChannel();
53
+ const active = new Map();
54
+ let closed = false;
55
+ const close = () => {
56
+ if (closed)
57
+ return;
58
+ closed = true;
59
+ context.signal.removeEventListener("abort", close);
60
+ for (const controller of active.values())
61
+ controller.abort();
62
+ active.clear();
63
+ port1.close();
64
+ };
65
+ context.signal.addEventListener("abort", close, { once: true });
66
+ port1.once("close", close);
67
+ port1.on("message", (message) => {
68
+ if (message.kind === "cancel") {
69
+ active.get(message.id)?.abort();
70
+ active.delete(message.id);
71
+ return;
72
+ }
73
+ if (closed || active.has(message.id))
74
+ return;
75
+ const controller = new AbortController();
76
+ active.set(message.id, controller);
77
+ const reply = (result) => { if (!closed && active.get(message.id) === controller)
78
+ sendRead(port1, { id: message.id, ...result }); };
79
+ void (async () => {
80
+ try {
81
+ const module = await readers[message.tag]?.();
82
+ const reader = module === undefined || !Object.hasOwn(module, message.name) ? undefined : module[message.name];
83
+ if (reader === undefined)
84
+ throw new Error("Unknown private reader.");
85
+ const operation = {
86
+ phase: context.phase === "prerender" ? "build" : "request", url: new URL(context.url), base: context.base, params: context.params,
87
+ signal: controller.signal, sample: codec.decodeHydrationValue(message.sample), services, fetch: context.fetch,
88
+ get request() { return context.request; }, get cookies() { return context.cookies; },
89
+ };
90
+ operation.signal.throwIfAborted();
91
+ const value = await readPrivate(reader, codec.decodeHydrationValue(message.input), operation);
92
+ if (!controller.signal.aborted)
93
+ reply({ value: codec.encodeHydrationValue(value) });
94
+ }
95
+ catch (error) {
96
+ if (!controller.signal.aborted && !closed)
97
+ reply({ error: await privateFailure(error) });
98
+ }
99
+ finally {
100
+ if (active.get(message.id) === controller)
101
+ active.delete(message.id);
102
+ }
103
+ })();
104
+ });
105
+ return { port: port2, close };
106
+ }
107
+ //# sourceMappingURL=private-readers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"private-readers.js","sourceRoot":"","sources":["../src/private-readers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { ServerPreparationContext } from "@nextwebwg/html-next/server";
2
+ export declare const bindingsModule: string;
3
+ export declare const preparationModule: string;
4
+ export interface ProviderModule {
5
+ readonly module: string;
6
+ readonly source: string;
7
+ readonly client?: boolean;
8
+ readonly readers?: readonly string[];
9
+ }
10
+ export interface ProviderPreparationData {
11
+ readonly phase: "build" | "request";
12
+ readonly modules: Readonly<Record<string, ProviderModule>>;
13
+ readonly required?: readonly {
14
+ readonly tag: string;
15
+ readonly selector: string;
16
+ readonly names: readonly string[];
17
+ }[];
18
+ }
19
+ export declare function prepare({ document, host, flush, signal, port, data: input }: ServerPreparationContext): Promise<() => void>;
20
+ //# sourceMappingURL=provider-preparation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-preparation.d.ts","sourceRoot":"","sources":["../src/provider-preparation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAQ5E,eAAO,MAAM,cAAc,QAA+G,CAAC;AAI3I,eAAO,MAAM,iBAAiB,QAAkB,CAAC;AAEjD,MAAM,WAAW,cAAc;IAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;AACrJ,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;CACvH;AAED,wBAAsB,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAoDjI"}
@@ -0,0 +1,82 @@
1
+ import { fileURLToPath, pathToFileURL } from "node:url";
2
+ import { existsSync } from "node:fs";
3
+ import { componentModule } from "./component-module.js";
4
+ import { readChannel } from "./read-channel.js";
5
+ const packaged = fileURLToPath(import.meta.resolve("@nextwebwg/html-next/bindings"));
6
+ const source = packaged.replace(/[/\\]dist[/\\]bindings\.js$/, "/src/bindings.ts");
7
+ export const bindingsModule = pathToFileURL(fileURLToPath(import.meta.url).endsWith(".ts") && existsSync(source) ? source : packaged).href;
8
+ const packagedInputs = fileURLToPath(import.meta.resolve("@nextwebwg/html-next/inputs"));
9
+ const sourceInputs = packagedInputs.replace(/[/\\]dist[/\\]component-inputs\.js$/, "/src/component-inputs.ts");
10
+ const inputsModule = pathToFileURL(fileURLToPath(import.meta.url).endsWith(".ts") && existsSync(sourceInputs) ? sourceInputs : packagedInputs).href;
11
+ export const preparationModule = import.meta.url;
12
+ export async function prepare({ document, host, flush, signal, port, data: input }) {
13
+ const data = input;
14
+ const library = await import(bindingsModule);
15
+ const { componentInputs } = await import(inputsModule);
16
+ const remote = port === undefined ? undefined : readChannel(port, library);
17
+ const modules = new Map(await Promise.all(Object.entries(data.modules).map(async ([tag, descriptor]) => {
18
+ const props = Object.fromEntries((descriptor.readers ?? []).map(name => [name, { load: (input, operation) => {
19
+ if (remote === undefined)
20
+ throw new TypeError("Private reader channel was not supplied.");
21
+ return remote.read(tag, name, input, operation);
22
+ } }]));
23
+ return [tag, { descriptor, binding: library.bindModule(componentModule(await import(descriptor.module), { props }, descriptor.client)) }];
24
+ })));
25
+ const known = new WeakSet();
26
+ const owned = [];
27
+ const dispose = () => { try {
28
+ for (const entry of owned.toReversed())
29
+ entry.scope.dispose();
30
+ }
31
+ finally {
32
+ remote?.close();
33
+ } };
34
+ try {
35
+ for (;;) {
36
+ let found = false;
37
+ for (const root of document.querySelectorAll("[data-component]")) {
38
+ for (const tag of root.getAttribute("data-component").split(/\s+/)) {
39
+ const module = modules.get(tag);
40
+ if (module === undefined)
41
+ continue;
42
+ const instance = host(root, tag);
43
+ if (instance === undefined || known.has(instance.props))
44
+ continue;
45
+ known.add(instance.props);
46
+ const scope = await module.binding.prepare(instance, { phase: data.phase, signal, source: module.descriptor.source });
47
+ owned.push({ host: instance, tag, scope });
48
+ found = true;
49
+ }
50
+ }
51
+ await flush();
52
+ if (!found)
53
+ break;
54
+ }
55
+ for (const input of data.required ?? []) {
56
+ const root = document.querySelector(input.selector);
57
+ const instance = root === null ? undefined : host(root, input.tag);
58
+ const prepared = owned.find(entry => entry.host.props === instance?.props);
59
+ for (const name of input.names)
60
+ if (!prepared?.scope.names.includes(name) && (instance === undefined || !componentInputs(instance).supplied(name))) {
61
+ throw new TypeError(`A required prop \`${name}\` of <${input.tag}> has no caller value or provider.`);
62
+ }
63
+ }
64
+ for (const entry of owned) {
65
+ const root = entry.host.root;
66
+ if (!root.isConnected)
67
+ continue;
68
+ const snapshot = entry.scope.snapshot();
69
+ if (Object.keys(snapshot.reads).length === 0)
70
+ continue;
71
+ const records = JSON.parse(root.getAttribute("data-htmlkit-bindings") ?? "{}");
72
+ records[entry.tag] = snapshot;
73
+ root.setAttribute("data-htmlkit-bindings", JSON.stringify(records));
74
+ }
75
+ return dispose;
76
+ }
77
+ catch (error) {
78
+ dispose();
79
+ throw error;
80
+ }
81
+ }
82
+ //# sourceMappingURL=provider-preparation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-preparation.js","sourceRoot":"","sources":["../src/provider-preparation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { BrowserDefinition } from "./types.js";
2
+ interface ModuleHost {
3
+ readonly cacheDir: string;
4
+ resolve(specifier: string, importer: string): Promise<string | undefined>;
5
+ watch(file: string): void;
6
+ }
7
+ export declare function createProviderModules(root: string, host: ModuleHost): {
8
+ resolve(components: readonly (BrowserDefinition & {
9
+ readonly privateReaderNames?: readonly string[];
10
+ })[]): Promise<readonly BrowserDefinition[]>;
11
+ close(): Promise<void>;
12
+ };
13
+ export {};
14
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAIpD,UAAU,UAAU;IAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AA+BD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IA0B1D,OAAO,aAAa,SAAS,CAAC,iBAAiB,GAAG;QAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC,EAAE,GAAG,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC;IAmCtJ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;EASzB"}