@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 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": "node --conditions react-server start-server.cjs",
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": "node --watch --conditions react-server start-server.cjs",
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
 
@@ -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
- (0, import_node_child_process.execFile)(process.execPath, args, { timeout: 1e4, maxBuffer: 1024 * 1024 * 5 }, (error, stdout, stderr) => {
503
- if (error) {
504
- const out = stderr && stderr.trim() !== "" ? stderr : stdout;
505
- reject(new Error(out || error.message));
506
- return;
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
- resolve({ stdout, stderr });
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
- execFile(process.execPath, args, { timeout: 1e4, maxBuffer: 1024 * 1024 * 5 }, (error, stdout, stderr) => {
478
- if (error) {
479
- const out = stderr && stderr.trim() !== "" ? stderr : stdout;
480
- reject(new Error(out || error.message));
481
- return;
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
- resolve({ stdout, stderr });
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
- (0, import_node_child_process.execFile)(process.execPath, args, { timeout: 1e4, maxBuffer: 1024 * 1024 * 5 }, (error, stdout, stderr) => {
540
- if (error) {
541
- const out = stderr && stderr.trim() !== "" ? stderr : stdout;
542
- reject(new Error(out || error.message));
543
- return;
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
- resolve({ stdout, stderr });
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
- execFile(process.execPath, args, { timeout: 1e4, maxBuffer: 1024 * 1024 * 5 }, (error, stdout, stderr) => {
504
- if (error) {
505
- const out = stderr && stderr.trim() !== "" ? stderr : stdout;
506
- reject(new Error(out || error.message));
507
- return;
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
- resolve({ stdout, stderr });
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
  });
@@ -502,14 +502,26 @@ function stripBasePath(pathname, basePath) {
502
502
  }
503
503
  function runNodeCommand(args) {
504
504
  return new Promise((resolve, reject) => {
505
- (0, import_node_child_process.execFile)(process.execPath, args, { timeout: 1e4, maxBuffer: 1024 * 1024 * 5 }, (error, stdout, stderr) => {
506
- if (error) {
507
- const out = stderr && stderr.trim() !== "" ? stderr : stdout;
508
- reject(new Error(out || error.message));
509
- return;
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
- resolve({ stdout, stderr });
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
  });
@@ -474,14 +474,26 @@ function stripBasePath(pathname, basePath) {
474
474
  }
475
475
  function runNodeCommand(args) {
476
476
  return new Promise((resolve, reject) => {
477
- execFile(process.execPath, args, { timeout: 1e4, maxBuffer: 1024 * 1024 * 5 }, (error, stdout, stderr) => {
478
- if (error) {
479
- const out = stderr && stderr.trim() !== "" ? stderr : stdout;
480
- reject(new Error(out || error.message));
481
- return;
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
- resolve({ stdout, stderr });
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",
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")();