@webtypen/webframez-react 0.0.3 → 0.0.4
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 +25 -2
- package/bin/webframez-react.mjs +21 -0
- package/dist/http.cjs +20 -8
- package/dist/http.js +20 -8
- package/dist/index.cjs +20 -8
- package/dist/index.js +20 -8
- package/dist/webframez-core.cjs +20 -8
- package/dist/webframez-core.js +20 -8
- package/package.json +4 -2
- package/register.cjs +1 -0
package/README.md
CHANGED
|
@@ -228,10 +228,10 @@ Recommended scripts:
|
|
|
228
228
|
"build:server": "webframez-react build:server",
|
|
229
229
|
"build:client": "webframez-react build:client",
|
|
230
230
|
"build": "npm run build:server && npm run build:client",
|
|
231
|
-
"start": "
|
|
231
|
+
"start": "NODE_OPTIONS='--conditions react-server -r @webtypen/webframez-react/register' node start-server.cjs",
|
|
232
232
|
"watch:server": "webframez-react watch:server",
|
|
233
233
|
"watch:client": "webframez-react watch:client",
|
|
234
|
-
"serve:watch": "
|
|
234
|
+
"serve:watch": "NODE_OPTIONS='--conditions react-server -r @webtypen/webframez-react/register' node --watch start-server.cjs",
|
|
235
235
|
"watch": "sh -c 'npm run watch:server & npm run watch:client & npm run serve:watch & wait'",
|
|
236
236
|
"dev": "sh -c 'npm run watch:server & npm run watch:client & npm run serve:watch & wait'"
|
|
237
237
|
}
|
|
@@ -242,6 +242,29 @@ Notes:
|
|
|
242
242
|
- `build` compiles the server output (`pages`, `server.ts`) and the browser client bundle (`client.tsx` + RSC manifests).
|
|
243
243
|
- `start` runs the built app in React Server mode.
|
|
244
244
|
- `watch` / `dev` keep TypeScript and webpack in watch mode and restart Node automatically when server output changes.
|
|
245
|
+
- `@webtypen/webframez-react/register` activates the React Server module register, so `"use client"` modules are treated correctly in Node and in the package's SSR worker.
|
|
246
|
+
|
|
247
|
+
If you run an existing `webframez-core` app directly with `ts-node` or `node`, use the same preload:
|
|
248
|
+
|
|
249
|
+
```json
|
|
250
|
+
{
|
|
251
|
+
"scripts": {
|
|
252
|
+
"start": "NODE_OPTIONS='--conditions react-server -r @webtypen/webframez-react/register' ts-node ./app.ts",
|
|
253
|
+
"watch:app": "nodemon --exec \"NODE_OPTIONS='--conditions react-server -r @webtypen/webframez-react/register' ts-node ./app.ts\""
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Or via the shipped wrapper command:
|
|
259
|
+
|
|
260
|
+
```json
|
|
261
|
+
{
|
|
262
|
+
"scripts": {
|
|
263
|
+
"start": "TS_NODE_FILES=true webframez-react exec -- ts-node ./app.ts",
|
|
264
|
+
"watch:app": "nodemon --exec \"TS_NODE_FILES=true webframez-react exec -- ts-node ./app.ts\""
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
```
|
|
245
268
|
|
|
246
269
|
## CLI Config and Custom Entry Paths
|
|
247
270
|
|
package/bin/webframez-react.mjs
CHANGED
|
@@ -27,6 +27,7 @@ function printHelp() {
|
|
|
27
27
|
" webframez-react watch:client",
|
|
28
28
|
" webframez-react build:server:webpack",
|
|
29
29
|
" webframez-react watch:server:webpack",
|
|
30
|
+
" webframez-react exec -- <command> [args...]",
|
|
30
31
|
"",
|
|
31
32
|
"Config fallback order:",
|
|
32
33
|
" 1) project root override file",
|
|
@@ -115,6 +116,11 @@ function resolveBinary(name) {
|
|
|
115
116
|
return name;
|
|
116
117
|
}
|
|
117
118
|
|
|
119
|
+
function buildReactServerNodeOptions() {
|
|
120
|
+
const existing = process.env.NODE_OPTIONS ? `${process.env.NODE_OPTIONS} ` : "";
|
|
121
|
+
return `${existing}--conditions react-server -r @webtypen/webframez-react/register`.trim();
|
|
122
|
+
}
|
|
123
|
+
|
|
118
124
|
async function loadProjectConfig() {
|
|
119
125
|
const configFiles = [
|
|
120
126
|
"webframez-react.config.mjs",
|
|
@@ -259,6 +265,21 @@ async function main() {
|
|
|
259
265
|
return;
|
|
260
266
|
}
|
|
261
267
|
|
|
268
|
+
if (command === "exec") {
|
|
269
|
+
if (passthroughArgsClean.length === 0) {
|
|
270
|
+
console.error("[webframez-react] Missing command for exec.");
|
|
271
|
+
printHelp();
|
|
272
|
+
process.exit(1);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
const [binaryName, ...binaryArgs] = passthroughArgsClean;
|
|
276
|
+
const code = await run(binaryName, binaryArgs, {
|
|
277
|
+
NODE_OPTIONS: buildReactServerNodeOptions(),
|
|
278
|
+
});
|
|
279
|
+
process.exit(code);
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
|
|
262
283
|
if (command === "build:client" || command === "watch:client") {
|
|
263
284
|
const config = resolveConfig("webpack.client.cjs", "webpack.client.cjs");
|
|
264
285
|
console.log(`[webframez-react] webpack config (${config.source}): ${config.path}`);
|
package/dist/http.cjs
CHANGED
|
@@ -499,14 +499,26 @@ function stripBasePath(pathname, basePath) {
|
|
|
499
499
|
}
|
|
500
500
|
function runNodeCommand(args) {
|
|
501
501
|
return new Promise((resolve, reject) => {
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
502
|
+
const execArgs = [
|
|
503
|
+
"--conditions",
|
|
504
|
+
"react-server",
|
|
505
|
+
"-r",
|
|
506
|
+
"@webtypen/webframez-react/register",
|
|
507
|
+
...args
|
|
508
|
+
];
|
|
509
|
+
(0, import_node_child_process.execFile)(
|
|
510
|
+
process.execPath,
|
|
511
|
+
execArgs,
|
|
512
|
+
{ timeout: 1e4, maxBuffer: 1024 * 1024 * 5 },
|
|
513
|
+
(error, stdout, stderr) => {
|
|
514
|
+
if (error) {
|
|
515
|
+
const out = stderr && stderr.trim() !== "" ? stderr : stdout;
|
|
516
|
+
reject(new Error(out || error.message));
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
resolve({ stdout, stderr });
|
|
507
520
|
}
|
|
508
|
-
|
|
509
|
-
});
|
|
521
|
+
);
|
|
510
522
|
});
|
|
511
523
|
}
|
|
512
524
|
async function renderInitialHtmlInWorker(options) {
|
|
@@ -530,7 +542,7 @@ Module._resolveFilename = function(request, parent, isMain, options) {
|
|
|
530
542
|
}
|
|
531
543
|
return originalResolveFilename.call(this, request, parent, isMain, options);
|
|
532
544
|
};
|
|
533
|
-
const { createFileRouter } = require("webframez-react/router");
|
|
545
|
+
const { createFileRouter } = require("@webtypen/webframez-react/router");
|
|
534
546
|
const reactDomPkg = require.resolve("react-dom/package.json", {
|
|
535
547
|
paths: [process.cwd(), input.pagesDir]
|
|
536
548
|
});
|
package/dist/http.js
CHANGED
|
@@ -474,14 +474,26 @@ function stripBasePath(pathname, basePath) {
|
|
|
474
474
|
}
|
|
475
475
|
function runNodeCommand(args) {
|
|
476
476
|
return new Promise((resolve, reject) => {
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
477
|
+
const execArgs = [
|
|
478
|
+
"--conditions",
|
|
479
|
+
"react-server",
|
|
480
|
+
"-r",
|
|
481
|
+
"@webtypen/webframez-react/register",
|
|
482
|
+
...args
|
|
483
|
+
];
|
|
484
|
+
execFile(
|
|
485
|
+
process.execPath,
|
|
486
|
+
execArgs,
|
|
487
|
+
{ timeout: 1e4, maxBuffer: 1024 * 1024 * 5 },
|
|
488
|
+
(error, stdout, stderr) => {
|
|
489
|
+
if (error) {
|
|
490
|
+
const out = stderr && stderr.trim() !== "" ? stderr : stdout;
|
|
491
|
+
reject(new Error(out || error.message));
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
494
|
+
resolve({ stdout, stderr });
|
|
482
495
|
}
|
|
483
|
-
|
|
484
|
-
});
|
|
496
|
+
);
|
|
485
497
|
});
|
|
486
498
|
}
|
|
487
499
|
async function renderInitialHtmlInWorker(options) {
|
|
@@ -505,7 +517,7 @@ Module._resolveFilename = function(request, parent, isMain, options) {
|
|
|
505
517
|
}
|
|
506
518
|
return originalResolveFilename.call(this, request, parent, isMain, options);
|
|
507
519
|
};
|
|
508
|
-
const { createFileRouter } = require("webframez-react/router");
|
|
520
|
+
const { createFileRouter } = require("@webtypen/webframez-react/router");
|
|
509
521
|
const reactDomPkg = require.resolve("react-dom/package.json", {
|
|
510
522
|
paths: [process.cwd(), input.pagesDir]
|
|
511
523
|
});
|
package/dist/index.cjs
CHANGED
|
@@ -536,14 +536,26 @@ function stripBasePath(pathname, basePath) {
|
|
|
536
536
|
}
|
|
537
537
|
function runNodeCommand(args) {
|
|
538
538
|
return new Promise((resolve, reject) => {
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
539
|
+
const execArgs = [
|
|
540
|
+
"--conditions",
|
|
541
|
+
"react-server",
|
|
542
|
+
"-r",
|
|
543
|
+
"@webtypen/webframez-react/register",
|
|
544
|
+
...args
|
|
545
|
+
];
|
|
546
|
+
(0, import_node_child_process.execFile)(
|
|
547
|
+
process.execPath,
|
|
548
|
+
execArgs,
|
|
549
|
+
{ timeout: 1e4, maxBuffer: 1024 * 1024 * 5 },
|
|
550
|
+
(error, stdout, stderr) => {
|
|
551
|
+
if (error) {
|
|
552
|
+
const out = stderr && stderr.trim() !== "" ? stderr : stdout;
|
|
553
|
+
reject(new Error(out || error.message));
|
|
554
|
+
return;
|
|
555
|
+
}
|
|
556
|
+
resolve({ stdout, stderr });
|
|
544
557
|
}
|
|
545
|
-
|
|
546
|
-
});
|
|
558
|
+
);
|
|
547
559
|
});
|
|
548
560
|
}
|
|
549
561
|
async function renderInitialHtmlInWorker(options) {
|
|
@@ -567,7 +579,7 @@ Module._resolveFilename = function(request, parent, isMain, options) {
|
|
|
567
579
|
}
|
|
568
580
|
return originalResolveFilename.call(this, request, parent, isMain, options);
|
|
569
581
|
};
|
|
570
|
-
const { createFileRouter } = require("webframez-react/router");
|
|
582
|
+
const { createFileRouter } = require("@webtypen/webframez-react/router");
|
|
571
583
|
const reactDomPkg = require.resolve("react-dom/package.json", {
|
|
572
584
|
paths: [process.cwd(), input.pagesDir]
|
|
573
585
|
});
|
package/dist/index.js
CHANGED
|
@@ -500,14 +500,26 @@ function stripBasePath(pathname, basePath) {
|
|
|
500
500
|
}
|
|
501
501
|
function runNodeCommand(args) {
|
|
502
502
|
return new Promise((resolve, reject) => {
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
503
|
+
const execArgs = [
|
|
504
|
+
"--conditions",
|
|
505
|
+
"react-server",
|
|
506
|
+
"-r",
|
|
507
|
+
"@webtypen/webframez-react/register",
|
|
508
|
+
...args
|
|
509
|
+
];
|
|
510
|
+
execFile(
|
|
511
|
+
process.execPath,
|
|
512
|
+
execArgs,
|
|
513
|
+
{ timeout: 1e4, maxBuffer: 1024 * 1024 * 5 },
|
|
514
|
+
(error, stdout, stderr) => {
|
|
515
|
+
if (error) {
|
|
516
|
+
const out = stderr && stderr.trim() !== "" ? stderr : stdout;
|
|
517
|
+
reject(new Error(out || error.message));
|
|
518
|
+
return;
|
|
519
|
+
}
|
|
520
|
+
resolve({ stdout, stderr });
|
|
508
521
|
}
|
|
509
|
-
|
|
510
|
-
});
|
|
522
|
+
);
|
|
511
523
|
});
|
|
512
524
|
}
|
|
513
525
|
async function renderInitialHtmlInWorker(options) {
|
|
@@ -531,7 +543,7 @@ Module._resolveFilename = function(request, parent, isMain, options) {
|
|
|
531
543
|
}
|
|
532
544
|
return originalResolveFilename.call(this, request, parent, isMain, options);
|
|
533
545
|
};
|
|
534
|
-
const { createFileRouter } = require("webframez-react/router");
|
|
546
|
+
const { createFileRouter } = require("@webtypen/webframez-react/router");
|
|
535
547
|
const reactDomPkg = require.resolve("react-dom/package.json", {
|
|
536
548
|
paths: [process.cwd(), input.pagesDir]
|
|
537
549
|
});
|
package/dist/webframez-core.cjs
CHANGED
|
@@ -502,14 +502,26 @@ function stripBasePath(pathname, basePath) {
|
|
|
502
502
|
}
|
|
503
503
|
function runNodeCommand(args) {
|
|
504
504
|
return new Promise((resolve, reject) => {
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
505
|
+
const execArgs = [
|
|
506
|
+
"--conditions",
|
|
507
|
+
"react-server",
|
|
508
|
+
"-r",
|
|
509
|
+
"@webtypen/webframez-react/register",
|
|
510
|
+
...args
|
|
511
|
+
];
|
|
512
|
+
(0, import_node_child_process.execFile)(
|
|
513
|
+
process.execPath,
|
|
514
|
+
execArgs,
|
|
515
|
+
{ timeout: 1e4, maxBuffer: 1024 * 1024 * 5 },
|
|
516
|
+
(error, stdout, stderr) => {
|
|
517
|
+
if (error) {
|
|
518
|
+
const out = stderr && stderr.trim() !== "" ? stderr : stdout;
|
|
519
|
+
reject(new Error(out || error.message));
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
resolve({ stdout, stderr });
|
|
510
523
|
}
|
|
511
|
-
|
|
512
|
-
});
|
|
524
|
+
);
|
|
513
525
|
});
|
|
514
526
|
}
|
|
515
527
|
async function renderInitialHtmlInWorker(options) {
|
|
@@ -533,7 +545,7 @@ Module._resolveFilename = function(request, parent, isMain, options) {
|
|
|
533
545
|
}
|
|
534
546
|
return originalResolveFilename.call(this, request, parent, isMain, options);
|
|
535
547
|
};
|
|
536
|
-
const { createFileRouter } = require("webframez-react/router");
|
|
548
|
+
const { createFileRouter } = require("@webtypen/webframez-react/router");
|
|
537
549
|
const reactDomPkg = require.resolve("react-dom/package.json", {
|
|
538
550
|
paths: [process.cwd(), input.pagesDir]
|
|
539
551
|
});
|
package/dist/webframez-core.js
CHANGED
|
@@ -474,14 +474,26 @@ function stripBasePath(pathname, basePath) {
|
|
|
474
474
|
}
|
|
475
475
|
function runNodeCommand(args) {
|
|
476
476
|
return new Promise((resolve, reject) => {
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
477
|
+
const execArgs = [
|
|
478
|
+
"--conditions",
|
|
479
|
+
"react-server",
|
|
480
|
+
"-r",
|
|
481
|
+
"@webtypen/webframez-react/register",
|
|
482
|
+
...args
|
|
483
|
+
];
|
|
484
|
+
execFile(
|
|
485
|
+
process.execPath,
|
|
486
|
+
execArgs,
|
|
487
|
+
{ timeout: 1e4, maxBuffer: 1024 * 1024 * 5 },
|
|
488
|
+
(error, stdout, stderr) => {
|
|
489
|
+
if (error) {
|
|
490
|
+
const out = stderr && stderr.trim() !== "" ? stderr : stdout;
|
|
491
|
+
reject(new Error(out || error.message));
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
494
|
+
resolve({ stdout, stderr });
|
|
482
495
|
}
|
|
483
|
-
|
|
484
|
-
});
|
|
496
|
+
);
|
|
485
497
|
});
|
|
486
498
|
}
|
|
487
499
|
async function renderInitialHtmlInWorker(options) {
|
|
@@ -505,7 +517,7 @@ Module._resolveFilename = function(request, parent, isMain, options) {
|
|
|
505
517
|
}
|
|
506
518
|
return originalResolveFilename.call(this, request, parent, isMain, options);
|
|
507
519
|
};
|
|
508
|
-
const { createFileRouter } = require("webframez-react/router");
|
|
520
|
+
const { createFileRouter } = require("@webtypen/webframez-react/router");
|
|
509
521
|
const reactDomPkg = require.resolve("react-dom/package.json", {
|
|
510
522
|
paths: [process.cwd(), input.pagesDir]
|
|
511
523
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webtypen/webframez-react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "TypeScript React RSC addition for @webtypen/webframez-core",
|
|
5
5
|
"homepage": "https://webtypen.de/",
|
|
6
6
|
"author": {
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
"import": "./dist/webframez-core.js",
|
|
59
59
|
"require": "./dist/webframez-core.cjs"
|
|
60
60
|
},
|
|
61
|
+
"./register": "./register.cjs",
|
|
61
62
|
"./defaults/webpack.client": "./defaults/webpack.client.cjs",
|
|
62
63
|
"./defaults/webpack.server": "./defaults/webpack.server.cjs",
|
|
63
64
|
"./defaults/tsconfig.server": "./defaults/tsconfig.server.json",
|
|
@@ -67,7 +68,8 @@
|
|
|
67
68
|
"files": [
|
|
68
69
|
"dist",
|
|
69
70
|
"defaults",
|
|
70
|
-
"bin"
|
|
71
|
+
"bin",
|
|
72
|
+
"register.cjs"
|
|
71
73
|
],
|
|
72
74
|
"scripts": {
|
|
73
75
|
"clean": "rm -rf dist",
|
package/register.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require("react-server-dom-webpack/node-register")();
|