vike 0.4.224 → 0.4.225
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/dist/cjs/node/api/build.js +1 -1
- package/dist/cjs/node/api/context.js +4 -4
- package/dist/cjs/node/api/dev.js +1 -1
- package/dist/cjs/node/api/prepareViteApiCall.js +3 -2
- package/dist/cjs/node/api/prerender.js +1 -1
- package/dist/cjs/node/api/preview.js +1 -1
- package/dist/cjs/node/cli/context.js +5 -4
- package/dist/cjs/node/cli/entry.js +3 -3
- package/dist/cjs/node/cli/parseCli.js +43 -15
- package/dist/cjs/node/cli/utils.js +1 -1
- package/dist/cjs/node/plugin/plugins/build/pluginBuildEntry.js +1 -1
- package/dist/cjs/node/plugin/plugins/commonConfig.js +16 -5
- package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +2 -0
- package/dist/cjs/node/plugin/plugins/devConfig/index.js +1 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +9 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +75 -21
- package/dist/cjs/node/plugin/plugins/previewConfig.js +12 -7
- package/dist/cjs/node/plugin/shared/addSsrMiddleware.js +5 -1
- package/dist/cjs/node/plugin/shared/getEnvVarObject.js +9 -8
- package/dist/cjs/node/plugin/shared/loggerNotProd/log.js +1 -1
- package/dist/cjs/node/prerender/context.js +1 -1
- package/dist/cjs/node/prerender/resolvePrerenderConfig.js +33 -18
- package/dist/cjs/node/prerender/runPrerender.js +6 -8
- package/dist/cjs/node/prerender/utils.js +1 -1
- package/dist/cjs/node/runtime/globalContext.js +9 -5
- package/dist/cjs/node/runtime/html/stream.js +7 -0
- package/dist/cjs/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +13 -5
- package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +2 -4
- package/dist/cjs/node/runtime/renderPage/logErrorHint.js +6 -1
- package/dist/cjs/node/runtime/renderPage.js +6 -10
- package/dist/cjs/node/runtime/utils.js +0 -1
- package/dist/cjs/node/runtime-dev/createDevMiddleware.js +10 -8
- package/dist/cjs/node/shared/assertV1Design.js +2 -1
- package/dist/cjs/node/shared/utils.js +0 -1
- package/dist/cjs/shared/page-configs/getConfigDefinedAt.js +18 -2
- package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +8 -5
- package/dist/cjs/shared/page-configs/helpers.js +1 -1
- package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +2 -5
- package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +6 -2
- package/dist/cjs/shared/route/loadPageRoutes.js +2 -2
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/cjs/utils/assert.js +2 -2
- package/dist/cjs/utils/assertSingleInstance.js +11 -17
- package/dist/cjs/utils/debug.js +2 -1
- package/dist/cjs/utils/parseUrl-extras.js +1 -0
- package/dist/esm/node/api/build.js +1 -1
- package/dist/esm/node/api/context.d.ts +8 -2
- package/dist/esm/node/api/context.js +4 -4
- package/dist/esm/node/api/dev.js +1 -1
- package/dist/esm/node/api/prepareViteApiCall.d.ts +2 -2
- package/dist/esm/node/api/prepareViteApiCall.js +3 -2
- package/dist/esm/node/api/prerender.js +1 -1
- package/dist/esm/node/api/preview.js +1 -1
- package/dist/esm/node/api/types.d.ts +7 -0
- package/dist/esm/node/cli/context.d.ts +4 -2
- package/dist/esm/node/cli/context.js +5 -4
- package/dist/esm/node/cli/entry.js +4 -4
- package/dist/esm/node/cli/parseCli.d.ts +3 -0
- package/dist/esm/node/cli/parseCli.js +44 -16
- package/dist/esm/node/cli/utils.d.ts +1 -1
- package/dist/esm/node/cli/utils.js +1 -1
- package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.js +2 -2
- package/dist/esm/node/plugin/plugins/commonConfig.d.ts +1 -0
- package/dist/esm/node/plugin/plugins/commonConfig.js +16 -5
- package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +2 -0
- package/dist/esm/node/plugin/plugins/devConfig/index.js +1 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +3 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +9 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +75 -21
- package/dist/esm/node/plugin/plugins/previewConfig.js +12 -7
- package/dist/esm/node/plugin/shared/addSsrMiddleware.d.ts +1 -1
- package/dist/esm/node/plugin/shared/addSsrMiddleware.js +5 -1
- package/dist/esm/node/plugin/shared/getEnvVarObject.d.ts +3 -1
- package/dist/esm/node/plugin/shared/getEnvVarObject.js +9 -8
- package/dist/esm/node/plugin/shared/loggerNotProd/log.js +2 -2
- package/dist/esm/node/prerender/context.js +1 -1
- package/dist/esm/node/prerender/resolvePrerenderConfig.d.ts +2 -1
- package/dist/esm/node/prerender/resolvePrerenderConfig.js +34 -19
- package/dist/esm/node/prerender/runPrerender.js +7 -9
- package/dist/esm/node/prerender/utils.d.ts +1 -1
- package/dist/esm/node/prerender/utils.js +1 -1
- package/dist/esm/node/runtime/globalContext.d.ts +1 -1
- package/dist/esm/node/runtime/globalContext.js +10 -6
- package/dist/esm/node/runtime/html/stream.js +7 -0
- package/dist/esm/node/runtime/index-deprecated.d.ts +1 -3
- package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.d.ts +3 -1
- package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +14 -6
- package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +3 -1
- package/dist/esm/node/runtime/renderPage/createHttpResponse.js +2 -4
- package/dist/esm/node/runtime/renderPage/logErrorHint.js +6 -1
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +5 -5
- package/dist/esm/node/runtime/renderPage.js +7 -11
- package/dist/esm/node/runtime/utils.d.ts +0 -1
- package/dist/esm/node/runtime/utils.js +0 -1
- package/dist/esm/node/runtime-dev/createDevMiddleware.js +10 -8
- package/dist/esm/node/shared/assertV1Design.js +2 -1
- package/dist/esm/node/shared/utils.d.ts +0 -1
- package/dist/esm/node/shared/utils.js +0 -1
- package/dist/esm/shared/page-configs/Config.d.ts +19 -1
- package/dist/esm/shared/page-configs/PageConfig.d.ts +16 -5
- package/dist/esm/shared/page-configs/getConfigDefinedAt.d.ts +3 -3
- package/dist/esm/shared/page-configs/getConfigDefinedAt.js +19 -3
- package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +8 -5
- package/dist/esm/shared/page-configs/helpers.js +1 -1
- package/dist/esm/shared/page-configs/serialize/parsePageConfigs.d.ts +1 -1
- package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +2 -5
- package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +3 -3
- package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +6 -2
- package/dist/esm/shared/route/loadPageRoutes.js +2 -2
- package/dist/esm/types/index.d.ts +2 -0
- package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.js +1 -1
- package/dist/esm/utils/assert.js +2 -2
- package/dist/esm/utils/assertSingleInstance.js +11 -17
- package/dist/esm/utils/debug.js +2 -1
- package/dist/esm/utils/parseUrl-extras.js +1 -0
- package/package.json +4 -3
- package/dist/cjs/utils/projectInfo.js +0 -8
- package/dist/esm/utils/projectInfo.d.ts +0 -4
- package/dist/esm/utils/projectInfo.js +0 -5
|
@@ -23,6 +23,9 @@ import { assertExtensionsRequire } from './getVikeConfig/assertExtensions.js';
|
|
|
23
23
|
import { getPageConfigGlobalUserFriendly, getPageConfigUserFriendly } from '../../../../../shared/page-configs/getPageConfigUserFriendly.js';
|
|
24
24
|
import { getConfigValuesBase, isJsonValue } from '../../../../../shared/page-configs/serialize/serializeConfigValues.js';
|
|
25
25
|
import { getPlusFilesAll } from './getVikeConfig/getPlusFilesAll.js';
|
|
26
|
+
import { getEnvVarObject } from '../../../shared/getEnvVarObject.js';
|
|
27
|
+
import { getApiOperation } from '../../../../api/context.js';
|
|
28
|
+
import { getCliOptions } from '../../../../cli/context.js';
|
|
26
29
|
assertIsNotProductionRuntime();
|
|
27
30
|
let restartVite = false;
|
|
28
31
|
let wasConfigInvalid = null;
|
|
@@ -145,6 +148,8 @@ async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
|
|
|
145
148
|
const { pageConfigGlobal, pageConfigs } = getPageConfigsBuildTime(configDefinitionsResolved, plusFilesAll, userRootDir);
|
|
146
149
|
// Backwards compatibility for vike(options) in vite.config.js
|
|
147
150
|
temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, userRootDir);
|
|
151
|
+
// TODO/now: add validation
|
|
152
|
+
setCliAndApiOptions(pageConfigGlobal);
|
|
148
153
|
// global
|
|
149
154
|
const pageConfigGlobalValues = getConfigValues(pageConfigGlobal);
|
|
150
155
|
const global = getPageConfigGlobalUserFriendly({ pageConfigGlobalValues });
|
|
@@ -203,13 +208,13 @@ function getPageConfigsBuildTime(configDefinitionsResolved, plusFilesAll, userRo
|
|
|
203
208
|
objectEntries(configDefinitionsResolved.configDefinitionsGlobal).forEach(([configName, configDef]) => {
|
|
204
209
|
const sources = resolveConfigValueSources(configName, configDef,
|
|
205
210
|
// We use `plusFilesAll` in order to allow local Vike extensions to create global configs, and to set the value of global configs such as `+vite` (enabling Vike extensions to add Vite plugins).
|
|
206
|
-
Object.values(plusFilesAll).flat(), userRootDir, true);
|
|
211
|
+
Object.values(plusFilesAll).flat(), userRootDir, true, plusFilesAll);
|
|
207
212
|
if (sources.length === 0)
|
|
208
213
|
return;
|
|
209
214
|
pageConfigGlobal.configValueSources[configName] = sources;
|
|
210
215
|
});
|
|
211
216
|
applyEffectsMetaEnv(pageConfigGlobal.configValueSources, configDefinitionsResolved.configDefinitionsGlobal);
|
|
212
|
-
applyEffectsConfVal(pageConfigGlobal.configValueSources, configDefinitionsResolved.configDefinitionsGlobal);
|
|
217
|
+
applyEffectsConfVal(pageConfigGlobal.configValueSources, configDefinitionsResolved.configDefinitionsGlobal, plusFilesAll);
|
|
213
218
|
sortConfigValueSources(pageConfigGlobal.configValueSources, null);
|
|
214
219
|
assertPageConfigGlobal(pageConfigGlobal, plusFilesAll);
|
|
215
220
|
const pageConfigs = objectEntries(configDefinitionsResolved.configDefinitionsLocal)
|
|
@@ -220,14 +225,14 @@ function getPageConfigsBuildTime(configDefinitionsResolved, plusFilesAll, userRo
|
|
|
220
225
|
objectEntries(configDefinitionsLocal)
|
|
221
226
|
.filter(([_configName, configDef]) => configDef.global !== true)
|
|
222
227
|
.forEach(([configName, configDef]) => {
|
|
223
|
-
const sources = resolveConfigValueSources(configName, configDef, plusFilesRelevant, userRootDir, false);
|
|
228
|
+
const sources = resolveConfigValueSources(configName, configDef, plusFilesRelevant, userRootDir, false, plusFilesAll);
|
|
224
229
|
if (sources.length === 0)
|
|
225
230
|
return;
|
|
226
231
|
configValueSources[configName] = sources;
|
|
227
232
|
});
|
|
228
233
|
const pageConfigRoute = determineRouteFilesystem(locationId, configValueSources);
|
|
229
234
|
applyEffectsMetaEnv(configValueSources, configDefinitionsLocal);
|
|
230
|
-
applyEffectsConfVal(configValueSources, configDefinitionsLocal);
|
|
235
|
+
applyEffectsConfVal(configValueSources, configDefinitionsLocal, plusFilesAll);
|
|
231
236
|
sortConfigValueSources(configValueSources, locationId);
|
|
232
237
|
const configValuesComputed = getComputed(configValueSources, configDefinitionsLocal);
|
|
233
238
|
const pageConfig = {
|
|
@@ -352,6 +357,7 @@ function temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, use
|
|
|
352
357
|
assert(includes(objectKeys(configDefinitionsBuiltIn), configName));
|
|
353
358
|
const configDef = configDefinitionsBuiltIn[configName];
|
|
354
359
|
const sources = ((_a = pageConfigGlobal.configValueSources)[configName] ?? (_a[configName] = []));
|
|
360
|
+
// TODO/now: use getSourceNonConfigFile()
|
|
355
361
|
sources.push({
|
|
356
362
|
valueIsLoaded: true,
|
|
357
363
|
value,
|
|
@@ -370,6 +376,49 @@ function temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, use
|
|
|
370
376
|
});
|
|
371
377
|
});
|
|
372
378
|
}
|
|
379
|
+
function setCliAndApiOptions(pageConfigGlobal) {
|
|
380
|
+
// VIKE_CONFIG
|
|
381
|
+
const configFromEnv = getEnvVarObject('VIKE_CONFIG');
|
|
382
|
+
if (configFromEnv) {
|
|
383
|
+
add(configFromEnv, { definedBy: 'env' });
|
|
384
|
+
}
|
|
385
|
+
// Vike API — passed options
|
|
386
|
+
const apiOperation = getApiOperation();
|
|
387
|
+
if (apiOperation?.options.vikeConfig) {
|
|
388
|
+
add(apiOperation.options.vikeConfig, {
|
|
389
|
+
definedBy: 'api',
|
|
390
|
+
operation: apiOperation.operation
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
// Vike CLI options
|
|
394
|
+
const cliOptions = getCliOptions();
|
|
395
|
+
if (cliOptions) {
|
|
396
|
+
add(cliOptions, { definedBy: 'cli' });
|
|
397
|
+
}
|
|
398
|
+
return;
|
|
399
|
+
function add(configValues, definedBy) {
|
|
400
|
+
Object.entries(configValues).forEach(([configName, value]) => {
|
|
401
|
+
var _a;
|
|
402
|
+
const sources = ((_a = pageConfigGlobal.configValueSources)[configName] ?? (_a[configName] = []));
|
|
403
|
+
sources.unshift(getSourceNonConfigFile(configName, value, definedBy));
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
function getSourceNonConfigFile(configName, value, definedAt) {
|
|
408
|
+
assert(includes(objectKeys(configDefinitionsBuiltIn), configName));
|
|
409
|
+
const configDef = configDefinitionsBuiltIn[configName];
|
|
410
|
+
const source = {
|
|
411
|
+
valueIsLoaded: true,
|
|
412
|
+
value,
|
|
413
|
+
configEnv: configDef.env,
|
|
414
|
+
definedAtFilePath: definedAt,
|
|
415
|
+
locationId: '/',
|
|
416
|
+
plusFile: null,
|
|
417
|
+
valueIsLoadedWithImport: false,
|
|
418
|
+
valueIsDefinedByPlusValueFile: false
|
|
419
|
+
};
|
|
420
|
+
return source;
|
|
421
|
+
}
|
|
373
422
|
function sortConfigValueSources(configValueSources, locationIdPage) {
|
|
374
423
|
Object.entries(configValueSources).forEach(([configName, sources]) => {
|
|
375
424
|
sources
|
|
@@ -456,7 +505,7 @@ function sortPlusFilesSameLocationId(plusFile1, plusFile2, configName) {
|
|
|
456
505
|
// No need to make it deterministic: the overall order is arleady deterministic, see sortMakeDeterministic() at getPlusFilesAll()
|
|
457
506
|
return 0;
|
|
458
507
|
}
|
|
459
|
-
function resolveConfigValueSources(configName, configDef, plusFilesRelevant, userRootDir, isGlobal) {
|
|
508
|
+
function resolveConfigValueSources(configName, configDef, plusFilesRelevant, userRootDir, isGlobal, plusFilesAll) {
|
|
460
509
|
let sources = plusFilesRelevant
|
|
461
510
|
.filter((plusFile) => isDefiningConfig(plusFile, configName))
|
|
462
511
|
.map((plusFile) => getConfigValueSource(configName, plusFile, configDef, userRootDir));
|
|
@@ -471,7 +520,7 @@ function resolveConfigValueSources(configName, configDef, plusFilesRelevant, use
|
|
|
471
520
|
sources = sources.filter((source) => {
|
|
472
521
|
assert(source.configEnv.config);
|
|
473
522
|
assert(source.valueIsLoaded);
|
|
474
|
-
const valueIsGlobal = resolveIsGlobalValue(configDef.global, source
|
|
523
|
+
const valueIsGlobal = resolveIsGlobalValue(configDef.global, source, plusFilesAll);
|
|
475
524
|
return isGlobal ? valueIsGlobal : !valueIsGlobal;
|
|
476
525
|
});
|
|
477
526
|
}
|
|
@@ -595,10 +644,13 @@ function isDefiningPage(plusFiles) {
|
|
|
595
644
|
function isDefiningPageConfig(configName) {
|
|
596
645
|
return ['Page', 'route'].includes(configName);
|
|
597
646
|
}
|
|
598
|
-
function resolveIsGlobalValue(configDefGlobal,
|
|
647
|
+
function resolveIsGlobalValue(configDefGlobal, source, plusFilesAll) {
|
|
648
|
+
assert(source.valueIsLoaded);
|
|
599
649
|
let isGlobal;
|
|
600
650
|
if (isCallable(configDefGlobal))
|
|
601
|
-
isGlobal = configDefGlobal(
|
|
651
|
+
isGlobal = configDefGlobal(source.value, {
|
|
652
|
+
isGlobalLocation: isGlobalLocation(source.locationId, plusFilesAll)
|
|
653
|
+
});
|
|
602
654
|
else
|
|
603
655
|
isGlobal = configDefGlobal ?? false;
|
|
604
656
|
assert(typeof isGlobal === 'boolean');
|
|
@@ -688,7 +740,7 @@ function assertMetaUsage(metaVal, metaConfigDefinedAt) {
|
|
|
688
740
|
});
|
|
689
741
|
}
|
|
690
742
|
// Test: https://github.com/vikejs/vike/blob/441a37c4c1a3b07bb8f6efb1d1f7be297a53974a/test/playground/vite.config.ts#L39
|
|
691
|
-
function applyEffectsConfVal(configValueSources, configDefinitions) {
|
|
743
|
+
function applyEffectsConfVal(configValueSources, configDefinitions, plusFilesAll) {
|
|
692
744
|
objectEntries(configDefinitions).forEach(([configNameEffect, configDefEffect]) => {
|
|
693
745
|
const sourceEffect = configValueSources[configNameEffect]?.[0];
|
|
694
746
|
if (!sourceEffect)
|
|
@@ -696,8 +748,8 @@ function applyEffectsConfVal(configValueSources, configDefinitions) {
|
|
|
696
748
|
const effect = runEffect(configNameEffect, configDefEffect, sourceEffect);
|
|
697
749
|
if (!effect)
|
|
698
750
|
return;
|
|
699
|
-
const
|
|
700
|
-
applyEffectConfVal(configModFromEffect, sourceEffect, configValueSources, configNameEffect, configDefEffect, configDefinitions,
|
|
751
|
+
const configModFromEffect = effect;
|
|
752
|
+
applyEffectConfVal(configModFromEffect, sourceEffect, configValueSources, configNameEffect, configDefEffect, configDefinitions, plusFilesAll);
|
|
701
753
|
});
|
|
702
754
|
}
|
|
703
755
|
// Test: https://github.com/vikejs/vike/blob/441a37c4c1a3b07bb8f6efb1d1f7be297a53974a/test/playground/pages/config-meta/effect/e2e-test.ts#L16
|
|
@@ -709,7 +761,7 @@ function applyEffectsMetaEnv(configValueSources, configDefinitions) {
|
|
|
709
761
|
const effect = runEffect(configNameEffect, configDefEffect, sourceEffect);
|
|
710
762
|
if (!effect)
|
|
711
763
|
return;
|
|
712
|
-
const
|
|
764
|
+
const configModFromEffect = effect;
|
|
713
765
|
applyEffectMetaEnv(configModFromEffect, configValueSources, configDefEffect);
|
|
714
766
|
});
|
|
715
767
|
}
|
|
@@ -721,17 +773,16 @@ function runEffect(configName, configDef, source) {
|
|
|
721
773
|
`Cannot add meta.effect to ${pc.cyan(configName)} because its meta.env is ${pc.cyan(JSON.stringify(configDef.env))} but an effect can only be added to a config that has a meta.env with ${pc.cyan('{ config: true }')}.`
|
|
722
774
|
].join(' '));
|
|
723
775
|
assert(source.valueIsLoaded);
|
|
724
|
-
const configValueEffectSource = source.value;
|
|
725
776
|
// Call effect
|
|
726
777
|
const configModFromEffect = configDef.effect({
|
|
727
|
-
configValue:
|
|
778
|
+
configValue: source.value,
|
|
728
779
|
configDefinedAt: getConfigDefinedAt('Config', configName, source.definedAtFilePath)
|
|
729
780
|
});
|
|
730
781
|
if (!configModFromEffect)
|
|
731
782
|
return null;
|
|
732
|
-
return
|
|
783
|
+
return configModFromEffect;
|
|
733
784
|
}
|
|
734
|
-
function applyEffectConfVal(configModFromEffect, sourceEffect, configValueSources, configNameEffect, configDefEffect, configDefinitions,
|
|
785
|
+
function applyEffectConfVal(configModFromEffect, sourceEffect, configValueSources, configNameEffect, configDefEffect, configDefinitions, plusFilesAll) {
|
|
735
786
|
objectEntries(configModFromEffect).forEach(([configNameTarget, configValue]) => {
|
|
736
787
|
if (configNameTarget === 'meta')
|
|
737
788
|
return;
|
|
@@ -748,11 +799,12 @@ function applyEffectConfVal(configModFromEffect, sourceEffect, configValueSource
|
|
|
748
799
|
valueIsLoaded: true,
|
|
749
800
|
value: configValue
|
|
750
801
|
};
|
|
751
|
-
|
|
752
|
-
const
|
|
802
|
+
assert(sourceEffect.valueIsLoaded);
|
|
803
|
+
const isValueGlobalSource = resolveIsGlobalValue(configDefEffect.global, sourceEffect, plusFilesAll);
|
|
804
|
+
const isValueGlobalTarget = resolveIsGlobalValue(configDef.global, configValueSource, plusFilesAll);
|
|
753
805
|
const isGlobalHumanReadable = (isGlobal) => `${isGlobal ? 'non-' : ''}global`;
|
|
754
806
|
// The error message make it sound like it's an inherent limitation, it actually isn't (both ways can make senses).
|
|
755
|
-
assertUsage(isValueGlobalSource === isValueGlobalTarget, `The configuration ${pc.cyan(configNameEffect)} is set to ${pc.cyan(JSON.stringify(
|
|
807
|
+
assertUsage(isValueGlobalSource === isValueGlobalTarget, `The configuration ${pc.cyan(configNameEffect)} is set to ${pc.cyan(JSON.stringify(sourceEffect.value))} which is considered ${isGlobalHumanReadable(isValueGlobalSource)}. However, it has a meta.effect that sets the configuration ${pc.cyan(configNameTarget)} to ${pc.cyan(JSON.stringify(configValue))} which is considered ${isGlobalHumanReadable(isValueGlobalTarget)}. This is contradictory: make sure the values are either both non-global or both global.`);
|
|
756
808
|
configValueSources[configNameTarget] ?? (configValueSources[configNameTarget] = []);
|
|
757
809
|
configValueSources[configNameTarget].push(configValueSource);
|
|
758
810
|
});
|
|
@@ -889,7 +941,7 @@ function determineRouteFilesystem(locationId, configValueSources) {
|
|
|
889
941
|
assert(filesystemRouteString.startsWith('/'));
|
|
890
942
|
const routeFilesystem = {
|
|
891
943
|
routeString: filesystemRouteString,
|
|
892
|
-
|
|
944
|
+
definedAtLocation: filesystemRouteDefinedBy
|
|
893
945
|
};
|
|
894
946
|
return { routeFilesystem, isErrorPage: undefined };
|
|
895
947
|
}
|
|
@@ -901,7 +953,9 @@ function getFilesystemRoutingRootEffect(configFilesystemRoutingRoot, configName)
|
|
|
901
953
|
const configDefinedAt = getConfigDefinedAt('Config', configName, configFilesystemRoutingRoot.definedAtFilePath);
|
|
902
954
|
assertUsage(typeof value === 'string', `${configDefinedAt} should be a string`);
|
|
903
955
|
assertUsage(value.startsWith('/'), `${configDefinedAt} is ${pc.cyan(value)} but it should start with a leading slash ${pc.cyan('/')}`);
|
|
904
|
-
const {
|
|
956
|
+
const { definedAtFilePath } = configFilesystemRoutingRoot;
|
|
957
|
+
assert(!definedAtFilePath.definedBy);
|
|
958
|
+
const { filePathAbsoluteUserRootDir } = definedAtFilePath;
|
|
905
959
|
assert(filePathAbsoluteUserRootDir);
|
|
906
960
|
const before = getFilesystemRouteString(getLocationId(filePathAbsoluteUserRootDir));
|
|
907
961
|
const after = value;
|
|
@@ -6,6 +6,8 @@ import { addSsrMiddleware } from '../shared/addSsrMiddleware.js';
|
|
|
6
6
|
import pc from '@brillout/picocolors';
|
|
7
7
|
import { logDockerHint } from './devConfig/index.js';
|
|
8
8
|
import { getOutDirs, resolveOutDir } from '../shared/getOutDirs.js';
|
|
9
|
+
import sirv from 'sirv';
|
|
10
|
+
import { resolvePrerenderConfigGlobal } from '../../prerender/resolvePrerenderConfig.js';
|
|
9
11
|
function previewConfig() {
|
|
10
12
|
let config;
|
|
11
13
|
// let vikeConfig: VikeConfigObject
|
|
@@ -32,23 +34,26 @@ function previewConfig() {
|
|
|
32
34
|
*/
|
|
33
35
|
return () => {
|
|
34
36
|
assertDist();
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
// We cannot re-use Vite's static middleware: https://github.com/vitejs/vite/pull/14836#issuecomment-1788540300
|
|
38
|
+
addStaticAssetsMiddleware(server.middlewares);
|
|
39
|
+
const prerenderConfigGlobal = resolvePrerenderConfigGlobal(config._vikeConfigObject);
|
|
40
|
+
if (!prerenderConfigGlobal.isPrerenderingEnabledForAllPages) {
|
|
41
|
+
addSsrMiddleware(server.middlewares, config, true, prerenderConfigGlobal.isPrerenderingEnabled);
|
|
38
42
|
}
|
|
39
|
-
/*/
|
|
40
|
-
addSsrMiddleware(server.middlewares, config, true);
|
|
41
|
-
//*/
|
|
42
43
|
addStatic404Middleware(server.middlewares);
|
|
43
44
|
};
|
|
44
45
|
}
|
|
45
46
|
};
|
|
46
47
|
function assertDist() {
|
|
47
|
-
|
|
48
|
+
const { outDirRoot, outDirClient, outDirServer } = getOutDirs(config);
|
|
48
49
|
[outDirRoot, outDirClient, outDirServer].forEach((outDirAny) => {
|
|
49
50
|
assertUsage(fs.existsSync(outDirAny), `Cannot run ${pc.cyan('$ vike preview')}: your app isn't built (the build directory ${pc.cyan(outDirAny)} is missing). Make sure to run ${pc.cyan('$ vike build')} before running ${pc.cyan('$ vike preview')}.`);
|
|
50
51
|
});
|
|
51
52
|
}
|
|
53
|
+
function addStaticAssetsMiddleware(middlewares) {
|
|
54
|
+
const { outDirClient } = getOutDirs(config);
|
|
55
|
+
middlewares.use(sirv(outDirClient));
|
|
56
|
+
}
|
|
52
57
|
function addStatic404Middleware(middlewares) {
|
|
53
58
|
const { outDirClient } = getOutDirs(config);
|
|
54
59
|
middlewares.use(config.base, (_, res, next) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { addSsrMiddleware };
|
|
2
2
|
import type { ResolvedConfig, ViteDevServer } from 'vite';
|
|
3
3
|
type ConnectServer = ViteDevServer['middlewares'];
|
|
4
|
-
declare function addSsrMiddleware(middlewares: ConnectServer, config: ResolvedConfig, isPreview: boolean): void;
|
|
4
|
+
declare function addSsrMiddleware(middlewares: ConnectServer, config: ResolvedConfig, isPreview: boolean, isPrerenderingEnabled: boolean | null): void;
|
|
@@ -2,7 +2,7 @@ export { addSsrMiddleware };
|
|
|
2
2
|
import { renderPage } from '../../runtime/renderPage.js';
|
|
3
3
|
import { assertWarning } from '../utils.js';
|
|
4
4
|
import pc from '@brillout/picocolors';
|
|
5
|
-
function addSsrMiddleware(middlewares, config, isPreview) {
|
|
5
|
+
function addSsrMiddleware(middlewares, config, isPreview, isPrerenderingEnabled) {
|
|
6
6
|
middlewares.use(async (req, res, next) => {
|
|
7
7
|
if (res.headersSent)
|
|
8
8
|
return next();
|
|
@@ -37,6 +37,10 @@ function addSsrMiddleware(middlewares, config, isPreview) {
|
|
|
37
37
|
// - We purposely don't use next(err) to align behavior: we use our own/copied implementation of buildErrorMessage() regardless of whether the user uses Vite's dev middleware or Vite's standalone dev server
|
|
38
38
|
return next();
|
|
39
39
|
}
|
|
40
|
+
if (pageContext.httpResponse.statusCode === 404 && isPreview && isPrerenderingEnabled) {
|
|
41
|
+
// Serve /dist/client/404.html instead
|
|
42
|
+
return next();
|
|
43
|
+
}
|
|
40
44
|
const configHeaders = (isPreview && config?.preview?.headers) || config?.server?.headers;
|
|
41
45
|
if (configHeaders) {
|
|
42
46
|
for (const [name, value] of Object.entries(configHeaders))
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export { getEnvVarObject };
|
|
2
|
-
|
|
2
|
+
export { parseJson5 };
|
|
3
|
+
declare function getEnvVarObject(envVarName: 'VITE_CONFIG' | 'VIKE_CRAWL' | 'VIKE_CONFIG'): null | Record<string, unknown>;
|
|
4
|
+
declare function parseJson5(valueStr: string, what: string): unknown;
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
export { getEnvVarObject };
|
|
2
|
+
export { parseJson5 };
|
|
2
3
|
import pc from '@brillout/picocolors';
|
|
3
4
|
import { assertUsage, isObject } from '../utils.js';
|
|
4
5
|
import JSON5 from 'json5';
|
|
5
|
-
function getEnvVarObject(envVarName
|
|
6
|
-
/* Let's eventually implement this for Vike's config as well
|
|
7
|
-
| 'VIKE_CONFIG'
|
|
8
|
-
*/
|
|
9
|
-
) {
|
|
6
|
+
function getEnvVarObject(envVarName) {
|
|
10
7
|
const valueStr = process.env[envVarName];
|
|
11
8
|
if (!valueStr)
|
|
12
9
|
return null;
|
|
10
|
+
const value = parseJson5(valueStr, envVarName);
|
|
11
|
+
assertUsage(value, `${envVarName} should define an object but it's ${pc.bold(String(value))} instead.`);
|
|
12
|
+
assertUsage(isObject(value), `${envVarName} should define an object but it's set to the following which isn't an object: ${pc.bold(valueStr)}`);
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
function parseJson5(valueStr, what) {
|
|
13
16
|
let value;
|
|
14
17
|
try {
|
|
15
18
|
value = JSON5.parse(valueStr);
|
|
16
19
|
}
|
|
17
20
|
catch (err) {
|
|
18
21
|
console.error(err);
|
|
19
|
-
assertUsage(false, `Cannot parse ${
|
|
22
|
+
assertUsage(false, `Cannot parse ${pc.cyan(what)} (see error above) because it's set to the following which isn't a valid JSON5 string: ${pc.bold(valueStr)}`);
|
|
20
23
|
}
|
|
21
|
-
assertUsage(value, `${envVarName} should define an object but it's ${pc.bold(String(value))} instead.`);
|
|
22
|
-
assertUsage(isObject(value), `${envVarName} should define an object but it's set to the following which isn't an object: ${pc.bold(valueStr)}`);
|
|
23
24
|
return value;
|
|
24
25
|
}
|
|
@@ -2,7 +2,7 @@ export { logWithViteTag };
|
|
|
2
2
|
export { logWithVikeTag };
|
|
3
3
|
export { logDirectly };
|
|
4
4
|
export { applyViteSourceMapToStackTrace };
|
|
5
|
-
import { assert,
|
|
5
|
+
import { assert, stripAnsi, hasProp, assertIsNotProductionRuntime, PROJECT_VERSION } from '../../utils.js';
|
|
6
6
|
import pc from '@brillout/picocolors';
|
|
7
7
|
import { isErrorDebug } from '../../../shared/isErrorDebug.js';
|
|
8
8
|
import { getViteDevServer } from '../../../runtime/globalContext.js';
|
|
@@ -15,7 +15,7 @@ function logWithVikeTag(msg, logType, category, showVikeVersion = false) {
|
|
|
15
15
|
function getProjectTag(showVikeVersion) {
|
|
16
16
|
let projectTag;
|
|
17
17
|
if (showVikeVersion) {
|
|
18
|
-
projectTag = `[vike@${
|
|
18
|
+
projectTag = `[vike@${PROJECT_VERSION}]`;
|
|
19
19
|
}
|
|
20
20
|
else {
|
|
21
21
|
projectTag = `[vike]`;
|
|
@@ -7,7 +7,7 @@ import { resolvePrerenderConfigGlobal } from './resolvePrerenderConfig.js';
|
|
|
7
7
|
const globalObject = getGlobalObject('prerender/context.ts', {});
|
|
8
8
|
function isPrerenderAutoRunEnabled(vikeConfig) {
|
|
9
9
|
const prerenderConfigGlobal = resolvePrerenderConfigGlobal(vikeConfig);
|
|
10
|
-
return (prerenderConfigGlobal.
|
|
10
|
+
return (prerenderConfigGlobal.isPrerenderingEnabled &&
|
|
11
11
|
!(prerenderConfigGlobal || {}).disableAutoRun &&
|
|
12
12
|
!globalObject.isDisabled &&
|
|
13
13
|
vikeConfig.global.config.disableAutoFullBuild !== 'prerender');
|
|
@@ -9,7 +9,8 @@ declare function resolvePrerenderConfigGlobal(vikeConfig: VikeConfigObject): {
|
|
|
9
9
|
disableAutoRun: boolean;
|
|
10
10
|
} & {
|
|
11
11
|
defaultLocalValue: boolean;
|
|
12
|
-
|
|
12
|
+
isPrerenderingEnabledForAllPages: boolean;
|
|
13
|
+
isPrerenderingEnabled: boolean;
|
|
13
14
|
};
|
|
14
15
|
declare function resolvePrerenderConfigLocal(pageConfig: PageConfigBuildTime): {
|
|
15
16
|
value: boolean;
|
|
@@ -1,29 +1,43 @@
|
|
|
1
1
|
export { resolvePrerenderConfigGlobal };
|
|
2
2
|
export { resolvePrerenderConfigLocal };
|
|
3
|
-
import { assert, isArray, objectAssign } from './utils.js';
|
|
3
|
+
import { assert, isArray, isObject, objectAssign } from './utils.js';
|
|
4
4
|
import { getConfigValueBuildTime } from '../../shared/page-configs/getConfigValueBuildTime.js';
|
|
5
|
+
// When setting +prerender to an object => it also enables pre-rendering
|
|
6
|
+
const defaultValueForObject = true;
|
|
5
7
|
function resolvePrerenderConfigGlobal(vikeConfig) {
|
|
6
|
-
const prerenderConfigs = vikeConfig.global.config.prerender;
|
|
7
|
-
|
|
8
|
-
// Needed because of backwards compatibility of `vike({prerender:true})` in `vite.config.js`; after we remove it we can remove this line.
|
|
9
|
-
prerenderConfigList = prerenderConfigList.filter(isObject2);
|
|
10
|
-
assert(prerenderConfigList.every(isObject2)); // Help TS
|
|
8
|
+
const prerenderConfigs = vikeConfig.global.config.prerender || [];
|
|
9
|
+
const prerenderSettings = prerenderConfigs.filter(isObject2);
|
|
11
10
|
const prerenderConfigGlobal = {
|
|
12
|
-
partial: pickFirst(
|
|
13
|
-
noExtraDir: pickFirst(
|
|
14
|
-
parallel: pickFirst(
|
|
15
|
-
disableAutoRun: pickFirst(
|
|
11
|
+
partial: pickFirst(prerenderSettings.map((c) => c.partial)) ?? false,
|
|
12
|
+
noExtraDir: pickFirst(prerenderSettings.map((c) => c.noExtraDir)) ?? false,
|
|
13
|
+
parallel: pickFirst(prerenderSettings.map((c) => c.parallel)) ?? true,
|
|
14
|
+
disableAutoRun: pickFirst(prerenderSettings.map((c) => c.disableAutoRun)) ?? false
|
|
16
15
|
};
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
(
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
let defaultLocalValue = false;
|
|
17
|
+
{
|
|
18
|
+
const valueFirst = prerenderConfigs.filter((p) => !isObject(p) || p.value !== null)[0];
|
|
19
|
+
if (valueFirst === true || (isObject(valueFirst) && (valueFirst.value ?? defaultValueForObject))) {
|
|
20
|
+
defaultLocalValue = true;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// TODO/next-major: remove
|
|
24
|
+
// Backwards compatibility for `vike({prerender:true})` in vite.config.js
|
|
25
|
+
{
|
|
26
|
+
const valuesWithDefinedAt = vikeConfig.global._from.configsCumulative.prerender?.values ?? [];
|
|
27
|
+
if (valuesWithDefinedAt.some((v) => v.definedAt.includes('vite.config.js') && v.value)) {
|
|
28
|
+
defaultLocalValue = true;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
23
31
|
objectAssign(prerenderConfigGlobal, {
|
|
24
32
|
defaultLocalValue,
|
|
25
|
-
|
|
33
|
+
isPrerenderingEnabledForAllPages: vikeConfig.pageConfigs.length > 0 &&
|
|
34
|
+
vikeConfig.pageConfigs.every((pageConfig) => resolvePrerenderConfigLocal(pageConfig)?.value ?? defaultLocalValue),
|
|
35
|
+
isPrerenderingEnabled: vikeConfig.pageConfigs.length > 0 &&
|
|
36
|
+
vikeConfig.pageConfigs.some((pageConfig) => resolvePrerenderConfigLocal(pageConfig)?.value ?? defaultLocalValue)
|
|
26
37
|
});
|
|
38
|
+
// TODO/next-major remove
|
|
39
|
+
if (vikeConfig.pageConfigs.length === 0 && defaultLocalValue)
|
|
40
|
+
prerenderConfigGlobal.isPrerenderingEnabled = true;
|
|
27
41
|
return prerenderConfigGlobal;
|
|
28
42
|
}
|
|
29
43
|
function resolvePrerenderConfigLocal(pageConfig) {
|
|
@@ -33,13 +47,14 @@ function resolvePrerenderConfigLocal(pageConfig) {
|
|
|
33
47
|
const values = configValue.value;
|
|
34
48
|
assert(isArray(values));
|
|
35
49
|
const value = values[0];
|
|
50
|
+
// TODO/now I believe this assert() can fail
|
|
36
51
|
assert(typeof value === 'boolean');
|
|
37
52
|
assert(isArray(configValue.definedAtData));
|
|
38
53
|
const prerenderConfigLocal = { value };
|
|
39
54
|
return prerenderConfigLocal;
|
|
40
55
|
}
|
|
41
|
-
function isObject2(
|
|
42
|
-
return typeof
|
|
56
|
+
function isObject2(value) {
|
|
57
|
+
return typeof value === 'object' && value !== null;
|
|
43
58
|
}
|
|
44
59
|
function pickFirst(arr) {
|
|
45
60
|
return arr.filter((v) => v !== undefined)[0];
|
|
@@ -4,7 +4,7 @@ export { runPrerenderFromAutoRun };
|
|
|
4
4
|
export { runPrerender_forceExit };
|
|
5
5
|
import path from 'path';
|
|
6
6
|
import { route } from '../../shared/route/index.js';
|
|
7
|
-
import { assert, assertUsage, assertWarning, hasProp,
|
|
7
|
+
import { assert, assertUsage, assertWarning, hasProp, objectAssign, isObjectWithKeys, isCallable, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, changeEnumerable, onSetupPrerender, isObject, makePublicCopy, PROJECT_VERSION } from './utils.js';
|
|
8
8
|
import { prerenderPage, prerender404Page, getPageContextInitEnhanced } from '../runtime/renderPage/renderPageAlreadyRouted.js';
|
|
9
9
|
import pc from '@brillout/picocolors';
|
|
10
10
|
import { cpus } from 'os';
|
|
@@ -38,7 +38,7 @@ async function runPrerenderFromAPI(options = {}) {
|
|
|
38
38
|
}
|
|
39
39
|
async function runPrerenderFromCLIPrerenderCommand() {
|
|
40
40
|
try {
|
|
41
|
-
const { viteConfigEnhanced } = await prepareViteApiCall(
|
|
41
|
+
const { viteConfigEnhanced } = await prepareViteApiCall({}, 'prerender');
|
|
42
42
|
await runPrerender({ viteConfig: viteConfigEnhanced }, '$ vike prerender');
|
|
43
43
|
}
|
|
44
44
|
catch (err) {
|
|
@@ -75,7 +75,7 @@ async function runPrerender(options = {}, standaloneTrigger) {
|
|
|
75
75
|
getHook_setIsPrerenderering();
|
|
76
76
|
const logLevel = !!options.onPagePrerender ? 'warn' : 'info';
|
|
77
77
|
if (logLevel === 'info') {
|
|
78
|
-
console.log(`${pc.cyan(`vike v${
|
|
78
|
+
console.log(`${pc.cyan(`vike v${PROJECT_VERSION}`)} ${pc.green('pre-rendering HTML...')}`);
|
|
79
79
|
}
|
|
80
80
|
await disableReactStreaming();
|
|
81
81
|
const viteConfig = await resolveConfig(options.viteConfig || {}, 'build', 'production');
|
|
@@ -84,13 +84,11 @@ async function runPrerender(options = {}, standaloneTrigger) {
|
|
|
84
84
|
const { root } = viteConfig;
|
|
85
85
|
const prerenderConfigGlobal = resolvePrerenderConfigGlobal(vikeConfig);
|
|
86
86
|
validatePrerenderConfig(prerenderConfigGlobal);
|
|
87
|
-
const { partial, noExtraDir, parallel, defaultLocalValue,
|
|
88
|
-
if (!
|
|
87
|
+
const { partial, noExtraDir, parallel, defaultLocalValue, isPrerenderingEnabled } = prerenderConfigGlobal;
|
|
88
|
+
if (!isPrerenderingEnabled) {
|
|
89
89
|
assert(standaloneTrigger);
|
|
90
|
-
// TODO/now: make it assertUsage() and remove dist/server/entry.mjs
|
|
91
|
-
assertWarning(
|
|
92
|
-
onlyOnce: true
|
|
93
|
-
});
|
|
90
|
+
// TODO/now: make it assertUsage() and remove dist/server/entry.mjs if pre-rendering is completely disabled
|
|
91
|
+
assertWarning(false, `You're executing ${pc.cyan(standaloneTrigger)} but you didn't enable pre-rendering. Use the ${pc.cyan('prerender')} setting (${pc.underline('https://vike.dev/prerender')}) to enable pre-rendering for at least one page.`, { onlyOnce: true });
|
|
94
92
|
}
|
|
95
93
|
const concurrencyLimit = pLimit(parallel === false || parallel === 0 ? 1 : parallel === true || parallel === undefined ? cpus().length : parallel);
|
|
96
94
|
await initGlobalContext_runPrerender();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from '../../utils/assert.js';
|
|
2
2
|
export * from '../../utils/hasProp.js';
|
|
3
|
-
export * from '../../utils/
|
|
3
|
+
export * from '../../utils/PROJECT_VERSION.js';
|
|
4
4
|
export * from '../../utils/objectAssign.js';
|
|
5
5
|
export * from '../../utils/isObjectWithKeys.js';
|
|
6
6
|
export * from '../../utils/isCallable.js';
|
|
@@ -2,7 +2,7 @@ import { assertIsNotBrowser } from '../../utils/assertIsNotBrowser.js';
|
|
|
2
2
|
assertIsNotBrowser();
|
|
3
3
|
export * from '../../utils/assert.js';
|
|
4
4
|
export * from '../../utils/hasProp.js';
|
|
5
|
-
export * from '../../utils/
|
|
5
|
+
export * from '../../utils/PROJECT_VERSION.js';
|
|
6
6
|
export * from '../../utils/objectAssign.js';
|
|
7
7
|
export * from '../../utils/isObjectWithKeys.js';
|
|
8
8
|
export * from '../../utils/isCallable.js';
|
|
@@ -75,7 +75,7 @@ declare function getUserFiles(): Promise<{
|
|
|
75
75
|
pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
|
|
76
76
|
onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
|
|
77
77
|
pages: PageConfigsUserFriendly;
|
|
78
|
-
config: import("../../
|
|
78
|
+
config: import("../../types/index.js").ConfigResolved;
|
|
79
79
|
}>;
|
|
80
80
|
declare function setGlobalContext_buildEntry(buildEntry: unknown): Promise<void>;
|
|
81
81
|
type BuildInfo = {
|
|
@@ -25,7 +25,7 @@ export { updateUserFiles };
|
|
|
25
25
|
// - Without vike-server it's manually loaded here using importServerProductionEntry() which uses @brillout/vite-plugin-server-entry's autoImporter or crawler
|
|
26
26
|
// - In development: globalObject.viteDevServer which is Vite's development server
|
|
27
27
|
// - globalObject.viteDevServer is used by updateUserFiles() which then sets globalConfig.userFiles
|
|
28
|
-
import { assert, onSetupRuntime, assertUsage, assertWarning, isPlainObject, objectAssign, objectReplace, isObject, hasProp, debugGlob, getGlobalObject, genPromise, createDebugger, makePublicCopy,
|
|
28
|
+
import { assert, onSetupRuntime, assertUsage, assertWarning, isPlainObject, objectAssign, objectReplace, isObject, hasProp, debugGlob, getGlobalObject, genPromise, createDebugger, makePublicCopy, checkType, PROJECT_VERSION } from './utils.js';
|
|
29
29
|
import { importServerProductionEntry } from '@brillout/vite-plugin-server-entry/runtime';
|
|
30
30
|
import { virtualFileIdImportUserCodeServer } from '../shared/virtual-files/virtualFileImportUserCode.js';
|
|
31
31
|
import pc from '@brillout/picocolors';
|
|
@@ -89,9 +89,10 @@ function makePublic(globalContext) {
|
|
|
89
89
|
async function setGlobalContext_viteDevServer(viteDevServer) {
|
|
90
90
|
debug('setGlobalContext_viteDevServer()');
|
|
91
91
|
setIsProduction(false);
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
assertIsNotInitilizedYet()
|
|
92
|
+
/* We cannot cache globalObject.viteDevServer because it's fully replaced when the user modifies vite.config.js => Vite's dev server is fully reloaded and a new viteDevServer replaces the previous one.
|
|
93
|
+
if (globalObject.viteDevServer) return
|
|
94
|
+
assertIsNotInitilizedYet()
|
|
95
|
+
*/
|
|
95
96
|
assert(globalObject.viteConfig);
|
|
96
97
|
globalObject.viteDevServer = viteDevServer;
|
|
97
98
|
await updateUserFiles();
|
|
@@ -351,7 +352,7 @@ function assertBuildInfo(buildInfo) {
|
|
|
351
352
|
checkType({ ...buildInfo, viteConfigRuntime: buildInfo.viteConfigRuntime });
|
|
352
353
|
}
|
|
353
354
|
function assertVersionAtBuildTime(versionAtBuildTime) {
|
|
354
|
-
const versionAtRuntime =
|
|
355
|
+
const versionAtRuntime = PROJECT_VERSION;
|
|
355
356
|
const pretty = (version) => pc.bold(`vike@${version}`);
|
|
356
357
|
assertUsage(versionAtBuildTime === versionAtRuntime, `Re-build your app (you're using ${pretty(versionAtRuntime)} but your app was built with ${pretty(versionAtBuildTime)})`);
|
|
357
358
|
}
|
|
@@ -369,7 +370,7 @@ async function updateUserFiles() {
|
|
|
369
370
|
const { promise, resolve } = genPromise();
|
|
370
371
|
assert(!globalObject.isProduction);
|
|
371
372
|
globalObject.waitForUserFilesUpdate = promise;
|
|
372
|
-
const viteDevServer =
|
|
373
|
+
const { viteDevServer } = globalObject;
|
|
373
374
|
assert(viteDevServer);
|
|
374
375
|
let virtualFileExports;
|
|
375
376
|
try {
|
|
@@ -381,6 +382,9 @@ async function updateUserFiles() {
|
|
|
381
382
|
}
|
|
382
383
|
virtualFileExports = virtualFileExports.default || virtualFileExports;
|
|
383
384
|
debugGlob('Glob result: ', virtualFileExports);
|
|
385
|
+
// Avoid race condition: abort if there is a new globalObject.viteDevServer (happens when vite.config.js is modified => Vite's dev server is fully reloaded).
|
|
386
|
+
if (viteDevServer !== globalObject.viteDevServer)
|
|
387
|
+
return;
|
|
384
388
|
await setUserFiles(virtualFileExports);
|
|
385
389
|
resolve();
|
|
386
390
|
}
|
|
@@ -159,6 +159,13 @@ function getStreamReadableWeb(htmlRender) {
|
|
|
159
159
|
if (isStreamReadableWeb(htmlRender)) {
|
|
160
160
|
return htmlRender;
|
|
161
161
|
}
|
|
162
|
+
if (isStreamPipeWeb(htmlRender)) {
|
|
163
|
+
const streamPipeWeb = getStreamPipeWeb(htmlRender);
|
|
164
|
+
assert(streamPipeWeb);
|
|
165
|
+
const { readable, writable } = new TransformStream();
|
|
166
|
+
streamPipeWeb(writable);
|
|
167
|
+
return readable;
|
|
168
|
+
}
|
|
162
169
|
return null;
|
|
163
170
|
}
|
|
164
171
|
function pipeToStreamWritableWeb(htmlRender, writable) {
|
|
@@ -13,6 +13,4 @@ import { RenderErrorPage as RenderErrorPage_ } from '../../shared/route/abort.js
|
|
|
13
13
|
*
|
|
14
14
|
* See https://vike.dev/render
|
|
15
15
|
*/
|
|
16
|
-
export declare const RenderErrorPage: (
|
|
17
|
-
pageContext?: Record<string, unknown>;
|
|
18
|
-
} | undefined) => Error;
|
|
16
|
+
export declare const RenderErrorPage: (...args: Parameters<typeof RenderErrorPage_>) => Error;
|