@happy-dom/server-renderer 19.0.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.
Files changed (93) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -0
  3. package/bin/lib/happy-dom-sr.d.ts +3 -0
  4. package/bin/lib/happy-dom-sr.d.ts.map +1 -0
  5. package/bin/lib/happy-dom-sr.js +25 -0
  6. package/bin/lib/happy-dom-sr.js.map +1 -0
  7. package/bin/src/happy-dom-sr.ts +30 -0
  8. package/lib/ServerRenderer.d.ts +36 -0
  9. package/lib/ServerRenderer.d.ts.map +1 -0
  10. package/lib/ServerRenderer.js +270 -0
  11. package/lib/ServerRenderer.js.map +1 -0
  12. package/lib/ServerRendererBrowser.d.ts +26 -0
  13. package/lib/ServerRendererBrowser.d.ts.map +1 -0
  14. package/lib/ServerRendererBrowser.js +244 -0
  15. package/lib/ServerRendererBrowser.js.map +1 -0
  16. package/lib/ServerRendererServer.d.ts +22 -0
  17. package/lib/ServerRendererServer.d.ts.map +1 -0
  18. package/lib/ServerRendererServer.js +263 -0
  19. package/lib/ServerRendererServer.js.map +1 -0
  20. package/lib/ServerRendererWorker.d.ts +10 -0
  21. package/lib/ServerRendererWorker.d.ts.map +1 -0
  22. package/lib/ServerRendererWorker.js +25 -0
  23. package/lib/ServerRendererWorker.js.map +1 -0
  24. package/lib/config/DefaultServerRendererConfiguration.d.ts +4 -0
  25. package/lib/config/DefaultServerRendererConfiguration.d.ts.map +1 -0
  26. package/lib/config/DefaultServerRendererConfiguration.js +40 -0
  27. package/lib/config/DefaultServerRendererConfiguration.js.map +1 -0
  28. package/lib/enums/ServerRendererLogLevelEnum.d.ts +9 -0
  29. package/lib/enums/ServerRendererLogLevelEnum.d.ts.map +1 -0
  30. package/lib/enums/ServerRendererLogLevelEnum.js +10 -0
  31. package/lib/enums/ServerRendererLogLevelEnum.js.map +1 -0
  32. package/lib/index.d.ts +9 -0
  33. package/lib/index.d.ts.map +1 -0
  34. package/lib/index.js +5 -0
  35. package/lib/index.js.map +1 -0
  36. package/lib/types/IOptionalServerRendererConfiguration.d.ts +108 -0
  37. package/lib/types/IOptionalServerRendererConfiguration.d.ts.map +1 -0
  38. package/lib/types/IOptionalServerRendererConfiguration.js +2 -0
  39. package/lib/types/IOptionalServerRendererConfiguration.js.map +1 -0
  40. package/lib/types/IServerRendererConfiguration.d.ts +108 -0
  41. package/lib/types/IServerRendererConfiguration.d.ts.map +1 -0
  42. package/lib/types/IServerRendererConfiguration.js +2 -0
  43. package/lib/types/IServerRendererConfiguration.js.map +1 -0
  44. package/lib/types/IServerRendererItem.d.ts +8 -0
  45. package/lib/types/IServerRendererItem.d.ts.map +1 -0
  46. package/lib/types/IServerRendererItem.js +2 -0
  47. package/lib/types/IServerRendererItem.js.map +1 -0
  48. package/lib/types/IServerRendererResult.d.ts +14 -0
  49. package/lib/types/IServerRendererResult.d.ts.map +1 -0
  50. package/lib/types/IServerRendererResult.js +2 -0
  51. package/lib/types/IServerRendererResult.js.map +1 -0
  52. package/lib/utilities/BrowserWindowPolyfill.d.ts +13 -0
  53. package/lib/utilities/BrowserWindowPolyfill.d.ts.map +1 -0
  54. package/lib/utilities/BrowserWindowPolyfill.js +92 -0
  55. package/lib/utilities/BrowserWindowPolyfill.js.map +1 -0
  56. package/lib/utilities/HelpPrinter.d.ts +10 -0
  57. package/lib/utilities/HelpPrinter.d.ts.map +1 -0
  58. package/lib/utilities/HelpPrinter.js +32 -0
  59. package/lib/utilities/HelpPrinter.js.map +1 -0
  60. package/lib/utilities/HelpPrinterRows.d.ts +3 -0
  61. package/lib/utilities/HelpPrinterRows.d.ts.map +1 -0
  62. package/lib/utilities/HelpPrinterRows.js +261 -0
  63. package/lib/utilities/HelpPrinterRows.js.map +1 -0
  64. package/lib/utilities/PackageVersion.d.ts +10 -0
  65. package/lib/utilities/PackageVersion.d.ts.map +1 -0
  66. package/lib/utilities/PackageVersion.js +13 -0
  67. package/lib/utilities/PackageVersion.js.map +1 -0
  68. package/lib/utilities/ProcessArgumentsParser.d.ts +20 -0
  69. package/lib/utilities/ProcessArgumentsParser.d.ts.map +1 -0
  70. package/lib/utilities/ProcessArgumentsParser.js +319 -0
  71. package/lib/utilities/ProcessArgumentsParser.js.map +1 -0
  72. package/lib/utilities/ServerRendererConfigurationFactory.d.ts +23 -0
  73. package/lib/utilities/ServerRendererConfigurationFactory.d.ts.map +1 -0
  74. package/lib/utilities/ServerRendererConfigurationFactory.js +82 -0
  75. package/lib/utilities/ServerRendererConfigurationFactory.js.map +1 -0
  76. package/package.json +61 -0
  77. package/src/ServerRenderer.ts +345 -0
  78. package/src/ServerRendererBrowser.ts +286 -0
  79. package/src/ServerRendererServer.ts +337 -0
  80. package/src/ServerRendererWorker.ts +29 -0
  81. package/src/config/DefaultServerRendererConfiguration.ts +41 -0
  82. package/src/enums/ServerRendererLogLevelEnum.ts +9 -0
  83. package/src/index.ts +17 -0
  84. package/src/types/IOptionalServerRendererConfiguration.ts +108 -0
  85. package/src/types/IServerRendererConfiguration.ts +108 -0
  86. package/src/types/IServerRendererItem.ts +5 -0
  87. package/src/types/IServerRendererResult.ts +11 -0
  88. package/src/utilities/BrowserWindowPolyfill.ts +93 -0
  89. package/src/utilities/HelpPrinter.ts +36 -0
  90. package/src/utilities/HelpPrinterRows.ts +260 -0
  91. package/src/utilities/PackageVersion.ts +12 -0
  92. package/src/utilities/ProcessArgumentsParser.ts +294 -0
  93. package/src/utilities/ServerRendererConfigurationFactory.ts +91 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019 David Ortner (capricorn86)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,70 @@
1
+ ![Happy DOM Logo](https://github.com/capricorn86/happy-dom/raw/master/docs/happy-dom-logo.jpg)
2
+
3
+ Use [Happy DOM](https://github.com/capricorn86/happy-dom) for server-side rendering (SSR) or static site generation (SSG).
4
+
5
+ The benefit of using this tool compared to other SSR and SSG solutions, is that it is not tied to a specific framework. For example, you can use React, Vue, Angular and Lit on the same page. The page is rendered as a whole and outputted as HTML.
6
+
7
+ This tool uses a worker pool by default to render multiple pages in parallel. Each worker can also render multiple pages in parallel that shares resources.
8
+
9
+
10
+ ## Installation
11
+
12
+ ```bash
13
+ npm install @happy-dom/server-renderer --save-dev
14
+ ```
15
+
16
+ ## Documentation
17
+
18
+ You will find the documentation in the [Happy DOM Wiki](https://github.com/capricorn86/happy-dom/wiki) under [Server-Renderer](https://github.com/capricorn86/happy-dom/wiki/Server-Renderer).
19
+
20
+ ## Usage
21
+
22
+ ### Command Line
23
+
24
+ See all available command line arguments in the [Command Line Documentation](https://github.com/capricorn86/happy-dom/wiki/Server-Renderer-CLI-Arguments).
25
+
26
+ **Example 1**
27
+
28
+ Render to the file `./happy-dom/render/gb/en/index.html`.
29
+
30
+ ```bash
31
+ npx @happy-dom/server-renderer "https://example.com/gb/en/"
32
+ ```
33
+
34
+ or if you have it installed
35
+
36
+ ```bash
37
+ happy-dom-sr "https://example.com/gb/en/"
38
+ ```
39
+
40
+ **Example 2**
41
+
42
+ Start proxy server.
43
+
44
+ ```bash
45
+ happy-dom-sr --server --server.targetOrigin="https://example.com"
46
+ ```
47
+
48
+ ### JavaScript
49
+
50
+ See all available configuration options in the [Javascript API Documentation](https://github.com/capricorn86/happy-dom/wiki/ServerRenderer).
51
+
52
+ **Example**
53
+
54
+ ```javascript
55
+ import { ServerRenderer } from '@happy-dom/server-renderer';
56
+
57
+ const renderer = new ServerRenderer({
58
+ // Your configuration options
59
+ });
60
+
61
+ const result = await renderer.render(['https://example.com/gb/en/']);
62
+
63
+ // The rendered HTML
64
+ console.log(result[0].url);
65
+ console.log(result[0].content);
66
+ ```
67
+
68
+ ## Happy DOM
69
+
70
+ [Documentation](https://github.com/capricorn86/happy-dom/wiki) | [Getting Started](https://github.com/capricorn86/happy-dom/wiki/Getting-started) | [Setup as Test Environment](https://github.com/capricorn86/happy-dom/wiki/Setup-as-Test-Environment) | [GitHub](https://github.com/capricorn86/happy-dom/)
@@ -0,0 +1,3 @@
1
+ #!/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=happy-dom-sr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"happy-dom-sr.d.ts","sourceRoot":"","sources":["../src/happy-dom-sr.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ #!/bin/env node
2
+ 'use strict';
3
+ import ServerRenderer from '../../lib/ServerRenderer.js';
4
+ import ProcessArgumentsParser from '../../lib/utilities/ProcessArgumentsParser.js';
5
+ main();
6
+ /**
7
+ * Main method.
8
+ */
9
+ async function main() {
10
+ const configuration = await ProcessArgumentsParser.getConfiguration(process.argv);
11
+ if (configuration.help) {
12
+ const HelpPrinter = (await import('../../lib/utilities/HelpPrinter.js')).default;
13
+ HelpPrinter.print();
14
+ process.exit(0);
15
+ }
16
+ if (configuration.server.start) {
17
+ const server = new (await import('../../lib/ServerRendererServer.js')).default(configuration);
18
+ await server.start();
19
+ }
20
+ else {
21
+ const renderer = new ServerRenderer(configuration);
22
+ await renderer.render();
23
+ }
24
+ }
25
+ //# sourceMappingURL=happy-dom-sr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"happy-dom-sr.js","sourceRoot":"","sources":["../src/happy-dom-sr.ts"],"names":[],"mappings":";AACA,YAAY,CAAC;AAEb,OAAO,cAAc,MAAM,6BAA6B,CAAC;AACzD,OAAO,sBAAsB,MAAM,+CAA+C,CAAC;AAEnF,IAAI,EAAE,CAAC;AAEP;;GAEG;AACH,KAAK,UAAU,IAAI;IAClB,MAAM,aAAa,GAAG,MAAM,sBAAsB,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAElF,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAAC,OAAO,CAAC;QACjF,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAE9F,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;SAAM,CAAC;QACP,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,aAAa,CAAC,CAAC;QAEnD,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;AACF,CAAC"}
@@ -0,0 +1,30 @@
1
+ #!/bin/env node
2
+ 'use strict';
3
+
4
+ import ServerRenderer from '../../lib/ServerRenderer.js';
5
+ import ProcessArgumentsParser from '../../lib/utilities/ProcessArgumentsParser.js';
6
+
7
+ main();
8
+
9
+ /**
10
+ * Main method.
11
+ */
12
+ async function main(): Promise<void> {
13
+ const configuration = await ProcessArgumentsParser.getConfiguration(process.argv);
14
+
15
+ if (configuration.help) {
16
+ const HelpPrinter = (await import('../../lib/utilities/HelpPrinter.js')).default;
17
+ HelpPrinter.print();
18
+ process.exit(0);
19
+ }
20
+
21
+ if (configuration.server.start) {
22
+ const server = new (await import('../../lib/ServerRendererServer.js')).default(configuration);
23
+
24
+ await server.start();
25
+ } else {
26
+ const renderer = new ServerRenderer(configuration);
27
+
28
+ await renderer.render();
29
+ }
30
+ }
@@ -0,0 +1,36 @@
1
+ import IOptionalServerRendererConfiguration from './types/IOptionalServerRendererConfiguration.js';
2
+ import IServerRendererItem from './types/IServerRendererItem.js';
3
+ import IServerRendererResult from './types/IServerRendererResult.js';
4
+ /**
5
+ * Server renderer.
6
+ */
7
+ export default class ServerRenderer {
8
+ #private;
9
+ /**
10
+ * Constructor.
11
+ *
12
+ * @param configuration Configuration.
13
+ */
14
+ constructor(configuration?: IOptionalServerRendererConfiguration);
15
+ /**
16
+ * Renders URLs.
17
+ *
18
+ * @param [urls] URLs to render.
19
+ * @param [options] Options.
20
+ * @param [options.keepAlive] Keep the workers and browser alive. This is useful when using the renderer in a server. The workers can be closed with the `close()` method.
21
+ */
22
+ render(urls?: Array<string | IServerRendererItem> | null, options?: {
23
+ keepAlive?: boolean;
24
+ }): Promise<IServerRendererResult[]>;
25
+ /**
26
+ * Closes the workers and browser.
27
+ */
28
+ close(): Promise<void>;
29
+ /**
30
+ * Outputs results to the console.
31
+ *
32
+ * @param results Results.
33
+ */
34
+ private outputResults;
35
+ }
36
+ //# sourceMappingURL=ServerRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerRenderer.d.ts","sourceRoot":"","sources":["../src/ServerRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,oCAAoC,MAAM,iDAAiD,CAAC;AACnG,OAAO,mBAAmB,MAAM,gCAAgC,CAAC;AAEjE,OAAO,qBAAqB,MAAM,kCAAkC,CAAC;AAgBrE;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;;IASlC;;;;OAIG;gBACS,aAAa,CAAC,EAAE,oCAAoC;IAShE;;;;;;OAMG;IACU,MAAM,CAClB,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC,GAAG,IAAI,EACjD,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,OAAO,CAAC,qBAAqB,EAAE,CAAC;IA8FnC;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8InC;;;;OAIG;IACH,OAAO,CAAC,aAAa;CA6CrB"}
@@ -0,0 +1,270 @@
1
+ import { Worker } from 'worker_threads';
2
+ import ServerRendererLogLevelEnum from './enums/ServerRendererLogLevelEnum.js';
3
+ import ServerRendererConfigurationFactory from './utilities/ServerRendererConfigurationFactory.js';
4
+ import Path from 'path';
5
+ import Inspector from 'node:inspector';
6
+ import ServerRendererBrowser from './ServerRendererBrowser.js';
7
+ // eslint-disable-next-line import/no-named-as-default
8
+ import Chalk from 'chalk';
9
+ /**
10
+ * Server renderer.
11
+ */
12
+ export default class ServerRenderer {
13
+ #configuration;
14
+ #workerPool = {
15
+ busy: [],
16
+ free: [],
17
+ waiting: []
18
+ };
19
+ #browser = null;
20
+ /**
21
+ * Constructor.
22
+ *
23
+ * @param configuration Configuration.
24
+ */
25
+ constructor(configuration) {
26
+ this.#configuration = ServerRendererConfigurationFactory.createConfiguration(configuration);
27
+ if (this.#configuration.worker.disable && this.#configuration.inspect) {
28
+ Inspector.open();
29
+ Inspector.waitForDebugger();
30
+ }
31
+ }
32
+ /**
33
+ * Renders URLs.
34
+ *
35
+ * @param [urls] URLs to render.
36
+ * @param [options] Options.
37
+ * @param [options.keepAlive] Keep the workers and browser alive. This is useful when using the renderer in a server. The workers can be closed with the `close()` method.
38
+ */
39
+ async render(urls, options) {
40
+ const startTime = performance.now();
41
+ const configuration = this.#configuration;
42
+ const items = urls || configuration.urls;
43
+ const parsedItems = [];
44
+ if (!items || !items.length) {
45
+ if (configuration.logLevel >= ServerRendererLogLevelEnum.info) {
46
+ // eslint-disable-next-line no-console
47
+ console.log(Chalk.bold(`\nNo URLs to render\n`));
48
+ }
49
+ return [];
50
+ }
51
+ for (const item of items) {
52
+ if (typeof item === 'string') {
53
+ parsedItems.push({ url: item });
54
+ }
55
+ else {
56
+ parsedItems.push({
57
+ url: item.url,
58
+ outputFile: item.outputFile
59
+ ? Path.join(configuration.outputDirectory, item.outputFile)
60
+ : null,
61
+ headers: item.headers ?? null
62
+ });
63
+ }
64
+ }
65
+ if (configuration.logLevel >= ServerRendererLogLevelEnum.info) {
66
+ if (configuration.debug) {
67
+ // eslint-disable-next-line no-console
68
+ console.log(Chalk.blue(Chalk.bold(`🔨 Debug mode enabled\n`)));
69
+ }
70
+ // eslint-disable-next-line no-console
71
+ console.log(Chalk.bold(`Rendering ${parsedItems.length} page${parsedItems.length > 1 ? 's' : ''}...\n`));
72
+ }
73
+ let results = [];
74
+ if (!configuration.cache.disable && configuration.cache.warmup) {
75
+ const item = parsedItems.shift();
76
+ if (item) {
77
+ if (configuration.logLevel >= ServerRendererLogLevelEnum.info) {
78
+ // eslint-disable-next-line no-console
79
+ console.log('Warming up cache...\n');
80
+ }
81
+ results = results.concat(await this.#runInWorker([item]));
82
+ if (configuration.logLevel >= ServerRendererLogLevelEnum.info) {
83
+ // eslint-disable-next-line no-console
84
+ console.log('\nCache warmup complete.\n');
85
+ }
86
+ }
87
+ }
88
+ if (parsedItems.length) {
89
+ const promises = [];
90
+ while (parsedItems.length) {
91
+ const chunk = parsedItems.splice(0, configuration.render.maxConcurrency);
92
+ promises.push(this.#runInWorker(chunk).then((chunkResults) => {
93
+ results = results.concat(chunkResults);
94
+ }));
95
+ }
96
+ await Promise.all(promises);
97
+ }
98
+ if (configuration.logLevel >= ServerRendererLogLevelEnum.info) {
99
+ const time = Math.round((performance.now() - startTime) / 1000);
100
+ const minutes = Math.floor(time / 60);
101
+ const seconds = time % 60;
102
+ // eslint-disable-next-line no-console
103
+ console.log(Chalk.bold(`\nRendered ${items.length} page${items.length > 1 ? 's' : ''} in ${minutes ? `${minutes} minutes and ` : ''}${seconds} seconds\n`));
104
+ }
105
+ if (!options?.keepAlive) {
106
+ await this.close();
107
+ }
108
+ return results;
109
+ }
110
+ /**
111
+ * Closes the workers and browser.
112
+ */
113
+ async close() {
114
+ for (const worker of this.#workerPool.busy) {
115
+ worker.terminate();
116
+ }
117
+ for (const worker of this.#workerPool.free) {
118
+ worker.terminate();
119
+ }
120
+ this.#workerPool.busy = [];
121
+ this.#workerPool.free = [];
122
+ this.#workerPool.waiting = [];
123
+ if (this.#browser) {
124
+ await this.#browser.close();
125
+ this.#browser = null;
126
+ }
127
+ }
128
+ /**
129
+ * Runs in a worker.
130
+ *
131
+ * @param items Items.
132
+ */
133
+ async #runInWorker(items) {
134
+ const configuration = this.#configuration;
135
+ if (configuration.worker.disable) {
136
+ if (!this.#browser) {
137
+ this.#browser = new ServerRendererBrowser(configuration);
138
+ }
139
+ const results = await this.#browser.render(items);
140
+ this.outputResults(results);
141
+ return results;
142
+ }
143
+ return new Promise((resolve, reject) => {
144
+ if (this.#workerPool.free.length === 0) {
145
+ const maxConcurrency = configuration.inspect ? 1 : configuration.worker.maxConcurrency;
146
+ if (this.#workerPool.busy.length >= maxConcurrency) {
147
+ this.#workerPool.waiting.push({ items, resolve, reject });
148
+ return;
149
+ }
150
+ const worker = new Worker(new URL('ServerRendererWorker.js', import.meta.url), {
151
+ workerData: {
152
+ configuration: configuration
153
+ }
154
+ });
155
+ this.#workerPool.free.push(worker);
156
+ }
157
+ if (this.#workerPool.free.length > 0) {
158
+ const worker = this.#workerPool.free.pop();
159
+ this.#workerPool.busy.push(worker);
160
+ const done = () => {
161
+ worker.off('message', listeners.message);
162
+ worker.off('error', listeners.error);
163
+ worker.off('exit', listeners.exit);
164
+ this.#workerPool.busy.splice(this.#workerPool.busy.indexOf(worker), 1);
165
+ this.#workerPool.free.push(worker);
166
+ const waiting = this.#workerPool.waiting.shift();
167
+ if (waiting) {
168
+ this.#runInWorker(waiting.items).then(waiting.resolve).catch(waiting.reject);
169
+ }
170
+ };
171
+ const listeners = {
172
+ message: (data) => {
173
+ const results = data.results;
174
+ this.outputResults(results);
175
+ done();
176
+ resolve(results);
177
+ },
178
+ error: (error) => {
179
+ if (configuration.logLevel >= ServerRendererLogLevelEnum.error) {
180
+ for (const item of items) {
181
+ // eslint-disable-next-line no-console
182
+ console.error(Chalk.bold(Chalk.red(`\n❌ Failed to render page "${item.url}"\n`)));
183
+ // eslint-disable-next-line no-console
184
+ console.error(Chalk.red(error + '\n'));
185
+ }
186
+ }
187
+ done();
188
+ resolve(items.map((item) => ({
189
+ url: item.url,
190
+ content: null,
191
+ status: 200,
192
+ statusText: 'OK',
193
+ headers: {},
194
+ outputFile: item.outputFile ?? null,
195
+ error: `${error.message}\n${error.stack}`,
196
+ pageConsole: '',
197
+ pageErrors: []
198
+ })));
199
+ },
200
+ exit: (code) => {
201
+ // Closed intentionally, either by the user or with terminate()
202
+ if (code === 0) {
203
+ return;
204
+ }
205
+ this.#workerPool.busy.splice(this.#workerPool.busy.indexOf(worker), 1);
206
+ for (const worker of this.#workerPool.free) {
207
+ worker.terminate();
208
+ }
209
+ for (const worker of this.#workerPool.busy) {
210
+ worker.terminate();
211
+ }
212
+ this.#workerPool.busy = [];
213
+ this.#workerPool.free = [];
214
+ this.#workerPool.waiting = [];
215
+ reject(new Error(`Worker stopped with exit code ${code}`));
216
+ }
217
+ };
218
+ worker.on('message', listeners.message);
219
+ worker.on('error', listeners.error);
220
+ worker.on('exit', listeners.exit);
221
+ worker.postMessage({ items });
222
+ }
223
+ });
224
+ }
225
+ /**
226
+ * Outputs results to the console.
227
+ *
228
+ * @param results Results.
229
+ */
230
+ outputResults(results) {
231
+ const configuration = this.#configuration;
232
+ if (configuration.logLevel === ServerRendererLogLevelEnum.none) {
233
+ return;
234
+ }
235
+ for (const result of results) {
236
+ if (result.error) {
237
+ if (configuration.logLevel >= ServerRendererLogLevelEnum.error) {
238
+ // eslint-disable-next-line no-console
239
+ console.error(Chalk.bold(Chalk.red(`\n❌ Failed to render page "${result.url}"\n`)));
240
+ // eslint-disable-next-line no-console
241
+ console.error(Chalk.red(result.error + '\n'));
242
+ }
243
+ }
244
+ else if (result.pageErrors.length) {
245
+ if (configuration.logLevel >= ServerRendererLogLevelEnum.warn) {
246
+ // eslint-disable-next-line no-console
247
+ console.log(Chalk.bold(`• Rendered page "${result.url}"`));
248
+ // eslint-disable-next-line no-console
249
+ console.log(Chalk.bold(Chalk.yellow(`\n⚠️ Warning! Errors where outputted to the browser when the page was rendered.\n`)));
250
+ // eslint-disable-next-line no-console
251
+ for (const error of result.pageErrors) {
252
+ // eslint-disable-next-line no-console
253
+ console.log(Chalk.red(error + '\n'));
254
+ }
255
+ }
256
+ }
257
+ else {
258
+ if (configuration.logLevel >= ServerRendererLogLevelEnum.info) {
259
+ // eslint-disable-next-line no-console
260
+ console.log(Chalk.bold(`• Rendered page "${result.url}"`));
261
+ }
262
+ }
263
+ if (configuration.logLevel >= ServerRendererLogLevelEnum.debug && result.pageConsole) {
264
+ // eslint-disable-next-line no-console
265
+ console.log(Chalk.gray(result.pageConsole));
266
+ }
267
+ }
268
+ }
269
+ }
270
+ //# sourceMappingURL=ServerRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerRenderer.js","sourceRoot":"","sources":["../src/ServerRenderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import IServerRendererConfiguration from './types/IServerRendererConfiguration.js';
2
+ import IServerRendererItem from './types/IServerRendererItem.js';
3
+ import IServerRendererResult from './types/IServerRendererResult.js';
4
+ /**
5
+ * Server renderer browser.
6
+ */
7
+ export default class ServerRendererBrowser {
8
+ #private;
9
+ /**
10
+ * Constructor.
11
+ *
12
+ * @param configuration Configuration.
13
+ */
14
+ constructor(configuration: IServerRendererConfiguration);
15
+ /**
16
+ * Renders URLs.
17
+ *
18
+ * @param items Items.
19
+ */
20
+ render(items: IServerRendererItem[]): Promise<IServerRendererResult[]>;
21
+ /**
22
+ * Closes the browser.
23
+ */
24
+ close(): Promise<void>;
25
+ }
26
+ //# sourceMappingURL=ServerRendererBrowser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerRendererBrowser.d.ts","sourceRoot":"","sources":["../src/ServerRendererBrowser.ts"],"names":[],"mappings":"AAEA,OAAO,4BAA4B,MAAM,yCAAyC,CAAC;AAGnF,OAAO,mBAAmB,MAAM,gCAAgC,CAAC;AACjE,OAAO,qBAAqB,MAAM,kCAAkC,CAAC;AAIrE;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,qBAAqB;;IAMzC;;;;OAIG;gBACS,aAAa,EAAE,4BAA4B;IAevD;;;;OAIG;IACU,MAAM,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAkCnF;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA4MnC"}