@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.
- package/LICENSE +21 -0
- package/README.md +70 -0
- package/bin/lib/happy-dom-sr.d.ts +3 -0
- package/bin/lib/happy-dom-sr.d.ts.map +1 -0
- package/bin/lib/happy-dom-sr.js +25 -0
- package/bin/lib/happy-dom-sr.js.map +1 -0
- package/bin/src/happy-dom-sr.ts +30 -0
- package/lib/ServerRenderer.d.ts +36 -0
- package/lib/ServerRenderer.d.ts.map +1 -0
- package/lib/ServerRenderer.js +270 -0
- package/lib/ServerRenderer.js.map +1 -0
- package/lib/ServerRendererBrowser.d.ts +26 -0
- package/lib/ServerRendererBrowser.d.ts.map +1 -0
- package/lib/ServerRendererBrowser.js +244 -0
- package/lib/ServerRendererBrowser.js.map +1 -0
- package/lib/ServerRendererServer.d.ts +22 -0
- package/lib/ServerRendererServer.d.ts.map +1 -0
- package/lib/ServerRendererServer.js +263 -0
- package/lib/ServerRendererServer.js.map +1 -0
- package/lib/ServerRendererWorker.d.ts +10 -0
- package/lib/ServerRendererWorker.d.ts.map +1 -0
- package/lib/ServerRendererWorker.js +25 -0
- package/lib/ServerRendererWorker.js.map +1 -0
- package/lib/config/DefaultServerRendererConfiguration.d.ts +4 -0
- package/lib/config/DefaultServerRendererConfiguration.d.ts.map +1 -0
- package/lib/config/DefaultServerRendererConfiguration.js +40 -0
- package/lib/config/DefaultServerRendererConfiguration.js.map +1 -0
- package/lib/enums/ServerRendererLogLevelEnum.d.ts +9 -0
- package/lib/enums/ServerRendererLogLevelEnum.d.ts.map +1 -0
- package/lib/enums/ServerRendererLogLevelEnum.js +10 -0
- package/lib/enums/ServerRendererLogLevelEnum.js.map +1 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +5 -0
- package/lib/index.js.map +1 -0
- package/lib/types/IOptionalServerRendererConfiguration.d.ts +108 -0
- package/lib/types/IOptionalServerRendererConfiguration.d.ts.map +1 -0
- package/lib/types/IOptionalServerRendererConfiguration.js +2 -0
- package/lib/types/IOptionalServerRendererConfiguration.js.map +1 -0
- package/lib/types/IServerRendererConfiguration.d.ts +108 -0
- package/lib/types/IServerRendererConfiguration.d.ts.map +1 -0
- package/lib/types/IServerRendererConfiguration.js +2 -0
- package/lib/types/IServerRendererConfiguration.js.map +1 -0
- package/lib/types/IServerRendererItem.d.ts +8 -0
- package/lib/types/IServerRendererItem.d.ts.map +1 -0
- package/lib/types/IServerRendererItem.js +2 -0
- package/lib/types/IServerRendererItem.js.map +1 -0
- package/lib/types/IServerRendererResult.d.ts +14 -0
- package/lib/types/IServerRendererResult.d.ts.map +1 -0
- package/lib/types/IServerRendererResult.js +2 -0
- package/lib/types/IServerRendererResult.js.map +1 -0
- package/lib/utilities/BrowserWindowPolyfill.d.ts +13 -0
- package/lib/utilities/BrowserWindowPolyfill.d.ts.map +1 -0
- package/lib/utilities/BrowserWindowPolyfill.js +92 -0
- package/lib/utilities/BrowserWindowPolyfill.js.map +1 -0
- package/lib/utilities/HelpPrinter.d.ts +10 -0
- package/lib/utilities/HelpPrinter.d.ts.map +1 -0
- package/lib/utilities/HelpPrinter.js +32 -0
- package/lib/utilities/HelpPrinter.js.map +1 -0
- package/lib/utilities/HelpPrinterRows.d.ts +3 -0
- package/lib/utilities/HelpPrinterRows.d.ts.map +1 -0
- package/lib/utilities/HelpPrinterRows.js +261 -0
- package/lib/utilities/HelpPrinterRows.js.map +1 -0
- package/lib/utilities/PackageVersion.d.ts +10 -0
- package/lib/utilities/PackageVersion.d.ts.map +1 -0
- package/lib/utilities/PackageVersion.js +13 -0
- package/lib/utilities/PackageVersion.js.map +1 -0
- package/lib/utilities/ProcessArgumentsParser.d.ts +20 -0
- package/lib/utilities/ProcessArgumentsParser.d.ts.map +1 -0
- package/lib/utilities/ProcessArgumentsParser.js +319 -0
- package/lib/utilities/ProcessArgumentsParser.js.map +1 -0
- package/lib/utilities/ServerRendererConfigurationFactory.d.ts +23 -0
- package/lib/utilities/ServerRendererConfigurationFactory.d.ts.map +1 -0
- package/lib/utilities/ServerRendererConfigurationFactory.js +82 -0
- package/lib/utilities/ServerRendererConfigurationFactory.js.map +1 -0
- package/package.json +61 -0
- package/src/ServerRenderer.ts +345 -0
- package/src/ServerRendererBrowser.ts +286 -0
- package/src/ServerRendererServer.ts +337 -0
- package/src/ServerRendererWorker.ts +29 -0
- package/src/config/DefaultServerRendererConfiguration.ts +41 -0
- package/src/enums/ServerRendererLogLevelEnum.ts +9 -0
- package/src/index.ts +17 -0
- package/src/types/IOptionalServerRendererConfiguration.ts +108 -0
- package/src/types/IServerRendererConfiguration.ts +108 -0
- package/src/types/IServerRendererItem.ts +5 -0
- package/src/types/IServerRendererResult.ts +11 -0
- package/src/utilities/BrowserWindowPolyfill.ts +93 -0
- package/src/utilities/HelpPrinter.ts +36 -0
- package/src/utilities/HelpPrinterRows.ts +260 -0
- package/src/utilities/PackageVersion.ts +12 -0
- package/src/utilities/ProcessArgumentsParser.ts +294 -0
- 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
|
+

|
|
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 @@
|
|
|
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"}
|