react-on-rails-pro-node-renderer 16.2.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/CHANGELOG.md +570 -0
  2. package/LICENSE +98 -0
  3. package/LICENSE_SETUP.md +272 -0
  4. package/README.md +577 -0
  5. package/package.json +159 -0
  6. package/packages/node-renderer/dist/ReactOnRailsProNodeRenderer.d.ts +3 -0
  7. package/packages/node-renderer/dist/ReactOnRailsProNodeRenderer.d.ts.map +1 -0
  8. package/packages/node-renderer/dist/ReactOnRailsProNodeRenderer.js +48 -0
  9. package/packages/node-renderer/dist/ReactOnRailsProNodeRenderer.js.map +1 -0
  10. package/packages/node-renderer/dist/default-node-renderer.d.ts +2 -0
  11. package/packages/node-renderer/dist/default-node-renderer.d.ts.map +1 -0
  12. package/packages/node-renderer/dist/default-node-renderer.js +9 -0
  13. package/packages/node-renderer/dist/default-node-renderer.js.map +1 -0
  14. package/packages/node-renderer/dist/integrations/api.d.ts +29 -0
  15. package/packages/node-renderer/dist/integrations/api.d.ts.map +1 -0
  16. package/packages/node-renderer/dist/integrations/api.js +43 -0
  17. package/packages/node-renderer/dist/integrations/api.js.map +1 -0
  18. package/packages/node-renderer/dist/integrations/honeybadger.d.ts +4 -0
  19. package/packages/node-renderer/dist/integrations/honeybadger.d.ts.map +1 -0
  20. package/packages/node-renderer/dist/integrations/honeybadger.js +52 -0
  21. package/packages/node-renderer/dist/integrations/honeybadger.js.map +1 -0
  22. package/packages/node-renderer/dist/integrations/sentry.d.ts +11 -0
  23. package/packages/node-renderer/dist/integrations/sentry.d.ts.map +1 -0
  24. package/packages/node-renderer/dist/integrations/sentry.js +59 -0
  25. package/packages/node-renderer/dist/integrations/sentry.js.map +1 -0
  26. package/packages/node-renderer/dist/integrations/sentry6.d.ts +13 -0
  27. package/packages/node-renderer/dist/integrations/sentry6.d.ts.map +1 -0
  28. package/packages/node-renderer/dist/integrations/sentry6.js +43 -0
  29. package/packages/node-renderer/dist/integrations/sentry6.js.map +1 -0
  30. package/packages/node-renderer/dist/master/restartWorkers.d.ts +12 -0
  31. package/packages/node-renderer/dist/master/restartWorkers.d.ts.map +1 -0
  32. package/packages/node-renderer/dist/master/restartWorkers.js +48 -0
  33. package/packages/node-renderer/dist/master/restartWorkers.js.map +1 -0
  34. package/packages/node-renderer/dist/master.d.ts +4 -0
  35. package/packages/node-renderer/dist/master.d.ts.map +1 -0
  36. package/packages/node-renderer/dist/master.js +85 -0
  37. package/packages/node-renderer/dist/master.js.map +1 -0
  38. package/packages/node-renderer/dist/shared/configBuilder.d.ts +34 -0
  39. package/packages/node-renderer/dist/shared/configBuilder.d.ts.map +1 -0
  40. package/packages/node-renderer/dist/shared/configBuilder.js +200 -0
  41. package/packages/node-renderer/dist/shared/configBuilder.js.map +1 -0
  42. package/packages/node-renderer/dist/shared/debug.d.ts +3 -0
  43. package/packages/node-renderer/dist/shared/debug.d.ts.map +1 -0
  44. package/packages/node-renderer/dist/shared/debug.js +4 -0
  45. package/packages/node-renderer/dist/shared/debug.js.map +1 -0
  46. package/packages/node-renderer/dist/shared/errorReporter.d.ts +25 -0
  47. package/packages/node-renderer/dist/shared/errorReporter.d.ts.map +1 -0
  48. package/packages/node-renderer/dist/shared/errorReporter.js +57 -0
  49. package/packages/node-renderer/dist/shared/errorReporter.js.map +1 -0
  50. package/packages/node-renderer/dist/shared/fileExistsAsync.d.ts +3 -0
  51. package/packages/node-renderer/dist/shared/fileExistsAsync.d.ts.map +1 -0
  52. package/packages/node-renderer/dist/shared/fileExistsAsync.js +21 -0
  53. package/packages/node-renderer/dist/shared/fileExistsAsync.js.map +1 -0
  54. package/packages/node-renderer/dist/shared/licensePublicKey.d.ts +2 -0
  55. package/packages/node-renderer/dist/shared/licensePublicKey.d.ts.map +1 -0
  56. package/packages/node-renderer/dist/shared/licensePublicKey.js +23 -0
  57. package/packages/node-renderer/dist/shared/licensePublicKey.js.map +1 -0
  58. package/packages/node-renderer/dist/shared/licenseValidator.d.ts +34 -0
  59. package/packages/node-renderer/dist/shared/licenseValidator.d.ts.map +1 -0
  60. package/packages/node-renderer/dist/shared/licenseValidator.js +240 -0
  61. package/packages/node-renderer/dist/shared/licenseValidator.js.map +1 -0
  62. package/packages/node-renderer/dist/shared/locks.d.ts +13 -0
  63. package/packages/node-renderer/dist/shared/locks.d.ts.map +1 -0
  64. package/packages/node-renderer/dist/shared/locks.js +73 -0
  65. package/packages/node-renderer/dist/shared/locks.js.map +1 -0
  66. package/packages/node-renderer/dist/shared/log.d.ts +5 -0
  67. package/packages/node-renderer/dist/shared/log.d.ts.map +1 -0
  68. package/packages/node-renderer/dist/shared/log.js +56 -0
  69. package/packages/node-renderer/dist/shared/log.js.map +1 -0
  70. package/packages/node-renderer/dist/shared/packageJson.d.ts +3 -0
  71. package/packages/node-renderer/dist/shared/packageJson.d.ts.map +1 -0
  72. package/packages/node-renderer/dist/shared/packageJson.js +7 -0
  73. package/packages/node-renderer/dist/shared/packageJson.js.map +1 -0
  74. package/packages/node-renderer/dist/shared/sharedConsoleHistory.d.ts +17 -0
  75. package/packages/node-renderer/dist/shared/sharedConsoleHistory.d.ts.map +1 -0
  76. package/packages/node-renderer/dist/shared/sharedConsoleHistory.js +88 -0
  77. package/packages/node-renderer/dist/shared/sharedConsoleHistory.js.map +1 -0
  78. package/packages/node-renderer/dist/shared/tracing.d.ts +53 -0
  79. package/packages/node-renderer/dist/shared/tracing.d.ts.map +1 -0
  80. package/packages/node-renderer/dist/shared/tracing.js +39 -0
  81. package/packages/node-renderer/dist/shared/tracing.js.map +1 -0
  82. package/packages/node-renderer/dist/shared/truthy.d.ts +3 -0
  83. package/packages/node-renderer/dist/shared/truthy.d.ts.map +1 -0
  84. package/packages/node-renderer/dist/shared/truthy.js +5 -0
  85. package/packages/node-renderer/dist/shared/truthy.js.map +1 -0
  86. package/packages/node-renderer/dist/shared/utils.d.ts +45 -0
  87. package/packages/node-renderer/dist/shared/utils.d.ts.map +1 -0
  88. package/packages/node-renderer/dist/shared/utils.js +169 -0
  89. package/packages/node-renderer/dist/shared/utils.js.map +1 -0
  90. package/packages/node-renderer/dist/tsconfig.tsbuildinfo +1 -0
  91. package/packages/node-renderer/dist/worker/authHandler.d.ts +16 -0
  92. package/packages/node-renderer/dist/worker/authHandler.d.ts.map +1 -0
  93. package/packages/node-renderer/dist/worker/authHandler.js +21 -0
  94. package/packages/node-renderer/dist/worker/authHandler.js.map +1 -0
  95. package/packages/node-renderer/dist/worker/checkProtocolVersionHandler.d.ts +14 -0
  96. package/packages/node-renderer/dist/worker/checkProtocolVersionHandler.d.ts.map +1 -0
  97. package/packages/node-renderer/dist/worker/checkProtocolVersionHandler.js +89 -0
  98. package/packages/node-renderer/dist/worker/checkProtocolVersionHandler.js.map +1 -0
  99. package/packages/node-renderer/dist/worker/handleGracefulShutdown.d.ts +4 -0
  100. package/packages/node-renderer/dist/worker/handleGracefulShutdown.d.ts.map +1 -0
  101. package/packages/node-renderer/dist/worker/handleGracefulShutdown.js +45 -0
  102. package/packages/node-renderer/dist/worker/handleGracefulShutdown.js.map +1 -0
  103. package/packages/node-renderer/dist/worker/handleRenderRequest.d.ts +24 -0
  104. package/packages/node-renderer/dist/worker/handleRenderRequest.d.ts.map +1 -0
  105. package/packages/node-renderer/dist/worker/handleRenderRequest.js +200 -0
  106. package/packages/node-renderer/dist/worker/handleRenderRequest.js.map +1 -0
  107. package/packages/node-renderer/dist/worker/types.d.ts +6 -0
  108. package/packages/node-renderer/dist/worker/types.d.ts.map +1 -0
  109. package/packages/node-renderer/dist/worker/types.js +3 -0
  110. package/packages/node-renderer/dist/worker/types.js.map +1 -0
  111. package/packages/node-renderer/dist/worker/vm.d.ts +50 -0
  112. package/packages/node-renderer/dist/worker/vm.d.ts.map +1 -0
  113. package/packages/node-renderer/dist/worker/vm.js +297 -0
  114. package/packages/node-renderer/dist/worker/vm.js.map +1 -0
  115. package/packages/node-renderer/dist/worker.d.ts +25 -0
  116. package/packages/node-renderer/dist/worker.d.ts.map +1 -0
  117. package/packages/node-renderer/dist/worker.js +374 -0
  118. package/packages/node-renderer/dist/worker.js.map +1 -0
  119. package/readme-gen-docs.md +1 -0
  120. package/script/preinstall.js +31 -0
  121. package/spec/dummy/.nvmrc +1 -0
  122. package/spec/execjs-compatible-dummy/log/.keep +0 -0
  123. package/spec/execjs-compatible-dummy/storage/.keep +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,EAAe,MAAM,EAAa,MAAM,wBAAwB,CAAC;AAExE,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,gBAAgB,CAAC;AAKpF,OAAO,EAOL,KAAK,EAIN,MAAM,gBAAgB,CAAC;AAYxB,OAAO,QAAQ,oBAAoB,CAAC;IAClC,UAAU,aAAa;QAErB,KAAK,EAAE,KAAK,CAAC;KACd;CACF;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;AAInE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,qBAAqB,QAErE;AAiCD,eAAO,MAAM,YAAY,YAExB,CAAC;AAkBF,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;;EA0UlD"}
@@ -0,0 +1,374 @@
1
+ "use strict";
2
+ /**
3
+ * Entry point for worker process that handles requests.
4
+ * @module worker
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
29
+ var __importDefault = (this && this.__importDefault) || function (mod) {
30
+ return (mod && mod.__esModule) ? mod : { "default": mod };
31
+ };
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.disableHttp2 = void 0;
34
+ exports.configureFastify = configureFastify;
35
+ exports.default = run;
36
+ const path_1 = __importDefault(require("path"));
37
+ const cluster_1 = __importDefault(require("cluster"));
38
+ const promises_1 = require("fs/promises");
39
+ const fastify_1 = __importDefault(require("fastify"));
40
+ const formbody_1 = __importDefault(require("@fastify/formbody"));
41
+ const multipart_1 = __importDefault(require("@fastify/multipart"));
42
+ const log_1 = __importStar(require("./shared/log"));
43
+ const packageJson_1 = __importDefault(require("./shared/packageJson"));
44
+ const configBuilder_1 = require("./shared/configBuilder");
45
+ const fileExistsAsync_1 = __importDefault(require("./shared/fileExistsAsync"));
46
+ const checkProtocolVersionHandler_1 = __importDefault(require("./worker/checkProtocolVersionHandler"));
47
+ const authHandler_1 = __importDefault(require("./worker/authHandler"));
48
+ const handleRenderRequest_1 = require("./worker/handleRenderRequest");
49
+ const handleGracefulShutdown_1 = __importDefault(require("./worker/handleGracefulShutdown"));
50
+ const utils_1 = require("./shared/utils");
51
+ const errorReporter = __importStar(require("./shared/errorReporter"));
52
+ const locks_1 = require("./shared/locks");
53
+ const tracing_1 = require("./shared/tracing");
54
+ const fastifyConfigFunctions = [];
55
+ /**
56
+ * Configures Fastify instance before starting the server.
57
+ * @param configFunction The configuring function. Normally it will be something like `(app) => { app.register(...); }`
58
+ * or `(app) => { app.addHook(...); }` to report data from Fastify to an external service.
59
+ * Note that we call `await app.ready()` in our code, so you don't need to `await` the results.
60
+ */
61
+ function configureFastify(configFunction) {
62
+ fastifyConfigFunctions.push(configFunction);
63
+ }
64
+ function setHeaders(headers, res) {
65
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises -- fixing it with `void` just violates no-void
66
+ Object.entries(headers).forEach(([key, header]) => res.header(key, header));
67
+ }
68
+ const setResponse = async (result, res) => {
69
+ const { status, data, headers, stream } = result;
70
+ if (status !== 200 && status !== 410) {
71
+ log_1.default.info({ msg: 'Sending non-200, non-410 data back', data });
72
+ }
73
+ setHeaders(headers, res);
74
+ res.status(status);
75
+ if (stream) {
76
+ await res.send(stream);
77
+ }
78
+ else {
79
+ res.send(data);
80
+ }
81
+ };
82
+ const isAsset = (value) => value.type === 'asset';
83
+ function assertAsset(value, key) {
84
+ if (!isAsset(value)) {
85
+ throw new Error(`React On Rails Error: Expected an asset for key: ${key}`);
86
+ }
87
+ }
88
+ // Remove after this issue is resolved: https://github.com/fastify/light-my-request/issues/315
89
+ let useHttp2 = true;
90
+ // Call before any test using `app.inject()`
91
+ const disableHttp2 = () => {
92
+ useHttp2 = false;
93
+ };
94
+ exports.disableHttp2 = disableHttp2;
95
+ const extractBodyArrayField = (body, key) => {
96
+ const value = body[key] ?? body[`${key}[]`];
97
+ if (Array.isArray(value)) {
98
+ return value;
99
+ }
100
+ if (typeof value === 'string' && value.length > 0) {
101
+ return [value];
102
+ }
103
+ return undefined;
104
+ };
105
+ function run(config) {
106
+ // Store config in app state. From now it can be loaded by any module using
107
+ // getConfig():
108
+ (0, configBuilder_1.buildConfig)(config);
109
+ const { serverBundleCachePath, logHttpLevel, port, fastifyServerOptions, workersCount } = (0, configBuilder_1.getConfig)();
110
+ const app = (0, fastify_1.default)({
111
+ http2: useHttp2,
112
+ bodyLimit: 104857600, // 100 MB
113
+ logger: logHttpLevel !== 'silent' ? { name: 'RORP HTTP', level: logHttpLevel, ...log_1.sharedLoggerOptions } : false,
114
+ ...fastifyServerOptions,
115
+ });
116
+ (0, handleGracefulShutdown_1.default)(app);
117
+ // We shouldn't have unhandled errors here, but just in case
118
+ app.addHook('onError', (req, res, err, done) => {
119
+ // Not errorReporter.error so that integrations can decide how to log the errors.
120
+ app.log.error({ msg: 'Unhandled Fastify error', err, req, res });
121
+ done();
122
+ });
123
+ // 10 MB limit for code including props
124
+ const fieldSizeLimit = 1024 * 1024 * 10;
125
+ // Supports application/x-www-form-urlencoded
126
+ void app.register(formbody_1.default);
127
+ // Supports multipart/form-data
128
+ void app.register(multipart_1.default, {
129
+ attachFieldsToBody: 'keyValues',
130
+ limits: {
131
+ fieldSize: fieldSizeLimit,
132
+ // For bundles and assets
133
+ fileSize: Infinity,
134
+ },
135
+ onFile: async (part) => {
136
+ const destinationPath = path_1.default.join(serverBundleCachePath, 'uploads', part.filename);
137
+ // TODO: inline here
138
+ await (0, utils_1.saveMultipartFile)(part, destinationPath);
139
+ // eslint-disable-next-line no-param-reassign
140
+ part.value = {
141
+ filename: part.filename,
142
+ savedFilePath: destinationPath,
143
+ type: 'asset',
144
+ };
145
+ },
146
+ });
147
+ const isProtocolVersionMatch = async (req, res) => {
148
+ // Check protocol version
149
+ const protocolVersionCheckingResult = (0, checkProtocolVersionHandler_1.default)(req);
150
+ if (typeof protocolVersionCheckingResult === 'object') {
151
+ await setResponse(protocolVersionCheckingResult, res);
152
+ return false;
153
+ }
154
+ return true;
155
+ };
156
+ const isAuthenticated = async (req, res) => {
157
+ // Authenticate Ruby client
158
+ const authResult = (0, authHandler_1.default)(req);
159
+ if (typeof authResult === 'object') {
160
+ await setResponse(authResult, res);
161
+ return false;
162
+ }
163
+ return true;
164
+ };
165
+ const requestPrechecks = async (req, res) => {
166
+ if (!(await isProtocolVersionMatch(req, res))) {
167
+ return false;
168
+ }
169
+ if (!(await isAuthenticated(req, res))) {
170
+ return false;
171
+ }
172
+ return true;
173
+ };
174
+ // See https://github.com/shakacode/react_on_rails_pro/issues/119 for why
175
+ // the digest is part of the request URL. Yes, it's not used here, but the
176
+ // server logs might show it to distinguish different requests.
177
+ app.post('/bundles/:bundleTimestamp/render/:renderRequestDigest', async (req, res) => {
178
+ if (!(await requestPrechecks(req, res))) {
179
+ return;
180
+ }
181
+ // DO NOT REMOVE (REQUIRED FOR TIMEOUT TESTING)
182
+ // if(TESTING_TIMEOUTS && getRandomInt(2) === 1) {
183
+ // console.log(
184
+ // 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ');
185
+ // console.log(`Sleeping, to test timeouts`);
186
+ // console.log(
187
+ // 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ');
188
+ //
189
+ // await delay(100000);
190
+ // }
191
+ const { renderingRequest } = req.body;
192
+ const { bundleTimestamp } = req.params;
193
+ const providedNewBundles = [];
194
+ const assetsToCopy = [];
195
+ Object.entries(req.body).forEach(([key, value]) => {
196
+ if (key === 'bundle') {
197
+ assertAsset(value, key);
198
+ providedNewBundles.push({ timestamp: bundleTimestamp, bundle: value });
199
+ }
200
+ else if (key.startsWith('bundle_')) {
201
+ assertAsset(value, key);
202
+ providedNewBundles.push({ timestamp: key.replace('bundle_', ''), bundle: value });
203
+ }
204
+ else if (isAsset(value)) {
205
+ assetsToCopy.push(value);
206
+ }
207
+ });
208
+ try {
209
+ const dependencyBundleTimestamps = extractBodyArrayField(req.body, 'dependencyBundleTimestamps');
210
+ await (0, tracing_1.trace)(async (context) => {
211
+ try {
212
+ const result = await (0, handleRenderRequest_1.handleRenderRequest)({
213
+ renderingRequest,
214
+ bundleTimestamp,
215
+ dependencyBundleTimestamps,
216
+ providedNewBundles,
217
+ assetsToCopy,
218
+ });
219
+ await setResponse(result, res);
220
+ }
221
+ catch (err) {
222
+ const exceptionMessage = (0, utils_1.formatExceptionMessage)(renderingRequest, err, 'UNHANDLED error in handleRenderRequest');
223
+ errorReporter.message(exceptionMessage, context);
224
+ await setResponse((0, utils_1.errorResponseResult)(exceptionMessage), res);
225
+ }
226
+ }, (0, tracing_1.startSsrRequestOptions)({ renderingRequest }));
227
+ }
228
+ catch (theErr) {
229
+ const exceptionMessage = (0, utils_1.formatExceptionMessage)(renderingRequest, theErr);
230
+ errorReporter.message(`Unhandled top level error: ${exceptionMessage}`);
231
+ await setResponse((0, utils_1.errorResponseResult)(exceptionMessage), res);
232
+ }
233
+ });
234
+ // There can be additional files that might be required at the runtime.
235
+ // Since the remote renderer doesn't contain any assets, they must be uploaded manually.
236
+ app.post('/upload-assets', async (req, res) => {
237
+ if (!(await requestPrechecks(req, res))) {
238
+ return;
239
+ }
240
+ let lockAcquired = false;
241
+ let lockfileName;
242
+ const assets = Object.values(req.body).filter(isAsset);
243
+ // Handle targetBundles as either a string or an array
244
+ const targetBundles = extractBodyArrayField(req.body, 'targetBundles');
245
+ if (!targetBundles || targetBundles.length === 0) {
246
+ const errorMsg = 'No targetBundles provided. As of protocol version 2.0.0, targetBundles is required.';
247
+ log_1.default.error(errorMsg);
248
+ await setResponse((0, utils_1.errorResponseResult)(errorMsg), res);
249
+ return;
250
+ }
251
+ const assetsDescription = JSON.stringify(assets.map((asset) => asset.filename));
252
+ const taskDescription = `Uploading files ${assetsDescription} to bundle directories: ${targetBundles.join(', ')}`;
253
+ try {
254
+ const { lockfileName: name, wasLockAcquired, errorMessage } = await (0, locks_1.lock)('transferring-assets');
255
+ lockfileName = name;
256
+ lockAcquired = wasLockAcquired;
257
+ if (!wasLockAcquired) {
258
+ const msg = (0, utils_1.formatExceptionMessage)(taskDescription, errorMessage, `Failed to acquire lock ${lockfileName}. Worker: ${(0, utils_1.workerIdLabel)()}.`);
259
+ await setResponse((0, utils_1.errorResponseResult)(msg), res);
260
+ }
261
+ else {
262
+ log_1.default.info(taskDescription);
263
+ try {
264
+ // Prepare all directories first
265
+ const directoryPromises = targetBundles.map(async (bundleTimestamp) => {
266
+ const bundleDirectory = (0, utils_1.getBundleDirectory)(bundleTimestamp);
267
+ // Check if bundle directory exists, create if not
268
+ if (!(await (0, fileExistsAsync_1.default)(bundleDirectory))) {
269
+ log_1.default.info(`Creating bundle directory: ${bundleDirectory}`);
270
+ await (0, promises_1.mkdir)(bundleDirectory, { recursive: true });
271
+ }
272
+ return bundleDirectory;
273
+ });
274
+ const bundleDirectories = await Promise.all(directoryPromises);
275
+ // Copy assets to each bundle directory
276
+ const assetCopyPromises = bundleDirectories.map(async (bundleDirectory) => {
277
+ await (0, utils_1.copyUploadedAssets)(assets, bundleDirectory);
278
+ log_1.default.info(`Copied assets to bundle directory: ${bundleDirectory}`);
279
+ });
280
+ await Promise.all(assetCopyPromises);
281
+ // Delete assets from uploads directory
282
+ await (0, utils_1.deleteUploadedAssets)(assets);
283
+ await setResponse({
284
+ status: 200,
285
+ headers: {},
286
+ }, res);
287
+ }
288
+ catch (err) {
289
+ const msg = 'ERROR when trying to copy assets';
290
+ const message = `${msg}. ${err}. Task: ${taskDescription}`;
291
+ log_1.default.error({
292
+ msg,
293
+ err,
294
+ task: taskDescription,
295
+ });
296
+ await setResponse((0, utils_1.errorResponseResult)(message), res);
297
+ }
298
+ }
299
+ }
300
+ finally {
301
+ if (lockAcquired) {
302
+ try {
303
+ if (lockfileName) {
304
+ await (0, locks_1.unlock)(lockfileName);
305
+ }
306
+ }
307
+ catch (error) {
308
+ log_1.default.warn({
309
+ msg: `Error unlocking ${lockfileName} from worker ${(0, utils_1.workerIdLabel)()}`,
310
+ err: error,
311
+ task: taskDescription,
312
+ });
313
+ }
314
+ }
315
+ }
316
+ });
317
+ // Checks if file exist
318
+ app.post('/asset-exists', async (req, res) => {
319
+ if (!(await isAuthenticated(req, res))) {
320
+ return;
321
+ }
322
+ const { filename } = req.query;
323
+ if (!filename) {
324
+ const message = `ERROR: filename param not provided to GET /asset-exists`;
325
+ log_1.default.info(message);
326
+ await setResponse((0, utils_1.errorResponseResult)(message), res);
327
+ return;
328
+ }
329
+ // Handle targetBundles as either a string or an array
330
+ const targetBundles = extractBodyArrayField(req.body, 'targetBundles');
331
+ if (!targetBundles || targetBundles.length === 0) {
332
+ const errorMsg = 'No targetBundles provided. As of protocol version 2.0.0, targetBundles is required.';
333
+ log_1.default.error(errorMsg);
334
+ await setResponse((0, utils_1.errorResponseResult)(errorMsg), res);
335
+ return;
336
+ }
337
+ // Check if the asset exists in each of the target bundles
338
+ const results = await Promise.all(targetBundles.map(async (bundleHash) => {
339
+ const assetPath = (0, utils_1.getAssetPath)(bundleHash, filename);
340
+ const exists = await (0, fileExistsAsync_1.default)(assetPath);
341
+ if (exists) {
342
+ log_1.default.info(`/asset-exists Uploaded asset DOES exist in bundle ${bundleHash}: ${assetPath}`);
343
+ }
344
+ else {
345
+ log_1.default.info(`/asset-exists Uploaded asset DOES NOT exist in bundle ${bundleHash}: ${assetPath}`);
346
+ }
347
+ return { bundleHash, exists };
348
+ }));
349
+ // Asset exists if it exists in all target bundles
350
+ const allExist = results.every((result) => result.exists);
351
+ await setResponse({ status: 200, data: { exists: allExist, results }, headers: {} }, res);
352
+ });
353
+ app.get('/info', (_req, res) => {
354
+ res.send({
355
+ node_version: process.version,
356
+ renderer_version: packageJson_1.default.version,
357
+ });
358
+ });
359
+ // In tests we will run worker in master thread, so we need to ensure server
360
+ // will not listen:
361
+ // we are extracting worker from cluster to avoid false TS error
362
+ const { worker } = cluster_1.default;
363
+ if (workersCount === 0 || cluster_1.default.isWorker) {
364
+ app.listen({ port }, () => {
365
+ const workerName = worker ? `worker #${worker.id}` : 'master (single-process)';
366
+ log_1.default.info(`Node renderer ${workerName} listening on port ${port}!`);
367
+ });
368
+ }
369
+ fastifyConfigFunctions.forEach((configFunction) => {
370
+ configFunction(app);
371
+ });
372
+ return app;
373
+ }
374
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ [See documentation wiki](https://github.com/shakacode/react_on_rails/wiki)
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+
3
+ const path = require('path');
4
+ const cp = require('child_process');
5
+
6
+ const inNodeModules = __dirname.split(path.sep).includes('node_modules');
7
+
8
+ if (inNodeModules) {
9
+ console.log('preinstall: running inside node_modules — skipping link steps.');
10
+ process.exit(0);
11
+ }
12
+
13
+ function runCommand(cmd, args) {
14
+ const res = cp.spawnSync(cmd, args, { stdio: 'inherit' });
15
+ if (res.error) throw res.error;
16
+ if (res.status !== 0) throw new Error(`${cmd} ${args.join(' ')} exited with status ${res.status}`);
17
+ }
18
+
19
+ try {
20
+ // Run the original optional link steps sequentially in a cross-platform way.
21
+ // First run the package script `link-source` via yarn, which will run any shell ops inside the script
22
+ // (yarn itself will handle invoking a shell for the script body), then call yalc.
23
+ runCommand('yarn', ['run', 'link-source']);
24
+ runCommand('yalc', ['add', '--link', 'react-on-rails']);
25
+ } catch (err) {
26
+ // Don't fail the overall install if these optional commands aren't available or fail,
27
+ // just log the error.
28
+ console.error('preinstall: optional link steps failed or are unavailable — continuing.', err);
29
+ // Keep the exit code 0 so the install doesn't fail.
30
+ process.exit(0);
31
+ }
@@ -0,0 +1 @@
1
+ v22.12.0
File without changes
File without changes