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

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 (94) hide show
  1. package/README.md +14 -0
  2. package/bin/demiurge.mjs +6 -0
  3. package/dist/browser/file-router.d.ts +1 -0
  4. package/dist/browser/file-router.d.ts.map +1 -1
  5. package/dist/chunks/{document-shell-9GPwtcTt.js → document-shell-C0aPrkhd.js} +2 -2
  6. package/dist/chunks/{document-shell-9GPwtcTt.js.map → document-shell-C0aPrkhd.js.map} +1 -1
  7. package/dist/chunks/image-CRerJ5BY.js +145 -0
  8. package/dist/chunks/image-CRerJ5BY.js.map +1 -0
  9. package/dist/chunks/{image-codec-Dh1POFhE.js → image-codec-CQ8Cwxwb.js} +2 -2
  10. package/dist/chunks/{image-codec-Dh1POFhE.js.map → image-codec-CQ8Cwxwb.js.map} +1 -1
  11. package/dist/chunks/{images-CG7ZzayG.js → images-QgdmLyQ3.js} +11 -11
  12. package/dist/chunks/{images-CG7ZzayG.js.map → images-QgdmLyQ3.js.map} +1 -1
  13. package/dist/chunks/{index-0MNiR_wo.js → index-LYve1rQp.js} +286 -351
  14. package/dist/chunks/index-LYve1rQp.js.map +1 -0
  15. package/dist/chunks/links-iU22QkCE.js +68 -0
  16. package/dist/chunks/links-iU22QkCE.js.map +1 -0
  17. package/dist/chunks/{plugin-BZauDxRY.js → plugin-bkP6WwrS.js} +13 -12
  18. package/dist/chunks/{plugin-BZauDxRY.js.map → plugin-bkP6WwrS.js.map} +1 -1
  19. package/dist/chunks/runtime-BH519j2t.js +294 -0
  20. package/dist/chunks/runtime-BH519j2t.js.map +1 -0
  21. package/dist/chunks/streaming-BlKlC3nw.js +427 -0
  22. package/dist/chunks/streaming-BlKlC3nw.js.map +1 -0
  23. package/dist/chunks/{testing-CUwGj2ie.js → testing-BEW1nchS.js} +645 -630
  24. package/dist/chunks/testing-BEW1nchS.js.map +1 -0
  25. package/dist/chunks/{vite-QoqrGl6f.js → vite-BADZA8Fl.js} +73 -70
  26. package/dist/chunks/vite-BADZA8Fl.js.map +1 -0
  27. package/dist/cli.d.ts +8 -2
  28. package/dist/cli.d.ts.map +1 -1
  29. package/dist/cli.js +186 -122
  30. package/dist/cli.js.map +1 -1
  31. package/dist/config/index.js +2 -2
  32. package/dist/config/types.d.ts +3 -1
  33. package/dist/config/types.d.ts.map +1 -1
  34. package/dist/config/validate.d.ts.map +1 -1
  35. package/dist/data/cache.d.ts +5 -0
  36. package/dist/data/cache.d.ts.map +1 -1
  37. package/dist/data/index.d.ts +1 -1
  38. package/dist/data/index.d.ts.map +1 -1
  39. package/dist/data/testing.d.ts.map +1 -1
  40. package/dist/data/testing.js +101 -67
  41. package/dist/data/testing.js.map +1 -1
  42. package/dist/data/tiered.d.ts.map +1 -1
  43. package/dist/edge/index.js +27 -26
  44. package/dist/edge/index.js.map +1 -1
  45. package/dist/edge/stores.d.ts.map +1 -1
  46. package/dist/index.d.ts +1 -1
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +910 -891
  49. package/dist/index.js.map +1 -1
  50. package/dist/internal/testing.js +2 -2
  51. package/dist/kv/index.js +7 -6
  52. package/dist/kv/index.js.map +1 -1
  53. package/dist/kv/store.d.ts.map +1 -1
  54. package/dist/node/http.d.ts +2 -0
  55. package/dist/node/http.d.ts.map +1 -1
  56. package/dist/node/index.d.ts +1 -1
  57. package/dist/node/index.d.ts.map +1 -1
  58. package/dist/node/index.js +12 -11
  59. package/dist/node/index.js.map +1 -1
  60. package/dist/node/serve.d.ts +4 -0
  61. package/dist/node/serve.d.ts.map +1 -1
  62. package/dist/redis/index.js +29 -28
  63. package/dist/redis/index.js.map +1 -1
  64. package/dist/redis/store.d.ts.map +1 -1
  65. package/dist/route/serialization.d.ts +4 -4
  66. package/dist/route/serialization.d.ts.map +1 -1
  67. package/dist/static/index.d.ts.map +1 -1
  68. package/dist/static/index.js +255 -255
  69. package/dist/static/index.js.map +1 -1
  70. package/dist/static/testing.d.ts +26 -0
  71. package/dist/static/testing.d.ts.map +1 -0
  72. package/dist/static/testing.js +76 -0
  73. package/dist/static/testing.js.map +1 -0
  74. package/dist/testing/index.d.ts +47 -0
  75. package/dist/testing/index.d.ts.map +1 -0
  76. package/dist/testing/index.js +99 -0
  77. package/dist/testing/index.js.map +1 -0
  78. package/dist/vercel/build.d.ts +31 -0
  79. package/dist/vercel/build.d.ts.map +1 -0
  80. package/dist/vercel/config.d.ts +15 -0
  81. package/dist/vercel/config.d.ts.map +1 -0
  82. package/dist/vercel/index.d.ts +7 -0
  83. package/dist/vercel/index.d.ts.map +1 -0
  84. package/dist/vercel/index.js +11 -0
  85. package/dist/vercel/index.js.map +1 -0
  86. package/dist/vercel/runtime.d.ts +29 -0
  87. package/dist/vercel/runtime.d.ts.map +1 -0
  88. package/dist/vite/index.js +1 -1
  89. package/package.json +13 -1
  90. package/dist/chunks/index-0MNiR_wo.js.map +0 -1
  91. package/dist/chunks/streaming-GYIsVTQH.js +0 -560
  92. package/dist/chunks/streaming-GYIsVTQH.js.map +0 -1
  93. package/dist/chunks/testing-CUwGj2ie.js.map +0 -1
  94. package/dist/chunks/vite-QoqrGl6f.js.map +0 -1
@@ -1,5 +1,5 @@
1
- import { k as h } from "./plugin-BZauDxRY.js";
2
- class v extends Error {
1
+ import { k as b } from "./plugin-bkP6WwrS.js";
2
+ class y extends Error {
3
3
  constructor(i, t) {
4
4
  super(i, t), this.name = "DemiurgeConfigError";
5
5
  }
@@ -17,7 +17,7 @@ const w = [
17
17
  ], D = {
18
18
  assets: ["fonts", "images"],
19
19
  deployment: ["outDir", "server", "static"],
20
- "deployment.server": ["entry", "outDir"],
20
+ "deployment.server": ["entry", "outDir", "provider"],
21
21
  "deployment.static": ["origin", "provider"],
22
22
  rendering: ["document", "styles"],
23
23
  "rendering.document": ["lang", "title"],
@@ -28,57 +28,57 @@ const w = [
28
28
  };
29
29
  function k(e, i) {
30
30
  const t = { configFile: i };
31
- y(t, "", e, "a configuration object");
31
+ g(t, "", e, "a configuration object");
32
32
  const n = e;
33
- b(t, "", n, w);
34
- const o = u(t, n, "routing");
35
- o && (f(t, "routing.routesDir", o.routesDir), p(t, "routing.locales", o.locales), j(t, o.typedRoutes));
36
- const r = u(t, n, "rendering");
37
- if (r) {
38
- const s = u(t, r, "document", "rendering.");
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
- throw a(t, "rendering.styles", "false or a string", r.styles);
33
+ h(t, "", n, w);
34
+ const r = u(t, n, "routing");
35
+ r && (f(t, "routing.routesDir", r.routesDir), p(t, "routing.locales", r.locales), j(t, r.typedRoutes));
36
+ const s = u(t, n, "rendering");
37
+ if (s) {
38
+ const o = u(t, s, "document", "rendering.");
39
+ if (o && (f(t, "rendering.document.lang", o.lang), f(t, "rendering.document.title", o.title)), s.styles !== void 0 && s.styles !== !1 && typeof s.styles != "string")
40
+ throw a(t, "rendering.styles", "false or a string", s.styles);
41
41
  }
42
- const d = u(t, n, "security");
43
- if (d && d.staticFileHeaders !== void 0 && !Array.isArray(d.staticFileHeaders))
42
+ const l = u(t, n, "security");
43
+ if (l && l.staticFileHeaders !== void 0 && !Array.isArray(l.staticFileHeaders))
44
44
  throw a(
45
45
  t,
46
46
  "security.staticFileHeaders",
47
47
  "an array of header rules",
48
- d.staticFileHeaders
48
+ l.staticFileHeaders
49
49
  );
50
- const l = u(t, n, "assets");
51
- if (l) {
52
- if (l.fonts !== void 0 && !Array.isArray(l.fonts))
50
+ const d = u(t, n, "assets");
51
+ if (d) {
52
+ if (d.fonts !== void 0 && !Array.isArray(d.fonts))
53
53
  throw a(
54
54
  t,
55
55
  "assets.fonts",
56
56
  "an array of font declarations from defineFonts()",
57
- l.fonts
57
+ d.fonts
58
58
  );
59
- p(t, "assets.images", l.images);
59
+ p(t, "assets.images", d.images);
60
60
  }
61
- const g = u(t, n, "deployment");
62
- if (g) {
63
- f(t, "deployment.outDir", g.outDir);
64
- const s = u(t, g, "server", "deployment.");
65
- if (s) {
66
- if (typeof s.entry != "string" || !s.entry)
61
+ const v = u(t, n, "deployment");
62
+ if (v) {
63
+ f(t, "deployment.outDir", v.outDir);
64
+ const o = u(t, v, "server", "deployment.");
65
+ if (o) {
66
+ if (o.entry !== void 0 && (typeof o.entry != "string" || !o.entry))
67
67
  throw a(
68
68
  t,
69
69
  "deployment.server.entry",
70
70
  "a path to the application server entry",
71
- s.entry
71
+ o.entry
72
72
  );
73
- f(t, "deployment.server.outDir", s.outDir);
73
+ f(t, "deployment.server.outDir", o.outDir), p(t, "deployment.server.provider", o.provider);
74
74
  }
75
75
  const m = u(
76
76
  t,
77
- g,
77
+ v,
78
78
  "static",
79
79
  "deployment."
80
80
  );
81
- m && (f(
81
+ if (m && (f(
82
82
  t,
83
83
  "deployment.static.origin",
84
84
  m.origin
@@ -86,23 +86,26 @@ function k(e, i) {
86
86
  t,
87
87
  "deployment.static.provider",
88
88
  m.provider
89
- ));
89
+ )), o?.provider !== void 0 && m !== void 0)
90
+ throw new y(
91
+ `${i} config field "deployment" cannot declare both a runtime provider and static output.`
92
+ );
90
93
  }
91
94
  if (n.devtools !== void 0 && typeof n.devtools != "boolean")
92
95
  throw a(t, "devtools", "a boolean", n.devtools);
93
- F(t, n.env);
96
+ _(t, n.env);
94
97
  const c = u(t, n, "vite");
95
98
  if (c) {
96
99
  if (c.plugins !== void 0 && !Array.isArray(c.plugins))
97
100
  throw a(t, "vite.plugins", "an array of Vite plugins", c.plugins);
98
101
  p(t, "vite.define", c.define), p(t, "vite.optimizeDeps", c.optimizeDeps);
99
- const s = u(t, c, "resolve", "vite.");
100
- if (s?.alias !== void 0 && !Array.isArray(s.alias) && (typeof s.alias != "object" || s.alias === null))
102
+ const o = u(t, c, "resolve", "vite.");
103
+ if (o?.alias !== void 0 && !Array.isArray(o.alias) && (typeof o.alias != "object" || o.alias === null))
101
104
  throw a(
102
105
  t,
103
106
  "vite.resolve.alias",
104
107
  "an object of aliases or an array of alias entries",
105
- s.alias
108
+ o.alias
106
109
  );
107
110
  }
108
111
  if (n.unsafe_unstable_viteConfig !== void 0 && typeof n.unsafe_unstable_viteConfig != "function")
@@ -115,28 +118,28 @@ function k(e, i) {
115
118
  return n;
116
119
  }
117
120
  function u(e, i, t, n = "") {
118
- const o = i[t];
119
- if (o === void 0) return;
120
- const r = `${n}${t}`;
121
- y(e, r, o, "an object");
122
- const d = o, l = D[r];
123
- return l && b(e, r, d, l), d;
121
+ const r = i[t];
122
+ if (r === void 0) return;
123
+ const s = `${n}${t}`;
124
+ g(e, s, r, "an object");
125
+ const l = r, d = D[s];
126
+ return d && h(e, s, l, d), l;
124
127
  }
125
- function b(e, i, t, n) {
126
- for (const o of Object.keys(t))
127
- if (!n.includes(o))
128
- throw new v(
128
+ function h(e, i, t, n) {
129
+ for (const r of Object.keys(t))
130
+ if (!n.includes(r))
131
+ throw new y(
129
132
  [
130
133
  "Demiurge configuration is invalid.",
131
134
  ` file: ${e.configFile}`,
132
- ` field: ${i ? `${i}.${o}` : o}`,
135
+ ` field: ${i ? `${i}.${r}` : r}`,
133
136
  " problem: this option does not exist",
134
137
  ` known options: ${n.join(", ")}`
135
138
  ].join(`
136
139
  `)
137
140
  );
138
141
  }
139
- function y(e, i, t, n) {
142
+ function g(e, i, t, n) {
140
143
  if (!t || typeof t != "object" || Array.isArray(t))
141
144
  throw a(e, i, n, t);
142
145
  }
@@ -145,50 +148,50 @@ function f(e, i, t) {
145
148
  throw a(e, i, "a string", t);
146
149
  }
147
150
  function p(e, i, t) {
148
- t !== void 0 && y(e, i, t, "an object");
151
+ t !== void 0 && g(e, i, t, "an object");
149
152
  }
150
153
  function j(e, i) {
151
154
  if (i === void 0 || typeof i == "boolean") return;
152
- y(e, "routing.typedRoutes", i, "a boolean or an object");
155
+ g(e, "routing.typedRoutes", i, "a boolean or an object");
153
156
  const t = i;
154
- b(e, "routing.typedRoutes", t, ["outputFile"]), f(e, "routing.typedRoutes.outputFile", t.outputFile);
157
+ h(e, "routing.typedRoutes", t, ["outputFile"]), f(e, "routing.typedRoutes.outputFile", t.outputFile);
155
158
  }
156
- function F(e, i) {
159
+ function _(e, i) {
157
160
  if (i === void 0) return;
158
- y(e, "env", i, "an environment schema");
161
+ g(e, "env", i, "an environment schema");
159
162
  const t = i;
160
- for (const [n, o] of Object.entries(t))
161
- if (!(o && typeof o == "object" && "parse" in o && typeof o.parse == "function"))
163
+ for (const [n, r] of Object.entries(t))
164
+ if (!(r && typeof r == "object" && "parse" in r && typeof r.parse == "function"))
162
165
  throw a(
163
166
  e,
164
167
  `env.${n}`,
165
168
  "a variable from the env builders, such as env.string()",
166
- o
169
+ r
167
170
  );
168
171
  }
169
172
  function a(e, i, t, n) {
170
- return new v(
173
+ return new y(
171
174
  [
172
175
  "Demiurge configuration is invalid.",
173
176
  ` file: ${e.configFile}`,
174
177
  ` field: ${i || "(the default export)"}`,
175
178
  i ? ` problem: this option must be ${t}` : ` problem: the default export must be ${t}`,
176
- ` received: ${_(n)}`
179
+ ` received: ${$(n)}`
177
180
  ].join(`
178
181
  `)
179
182
  );
180
183
  }
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
- }
184
184
  function $(e) {
185
+ return e === void 0 ? "undefined" : e === null ? "null" : typeof e == "function" ? "a function" : typeof e == "string" ? JSON.stringify(F(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);
186
+ }
187
+ function F(e) {
185
188
  return e.length > 60 ? `${e.slice(0, 57)}...` : e;
186
189
  }
187
190
  async function E(e) {
188
191
  const { config: i } = e, t = await R(e.loadReactPlugin), n = {
189
192
  configFile: !1,
190
193
  plugins: [
191
- h(C(i)),
194
+ b(C(i)),
192
195
  t(),
193
196
  ...i.vite?.plugins ?? []
194
197
  ],
@@ -196,18 +199,18 @@ async function E(e) {
196
199
  ...i.vite?.define ? { define: { ...i.vite.define } } : {},
197
200
  ...i.vite?.optimizeDeps ? { optimizeDeps: i.vite.optimizeDeps } : {},
198
201
  ...i.vite?.resolve?.alias ? { resolve: { alias: i.vite.resolve.alias } } : {}
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
- if (!r || typeof r != "object" || Array.isArray(r))
203
- throw new v(
202
+ }, r = e.overrides ? await A(n, e.overrides) : n;
203
+ if (!i.unsafe_unstable_viteConfig) return r;
204
+ const s = await i.unsafe_unstable_viteConfig(r);
205
+ if (!s || typeof s != "object" || Array.isArray(s))
206
+ throw new y(
204
207
  [
205
208
  "The unsafe_unstable_viteConfig callback must return a Vite configuration object.",
206
209
  ` file: ${i.configFile}`
207
210
  ].join(`
208
211
  `)
209
212
  );
210
- return r;
213
+ return s;
211
214
  }
212
215
  function C(e) {
213
216
  return {
@@ -236,7 +239,7 @@ async function R(e) {
236
239
  try {
237
240
  return await (e ?? O)();
238
241
  } catch (i) {
239
- throw new v(
242
+ throw new y(
240
243
  [
241
244
  "Demiurge did not find @vitejs/plugin-react.",
242
245
  " Demiurge generates the Vite configuration and needs the React plugin.",
@@ -251,9 +254,9 @@ async function O() {
251
254
  return (await import("@vitejs/plugin-react")).default;
252
255
  }
253
256
  export {
254
- v as D,
257
+ y as D,
255
258
  E as c,
256
259
  C as t,
257
260
  k as v
258
261
  };
259
- //# sourceMappingURL=vite-QoqrGl6f.js.map
262
+ //# sourceMappingURL=vite-BADZA8Fl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-BADZA8Fl.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\", \"provider\"],\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 (\n server.entry !== undefined &&\n (typeof server.entry !== \"string\" || !server.entry)\n ) {\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 assertOptionalObject(context, \"deployment.server.provider\", server.provider);\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 if (server?.provider !== undefined && staticDeployment !== undefined) {\n throw new DemiurgeConfigError(\n `${configFile} config field \"deployment\" cannot declare both a runtime provider and static output.`,\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
@@ -1,5 +1,6 @@
1
1
  import type { InlineConfig } from "vite";
2
2
  import type { ResolvedDemiurgeConfig } from "./config/types";
3
+ import type { ServeNodeBuildOptions } from "./node";
3
4
  import { type GenerateStaticOutputOptions, type StaticOutputManifest } from "./static";
4
5
  export { parseClientManifest } from "./manifest";
5
6
  export type { ClientBuildManifest } from "./manifest";
@@ -7,7 +8,7 @@ export { INSPECT_EXIT_FINDINGS, INSPECT_EXIT_INVALID, INSPECT_EXIT_OK, runInspec
7
8
  export type { InspectCommandResult } from "./inspect";
8
9
  type CliEnvironment = Record<string, string | undefined>;
9
10
  export type CliOptions = {
10
- command: "build" | "dev" | "help" | "inspect" | "preview";
11
+ command: "build" | "dev" | "help" | "inspect" | "preview" | "start";
11
12
  host: string;
12
13
  origin?: string;
13
14
  outDir?: string;
@@ -27,10 +28,15 @@ export type BuildResult = {
27
28
  outDir: string;
28
29
  serverOutDir?: string;
29
30
  };
31
+ export type StartRuntime = {
32
+ importModule: (specifier: string) => Promise<Record<string, unknown>>;
33
+ serve: (options: ServeNodeBuildOptions) => Promise<unknown>;
34
+ };
30
35
  export declare function parseCliArguments(arguments_: string[], environment?: CliEnvironment): CliOptions;
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.";
36
+ export declare const helpText = "Usage: demiurge <command> [options]\n\nCommands:\n dev Start the development server\n build Build production output\n start Run built Node 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 (start: HOST or 127.0.0.1; otherwise: 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.";
32
37
  export declare function runDev(options: CliOptions, config: ResolvedDemiurgeConfig): Promise<import("vite").ViteDevServer>;
33
38
  export declare function runBuild(options: CliOptions, config: ResolvedDemiurgeConfig, runtime?: BuildRuntime): Promise<BuildResult>;
39
+ export declare function runStart(options: CliOptions, config: ResolvedDemiurgeConfig, environment?: CliEnvironment, runtime?: StartRuntime): Promise<unknown>;
34
40
  export declare function resolvePreviewOutputDirectory(root: string, outDir: string | undefined, configuredOutDir?: string): string;
35
41
  export declare function validateBuildOutputDirectory(root: string, outDir: string, publicDir: false | string, serverOutDir: string): Promise<void>;
36
42
  //# sourceMappingURL=cli.d.ts.map
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;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"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}