@zenithbuild/cli 0.7.5 → 0.7.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 (68) hide show
  1. package/dist/adapters/adapter-netlify.js +0 -8
  2. package/dist/adapters/adapter-vercel.js +6 -14
  3. package/dist/adapters/copy-hosted-page-runtime.js +2 -1
  4. package/dist/build/hoisted-code-transforms.d.ts +4 -1
  5. package/dist/build/hoisted-code-transforms.js +5 -3
  6. package/dist/build/page-ir-normalization.d.ts +1 -1
  7. package/dist/build/page-ir-normalization.js +33 -3
  8. package/dist/build/page-loop.js +46 -2
  9. package/dist/dev-build-session/helpers.d.ts +29 -0
  10. package/dist/dev-build-session/helpers.js +223 -0
  11. package/dist/dev-build-session/session.d.ts +24 -0
  12. package/dist/dev-build-session/session.js +204 -0
  13. package/dist/dev-build-session/state.d.ts +37 -0
  14. package/dist/dev-build-session/state.js +17 -0
  15. package/dist/dev-build-session.d.ts +1 -24
  16. package/dist/dev-build-session.js +1 -434
  17. package/dist/dev-server/css-state.d.ts +7 -0
  18. package/dist/dev-server/css-state.js +92 -0
  19. package/dist/dev-server/not-found.d.ts +23 -0
  20. package/dist/dev-server/not-found.js +129 -0
  21. package/dist/dev-server/request-handler.d.ts +1 -0
  22. package/dist/dev-server/request-handler.js +376 -0
  23. package/dist/dev-server/route-check.d.ts +9 -0
  24. package/dist/dev-server/route-check.js +100 -0
  25. package/dist/dev-server/watcher.d.ts +5 -0
  26. package/dist/dev-server/watcher.js +216 -0
  27. package/dist/dev-server.js +123 -924
  28. package/dist/images/payload.js +4 -0
  29. package/dist/manifest.js +46 -1
  30. package/dist/preview/create-preview-server.d.ts +18 -0
  31. package/dist/preview/create-preview-server.js +71 -0
  32. package/dist/preview/manifest.d.ts +42 -0
  33. package/dist/preview/manifest.js +57 -0
  34. package/dist/preview/paths.d.ts +3 -0
  35. package/dist/preview/paths.js +38 -0
  36. package/dist/preview/payload.d.ts +6 -0
  37. package/dist/preview/payload.js +34 -0
  38. package/dist/preview/request-handler.d.ts +1 -0
  39. package/dist/preview/request-handler.js +300 -0
  40. package/dist/preview/server-runner.d.ts +49 -0
  41. package/dist/preview/server-runner.js +220 -0
  42. package/dist/preview/server-script-runner-template.d.ts +1 -0
  43. package/dist/preview/server-script-runner-template.js +425 -0
  44. package/dist/preview.d.ts +5 -112
  45. package/dist/preview.js +7 -1119
  46. package/dist/resource-response.d.ts +15 -0
  47. package/dist/resource-response.js +91 -2
  48. package/dist/server-contract/constants.d.ts +5 -0
  49. package/dist/server-contract/constants.js +5 -0
  50. package/dist/server-contract/export-validation.d.ts +5 -0
  51. package/dist/server-contract/export-validation.js +59 -0
  52. package/dist/server-contract/json-serializable.d.ts +1 -0
  53. package/dist/server-contract/json-serializable.js +52 -0
  54. package/dist/server-contract/resolve.d.ts +15 -0
  55. package/dist/server-contract/resolve.js +271 -0
  56. package/dist/server-contract/result-helpers.d.ts +51 -0
  57. package/dist/server-contract/result-helpers.js +59 -0
  58. package/dist/server-contract/route-result-validation.d.ts +2 -0
  59. package/dist/server-contract/route-result-validation.js +73 -0
  60. package/dist/server-contract/stage.d.ts +6 -0
  61. package/dist/server-contract/stage.js +22 -0
  62. package/dist/server-contract.d.ts +6 -62
  63. package/dist/server-contract.js +9 -493
  64. package/dist/server-middleware.d.ts +10 -0
  65. package/dist/server-middleware.js +30 -0
  66. package/dist/server-output.js +13 -1
  67. package/dist/server-runtime/node-server.js +25 -3
  68. package/package.json +3 -3
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Compose route middleware left-to-right:
3
+ * withMiddleware(handler, a, b) === a(b(handler))
4
+ *
5
+ * @template {(ctx: unknown) => unknown} T
6
+ * @param {T} handler
7
+ * @param {...((next: T) => T)} middleware
8
+ * @returns {T}
9
+ */
10
+ export function withMiddleware<T extends (ctx: unknown) => unknown>(handler: T, ...middleware: ((next: T) => T)[]): T;
@@ -0,0 +1,30 @@
1
+ const WITH_MIDDLEWARE_PREFIX = '[Zenith] withMiddleware(handler, ...middleware)';
2
+ function assertFunction(value, message) {
3
+ if (typeof value !== 'function') {
4
+ throw new Error(message);
5
+ }
6
+ }
7
+ /**
8
+ * Compose route middleware left-to-right:
9
+ * withMiddleware(handler, a, b) === a(b(handler))
10
+ *
11
+ * @template {(ctx: unknown) => unknown} T
12
+ * @param {T} handler
13
+ * @param {...((next: T) => T)} middleware
14
+ * @returns {T}
15
+ */
16
+ export function withMiddleware(handler, ...middleware) {
17
+ assertFunction(handler, `${WITH_MIDDLEWARE_PREFIX}: handler must be a function.`);
18
+ if (middleware.length === 0) {
19
+ return handler;
20
+ }
21
+ let composed = handler;
22
+ for (let index = middleware.length - 1; index >= 0; index -= 1) {
23
+ const candidate = middleware[index];
24
+ assertFunction(candidate, `${WITH_MIDDLEWARE_PREFIX}: middleware at index ${index} must be a function.`);
25
+ const wrapped = candidate(composed);
26
+ assertFunction(wrapped, `${WITH_MIDDLEWARE_PREFIX}: middleware at index ${index} must return a function.`);
27
+ composed = wrapped;
28
+ }
29
+ return /** @type {T} */ (composed);
30
+ }
@@ -15,6 +15,15 @@ const SERVER_RUNTIME_FILES = [
15
15
  from: new URL('./server-contract.js', import.meta.url),
16
16
  to: 'server-contract.js'
17
17
  },
18
+ {
19
+ from: new URL('./server-contract', import.meta.url),
20
+ to: 'server-contract',
21
+ recursive: true
22
+ },
23
+ {
24
+ from: new URL('./server-middleware.js', import.meta.url),
25
+ to: 'server-middleware.js'
26
+ },
18
27
  {
19
28
  from: new URL('./auth/route-auth.js', import.meta.url),
20
29
  to: 'auth/route-auth.js'
@@ -252,7 +261,10 @@ async function copyRuntimeFiles(serverDir) {
252
261
  for (const file of SERVER_RUNTIME_FILES) {
253
262
  const targetPath = join(serverDir, file.to);
254
263
  await mkdir(dirname(targetPath), { recursive: true });
255
- await cp(file.from, targetPath, { force: true });
264
+ await cp(file.from, targetPath, {
265
+ force: true,
266
+ recursive: file.recursive === true
267
+ });
256
268
  }
257
269
  }
258
270
  async function copyOptionalFile(sourcePath, targetPath) {
@@ -116,12 +116,34 @@ async function sendFetchResponse(res, response, method) {
116
116
  }
117
117
  res.setHeader(key, value);
118
118
  }
119
- if (String(method || 'GET').toUpperCase() === 'HEAD') {
119
+ if (String(method || 'GET').toUpperCase() === 'HEAD' || !response.body) {
120
120
  res.end();
121
121
  return;
122
122
  }
123
- const body = await response.arrayBuffer();
124
- res.end(Buffer.from(body));
123
+ try {
124
+ const bodyStream = Readable.fromWeb(response.body);
125
+ bodyStream.pipe(res);
126
+ bodyStream.on('error', (err) => {
127
+ logServerException('node response stream failed', err);
128
+ if (!res.headersSent) {
129
+ res.statusCode = 500;
130
+ res.end();
131
+ }
132
+ else {
133
+ res.destroy();
134
+ }
135
+ });
136
+ }
137
+ catch (err) {
138
+ logServerException('node response pipe creation failed', err);
139
+ if (!res.headersSent) {
140
+ res.statusCode = 500;
141
+ res.end();
142
+ }
143
+ else {
144
+ res.destroy();
145
+ }
146
+ }
125
147
  }
126
148
  async function sendStaticFile(res, filePath, method) {
127
149
  const body = await readFile(filePath);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenithbuild/cli",
3
- "version": "0.7.5",
3
+ "version": "0.7.7",
4
4
  "description": "Deterministic project orchestrator for Zenith framework",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -38,8 +38,8 @@
38
38
  "prepublishOnly": "npm run build"
39
39
  },
40
40
  "dependencies": {
41
- "@zenithbuild/compiler": "0.7.5",
42
- "@zenithbuild/bundler": "0.7.5",
41
+ "@zenithbuild/compiler": "0.7.7",
42
+ "@zenithbuild/bundler": "0.7.7",
43
43
  "picocolors": "^1.1.1",
44
44
  "sharp": "^0.34.4"
45
45
  },