@angular/build 20.1.0-next.1 → 20.1.0-next.3
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/package.json +6 -6
- package/src/builders/karma/application_builder.js +21 -10
- package/src/builders/unit-test/builder.js +27 -13
- package/src/builders/unit-test/karma-bridge.d.ts +1 -1
- package/src/builders/unit-test/karma-bridge.js +2 -0
- package/src/builders/unit-test/options.d.ts +1 -0
- package/src/builders/unit-test/options.js +4 -0
- package/src/builders/unit-test/schema.d.ts +2 -0
- package/src/builders/unit-test/schema.js +2 -0
- package/src/builders/unit-test/schema.json +10 -1
- package/src/private.d.ts +1 -0
- package/src/private.js +5 -1
- package/src/tools/vite/plugins/angular-memory-plugin.js +7 -7
- package/src/utils/normalize-cache.js +1 -1
- package/src/utils/server-rendering/manifest.js +3 -13
- package/src/utils/worker-pool.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular/build",
|
|
3
|
-
"version": "20.1.0-next.
|
|
3
|
+
"version": "20.1.0-next.3",
|
|
4
4
|
"description": "Official build system for Angular",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Angular CLI",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"builders": "builders.json",
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@ampproject/remapping": "2.3.0",
|
|
26
|
-
"@angular-devkit/architect": "0.2001.0-next.
|
|
26
|
+
"@angular-devkit/architect": "0.2001.0-next.3",
|
|
27
27
|
"@babel/core": "7.27.4",
|
|
28
28
|
"@babel/helper-annotate-as-pure": "7.27.3",
|
|
29
29
|
"@babel/helper-split-export-declaration": "7.24.7",
|
|
@@ -40,13 +40,13 @@
|
|
|
40
40
|
"mrmime": "2.0.1",
|
|
41
41
|
"parse5-html-rewriting-stream": "7.1.0",
|
|
42
42
|
"picomatch": "4.0.2",
|
|
43
|
-
"piscina": "5.
|
|
44
|
-
"rollup": "4.
|
|
43
|
+
"piscina": "5.1.1",
|
|
44
|
+
"rollup": "4.44.0",
|
|
45
45
|
"sass": "1.89.2",
|
|
46
46
|
"semver": "7.7.2",
|
|
47
47
|
"source-map-support": "0.5.21",
|
|
48
48
|
"tinyglobby": "0.2.14",
|
|
49
|
-
"vite": "
|
|
49
|
+
"vite": "7.0.0",
|
|
50
50
|
"watchpack": "2.4.4"
|
|
51
51
|
},
|
|
52
52
|
"optionalDependencies": {
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"@angular/platform-browser": "^20.0.0 || ^20.1.0-next.0",
|
|
61
61
|
"@angular/platform-server": "^20.0.0 || ^20.1.0-next.0",
|
|
62
62
|
"@angular/service-worker": "^20.0.0 || ^20.1.0-next.0",
|
|
63
|
-
"@angular/ssr": "^20.1.0-next.
|
|
63
|
+
"@angular/ssr": "^20.1.0-next.3",
|
|
64
64
|
"karma": "^6.4.0",
|
|
65
65
|
"less": "^4.2.0",
|
|
66
66
|
"ng-packagr": "^20.0.0 || ^20.1.0-next.0",
|
|
@@ -112,7 +112,7 @@ class AngularAssetsMiddleware {
|
|
|
112
112
|
class AngularPolyfillsPlugin {
|
|
113
113
|
static $inject = ['config.files'];
|
|
114
114
|
static NAME = 'angular-polyfills';
|
|
115
|
-
static createPlugin(polyfillsFile, jasmineCleanupFiles) {
|
|
115
|
+
static createPlugin(polyfillsFile, jasmineCleanupFiles, scriptsFiles) {
|
|
116
116
|
return {
|
|
117
117
|
// This has to be a "reporter" because reporters run _after_ frameworks
|
|
118
118
|
// and karma-jasmine-html-reporter injects additional scripts that may
|
|
@@ -155,6 +155,8 @@ class AngularPolyfillsPlugin {
|
|
|
155
155
|
f.type = 'module';
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
|
+
// Add "scripts" option files as classic scripts
|
|
159
|
+
files.unshift(...scriptsFiles);
|
|
158
160
|
// Add browser sourcemap support as a classic script
|
|
159
161
|
files.unshift({
|
|
160
162
|
pattern: localResolve('source-map-support/browser-source-map-support.js'),
|
|
@@ -394,16 +396,25 @@ async function initializeApplication(options, context, karmaOptions, transforms
|
|
|
394
396
|
watched: false,
|
|
395
397
|
};
|
|
396
398
|
karmaOptions.basePath = outputPath;
|
|
397
|
-
|
|
399
|
+
const scriptsFiles = [];
|
|
398
400
|
if (options.scripts?.length) {
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
401
|
+
const outputScripts = new Set();
|
|
402
|
+
for (const scriptEntry of options.scripts) {
|
|
403
|
+
const outputName = typeof scriptEntry === 'string'
|
|
404
|
+
? 'scripts.js'
|
|
405
|
+
: `${scriptEntry.bundleName ?? 'scripts'}.js`;
|
|
406
|
+
if (outputScripts.has(outputName)) {
|
|
407
|
+
continue;
|
|
408
|
+
}
|
|
409
|
+
outputScripts.add(outputName);
|
|
410
|
+
scriptsFiles.push({
|
|
411
|
+
pattern: `${outputPath}/${outputName}`,
|
|
412
|
+
watched: false,
|
|
413
|
+
type: 'js',
|
|
414
|
+
});
|
|
415
|
+
}
|
|
406
416
|
}
|
|
417
|
+
karmaOptions.files ??= [];
|
|
407
418
|
karmaOptions.files.push(
|
|
408
419
|
// Serve global setup script.
|
|
409
420
|
{ pattern: `${mainName}.js`, type: 'module', watched: false },
|
|
@@ -454,7 +465,7 @@ async function initializeApplication(options, context, karmaOptions, transforms
|
|
|
454
465
|
parsedKarmaConfig.plugins.push(AngularAssetsMiddleware.createPlugin(buildOutput));
|
|
455
466
|
parsedKarmaConfig.middleware ??= [];
|
|
456
467
|
parsedKarmaConfig.middleware.push(AngularAssetsMiddleware.NAME);
|
|
457
|
-
parsedKarmaConfig.plugins.push(AngularPolyfillsPlugin.createPlugin(polyfillsFile, jasmineCleanupFiles));
|
|
468
|
+
parsedKarmaConfig.plugins.push(AngularPolyfillsPlugin.createPlugin(polyfillsFile, jasmineCleanupFiles, scriptsFiles));
|
|
458
469
|
parsedKarmaConfig.reporters ??= [];
|
|
459
470
|
parsedKarmaConfig.reporters.push(AngularPolyfillsPlugin.NAME);
|
|
460
471
|
// Adjust karma junit reporter outDir location to maintain previous (devkit) behavior
|
|
@@ -72,9 +72,7 @@ async function* execute(options, context, extensions = {}) {
|
|
|
72
72
|
const { startVitest } = vitestNodeModule;
|
|
73
73
|
// Setup test file build options based on application build target options
|
|
74
74
|
const buildTargetOptions = (await context.validateOptions(await context.getTargetOptions(normalizedOptions.buildTarget), await context.getBuilderNameForTarget(normalizedOptions.buildTarget)));
|
|
75
|
-
|
|
76
|
-
buildTargetOptions.polyfills.push('zone.js/testing');
|
|
77
|
-
}
|
|
75
|
+
buildTargetOptions.polyfills = (0, options_1.injectTestingPolyfills)(buildTargetOptions.polyfills);
|
|
78
76
|
const outputPath = node_path_1.default.join(context.workspaceRoot, generateOutputPath());
|
|
79
77
|
const buildOptions = {
|
|
80
78
|
...buildTargetOptions,
|
|
@@ -176,15 +174,7 @@ async function* execute(options, context, extensions = {}) {
|
|
|
176
174
|
include: [],
|
|
177
175
|
reporters: normalizedOptions.reporters ?? ['default'],
|
|
178
176
|
watch: normalizedOptions.watch,
|
|
179
|
-
coverage:
|
|
180
|
-
enabled: !!normalizedOptions.codeCoverage,
|
|
181
|
-
excludeAfterRemap: true,
|
|
182
|
-
exclude: normalizedOptions.codeCoverage?.exclude,
|
|
183
|
-
// Special handling for `reporter` due to an undefined value causing upstream failures
|
|
184
|
-
...(normalizedOptions.codeCoverage?.reporters
|
|
185
|
-
? { reporters: normalizedOptions.codeCoverage.reporters }
|
|
186
|
-
: {}),
|
|
187
|
-
},
|
|
177
|
+
coverage: generateCoverageOption(normalizedOptions.codeCoverage, workspaceRoot, outputPath),
|
|
188
178
|
...debugOptions,
|
|
189
179
|
}, {
|
|
190
180
|
plugins: [
|
|
@@ -194,7 +184,7 @@ async function* execute(options, context, extensions = {}) {
|
|
|
194
184
|
// Create a subproject that can be configured with plugins for browser mode.
|
|
195
185
|
// Plugins defined directly in the vite overrides will not be present in the
|
|
196
186
|
// browser specific Vite instance.
|
|
197
|
-
await context.injectTestProjects({
|
|
187
|
+
const [project] = await context.injectTestProjects({
|
|
198
188
|
test: {
|
|
199
189
|
name: projectName,
|
|
200
190
|
root: outputPath,
|
|
@@ -225,6 +215,14 @@ async function* execute(options, context, extensions = {}) {
|
|
|
225
215
|
},
|
|
226
216
|
],
|
|
227
217
|
});
|
|
218
|
+
// Adjust coverage excludes to not include the otherwise automatically inserted included unit tests.
|
|
219
|
+
// Vite does this as a convenience but is problematic for the bundling strategy employed by the
|
|
220
|
+
// builder's test setup. To workaround this, the excludes are adjusted here to only automaticallyAdd commentMore actions
|
|
221
|
+
// exclude the TypeScript source test files.
|
|
222
|
+
project.config.coverage.exclude = [
|
|
223
|
+
...(normalizedOptions.codeCoverage?.exclude ?? []),
|
|
224
|
+
'**/*.{test,spec}.?(c|m)ts',
|
|
225
|
+
];
|
|
228
226
|
},
|
|
229
227
|
},
|
|
230
228
|
],
|
|
@@ -295,3 +293,19 @@ function generateOutputPath() {
|
|
|
295
293
|
const uuidSuffix = (0, node_crypto_1.randomUUID)().slice(0, 8);
|
|
296
294
|
return node_path_1.default.join('dist', 'test-out', `${datePrefix}-${uuidSuffix}`);
|
|
297
295
|
}
|
|
296
|
+
function generateCoverageOption(codeCoverage, workspaceRoot, outputPath) {
|
|
297
|
+
if (!codeCoverage) {
|
|
298
|
+
return {
|
|
299
|
+
enabled: false,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
enabled: true,
|
|
304
|
+
excludeAfterRemap: true,
|
|
305
|
+
include: [`${node_path_1.default.relative(workspaceRoot, outputPath)}/**`],
|
|
306
|
+
// Special handling for `reporter` due to an undefined value causing upstream failures
|
|
307
|
+
...(codeCoverage.reporters
|
|
308
|
+
? { reporter: codeCoverage.reporters }
|
|
309
|
+
: {}),
|
|
310
|
+
};
|
|
311
|
+
}
|
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
* found in the LICENSE file at https://angular.dev/license
|
|
7
7
|
*/
|
|
8
8
|
import type { BuilderContext, BuilderOutput } from '@angular-devkit/architect';
|
|
9
|
-
import type
|
|
9
|
+
import { type NormalizedUnitTestOptions } from './options';
|
|
10
10
|
export declare function useKarmaBuilder(context: BuilderContext, unitTestOptions: NormalizedUnitTestOptions): Promise<AsyncIterable<BuilderOutput>>;
|
|
@@ -41,11 +41,13 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
41
41
|
})();
|
|
42
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
43
|
exports.useKarmaBuilder = useKarmaBuilder;
|
|
44
|
+
const options_1 = require("./options");
|
|
44
45
|
async function useKarmaBuilder(context, unitTestOptions) {
|
|
45
46
|
if (unitTestOptions.debug) {
|
|
46
47
|
context.logger.warn('The "karma" test runner does not support the "debug" option. The option will be ignored.');
|
|
47
48
|
}
|
|
48
49
|
const buildTargetOptions = (await context.validateOptions(await context.getTargetOptions(unitTestOptions.buildTarget), await context.getBuilderNameForTarget(unitTestOptions.buildTarget)));
|
|
50
|
+
buildTargetOptions.polyfills = (0, options_1.injectTestingPolyfills)(buildTargetOptions.polyfills);
|
|
49
51
|
const options = {
|
|
50
52
|
tsConfig: unitTestOptions.tsConfig,
|
|
51
53
|
polyfills: buildTargetOptions.polyfills,
|
|
@@ -11,6 +11,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.normalizeOptions = normalizeOptions;
|
|
14
|
+
exports.injectTestingPolyfills = injectTestingPolyfills;
|
|
14
15
|
const architect_1 = require("@angular-devkit/architect");
|
|
15
16
|
const node_path_1 = __importDefault(require("node:path"));
|
|
16
17
|
const normalize_cache_1 = require("../../utils/normalize-cache");
|
|
@@ -55,3 +56,6 @@ async function normalizeOptions(context, projectName, options) {
|
|
|
55
56
|
providersFile: options.providersFile && node_path_1.default.join(workspaceRoot, options.providersFile),
|
|
56
57
|
};
|
|
57
58
|
}
|
|
59
|
+
function injectTestingPolyfills(polyfills = []) {
|
|
60
|
+
return polyfills.includes('zone.js') ? [...polyfills, 'zone.js/testing'] : polyfills;
|
|
61
|
+
}
|
|
@@ -71,6 +71,8 @@ export type CodeCoverageReporterCodeCoverageReporter = CoverageReporters | {
|
|
|
71
71
|
export declare enum CoverageReporters {
|
|
72
72
|
Cobertura = "cobertura",
|
|
73
73
|
Html = "html",
|
|
74
|
+
Json = "json",
|
|
75
|
+
JsonSummary = "json-summary",
|
|
74
76
|
Lcov = "lcov",
|
|
75
77
|
Lcovonly = "lcovonly",
|
|
76
78
|
Text = "text",
|
|
@@ -7,6 +7,8 @@ var CoverageReporters;
|
|
|
7
7
|
(function (CoverageReporters) {
|
|
8
8
|
CoverageReporters["Cobertura"] = "cobertura";
|
|
9
9
|
CoverageReporters["Html"] = "html";
|
|
10
|
+
CoverageReporters["Json"] = "json";
|
|
11
|
+
CoverageReporters["JsonSummary"] = "json-summary";
|
|
10
12
|
CoverageReporters["Lcov"] = "lcov";
|
|
11
13
|
CoverageReporters["Lcovonly"] = "lcovonly";
|
|
12
14
|
CoverageReporters["Text"] = "text";
|
|
@@ -98,7 +98,16 @@
|
|
|
98
98
|
"required": ["buildTarget", "tsConfig", "runner"],
|
|
99
99
|
"definitions": {
|
|
100
100
|
"coverage-reporters": {
|
|
101
|
-
"enum": [
|
|
101
|
+
"enum": [
|
|
102
|
+
"html",
|
|
103
|
+
"lcov",
|
|
104
|
+
"lcovonly",
|
|
105
|
+
"text",
|
|
106
|
+
"text-summary",
|
|
107
|
+
"cobertura",
|
|
108
|
+
"json",
|
|
109
|
+
"json-summary"
|
|
110
|
+
]
|
|
102
111
|
}
|
|
103
112
|
}
|
|
104
113
|
}
|
package/src/private.d.ts
CHANGED
|
@@ -41,3 +41,4 @@ export { type BundleStats, generateBuildStatsTable } from './utils/stats-table';
|
|
|
41
41
|
export { getSupportedBrowsers } from './utils/supported-browsers';
|
|
42
42
|
export { assertCompatibleAngularVersion } from './utils/version';
|
|
43
43
|
export { findTests, getTestEntrypoints } from './builders/karma/find-tests';
|
|
44
|
+
export { findTailwindConfiguration, generateSearchDirectories, loadPostcssConfiguration, } from './utils/postcss-configuration';
|
package/src/private.js
CHANGED
|
@@ -21,7 +21,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
21
21
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
22
22
|
};
|
|
23
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
exports.getTestEntrypoints = exports.findTests = exports.assertCompatibleAngularVersion = exports.getSupportedBrowsers = exports.generateBuildStatsTable = exports.augmentAppWithServiceWorker = exports.purgeStaleBuildCache = exports.createTranslationLoader = exports.loadProxyConfiguration = exports.InlineCriticalCssProcessor = exports.IndexHtmlGenerator = exports.loadTranslations = exports.createI18nOptions = exports.deleteOutputDir = exports.checkPort = exports.JavaScriptTransformer = exports.createJitResourceTransformer = exports.SourceFileCache = exports.SassWorkerImplementation = exports.transformSupportedBrowsersToTargets = exports.emitFilesToDisk = exports.executeKarmaInternal = exports.serveWithVite = exports.ResultKind = exports.buildApplicationInternal = void 0;
|
|
24
|
+
exports.loadPostcssConfiguration = exports.generateSearchDirectories = exports.findTailwindConfiguration = exports.getTestEntrypoints = exports.findTests = exports.assertCompatibleAngularVersion = exports.getSupportedBrowsers = exports.generateBuildStatsTable = exports.augmentAppWithServiceWorker = exports.purgeStaleBuildCache = exports.createTranslationLoader = exports.loadProxyConfiguration = exports.InlineCriticalCssProcessor = exports.IndexHtmlGenerator = exports.loadTranslations = exports.createI18nOptions = exports.deleteOutputDir = exports.checkPort = exports.JavaScriptTransformer = exports.createJitResourceTransformer = exports.SourceFileCache = exports.SassWorkerImplementation = exports.transformSupportedBrowsersToTargets = exports.emitFilesToDisk = exports.executeKarmaInternal = exports.serveWithVite = exports.ResultKind = exports.buildApplicationInternal = void 0;
|
|
25
25
|
exports.createCompilerPlugin = createCompilerPlugin;
|
|
26
26
|
/**
|
|
27
27
|
* @fileoverview
|
|
@@ -90,3 +90,7 @@ Object.defineProperty(exports, "assertCompatibleAngularVersion", { enumerable: t
|
|
|
90
90
|
var find_tests_1 = require("./builders/karma/find-tests");
|
|
91
91
|
Object.defineProperty(exports, "findTests", { enumerable: true, get: function () { return find_tests_1.findTests; } });
|
|
92
92
|
Object.defineProperty(exports, "getTestEntrypoints", { enumerable: true, get: function () { return find_tests_1.getTestEntrypoints; } });
|
|
93
|
+
var postcss_configuration_1 = require("./utils/postcss-configuration");
|
|
94
|
+
Object.defineProperty(exports, "findTailwindConfiguration", { enumerable: true, get: function () { return postcss_configuration_1.findTailwindConfiguration; } });
|
|
95
|
+
Object.defineProperty(exports, "generateSearchDirectories", { enumerable: true, get: function () { return postcss_configuration_1.generateSearchDirectories; } });
|
|
96
|
+
Object.defineProperty(exports, "loadPostcssConfiguration", { enumerable: true, get: function () { return postcss_configuration_1.loadPostcssConfiguration; } });
|
|
@@ -98,13 +98,13 @@ async function createAngularMemoryPlugin(options) {
|
|
|
98
98
|
*/
|
|
99
99
|
async function loadViteClientCode(file, disableViteTransport = false) {
|
|
100
100
|
const originalContents = await (0, promises_1.readFile)(file, 'utf-8');
|
|
101
|
-
let updatedContents = originalContents.replace(
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
101
|
+
let updatedContents = originalContents.replace('"You can also disable this overlay by setting ", ' +
|
|
102
|
+
'h("code", { part: "config-option-name" }, "server.hmr.overlay"), ' +
|
|
103
|
+
'" to ", ' +
|
|
104
|
+
'h("code", { part: "config-option-value" }, "false"), ' +
|
|
105
|
+
'" in ", ' +
|
|
106
|
+
'h("code", { part: "config-file-name" }, hmrConfigName), ' +
|
|
107
|
+
'"."', '');
|
|
108
108
|
(0, node_assert_1.default)(originalContents !== updatedContents, 'Failed to update Vite client error overlay text.');
|
|
109
109
|
if (disableViteTransport) {
|
|
110
110
|
const previousUpdatedContents = updatedContents;
|
|
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
10
10
|
exports.normalizeCacheOptions = normalizeCacheOptions;
|
|
11
11
|
const node_path_1 = require("node:path");
|
|
12
12
|
/** Version placeholder is replaced during the build process with actual package version */
|
|
13
|
-
const VERSION = '20.1.0-next.
|
|
13
|
+
const VERSION = '20.1.0-next.3';
|
|
14
14
|
function hasCacheMetadata(value) {
|
|
15
15
|
return (!!value &&
|
|
16
16
|
typeof value === 'object' &&
|
|
@@ -161,22 +161,12 @@ function generateLazyLoadedFilesMappings(metafile, initialFiles, publicPath = ''
|
|
|
161
161
|
if (!entryPoint || exports?.length < 1 || !fileName.endsWith('.js')) {
|
|
162
162
|
continue;
|
|
163
163
|
}
|
|
164
|
-
const importedPaths = [
|
|
165
|
-
{
|
|
166
|
-
path: `${publicPath}${fileName}`,
|
|
167
|
-
dynamicImport: false,
|
|
168
|
-
},
|
|
169
|
-
];
|
|
164
|
+
const importedPaths = [`${publicPath}${fileName}`];
|
|
170
165
|
for (const { kind, external, path } of imports) {
|
|
171
|
-
if (external ||
|
|
172
|
-
initialFiles.has(path) ||
|
|
173
|
-
(kind !== 'dynamic-import' && kind !== 'import-statement')) {
|
|
166
|
+
if (external || initialFiles.has(path) || kind !== 'import-statement') {
|
|
174
167
|
continue;
|
|
175
168
|
}
|
|
176
|
-
importedPaths.push({
|
|
177
|
-
path: `${publicPath}${path}`,
|
|
178
|
-
dynamicImport: kind === 'dynamic-import',
|
|
179
|
-
});
|
|
169
|
+
importedPaths.push(`${publicPath}${path}`);
|
|
180
170
|
}
|
|
181
171
|
entryPointToBundles[entryPoint] = importedPaths;
|
|
182
172
|
}
|
package/src/utils/worker-pool.js
CHANGED
|
@@ -14,7 +14,7 @@ class WorkerPool extends piscina_1.Piscina {
|
|
|
14
14
|
constructor(options) {
|
|
15
15
|
const piscinaOptions = {
|
|
16
16
|
minThreads: 1,
|
|
17
|
-
idleTimeout:
|
|
17
|
+
idleTimeout: 4_000,
|
|
18
18
|
// Web containers do not support transferable objects with receiveOnMessagePort which
|
|
19
19
|
// is used when the Atomics based wait loop is enable.
|
|
20
20
|
atomics: process.versions.webcontainer ? 'disabled' : 'sync',
|