@cmj/juice 0.7.0 → 0.9.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.
- package/README.md +39 -0
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +4 -2
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/templates.d.ts +2 -0
- package/dist/cli/templates.d.ts.map +1 -1
- package/dist/cli/templates.js +41 -2
- package/dist/cli/templates.js.map +1 -1
- package/dist/compiler/discover.d.ts +13 -1
- package/dist/compiler/discover.d.ts.map +1 -1
- package/dist/compiler/discover.js +114 -2
- package/dist/compiler/discover.js.map +1 -1
- package/dist/compiler/errors.d.ts +18 -0
- package/dist/compiler/errors.d.ts.map +1 -1
- package/dist/compiler/errors.js +24 -0
- package/dist/compiler/errors.js.map +1 -1
- package/dist/compiler/parse.d.ts +16 -0
- package/dist/compiler/parse.d.ts.map +1 -1
- package/dist/compiler/parse.js +21 -0
- package/dist/compiler/parse.js.map +1 -1
- package/dist/compiler/plugin.d.ts.map +1 -1
- package/dist/compiler/plugin.js +38 -2
- package/dist/compiler/plugin.js.map +1 -1
- package/dist/runtime/api.d.ts +22 -0
- package/dist/runtime/api.d.ts.map +1 -0
- package/dist/runtime/api.js +59 -0
- package/dist/runtime/api.js.map +1 -0
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/middleware.d.ts +37 -0
- package/dist/runtime/middleware.d.ts.map +1 -0
- package/dist/runtime/middleware.js +49 -0
- package/dist/runtime/middleware.js.map +1 -0
- package/dist/runtime/render.d.ts.map +1 -1
- package/dist/runtime/render.js +4 -2
- package/dist/runtime/render.js.map +1 -1
- package/dist/runtime/router.d.ts.map +1 -1
- package/dist/runtime/router.js +239 -18
- package/dist/runtime/router.js.map +1 -1
- package/dist/runtime/types.d.ts +34 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -147,8 +147,47 @@ import styles from './Button.module.css';
|
|
|
147
147
|
|
|
148
148
|
PostCSS, Sass, Less, Stylus — anything Vite supports works automatically.
|
|
149
149
|
|
|
150
|
+
## Security
|
|
151
|
+
|
|
152
|
+
Juice ships secure defaults out of the box.
|
|
153
|
+
|
|
154
|
+
### CSRF Protection
|
|
155
|
+
|
|
156
|
+
All mutating requests (POST, PUT, PATCH, DELETE) validate the `Origin` header against the `Host` header. Requests without a matching origin are rejected with `403 Forbidden`.
|
|
157
|
+
|
|
158
|
+
```ts
|
|
159
|
+
// Enabled by default — no action needed.
|
|
160
|
+
const handler = createRouter(manifest);
|
|
161
|
+
|
|
162
|
+
// Allow specific cross-origin callers:
|
|
163
|
+
const handler = createRouter(manifest, {
|
|
164
|
+
csrfProtection: {
|
|
165
|
+
allowedOrigins: ['https://admin.example.com'],
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
// Disable entirely (not recommended):
|
|
170
|
+
const handler = createRouter(manifest, { csrfProtection: false });
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Client Component Isolation
|
|
174
|
+
|
|
175
|
+
`'use client'` modules that import Node.js builtins (`fs`, `child_process`, `net`, etc.) fail at **build time**:
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
JuiceClientBoundaryError: components/Upload.tsx is a 'use client' module
|
|
179
|
+
but imports Node.js builtin "fs". Move this logic to a server action.
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Security Headers
|
|
183
|
+
|
|
184
|
+
- Error/404 responses include `Cache-Control: no-store` and `Content-Type: text/plain`
|
|
185
|
+
- HEAD requests unconditionally return empty bodies (RFC 9110 §9.3.2)
|
|
186
|
+
- CSS bootstrap script injection mitigated via `JSON.stringify` escaping
|
|
187
|
+
|
|
150
188
|
## Features
|
|
151
189
|
|
|
190
|
+
- **Security by default** — CSRF protection, client boundary isolation, secure error headers
|
|
152
191
|
- **React 19 RSC** — Server Components, Suspense, streaming SSR
|
|
153
192
|
- **Server Actions** — `'use server'` with FormData + opt-in `ActionContext` for headers, cookies, params
|
|
154
193
|
- **SPA navigation** — `<Link>` component + `useRouter()` hook + Navigation API bootstrap in dev
|
package/dist/cli/create.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/cli/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/cli/create.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAUlF,qBAAa,gBAAiB,SAAQ,KAAK;IAChC,IAAI,SAAsB;CACpC;AAkBD;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC,CA0C1D;AAID,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,+CAA+C;IAC/C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,kCAAkC;IAClC,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,gBAAgB,GACzB,eAAe,CA6CjB"}
|
package/dist/cli/create.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { mkdirSync, writeFileSync, existsSync } from 'node:fs';
|
|
7
7
|
import { join, resolve } from 'node:path';
|
|
8
8
|
import { createInterface } from 'node:readline';
|
|
9
|
-
import { packageJson, tsconfig, viteConfig, serverEntry, homeRoute, rootLayout, globalCss, flightManifest, wranglerToml, DEPLOY_TARGETS, TARGET_LABELS, } from './templates.js';
|
|
9
|
+
import { packageJson, tsconfig, viteConfig, serverEntry, homeRoute, rootLayout, globalCss, flightManifest, wranglerToml, middlewareTemplate, apiRoute, DEPLOY_TARGETS, TARGET_LABELS, } from './templates.js';
|
|
10
10
|
export { DEPLOY_TARGETS, TARGET_LABELS } from './templates.js';
|
|
11
11
|
// ── Validation ──────────────────────────────────────────────────
|
|
12
12
|
/**
|
|
@@ -87,7 +87,7 @@ export function createApp(name, options) {
|
|
|
87
87
|
' Choose a different name or remove the existing directory.\n');
|
|
88
88
|
}
|
|
89
89
|
// Create directory structure
|
|
90
|
-
mkdirSync(join(dir, 'app', 'routes'), { recursive: true });
|
|
90
|
+
mkdirSync(join(dir, 'app', 'routes', 'api'), { recursive: true });
|
|
91
91
|
// Write files
|
|
92
92
|
const files = [
|
|
93
93
|
['package.json', packageJson({ name, target })],
|
|
@@ -98,6 +98,8 @@ export function createApp(name, options) {
|
|
|
98
98
|
['app/routes/layout.tsx', rootLayout()],
|
|
99
99
|
['app/routes/global.css', globalCss()],
|
|
100
100
|
['app/routes/home.tsx', homeRoute()],
|
|
101
|
+
['app/routes/middleware.ts', middlewareTemplate()],
|
|
102
|
+
['app/routes/api/health.ts', apiRoute()],
|
|
101
103
|
];
|
|
102
104
|
// Cloudflare Workers requires wrangler.toml
|
|
103
105
|
if (target === 'cloudflare') {
|
package/dist/cli/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/cli/create.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/cli/create.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,8BAA8B;AAC9B,iEAAiE;AACjE,qDAAqD;AACrD,oEAAoE;AAEpE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACL,WAAW,EACX,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,SAAS,EACT,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,aAAa,GACd,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAqB,MAAM,gBAAgB,CAAC;AAElF,mEAAmE;AAEnE;;;GAGG;AACH,MAAM,UAAU,GAAG,0DAA0D,CAAC;AAE9E,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,IAAI,GAAG,kBAAkB,CAAC;CACpC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,gBAAgB,CACxB,iEAAiE,CAClE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,gBAAgB,CACxB,yBAAyB,IAAI,MAAM;YACjC,6DAA6D,CAChE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,mEAAmE;AAEnE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7E,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAE,CAAC;QAClC,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACnC,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,wCAAwC,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/D,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAE9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,CAAC;gBACf,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;gBAChD,OAAO,CAAC,cAAc,CAAC,KAAK,CAAE,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;YAED,uBAAuB;YACvB,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;YACtD,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,CAAC;gBACf,OAAO;YACT,CAAC;YAED,kCAAkC;YAClC,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,iBAAiB,CAAC,CAAC;YAC3D,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAoBD;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CACvB,IAAY,EACZ,OAA0B;IAE1B,YAAY,CAAC,IAAI,CAAC,CAAC;IAEnB,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC;IACxC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAE/B,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,gBAAgB,CACxB,cAAc,IAAI,qBAAqB;YACrC,+DAA+D,CAClE,CAAC;IACJ,CAAC;IAED,6BAA6B;IAC7B,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElE,cAAc;IACd,MAAM,KAAK,GAAuB;QAChC,CAAC,cAAc,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/C,CAAC,eAAe,EAAE,QAAQ,EAAE,CAAC;QAC7B,CAAC,gBAAgB,EAAE,UAAU,EAAE,CAAC;QAChC,CAAC,sBAAsB,EAAE,cAAc,EAAE,CAAC;QAC1C,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC,uBAAuB,EAAE,UAAU,EAAE,CAAC;QACvC,CAAC,uBAAuB,EAAE,SAAS,EAAE,CAAC;QACtC,CAAC,qBAAqB,EAAE,SAAS,EAAE,CAAC;QACpC,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,CAAC;QAClD,CAAC,0BAA0B,EAAE,QAAQ,EAAE,CAAC;KACzC,CAAC;IAEF,4CAA4C;IAC5C,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC;QACpC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,OAAO;QACL,GAAG;QACH,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;QAClC,MAAM;KACP,CAAC;AACJ,CAAC"}
|
package/dist/cli/templates.d.ts
CHANGED
|
@@ -14,5 +14,7 @@ export declare function homeRoute(): string;
|
|
|
14
14
|
export declare function rootLayout(): string;
|
|
15
15
|
export declare function globalCss(): string;
|
|
16
16
|
export declare function wranglerToml(name: string): string;
|
|
17
|
+
export declare function middlewareTemplate(): string;
|
|
18
|
+
export declare function apiRoute(): string;
|
|
17
19
|
export {};
|
|
18
20
|
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/cli/templates.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC;AAElE,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAAmD,CAAC;AAEtG,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAKtD,CAAC;AAEF,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,eAAe,GAAG,MAAM,CAqCrE;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAiBjC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAQnC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAUvC;
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/cli/templates.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC;AAElE,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAAmD,CAAC;AAEtG,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAKtD,CAAC;AAEF,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,eAAe,GAAG,MAAM,CAqCrE;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAiBjC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAQnC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAUvC;AA8DD,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAExD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAclC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAiBnC;AAED,wBAAgB,SAAS,IAAI,MAAM,CAqClC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAkB3C;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAajC"}
|
package/dist/cli/templates.js
CHANGED
|
@@ -27,7 +27,7 @@ export function packageJson({ name, target }) {
|
|
|
27
27
|
typecheck: 'tsc --noEmit',
|
|
28
28
|
},
|
|
29
29
|
dependencies: {
|
|
30
|
-
'@cmj/juice': '^0.
|
|
30
|
+
'@cmj/juice': '^0.9.0',
|
|
31
31
|
react: '^19.0.0',
|
|
32
32
|
'react-dom': '^19.0.0',
|
|
33
33
|
},
|
|
@@ -86,7 +86,13 @@ export function flightManifest() {
|
|
|
86
86
|
const SERVER_PREAMBLE = `import { createRouter } from '@cmj/juice/runtime';
|
|
87
87
|
import manifest from './flight-manifest.json';
|
|
88
88
|
|
|
89
|
-
const handler = createRouter(manifest
|
|
89
|
+
const handler = createRouter(manifest, {
|
|
90
|
+
// CSRF protection is enabled by default.
|
|
91
|
+
// Customize allowed origins for cross-origin server actions:
|
|
92
|
+
// csrfProtection: { allowedOrigins: ['https://admin.example.com'] },
|
|
93
|
+
// Or disable entirely (not recommended):
|
|
94
|
+
// csrfProtection: false,
|
|
95
|
+
});
|
|
90
96
|
`;
|
|
91
97
|
const SERVER_ADAPTERS = {
|
|
92
98
|
bun: `
|
|
@@ -214,4 +220,37 @@ compatibility_date = "2024-12-01"
|
|
|
214
220
|
compatibility_flags = ["nodejs_compat"]
|
|
215
221
|
`;
|
|
216
222
|
}
|
|
223
|
+
export function middlewareTemplate() {
|
|
224
|
+
return `// Per-directory middleware — runs before every route in this directory.
|
|
225
|
+
// Return a Response to short-circuit, or call next() to continue.
|
|
226
|
+
//
|
|
227
|
+
// Learn more: https://github.com/cmjio/juice#middleware
|
|
228
|
+
|
|
229
|
+
export default async function middleware(
|
|
230
|
+
req: Request,
|
|
231
|
+
next: () => Promise<Response>,
|
|
232
|
+
): Promise<Response> {
|
|
233
|
+
// Example: log every request
|
|
234
|
+
const start = performance.now();
|
|
235
|
+
const res = await next();
|
|
236
|
+
const ms = (performance.now() - start).toFixed(1);
|
|
237
|
+
console.log(\`\${req.method} \${new URL(req.url).pathname} → \${res.status} (\${ms}ms)\`);
|
|
238
|
+
return res;
|
|
239
|
+
}
|
|
240
|
+
`;
|
|
241
|
+
}
|
|
242
|
+
export function apiRoute() {
|
|
243
|
+
return `// Route-as-API — export named HTTP methods alongside your page component.
|
|
244
|
+
// The router dispatches by method + Accept header automatically.
|
|
245
|
+
//
|
|
246
|
+
// Learn more: https://github.com/cmjio/juice#route-as-api
|
|
247
|
+
|
|
248
|
+
import type { ActionContext } from '@cmj/juice/runtime';
|
|
249
|
+
|
|
250
|
+
// GET /api/health → JSON
|
|
251
|
+
export async function GET(_req: Request, _ctx: ActionContext) {
|
|
252
|
+
return Response.json({ status: 'ok', timestamp: new Date().toISOString() });
|
|
253
|
+
}
|
|
254
|
+
`;
|
|
255
|
+
}
|
|
217
256
|
//# sourceMappingURL=templates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/cli/templates.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,kCAAkC;AAClC,mEAAmE;AACnE,oEAAoE;AAIpE,MAAM,CAAC,MAAM,cAAc,GAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAU,CAAC;AAEtG,MAAM,CAAC,MAAM,aAAa,GAAiC;IACzD,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,SAAS;IACf,UAAU,EAAE,oBAAoB;IAChC,IAAI,EAAE,MAAM;CACb,CAAC;AAOF,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAmB;IAC3D,MAAM,WAAW,GAAiC;QAChD,GAAG,EAAE,eAAe;QACpB,IAAI,EAAE,qBAAqB;QAC3B,UAAU,EAAE,cAAc;QAC1B,IAAI,EAAE,6CAA6C;KACpD,CAAC;IAEF,MAAM,GAAG,GAA4B;QACnC,IAAI;QACJ,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC;YAC1B,SAAS,EAAE,cAAc;SAC1B;QACD,YAAY,EAAE;YACZ,YAAY,EAAE,QAAQ;YACtB,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,SAAS;SACvB;QACD,eAAe,EAAE;YACf,cAAc,EAAE,SAAS;YACzB,kBAAkB,EAAE,SAAS;YAC7B,UAAU,EAAE,QAAQ;YACpB,IAAI,EAAE,QAAQ;SACf;KACF,CAAC;IAEF,2DAA2D;IAC3D,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACrB,GAAG,CAAC,eAA0C,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;IAC7E,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,MAAM,GAAG;QACb,eAAe,EAAE;YACf,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,gBAAgB,EAAE,SAAS;YAC3B,GAAG,EAAE,WAAW;YAChB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,IAAI;YACrB,iBAAiB,EAAE,IAAI;YACvB,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,IAAI;SACtB;QACD,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;KACjC,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO;;;;;;CAMR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,mEAAmE;IACnE,4EAA4E;IAC5E,2EAA2E;IAC3E,MAAM,QAAQ,GAAG;QACf,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;KAClB,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAClD,CAAC;AAED,mEAAmE;AAEnE,MAAM,eAAe,GAAG
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/cli/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Discovered route entry with optional layout
|
|
2
|
+
* Discovered route entry with optional layout and middleware chains.
|
|
3
3
|
* @internal
|
|
4
4
|
*/
|
|
5
5
|
export interface DiscoveredRoute {
|
|
6
6
|
moduleId: string;
|
|
7
7
|
layouts?: string[];
|
|
8
|
+
middleware?: string[];
|
|
9
|
+
methods?: string[];
|
|
8
10
|
}
|
|
9
11
|
/**
|
|
10
12
|
* Recursively discover routes from the `app/routes/` directory.
|
|
@@ -24,6 +26,16 @@ export interface DiscoveredRoute {
|
|
|
24
26
|
* @internal
|
|
25
27
|
*/
|
|
26
28
|
export declare function _discoverRoutes(projectRoot: string): Record<string, DiscoveredRoute> | null;
|
|
29
|
+
/**
|
|
30
|
+
* Scan source text for named HTTP method exports using regex.
|
|
31
|
+
*
|
|
32
|
+
* Matches:
|
|
33
|
+
* - `export function GET(` / `export async function GET(`
|
|
34
|
+
* - `export const GET =` / `export const GET:`
|
|
35
|
+
*
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
export declare function _detectMethodExports(source: string): string[];
|
|
27
39
|
/**
|
|
28
40
|
* Convert a file path (relative to routes/) into a URL pattern.
|
|
29
41
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/compiler/discover.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/compiler/discover.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAgCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,IAAI,CAwBxC;AAyMD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAY7D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAetD"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
//
|
|
12
12
|
// This module is pure — no side effects, deterministic output.
|
|
13
13
|
// ─────────────────────────────────────────────────────────────────
|
|
14
|
-
import { readdirSync, statSync, existsSync } from 'node:fs';
|
|
14
|
+
import { readdirSync, readFileSync, statSync, existsSync } from 'node:fs';
|
|
15
15
|
import { join, relative, extname, dirname } from 'node:path';
|
|
16
16
|
/**
|
|
17
17
|
* Route extensions we recognize as valid route modules.
|
|
@@ -28,6 +28,16 @@ const IGNORED = new Set(['__tests__', '__test__', '_', '.']);
|
|
|
28
28
|
* @internal
|
|
29
29
|
*/
|
|
30
30
|
const LAYOUT_BASENAME = 'layout';
|
|
31
|
+
/**
|
|
32
|
+
* Basename (without extension) that signals a per-directory middleware.
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
35
|
+
const MIDDLEWARE_BASENAME = 'middleware';
|
|
36
|
+
/**
|
|
37
|
+
* HTTP method names recognized as API handler exports.
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
const HTTP_METHODS = new Set(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']);
|
|
31
41
|
/**
|
|
32
42
|
* Recursively discover routes from the `app/routes/` directory.
|
|
33
43
|
*
|
|
@@ -59,6 +69,10 @@ export function _discoverRoutes(projectRoot) {
|
|
|
59
69
|
_scanDir(routesDir, routesDir, routes);
|
|
60
70
|
// Now resolve layout chains for each route
|
|
61
71
|
_resolveLayouts(routesDir, routes);
|
|
72
|
+
// Resolve middleware chains for each route (same pattern as layouts)
|
|
73
|
+
_resolveMiddleware(routesDir, routes);
|
|
74
|
+
// Detect HTTP method exports for Route-as-API
|
|
75
|
+
_detectAllMethodExports(join(routesDir, '..', '..'), routes);
|
|
62
76
|
return Object.keys(routes).length > 0 ? routes : null;
|
|
63
77
|
}
|
|
64
78
|
/**
|
|
@@ -81,10 +95,12 @@ function _scanDir(dir, routesRoot, routes) {
|
|
|
81
95
|
const ext = extname(entry.name);
|
|
82
96
|
if (!ROUTE_EXTENSIONS.has(ext))
|
|
83
97
|
continue;
|
|
84
|
-
// Skip layout files — they're not routes
|
|
98
|
+
// Skip layout and middleware files — they're not routes
|
|
85
99
|
const basename = entry.name.replace(/\.[jt]sx?$/, '');
|
|
86
100
|
if (basename === LAYOUT_BASENAME)
|
|
87
101
|
continue;
|
|
102
|
+
if (basename === MIDDLEWARE_BASENAME)
|
|
103
|
+
continue;
|
|
88
104
|
const relPath = relative(routesRoot, fullPath);
|
|
89
105
|
const urlPattern = _fileToPattern(relPath);
|
|
90
106
|
const moduleId = './' + join('app', 'routes', relPath).replace(/\\/g, '/');
|
|
@@ -155,6 +171,102 @@ function _findLayoutFile(dir) {
|
|
|
155
171
|
}
|
|
156
172
|
return null;
|
|
157
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Find a middleware file in a directory (checks all valid extensions).
|
|
176
|
+
* @internal
|
|
177
|
+
*/
|
|
178
|
+
function _findMiddlewareFile(dir) {
|
|
179
|
+
for (const ext of ROUTE_EXTENSIONS) {
|
|
180
|
+
const candidate = join(dir, `middleware${ext}`);
|
|
181
|
+
if (existsSync(candidate))
|
|
182
|
+
return candidate;
|
|
183
|
+
}
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Resolve middleware chains for all discovered routes.
|
|
188
|
+
*
|
|
189
|
+
* For each route, walks from its directory up to routesRoot,
|
|
190
|
+
* collecting any `middleware.ts` files found. The result is ordered
|
|
191
|
+
* root → leaf (outermost middleware first).
|
|
192
|
+
*
|
|
193
|
+
* @internal
|
|
194
|
+
*/
|
|
195
|
+
function _resolveMiddleware(routesRoot, routes) {
|
|
196
|
+
for (const [, entry] of Object.entries(routes)) {
|
|
197
|
+
const moduleRelative = entry.moduleId.replace(/^\.\/app\/routes\//, '');
|
|
198
|
+
const moduleDir = dirname(moduleRelative);
|
|
199
|
+
const absModuleDir = moduleDir === '.'
|
|
200
|
+
? routesRoot
|
|
201
|
+
: join(routesRoot, moduleDir);
|
|
202
|
+
const mw = _collectConventionFiles(routesRoot, absModuleDir, _findMiddlewareFile);
|
|
203
|
+
if (mw.length > 0) {
|
|
204
|
+
entry.middleware = mw;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Collect convention files (layout or middleware) from a directory
|
|
210
|
+
* up to routesRoot. Returns moduleIds ordered root → leaf.
|
|
211
|
+
* @internal
|
|
212
|
+
*/
|
|
213
|
+
function _collectConventionFiles(routesRoot, dir, finder) {
|
|
214
|
+
const files = [];
|
|
215
|
+
let current = dir;
|
|
216
|
+
for (;;) {
|
|
217
|
+
const found = finder(current);
|
|
218
|
+
if (found) {
|
|
219
|
+
const relPath = relative(join(routesRoot, '..', '..'), found);
|
|
220
|
+
files.unshift('./' + relPath.replace(/\\/g, '/'));
|
|
221
|
+
}
|
|
222
|
+
if (current === routesRoot)
|
|
223
|
+
break;
|
|
224
|
+
const parent = dirname(current);
|
|
225
|
+
if (parent === current)
|
|
226
|
+
break;
|
|
227
|
+
current = parent;
|
|
228
|
+
}
|
|
229
|
+
return files;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Detect HTTP method exports (GET, POST, PUT, etc.) from all route files.
|
|
233
|
+
* Uses a fast regex scan — no AST parsing needed.
|
|
234
|
+
* @internal
|
|
235
|
+
*/
|
|
236
|
+
function _detectAllMethodExports(projectRoot, routes) {
|
|
237
|
+
for (const [, entry] of Object.entries(routes)) {
|
|
238
|
+
const absPath = join(projectRoot, entry.moduleId.replace(/^\.\//, ''));
|
|
239
|
+
if (!existsSync(absPath))
|
|
240
|
+
continue;
|
|
241
|
+
const source = readFileSync(absPath, 'utf-8');
|
|
242
|
+
const methods = _detectMethodExports(source);
|
|
243
|
+
if (methods.length > 0) {
|
|
244
|
+
entry.methods = methods;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Scan source text for named HTTP method exports using regex.
|
|
250
|
+
*
|
|
251
|
+
* Matches:
|
|
252
|
+
* - `export function GET(` / `export async function GET(`
|
|
253
|
+
* - `export const GET =` / `export const GET:`
|
|
254
|
+
*
|
|
255
|
+
* @internal
|
|
256
|
+
*/
|
|
257
|
+
export function _detectMethodExports(source) {
|
|
258
|
+
const methods = [];
|
|
259
|
+
// Match: export [async] function METHOD( or export const METHOD
|
|
260
|
+
const re = /export\s+(?:async\s+)?function\s+([A-Z]+)\s*\(|export\s+(?:const|let|var)\s+([A-Z]+)\s*[=:]/g;
|
|
261
|
+
let match;
|
|
262
|
+
while ((match = re.exec(source)) !== null) {
|
|
263
|
+
const name = match[1] ?? match[2];
|
|
264
|
+
if (name && HTTP_METHODS.has(name)) {
|
|
265
|
+
methods.push(name);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return [...new Set(methods)];
|
|
269
|
+
}
|
|
158
270
|
/**
|
|
159
271
|
* Convert a file path (relative to routes/) into a URL pattern.
|
|
160
272
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/compiler/discover.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,2CAA2C;AAC3C,EAAE;AACF,yEAAyE;AACzE,kCAAkC;AAClC,uCAAuC;AACvC,6CAA6C;AAC7C,sCAAsC;AACtC,4CAA4C;AAC5C,mEAAmE;AACnE,EAAE;AACF,+DAA+D;AAC/D,oEAAoE;AAEpE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/compiler/discover.ts"],"names":[],"mappings":"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"}
|
|
@@ -88,4 +88,22 @@ export declare class JuiceManifestError extends Error {
|
|
|
88
88
|
readonly name = "JuiceManifestError";
|
|
89
89
|
constructor(outDir: string, fullPath: string, cause?: unknown);
|
|
90
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Thrown when a `'use client'` module imports a Node.js builtin module.
|
|
93
|
+
*
|
|
94
|
+
* Client components run in the browser and cannot use Node.js APIs like
|
|
95
|
+
* `fs`, `child_process`, `net`, etc. These imports must be moved to a
|
|
96
|
+
* server component or server action.
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```
|
|
100
|
+
* JuiceClientBoundaryError: components/Upload.tsx is a 'use client' module
|
|
101
|
+
* but imports Node.js builtin "fs". Node.js APIs cannot be used in client
|
|
102
|
+
* components. Move this logic to a server action or server component.
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
export declare class JuiceClientBoundaryError extends Error {
|
|
106
|
+
readonly name = "JuiceClientBoundaryError";
|
|
107
|
+
constructor(file: string, builtins: string[]);
|
|
108
|
+
}
|
|
91
109
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/compiler/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,YAAY,CAAC;AAExD;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,SAAkB,IAAI,yBAAyB;gBAEnC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAO/D;AAED;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAkB,IAAI,sBAAsB;gBAEhC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,aAA4B;CAOlE;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,SAAkB,IAAI,+BAA+B;gBAEzC,IAAI,EAAE,MAAM;CAOzB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,SAAkB,IAAI,4BAA4B;gBAEtC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM;CASnE;AAED;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAkB,IAAI,wBAAwB;gBAElC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAQ9D"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/compiler/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,YAAY,CAAC;AAExD;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,SAAkB,IAAI,yBAAyB;gBAEnC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAO/D;AAED;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAkB,IAAI,sBAAsB;gBAEhC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,aAA4B;CAOlE;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,SAAkB,IAAI,+BAA+B;gBAEzC,IAAI,EAAE,MAAM;CAOzB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,SAAkB,IAAI,4BAA4B;gBAEtC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM;CASnE;AAED;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAkB,IAAI,wBAAwB;gBAElC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAQ9D;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,SAAkB,IAAI,8BAA8B;gBAExC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;CAS7C"}
|
package/dist/compiler/errors.js
CHANGED
|
@@ -107,4 +107,28 @@ export class JuiceManifestError extends Error {
|
|
|
107
107
|
this.cause = cause;
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Thrown when a `'use client'` module imports a Node.js builtin module.
|
|
112
|
+
*
|
|
113
|
+
* Client components run in the browser and cannot use Node.js APIs like
|
|
114
|
+
* `fs`, `child_process`, `net`, etc. These imports must be moved to a
|
|
115
|
+
* server component or server action.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```
|
|
119
|
+
* JuiceClientBoundaryError: components/Upload.tsx is a 'use client' module
|
|
120
|
+
* but imports Node.js builtin "fs". Node.js APIs cannot be used in client
|
|
121
|
+
* components. Move this logic to a server action or server component.
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export class JuiceClientBoundaryError extends Error {
|
|
125
|
+
name = 'JuiceClientBoundaryError';
|
|
126
|
+
constructor(file, builtins) {
|
|
127
|
+
const list = builtins.map(b => `"${b}"`).join(', ');
|
|
128
|
+
super(`${file} is a 'use client' module but imports Node.js ` +
|
|
129
|
+
`builtin${builtins.length > 1 ? 's' : ''} ${list}. ` +
|
|
130
|
+
`Node.js APIs cannot be used in client components — they run ` +
|
|
131
|
+
`in the browser. Move this logic to a server action or server component.`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
110
134
|
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/compiler/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC1B,IAAI,GAAG,qBAAqB,CAAC;IAE/C,YAAY,IAAY,EAAE,cAAsB,EAAE,IAAY;QAC5D,KAAK,CACH,+CAA+C,IAAI,IAAI;YACvD,UAAU,cAAc,aAAa,IAAI,YAAY;YACrD,wDAAwD,CACzD,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACvB,IAAI,GAAG,kBAAkB,CAAC;IAE5C,YAAY,IAAY,EAAE,YAA2B,YAAY;QAC/D,KAAK,CACH,GAAG,IAAI,WAAW,SAAS,mCAAmC;YAC9D,sDAAsD;YACtD,8DAA8D,CAC/D,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAChC,IAAI,GAAG,2BAA2B,CAAC;IAErD,YAAY,IAAY;QACtB,KAAK,CACH,GAAG,IAAI,2DAA2D;YAClE,kEAAkE;YAClE,mEAAmE,CACpE,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC7B,IAAI,GAAG,wBAAwB,CAAC;IAElD,YAAY,IAAY,EAAE,SAAwB,EAAE,MAAc;QAChE,KAAK,CACH,GAAG,IAAI,wBAAwB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW;YAChE,IAAI,SAAS,uDAAuD;YACpE,gEAAgE;YAChE,sCAAsC;YACtC,gDAAgD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAC1E,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IACzB,IAAI,GAAG,oBAAoB,CAAC;IAE9C,YAAY,MAAc,EAAE,QAAgB,EAAE,KAAe;QAC3D,KAAK,CACH,2CAA2C,MAAM,IAAI;YACrD,sDAAsD;YACtD,SAAS,QAAQ,EAAE,CACpB,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/compiler/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC1B,IAAI,GAAG,qBAAqB,CAAC;IAE/C,YAAY,IAAY,EAAE,cAAsB,EAAE,IAAY;QAC5D,KAAK,CACH,+CAA+C,IAAI,IAAI;YACvD,UAAU,cAAc,aAAa,IAAI,YAAY;YACrD,wDAAwD,CACzD,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACvB,IAAI,GAAG,kBAAkB,CAAC;IAE5C,YAAY,IAAY,EAAE,YAA2B,YAAY;QAC/D,KAAK,CACH,GAAG,IAAI,WAAW,SAAS,mCAAmC;YAC9D,sDAAsD;YACtD,8DAA8D,CAC/D,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAChC,IAAI,GAAG,2BAA2B,CAAC;IAErD,YAAY,IAAY;QACtB,KAAK,CACH,GAAG,IAAI,2DAA2D;YAClE,kEAAkE;YAClE,mEAAmE,CACpE,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC7B,IAAI,GAAG,wBAAwB,CAAC;IAElD,YAAY,IAAY,EAAE,SAAwB,EAAE,MAAc;QAChE,KAAK,CACH,GAAG,IAAI,wBAAwB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW;YAChE,IAAI,SAAS,uDAAuD;YACpE,gEAAgE;YAChE,sCAAsC;YACtC,gDAAgD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAC1E,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IACzB,IAAI,GAAG,oBAAoB,CAAC;IAE9C,YAAY,MAAc,EAAE,QAAgB,EAAE,KAAe;QAC3D,KAAK,CACH,2CAA2C,MAAM,IAAI;YACrD,sDAAsD;YACtD,SAAS,QAAQ,EAAE,CACpB,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAC/B,IAAI,GAAG,0BAA0B,CAAC;IAEpD,YAAY,IAAY,EAAE,QAAkB;QAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,KAAK,CACH,GAAG,IAAI,gDAAgD;YACvD,UAAU,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI;YACpD,8DAA8D;YAC9D,yEAAyE,CAC1E,CAAC;IACJ,CAAC;CACF"}
|
package/dist/compiler/parse.d.ts
CHANGED
|
@@ -9,6 +9,12 @@
|
|
|
9
9
|
* @internal
|
|
10
10
|
*/
|
|
11
11
|
import type { ExportRecord } from './types.js';
|
|
12
|
+
/** Minimal acorn AST node shape. */
|
|
13
|
+
interface AcornNode {
|
|
14
|
+
readonly type: string;
|
|
15
|
+
readonly start: number;
|
|
16
|
+
readonly end: number;
|
|
17
|
+
}
|
|
12
18
|
/**
|
|
13
19
|
* Quick check for the `'use client'` substring before doing a full AST parse.
|
|
14
20
|
* Returns `false` if the directive cannot possibly be present.
|
|
@@ -123,4 +129,14 @@ export interface UnifiedDirectiveResult {
|
|
|
123
129
|
* @internal
|
|
124
130
|
*/
|
|
125
131
|
export declare function _detectDirective(ast: unknown): UnifiedDirectiveResult;
|
|
132
|
+
/**
|
|
133
|
+
* Extract all `import ... from '...'` source strings from the AST.
|
|
134
|
+
*
|
|
135
|
+
* Used by the compiler to detect Node.js builtin imports in
|
|
136
|
+
* `'use client'` modules (e.g., `import { readFileSync } from 'fs'`).
|
|
137
|
+
*
|
|
138
|
+
* @internal
|
|
139
|
+
*/
|
|
140
|
+
export declare function _extractImportSources(body: readonly AcornNode[]): string[];
|
|
141
|
+
export {};
|
|
126
142
|
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/compiler/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/compiler/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,oCAAoC;AACpC,UAAU,SAAS;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAuDD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElE;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE5D;AAMD;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAA;CAAE,GAChC;IAAE,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;CAAE,CAAC;AAE/E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,CAiBzD;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAA;CAAE,GAChC;IAAE,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;CAAE,CAAC;AAE/E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,qBAAqB,CAiBrE;AAMD;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,YAAY,GAAG,IAAI,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,uDAAuD;IACvD,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IAEtC,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAE1C,8DAA8D;IAC9D,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAE5C;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;CACtC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAiDrE;AAwHD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,EAAE,CAc1E"}
|
package/dist/compiler/parse.js
CHANGED
|
@@ -243,4 +243,25 @@ function _extractBarrelReExports(body) {
|
|
|
243
243
|
}
|
|
244
244
|
return sources;
|
|
245
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Extract all `import ... from '...'` source strings from the AST.
|
|
248
|
+
*
|
|
249
|
+
* Used by the compiler to detect Node.js builtin imports in
|
|
250
|
+
* `'use client'` modules (e.g., `import { readFileSync } from 'fs'`).
|
|
251
|
+
*
|
|
252
|
+
* @internal
|
|
253
|
+
*/
|
|
254
|
+
export function _extractImportSources(body) {
|
|
255
|
+
const sources = [];
|
|
256
|
+
for (const node of body) {
|
|
257
|
+
if (node.type === 'ImportDeclaration') {
|
|
258
|
+
const importDecl = node;
|
|
259
|
+
const source = importDecl.source?.value;
|
|
260
|
+
if (typeof source === 'string') {
|
|
261
|
+
sources.push(source);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return sources;
|
|
266
|
+
}
|
|
246
267
|
//# sourceMappingURL=parse.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/compiler/parse.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/compiler/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/compiler/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/compiler/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAmErD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,GAAG,CAgqB/D"}
|