react-on-rails 14.0.5 → 14.1.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 CHANGED
@@ -17,6 +17,7 @@
17
17
  [![Linting](https://github.com/shakacode/react_on_rails/actions/workflows/lint-js-and-ruby.yml/badge.svg)](https://github.com/shakacode/react_on_rails/actions/workflows/lint-js-and-ruby.yml)
18
18
 
19
19
  # News
20
+ * [React on Rails Pro](https://www.shakacode.com/react-on-rails-pro/) supports the latest features of React 18, including [React Server Components](https://react.dev/reference/rsc/server-components) and [streaming](https://react.dev/reference/react-dom/server/renderToPipeableStream). Contact [Justin Gordon](mailto:justin@shakacode.com) for more information.
20
21
  * ShakaCode now maintains the official successor to `rails/webpacker`, [`shakapacker`](https://github.com/shakacode/shakapacker).
21
22
  * Project is updated to support Rails 7 and Shakapacker v6+!
22
23
 
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = {
4
4
  authenticityToken: function () {
5
5
  var token = document.querySelector('meta[name="csrf-token"]');
6
- if (token && (token instanceof window.HTMLMetaElement)) {
6
+ if (token instanceof HTMLMetaElement) {
7
7
  return token.content;
8
8
  }
9
9
  return null;
@@ -33,8 +33,9 @@ exports.default = {
33
33
  * @returns { name, component, isRenderFunction, isRenderer }
34
34
  */
35
35
  get: function (name) {
36
- if (registeredComponents.has(name)) {
37
- return registeredComponents.get(name);
36
+ var registeredComponent = registeredComponents.get(name);
37
+ if (registeredComponent !== undefined) {
38
+ return registeredComponent;
38
39
  }
39
40
  var keys = Array.from(registeredComponents.keys()).join(', ');
40
41
  throw new Error("Could not find component registered with name ".concat(name, ". Registered component names include [ ").concat(keys, " ]. Maybe you forgot to register the component?"));
@@ -33,7 +33,7 @@ var ClientStartup = __importStar(require("./clientStartup"));
33
33
  var handleError_1 = __importDefault(require("./handleError"));
34
34
  var ComponentRegistry_1 = __importDefault(require("./ComponentRegistry"));
35
35
  var StoreRegistry_1 = __importDefault(require("./StoreRegistry"));
36
- var serverRenderReactComponent_1 = __importDefault(require("./serverRenderReactComponent"));
36
+ var serverRenderReactComponent_1 = __importStar(require("./serverRenderReactComponent"));
37
37
  var buildConsoleReplay_1 = __importDefault(require("./buildConsoleReplay"));
38
38
  var createReactOutput_1 = __importDefault(require("./createReactOutput"));
39
39
  var Authenticity_1 = __importDefault(require("./Authenticity"));
@@ -60,18 +60,21 @@ ctx.ReactOnRails = {
60
60
  register: function (components) {
61
61
  ComponentRegistry_1.default.register(components);
62
62
  },
63
+ registerStore: function (stores) {
64
+ this.registerStoreGenerators(stores);
65
+ },
63
66
  /**
64
- * Allows registration of store generators to be used by multiple react components on one Rails
67
+ * Allows registration of store generators to be used by multiple React components on one Rails
65
68
  * view. store generators are functions that take one arg, props, and return a store. Note that
66
69
  * the setStore API is different in that it's the actual store hydrated with props.
67
- * @param stores (keys are store names, values are the store generators)
70
+ * @param storeGenerators (keys are store names, values are the store generators)
68
71
  */
69
- registerStore: function (stores) {
70
- if (!stores) {
71
- throw new Error('Called ReactOnRails.registerStores with a null or undefined, rather than ' +
72
+ registerStoreGenerators: function (storeGenerators) {
73
+ if (!storeGenerators) {
74
+ throw new Error('Called ReactOnRails.registerStoreGenerators with a null or undefined, rather than ' +
72
75
  'an Object with keys being the store names and the values are the store generators.');
73
76
  }
74
- StoreRegistry_1.default.register(stores);
77
+ StoreRegistry_1.default.register(storeGenerators);
75
78
  },
76
79
  /**
77
80
  * Allows retrieval of the store by name. This store will be hydrated by any Rails form props.
@@ -138,7 +141,7 @@ ctx.ReactOnRails = {
138
141
  },
139
142
  /**
140
143
  * Returns header with csrf authenticity token and XMLHttpRequest
141
- * @param {*} other headers
144
+ * @param otherHeaders Other headers
142
145
  * @returns {*} header
143
146
  */
144
147
  authenticityHeaders: function (otherHeaders) {
@@ -158,7 +161,7 @@ ctx.ReactOnRails = {
158
161
  },
159
162
  /**
160
163
  * Allows retrieval of the store generator by name. This is used internally by ReactOnRails after
161
- * a rails form loads to prepare stores.
164
+ * a Rails form loads to prepare stores.
162
165
  * @param name
163
166
  * @returns Redux Store generator function
164
167
  */
@@ -225,6 +228,13 @@ ctx.ReactOnRails = {
225
228
  serverRenderReactComponent: function (options) {
226
229
  return (0, serverRenderReactComponent_1.default)(options);
227
230
  },
231
+ /**
232
+ * Used by server rendering by Rails
233
+ * @param options
234
+ */
235
+ streamServerRenderedReactComponent: function (options) {
236
+ return (0, serverRenderReactComponent_1.streamServerRenderedReactComponent)(options);
237
+ },
228
238
  /**
229
239
  * Used by Rails to catch errors in rendering
230
240
  * @param options
@@ -1,12 +1,11 @@
1
- import type { StoreGenerator } from './types';
2
- type Store = any;
1
+ import type { Store, StoreGenerator } from './types';
3
2
  declare const _default: {
4
3
  /**
5
4
  * Register a store generator, a function that takes props and returns a store.
6
5
  * @param storeGenerators { name1: storeGenerator1, name2: storeGenerator2 }
7
6
  */
8
7
  register(storeGenerators: {
9
- [id: string]: any;
8
+ [id: string]: StoreGenerator;
10
9
  }): void;
11
10
  /**
12
11
  * Used by components to get the hydrated store which contains props.
@@ -50,8 +50,9 @@ exports.default = {
50
50
  * @returns storeCreator with given name
51
51
  */
52
52
  getStoreGenerator: function (name) {
53
- if (registeredStoreGenerators.has(name)) {
54
- return registeredStoreGenerators.get(name);
53
+ var registeredStoreGenerator = registeredStoreGenerators.get(name);
54
+ if (registeredStoreGenerator) {
55
+ return registeredStoreGenerator;
55
56
  }
56
57
  var storeKeys = Array.from(registeredStoreGenerators.keys()).join(', ');
57
58
  throw new Error("Could not find store registered with name '".concat(name, "'. Registered store ") +
@@ -6,5 +6,5 @@ declare global {
6
6
  }[];
7
7
  }
8
8
  }
9
- export declare function consoleReplay(): string;
10
- export default function buildConsoleReplay(): string;
9
+ export declare function consoleReplay(customConsoleHistory?: typeof console['history'] | undefined, numberOfMessagesToSkip?: number): string;
10
+ export default function buildConsoleReplay(customConsoleHistory?: typeof console['history'] | undefined, numberOfMessagesToSkip?: number): string;
@@ -3,20 +3,31 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.consoleReplay = void 0;
6
+ exports.consoleReplay = consoleReplay;
7
+ exports.default = buildConsoleReplay;
7
8
  var RenderUtils_1 = __importDefault(require("./RenderUtils"));
8
9
  var scriptSanitizedVal_1 = __importDefault(require("./scriptSanitizedVal"));
9
- function consoleReplay() {
10
+ function consoleReplay(customConsoleHistory, numberOfMessagesToSkip) {
11
+ if (customConsoleHistory === void 0) { customConsoleHistory = undefined; }
12
+ if (numberOfMessagesToSkip === void 0) { numberOfMessagesToSkip = 0; }
10
13
  // console.history is a global polyfill used in server rendering.
11
- // $FlowFixMe
12
- if (!(console.history instanceof Array)) {
14
+ var consoleHistory = customConsoleHistory !== null && customConsoleHistory !== void 0 ? customConsoleHistory : console.history;
15
+ if (!(Array.isArray(consoleHistory))) {
13
16
  return '';
14
17
  }
15
- var lines = console.history.map(function (msg) {
18
+ var lines = consoleHistory.slice(numberOfMessagesToSkip).map(function (msg) {
16
19
  var stringifiedList = msg.arguments.map(function (arg) {
17
20
  var val;
18
21
  try {
19
- val = (typeof arg === 'string' || arg instanceof String) ? arg : JSON.stringify(arg);
22
+ if (typeof arg === 'string') {
23
+ val = arg;
24
+ }
25
+ else if (arg instanceof String) {
26
+ val = String(arg);
27
+ }
28
+ else {
29
+ val = JSON.stringify(arg);
30
+ }
20
31
  if (val === undefined) {
21
32
  val = 'undefined';
22
33
  }
@@ -30,8 +41,8 @@ function consoleReplay() {
30
41
  });
31
42
  return lines.join('\n');
32
43
  }
33
- exports.consoleReplay = consoleReplay;
34
- function buildConsoleReplay() {
35
- return RenderUtils_1.default.wrapInScriptTags('consoleReplayLog', consoleReplay());
44
+ function buildConsoleReplay(customConsoleHistory, numberOfMessagesToSkip) {
45
+ if (customConsoleHistory === void 0) { customConsoleHistory = undefined; }
46
+ if (numberOfMessagesToSkip === void 0) { numberOfMessagesToSkip = 0; }
47
+ return RenderUtils_1.default.wrapInScriptTags('consoleReplayLog', consoleReplay(customConsoleHistory, numberOfMessagesToSkip));
36
48
  }
37
- exports.default = buildConsoleReplay;
@@ -12,7 +12,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.clientStartup = exports.reactOnRailsComponentLoaded = exports.reactOnRailsPageLoaded = void 0;
15
+ exports.reactOnRailsPageLoaded = reactOnRailsPageLoaded;
16
+ exports.reactOnRailsComponentLoaded = reactOnRailsComponentLoaded;
17
+ exports.clientStartup = clientStartup;
16
18
  var react_dom_1 = __importDefault(require("react-dom"));
17
19
  var createReactOutput_1 = __importDefault(require("./createReactOutput"));
18
20
  var isServerRenderResult_1 = require("./isServerRenderResult");
@@ -163,7 +165,6 @@ function reactOnRailsPageLoaded() {
163
165
  forEachStore(context, railsContext);
164
166
  forEachReactOnRailsComponentRender(context, railsContext);
165
167
  }
166
- exports.reactOnRailsPageLoaded = reactOnRailsPageLoaded;
167
168
  function reactOnRailsComponentLoaded(domId) {
168
169
  debugTurbolinks("reactOnRailsComponentLoaded ".concat(domId));
169
170
  var railsContext = parseRailsContext();
@@ -179,7 +180,6 @@ function reactOnRailsComponentLoaded(domId) {
179
180
  return;
180
181
  render(el, context, railsContext);
181
182
  }
182
- exports.reactOnRailsComponentLoaded = reactOnRailsComponentLoaded;
183
183
  function unmount(el) {
184
184
  var domNodeId = domNodeIdForEl(el);
185
185
  var domNode = document.getElementById(domNodeId);
@@ -270,4 +270,3 @@ function clientStartup(context) {
270
270
  context.__REACT_ON_RAILS_EVENT_HANDLERS_RAN_ONCE__ = true;
271
271
  onPageReady(renderInit);
272
272
  }
273
- exports.clientStartup = clientStartup;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = context;
3
4
  /**
4
5
  * Get the context, be it window or global
5
6
  * @returns {boolean|Window|*|context}
@@ -9,4 +10,3 @@ function context() {
9
10
  ((typeof global !== 'undefined') && global) ||
10
11
  this;
11
12
  }
12
- exports.default = context;
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.default = createReactOutput;
7
8
  var react_1 = __importDefault(require("react"));
8
9
  var isServerRenderResult_1 = require("./isServerRenderResult");
9
10
  /**
@@ -59,4 +60,3 @@ function createReactOutput(_a) {
59
60
  // else
60
61
  return react_1.default.createElement(component, props);
61
62
  }
62
- exports.default = createReactOutput;
@@ -1,8 +1,8 @@
1
- import { ReactComponentOrRenderFunction } from "./types/index";
1
+ import { ReactComponentOrRenderFunction, RenderFunction } from "./types/index";
2
2
  /**
3
3
  * Used to determine we'll call be calling React.createElement on the component of if this is a
4
4
  * Render-Function used return a function that takes props to return a React element
5
5
  * @param component
6
6
  * @returns {boolean}
7
7
  */
8
- export default function isRenderFunction(component: ReactComponentOrRenderFunction): boolean;
8
+ export default function isRenderFunction(component: ReactComponentOrRenderFunction): component is RenderFunction;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = isRenderFunction;
3
4
  /**
4
5
  * Used to determine we'll call be calling React.createElement on the component of if this is a
5
6
  * Render-Function used return a function that takes props to return a React element
@@ -7,9 +8,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
8
  * @returns {boolean}
8
9
  */
9
10
  function isRenderFunction(component) {
11
+ var _a;
10
12
  // No for es5 or es6 React Component
11
- if (component.prototype &&
12
- component.prototype.isReactComponent) {
13
+ if ((_a = component.prototype) === null || _a === void 0 ? void 0 : _a.isReactComponent) {
13
14
  return false;
14
15
  }
15
16
  if (component.renderFunction) {
@@ -22,4 +23,3 @@ function isRenderFunction(component) {
22
23
  }
23
24
  return false;
24
25
  }
25
- exports.default = isRenderFunction;
@@ -1,3 +1,3 @@
1
1
  import type { CreateReactOutputResult, ServerRenderResult } from './types/index';
2
2
  export declare function isServerRenderHash(testValue: CreateReactOutputResult): testValue is ServerRenderResult;
3
- export declare function isPromise(testValue: CreateReactOutputResult): testValue is Promise<string>;
3
+ export declare function isPromise<T>(testValue: CreateReactOutputResult | Promise<T> | string | null): testValue is Promise<T>;
@@ -1,14 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isPromise = exports.isServerRenderHash = void 0;
3
+ exports.isServerRenderHash = isServerRenderHash;
4
+ exports.isPromise = isPromise;
4
5
  function isServerRenderHash(testValue) {
5
6
  return !!(testValue.renderedHtml ||
6
7
  testValue.redirectLocation ||
7
8
  testValue.routeError ||
8
9
  testValue.error);
9
10
  }
10
- exports.isServerRenderHash = isServerRenderHash;
11
11
  function isPromise(testValue) {
12
- return !!(testValue.then);
12
+ return !!(testValue === null || testValue === void 0 ? void 0 : testValue.then);
13
13
  }
14
- exports.isPromise = isPromise;
@@ -3,7 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.reactRender = exports.reactHydrate = void 0;
6
+ exports.reactHydrate = void 0;
7
+ exports.reactRender = reactRender;
8
+ exports.default = reactHydrateOrRender;
7
9
  var react_dom_1 = __importDefault(require("react-dom"));
8
10
  var reactApis_1 = require("./reactApis");
9
11
  // TODO: once React dependency is updated to >= 18, we can remove this and just
@@ -36,8 +38,6 @@ function reactRender(domNode, reactElement) {
36
38
  // eslint-disable-next-line react/no-render-return-value
37
39
  return react_dom_1.default.render(reactElement, domNode);
38
40
  }
39
- exports.reactRender = reactRender;
40
41
  function reactHydrateOrRender(domNode, reactElement, hydrate) {
41
42
  return hydrate ? (0, exports.reactHydrate)(domNode, reactElement) : reactRender(domNode, reactElement);
42
43
  }
43
- exports.default = reactHydrateOrRender;
@@ -1,4 +1,6 @@
1
- import type { RenderParams, RenderResult } from './types/index';
1
+ import { Readable } from 'stream';
2
+ import type { RenderParams, RenderResult } from './types';
2
3
  declare function serverRenderReactComponentInternal(options: RenderParams): null | string | Promise<RenderResult>;
3
4
  declare const serverRenderReactComponent: typeof serverRenderReactComponentInternal;
5
+ export declare const streamServerRenderedReactComponent: (options: RenderParams) => Readable;
4
6
  export default serverRenderReactComponent;
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
14
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
15
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -9,8 +20,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
20
  });
10
21
  };
11
22
  var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
25
  function verb(n) { return function (v) { return step([n, v]); }; }
15
26
  function step(op) {
16
27
  if (f) throw new TypeError("Generator is already executing.");
@@ -39,145 +50,159 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
39
50
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
51
  };
41
52
  Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.streamServerRenderedReactComponent = void 0;
42
54
  var server_1 = __importDefault(require("react-dom/server"));
55
+ var stream_1 = require("stream");
43
56
  var ComponentRegistry_1 = __importDefault(require("./ComponentRegistry"));
44
57
  var createReactOutput_1 = __importDefault(require("./createReactOutput"));
45
58
  var isServerRenderResult_1 = require("./isServerRenderResult");
46
59
  var buildConsoleReplay_1 = __importDefault(require("./buildConsoleReplay"));
47
60
  var handleError_1 = __importDefault(require("./handleError"));
48
- /* eslint-disable @typescript-eslint/no-explicit-any */
49
- function serverRenderReactComponentInternal(options) {
50
- var _this = this;
51
- var name = options.name, domNodeId = options.domNodeId, trace = options.trace, props = options.props, railsContext = options.railsContext, renderingReturnsPromises = options.renderingReturnsPromises, throwJsErrors = options.throwJsErrors;
52
- var renderResult = null;
53
- var hasErrors = false;
54
- var renderingError = null;
55
- try {
56
- var componentObj = ComponentRegistry_1.default.get(name);
57
- if (componentObj.isRenderer) {
58
- throw new Error("Detected a renderer while server rendering component '".concat(name, "'. See https://github.com/shakacode/react_on_rails#renderer-functions"));
59
- }
60
- var reactRenderingResult_1 = (0, createReactOutput_1.default)({
61
- componentObj: componentObj,
62
- domNodeId: domNodeId,
63
- trace: trace,
64
- props: props,
65
- railsContext: railsContext,
66
- });
67
- var processServerRenderHash = function () {
68
- // We let the client side handle any redirect
69
- // Set hasErrors in case we want to throw a Rails exception
70
- hasErrors = !!reactRenderingResult_1.routeError;
71
- if (hasErrors) {
72
- console.error("React Router ERROR: ".concat(JSON.stringify(reactRenderingResult_1.routeError)));
73
- }
74
- if (reactRenderingResult_1.redirectLocation) {
75
- if (trace) {
76
- var redirectLocation = reactRenderingResult_1.redirectLocation;
77
- var redirectPath = redirectLocation.pathname + redirectLocation.search;
78
- console.log(" ROUTER REDIRECT: ".concat(name, " to dom node with id: ").concat(domNodeId, ", redirect to ").concat(redirectPath));
79
- }
80
- // For redirects on server rendering, we can't stop Rails from returning the same result.
81
- // Possibly, someday, we could have the rails server redirect.
82
- return '';
83
- }
84
- return reactRenderingResult_1.renderedHtml;
85
- };
86
- var processPromise = function () {
87
- if (!renderingReturnsPromises) {
88
- console.error('Your render function returned a Promise, which is only supported by a node renderer, not ExecJS.');
89
- }
90
- return reactRenderingResult_1;
91
- };
92
- var processReactElement = function () {
93
- try {
94
- return server_1.default.renderToString(reactRenderingResult_1);
95
- }
96
- catch (error) {
97
- console.error("Invalid call to renderToString. Possibly you have a renderFunction, a function that already\ncalls renderToString, that takes one parameter. You need to add an extra unused parameter to identify this function\nas a renderFunction and not a simple React Function Component.");
98
- throw error;
99
- }
100
- };
101
- if ((0, isServerRenderResult_1.isServerRenderHash)(reactRenderingResult_1)) {
102
- renderResult = processServerRenderHash();
103
- }
104
- else if ((0, isServerRenderResult_1.isPromise)(reactRenderingResult_1)) {
105
- renderResult = processPromise();
106
- }
107
- else {
108
- renderResult = processReactElement();
109
- }
61
+ function convertToError(e) {
62
+ return e instanceof Error ? e : new Error(String(e));
63
+ }
64
+ function validateComponent(componentObj, componentName) {
65
+ if (componentObj.isRenderer) {
66
+ throw new Error("Detected a renderer while server rendering component '".concat(componentName, "'. See https://github.com/shakacode/react_on_rails#renderer-functions"));
110
67
  }
111
- catch (e) {
112
- if (throwJsErrors) {
113
- throw e;
68
+ }
69
+ function processServerRenderHash(result, options) {
70
+ var redirectLocation = result.redirectLocation, routeError = result.routeError;
71
+ var hasErrors = !!routeError;
72
+ if (hasErrors) {
73
+ console.error("React Router ERROR: ".concat(JSON.stringify(routeError)));
74
+ }
75
+ var htmlResult;
76
+ if (redirectLocation) {
77
+ if (options.trace) {
78
+ var redirectPath = redirectLocation.pathname + redirectLocation.search;
79
+ console.log("ROUTER REDIRECT: ".concat(options.componentName, " to dom node with id: ").concat(options.domNodeId, ", redirect to ").concat(redirectPath));
114
80
  }
115
- hasErrors = true;
116
- renderResult = (0, handleError_1.default)({
117
- e: e,
118
- name: name,
119
- serverSide: true,
120
- });
121
- renderingError = e;
81
+ // For redirects on server rendering, we can't stop Rails from returning the same result.
82
+ // Possibly, someday, we could have the Rails server redirect.
83
+ htmlResult = '';
122
84
  }
123
- var consoleReplayScript = (0, buildConsoleReplay_1.default)();
124
- var addRenderingErrors = function (resultObject, renderError) {
125
- resultObject.renderingError = {
126
- message: renderError.message,
127
- stack: renderError.stack,
128
- };
85
+ else {
86
+ htmlResult = result.renderedHtml;
87
+ }
88
+ return { result: htmlResult, hasErrors: hasErrors };
89
+ }
90
+ function processPromise(result, renderingReturnsPromises) {
91
+ if (!renderingReturnsPromises) {
92
+ console.error('Your render function returned a Promise, which is only supported by a node renderer, not ExecJS.');
93
+ // If the app is using server rendering with ExecJS, then the promise will not be awaited.
94
+ // And when a promise is passed to JSON.stringify, it will be converted to '{}'.
95
+ return '{}';
96
+ }
97
+ return result;
98
+ }
99
+ function processReactElement(result) {
100
+ try {
101
+ return server_1.default.renderToString(result);
102
+ }
103
+ catch (error) {
104
+ console.error("Invalid call to renderToString. Possibly you have a renderFunction, a function that already\ncalls renderToString, that takes one parameter. You need to add an extra unused parameter to identify this function\nas a renderFunction and not a simple React Function Component.");
105
+ throw error;
106
+ }
107
+ }
108
+ function processRenderingResult(result, options) {
109
+ if ((0, isServerRenderResult_1.isServerRenderHash)(result)) {
110
+ return processServerRenderHash(result, options);
111
+ }
112
+ if ((0, isServerRenderResult_1.isPromise)(result)) {
113
+ return { result: processPromise(result, options.renderingReturnsPromises), hasErrors: false };
114
+ }
115
+ return { result: processReactElement(result), hasErrors: false };
116
+ }
117
+ function handleRenderingError(e, options) {
118
+ if (options.throwJsErrors) {
119
+ throw e;
120
+ }
121
+ var error = convertToError(e);
122
+ return {
123
+ hasErrors: true,
124
+ result: (0, handleError_1.default)({ e: error, name: options.componentName, serverSide: true }),
125
+ error: error,
129
126
  };
130
- if (renderingReturnsPromises) {
131
- var resolveRenderResult = function () { return __awaiter(_this, void 0, void 0, function () {
132
- var promiseResult, e_1;
133
- var _a;
134
- return __generator(this, function (_b) {
135
- switch (_b.label) {
136
- case 0:
137
- _b.trys.push([0, 2, , 3]);
138
- _a = {};
139
- return [4 /*yield*/, renderResult];
140
- case 1:
141
- promiseResult = (_a.html = _b.sent(),
142
- _a.consoleReplayScript = consoleReplayScript,
143
- _a.hasErrors = hasErrors,
144
- _a);
145
- return [3 /*break*/, 3];
146
- case 2:
147
- e_1 = _b.sent();
148
- if (throwJsErrors) {
149
- throw e_1;
150
- }
151
- promiseResult = {
152
- html: (0, handleError_1.default)({
153
- e: e_1,
154
- name: name,
155
- serverSide: true,
156
- }),
157
- consoleReplayScript: consoleReplayScript,
158
- hasErrors: true,
159
- };
160
- renderingError = e_1;
161
- return [3 /*break*/, 3];
162
- case 3:
163
- if (renderingError !== null) {
164
- addRenderingErrors(promiseResult, renderingError);
165
- }
166
- return [2 /*return*/, promiseResult];
167
- }
168
- });
169
- }); };
170
- return resolveRenderResult();
171
- }
172
- var result = {
173
- html: renderResult,
127
+ }
128
+ function createResultObject(html, consoleReplayScript, renderState) {
129
+ return {
130
+ html: html,
174
131
  consoleReplayScript: consoleReplayScript,
175
- hasErrors: hasErrors,
132
+ hasErrors: renderState.hasErrors,
133
+ renderingError: renderState.error && { message: renderState.error.message, stack: renderState.error.stack },
134
+ isShellReady: 'isShellReady' in renderState ? renderState.isShellReady : undefined,
176
135
  };
177
- if (renderingError) {
178
- addRenderingErrors(result, renderingError);
136
+ }
137
+ function createPromiseResult(renderState, componentName, throwJsErrors) {
138
+ return __awaiter(this, void 0, void 0, function () {
139
+ var consoleHistory, html, consoleReplayScript, e_1, errorRenderState, consoleReplayScript;
140
+ return __generator(this, function (_a) {
141
+ switch (_a.label) {
142
+ case 0:
143
+ consoleHistory = console.history;
144
+ _a.label = 1;
145
+ case 1:
146
+ _a.trys.push([1, 3, , 4]);
147
+ return [4 /*yield*/, renderState.result];
148
+ case 2:
149
+ html = _a.sent();
150
+ consoleReplayScript = (0, buildConsoleReplay_1.default)(consoleHistory);
151
+ return [2 /*return*/, createResultObject(html, consoleReplayScript, renderState)];
152
+ case 3:
153
+ e_1 = _a.sent();
154
+ errorRenderState = handleRenderingError(e_1, { componentName: componentName, throwJsErrors: throwJsErrors });
155
+ consoleReplayScript = (0, buildConsoleReplay_1.default)(consoleHistory);
156
+ return [2 /*return*/, createResultObject(errorRenderState.result, consoleReplayScript, renderState)];
157
+ case 4: return [2 /*return*/];
158
+ }
159
+ });
160
+ });
161
+ }
162
+ function createFinalResult(renderState, componentName, throwJsErrors) {
163
+ var result = renderState.result;
164
+ if ((0, isServerRenderResult_1.isPromise)(result)) {
165
+ return createPromiseResult(__assign(__assign({}, renderState), { result: result }), componentName, throwJsErrors);
166
+ }
167
+ var consoleReplayScript = (0, buildConsoleReplay_1.default)();
168
+ return JSON.stringify(createResultObject(result, consoleReplayScript, renderState));
169
+ }
170
+ function serverRenderReactComponentInternal(options) {
171
+ var componentName = options.name, domNodeId = options.domNodeId, trace = options.trace, props = options.props, railsContext = options.railsContext, renderingReturnsPromises = options.renderingReturnsPromises, throwJsErrors = options.throwJsErrors;
172
+ var renderState = {
173
+ result: null,
174
+ hasErrors: false,
175
+ };
176
+ try {
177
+ var componentObj = ComponentRegistry_1.default.get(componentName);
178
+ validateComponent(componentObj, componentName);
179
+ // Renders the component or executes the render function
180
+ // - If the registered component is a React element or component, it renders it
181
+ // - If it's a render function, it executes the function and processes the result:
182
+ // - For React elements or components, it renders them
183
+ // - For promises, it returns them without awaiting (for async rendering)
184
+ // - For other values (e.g., strings), it returns them directly
185
+ // Note: Only synchronous operations are performed at this stage
186
+ var reactRenderingResult = (0, createReactOutput_1.default)({ componentObj: componentObj, domNodeId: domNodeId, trace: trace, props: props, railsContext: railsContext });
187
+ // Processes the result from createReactOutput:
188
+ // 1. Converts React elements to HTML strings
189
+ // 2. Returns rendered HTML from serverRenderHash
190
+ // 3. Handles promises for async rendering
191
+ renderState = processRenderingResult(reactRenderingResult, { componentName: componentName, domNodeId: domNodeId, trace: trace, renderingReturnsPromises: renderingReturnsPromises });
192
+ }
193
+ catch (e) {
194
+ renderState = handleRenderingError(e, { componentName: componentName, throwJsErrors: throwJsErrors });
179
195
  }
180
- return JSON.stringify(result);
196
+ // Finalize the rendering result and prepare it for server response
197
+ // 1. Builds the consoleReplayScript for client-side console replay
198
+ // 2. Extract the result from promise (if needed) by awaiting it
199
+ // 3. Constructs a JSON object with the following properties:
200
+ // - html: string | null (The rendered component HTML)
201
+ // - consoleReplayScript: string (Script to replay console outputs on the client)
202
+ // - hasErrors: boolean (Indicates if any errors occurred during rendering)
203
+ // - renderingError: Error | null (The error object if an error occurred, null otherwise)
204
+ // 4. For Promise results, it awaits resolution before creating the final JSON
205
+ return createFinalResult(renderState, componentName, throwJsErrors);
181
206
  }
182
207
  var serverRenderReactComponent = function (options) {
183
208
  try {
@@ -186,7 +211,113 @@ var serverRenderReactComponent = function (options) {
186
211
  finally {
187
212
  // Reset console history after each render.
188
213
  // See `RubyEmbeddedJavaScript.console_polyfill` for initialization.
214
+ // This is necessary when ExecJS and old versions of node renderer are used.
215
+ // New versions of node renderer reset the console history automatically.
189
216
  console.history = [];
190
217
  }
191
218
  };
219
+ var stringToStream = function (str) {
220
+ var stream = new stream_1.PassThrough();
221
+ stream.write(str);
222
+ stream.end();
223
+ return stream;
224
+ };
225
+ var transformRenderStreamChunksToResultObject = function (renderState) {
226
+ var consoleHistory = console.history;
227
+ var previouslyReplayedConsoleMessages = 0;
228
+ var transformStream = new stream_1.PassThrough({
229
+ transform: function (chunk, _, callback) {
230
+ var htmlChunk = chunk.toString();
231
+ var consoleReplayScript = (0, buildConsoleReplay_1.default)(consoleHistory, previouslyReplayedConsoleMessages);
232
+ previouslyReplayedConsoleMessages = (consoleHistory === null || consoleHistory === void 0 ? void 0 : consoleHistory.length) || 0;
233
+ var jsonChunk = JSON.stringify(createResultObject(htmlChunk, consoleReplayScript, renderState));
234
+ this.push("".concat(jsonChunk, "\n"));
235
+ callback();
236
+ }
237
+ });
238
+ var pipedStream = null;
239
+ var pipeToTransform = function (pipeableStream) {
240
+ pipeableStream.pipe(transformStream);
241
+ pipedStream = pipeableStream;
242
+ };
243
+ // We need to wrap the transformStream in a Readable stream to properly handle errors:
244
+ // 1. If we returned transformStream directly, we couldn't emit errors into it externally
245
+ // 2. If an error is emitted into the transformStream, it would cause the render to fail
246
+ // 3. By wrapping in Readable.from(), we can explicitly emit errors into the readableStream without affecting the transformStream
247
+ // Note: Readable.from can merge multiple chunks into a single chunk, so we need to ensure that we can separate them later
248
+ var readableStream = stream_1.Readable.from(transformStream);
249
+ var writeChunk = function (chunk) { return transformStream.write(chunk); };
250
+ var emitError = function (error) { return readableStream.emit('error', error); };
251
+ var endStream = function () {
252
+ transformStream.end();
253
+ pipedStream === null || pipedStream === void 0 ? void 0 : pipedStream.abort();
254
+ };
255
+ return { readableStream: readableStream, pipeToTransform: pipeToTransform, writeChunk: writeChunk, emitError: emitError, endStream: endStream };
256
+ };
257
+ var streamRenderReactComponent = function (reactRenderingResult, options) {
258
+ var componentName = options.name, throwJsErrors = options.throwJsErrors;
259
+ var renderState = {
260
+ result: null,
261
+ hasErrors: false,
262
+ isShellReady: false
263
+ };
264
+ var _a = transformRenderStreamChunksToResultObject(renderState), readableStream = _a.readableStream, pipeToTransform = _a.pipeToTransform, writeChunk = _a.writeChunk, emitError = _a.emitError, endStream = _a.endStream;
265
+ var renderingStream = server_1.default.renderToPipeableStream(reactRenderingResult, {
266
+ onShellError: function (e) {
267
+ var error = convertToError(e);
268
+ renderState.hasErrors = true;
269
+ renderState.error = error;
270
+ if (throwJsErrors) {
271
+ emitError(error);
272
+ }
273
+ var errorHtml = (0, handleError_1.default)({ e: error, name: componentName, serverSide: true });
274
+ writeChunk(errorHtml);
275
+ endStream();
276
+ },
277
+ onShellReady: function () {
278
+ renderState.isShellReady = true;
279
+ pipeToTransform(renderingStream);
280
+ },
281
+ onError: function (e) {
282
+ if (!renderState.isShellReady) {
283
+ return;
284
+ }
285
+ var error = convertToError(e);
286
+ if (throwJsErrors) {
287
+ emitError(error);
288
+ }
289
+ renderState.hasErrors = true;
290
+ renderState.error = error;
291
+ },
292
+ });
293
+ return readableStream;
294
+ };
295
+ var streamServerRenderedReactComponent = function (options) {
296
+ var componentName = options.name, domNodeId = options.domNodeId, trace = options.trace, props = options.props, railsContext = options.railsContext, throwJsErrors = options.throwJsErrors;
297
+ try {
298
+ var componentObj = ComponentRegistry_1.default.get(componentName);
299
+ validateComponent(componentObj, componentName);
300
+ var reactRenderingResult = (0, createReactOutput_1.default)({
301
+ componentObj: componentObj,
302
+ domNodeId: domNodeId,
303
+ trace: trace,
304
+ props: props,
305
+ railsContext: railsContext,
306
+ });
307
+ if ((0, isServerRenderResult_1.isServerRenderHash)(reactRenderingResult) || (0, isServerRenderResult_1.isPromise)(reactRenderingResult)) {
308
+ throw new Error('Server rendering of streams is not supported for server render hashes or promises.');
309
+ }
310
+ return streamRenderReactComponent(reactRenderingResult, options);
311
+ }
312
+ catch (e) {
313
+ if (throwJsErrors) {
314
+ throw e;
315
+ }
316
+ var error = convertToError(e);
317
+ var htmlResult = (0, handleError_1.default)({ e: error, name: componentName, serverSide: true });
318
+ var jsonResult = JSON.stringify(createResultObject(htmlResult, (0, buildConsoleReplay_1.default)(), { hasErrors: true, error: error, result: null }));
319
+ return stringToStream(jsonResult);
320
+ }
321
+ };
322
+ exports.streamServerRenderedReactComponent = streamServerRenderedReactComponent;
192
323
  exports.default = serverRenderReactComponent;
@@ -0,0 +1 @@
1
+ {"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/prop-types/index.d.ts","../../node_modules/@types/react/index.d.ts","../src/types/index.ts","../src/authenticity.ts","../src/isrenderfunction.ts","../src/componentregistry.ts","../../node_modules/@types/react-dom/index.d.ts","../src/isserverrenderresult.ts","../src/createreactoutput.ts","../src/reactapis.ts","../src/reacthydrateorrender.ts","../src/clientstartup.ts","../../node_modules/@types/react-dom/client.d.ts","../../node_modules/@types/react-dom/server.d.ts","../src/handleerror.ts","../src/storeregistry.ts","../src/renderutils.ts","../src/scriptsanitizedval.ts","../src/buildconsolereplay.ts","../src/serverrenderreactcomponent.ts","../src/context.ts","../src/reactonrails.ts","../../node_modules/@types/babel__generator/node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__generator/index.d.ts","../../node_modules/@babel/types/lib/index.d.ts","../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@types/babel__template/node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__template/node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@types/babel__template/index.d.ts","../../node_modules/@types/babel__traverse/node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__traverse/index.d.ts","../../node_modules/@types/babel__core/index.d.ts","../../node_modules/@types/eslint-visitor-keys/index.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/globals.global.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/ts3.6/base.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/base.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/graceful-fs/index.d.ts","../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../node_modules/@types/istanbul-lib-report/index.d.ts","../../node_modules/@types/istanbul-reports/index.d.ts","../../node_modules/@jest/expect-utils/build/index.d.ts","../../node_modules/chalk/index.d.ts","../../node_modules/@sinclair/typebox/typebox.d.ts","../../node_modules/@jest/schemas/build/index.d.ts","../../node_modules/pretty-format/build/index.d.ts","../../node_modules/jest-diff/build/index.d.ts","../../node_modules/jest-matcher-utils/build/index.d.ts","../../node_modules/expect/build/index.d.ts","../../node_modules/@types/jest/index.d.ts","../../node_modules/parse5/dist/common/html.d.ts","../../node_modules/parse5/dist/common/token.d.ts","../../node_modules/parse5/dist/common/error-codes.d.ts","../../node_modules/parse5/dist/tokenizer/preprocessor.d.ts","../../node_modules/parse5/dist/tokenizer/index.d.ts","../../node_modules/parse5/dist/tree-adapters/interface.d.ts","../../node_modules/parse5/dist/parser/open-element-stack.d.ts","../../node_modules/parse5/dist/parser/formatting-element-list.d.ts","../../node_modules/parse5/dist/parser/index.d.ts","../../node_modules/parse5/dist/tree-adapters/default.d.ts","../../node_modules/parse5/dist/serializer/index.d.ts","../../node_modules/parse5/dist/common/foreign-content.d.ts","../../node_modules/parse5/dist/index.d.ts","../../node_modules/@types/tough-cookie/index.d.ts","../../node_modules/@types/jsdom/base.d.ts","../../node_modules/@types/jsdom/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/json5/index.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/stack-utils/index.d.ts","../../node_modules/@types/turbolinks/index.d.ts","../../node_modules/@types/webpack-env/index.d.ts","../../node_modules/@types/yargs-parser/index.d.ts","../../node_modules/@types/yargs/index.d.ts"],"fileIdsList":[[61],[122],[60,61,62,65,67],[59],[59,64],[82,115],[117],[118],[124,127],[81,107,115,141,142,144],[143],[113],[71],[112,113],[72],[73,81,82,89,98],[73,74,81,89],[105],[76,77,82,90],[77,98],[78,79,81,89],[79],[80,81],[81],[81,82,83,98,104],[82,83],[84,89,98,104],[81,82,84,85,89,98,101,104],[84,86,101,104],[114],[81,87],[88,104],[79,81,89,98],[90],[91],[71,92],[103],[94],[95],[81,96],[96,97,105,107],[81,98],[99],[100],[89,101],[102],[70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111],[89,103],[95,104],[98,106],[107],[111],[81,83,98,104,107,108],[98,109],[38],[38,49],[35,36,37],[147,186],[147,171,186],[186],[147],[147,172,186],[147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185],[172,186],[190],[120,126],[124],[121,125],[130],[129,130],[129],[129,130,131,133,134,137,138,139,140],[130,134],[129,130,131,133,134,135,136],[129,134],[134,138],[130,131,132],[131],[129,130,134],[123],[39],[53,54],[38,39,43,44,45,46,47],[39,41],[38,39,44],[38,39,50],[43],[38,39,43,46],[38,39,40,42,45,47,48,51,52,55,56,57,98],[38,39,42,44,45,50,51,55,98],[38,98]],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"9e8ca8ed051c2697578c023d9c29d6df689a083561feba5c14aedee895853999","affectsGlobalScope":true,"impliedFormat":1},{"version":"69e65d976bf166ce4a9e6f6c18f94d2424bf116e90837ace179610dbccad9b42","affectsGlobalScope":true,"impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"45d8ccb3dfd57355eb29749919142d4321a0aa4df6acdfc54e30433d7176600a","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"1a94697425a99354df73d9c8291e2ecd4dddd370aed4023c2d6dee6cccb32666","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c29793071152b207c01ea1954e343be9a44d85234447b2b236acae9e709a383","impliedFormat":1},{"version":"a7e32dcb90bf0c1b7a1e4ac89b0f7747cbcba25e7beddc1ebf17be1e161842ad","impliedFormat":1},{"version":"8ca4709dbd22a34bcc1ebf93e1877645bdb02ebd3f3d9a211a299a8db2ee4ba1","affectsGlobalScope":true,"impliedFormat":1},{"version":"23b783df1d865df4eaa52cc0d0a31cc7082bb947041cd039fefb70e4ef893927","signature":"bfb42a08c6275f2f4216b801fe62806819fc9404ac284a669e799e8d75d64a41"},{"version":"c999ddca30821d7555ecb2daeb124fb820c2ddb3cdea44badf26ecfed918d983","signature":"f86c37474d632e9aaffb21f587b3d387440c682b175863ef2b0606b42244646f"},{"version":"fe96133a1f80531f6f031985f91a7dd6f4c5d825eb006ea1bc2ea27a1e6bc90b","signature":"ec83fa2a592730d6cb0a19275f9d2680185073711bb7df4f41542f85248f6733"},{"version":"a90a34ec2ed1f0395a9df45da76bcb5dc2cd7215cbad3a6b56d7b32e8ae34b13","signature":"c50697698e99ce2e54e6c2019e5f8808caeaea8adcb09b8c633fcf12b6e5b052"},{"version":"adb17fea4d847e1267ae1241fa1ac3917c7e332999ebdab388a24d82d4f58240","impliedFormat":1},{"version":"7b8a809945a762bda5b2af843b2100d508d8bb3f56610d52e06ff14588090e2c","signature":"e5e45f3e79d68c40027c738e589e7b91030321b87422fe81ae0a4ed0c31aacc9"},{"version":"0fe7b911ce54401a1081acce3535164367d084cb82b30209f5527a09267e8705","signature":"88136989354b82fa2b85b44122a14fe97e4a4011cd355e1177eff94521ec4546"},{"version":"7383c36c839bca83dd47c3a89f2549c40f43a965508ec3f48724b7f92f03212f","signature":"622b0052b866d092eba07edd852c8387fd7795ad843f28459ea2037d47557be1"},{"version":"5dc61ed80ed1a10b7396451013cde9a53427aa371b2969b271f3042c1a535aa2","signature":"a541b1cb49a4facfed8410772866153c831ddeef48d1758780426f03e289def6"},{"version":"c2a3da3e9ca4d2af1e3eea6e081e1b423a0ff784d4a69c8d51e5383164d144d5","signature":"aed3c72141d8f7af09129e98e9c8bad6ef629f49f274af14ae168b4d652cd30a","affectsGlobalScope":true},{"version":"05321b823dd3781d0b6aac8700bfdc0c9181d56479fe52ba6a40c9196fd661a8","impliedFormat":1},{"version":"f269a1c2a37fdf64fbf3808d72da60acdbd48d2023f5a16ab51b21de39dd318f","affectsGlobalScope":true,"impliedFormat":1},{"version":"2600d5cd5d653a62e1a22a0c894300919ab0e8c74e0fa1b17bd892d2418b9b3f","signature":"b9c4cb1a20a505341e4731b60e5c5ff7a01c9c964896fb3b175443da59b2c47c"},{"version":"9591b689e7f72cef8f31543aea42043f23d95621343f293790498b3c15cebc5c","signature":"c36671ab6fa870f4098595b4598979fe550698322e0471e0954b025402d68fb5"},{"version":"bc21af206a1024cb02f6d37698ed7a9f54b7a7937c826d7562eb3f95b74402f0","signature":"33dd13eccd122686a3f35561fcec524eae25b9c7cd935216cf58a5535398d34b"},{"version":"30a0dafaf51687c204ef1a81bc18b410b4034286222c915d5b3bc22ec010e21f","signature":"ef8a4d1857a5c7c8ed39232575bb06e64ee6740307937df732e9e26879a38e08"},{"version":"378481293c6685ff575c993352c9f51a462e88ac17ca6ff757e6a247cb621295","signature":"0caeaba9556e929b69c33a88c58b930f8842f6fdac8126f36698aae71a6b1f33","affectsGlobalScope":true},{"version":"2d3d335cb63d26d2e082da5ed8790835cead1b747a895159d26e96f32d837f39","signature":"24c2ce7868874d987b805e0ee01d3a77b803b882120969d818141872c556ddd6"},{"version":"93ad0e070fda8f735ddaa3cf63b20485a5cf63890a8a333ae43664dc4d41bb9a","signature":"87e85fabf012dce9d0e742291234e92206c6c141f7642cd53bae1961587afa02"},{"version":"1d04983baeda222d77011459aeb842c5edd30aa706956ff434ffdbe387e2f364","signature":"bafb5c31e63c0f88024eefcdae317a3a1171f500e32157adc015833fdf7cd615"},{"version":"9566baf39af3e8e8525367b91f8313d0f3dee7dd21aa76bb9ecbc5c3c66df739","impliedFormat":1},{"version":"b25c5f2970d06c729f464c0aeaa64b1a5b5f1355aa93554bb5f9c199b8624b1e","impliedFormat":1},{"version":"923c136dcbf20f140c369078a7eb56f6697889d104397d694f70e21dd08b1810","impliedFormat":1},{"version":"8041cfce439ff29d339742389de04c136e3029d6b1817f07b2d7fcbfb7534990","impliedFormat":1},{"version":"9566baf39af3e8e8525367b91f8313d0f3dee7dd21aa76bb9ecbc5c3c66df739","impliedFormat":1},{"version":"56dede90729ef85351f132d66e05510851211d627e2f2c6621475d4f7938f365","impliedFormat":1},{"version":"3e0a34f7207431d967dc32d593d1cda0c23975e9484bc8895b39d96ffca4a0d8","impliedFormat":1},{"version":"9566baf39af3e8e8525367b91f8313d0f3dee7dd21aa76bb9ecbc5c3c66df739","impliedFormat":1},{"version":"1fd8e7bda08591c056a1782cc7be557735461ee93be737a27e6714979cad018b","impliedFormat":1},{"version":"b6ddf3a46ccfa4441d8be84d2e9bf3087573c48804196faedbd4a25b60631beb","impliedFormat":1},{"version":"725d9be2fd48440256f4deb00649adffdbc5ecd282b09e89d4e200663792c34c","impliedFormat":1},{"version":"25b4a0c4fab47c373ee49df4c239826ee3430019fc0c1b5e59edc3e398b7468d","affectsGlobalScope":true,"impliedFormat":1},{"version":"7698983d080f951eaf53ff81e5c7bd61abc02e4a1a21266f1bd79ea85c0dc641","impliedFormat":1},{"version":"5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1","impliedFormat":1},{"version":"674bedbfd2004e233e2a266a3d2286e524f0d58787a98522d834d6ccda1d215a","impliedFormat":1},{"version":"714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef","impliedFormat":1},{"version":"23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83","impliedFormat":1},{"version":"64813a6beff756b9e3f3c06d1b648d55e7c90af2b55c64d13a69d6c7f573643d","impliedFormat":1},{"version":"5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed","impliedFormat":1},{"version":"2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317","impliedFormat":1},{"version":"06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70","affectsGlobalScope":true,"impliedFormat":1},{"version":"bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb","affectsGlobalScope":true,"impliedFormat":1},{"version":"a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576","impliedFormat":1},{"version":"c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10","impliedFormat":1},{"version":"1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7","impliedFormat":1},{"version":"9aff68f1b847b846d3d50a58c9f8f99389bedd0258d1b1c201f11b97ecfd36f8","impliedFormat":1},{"version":"1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba","impliedFormat":1},{"version":"05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466","impliedFormat":1},{"version":"8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340","impliedFormat":1},{"version":"f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657","impliedFormat":1},{"version":"32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc","impliedFormat":1},{"version":"0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca","impliedFormat":1},{"version":"ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f","impliedFormat":1},{"version":"06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8","impliedFormat":1},{"version":"f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3","impliedFormat":1},{"version":"73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da","impliedFormat":1},{"version":"8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71","impliedFormat":1},{"version":"d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25","impliedFormat":1},{"version":"94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa","impliedFormat":1},{"version":"2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9","impliedFormat":1},{"version":"bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3","impliedFormat":1},{"version":"0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a","impliedFormat":1},{"version":"3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837","impliedFormat":1},{"version":"631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9","impliedFormat":1},{"version":"2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7","impliedFormat":1},{"version":"da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14","impliedFormat":1},{"version":"66679e8ffbf1fddef1796c60757e54e6e6551dd9823f75ef2f80176473bdaaff","impliedFormat":1},{"version":"ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877","impliedFormat":1},{"version":"515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977","impliedFormat":1},{"version":"2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1","affectsGlobalScope":true,"impliedFormat":1},{"version":"780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf","impliedFormat":1},{"version":"ae68a04912ee5a0f589276f9ec60b095f8c40d48128a4575b3fdd7d93806931c","impliedFormat":1},{"version":"19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e","impliedFormat":1},{"version":"e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b","impliedFormat":1},{"version":"9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f","impliedFormat":1},{"version":"bf88ef4208a770ca39a844b182b3695df536326ea566893fdc5b8418702a331e","impliedFormat":1},{"version":"de18acda71730bac52f4b256ce7511bb56cc21f6f114c59c46782eff2f632857","impliedFormat":1},{"version":"7eb06594824ada538b1d8b48c3925a83e7db792f47a081a62cf3e5c4e23cf0ee","impliedFormat":1},{"version":"905c3e8f7ddaa6c391b60c05b2f4c3931d7127ad717a080359db3df510b7bdab","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"46894b2a21a60f8449ca6b2b7223b7179bba846a61b1434bed77b34b2902c306","affectsGlobalScope":true,"impliedFormat":1},{"version":"3411c785dbe8fd42f7d644d1e05a7e72b624774a08a9356479754999419c3c5a","impliedFormat":99},{"version":"8fb8fdda477cd7382477ffda92c2bb7d9f7ef583b1aa531eb6b2dc2f0a206c10","impliedFormat":99},{"version":"66995b0c991b5c5d42eff1d950733f85482c7419f7296ab8952e03718169e379","impliedFormat":99},{"version":"33f3795a4617f98b1bb8dac36312119d02f31897ae75436a1e109ce042b48ee8","impliedFormat":99},{"version":"2850c9c5dc28d34ad5f354117d0419f325fc8932d2a62eadc4dc52c018cd569b","impliedFormat":99},{"version":"c753948f7e0febe7aa1a5b71a714001a127a68861309b2c4127775aa9b6d4f24","impliedFormat":99},{"version":"3e7a40e023e1d4a9eef1a6f08a3ded8edacb67ae5fce072014205d730f717ba5","impliedFormat":99},{"version":"a77be6fc44c876bc10c897107f84eaba10790913ebdcad40fcda7e47469b2160","impliedFormat":99},{"version":"382100b010774614310d994bbf16cc9cd291c14f0d417126c7a7cfad1dc1d3f8","impliedFormat":99},{"version":"91f5dbcdb25d145a56cffe957ec665256827892d779ef108eb2f3864faff523b","impliedFormat":99},{"version":"4fdf56315340bd1770eb52e1601c3a98e45b1d207202831357e99ce29c35b55c","impliedFormat":99},{"version":"927955a3de5857e0a1c575ced5a4245e74e6821d720ed213141347dd1870197f","impliedFormat":99},{"version":"be6fd74528b32986fbf0cd2cfa9192a5ed7f369060b32a7adcb0c8d055708e61","impliedFormat":99},{"version":"cc256fd958b33576ed32c7338c64adb0d08fc0c2c6525010202fab83f32745da","impliedFormat":1},{"version":"fd0589ca571ad090b531d8c095e26caa53d4825c64d3ff2b2b1ab95d72294175","impliedFormat":1},{"version":"669843ecafb89ae1e944df06360e8966219e4c1c34c0d28aa2503272cdd444a7","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"5b5337f28573ffdbc95c3653c4a7961d0f02fdf4788888253bf74a3b5a05443e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"85f8ebd7f245e8bf29da270e8b53dcdd17528826ffd27176c5fc7e426213ef5a","impliedFormat":1},{"version":"c6c4fea9acc55d5e38ff2b70d57ab0b5cdbd08f8bc5d7a226e322cea128c5b57","impliedFormat":1},{"version":"fbd7321f009b1558c08ce03512281a4e6054d3f387eacbc77c2787eec2688e0f","impliedFormat":1},{"version":"f2556de9025de4e422d6088b7c2f7a9d9eddb6913026adc2179b03c629c88579","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdd93ec24853e61bfa4c63ebaa425ff3e474156e87a47d90122e1d8cc717c1f","impliedFormat":1},{"version":"af6f08f05ca54890779e07b70eebabcbaf192785d31b087f05ac18ad437eff8e","impliedFormat":1}],"root":[[39,42],[44,48],[51,58]],"options":{"allowJs":true,"declaration":true,"esModuleInterop":true,"jsx":2,"module":1,"noImplicitAny":true,"outDir":"./","strict":true,"target":1},"referencedMap":[[62,1],[123,2],[68,3],[60,4],[65,5],[64,4],[67,4],[116,6],[118,7],[119,8],[128,9],[143,10],[144,11],[113,12],[71,13],[114,14],[72,15],[73,16],[74,17],[75,18],[76,19],[77,20],[78,21],[79,22],[80,23],[81,24],[82,25],[83,26],[84,27],[85,28],[86,29],[115,30],[87,31],[88,32],[89,33],[90,34],[91,35],[92,36],[93,37],[94,38],[95,39],[96,40],[97,41],[98,42],[99,43],[100,44],[101,45],[102,46],[112,47],[103,48],[104,49],[105,18],[106,50],[107,51],[111,52],[108,53],[109,54],[49,55],[43,55],[50,56],[38,57],[171,58],[172,59],[147,60],[150,60],[169,58],[170,58],[160,58],[159,61],[157,58],[152,58],[165,58],[163,58],[167,58],[151,58],[164,58],[168,58],[153,58],[154,58],[166,58],[148,58],[155,58],[156,58],[158,58],[162,58],[173,62],[161,58],[149,58],[186,63],[180,62],[182,64],[181,62],[174,62],[175,62],[177,62],[179,62],[183,64],[184,64],[176,64],[178,64],[191,65],[127,66],[125,67],[126,68],[131,69],[140,70],[130,71],[141,72],[136,73],[137,74],[135,75],[139,76],[133,77],[132,78],[138,79],[134,70],[124,80],[40,81],[55,82],[48,83],[42,84],[45,85],[51,86],[41,81],[44,81],[46,87],[47,88],[58,89],[56,90],[52,81],[39,91]],"version":"5.6.2"}
@@ -1,5 +1,6 @@
1
1
  import type { ReactElement, ReactNode, Component, ComponentType } from 'react';
2
- type Store = any;
2
+ import type { Readable } from 'stream';
3
+ type Store = unknown;
3
4
  type ReactComponent = ComponentType<any> | string;
4
5
  export interface RailsContext {
5
6
  railsEnv: string;
@@ -40,16 +41,44 @@ interface ServerRenderResult {
40
41
  }
41
42
  type CreateReactOutputResult = ServerRenderResult | ReactElement | Promise<string>;
42
43
  type RenderFunctionResult = ReactComponent | ServerRenderResult | Promise<string>;
44
+ /**
45
+ * Render functions are used to create dynamic React components or server-rendered HTML with side effects.
46
+ * They receive two arguments: props and railsContext.
47
+ *
48
+ * @param props - The component props passed to the render function
49
+ * @param railsContext - The Rails context object containing environment information
50
+ * @returns A string, React component, React element, or a Promise resolving to a string
51
+ *
52
+ * @remarks
53
+ * To distinguish a render function from a React Function Component:
54
+ * 1. Ensure it accepts two parameters (props and railsContext), even if railsContext is unused, or
55
+ * 2. Set the `renderFunction` property to `true` on the function object.
56
+ *
57
+ * If neither condition is met, it will be treated as a React Function Component,
58
+ * and ReactDOMServer will attempt to render it.
59
+ *
60
+ * @example
61
+ * // Option 1: Two-parameter function
62
+ * const renderFunction = (props, railsContext) => { ... };
63
+ *
64
+ * // Option 2: Using renderFunction property
65
+ * const anotherRenderFunction = (props) => { ... };
66
+ * anotherRenderFunction.renderFunction = true;
67
+ */
43
68
  interface RenderFunction {
44
69
  (props?: any, railsContext?: RailsContext, domNodeId?: string): RenderFunctionResult;
45
- renderFunction?: boolean;
70
+ renderFunction?: true;
46
71
  }
47
72
  type ReactComponentOrRenderFunction = ReactComponent | RenderFunction;
48
73
  export type { // eslint-disable-line import/prefer-default-export
49
- ReactComponentOrRenderFunction, ReactComponent, AuthenticityHeaders, RenderFunction, RenderFunctionResult, StoreGenerator, CreateReactOutputResult, ServerRenderResult, };
74
+ ReactComponentOrRenderFunction, ReactComponent, AuthenticityHeaders, RenderFunction, RenderFunctionResult, Store, StoreGenerator, CreateReactOutputResult, ServerRenderResult, };
50
75
  export interface RegisteredComponent {
51
76
  name: string;
52
77
  component: ReactComponentOrRenderFunction;
78
+ /**
79
+ * Indicates if the registered component is a RenderFunction
80
+ * @see RenderFunction for more details on its behavior and usage.
81
+ */
53
82
  renderFunction: boolean;
54
83
  isRenderer: boolean;
55
84
  }
@@ -68,25 +97,22 @@ export interface CreateParams extends Params {
68
97
  componentObj: RegisteredComponent;
69
98
  shouldHydrate?: boolean;
70
99
  }
71
- interface FileError extends Error {
72
- fileName: string;
73
- lineNumber: string;
74
- }
75
100
  export interface ErrorOptions {
76
- e: FileError;
101
+ e: Error & {
102
+ fileName?: string;
103
+ lineNumber?: string;
104
+ };
77
105
  name?: string;
78
106
  jsCode?: string;
79
107
  serverSide: boolean;
80
108
  }
81
- export interface RenderingError {
82
- message: string;
83
- stack: string;
84
- }
109
+ export type RenderingError = Pick<Error, 'message' | 'stack'>;
85
110
  export interface RenderResult {
86
111
  html: string | null;
87
112
  consoleReplayScript: string;
88
113
  hasErrors: boolean;
89
114
  renderingError?: RenderingError;
115
+ isShellReady?: boolean;
90
116
  }
91
117
  export interface Root {
92
118
  render(children: ReactNode): void;
@@ -97,8 +123,12 @@ export interface ReactOnRails {
97
123
  register(components: {
98
124
  [id: string]: ReactComponentOrRenderFunction;
99
125
  }): void;
126
+ /** @deprecated Use registerStoreGenerators instead */
100
127
  registerStore(stores: {
101
- [id: string]: Store;
128
+ [id: string]: StoreGenerator;
129
+ }): void;
130
+ registerStoreGenerators(storeGenerators: {
131
+ [id: string]: StoreGenerator;
102
132
  }): void;
103
133
  getStore(name: string, throwIfMissing?: boolean): Store | undefined;
104
134
  setOptions(newOptions: {
@@ -118,6 +148,7 @@ export interface ReactOnRails {
118
148
  render(name: string, props: Record<string, string>, domNodeId: string, hydrate: boolean): RenderReturnType;
119
149
  getComponent(name: string): RegisteredComponent;
120
150
  serverRenderReactComponent(options: RenderParams): null | string | Promise<RenderResult>;
151
+ streamServerRenderedReactComponent(options: RenderParams): Readable;
121
152
  handleError(options: ErrorOptions): string | undefined;
122
153
  buildConsoleReplay(): string;
123
154
  registeredComponents(): Map<string, RegisteredComponent>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-on-rails",
3
- "version": "14.0.5",
3
+ "version": "14.1.0",
4
4
  "description": "react-on-rails JavaScript for react_on_rails Ruby gem",
5
5
  "main": "node_package/lib/ReactOnRails.js",
6
6
  "directories": {
@@ -15,8 +15,8 @@
15
15
  "@babel/preset-react": "^7.18.6",
16
16
  "@babel/types": "^7.20.7",
17
17
  "@types/jest": "^29.0.0",
18
- "@types/react": "^17.0.0",
19
- "@types/react-dom": "^17.0.0",
18
+ "@types/react": "^18.2.0",
19
+ "@types/react-dom": "^18.2.0",
20
20
  "@types/turbolinks": "^5.2.2",
21
21
  "@types/webpack-env": "^1.18.4",
22
22
  "@typescript-eslint/eslint-plugin": "^6.18.1",
@@ -39,12 +39,12 @@
39
39
  "prettier": "^2.8.8",
40
40
  "prettier-eslint-cli": "^5.0.0",
41
41
  "prop-types": "^15.8.1",
42
- "react": "^17.0.0",
43
- "react-dom": "^17.0.0",
42
+ "react": "18.3.0-canary-670811593-20240322",
43
+ "react-dom": "18.3.0-canary-670811593-20240322",
44
44
  "react-transform-hmr": "^1.0.4",
45
45
  "redux": "^4.2.1",
46
46
  "ts-jest": "^29.1.0",
47
- "typescript": "^5.3.3"
47
+ "typescript": "^5.6.2"
48
48
  },
49
49
  "dependencies": {
50
50
  "@babel/runtime-corejs3": "^7.12.5"
@@ -61,6 +61,8 @@
61
61
  "test": "jest node_package/tests",
62
62
  "clean": "rm -rf node_package/lib",
63
63
  "start": "nps",
64
+ "prepack": "nps build.prepack",
65
+ "prepare": "nps build.prepack",
64
66
  "prepublishOnly": "yarn run build",
65
67
  "build": "yarn run clean && yarn run tsc --declaration",
66
68
  "build-watch": "yarn run clean && yarn run tsc --watch",
@@ -88,5 +90,6 @@
88
90
  "bugs": {
89
91
  "url": "https://github.com/shakacode/react_on_rails/issues"
90
92
  },
91
- "homepage": "https://github.com/shakacode/react_on_rails#readme"
93
+ "homepage": "https://github.com/shakacode/react_on_rails#readme",
94
+ "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
92
95
  }