@demiurgejs/core 0.2.0-beta.4 → 0.2.0-beta.5

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 (116) hide show
  1. package/README.md +23 -0
  2. package/bin/demiurge.mjs +17 -1
  3. package/dist/adapter/index.d.ts +1 -1
  4. package/dist/adapter/index.d.ts.map +1 -1
  5. package/dist/browser/file-router.d.ts +1 -1
  6. package/dist/chunks/{document-shell-CpJnFtSC.js → document-shell-9GPwtcTt.js} +2 -2
  7. package/dist/chunks/{document-shell-CpJnFtSC.js.map → document-shell-9GPwtcTt.js.map} +1 -1
  8. package/dist/chunks/{image-codec-BmzWnH6W.js → image-codec-Dh1POFhE.js} +2 -2
  9. package/dist/chunks/{image-codec-BmzWnH6W.js.map → image-codec-Dh1POFhE.js.map} +1 -1
  10. package/dist/chunks/{images-BQ80950B.js → images-CG7ZzayG.js} +2 -2
  11. package/dist/chunks/{images-BQ80950B.js.map → images-CG7ZzayG.js.map} +1 -1
  12. package/dist/chunks/{index-BVk9zWbe.js → index-0MNiR_wo.js} +4 -3
  13. package/dist/chunks/{index-BVk9zWbe.js.map → index-0MNiR_wo.js.map} +1 -1
  14. package/dist/chunks/plugin-BZauDxRY.js +2310 -0
  15. package/dist/chunks/plugin-BZauDxRY.js.map +1 -0
  16. package/dist/chunks/streaming-GYIsVTQH.js +560 -0
  17. package/dist/chunks/streaming-GYIsVTQH.js.map +1 -0
  18. package/dist/chunks/testing-CUwGj2ie.js +4751 -0
  19. package/dist/chunks/testing-CUwGj2ie.js.map +1 -0
  20. package/dist/chunks/{vite-DO70kZA6.js → vite-QoqrGl6f.js} +43 -43
  21. package/dist/chunks/vite-QoqrGl6f.js.map +1 -0
  22. package/dist/cli.d.ts +4 -2
  23. package/dist/cli.d.ts.map +1 -1
  24. package/dist/cli.js +224 -98
  25. package/dist/cli.js.map +1 -1
  26. package/dist/config/index.js +2 -2
  27. package/dist/config/types.d.ts +11 -1
  28. package/dist/config/types.d.ts.map +1 -1
  29. package/dist/edge/index.js +3 -3
  30. package/dist/index.d.ts +3 -3
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +161 -139
  33. package/dist/index.js.map +1 -1
  34. package/dist/inspect/command.d.ts +28 -0
  35. package/dist/inspect/command.d.ts.map +1 -0
  36. package/dist/inspect/index.d.ts +9 -0
  37. package/dist/inspect/index.d.ts.map +1 -0
  38. package/dist/inspect/redact.d.ts +35 -0
  39. package/dist/inspect/redact.d.ts.map +1 -0
  40. package/dist/inspect/report.d.ts +24 -0
  41. package/dist/inspect/report.d.ts.map +1 -0
  42. package/dist/inspect/types.d.ts +102 -0
  43. package/dist/inspect/types.d.ts.map +1 -0
  44. package/dist/internal/testing.js +12 -12
  45. package/dist/node/http.d.ts +5 -0
  46. package/dist/node/http.d.ts.map +1 -1
  47. package/dist/node/index.d.ts +1 -1
  48. package/dist/node/index.d.ts.map +1 -1
  49. package/dist/node/index.js +26 -24
  50. package/dist/node/index.js.map +1 -1
  51. package/dist/route/index.d.ts +1 -0
  52. package/dist/route/index.d.ts.map +1 -1
  53. package/dist/route/mutation.d.ts.map +1 -1
  54. package/dist/route/serialization.d.ts +24 -0
  55. package/dist/route/serialization.d.ts.map +1 -0
  56. package/dist/route/webhook.d.ts +6 -1
  57. package/dist/route/webhook.d.ts.map +1 -1
  58. package/dist/router/manifest.d.ts.map +1 -1
  59. package/dist/security/audit.d.ts +2 -1
  60. package/dist/security/audit.d.ts.map +1 -1
  61. package/dist/security/authorization.d.ts +36 -0
  62. package/dist/security/authorization.d.ts.map +1 -0
  63. package/dist/security/csrf.d.ts.map +1 -1
  64. package/dist/security/env-startup.d.ts +0 -2
  65. package/dist/security/env-startup.d.ts.map +1 -1
  66. package/dist/security/env.d.ts +27 -8
  67. package/dist/security/env.d.ts.map +1 -1
  68. package/dist/security/exceptions.d.ts +29 -0
  69. package/dist/security/exceptions.d.ts.map +1 -0
  70. package/dist/security/finding-codes.d.ts +56 -0
  71. package/dist/security/finding-codes.d.ts.map +1 -0
  72. package/dist/security/index.d.ts +5 -2
  73. package/dist/security/index.d.ts.map +1 -1
  74. package/dist/security/policy.d.ts +2 -5
  75. package/dist/security/policy.d.ts.map +1 -1
  76. package/dist/security/report.d.ts +2 -1
  77. package/dist/security/report.d.ts.map +1 -1
  78. package/dist/security/request.d.ts +1 -0
  79. package/dist/security/request.d.ts.map +1 -1
  80. package/dist/security/types.d.ts +138 -5
  81. package/dist/security/types.d.ts.map +1 -1
  82. package/dist/security/upload.d.ts +3 -3
  83. package/dist/security/upload.d.ts.map +1 -1
  84. package/dist/security/verification.d.ts.map +1 -1
  85. package/dist/server/request-handler.d.ts +3 -2
  86. package/dist/server/request-handler.d.ts.map +1 -1
  87. package/dist/server-only/browser.d.ts +2 -0
  88. package/dist/server-only/browser.d.ts.map +1 -0
  89. package/dist/server-only/browser.js +4 -0
  90. package/dist/server-only/browser.js.map +1 -0
  91. package/dist/server-only/index.d.ts +2 -0
  92. package/dist/server-only/index.d.ts.map +1 -0
  93. package/dist/server-only/index.js +2 -0
  94. package/dist/server-only/index.js.map +1 -0
  95. package/dist/static/index.js +4 -4
  96. package/dist/vite/index.d.ts +9 -4
  97. package/dist/vite/index.d.ts.map +1 -1
  98. package/dist/vite/index.js +28 -21
  99. package/dist/vite/plugin.d.ts +18 -2
  100. package/dist/vite/plugin.d.ts.map +1 -1
  101. package/dist/vite/policy-verification.d.ts +33 -2
  102. package/dist/vite/policy-verification.d.ts.map +1 -1
  103. package/dist/vite/route-audit.d.ts +14 -2
  104. package/dist/vite/route-audit.d.ts.map +1 -1
  105. package/dist/vite/server-only-boundary.d.ts +8 -0
  106. package/dist/vite/server-only-boundary.d.ts.map +1 -0
  107. package/package.json +6 -1
  108. package/dist/chunks/env-startup-DOBYWlZD.js +0 -257
  109. package/dist/chunks/env-startup-DOBYWlZD.js.map +0 -1
  110. package/dist/chunks/plugin-BQgMiHxa.js +0 -1827
  111. package/dist/chunks/plugin-BQgMiHxa.js.map +0 -1
  112. package/dist/chunks/streaming-BEbPN7Uk.js +0 -469
  113. package/dist/chunks/streaming-BEbPN7Uk.js.map +0 -1
  114. package/dist/chunks/testing-DueXbMo4.js +0 -4167
  115. package/dist/chunks/testing-DueXbMo4.js.map +0 -1
  116. package/dist/chunks/vite-DO70kZA6.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { i as h } from "./plugin-BQgMiHxa.js";
1
+ import { k as h } from "./plugin-BZauDxRY.js";
2
2
  class v extends Error {
3
3
  constructor(i, t) {
4
4
  super(i, t), this.name = "DemiurgeConfigError";
@@ -12,7 +12,7 @@ const w = [
12
12
  "rendering",
13
13
  "routing",
14
14
  "security",
15
- "unstable_viteConfig",
15
+ "unsafe_unstable_viteConfig",
16
16
  "vite"
17
17
  ], D = {
18
18
  assets: ["fonts", "images"],
@@ -26,20 +26,20 @@ const w = [
26
26
  vite: ["define", "optimizeDeps", "plugins", "resolve"],
27
27
  "vite.resolve": ["alias"]
28
28
  };
29
- function E(e, i) {
29
+ function k(e, i) {
30
30
  const t = { configFile: i };
31
31
  y(t, "", e, "a configuration object");
32
32
  const n = e;
33
33
  b(t, "", n, w);
34
- const o = l(t, n, "routing");
34
+ const o = u(t, n, "routing");
35
35
  o && (f(t, "routing.routesDir", o.routesDir), p(t, "routing.locales", o.locales), j(t, o.typedRoutes));
36
- const r = l(t, n, "rendering");
36
+ const r = u(t, n, "rendering");
37
37
  if (r) {
38
- const s = l(t, r, "document", "rendering.");
38
+ const s = u(t, r, "document", "rendering.");
39
39
  if (s && (f(t, "rendering.document.lang", s.lang), f(t, "rendering.document.title", s.title)), r.styles !== void 0 && r.styles !== !1 && typeof r.styles != "string")
40
40
  throw a(t, "rendering.styles", "false or a string", r.styles);
41
41
  }
42
- const d = l(t, n, "security");
42
+ const d = u(t, n, "security");
43
43
  if (d && d.staticFileHeaders !== void 0 && !Array.isArray(d.staticFileHeaders))
44
44
  throw a(
45
45
  t,
@@ -47,21 +47,21 @@ function E(e, i) {
47
47
  "an array of header rules",
48
48
  d.staticFileHeaders
49
49
  );
50
- const u = l(t, n, "assets");
51
- if (u) {
52
- if (u.fonts !== void 0 && !Array.isArray(u.fonts))
50
+ const l = u(t, n, "assets");
51
+ if (l) {
52
+ if (l.fonts !== void 0 && !Array.isArray(l.fonts))
53
53
  throw a(
54
54
  t,
55
55
  "assets.fonts",
56
56
  "an array of font declarations from defineFonts()",
57
- u.fonts
57
+ l.fonts
58
58
  );
59
- p(t, "assets.images", u.images);
59
+ p(t, "assets.images", l.images);
60
60
  }
61
- const g = l(t, n, "deployment");
61
+ const g = u(t, n, "deployment");
62
62
  if (g) {
63
63
  f(t, "deployment.outDir", g.outDir);
64
- const s = l(t, g, "server", "deployment.");
64
+ const s = u(t, g, "server", "deployment.");
65
65
  if (s) {
66
66
  if (typeof s.entry != "string" || !s.entry)
67
67
  throw a(
@@ -72,7 +72,7 @@ function E(e, i) {
72
72
  );
73
73
  f(t, "deployment.server.outDir", s.outDir);
74
74
  }
75
- const m = l(
75
+ const m = u(
76
76
  t,
77
77
  g,
78
78
  "static",
@@ -91,12 +91,12 @@ function E(e, i) {
91
91
  if (n.devtools !== void 0 && typeof n.devtools != "boolean")
92
92
  throw a(t, "devtools", "a boolean", n.devtools);
93
93
  F(t, n.env);
94
- const c = l(t, n, "vite");
94
+ const c = u(t, n, "vite");
95
95
  if (c) {
96
96
  if (c.plugins !== void 0 && !Array.isArray(c.plugins))
97
97
  throw a(t, "vite.plugins", "an array of Vite plugins", c.plugins);
98
98
  p(t, "vite.define", c.define), p(t, "vite.optimizeDeps", c.optimizeDeps);
99
- const s = l(t, c, "resolve", "vite.");
99
+ const s = u(t, c, "resolve", "vite.");
100
100
  if (s?.alias !== void 0 && !Array.isArray(s.alias) && (typeof s.alias != "object" || s.alias === null))
101
101
  throw a(
102
102
  t,
@@ -105,22 +105,22 @@ function E(e, i) {
105
105
  s.alias
106
106
  );
107
107
  }
108
- if (n.unstable_viteConfig !== void 0 && typeof n.unstable_viteConfig != "function")
108
+ if (n.unsafe_unstable_viteConfig !== void 0 && typeof n.unsafe_unstable_viteConfig != "function")
109
109
  throw a(
110
110
  t,
111
- "unstable_viteConfig",
111
+ "unsafe_unstable_viteConfig",
112
112
  "a function",
113
- n.unstable_viteConfig
113
+ n.unsafe_unstable_viteConfig
114
114
  );
115
115
  return n;
116
116
  }
117
- function l(e, i, t, n = "") {
117
+ function u(e, i, t, n = "") {
118
118
  const o = i[t];
119
119
  if (o === void 0) return;
120
120
  const r = `${n}${t}`;
121
121
  y(e, r, o, "an object");
122
- const d = o, u = D[r];
123
- return u && b(e, r, d, u), d;
122
+ const d = o, l = D[r];
123
+ return l && b(e, r, d, l), d;
124
124
  }
125
125
  function b(e, i, t, n) {
126
126
  for (const o of Object.keys(t))
@@ -173,22 +173,22 @@ function a(e, i, t, n) {
173
173
  ` file: ${e.configFile}`,
174
174
  ` field: ${i || "(the default export)"}`,
175
175
  i ? ` problem: this option must be ${t}` : ` problem: the default export must be ${t}`,
176
- ` received: ${$(n)}`
176
+ ` received: ${_(n)}`
177
177
  ].join(`
178
178
  `)
179
179
  );
180
180
  }
181
- function $(e) {
182
- return e === void 0 ? "undefined" : e === null ? "null" : typeof e == "function" ? "a function" : typeof e == "string" ? JSON.stringify(C(e)) : typeof e == "object" ? Array.isArray(e) ? `an array with ${e.length} items` : `an object with these keys: ${Object.keys(e).join(", ") || "(none)"}` : String(e);
181
+ function _(e) {
182
+ return e === void 0 ? "undefined" : e === null ? "null" : typeof e == "function" ? "a function" : typeof e == "string" ? JSON.stringify($(e)) : typeof e == "object" ? Array.isArray(e) ? `an array with ${e.length} items` : `an object with these keys: ${Object.keys(e).join(", ") || "(none)"}` : String(e);
183
183
  }
184
- function C(e) {
184
+ function $(e) {
185
185
  return e.length > 60 ? `${e.slice(0, 57)}...` : e;
186
186
  }
187
- async function S(e) {
188
- const { config: i } = e, t = await O(e.loadReactPlugin), n = {
187
+ async function E(e) {
188
+ const { config: i } = e, t = await R(e.loadReactPlugin), n = {
189
189
  configFile: !1,
190
190
  plugins: [
191
- h(A(i)),
191
+ h(C(i)),
192
192
  t(),
193
193
  ...i.vite?.plugins ?? []
194
194
  ],
@@ -196,20 +196,20 @@ async function S(e) {
196
196
  ...i.vite?.define ? { define: { ...i.vite.define } } : {},
197
197
  ...i.vite?.optimizeDeps ? { optimizeDeps: i.vite.optimizeDeps } : {},
198
198
  ...i.vite?.resolve?.alias ? { resolve: { alias: i.vite.resolve.alias } } : {}
199
- }, o = e.overrides ? await R(n, e.overrides) : n;
200
- if (!i.unstable_viteConfig) return o;
201
- const r = await i.unstable_viteConfig(o);
199
+ }, o = e.overrides ? await A(n, e.overrides) : n;
200
+ if (!i.unsafe_unstable_viteConfig) return o;
201
+ const r = await i.unsafe_unstable_viteConfig(o);
202
202
  if (!r || typeof r != "object" || Array.isArray(r))
203
203
  throw new v(
204
204
  [
205
- "The unstable_viteConfig callback must return a Vite configuration object.",
205
+ "The unsafe_unstable_viteConfig callback must return a Vite configuration object.",
206
206
  ` file: ${i.configFile}`
207
207
  ].join(`
208
208
  `)
209
209
  );
210
210
  return r;
211
211
  }
212
- function A(e) {
212
+ function C(e) {
213
213
  return {
214
214
  ...e.devtools === void 0 ? {} : { devtools: e.devtools },
215
215
  ...e.rendering?.document ? { document: e.rendering.document } : {},
@@ -228,13 +228,13 @@ function A(e) {
228
228
  ...e.routing?.typedRoutes === void 0 ? {} : { typedRoutes: e.routing.typedRoutes }
229
229
  };
230
230
  }
231
- async function R(e, i) {
231
+ async function A(e, i) {
232
232
  const { mergeConfig: t } = await import("vite");
233
233
  return t(e, i);
234
234
  }
235
- async function O(e) {
235
+ async function R(e) {
236
236
  try {
237
- return await (e ?? _)();
237
+ return await (e ?? O)();
238
238
  } catch (i) {
239
239
  throw new v(
240
240
  [
@@ -247,13 +247,13 @@ async function O(e) {
247
247
  );
248
248
  }
249
249
  }
250
- async function _() {
250
+ async function O() {
251
251
  return (await import("@vitejs/plugin-react")).default;
252
252
  }
253
253
  export {
254
254
  v as D,
255
- S as c,
256
- A as t,
257
- E as v
255
+ E as c,
256
+ C as t,
257
+ k as v
258
258
  };
259
- //# sourceMappingURL=vite-DO70kZA6.js.map
259
+ //# sourceMappingURL=vite-QoqrGl6f.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-QoqrGl6f.js","sources":["../../src/config/validate.ts","../../src/config/vite.ts"],"sourcesContent":["import type { DemiurgeConfig } from \"./types\";\n\nexport class DemiurgeConfigError extends Error {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"DemiurgeConfigError\";\n }\n}\n\nconst CONFIG_KEYS = [\n \"assets\",\n \"deployment\",\n \"devtools\",\n \"env\",\n \"rendering\",\n \"routing\",\n \"security\",\n \"unsafe_unstable_viteConfig\",\n \"vite\",\n] as const;\n\nconst SECTION_KEYS: Record<string, readonly string[]> = {\n assets: [\"fonts\", \"images\"],\n deployment: [\"outDir\", \"server\", \"static\"],\n \"deployment.server\": [\"entry\", \"outDir\"],\n \"deployment.static\": [\"origin\", \"provider\"],\n rendering: [\"document\", \"styles\"],\n \"rendering.document\": [\"lang\", \"title\"],\n routing: [\"locales\", \"routesDir\", \"typedRoutes\"],\n security: [\"staticFileHeaders\"],\n vite: [\"define\", \"optimizeDeps\", \"plugins\", \"resolve\"],\n \"vite.resolve\": [\"alias\"],\n};\n\nexport function validateDemiurgeConfig(\n value: unknown,\n configFile: string,\n): DemiurgeConfig {\n const context = { configFile };\n assertPlainObject(context, \"\", value, \"a configuration object\");\n // TYPE-EVIDENCE: assertPlainObject threw unless the value is a non-array object. The cast reads its keys.\n const config = value as Record<string, unknown>;\n assertKnownKeys(context, \"\", config, CONFIG_KEYS);\n\n const routing = section(context, config, \"routing\");\n if (routing) {\n assertOptionalString(context, \"routing.routesDir\", routing.routesDir);\n assertOptionalObject(context, \"routing.locales\", routing.locales);\n assertTypedRoutes(context, routing.typedRoutes);\n }\n\n const rendering = section(context, config, \"rendering\");\n if (rendering) {\n const document = section(context, rendering, \"document\", \"rendering.\");\n if (document) {\n assertOptionalString(context, \"rendering.document.lang\", document.lang);\n assertOptionalString(context, \"rendering.document.title\", document.title);\n }\n if (\n rendering.styles !== undefined &&\n rendering.styles !== false &&\n typeof rendering.styles !== \"string\"\n ) {\n throw invalid(context, \"rendering.styles\", \"false or a string\", rendering.styles);\n }\n }\n\n const security = section(context, config, \"security\");\n if (security && security.staticFileHeaders !== undefined) {\n if (!Array.isArray(security.staticFileHeaders)) {\n throw invalid(\n context,\n \"security.staticFileHeaders\",\n \"an array of header rules\",\n security.staticFileHeaders,\n );\n }\n }\n\n const assets = section(context, config, \"assets\");\n if (assets) {\n if (assets.fonts !== undefined && !Array.isArray(assets.fonts)) {\n throw invalid(\n context,\n \"assets.fonts\",\n \"an array of font declarations from defineFonts()\",\n assets.fonts,\n );\n }\n assertOptionalObject(context, \"assets.images\", assets.images);\n }\n\n const deployment = section(context, config, \"deployment\");\n if (deployment) {\n assertOptionalString(context, \"deployment.outDir\", deployment.outDir);\n const server = section(context, deployment, \"server\", \"deployment.\");\n if (server) {\n if (typeof server.entry !== \"string\" || !server.entry) {\n throw invalid(\n context,\n \"deployment.server.entry\",\n \"a path to the application server entry\",\n server.entry,\n );\n }\n assertOptionalString(context, \"deployment.server.outDir\", server.outDir);\n }\n const staticDeployment = section(\n context,\n deployment,\n \"static\",\n \"deployment.\",\n );\n if (staticDeployment) {\n assertOptionalString(\n context,\n \"deployment.static.origin\",\n staticDeployment.origin,\n );\n assertOptionalObject(\n context,\n \"deployment.static.provider\",\n staticDeployment.provider,\n );\n }\n }\n\n if (config.devtools !== undefined && typeof config.devtools !== \"boolean\") {\n throw invalid(context, \"devtools\", \"a boolean\", config.devtools);\n }\n\n assertEnvSchema(context, config.env);\n\n const vite = section(context, config, \"vite\");\n if (vite) {\n if (vite.plugins !== undefined && !Array.isArray(vite.plugins)) {\n throw invalid(context, \"vite.plugins\", \"an array of Vite plugins\", vite.plugins);\n }\n assertOptionalObject(context, \"vite.define\", vite.define);\n assertOptionalObject(context, \"vite.optimizeDeps\", vite.optimizeDeps);\n const resolve = section(context, vite, \"resolve\", \"vite.\");\n if (\n resolve?.alias !== undefined &&\n !Array.isArray(resolve.alias) &&\n (typeof resolve.alias !== \"object\" || resolve.alias === null)\n ) {\n throw invalid(\n context,\n \"vite.resolve.alias\",\n \"an object of aliases or an array of alias entries\",\n resolve.alias,\n );\n }\n }\n\n if (\n config.unsafe_unstable_viteConfig !== undefined &&\n typeof config.unsafe_unstable_viteConfig !== \"function\"\n ) {\n throw invalid(\n context,\n \"unsafe_unstable_viteConfig\",\n \"a function\",\n config.unsafe_unstable_viteConfig,\n );\n }\n\n // TYPE-EVIDENCE: each field above matches the declared type or throws. The cast records that result.\n return config as DemiurgeConfig;\n}\n\ntype ValidationContext = {\n configFile: string;\n};\n\nfunction section(\n context: ValidationContext,\n parent: Record<string, unknown>,\n key: string,\n prefix = \"\",\n) {\n const value = parent[key];\n if (value === undefined) return undefined;\n const field = `${prefix}${key}`;\n assertPlainObject(context, field, value, \"an object\");\n // TYPE-EVIDENCE: assertPlainObject threw unless the value is a non-array object. The cast reads its keys.\n const record = value as Record<string, unknown>;\n const known = SECTION_KEYS[field];\n if (known) assertKnownKeys(context, field, record, known);\n return record;\n}\n\nfunction assertKnownKeys(\n context: ValidationContext,\n field: string,\n value: Record<string, unknown>,\n known: readonly string[],\n) {\n for (const key of Object.keys(value)) {\n if (known.includes(key)) continue;\n throw new DemiurgeConfigError(\n [\n \"Demiurge configuration is invalid.\",\n ` file: ${context.configFile}`,\n ` field: ${field ? `${field}.${key}` : key}`,\n \" problem: this option does not exist\",\n ` known options: ${known.join(\", \")}`,\n ].join(\"\\n\"),\n );\n }\n}\n\nfunction assertPlainObject(\n context: ValidationContext,\n field: string,\n value: unknown,\n expected: string,\n) {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw invalid(context, field, expected, value);\n }\n}\n\nfunction assertOptionalString(\n context: ValidationContext,\n field: string,\n value: unknown,\n) {\n if (value !== undefined && typeof value !== \"string\") {\n throw invalid(context, field, \"a string\", value);\n }\n}\n\nfunction assertOptionalObject(\n context: ValidationContext,\n field: string,\n value: unknown,\n) {\n if (value === undefined) return;\n assertPlainObject(context, field, value, \"an object\");\n}\n\nfunction assertTypedRoutes(context: ValidationContext, value: unknown) {\n if (value === undefined || typeof value === \"boolean\") return;\n assertPlainObject(context, \"routing.typedRoutes\", value, \"a boolean or an object\");\n // TYPE-EVIDENCE: assertPlainObject threw unless the value is a non-array object. The cast reads its keys.\n const record = value as Record<string, unknown>;\n assertKnownKeys(context, \"routing.typedRoutes\", record, [\"outputFile\"]);\n assertOptionalString(context, \"routing.typedRoutes.outputFile\", record.outputFile);\n}\n\nfunction assertEnvSchema(context: ValidationContext, value: unknown) {\n if (value === undefined) return;\n assertPlainObject(context, \"env\", value, \"an environment schema\");\n // TYPE-EVIDENCE: assertPlainObject threw unless the value is a non-array object. The cast reads its entries.\n const schema = value as Record<string, unknown>;\n for (const [key, variable] of Object.entries(schema)) {\n if (\n variable &&\n typeof variable === \"object\" &&\n \"parse\" in variable &&\n typeof variable.parse === \"function\"\n ) {\n continue;\n }\n throw invalid(\n context,\n `env.${key}`,\n \"a variable from the env builders, such as env.string()\",\n variable,\n );\n }\n}\n\nfunction invalid(\n context: ValidationContext,\n field: string,\n expected: string,\n value: unknown,\n) {\n return new DemiurgeConfigError(\n [\n \"Demiurge configuration is invalid.\",\n ` file: ${context.configFile}`,\n ` field: ${field || \"(the default export)\"}`,\n field\n ? ` problem: this option must be ${expected}`\n : ` problem: the default export must be ${expected}`,\n ` received: ${describeValue(value)}`,\n ].join(\"\\n\"),\n );\n}\n\nexport function describeValue(value: unknown) {\n if (value === undefined) return \"undefined\";\n if (value === null) return \"null\";\n if (typeof value === \"function\") return \"a function\";\n if (typeof value === \"string\") return JSON.stringify(truncate(value));\n if (typeof value === \"object\") {\n return Array.isArray(value)\n ? `an array with ${value.length} items`\n : `an object with these keys: ${Object.keys(value).join(\", \") || \"(none)\"}`;\n }\n return String(value);\n}\n\nfunction truncate(value: string) {\n return value.length > 60 ? `${value.slice(0, 57)}...` : value;\n}\n","import type { InlineConfig, PluginOption, UserConfig } from \"vite\";\nimport { demiurge, type DemiurgeVitePluginOptions } from \"../vite/plugin\";\nimport type { DemiurgeConfig, ResolvedDemiurgeConfig } from \"./types\";\nimport { DemiurgeConfigError } from \"./validate\";\n\nexport type ReactPluginLoader = () => Promise<(...args: never[]) => PluginOption>;\n\nexport type CreateDemiurgeViteConfigOptions = {\n config: ResolvedDemiurgeConfig;\n loadReactPlugin?: ReactPluginLoader;\n overrides?: InlineConfig;\n};\n\n// The framework generates the Vite configuration from the application\n// configuration. Applications do not author a Vite configuration file.\nexport async function createDemiurgeViteConfig(\n options: CreateDemiurgeViteConfigOptions,\n): Promise<InlineConfig> {\n const { config } = options;\n const react = await loadReactPluginOrFail(options.loadReactPlugin);\n\n const generated: InlineConfig = {\n configFile: false,\n plugins: [\n demiurge(toPluginOptions(config)),\n react(),\n ...(config.vite?.plugins ?? []),\n ],\n root: config.root,\n ...(config.vite?.define ? { define: { ...config.vite.define } } : {}),\n ...(config.vite?.optimizeDeps\n ? { optimizeDeps: config.vite.optimizeDeps }\n : {}),\n ...(config.vite?.resolve?.alias\n ? { resolve: { alias: config.vite.resolve.alias } }\n : {}),\n };\n\n const merged = options.overrides\n ? await mergeViteConfig(generated, options.overrides)\n : generated;\n\n if (!config.unsafe_unstable_viteConfig) return merged;\n\n // TYPE-EVIDENCE: InlineConfig extends UserConfig with command options only. The callback reads the same fields.\n const extended = await config.unsafe_unstable_viteConfig(merged as UserConfig);\n if (!extended || typeof extended !== \"object\" || Array.isArray(extended)) {\n throw new DemiurgeConfigError(\n [\n \"The unsafe_unstable_viteConfig callback must return a Vite configuration object.\",\n ` file: ${config.configFile}`,\n ].join(\"\\n\"),\n );\n }\n\n // TYPE-EVIDENCE: the check above rejected every value that is not a configuration object. The cast records that result.\n return extended as InlineConfig;\n}\n\n// The plugin keeps the flat option shape. The configuration boundaries map\n// onto it here, so the boundaries stay the application-facing contract.\nexport function toPluginOptions(\n config: DemiurgeConfig,\n): DemiurgeVitePluginOptions {\n return {\n ...(config.devtools === undefined ? {} : { devtools: config.devtools }),\n ...(config.rendering?.document\n ? { document: config.rendering.document }\n : {}),\n ...(config.env ? { env: config.env } : {}),\n ...(config.assets?.fonts ? { fonts: config.assets.fonts } : {}),\n ...(config.assets?.images ? { images: config.assets.images } : {}),\n ...(config.routing?.locales ? { locales: config.routing.locales } : {}),\n ...(config.routing?.routesDir\n ? { routesDir: config.routing.routesDir }\n : {}),\n ...(config.deployment?.static?.provider || config.security?.staticFileHeaders\n ? {\n static: {\n ...(config.deployment?.static?.provider\n ? { deployment: config.deployment.static.provider }\n : {}),\n ...(config.security?.staticFileHeaders\n ? { headers: config.security.staticFileHeaders }\n : {}),\n },\n }\n : {}),\n ...(config.rendering?.styles === undefined\n ? {}\n : { styles: config.rendering.styles }),\n ...(config.routing?.typedRoutes === undefined\n ? {}\n : { typedRoutes: config.routing.typedRoutes }),\n };\n}\n\nasync function mergeViteConfig(base: InlineConfig, overrides: InlineConfig) {\n const { mergeConfig } = await import(\"vite\");\n // TYPE-EVIDENCE: mergeConfig returns the merge of two InlineConfig values. The cast restores that type from its Record signature.\n return mergeConfig(base, overrides) as InlineConfig;\n}\n\nasync function loadReactPluginOrFail(loader?: ReactPluginLoader) {\n try {\n return await (loader ?? loadReactPlugin)();\n } catch (error) {\n throw new DemiurgeConfigError(\n [\n \"Demiurge did not find @vitejs/plugin-react.\",\n \" Demiurge generates the Vite configuration and needs the React plugin.\",\n \" Add @vitejs/plugin-react to the development dependencies of the application.\",\n ].join(\"\\n\"),\n { cause: error },\n );\n }\n}\n\nasync function loadReactPlugin(): Promise<(...args: never[]) => PluginOption> {\n const module: { default: (...args: never[]) => PluginOption } = await import(\n \"@vitejs/plugin-react\"\n );\n return module.default;\n}\n"],"names":["DemiurgeConfigError","message","options","CONFIG_KEYS","SECTION_KEYS","validateDemiurgeConfig","value","configFile","context","assertPlainObject","config","assertKnownKeys","routing","section","assertOptionalString","assertOptionalObject","assertTypedRoutes","rendering","document","invalid","security","assets","deployment","server","staticDeployment","assertEnvSchema","vite","resolve","parent","key","prefix","field","record","known","expected","schema","variable","describeValue","truncate","createDemiurgeViteConfig","react","loadReactPluginOrFail","generated","demiurge","toPluginOptions","merged","mergeViteConfig","extended","base","overrides","mergeConfig","loader","loadReactPlugin","error"],"mappings":"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"}
package/dist/cli.d.ts CHANGED
@@ -3,9 +3,11 @@ import type { ResolvedDemiurgeConfig } from "./config/types";
3
3
  import { type GenerateStaticOutputOptions, type StaticOutputManifest } from "./static";
4
4
  export { parseClientManifest } from "./manifest";
5
5
  export type { ClientBuildManifest } from "./manifest";
6
+ export { INSPECT_EXIT_FINDINGS, INSPECT_EXIT_INVALID, INSPECT_EXIT_OK, runInspectCommand, } from "./inspect";
7
+ export type { InspectCommandResult } from "./inspect";
6
8
  type CliEnvironment = Record<string, string | undefined>;
7
9
  export type CliOptions = {
8
- command: "build" | "dev" | "help" | "preview";
10
+ command: "build" | "dev" | "help" | "inspect" | "preview";
9
11
  host: string;
10
12
  origin?: string;
11
13
  outDir?: string;
@@ -26,7 +28,7 @@ export type BuildResult = {
26
28
  serverOutDir?: string;
27
29
  };
28
30
  export declare function parseCliArguments(arguments_: string[], environment?: CliEnvironment): CliOptions;
29
- export declare const helpText = "Usage: demiurge <command> [options]\n\nCommands:\n dev Start the development server\n build Build production output\n preview Serve static output with its declared headers\n\nOptions:\n --host <host> Set the server host (default: localhost)\n --origin <origin> Set the build origin (default: SITE_ORIGIN)\n --out-dir <directory> Set the client output directory (default: dist)\n --port <port> Set the server port (dev: 5173, preview: 4173)\n -h, --help Show this help\n\nDemiurge reads demiurge.config.ts from the project root.";
31
+ export declare const helpText = "Usage: demiurge <command> [options]\n\nCommands:\n dev Start the development server\n build Build production output\n inspect Write the static inspection report as JSON\n preview Serve static output with its declared headers\n\nOptions:\n --host <host> Set the server host (default: localhost)\n --origin <origin> Set the build origin (default: SITE_ORIGIN)\n --out-dir <directory> Set the client output directory (default: dist)\n --port <port> Set the server port (dev: 5173, preview: 4173)\n -h, --help Show this help\n\nThe inspect command writes JSON to standard output and a summary to standard\nerror. It exits with 0 for no error finding, 1 for at least one error finding,\nand 2 for an invalid argument or an unreadable configuration.\n\nDemiurge reads demiurge.config.ts from the project root.";
30
32
  export declare function runDev(options: CliOptions, config: ResolvedDemiurgeConfig): Promise<import("vite").ViteDevServer>;
31
33
  export declare function runBuild(options: CliOptions, config: ResolvedDemiurgeConfig, runtime?: BuildRuntime): Promise<BuildResult>;
32
34
  export declare function resolvePreviewOutputDirectory(root: string, outDir: string | undefined, configuredOutDir?: string): string;
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,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG7D,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EAC1B,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAUzD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,gBAAgB,EAAE,CAAC,SAAS,EAAE,YAAY,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACrE,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;CAC7C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,GAAE,cAAmB,GAC/B,UAAU,CA+CZ;AAED,eAAO,MAAM,QAAQ,2mBAcoC,CAAC;AAE1D,wBAAsB,MAAM,CAC1B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,sBAAsB,yCAc/B;AAED,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC,CAkEtB;AA6ED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,gBAAgB,CAAC,EAAE,MAAM,UAG1B;AAED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,KAAK,GAAG,MAAM,EACzB,YAAY,EAAE,MAAM,iBAqCrB"}
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,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG7D,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EAC1B,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEtD,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAUzD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,gBAAgB,EAAE,CAAC,SAAS,EAAE,YAAY,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACrE,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;CAC7C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,GAAE,cAAmB,GAC/B,UAAU,CAkDZ;AAED,eAAO,MAAM,QAAQ,84BAmBoC,CAAC;AAE1D,wBAAsB,MAAM,CAC1B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,sBAAsB,yCAc/B;AAED,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC,CAkEtB;AA6ED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,gBAAgB,CAAC,EAAE,MAAM,UAG1B;AAED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,KAAK,GAAG,MAAM,EACzB,YAAY,EAAE,MAAM,iBAqCrB"}