@jasonshimmy/vite-plugin-cer-app 0.17.1 → 0.18.0

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 (79) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/commits.txt +2 -1
  3. package/dist/cli/adapters/cloudflare.js +17 -1
  4. package/dist/cli/adapters/cloudflare.js.map +1 -1
  5. package/dist/plugin/dev-server.d.ts +1 -1
  6. package/dist/plugin/dev-server.d.ts.map +1 -1
  7. package/dist/plugin/transforms/auto-import.d.ts.map +1 -1
  8. package/dist/plugin/transforms/auto-import.js +101 -95
  9. package/dist/plugin/transforms/auto-import.js.map +1 -1
  10. package/dist/plugin/virtual/routes.d.ts.map +1 -1
  11. package/dist/plugin/virtual/routes.js +127 -18
  12. package/dist/plugin/virtual/routes.js.map +1 -1
  13. package/dist/runtime/app-template.d.ts +1 -1
  14. package/dist/runtime/app-template.d.ts.map +1 -1
  15. package/dist/runtime/app-template.js +7 -5
  16. package/dist/runtime/app-template.js.map +1 -1
  17. package/dist/runtime/composables/use-fetch.d.ts.map +1 -1
  18. package/dist/runtime/composables/use-fetch.js +30 -10
  19. package/dist/runtime/composables/use-fetch.js.map +1 -1
  20. package/dist/runtime/composables/use-runtime-config.d.ts +5 -2
  21. package/dist/runtime/composables/use-runtime-config.d.ts.map +1 -1
  22. package/dist/runtime/composables/use-runtime-config.js +7 -0
  23. package/dist/runtime/composables/use-runtime-config.js.map +1 -1
  24. package/dist/runtime/composables/use-session.d.ts.map +1 -1
  25. package/dist/runtime/composables/use-session.js +29 -16
  26. package/dist/runtime/composables/use-session.js.map +1 -1
  27. package/dist/runtime/entry-server-template.d.ts +1 -1
  28. package/dist/runtime/entry-server-template.d.ts.map +1 -1
  29. package/dist/runtime/entry-server-template.js +30 -9
  30. package/dist/runtime/entry-server-template.js.map +1 -1
  31. package/dist/types/config.d.ts +23 -1
  32. package/dist/types/config.d.ts.map +1 -1
  33. package/dist/types/config.js.map +1 -1
  34. package/docs/components.md +49 -0
  35. package/docs/composables.md +23 -0
  36. package/docs/layouts.md +31 -1
  37. package/docs/middleware.md +21 -2
  38. package/docs/plan-production-hardening.md +27 -10
  39. package/docs/routing.md +45 -0
  40. package/e2e/cypress/e2e/async-component.cy.ts +27 -0
  41. package/e2e/cypress/e2e/group-meta.cy.ts +33 -0
  42. package/e2e/cypress/e2e/middleware-status.cy.ts +30 -0
  43. package/e2e/cypress/e2e/per-route-error.cy.ts +42 -0
  44. package/e2e/cypress/e2e/session-rotation.cy.ts +25 -0
  45. package/e2e/cypress/e2e/synthetic-404.cy.ts +45 -0
  46. package/e2e/kitchen-sink/app/layouts/group.ts +9 -0
  47. package/e2e/kitchen-sink/app/middleware/custom-log.ts +4 -0
  48. package/e2e/kitchen-sink/app/middleware/group-auth.ts +7 -0
  49. package/e2e/kitchen-sink/app/pages/async-component-error-test.ts +18 -0
  50. package/e2e/kitchen-sink/app/pages/async-component-test.ts +18 -0
  51. package/e2e/kitchen-sink/app/pages/group-auth-blocked.ts +9 -0
  52. package/e2e/kitchen-sink/app/pages/group-meta-test/_layout.ts +6 -0
  53. package/e2e/kitchen-sink/app/pages/group-meta-test/custom-mw.ts +14 -0
  54. package/e2e/kitchen-sink/app/pages/group-meta-test/page.ts +9 -0
  55. package/e2e/kitchen-sink/app/pages/group-meta-test/protected.ts +8 -0
  56. package/e2e/kitchen-sink/app/pages/middleware-status-test.ts +9 -0
  57. package/e2e/kitchen-sink/app/pages/per-route-error-test.error.ts +13 -0
  58. package/e2e/kitchen-sink/app/pages/per-route-error-test.ts +15 -0
  59. package/e2e/kitchen-sink/app/pages/session-rotation-test.ts +25 -0
  60. package/e2e/kitchen-sink/server/middleware/02-status-test.ts +10 -0
  61. package/package.json +2 -2
  62. package/src/__tests__/cli/adapters/cloudflare.test.ts +41 -1
  63. package/src/__tests__/plugin/entry-server-template.test.ts +57 -9
  64. package/src/__tests__/plugin/transforms/auto-import.test.ts +49 -0
  65. package/src/__tests__/plugin/virtual/routes.test.ts +165 -1
  66. package/src/__tests__/runtime/app-template.test.ts +11 -0
  67. package/src/__tests__/runtime/use-fetch.test.ts +69 -0
  68. package/src/__tests__/runtime/use-session.test.ts +83 -0
  69. package/src/cli/adapters/cloudflare.ts +21 -1
  70. package/src/plugin/dev-server.ts +1 -1
  71. package/src/plugin/transforms/auto-import.ts +113 -109
  72. package/src/plugin/virtual/routes.ts +142 -16
  73. package/src/runtime/app-template.ts +7 -5
  74. package/src/runtime/composables/use-fetch.ts +31 -8
  75. package/src/runtime/composables/use-runtime-config.ts +10 -3
  76. package/src/runtime/composables/use-session.ts +27 -15
  77. package/src/runtime/entry-server-template.ts +30 -9
  78. package/src/types/config.ts +23 -1
  79. package/docs/plan-component-code-splitting.md +0 -667
package/CHANGELOG.md CHANGED
@@ -1,6 +1,11 @@
1
1
  # Changelog
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
+ ## [v0.18.0] - 2026-03-28
5
+
6
+ - chore: remove dead file (e01aab3)
7
+ - feat: production readiness hardening (5f64c49)
8
+
4
9
  ## [v0.17.1] - 2026-03-28
5
10
 
6
11
  - fix: update dependencies and improve error handling in server templates (0f12ef5)
package/commits.txt CHANGED
@@ -1 +1,2 @@
1
- - fix: update dependencies and improve error handling in server templates (0f12ef5)
1
+ - chore: remove dead file (e01aab3)
2
+ - feat: production readiness hardening (5f64c49)
@@ -225,7 +225,23 @@ function _buildSSR(root, distDir) {
225
225
  ? readFileSync(clientHtmlPath, 'utf-8')
226
226
  : '';
227
227
  // Write the worker bridge with inlined client HTML.
228
- writeFileSync(join(distDir, '_worker.js'), generateWorkerBridge(clientHtml));
228
+ const workerPath = join(distDir, '_worker.js');
229
+ writeFileSync(workerPath, generateWorkerBridge(clientHtml));
230
+ // P1-4: Warn when the worker file approaches or exceeds Cloudflare's size limits.
231
+ // Free plan: 1 MB compressed; Paid plan: 10 MB compressed. Check uncompressed as
232
+ // a conservative proxy — the compressed size will always be smaller.
233
+ const workerSizeBytes = statSync(workerPath).size;
234
+ const WARN_LIMIT = 900_000; // 900 KB — approaching Free plan limit
235
+ const ERROR_LIMIT = 9_000_000; // 9 MB — approaching Paid plan limit
236
+ if (workerSizeBytes > ERROR_LIMIT) {
237
+ console.error(`[cer-app] Cloudflare _worker.js is ${(workerSizeBytes / 1e6).toFixed(1)} MB — ` +
238
+ `exceeds the ${(ERROR_LIMIT / 1e6).toFixed(0)} MB limit. Deployment will likely fail.`);
239
+ process.exit(1);
240
+ }
241
+ else if (workerSizeBytes > WARN_LIMIT) {
242
+ console.warn(`[cer-app] Cloudflare _worker.js is ${(workerSizeBytes / 1e3).toFixed(0)} KB — ` +
243
+ `approaching the Cloudflare Free plan 1 MB limit. Consider the Paid plan or reducing bundle size.`);
244
+ }
229
245
  // Copy assets from dist/client/ into dist/ (at the same URL paths).
230
246
  // Cloudflare Pages CDN serves files in the deploy directory as static first;
231
247
  // requests that don't match a static file fall through to _worker.js.
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../../src/cli/adapters/cloudflare.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../../src/cli/adapters/cloudflare.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAC5B,OAAO,EACL,UAAU,EACV,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,WAAW,EACX,QAAQ,GACT,MAAM,SAAS,CAAA;AAEhB,iFAAiF;AAEjF;;;;;;;;;;;;;;GAcG;AACH,SAAS,oBAAoB,CAAC,UAAkB;IAC9C,0DAA0D;IAC1D,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAE/F,OAAO;;;;;;;;yCAQgC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2I/C,CAAA;AACD,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAClC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,yCAAyC,OAAO,8BAA8B,CAC/E,CAAA;IACH,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAA;IACtD,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;IAElE,IAAI,KAAK,EAAE,CAAC;QACV,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC1B,CAAC;SAAM,CAAC;QACN,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC7B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAA;IACrD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;QACzC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;QAC/B,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;IAC1D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;IAC1D,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF,SAAS,SAAS,CAAC,IAAY,EAAE,OAAe;IAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAA;IACzD,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,CAAC;QAC3C,CAAC,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC;QACvC,CAAC,CAAC,EAAE,CAAA;IAEN,oDAAoD;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IAC9C,aAAa,CAAC,UAAU,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAA;IAE3D,kFAAkF;IAClF,iFAAiF;IACjF,qEAAqE;IACrE,MAAM,eAAe,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAA;IACjD,MAAM,UAAU,GAAG,OAAO,CAAA,CAAG,uCAAuC;IACpE,MAAM,WAAW,GAAG,SAAS,CAAA,CAAE,qCAAqC;IACpE,IAAI,eAAe,GAAG,WAAW,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CACX,sCAAsC,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;YAChF,eAAe,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,yCAAyC,CACvF,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;SAAM,IAAI,eAAe,GAAG,UAAU,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CACV,sCAAsC,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;YAChF,kGAAkG,CACnG,CAAA;IACH,CAAC;IAED,oEAAoE;IACpE,6EAA6E;IAC7E,sEAAsE;IACtE,uEAAuE;IACvE,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAA;IAEnD,4EAA4E;IAC5E,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAChC,CAAC;AAED,iFAAiF;AAEjF,SAAS,YAAY,CAAC,IAAY,EAAE,OAAe;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAEzC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,iEAAiE;QACjE,4EAA4E;QAC5E,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACvC,CAAC;IACD,+DAA+D;IAE/D,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACjC,CAAC;AAED,iFAAiF;AAEjF,SAAS,kBAAkB,CAAC,IAAY,EAAE,OAAgB;IACxD,MAAM,KAAK,GAAG;QACZ,qEAAqE;QACrE,kBAAkB;QAClB,mCAAmC;KACpC,CAAA;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IACtC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAC9D,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,SAAiB,EAAE,OAAe;IAC3D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAM;IAClC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACvC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3C,IAAI,KAAK,KAAK,YAAY;YAAE,SAAQ;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACjC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -33,7 +33,7 @@ export interface ResolvedCerConfig {
33
33
  };
34
34
  runtimeConfig: {
35
35
  public: Record<string, unknown>;
36
- private: Record<string, string>;
36
+ private: import('../types/config.js').RuntimePrivateConfig;
37
37
  };
38
38
  auth: import('../types/config.js').AuthConfig | null;
39
39
  i18n: {
@@ -1 +1 @@
1
- {"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../../src/plugin/dev-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AAIzC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAA;IAC1E,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;KAAE,CAAA;IAC9D,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAA;IACtD,WAAW,EAAE;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAA;IACjG,aAAa,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IACnF,IAAI,EAAE,OAAO,oBAAoB,EAAE,UAAU,GAAG,IAAI,CAAA;IACpD,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,GAAG,uBAAuB,GAAG,WAAW,CAAA;KAAE,GAAG,IAAI,CAAA;CACtH;AA0GD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,iBAAiB,GACxB,IAAI,CAyKN"}
1
+ {"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../../src/plugin/dev-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AAIzC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAA;IAC1E,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;KAAE,CAAA;IAC9D,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAA;IACtD,WAAW,EAAE;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAA;IACjG,aAAa,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,EAAE,OAAO,oBAAoB,EAAE,oBAAoB,CAAA;KAAE,CAAA;IAC9G,IAAI,EAAE,OAAO,oBAAoB,EAAE,UAAU,GAAG,IAAI,CAAA;IACpD,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,GAAG,uBAAuB,GAAG,WAAW,CAAA;KAAE,GAAG,IAAI,CAAA;CACtH;AA0GD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,iBAAiB,GACxB,IAAI,CAyKN"}
@@ -1 +1 @@
1
- {"version":3,"file":"auto-import.d.ts","sourceRoot":"","sources":["../../../src/plugin/transforms/auto-import.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACxC;AA2CD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,iBAAiB,GACtB,MAAM,GAAG,IAAI,CA0Df"}
1
+ {"version":3,"file":"auto-import.d.ts","sourceRoot":"","sources":["../../../src/plugin/transforms/auto-import.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACxC;AA+GD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,iBAAiB,GACtB,MAAM,GAAG,IAAI,CA8Cf"}
@@ -1,40 +1,102 @@
1
1
  import MagicString from 'magic-string';
2
2
  import { normalize } from 'pathe';
3
- const RUNTIME_IMPORTS = `import { component, html, css, ref, computed, watch, watchEffect, useProps, useEmit, useOnConnected, useOnDisconnected, useOnAttributeChanged, useOnError, useStyle, useDesignTokens, useGlobalStyle, useExpose, useSlots, provide, inject, createComposable, nextTick, defineModel, getCurrentComponentContext, isReactiveState, unsafeHTML, decodeEntities, useTeleport } from '@jasonshimmy/custom-elements-runtime';`;
4
- const DIRECTIVE_IMPORTS = `import { when, each, match, anchorBlock } from '@jasonshimmy/custom-elements-runtime/directives';`;
5
- const FRAMEWORK_IMPORTS = `import { useHead, usePageData, useInject, useRuntimeConfig, defineMiddleware, defineServerMiddleware, useSeoMeta, useCookie, useSession, useAuth, useFetch, useRoute, navigateTo, useState, useLocale } from '@jasonshimmy/vite-plugin-cer-app/composables';`;
6
- const FRAMEWORK_IDENTIFIERS = ['useHead', 'usePageData', 'useInject', 'useRuntimeConfig', 'defineMiddleware', 'defineServerMiddleware', 'useSeoMeta', 'useCookie', 'useSession', 'useAuth', 'useFetch', 'useRoute', 'navigateTo', 'useState', 'useLocale'];
7
- const RUNTIME_IDENTIFIERS = [
8
- 'component',
9
- 'html',
10
- 'css',
11
- 'ref',
12
- 'computed',
13
- 'watch',
14
- 'watchEffect',
15
- 'useProps',
16
- 'useEmit',
17
- 'useOnConnected',
18
- 'useOnDisconnected',
19
- 'useOnAttributeChanged',
20
- 'useOnError',
21
- 'useStyle',
22
- 'useDesignTokens',
23
- 'useGlobalStyle',
24
- 'useExpose',
25
- 'useSlots',
26
- 'provide',
27
- 'inject',
28
- 'createComposable',
29
- 'nextTick',
30
- 'defineModel',
31
- 'getCurrentComponentContext',
32
- 'isReactiveState',
33
- 'unsafeHTML',
34
- 'decodeEntities',
35
- 'useTeleport',
36
- ];
37
- const DIRECTIVE_IDENTIFIERS = ['when', 'each', 'match', 'anchorBlock'];
3
+ // P1-5: Per-identifier import maps. Only the identifiers actually referenced in
4
+ // a file are injected this eliminates the full-group injection that prevented
5
+ // tree-shaking when a page used only one framework composable.
6
+ /** Maps each runtime identifier to its source module. All from the main runtime package. */
7
+ const RUNTIME_MAP = {
8
+ component: '@jasonshimmy/custom-elements-runtime',
9
+ defineAsyncComponent: '@jasonshimmy/custom-elements-runtime',
10
+ html: '@jasonshimmy/custom-elements-runtime',
11
+ css: '@jasonshimmy/custom-elements-runtime',
12
+ ref: '@jasonshimmy/custom-elements-runtime',
13
+ computed: '@jasonshimmy/custom-elements-runtime',
14
+ watch: '@jasonshimmy/custom-elements-runtime',
15
+ watchEffect: '@jasonshimmy/custom-elements-runtime',
16
+ useProps: '@jasonshimmy/custom-elements-runtime',
17
+ useEmit: '@jasonshimmy/custom-elements-runtime',
18
+ useOnConnected: '@jasonshimmy/custom-elements-runtime',
19
+ useOnDisconnected: '@jasonshimmy/custom-elements-runtime',
20
+ useOnAttributeChanged: '@jasonshimmy/custom-elements-runtime',
21
+ useOnError: '@jasonshimmy/custom-elements-runtime',
22
+ useStyle: '@jasonshimmy/custom-elements-runtime',
23
+ useDesignTokens: '@jasonshimmy/custom-elements-runtime',
24
+ useGlobalStyle: '@jasonshimmy/custom-elements-runtime',
25
+ useExpose: '@jasonshimmy/custom-elements-runtime',
26
+ useSlots: '@jasonshimmy/custom-elements-runtime',
27
+ provide: '@jasonshimmy/custom-elements-runtime',
28
+ inject: '@jasonshimmy/custom-elements-runtime',
29
+ createComposable: '@jasonshimmy/custom-elements-runtime',
30
+ nextTick: '@jasonshimmy/custom-elements-runtime',
31
+ defineModel: '@jasonshimmy/custom-elements-runtime',
32
+ getCurrentComponentContext: '@jasonshimmy/custom-elements-runtime',
33
+ isReactiveState: '@jasonshimmy/custom-elements-runtime',
34
+ unsafeHTML: '@jasonshimmy/custom-elements-runtime',
35
+ decodeEntities: '@jasonshimmy/custom-elements-runtime',
36
+ useTeleport: '@jasonshimmy/custom-elements-runtime',
37
+ };
38
+ /** Maps each directive identifier to its source module (directives sub-path). */
39
+ const DIRECTIVE_MAP = {
40
+ when: '@jasonshimmy/custom-elements-runtime/directives',
41
+ each: '@jasonshimmy/custom-elements-runtime/directives',
42
+ match: '@jasonshimmy/custom-elements-runtime/directives',
43
+ anchorBlock: '@jasonshimmy/custom-elements-runtime/directives',
44
+ };
45
+ /** Maps each framework composable to its source module. */
46
+ const FRAMEWORK_MAP = {
47
+ useHead: '@jasonshimmy/vite-plugin-cer-app/composables',
48
+ usePageData: '@jasonshimmy/vite-plugin-cer-app/composables',
49
+ useInject: '@jasonshimmy/vite-plugin-cer-app/composables',
50
+ useRuntimeConfig: '@jasonshimmy/vite-plugin-cer-app/composables',
51
+ defineMiddleware: '@jasonshimmy/vite-plugin-cer-app/composables',
52
+ defineServerMiddleware: '@jasonshimmy/vite-plugin-cer-app/composables',
53
+ useSeoMeta: '@jasonshimmy/vite-plugin-cer-app/composables',
54
+ useCookie: '@jasonshimmy/vite-plugin-cer-app/composables',
55
+ useSession: '@jasonshimmy/vite-plugin-cer-app/composables',
56
+ useAuth: '@jasonshimmy/vite-plugin-cer-app/composables',
57
+ useFetch: '@jasonshimmy/vite-plugin-cer-app/composables',
58
+ useRoute: '@jasonshimmy/vite-plugin-cer-app/composables',
59
+ navigateTo: '@jasonshimmy/vite-plugin-cer-app/composables',
60
+ useState: '@jasonshimmy/vite-plugin-cer-app/composables',
61
+ useLocale: '@jasonshimmy/vite-plugin-cer-app/composables',
62
+ };
63
+ // All identifier maps — processed in order. Earlier maps take precedence for
64
+ // the "already imported from this module" duplicate check.
65
+ const ALL_MAPS = [RUNTIME_MAP, DIRECTIVE_MAP, FRAMEWORK_MAP];
66
+ /**
67
+ * Returns true if the file already manually imports from the given source module.
68
+ * When true, we skip auto-injecting identifiers from that module to avoid duplicates.
69
+ */
70
+ function isAlreadyImported(code, sourceModule) {
71
+ return (code.includes(`from '${sourceModule}'`) ||
72
+ code.includes(`from "${sourceModule}"`));
73
+ }
74
+ /**
75
+ * Builds minimal import statements containing only the identifiers actually
76
+ * referenced in the file. Groups identifiers by source module. Skips modules
77
+ * that the file already imports from manually.
78
+ *
79
+ * Returns an array of import statement strings (one per source module used).
80
+ */
81
+ function buildMinimalImportStatements(code, maps) {
82
+ // Group identifier → source module, collecting only used ones.
83
+ const grouped = new Map();
84
+ for (const map of maps) {
85
+ for (const [identifier, sourceModule] of Object.entries(map)) {
86
+ // Skip if the file already imports from this module.
87
+ if (isAlreadyImported(code, sourceModule))
88
+ continue;
89
+ // Skip if identifier not referenced in the file.
90
+ const pattern = new RegExp(`\\b${identifier}\\b`);
91
+ if (!pattern.test(code))
92
+ continue;
93
+ const existing = grouped.get(sourceModule) ?? [];
94
+ existing.push(identifier);
95
+ grouped.set(sourceModule, existing);
96
+ }
97
+ }
98
+ return Array.from(grouped.entries()).map(([mod, ids]) => `import { ${ids.join(', ')} } from '${mod}';`);
99
+ }
38
100
  /**
39
101
  * Auto-import transform: injects runtime and directive imports at the top of
40
102
  * files inside app/pages/, app/layouts/, or app/components/ if those
@@ -64,48 +126,22 @@ export function autoImportTransform(code, id, opts) {
64
126
  // Skip virtual modules and non-ts files
65
127
  if (id.startsWith('\0') || (!id.endsWith('.ts') && !id.endsWith('.js')))
66
128
  return null;
67
- const needsRuntime = isRuntimeImportNeeded(code);
68
- const needsDirectives = isDirectiveImportNeeded(code);
69
- const needsFramework = isFrameworkImportNeeded(code);
70
129
  // Skip virtual:cer-composables injection for files inside app/composables/ to
71
130
  // avoid circular imports (the virtual module re-exports from all composable files).
72
131
  const isComposablesDir = normalizedId.startsWith(srcDir + '/composables/');
73
132
  const composableImport = isComposablesDir ? null : buildComposableImport(code, opts.composableExports);
74
- if (!needsRuntime && !needsDirectives && !needsFramework && !composableImport)
133
+ // Build per-identifier import statements from all maps.
134
+ const importLines = buildMinimalImportStatements(code, ALL_MAPS);
135
+ if (importLines.length === 0 && !composableImport)
75
136
  return null;
76
137
  const ms = new MagicString(code);
77
- const injectLines = [];
78
- if (needsRuntime) {
79
- injectLines.push(RUNTIME_IMPORTS);
80
- }
81
- if (needsDirectives) {
82
- injectLines.push(DIRECTIVE_IMPORTS);
83
- }
84
- if (needsFramework) {
85
- injectLines.push(FRAMEWORK_IMPORTS);
86
- }
138
+ const injectLines = [...importLines];
87
139
  if (composableImport) {
88
140
  injectLines.push(composableImport);
89
141
  }
90
142
  ms.prepend(injectLines.join('\n') + '\n');
91
143
  return ms.toString();
92
144
  }
93
- /**
94
- * Checks if the file already imports runtime identifiers.
95
- * Returns true if injection is needed (not already imported).
96
- */
97
- function isRuntimeImportNeeded(code) {
98
- // If already importing from @jasonshimmy/custom-elements-runtime (not a sub-path), skip
99
- if (code.includes("from '@jasonshimmy/custom-elements-runtime'") ||
100
- code.includes('from "@jasonshimmy/custom-elements-runtime"')) {
101
- return false;
102
- }
103
- // Check if any runtime identifiers are used in the file
104
- return RUNTIME_IDENTIFIERS.some((id) => {
105
- const pattern = new RegExp(`\\b${id}\\b`);
106
- return pattern.test(code);
107
- });
108
- }
109
145
  /**
110
146
  * Builds an import statement for any composable names used in the file
111
147
  * that are not already imported.
@@ -129,34 +165,4 @@ function buildComposableImport(code, composableExports) {
129
165
  return null;
130
166
  return `import { ${needed.join(', ')} } from 'virtual:cer-composables';`;
131
167
  }
132
- /**
133
- * Checks if the file already imports framework composables (useHead, etc.).
134
- * Returns true if injection is needed (not already imported).
135
- */
136
- function isFrameworkImportNeeded(code) {
137
- if (code.includes("from '@jasonshimmy/vite-plugin-cer-app/composables'") ||
138
- code.includes('from "@jasonshimmy/vite-plugin-cer-app/composables"')) {
139
- return false;
140
- }
141
- return FRAMEWORK_IDENTIFIERS.some((id) => {
142
- const pattern = new RegExp(`\\b${id}\\b`);
143
- return pattern.test(code);
144
- });
145
- }
146
- /**
147
- * Checks if the file already imports directive identifiers.
148
- * Returns true if injection is needed (not already imported).
149
- */
150
- function isDirectiveImportNeeded(code) {
151
- // If already importing from directives sub-path, skip
152
- if (code.includes("from '@jasonshimmy/custom-elements-runtime/directives'") ||
153
- code.includes('from "@jasonshimmy/custom-elements-runtime/directives"')) {
154
- return false;
155
- }
156
- // Check if any directive identifiers are used in the file
157
- return DIRECTIVE_IDENTIFIERS.some((id) => {
158
- const pattern = new RegExp(`\\b${id}\\b`);
159
- return pattern.test(code);
160
- });
161
- }
162
168
  //# sourceMappingURL=auto-import.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-import.js","sourceRoot":"","sources":["../../../src/plugin/transforms/auto-import.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auto-import.js","sourceRoot":"","sources":["../../../src/plugin/transforms/auto-import.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/plugin/virtual/routes.ts"],"names":[],"mappings":"AA4JA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,QAAQ,GAAG,uBAAuB,GAAG,WAAW,CAAA;CAC3D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CA+LzG"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/plugin/virtual/routes.ts"],"names":[],"mappings":"AAmPA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,QAAQ,GAAG,uBAAuB,GAAG,WAAW,CAAA;CAC3D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAsOzG"}
@@ -1,5 +1,5 @@
1
1
  import { existsSync } from 'node:fs';
2
- import { basename, join, relative } from 'node:path';
2
+ import { basename, dirname, join, relative } from 'node:path';
3
3
  import { readFile } from 'node:fs/promises';
4
4
  import { scanDirectory } from '../scanner.js';
5
5
  import { buildRouteEntry, sortRoutes } from '../path-utils.js';
@@ -112,6 +112,40 @@ function extractTitle(source) {
112
112
  const match = source.match(/title\s*:\s*['"]([^'"]+)['"]/);
113
113
  return match ? match[1] : null;
114
114
  }
115
+ /**
116
+ * Reads a `_layout.ts` file and returns the group-level meta it exports.
117
+ * Group meta applies to all pages in the same directory and subdirectories.
118
+ *
119
+ * Reads:
120
+ * - `export const meta = { middleware: ['auth', 'admin'] }` → group middleware
121
+ * - `export const meta = { layout: 'minimal' }` → group layout override
122
+ * - `export default 'minimal'` → group layout (legacy form, still supported)
123
+ *
124
+ * Page-level meta takes precedence over group meta (group provides defaults only).
125
+ */
126
+ async function readGroupMeta(layoutFile) {
127
+ try {
128
+ const src = await readFile(layoutFile, 'utf-8');
129
+ // Legacy: export default 'layoutName'
130
+ const defaultMatch = src.match(/export\s+default\s+['"]([^'"]+)['"]/);
131
+ const layoutChainExtra = defaultMatch ? defaultMatch[1] : null;
132
+ // meta.middleware
133
+ const mwMatch = src.match(/middleware\s*:\s*\[([^\]]*)\]/);
134
+ let middleware = [];
135
+ if (mwMatch) {
136
+ const names = mwMatch[1].match(/['"]([^'"]+)['"]/g);
137
+ if (names)
138
+ middleware = names.map((s) => s.replace(/['"]/g, ''));
139
+ }
140
+ // meta.layout (explicit override in meta object)
141
+ const layoutMatch = src.match(/layout\s*:\s*['"]([^'"]+)['"]/);
142
+ const layout = layoutMatch ? layoutMatch[1] : null;
143
+ return { middleware, layout, layoutChainExtra };
144
+ }
145
+ catch {
146
+ return { middleware: [], layout: null, layoutChainExtra: null };
147
+ }
148
+ }
115
149
  /**
116
150
  * Resolves the layout chain for a page by walking its ancestor directories
117
151
  * inside pagesDir looking for `_layout.ts` files. Each `_layout.ts` must
@@ -135,21 +169,64 @@ async function resolveLayoutChain(filePath, pagesDir, outerLayout) {
135
169
  currentDir = join(currentDir, part);
136
170
  const layoutFile = join(currentDir, '_layout.ts');
137
171
  if (existsSync(layoutFile)) {
138
- try {
139
- const src = await readFile(layoutFile, 'utf-8');
140
- const match = src.match(/export\s+default\s+['"]([^'"]+)['"]/);
141
- if (match)
142
- extras.push(match[1]);
143
- }
144
- catch (err) {
145
- console.warn(`[cer-app] Could not read layout file "${layoutFile}":`, err);
146
- }
172
+ const { layoutChainExtra } = await readGroupMeta(layoutFile);
173
+ if (layoutChainExtra)
174
+ extras.push(layoutChainExtra);
147
175
  }
148
176
  }
149
177
  if (extras.length === 0)
150
178
  return null;
151
179
  return [outerLayout ?? 'default', ...extras];
152
180
  }
181
+ /**
182
+ * Resolves group-level meta (middleware + layout) from ancestor `_layout.ts` files.
183
+ * The deepest (most-specific) `_layout.ts` wins when multiple levels define the same field.
184
+ * Page-level meta always takes precedence over group meta.
185
+ */
186
+ async function resolveGroupMeta(filePath, pagesDir) {
187
+ const rel = relative(pagesDir, filePath);
188
+ const parts = rel.split('/').slice(0, -1);
189
+ let groupMiddleware = [];
190
+ let groupLayout = null;
191
+ let currentDir = pagesDir;
192
+ for (const part of parts) {
193
+ currentDir = join(currentDir, part);
194
+ const layoutFile = join(currentDir, '_layout.ts');
195
+ if (existsSync(layoutFile)) {
196
+ const { middleware, layout } = await readGroupMeta(layoutFile);
197
+ // Deeper _layout.ts wins: overwrite (more-specific takes precedence)
198
+ if (middleware.length > 0)
199
+ groupMiddleware = middleware;
200
+ if (layout !== null)
201
+ groupLayout = layout;
202
+ }
203
+ }
204
+ return { middleware: groupMiddleware, layout: groupLayout };
205
+ }
206
+ /**
207
+ * Resolves the per-route error tag by checking for:
208
+ * 1. Co-located `<page>.error.ts` alongside the page file
209
+ * 2. Directory-level `_error.ts` in the same directory as the page
210
+ *
211
+ * Returns { errorTag, errorFilePath } when found, null otherwise.
212
+ */
213
+ function resolveRouteErrorTag(filePath, pagesDir, pageTagName) {
214
+ // 1. Co-located: foo.ts → foo.error.ts
215
+ const colocated = filePath.replace(/\.ts$/, '.error.ts');
216
+ if (existsSync(colocated)) {
217
+ return { errorTag: pageTagName + '-error', errorFilePath: colocated };
218
+ }
219
+ // 2. Directory-level: _error.ts in the same dir
220
+ const dirError = join(dirname(filePath), '_error.ts');
221
+ if (existsSync(dirError)) {
222
+ // Tag: based on directory relative to pagesDir
223
+ const relDir = relative(pagesDir, dirname(filePath));
224
+ const dirParts = relDir.split('/').filter(Boolean);
225
+ const tag = dirParts.length > 0 ? `page-${dirParts.join('-')}-error` : 'page-error';
226
+ return { errorTag: tag.toLowerCase().replace(/-+/g, '-').replace(/^-|-$/g, ''), errorFilePath: dirError };
227
+ }
228
+ return null;
229
+ }
153
230
  /**
154
231
  * Generates the virtual:cer-routes module code.
155
232
  *
@@ -174,8 +251,8 @@ export async function generateRoutesCode(pagesDir, i18n) {
174
251
  return `// AUTO-GENERATED by @jasonshimmy/vite-plugin-cer-app\nconst routes = []\nexport default routes\n`;
175
252
  }
176
253
  const allFiles = await scanDirectory('**/*.ts', pagesDir);
177
- // Exclude _layout.ts files — they are directory-level layout config, not pages.
178
- const files = allFiles.filter((f) => basename(f) !== '_layout.ts');
254
+ // Exclude _layout.ts and _error.ts files — they are directory-level config, not pages.
255
+ const files = allFiles.filter((f) => basename(f) !== '_layout.ts' && basename(f) !== '_error.ts' && !basename(f).endsWith('.error.ts'));
179
256
  if (files.length === 0) {
180
257
  return `// AUTO-GENERATED by @jasonshimmy/vite-plugin-cer-app\nconst routes = []\nexport default routes\n`;
181
258
  }
@@ -203,10 +280,18 @@ export async function generateRoutesCode(pagesDir, i18n) {
203
280
  const metaPerEntry = await Promise.all(sorted.map(async (entry) => {
204
281
  try {
205
282
  const src = await readFile(entry.filePath, 'utf-8');
206
- const layout = extractLayout(src);
283
+ const pageLayout = extractLayout(src);
284
+ const pageMiddleware = extractMiddleware(src);
285
+ // P2-1: Resolve group meta from ancestor _layout.ts files.
286
+ // Page-level declarations take precedence over group-level defaults.
287
+ const groupMeta = await resolveGroupMeta(entry.filePath, pagesDir);
288
+ const layout = pageLayout ?? groupMeta.layout;
289
+ const middleware = pageMiddleware.length > 0 ? pageMiddleware : groupMeta.middleware;
207
290
  const layoutChain = await resolveLayoutChain(entry.filePath, pagesDir, layout);
291
+ // P2-2: Resolve per-route error tag from co-located or directory _error.ts.
292
+ const routeError = resolveRouteErrorTag(entry.filePath, pagesDir, entry.tagName);
208
293
  return {
209
- middleware: extractMiddleware(src),
294
+ middleware,
210
295
  layout,
211
296
  layoutChain,
212
297
  revalidate: extractRevalidate(src),
@@ -214,10 +299,12 @@ export async function generateRoutesCode(pagesDir, i18n) {
214
299
  render: extractRender(src),
215
300
  hydrate: extractHydrate(src),
216
301
  title: extractTitle(src),
302
+ routeErrorTag: routeError?.errorTag ?? null,
303
+ routeErrorFilePath: routeError?.errorFilePath ?? null,
217
304
  };
218
305
  }
219
306
  catch {
220
- return { middleware: [], layout: null, layoutChain: null, revalidate: null, transition: null, render: null, hydrate: null, title: null };
307
+ return { middleware: [], layout: null, layoutChain: null, revalidate: null, transition: null, render: null, hydrate: null, title: null, routeErrorTag: null, routeErrorFilePath: null };
221
308
  }
222
309
  }));
223
310
  const lines = ['// AUTO-GENERATED by @jasonshimmy/vite-plugin-cer-app', ''];
@@ -252,9 +339,11 @@ export async function generateRoutesCode(pagesDir, i18n) {
252
339
  mwChainBody +
253
340
  ` }`);
254
341
  }
342
+ // Track whether any user-defined catch-all route exists.
343
+ const hasCatchAll = sorted.some((e) => e.isCatchAll);
255
344
  // Build routes array with lazy load() functions for code splitting.
256
345
  const routeItems = sorted.map((entry, i) => {
257
- const { middleware: mw, layout, layoutChain, revalidate, transition, render, hydrate, title } = metaPerEntry[i];
346
+ const { middleware: mw, layout, layoutChain, revalidate, transition, render, hydrate, title, routeErrorTag, routeErrorFilePath } = metaPerEntry[i];
258
347
  const filePath = JSON.stringify(entry.filePath);
259
348
  const tagName = JSON.stringify(entry.tagName);
260
349
  const routePath = JSON.stringify(entry.routePath);
@@ -262,7 +351,17 @@ export async function generateRoutesCode(pagesDir, i18n) {
262
351
  // 1. Runs component() as a side effect, registering the custom element
263
352
  // 2. Returns the tag name string as `default` so the router knows what to render
264
353
  // 3. Forwards the optional `loader` export for SSR data hydration
265
- const loadFn = `() => import(${filePath}).then(mod => ({ default: ${tagName}, loader: mod.loader ?? null }))`;
354
+ // 4. (P2-2) If a co-located or directory _error.ts exists, imports it as a side-effect
355
+ // and returns its tag name as `errorTag` for per-route error boundaries.
356
+ let loadFn;
357
+ if (routeErrorFilePath) {
358
+ const errorPath = JSON.stringify(routeErrorFilePath);
359
+ const errorTagLiteral = JSON.stringify(routeErrorTag);
360
+ loadFn = `() => Promise.all([import(${filePath}), import(${errorPath})]).then(([mod]) => ({ default: ${tagName}, loader: mod.loader ?? null, errorTag: ${errorTagLiteral} }))`;
361
+ }
362
+ else {
363
+ loadFn = `() => import(${filePath}).then(mod => ({ default: ${tagName}, loader: mod.loader ?? null }))`;
364
+ }
266
365
  // Build meta object — only emit fields that are set
267
366
  const metaFields = [];
268
367
  if (layoutChain !== null) {
@@ -287,6 +386,10 @@ export async function generateRoutesCode(pagesDir, i18n) {
287
386
  if (title !== null) {
288
387
  metaFields.push(`title: ${JSON.stringify(title)}`);
289
388
  }
389
+ // P2-2: Per-route error tag stored in meta for SSR error boundary resolution.
390
+ if (routeErrorTag !== null) {
391
+ metaFields.push(`errorTag: ${JSON.stringify(routeErrorTag)}`);
392
+ }
290
393
  const metaStr = metaFields.length > 0 ? ` meta: { ${metaFields.join(', ')} },\n` : '';
291
394
  let mwChainBody = '';
292
395
  if (mw.length > 0) {
@@ -323,8 +426,14 @@ export async function generateRoutesCode(pagesDir, i18n) {
323
426
  }
324
427
  return buildLocaleRouteItems(routePath, loadFn, metaStr, mwChainBody, entry.isCatchAll);
325
428
  });
429
+ // P1-1: If no user-defined catch-all exists, synthesize a 404 fallback route.
430
+ // The null default tag causes _prepareRequest to return status 404.
431
+ const allRouteItems = routeItems.flat();
432
+ if (!hasCatchAll) {
433
+ allRouteItems.push(` {\n path: '/:all*',\n load: () => Promise.resolve({ default: null, loader: null }),\n }`);
434
+ }
326
435
  lines.push('const routes = [');
327
- lines.push(routeItems.flat().join(',\n'));
436
+ lines.push(allRouteItems.join(',\n'));
328
437
  lines.push(']');
329
438
  lines.push('');
330
439
  lines.push('export default routes');
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/plugin/virtual/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE9D;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,MAAc;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAC3D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IACrB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACtB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC9C,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IACrB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AACjD,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,aAAa,CAAC,MAAc;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAC3D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAChC,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,MAAc;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;IACpD,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAC9C,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,MAAc;IACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;IAClE,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAA;IAChC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAC/D,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAA;IAC7C,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,cAAc,CAAC,MAAc;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAA;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACpB,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,GAAG,CAAA;IACvF,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,aAAa,CAAC,MAAc;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAC3D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACpB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,GAAG,CAAA;IACrE,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,MAAc;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;IAC1D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAChC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,kBAAkB,CAC/B,QAAgB,EAChB,QAAgB,EAChB,WAA0B;IAE1B,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,0BAA0B;IAEpE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAEnC,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,UAAU,GAAG,QAAQ,CAAA;IACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;QACjD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;gBAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAA;gBAC9D,IAAI,KAAK;oBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YAClC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,yCAAyC,UAAU,IAAI,EAAE,GAAG,CAAC,CAAA;YAC5E,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACpC,OAAO,CAAC,WAAW,IAAI,SAAS,EAAE,GAAG,MAAM,CAAC,CAAA;AAC9C,CAAC;AAQD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAgB,EAAE,IAA6B;IACtF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,mGAAmG,CAAA;IAC5G,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IACzD,gFAAgF;IAChF,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAA;IAElE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,mGAAmG,CAAA;IAC5G,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;QAC1C,wDAAwD;QACxD,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;QAClG,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC,CAAC,CAAA;IAEF,wEAAwE;IACxE,wEAAwE;IACxE,+DAA+D;IAC/D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACtC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YAAE,OAAO,KAAK,CAAA;QACvC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QACrB,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;IAElC,0EAA0E;IAC1E,+DAA+D;IAC/D,MAAM,YAAY,GASb,MAAM,OAAO,CAAC,GAAG,CACpB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YACnD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;YACjC,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;YAC9E,OAAO;gBACL,UAAU,EAAE,iBAAiB,CAAC,GAAG,CAAC;gBAClC,MAAM;gBACN,WAAW;gBACX,UAAU,EAAE,iBAAiB,CAAC,GAAG,CAAC;gBAClC,UAAU,EAAE,iBAAiB,CAAC,GAAG,CAAC;gBAClC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;gBAC1B,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC;gBAC5B,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC;aACzB,CAAA;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;QAC1I,CAAC;IACH,CAAC,CAAC,CACH,CAAA;IAED,MAAM,KAAK,GAAa,CAAC,uDAAuD,EAAE,EAAE,CAAC,CAAA;IAErF,sFAAsF;IACtF,6FAA6F;IAC7F,SAAS,qBAAqB,CAAC,SAAiB,EAAE,MAAc,EAAE,OAAe,EAAE,WAAmB,EAAE,UAAmB;QACzH,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,UAAU,EAAE,CAAC;YACzD,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAA;QAClE,CAAC;QACD,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,MAAM,KAAK,IAAI,CAAC,aAAa,CAAA;YAC/C,MAAM,IAAI,GAAG,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,uBAAuB,CAAA;YACnE,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;YAC5F,MAAM,UAAU,GAAG,kBAAkB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAA;YACnK,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAA;QAC3E,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,SAAS,cAAc,CAAC,SAAiB,EAAE,MAAc,EAAE,OAAe,EAAE,WAAmB;QAC7F,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CACL,OAAO;gBACP,aAAa,SAAS,KAAK;gBAC3B,aAAa,MAAM,KAAK;gBACxB,OAAO;gBACP,KAAK,CACN,CAAA;QACH,CAAC;QACD,OAAO,CACL,OAAO;YACP,aAAa,SAAS,KAAK;YAC3B,aAAa,MAAM,KAAK;YACxB,OAAO;YACP,WAAW;YACX,KAAK,CACN,CAAA;IACH,CAAC;IAED,oEAAoE;IACpE,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;QAC/G,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAEjD,iEAAiE;QACjE,yEAAyE;QACzE,mFAAmF;QACnF,oEAAoE;QACpE,MAAM,MAAM,GAAG,gBAAgB,QAAQ,6BAA6B,OAAO,kCAAkC,CAAA;QAE7G,oDAAoD;QACpD,MAAM,UAAU,GAAa,EAAE,CAAA;QAC/B,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAChE,CAAC;aAAM,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAC3B,UAAU,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACtD,CAAC;QACD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,UAAU,CAAC,IAAI,CAAC,sBAAsB,UAAU,IAAI,CAAC,CAAA;QACvD,CAAC;QACD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,UAAU,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QAC9D,CAAC;QACD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,UAAU,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACtD,CAAC;QACD,4EAA4E;QAC5E,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YAC3C,UAAU,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACxD,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACpD,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;QAExF,IAAI,WAAW,GAAG,EAAE,CAAA;QACpB,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClB,2EAA2E;YAC3E,wEAAwE;YACxE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;YACpC,WAAW,GAAG,CACZ,0CAA0C;gBAC1C,uEAAuE;gBACvE,wBAAwB,SAAS,IAAI;gBACrC,sBAAsB;gBACtB,iCAAiC;gBACjC,wCAAwC;gBACxC,6CAA6C;gBAC7C,uCAAuC;gBACvC,4CAA4C;gBAC5C,2EAA2E;gBAC3E,mCAAmC;gBACnC,6EAA6E;gBAC7E,sBAAsB;gBACtB,iBAAiB;gBACjB,oDAAoD;gBACpD,2BAA2B;gBAC3B,uFAAuF;gBACvF,0CAA0C;gBAC1C,aAAa;gBACb,+BAA+B;gBAC/B,+EAA+E;gBAC/E,oEAAoE;gBACpE,aAAa;gBACb,WAAW;gBACX,0BAA0B;gBAC1B,6BAA6B;gBAC7B,UAAU,CACX,CAAA;QACH,CAAC;QAED,OAAO,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;IACzF,CAAC,CAAC,CAAA;IAEF,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAC9B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IACzC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/plugin/virtual/routes.ts"],"names":[],"mappings":"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"}