@demiurgejs/core 0.2.0-beta.1 → 0.2.0-beta.2

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 (107) hide show
  1. package/README.md +2 -0
  2. package/dist/adapter/testing.d.ts +33 -0
  3. package/dist/adapter/testing.d.ts.map +1 -0
  4. package/dist/adapter/testing.js +251 -0
  5. package/dist/adapter/testing.js.map +1 -0
  6. package/dist/browser/file-router.d.ts.map +1 -1
  7. package/dist/chunks/document-shell-D1xo6cEA.js +35 -0
  8. package/dist/chunks/document-shell-D1xo6cEA.js.map +1 -0
  9. package/dist/chunks/image-codec-BGTx_t5K.js +141 -0
  10. package/dist/chunks/image-codec-BGTx_t5K.js.map +1 -0
  11. package/dist/chunks/images-B9MqcjSA.js +339 -0
  12. package/dist/chunks/images-B9MqcjSA.js.map +1 -0
  13. package/dist/chunks/request-metadata-D5NrT8ks.js +642 -0
  14. package/dist/chunks/request-metadata-D5NrT8ks.js.map +1 -0
  15. package/dist/chunks/streaming-BQ1bykDo.js +469 -0
  16. package/dist/chunks/streaming-BQ1bykDo.js.map +1 -0
  17. package/dist/chunks/{testing-DBjVCN5v.js → testing-B_iMFYz_.js} +768 -761
  18. package/dist/chunks/testing-B_iMFYz_.js.map +1 -0
  19. package/dist/cli.d.ts.map +1 -1
  20. package/dist/cli.js +63 -54
  21. package/dist/cli.js.map +1 -1
  22. package/dist/document/deferred-scripts.d.ts +11 -0
  23. package/dist/document/deferred-scripts.d.ts.map +1 -0
  24. package/dist/document/index.d.ts +3 -1
  25. package/dist/document/index.d.ts.map +1 -1
  26. package/dist/document/render.d.ts.map +1 -1
  27. package/dist/document/scripts.d.ts +12 -1
  28. package/dist/document/scripts.d.ts.map +1 -1
  29. package/dist/edge/assets.d.ts +14 -0
  30. package/dist/edge/assets.d.ts.map +1 -0
  31. package/dist/edge/index.d.ts +19 -0
  32. package/dist/edge/index.d.ts.map +1 -0
  33. package/dist/edge/index.js +286 -0
  34. package/dist/edge/index.js.map +1 -0
  35. package/dist/edge/stores.d.ts +8 -0
  36. package/dist/edge/stores.d.ts.map +1 -0
  37. package/dist/edge/streaming.d.ts +7 -0
  38. package/dist/edge/streaming.d.ts.map +1 -0
  39. package/dist/index.d.ts +5 -5
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +423 -420
  42. package/dist/index.js.map +1 -1
  43. package/dist/internal/testing.js +9 -9
  44. package/dist/kv/index.d.ts +3 -0
  45. package/dist/kv/index.d.ts.map +1 -0
  46. package/dist/kv/index.js +103 -0
  47. package/dist/kv/index.js.map +1 -0
  48. package/dist/kv/store.d.ts +28 -0
  49. package/dist/kv/store.d.ts.map +1 -0
  50. package/dist/node/font.d.ts +5 -0
  51. package/dist/node/font.d.ts.map +1 -0
  52. package/dist/node/image.d.ts +15 -0
  53. package/dist/node/image.d.ts.map +1 -0
  54. package/dist/node/index.d.ts +4 -0
  55. package/dist/node/index.d.ts.map +1 -1
  56. package/dist/node/index.js +25 -23
  57. package/dist/node/index.js.map +1 -1
  58. package/dist/node/streaming.d.ts.map +1 -1
  59. package/dist/platform/analytics.d.ts +58 -5
  60. package/dist/platform/analytics.d.ts.map +1 -1
  61. package/dist/platform/font-assets.d.ts +19 -0
  62. package/dist/platform/font-assets.d.ts.map +1 -0
  63. package/dist/platform/fonts.d.ts +14 -4
  64. package/dist/platform/fonts.d.ts.map +1 -1
  65. package/dist/platform/image-codec.d.ts +15 -0
  66. package/dist/platform/image-codec.d.ts.map +1 -0
  67. package/dist/platform/image-url.d.ts +17 -0
  68. package/dist/platform/image-url.d.ts.map +1 -0
  69. package/dist/platform/image.d.ts +8 -0
  70. package/dist/platform/image.d.ts.map +1 -0
  71. package/dist/platform/images.d.ts +15 -0
  72. package/dist/platform/images.d.ts.map +1 -1
  73. package/dist/platform/index.d.ts +8 -5
  74. package/dist/platform/index.d.ts.map +1 -1
  75. package/dist/redis/index.d.ts +3 -0
  76. package/dist/redis/index.d.ts.map +1 -0
  77. package/dist/redis/index.js +171 -0
  78. package/dist/redis/index.js.map +1 -0
  79. package/dist/redis/store.d.ts +8 -0
  80. package/dist/redis/store.d.ts.map +1 -0
  81. package/dist/security/index.d.ts +1 -1
  82. package/dist/security/index.d.ts.map +1 -1
  83. package/dist/security/policy.d.ts +2 -27
  84. package/dist/security/policy.d.ts.map +1 -1
  85. package/dist/security/types.d.ts +10 -3
  86. package/dist/security/types.d.ts.map +1 -1
  87. package/dist/security/verification.d.ts.map +1 -1
  88. package/dist/server/document-shell.d.ts +12 -0
  89. package/dist/server/document-shell.d.ts.map +1 -0
  90. package/dist/static/images.d.ts +13 -0
  91. package/dist/static/images.d.ts.map +1 -0
  92. package/dist/static/index.d.ts +8 -0
  93. package/dist/static/index.d.ts.map +1 -1
  94. package/dist/static/index.js +421 -313
  95. package/dist/static/index.js.map +1 -1
  96. package/dist/static/vercel.d.ts +3 -0
  97. package/dist/static/vercel.d.ts.map +1 -1
  98. package/dist/vite/index.js +412 -387
  99. package/dist/vite/index.js.map +1 -1
  100. package/dist/vite/plugin.d.ts +7 -0
  101. package/dist/vite/plugin.d.ts.map +1 -1
  102. package/package.json +34 -3
  103. package/dist/chunks/request-metadata-DwEO1EAS.js +0 -477
  104. package/dist/chunks/request-metadata-DwEO1EAS.js.map +0 -1
  105. package/dist/chunks/streaming-Ci6vf3BB.js +0 -353
  106. package/dist/chunks/streaming-Ci6vf3BB.js.map +0 -1
  107. package/dist/chunks/testing-DBjVCN5v.js.map +0 -1
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAEzC,OAAO,EAGL,KAAK,2BAA2B,EAEhC,KAAK,oBAAoB,EAE1B,MAAM,UAAU,CAAC;AAElB,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAIzD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,KAAK,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,QAAQ,EAAE,CACR,OAAO,EAAE,2BAA2B,KACjC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACnC,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtE,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,aAAa,EAAE,MAAM,OAAO,CAAC;QAC3B,OAAO,CAAC,EAAE,KAAK,CAAC;YACd,GAAG,CAAC,EAAE,OAAO,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;SACd,CAAC,CAAC;QACH,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;QAC1B,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,GAAE,cAAmB,GAC/B,UAAU,CA8CZ;AAED,eAAO,MAAM,QAAQ,gfAWkB,CAAC;AAExC,wBAAsB,eAAe,CACnC,OAAO,EAAE,UAAU,EACnB,OAAO,CAAC,EAAE,kBAAkB;;;;GAwE7B;AAED,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,mBAMhD;AAED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,KAAK,GAAG,MAAM,EACzB,YAAY,EAAE,MAAM,iBAqCrB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM;;;EAmBjD"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAGzC,OAAO,EAGL,KAAK,2BAA2B,EAEhC,KAAK,oBAAoB,EAE1B,MAAM,UAAU,CAAC;AAElB,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAIzD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,KAAK,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,QAAQ,EAAE,CACR,OAAO,EAAE,2BAA2B,KACjC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACnC,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtE,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,aAAa,EAAE,MAAM,OAAO,CAAC;QAC3B,OAAO,CAAC,EAAE,KAAK,CAAC;YACd,GAAG,CAAC,EAAE,OAAO,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;SACd,CAAC,CAAC;QACH,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;QAC1B,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,GAAE,cAAmB,GAC/B,UAAU,CA8CZ;AAED,eAAO,MAAM,QAAQ,gfAWkB,CAAC;AAExC,wBAAsB,eAAe,CACnC,OAAO,EAAE,UAAU,EACnB,OAAO,CAAC,EAAE,kBAAkB;;;;GA2E7B;AAED,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,mBAMhD;AAED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,KAAK,GAAG,MAAM,EACzB,YAAY,EAAE,MAAM,iBAqCrB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM;;;EAmBjD"}
package/dist/cli.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { readFile as b, readdir as E } from "node:fs/promises";
2
- import { resolve as c, relative as p, sep as y, isAbsolute as g } from "node:path";
2
+ import { resolve as c, relative as d, sep as g, isAbsolute as v } from "node:path";
3
3
  import { pathToFileURL as O } from "node:url";
4
4
  import { generateStaticOutput as S, generateVercelStaticOutput as D } from "./static/index.js";
5
5
  const T = /* @__PURE__ */ new Set(["--host", "--origin", "--out-dir", "--port"]);
6
- function k(t, e = {}) {
6
+ function B(t, e = {}) {
7
7
  const r = t[0];
8
8
  if (!r || r === "--help" || r === "-h" || r === "help")
9
9
  return {
@@ -14,7 +14,7 @@ function k(t, e = {}) {
14
14
  };
15
15
  if (r !== "build" && r !== "preview")
16
16
  throw new Error(`Unknown command: ${r}`);
17
- const o = {
17
+ const i = {
18
18
  command: r,
19
19
  host: "localhost",
20
20
  origin: e.SITE_ORIGIN,
@@ -22,22 +22,22 @@ function k(t, e = {}) {
22
22
  port: 4173
23
23
  };
24
24
  for (let n = 1; n < t.length; n += 1) {
25
- const i = t[n], [s, l] = i.split("=", 2);
25
+ const o = t[n], [s, l] = o.split("=", 2);
26
26
  if (!T.has(s))
27
- throw new Error(`Unknown option: ${i}`);
27
+ throw new Error(`Unknown option: ${o}`);
28
28
  const u = l ?? t[++n];
29
29
  if (!u || u.startsWith("--"))
30
30
  throw new Error(`Option ${s} requires a value.`);
31
- if (s === "--host" && (o.host = u), s === "--origin" && (o.origin = u), s === "--out-dir" && (o.outDir = u), s === "--port") {
31
+ if (s === "--host" && (i.host = u), s === "--origin" && (i.origin = u), s === "--out-dir" && (i.outDir = u), s === "--port") {
32
32
  const a = Number(u);
33
33
  if (!Number.isSafeInteger(a) || a < 0 || a > 65535)
34
34
  throw new Error("Preview port must be an integer from 0 through 65535.");
35
- o.port = a;
35
+ i.port = a;
36
36
  }
37
37
  }
38
- return o;
38
+ return i;
39
39
  }
40
- const M = `Usage: demiurge <command> [options]
40
+ const H = `Usage: demiurge <command> [options]
41
41
 
42
42
  Commands:
43
43
  build Build static production output
@@ -49,17 +49,17 @@ Options:
49
49
  --out-dir <directory> Set the output directory (default: dist)
50
50
  --port <port> Set the preview port (default: 4173)
51
51
  -h, --help Show this help`;
52
- async function B(t, e) {
53
- const r = e ? void 0 : await import("vite"), o = e ? await e.resolveConfig() : await r.resolveConfig({}, "build", "production"), n = o.root, i = c(n, t.outDir), s = c(n, ".demiurge/server"), l = e?.build ?? r.build;
52
+ async function W(t, e) {
53
+ const r = e ? void 0 : await import("vite"), i = e ? await e.resolveConfig() : await r.resolveConfig({}, "build", "production"), n = i.root, o = c(n, t.outDir), s = c(n, ".demiurge/server"), l = e?.build ?? r.build;
54
54
  await j(
55
55
  n,
56
- i,
57
- o.publicDir,
56
+ o,
57
+ i.publicDir,
58
58
  s
59
59
  ), await l({
60
60
  build: {
61
61
  emptyOutDir: !0,
62
- outDir: i,
62
+ outDir: o,
63
63
  rollupOptions: { input: "virtual:demiurge/client-entry" }
64
64
  }
65
65
  }), await l({
@@ -75,44 +75,47 @@ async function B(t, e) {
75
75
  }
76
76
  });
77
77
  const u = N(
78
- e ? await e.readText(c(i, "demiurge-manifest.json")) : await b(c(i, "demiurge-manifest.json"), "utf8")
79
- ), a = `${O(c(s, "server-entry.js")).href}?build=${e?.now() ?? Date.now()}`, d = e ? await e.importModule(a) : await import(a);
80
- if (!A(d.routes))
78
+ e ? await e.readText(c(o, "demiurge-manifest.json")) : await b(c(o, "demiurge-manifest.json"), "utf8")
79
+ ), a = `${O(c(s, "server-entry.js")).href}?build=${e?.now() ?? Date.now()}`, f = e ? await e.importModule(a) : await import(a);
80
+ if (!I(f.routes))
81
81
  throw new Error("The framework server bundle does not export routes.");
82
- const f = await (e?.generate ?? S)({
82
+ const h = await (e?.generate ?? S)({
83
+ fonts: A(i.plugins),
84
+ images: F(i.plugins),
83
85
  origin: t.origin,
84
- outDir: i,
85
- routes: d.routes,
86
+ outDir: o,
87
+ root: n,
88
+ routes: f.routes,
86
89
  ssr: u,
87
- staticFileHeaders: P(o.plugins)
88
- }), h = I(o.plugins);
89
- return { deploymentOutDir: h ? await D({
90
- deployment: h,
91
- manifest: f,
92
- outDir: i,
90
+ staticFileHeaders: R(i.plugins)
91
+ }), m = P(i.plugins);
92
+ return { deploymentOutDir: m ? await D({
93
+ deployment: m,
94
+ manifest: h,
95
+ outDir: o,
93
96
  projectRoot: process.cwd()
94
- }) : void 0, manifest: f, outDir: i };
97
+ }) : void 0, manifest: h, outDir: o };
95
98
  }
96
- async function H(t, e) {
99
+ async function G(t, e) {
97
100
  const r = e ? await e() : await (await import("vite")).resolveConfig({}, "serve", "production");
98
101
  return c(r.root, t);
99
102
  }
100
- async function j(t, e, r, o) {
101
- const n = p(t, e);
102
- if (!n || n === ".." || n.startsWith(`..${y}`) || g(n))
103
+ async function j(t, e, r, i) {
104
+ const n = d(t, e);
105
+ if (!n || n === ".." || n.startsWith(`..${g}`) || v(n))
103
106
  throw new Error("The static output directory must be inside the Vite root.");
104
- if (r && m(e, r))
107
+ if (r && w(e, r))
105
108
  throw new Error("The static output directory must not overlap the Vite public directory.");
106
- if (m(e, o))
109
+ if (w(e, i))
107
110
  throw new Error("The static output directory must not overlap the framework server directory.");
108
- let i;
111
+ let o;
109
112
  try {
110
- i = await E(e);
113
+ o = await E(e);
111
114
  } catch (s) {
112
- if (F(s)) return;
115
+ if ($(s)) return;
113
116
  throw s;
114
117
  }
115
- if (i.length && !i.includes("demiurge-manifest.json") && !i.includes("demiurge-static-manifest.json"))
118
+ if (o.length && !o.includes("demiurge-manifest.json") && !o.includes("demiurge-static-manifest.json"))
116
119
  throw new Error(
117
120
  "The static output directory contains files that a Demiurge build did not create."
118
121
  );
@@ -128,37 +131,43 @@ function N(t) {
128
131
  throw new Error("The client build manifest has an unsupported format.");
129
132
  return { clientEntry: e.clientEntry, styles: e.styles };
130
133
  }
131
- function A(t) {
132
- return !t || typeof t != "object" || Array.isArray(t) ? !1 : Object.values(t).every((e) => typeof e == "function");
133
- }
134
134
  function I(t) {
135
- return v(t)?.staticDeployment;
135
+ return !t || typeof t != "object" || Array.isArray(t) ? !1 : Object.values(t).every((e) => typeof e == "function");
136
136
  }
137
137
  function P(t) {
138
- return v(t)?.staticFileHeaders ?? [];
138
+ return p(t)?.staticDeployment;
139
+ }
140
+ function A(t) {
141
+ return p(t)?.fonts;
139
142
  }
140
- function v(t) {
141
- return t?.filter((e) => e.name === "demiurge").map((e) => e.api).find(R);
143
+ function F(t) {
144
+ return p(t)?.images;
142
145
  }
143
146
  function R(t) {
147
+ return p(t)?.staticFileHeaders ?? [];
148
+ }
149
+ function p(t) {
150
+ return t?.filter((e) => e.name === "demiurge").map((e) => e.api).find(C);
151
+ }
152
+ function C(t) {
144
153
  return !!t && t !== null && typeof t == "object" && "demiurge" in t && t.demiurge === !0;
145
154
  }
146
- function m(t, e) {
147
- const r = p(t, e), o = p(e, t);
148
- return w(r) || w(o);
155
+ function w(t, e) {
156
+ const r = d(t, e), i = d(e, t);
157
+ return y(r) || y(i);
149
158
  }
150
- function w(t) {
151
- return !t || t !== ".." && !t.startsWith(`..${y}`) && !g(t);
159
+ function y(t) {
160
+ return !t || t !== ".." && !t.startsWith(`..${g}`) && !v(t);
152
161
  }
153
- function F(t) {
162
+ function $(t) {
154
163
  return t instanceof Error && "code" in t && t.code === "ENOENT";
155
164
  }
156
165
  export {
157
- B as buildStaticSite,
158
- M as helpText,
159
- k as parseCliArguments,
166
+ W as buildStaticSite,
167
+ H as helpText,
168
+ B as parseCliArguments,
160
169
  N as parseClientManifest,
161
- H as resolvePreviewOutputDirectory,
170
+ G as resolvePreviewOutputDirectory,
162
171
  j as validateBuildOutputDirectory
163
172
  };
164
173
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sources":["../src/cli.ts"],"sourcesContent":["import { readFile, readdir } from \"node:fs/promises\";\nimport { isAbsolute, relative, resolve, sep } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { InlineConfig } from \"vite\";\nimport type { RouteImporter } from \"./route\";\nimport {\n generateVercelStaticOutput,\n generateStaticOutput,\n type GenerateStaticOutputOptions,\n type StaticFileHeaderPatternRule,\n type StaticOutputManifest,\n type VercelStaticDeployment,\n} from \"./static\";\n\ntype CliEnvironment = Record<string, string | undefined>;\n\nconst cliOptionNames = new Set([\"--host\", \"--origin\", \"--out-dir\", \"--port\"]);\n\nexport type CliOptions = {\n command: \"build\" | \"help\" | \"preview\";\n host: string;\n origin?: string;\n outDir: string;\n port: number;\n};\n\ntype StaticBuildRuntime = {\n build: (config: InlineConfig) => Promise<unknown>;\n generate: (\n options: GenerateStaticOutputOptions,\n ) => Promise<StaticOutputManifest>;\n importModule: (specifier: string) => Promise<Record<string, unknown>>;\n now: () => number;\n readText: (file: string) => Promise<string>;\n resolveConfig: () => Promise<{\n plugins?: Array<{\n api?: unknown;\n name: string;\n }>;\n publicDir: false | string;\n root: string;\n }>;\n};\n\nexport function parseCliArguments(\n arguments_: string[],\n environment: CliEnvironment = {},\n): CliOptions {\n const command = arguments_[0];\n if (!command || command === \"--help\" || command === \"-h\" || command === \"help\") {\n return {\n command: \"help\",\n host: \"localhost\",\n outDir: \"dist\",\n port: 4173,\n };\n }\n if (command !== \"build\" && command !== \"preview\") {\n throw new Error(`Unknown command: ${command}`);\n }\n\n const options: CliOptions = {\n command,\n host: \"localhost\",\n origin: environment.SITE_ORIGIN,\n outDir: \"dist\",\n port: 4173,\n };\n\n for (let index = 1; index < arguments_.length; index += 1) {\n const argument = arguments_[index]!;\n const [name, inlineValue] = argument.split(\"=\", 2);\n if (!cliOptionNames.has(name!)) {\n throw new Error(`Unknown option: ${argument}`);\n }\n const value = inlineValue ?? arguments_[++index];\n if (!value || value.startsWith(\"--\")) {\n throw new Error(`Option ${name} requires a value.`);\n }\n\n if (name === \"--host\") options.host = value;\n if (name === \"--origin\") options.origin = value;\n if (name === \"--out-dir\") options.outDir = value;\n if (name === \"--port\") {\n const port = Number(value);\n if (!Number.isSafeInteger(port) || port < 0 || port > 65_535) {\n throw new Error(\"Preview port must be an integer from 0 through 65535.\");\n }\n options.port = port;\n }\n }\n\n return options;\n}\n\nexport const helpText = `Usage: demiurge <command> [options]\n\nCommands:\n build Build static production output\n preview Serve static output with its declared headers\n\nOptions:\n --host <host> Set the preview host (default: localhost)\n --origin <origin> Set the build origin (default: SITE_ORIGIN)\n --out-dir <directory> Set the output directory (default: dist)\n --port <port> Set the preview port (default: 4173)\n -h, --help Show this help`;\n\nexport async function buildStaticSite(\n options: CliOptions,\n runtime?: StaticBuildRuntime,\n) {\n const vite = runtime ? undefined : await import(\"vite\");\n const config = runtime\n ? await runtime.resolveConfig()\n : await vite!.resolveConfig({}, \"build\", \"production\");\n const root = config.root;\n const outDir = resolve(root, options.outDir);\n const serverOutDir = resolve(root, \".demiurge/server\");\n const build = runtime?.build ?? vite!.build;\n\n await validateBuildOutputDirectory(\n root,\n outDir,\n config.publicDir,\n serverOutDir,\n );\n\n await build({\n build: {\n emptyOutDir: true,\n outDir,\n rollupOptions: { input: \"virtual:demiurge/client-entry\" },\n },\n });\n await build({\n build: {\n copyPublicDir: false,\n emptyOutDir: true,\n outDir: serverOutDir,\n rollupOptions: {\n input: \"virtual:demiurge/server-entry\",\n output: { entryFileNames: \"server-entry.js\" },\n },\n ssr: true,\n },\n });\n\n const clientManifest = parseClientManifest(\n runtime\n ? await runtime.readText(resolve(outDir, \"demiurge-manifest.json\"))\n : await readFile(resolve(outDir, \"demiurge-manifest.json\"), \"utf8\"),\n );\n const serverEntryUrl = `${\n pathToFileURL(resolve(serverOutDir, \"server-entry.js\")).href\n }?build=${runtime?.now() ?? Date.now()}`;\n const serverEntry = runtime\n ? await runtime.importModule(serverEntryUrl)\n : await import(serverEntryUrl);\n if (!isRouteImporterRecord(serverEntry.routes)) {\n throw new Error(\"The framework server bundle does not export routes.\");\n }\n\n const manifest = await (runtime?.generate ?? generateStaticOutput)({\n origin: options.origin,\n outDir,\n routes: serverEntry.routes,\n ssr: clientManifest,\n staticFileHeaders: findStaticFileHeaderPatterns(config.plugins),\n });\n\n const deployment = findVercelStaticDeployment(config.plugins);\n const deploymentOutDir = deployment\n ? await generateVercelStaticOutput({\n deployment,\n manifest,\n outDir,\n projectRoot: process.cwd(),\n })\n : undefined;\n\n return { deploymentOutDir, manifest, outDir };\n}\n\nexport async function resolvePreviewOutputDirectory(\n outDir: string,\n resolveConfig?: () => Promise<{ root: string }>,\n) {\n const config = resolveConfig\n ? await resolveConfig()\n : await (await import(\"vite\")).resolveConfig({}, \"serve\", \"production\");\n return resolve(config.root, outDir);\n}\n\nexport async function validateBuildOutputDirectory(\n root: string,\n outDir: string,\n publicDir: false | string,\n serverOutDir: string,\n) {\n const pathFromRoot = relative(root, outDir);\n if (\n !pathFromRoot ||\n pathFromRoot === \"..\" ||\n pathFromRoot.startsWith(`..${sep}`) ||\n isAbsolute(pathFromRoot)\n ) {\n throw new Error(\"The static output directory must be inside the Vite root.\");\n }\n\n if (publicDir && pathsOverlap(outDir, publicDir)) {\n throw new Error(\"The static output directory must not overlap the Vite public directory.\");\n }\n\n if (pathsOverlap(outDir, serverOutDir)) {\n throw new Error(\"The static output directory must not overlap the framework server directory.\");\n }\n\n let entries: string[];\n try {\n entries = await readdir(outDir);\n } catch (error) {\n if (isMissingPath(error)) return;\n throw error;\n }\n\n if (\n entries.length &&\n !entries.includes(\"demiurge-manifest.json\") &&\n !entries.includes(\"demiurge-static-manifest.json\")\n ) {\n throw new Error(\n \"The static output directory contains files that a Demiurge build did not create.\",\n );\n }\n}\n\nexport function parseClientManifest(source: string) {\n let value: unknown;\n try {\n value = JSON.parse(source);\n } catch {\n throw new Error(\"The client build manifest is not valid JSON.\");\n }\n if (\n !value ||\n typeof value !== \"object\" ||\n !(\"clientEntry\" in value) ||\n typeof value.clientEntry !== \"string\" ||\n !(\"styles\" in value) ||\n !Array.isArray(value.styles) ||\n !value.styles.every((style) => typeof style === \"string\")\n ) {\n throw new Error(\"The client build manifest has an unsupported format.\");\n }\n return { clientEntry: value.clientEntry, styles: value.styles };\n}\n\nfunction isRouteImporterRecord(\n value: unknown,\n): value is Record<string, RouteImporter> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return false;\n }\n\n return Object.values(value).every((load) => typeof load === \"function\");\n}\n\nfunction findVercelStaticDeployment(\n plugins: ReadonlyArray<{ api?: unknown; name: string }> | undefined,\n): VercelStaticDeployment | undefined {\n return findDemiurgePluginApi(plugins)?.staticDeployment;\n}\n\nfunction findStaticFileHeaderPatterns(\n plugins: ReadonlyArray<{ api?: unknown; name: string }> | undefined,\n): readonly StaticFileHeaderPatternRule[] {\n return findDemiurgePluginApi(plugins)?.staticFileHeaders ?? [];\n}\n\nfunction findDemiurgePluginApi(\n plugins: ReadonlyArray<{ api?: unknown; name: string }> | undefined,\n) {\n return plugins\n ?.filter((plugin) => plugin.name === \"demiurge\")\n .map((plugin) => plugin.api)\n .find(isDemiurgePluginApi);\n}\n\nfunction isDemiurgePluginApi(value: unknown): value is {\n demiurge: true;\n staticDeployment?: VercelStaticDeployment;\n staticFileHeaders?: readonly StaticFileHeaderPatternRule[];\n} {\n return Boolean(value) &&\n value !== null &&\n typeof value === \"object\" &&\n \"demiurge\" in value &&\n value.demiurge === true;\n}\n\nfunction pathsOverlap(left: string, right: string) {\n const fromLeft = relative(left, right);\n const fromRight = relative(right, left);\n return isSameOrChildPath(fromLeft) || isSameOrChildPath(fromRight);\n}\n\nfunction isSameOrChildPath(pathname: string) {\n return !pathname ||\n (pathname !== \"..\" && !pathname.startsWith(`..${sep}`) &&\n !isAbsolute(pathname));\n}\n\nfunction isMissingPath(error: unknown) {\n return error instanceof Error && \"code\" in error && error.code === \"ENOENT\";\n}\n"],"names":["cliOptionNames","parseCliArguments","arguments_","environment","command","options","index","argument","name","inlineValue","value","port","helpText","buildStaticSite","runtime","vite","config","root","outDir","resolve","serverOutDir","build","validateBuildOutputDirectory","clientManifest","parseClientManifest","readFile","serverEntryUrl","pathToFileURL","serverEntry","isRouteImporterRecord","manifest","generateStaticOutput","findStaticFileHeaderPatterns","deployment","findVercelStaticDeployment","generateVercelStaticOutput","resolvePreviewOutputDirectory","resolveConfig","publicDir","pathFromRoot","relative","sep","isAbsolute","pathsOverlap","entries","readdir","error","isMissingPath","source","style","load","plugins","findDemiurgePluginApi","plugin","isDemiurgePluginApi","left","right","fromLeft","fromRight","isSameOrChildPath","pathname"],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sources":["../src/cli.ts"],"sourcesContent":["import { readFile, readdir } from \"node:fs/promises\";\nimport { isAbsolute, relative, resolve, sep } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { InlineConfig } from \"vite\";\nimport type { FontContribution, ImagePolicy } from \"./platform\";\nimport type { RouteImporter } from \"./route\";\nimport {\n generateVercelStaticOutput,\n generateStaticOutput,\n type GenerateStaticOutputOptions,\n type StaticFileHeaderPatternRule,\n type StaticOutputManifest,\n type VercelStaticDeployment,\n} from \"./static\";\n\ntype CliEnvironment = Record<string, string | undefined>;\n\nconst cliOptionNames = new Set([\"--host\", \"--origin\", \"--out-dir\", \"--port\"]);\n\nexport type CliOptions = {\n command: \"build\" | \"help\" | \"preview\";\n host: string;\n origin?: string;\n outDir: string;\n port: number;\n};\n\ntype StaticBuildRuntime = {\n build: (config: InlineConfig) => Promise<unknown>;\n generate: (\n options: GenerateStaticOutputOptions,\n ) => Promise<StaticOutputManifest>;\n importModule: (specifier: string) => Promise<Record<string, unknown>>;\n now: () => number;\n readText: (file: string) => Promise<string>;\n resolveConfig: () => Promise<{\n plugins?: Array<{\n api?: unknown;\n name: string;\n }>;\n publicDir: false | string;\n root: string;\n }>;\n};\n\nexport function parseCliArguments(\n arguments_: string[],\n environment: CliEnvironment = {},\n): CliOptions {\n const command = arguments_[0];\n if (!command || command === \"--help\" || command === \"-h\" || command === \"help\") {\n return {\n command: \"help\",\n host: \"localhost\",\n outDir: \"dist\",\n port: 4173,\n };\n }\n if (command !== \"build\" && command !== \"preview\") {\n throw new Error(`Unknown command: ${command}`);\n }\n\n const options: CliOptions = {\n command,\n host: \"localhost\",\n origin: environment.SITE_ORIGIN,\n outDir: \"dist\",\n port: 4173,\n };\n\n for (let index = 1; index < arguments_.length; index += 1) {\n const argument = arguments_[index]!;\n const [name, inlineValue] = argument.split(\"=\", 2);\n if (!cliOptionNames.has(name!)) {\n throw new Error(`Unknown option: ${argument}`);\n }\n const value = inlineValue ?? arguments_[++index];\n if (!value || value.startsWith(\"--\")) {\n throw new Error(`Option ${name} requires a value.`);\n }\n\n if (name === \"--host\") options.host = value;\n if (name === \"--origin\") options.origin = value;\n if (name === \"--out-dir\") options.outDir = value;\n if (name === \"--port\") {\n const port = Number(value);\n if (!Number.isSafeInteger(port) || port < 0 || port > 65_535) {\n throw new Error(\"Preview port must be an integer from 0 through 65535.\");\n }\n options.port = port;\n }\n }\n\n return options;\n}\n\nexport const helpText = `Usage: demiurge <command> [options]\n\nCommands:\n build Build static production output\n preview Serve static output with its declared headers\n\nOptions:\n --host <host> Set the preview host (default: localhost)\n --origin <origin> Set the build origin (default: SITE_ORIGIN)\n --out-dir <directory> Set the output directory (default: dist)\n --port <port> Set the preview port (default: 4173)\n -h, --help Show this help`;\n\nexport async function buildStaticSite(\n options: CliOptions,\n runtime?: StaticBuildRuntime,\n) {\n const vite = runtime ? undefined : await import(\"vite\");\n const config = runtime\n ? await runtime.resolveConfig()\n : await vite!.resolveConfig({}, \"build\", \"production\");\n const root = config.root;\n const outDir = resolve(root, options.outDir);\n const serverOutDir = resolve(root, \".demiurge/server\");\n const build = runtime?.build ?? vite!.build;\n\n await validateBuildOutputDirectory(\n root,\n outDir,\n config.publicDir,\n serverOutDir,\n );\n\n await build({\n build: {\n emptyOutDir: true,\n outDir,\n rollupOptions: { input: \"virtual:demiurge/client-entry\" },\n },\n });\n await build({\n build: {\n copyPublicDir: false,\n emptyOutDir: true,\n outDir: serverOutDir,\n rollupOptions: {\n input: \"virtual:demiurge/server-entry\",\n output: { entryFileNames: \"server-entry.js\" },\n },\n ssr: true,\n },\n });\n\n const clientManifest = parseClientManifest(\n runtime\n ? await runtime.readText(resolve(outDir, \"demiurge-manifest.json\"))\n : await readFile(resolve(outDir, \"demiurge-manifest.json\"), \"utf8\"),\n );\n const serverEntryUrl = `${\n pathToFileURL(resolve(serverOutDir, \"server-entry.js\")).href\n }?build=${runtime?.now() ?? Date.now()}`;\n const serverEntry = runtime\n ? await runtime.importModule(serverEntryUrl)\n : await import(serverEntryUrl);\n if (!isRouteImporterRecord(serverEntry.routes)) {\n throw new Error(\"The framework server bundle does not export routes.\");\n }\n\n const manifest = await (runtime?.generate ?? generateStaticOutput)({\n fonts: findFontContribution(config.plugins),\n images: findImagePolicy(config.plugins),\n origin: options.origin,\n outDir,\n root,\n routes: serverEntry.routes,\n ssr: clientManifest,\n staticFileHeaders: findStaticFileHeaderPatterns(config.plugins),\n });\n\n const deployment = findVercelStaticDeployment(config.plugins);\n const deploymentOutDir = deployment\n ? await generateVercelStaticOutput({\n deployment,\n manifest,\n outDir,\n projectRoot: process.cwd(),\n })\n : undefined;\n\n return { deploymentOutDir, manifest, outDir };\n}\n\nexport async function resolvePreviewOutputDirectory(\n outDir: string,\n resolveConfig?: () => Promise<{ root: string }>,\n) {\n const config = resolveConfig\n ? await resolveConfig()\n : await (await import(\"vite\")).resolveConfig({}, \"serve\", \"production\");\n return resolve(config.root, outDir);\n}\n\nexport async function validateBuildOutputDirectory(\n root: string,\n outDir: string,\n publicDir: false | string,\n serverOutDir: string,\n) {\n const pathFromRoot = relative(root, outDir);\n if (\n !pathFromRoot ||\n pathFromRoot === \"..\" ||\n pathFromRoot.startsWith(`..${sep}`) ||\n isAbsolute(pathFromRoot)\n ) {\n throw new Error(\"The static output directory must be inside the Vite root.\");\n }\n\n if (publicDir && pathsOverlap(outDir, publicDir)) {\n throw new Error(\"The static output directory must not overlap the Vite public directory.\");\n }\n\n if (pathsOverlap(outDir, serverOutDir)) {\n throw new Error(\"The static output directory must not overlap the framework server directory.\");\n }\n\n let entries: string[];\n try {\n entries = await readdir(outDir);\n } catch (error) {\n if (isMissingPath(error)) return;\n throw error;\n }\n\n if (\n entries.length &&\n !entries.includes(\"demiurge-manifest.json\") &&\n !entries.includes(\"demiurge-static-manifest.json\")\n ) {\n throw new Error(\n \"The static output directory contains files that a Demiurge build did not create.\",\n );\n }\n}\n\nexport function parseClientManifest(source: string) {\n let value: unknown;\n try {\n value = JSON.parse(source);\n } catch {\n throw new Error(\"The client build manifest is not valid JSON.\");\n }\n if (\n !value ||\n typeof value !== \"object\" ||\n !(\"clientEntry\" in value) ||\n typeof value.clientEntry !== \"string\" ||\n !(\"styles\" in value) ||\n !Array.isArray(value.styles) ||\n !value.styles.every((style) => typeof style === \"string\")\n ) {\n throw new Error(\"The client build manifest has an unsupported format.\");\n }\n return { clientEntry: value.clientEntry, styles: value.styles };\n}\n\nfunction isRouteImporterRecord(\n value: unknown,\n): value is Record<string, RouteImporter> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return false;\n }\n\n return Object.values(value).every((load) => typeof load === \"function\");\n}\n\nfunction findVercelStaticDeployment(\n plugins: ReadonlyArray<{ api?: unknown; name: string }> | undefined,\n): VercelStaticDeployment | undefined {\n return findDemiurgePluginApi(plugins)?.staticDeployment;\n}\n\nfunction findFontContribution(\n plugins: ReadonlyArray<{ api?: unknown; name: string }> | undefined,\n): FontContribution | undefined {\n return findDemiurgePluginApi(plugins)?.fonts;\n}\n\nfunction findImagePolicy(\n plugins: ReadonlyArray<{ api?: unknown; name: string }> | undefined,\n): ImagePolicy | undefined {\n return findDemiurgePluginApi(plugins)?.images;\n}\n\nfunction findStaticFileHeaderPatterns(\n plugins: ReadonlyArray<{ api?: unknown; name: string }> | undefined,\n): readonly StaticFileHeaderPatternRule[] {\n return findDemiurgePluginApi(plugins)?.staticFileHeaders ?? [];\n}\n\nfunction findDemiurgePluginApi(\n plugins: ReadonlyArray<{ api?: unknown; name: string }> | undefined,\n) {\n return plugins\n ?.filter((plugin) => plugin.name === \"demiurge\")\n .map((plugin) => plugin.api)\n .find(isDemiurgePluginApi);\n}\n\nfunction isDemiurgePluginApi(value: unknown): value is {\n demiurge: true;\n fonts?: FontContribution;\n images?: ImagePolicy;\n staticDeployment?: VercelStaticDeployment;\n staticFileHeaders?: readonly StaticFileHeaderPatternRule[];\n} {\n return Boolean(value) &&\n value !== null &&\n typeof value === \"object\" &&\n \"demiurge\" in value &&\n value.demiurge === true;\n}\n\nfunction pathsOverlap(left: string, right: string) {\n const fromLeft = relative(left, right);\n const fromRight = relative(right, left);\n return isSameOrChildPath(fromLeft) || isSameOrChildPath(fromRight);\n}\n\nfunction isSameOrChildPath(pathname: string) {\n return !pathname ||\n (pathname !== \"..\" && !pathname.startsWith(`..${sep}`) &&\n !isAbsolute(pathname));\n}\n\nfunction isMissingPath(error: unknown) {\n return error instanceof Error && \"code\" in error && error.code === \"ENOENT\";\n}\n"],"names":["cliOptionNames","parseCliArguments","arguments_","environment","command","options","index","argument","name","inlineValue","value","port","helpText","buildStaticSite","runtime","vite","config","root","outDir","resolve","serverOutDir","build","validateBuildOutputDirectory","clientManifest","parseClientManifest","readFile","serverEntryUrl","pathToFileURL","serverEntry","isRouteImporterRecord","manifest","generateStaticOutput","findFontContribution","findImagePolicy","findStaticFileHeaderPatterns","deployment","findVercelStaticDeployment","generateVercelStaticOutput","resolvePreviewOutputDirectory","resolveConfig","publicDir","pathFromRoot","relative","sep","isAbsolute","pathsOverlap","entries","readdir","error","isMissingPath","source","style","load","plugins","findDemiurgePluginApi","plugin","isDemiurgePluginApi","left","right","fromLeft","fromRight","isSameOrChildPath","pathname"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ScriptStrategy } from "./scripts";
2
+ export declare const DEFERRED_SCRIPT_TYPE = "text/demiurge-script";
3
+ export declare const DEFERRED_SCRIPT_ATTRIBUTE = "data-demiurge-script";
4
+ export declare const DEFERRED_SCRIPT_SRC_ATTRIBUTE = "data-demiurge-script-src";
5
+ export declare const DEFERRED_SCRIPT_TYPE_ATTRIBUTE = "data-demiurge-script-type";
6
+ export declare const DEFERRED_SCRIPT_STARTED_ATTRIBUTE = "data-demiurge-script-started";
7
+ export type DeferredScriptStrategy = "idle" | "worker";
8
+ export declare function isDeferredScriptStrategy(strategy: ScriptStrategy): strategy is DeferredScriptStrategy;
9
+ export declare function startDeferredScripts(target?: Document): void;
10
+ export declare function getScriptWorker(src: string): Worker | undefined;
11
+ //# sourceMappingURL=deferred-scripts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deferred-scripts.d.ts","sourceRoot":"","sources":["../../src/document/deferred-scripts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAMhD,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAC3D,eAAO,MAAM,yBAAyB,yBAAyB,CAAC;AAChE,eAAO,MAAM,6BAA6B,6BAA6B,CAAC;AACxE,eAAO,MAAM,8BAA8B,8BAA8B,CAAC;AAC1E,eAAO,MAAM,iCAAiC,iCAAiC,CAAC;AAehF,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAIvD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,cAAc,GACvB,QAAQ,IAAI,sBAAsB,CAEpC;AAID,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,QAAQ,QA2BrD;AAKD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,sBAE1C"}
@@ -1,13 +1,15 @@
1
1
  export { HYDRATION_DATA_ELEMENT_ID, HYDRATION_FALLBACK_ATTRIBUTE, HYDRATION_ROOT_ATTRIBUTE, readInitialRouteData, serializeInitialRouteData, } from "./hydration";
2
+ export { getScriptWorker, startDeferredScripts, } from "./deferred-scripts";
2
3
  export { defineLinks, modulePreload, preconnect, preload, resolveLinks, } from "./links";
3
4
  export { defineMetadata, link, meta, resolveMetadata, structuredData, } from "./metadata";
4
5
  export { renderDocument, } from "./render";
5
6
  export { defineScripts, Script, resolveScripts, script, } from "./scripts";
6
7
  export { defineOgImage, defineRobots, defineSitemap, renderOgImageResponse, renderOgImageSvg, renderRobots, renderSitemap, } from "./seo";
8
+ export type { DeferredScriptStrategy } from "./deferred-scripts";
7
9
  export type { InitialRouteData } from "./hydration";
8
10
  export type { LinkContribution, PreconnectOptions, PreloadOptions, } from "./links";
9
11
  export type { DocumentMetadataTag, LinkTag, Metadata, MetadataTitle, MetaTag, OpenGraphMetadata, ResolvedMetadata, RobotsMetadata, StructuredDataTag, StructuredDataValue, } from "./metadata";
10
12
  export type { DocumentBody, RenderDocumentOptions, } from "./render";
11
- export type { ScriptContribution, ScriptProps, ScriptStrategy, ScriptTag, } from "./scripts";
13
+ export type { ScriptContribution, ScriptCspNeeds, ScriptProps, ScriptStrategy, ScriptTag, } from "./scripts";
12
14
  export type { OgImage, Robots, RobotsDirective, Sitemap, SitemapAlternate, SitemapChangeFrequency, SitemapEntry, } from "./seo";
13
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/document/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,wBAAwB,EACxB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,aAAa,EACb,UAAU,EACV,OAAO,EACP,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,cAAc,EACd,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,cAAc,GACf,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,aAAa,EACb,MAAM,EACN,cAAc,EACd,MAAM,GACP,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,OAAO,CAAC;AACf,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,mBAAmB,EACnB,OAAO,EACP,QAAQ,EACR,aAAa,EACb,OAAO,EACP,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,YAAY,EACZ,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,SAAS,GACV,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,OAAO,EACP,MAAM,EACN,eAAe,EACf,OAAO,EACP,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,GACb,MAAM,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/document/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,wBAAwB,EACxB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,WAAW,EACX,aAAa,EACb,UAAU,EACV,OAAO,EACP,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,cAAc,EACd,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,cAAc,GACf,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,aAAa,EACb,MAAM,EACN,cAAc,EACd,MAAM,GACP,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,OAAO,CAAC;AACf,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,mBAAmB,EACnB,OAAO,EACP,QAAQ,EACR,aAAa,EACb,OAAO,EACP,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,YAAY,EACZ,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,cAAc,EACd,SAAS,GACV,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,OAAO,EACP,MAAM,EACN,eAAe,EACf,OAAO,EACP,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,GACb,MAAM,OAAO,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/document/render.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,OAAO,EACP,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAE5D,eAAO,MAAM,yBAAyB,kCAAkC,CAAC;AAEzE,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAAG;IAC7E,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,UAS5D;AAED,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,QAAQ,EACR,IAAW,EACX,KAAU,EACV,QAAQ,EACR,KAAK,EACL,OAAY,EACZ,MAAW,EACX,KAAsB,GACvB,EAAE,0BAA0B;;;EAwB5B"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/document/render.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,OAAO,EACP,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAQpB,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAE5D,eAAO,MAAM,yBAAyB,kCAAkC,CAAC;AAEzE,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAAG;IAC7E,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,UAS5D;AAED,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,QAAQ,EACR,IAAW,EACX,KAAU,EACV,QAAQ,EACR,KAAK,EACL,OAAY,EACZ,MAAW,EACX,KAAsB,GACvB,EAAE,0BAA0B;;;EAwB5B"}
@@ -1,15 +1,26 @@
1
1
  import { type ReactNode } from "react";
2
2
  import type { HttpRouteContext, MaybePromise } from "../route";
3
- export type ScriptStrategy = "afterInteractive" | "beforeInteractive" | "module";
3
+ export type ScriptStrategy = "afterInteractive" | "beforeInteractive" | "idle" | "module" | "worker";
4
4
  export declare const scriptPlacement: unique symbol;
5
+ /**
6
+ * Directives a script needs at runtime beyond its own `script-src` entry. A
7
+ * beacon or an API call needs `connect-src`. A tracking pixel needs `img-src`.
8
+ * The build reads these and fails when the effective policy omits a source.
9
+ */
10
+ export type ScriptCspNeeds = {
11
+ connect?: readonly string[];
12
+ img?: readonly string[];
13
+ };
5
14
  export type ScriptTag = {
6
15
  async?: boolean;
16
+ crossOrigin?: "anonymous" | "use-credentials";
7
17
  dataApi?: string;
8
18
  dataDomain?: string;
9
19
  defer?: boolean;
10
20
  id?: string;
11
21
  integrity?: string;
12
22
  kind: "script";
23
+ needs?: ScriptCspNeeds;
13
24
  nonce?: string;
14
25
  purpose?: string;
15
26
  referrerPolicy?: ReferrerPolicy;
@@ -1 +1 @@
1
- {"version":3,"file":"scripts.d.ts","sourceRoot":"","sources":["../../src/document/scripts.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE/D,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,mBAAmB,GACnB,QAAQ,CAAC;AAQb,eAAO,MAAM,eAAe,eAAqC,CAAC;AAElE,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,CAAC,EAAE,QAAQ,GAAG,iBAAiB,CAAC;IACpC,CAAC,eAAe,CAAC,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,SAAS,SAAS,EAAE,GACpB,CAAC,CAAC,OAAO,EAAE,gBAAgB,KAAK,YAAY,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC,CAAC;AAExE,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,SAAS,EACT,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,eAAe,CACvD,GAAG;IACF,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,OAAO,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChE,OAAO,EAAE,MAAM,SAAS,EAAE,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,aAAa,0DAEzB,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,OAAO,GAAE;IACjD,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;CAC3B,GAAG,mBAAmB,CA6C3B;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,CA+BpD;AAuCD,wBAAgB,aAAa,CAAC,YAAY,EAAE,kBAAkB,sBAE7D;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,GAAG;IACrE,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,GAAG,SAAS,CAoBZ;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,SAAS,4GAGpB;AAED,wBAAsB,cAAc,CAClC,aAAa,EAAE,KAAK,CAAC,kBAAkB,GAAG,KAAK,GAAG,SAAS,CAAC,EAC5D,OAAO,EAAE,gBAAgB,wBAkB1B"}
1
+ {"version":3,"file":"scripts.d.ts","sourceRoot":"","sources":["../../src/document/scripts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type EdgeAsset = {
2
+ body: ArrayBuffer | ArrayBufferView | string;
3
+ contentType?: string;
4
+ immutable?: boolean;
5
+ };
6
+ export type EdgeAssetMap = Readonly<Record<string, EdgeAsset>>;
7
+ export type EdgeAssetHandler = (request: Request) => Promise<Response | null>;
8
+ export type EdgeAssetHandlerOptions = {
9
+ assets: EdgeAssetMap;
10
+ immutable?: (fileName: string) => boolean;
11
+ prefix?: string;
12
+ };
13
+ export declare function createEdgeAssetHandler(options: EdgeAssetHandlerOptions): EdgeAssetHandler;
14
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/edge/assets.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,WAAW,GAAG,eAAe,GAAG,MAAM,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AAE9E,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAqCF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,CAyDlB"}
@@ -0,0 +1,19 @@
1
+ import { type RequestCacheStoreOptions, type RequestHandler, type RequestHandlerOptions } from "../server";
2
+ import type { RateLimitStore } from "../security";
3
+ import type { EdgeAssetHandler, EdgeAssetHandlerOptions } from "./assets";
4
+ export { createEdgeAssetHandler } from "./assets";
5
+ export { renderEdgePageResponse, renderEdgeStreamingPageResponse, } from "./streaming";
6
+ export { createUnavailableCacheStore, createUnavailableRateLimitStore, EdgeSharedStoreError, } from "./stores";
7
+ export type { EdgeAsset, EdgeAssetHandler, EdgeAssetHandlerOptions, EdgeAssetMap, } from "./assets";
8
+ export declare const edgeAdapter: import("..").Adapter;
9
+ export declare const EDGE_SHARED_STORE_UNAVAILABLE = "unavailable";
10
+ export type EdgeCacheStoreOption = RequestCacheStoreOptions | typeof EDGE_SHARED_STORE_UNAVAILABLE;
11
+ export type EdgeRateLimitStoreOption = RateLimitStore | typeof EDGE_SHARED_STORE_UNAVAILABLE;
12
+ export type EdgeRequestHandlerOptions = Omit<RequestHandlerOptions, "adapter" | "cacheStore" | "rateLimitStore"> & {
13
+ assets?: EdgeAssetHandler | EdgeAssetHandlerOptions;
14
+ cacheStore: EdgeCacheStoreOption;
15
+ clientIp?: (request: Request) => string | undefined | null;
16
+ rateLimitStore: EdgeRateLimitStoreOption;
17
+ };
18
+ export declare function createEdgeRequestHandler(options: EdgeRequestHandlerOptions): RequestHandler;
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/edge/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC3B,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAO1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EACL,sBAAsB,EACtB,+BAA+B,GAChC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,EAC/B,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,uBAAuB,EACvB,YAAY,GACb,MAAM,UAAU,CAAC;AASlB,eAAO,MAAM,WAAW,sBAOtB,CAAC;AAEH,eAAO,MAAM,6BAA6B,gBAAgB,CAAC;AAE3D,MAAM,MAAM,oBAAoB,GAC5B,wBAAwB,GACxB,OAAO,6BAA6B,CAAC;AAEzC,MAAM,MAAM,wBAAwB,GAChC,cAAc,GACd,OAAO,6BAA6B,CAAC;AAEzC,MAAM,MAAM,yBAAyB,GACjC,IAAI,CAAC,qBAAqB,EAAE,SAAS,GAAG,YAAY,GAAG,gBAAgB,CAAC,GACxE;IACA,MAAM,CAAC,EAAE,gBAAgB,GAAG,uBAAuB,CAAC;IAIpD,UAAU,EAAE,oBAAoB,CAAC;IAIjC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC3D,cAAc,EAAE,wBAAwB,CAAC;CAC1C,CAAC;AAkBJ,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,yBAAyB,GACjC,cAAc,CAkChB"}