vike 0.4.142 → 0.4.143-commit-dc6fea0
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/plugin/index.js +2 -2
- package/dist/cjs/node/plugin/plugins/buildConfig.js +4 -5
- package/dist/cjs/node/plugin/plugins/commonConfig.js +2 -7
- package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +2 -2
- package/dist/cjs/node/plugin/plugins/envVars.js +3 -5
- package/dist/cjs/node/plugin/plugins/importUserCode/generateEagerImport.js +19 -8
- package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +2 -2
- package/dist/cjs/node/plugin/plugins/importUserCode/index.js +1 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getFilePathToShowToUser.js +6 -0
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +122 -124
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +37 -27
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +50 -80
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/helpers.js +12 -3
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/replaceImportStatements.js +25 -25
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/transpileAndExecuteFile.js +19 -16
- package/dist/cjs/node/plugin/plugins/suppressRollupWarning.js +16 -3
- package/dist/cjs/node/plugin/shared/{getConfigValueSource.js → getConfigValueSourcesRelevant.js} +1 -12
- package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet.js +1 -1
- package/dist/cjs/node/plugin/shared/loggerNotProd.js +3 -3
- package/dist/cjs/node/plugin/utils.js +1 -2
- package/dist/cjs/node/prerender/runPrerender.js +13 -16
- package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +1 -1
- package/dist/cjs/node/runtime/html/stream.js +4 -1
- package/dist/cjs/node/runtime/renderPage/analyzePage.js +2 -2
- package/dist/cjs/node/runtime/renderPage/loadPageFilesServerSide.js +2 -2
- package/dist/cjs/node/runtime/renderPage/log404/index.js +10 -5
- package/dist/cjs/node/shared/virtual-files/virtualFilePageConfigValuesAll.js +1 -1
- package/dist/cjs/shared/error-page.js +1 -1
- package/dist/cjs/shared/getPageFiles/assertPageConfigs.js +13 -13
- package/dist/cjs/shared/getPageFiles/getExports.js +3 -3
- package/dist/cjs/shared/getPageFiles/parseGlobResults.js +9 -43
- package/dist/cjs/shared/getPageFiles/parsePageConfigsSerialized.js +62 -0
- package/dist/cjs/shared/page-configs/assertExports.js +60 -0
- package/dist/cjs/shared/page-configs/loadConfigValues.js +18 -0
- package/dist/cjs/shared/page-configs/parseConfigValuesImported.js +50 -0
- package/dist/cjs/shared/page-configs/utils.js +1 -1
- package/dist/cjs/shared/route/loadPageRoutes.js +11 -13
- package/dist/cjs/shared/route/resolvePrecedence.js +32 -11
- package/dist/cjs/shared/route/resolveRedirects.js +1 -1
- package/dist/cjs/shared/route/resolveRouteFunction.js +1 -0
- package/dist/cjs/shared/route/resolveRouteString.js +99 -43
- package/dist/cjs/shared/utils.js +1 -1
- package/dist/cjs/types/defineConfig.js +7 -0
- package/dist/cjs/types/index.js +3 -0
- package/dist/cjs/utils/getFilePathAbsolute.js +16 -12
- package/dist/cjs/utils/objectAssign.js +3 -1
- package/dist/cjs/utils/parseUrl.js +6 -1
- package/dist/cjs/utils/projectInfo.js +1 -1
- package/dist/cjs/utils/requireResolve.js +60 -0
- package/dist/esm/__internal/index.d.ts +3 -3
- package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +2 -2
- package/dist/esm/client/client-routing-runtime/getPageContext.d.ts +2 -2
- package/dist/esm/client/client-routing-runtime/getPageId.d.ts +2 -2
- package/dist/esm/client/client-routing-runtime/prefetch.js +3 -1
- package/dist/esm/client/client-routing-runtime/useClientRouter.js +2 -2
- package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +1 -1
- package/dist/esm/client/shared/executeOnRenderClientHook.d.ts +2 -2
- package/dist/esm/client/shared/loadPageFilesClientSide.d.ts +2 -2
- package/dist/esm/client/shared/loadPageFilesClientSide.js +2 -2
- package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
- package/dist/esm/node/plugin/index.js +3 -2
- package/dist/esm/node/plugin/plugins/buildConfig.js +4 -5
- package/dist/esm/node/plugin/plugins/commonConfig.js +2 -7
- package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +1 -1
- package/dist/esm/node/plugin/plugins/envVars.js +4 -6
- package/dist/esm/node/plugin/plugins/importUserCode/generateEagerImport.d.ts +13 -2
- package/dist/esm/node/plugin/plugins/importUserCode/generateEagerImport.js +19 -8
- package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +2 -2
- package/dist/esm/node/plugin/plugins/importUserCode/index.js +2 -2
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getFilePathToShowToUser.d.ts +19 -2
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getFilePathToShowToUser.js +6 -0
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +3 -2
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +2 -2
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +123 -125
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.d.ts +5 -0
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +35 -25
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.d.ts +3 -0
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +49 -79
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/helpers.js +10 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/replaceImportStatements.d.ts +18 -6
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/replaceImportStatements.js +25 -25
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/transpileAndExecuteFile.d.ts +2 -2
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/transpileAndExecuteFile.js +19 -16
- package/dist/esm/node/plugin/plugins/suppressRollupWarning.js +16 -3
- package/dist/esm/node/plugin/shared/{getConfigValueSource.d.ts → getConfigValueSourcesRelevant.d.ts} +0 -2
- package/dist/esm/node/plugin/shared/{getConfigValueSource.js → getConfigValueSourcesRelevant.js} +0 -11
- package/dist/esm/node/plugin/shared/loggerNotProd/errorWithCodeSnippet.js +2 -2
- package/dist/esm/node/plugin/shared/loggerNotProd.js +4 -4
- package/dist/esm/node/plugin/utils.d.ts +1 -2
- package/dist/esm/node/plugin/utils.js +1 -2
- package/dist/esm/node/prerender/runPrerender.js +13 -16
- package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +1 -1
- package/dist/esm/node/runtime/html/injectAssets.d.ts +2 -2
- package/dist/esm/node/runtime/html/serializePageContextClientSide.d.ts +2 -2
- package/dist/esm/node/runtime/html/stream.js +4 -1
- package/dist/esm/node/runtime/renderPage/analyzePage.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/analyzePage.js +2 -2
- package/dist/esm/node/runtime/renderPage/createHttpResponseObject.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/debugPageFiles.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/handleErrorWithoutErrorPage.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/loadPageFilesServerSide.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/loadPageFilesServerSide.js +2 -2
- package/dist/esm/node/runtime/renderPage/log404/index.js +10 -5
- package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +13 -13
- package/dist/esm/node/shared/getClientEntryFilePath.d.ts +2 -2
- package/dist/esm/node/shared/virtual-files/virtualFilePageConfigValuesAll.js +1 -1
- package/dist/esm/shared/addIs404ToPageProps.d.ts +2 -2
- package/dist/esm/shared/addUrlComputedProps.d.ts +4 -2
- package/dist/esm/shared/error-page.d.ts +3 -3
- package/dist/esm/shared/error-page.js +1 -1
- package/dist/esm/shared/getPageFiles/analyzeClientSide.d.ts +2 -2
- package/dist/esm/shared/getPageFiles/assertPageConfigs.d.ts +5 -5
- package/dist/esm/shared/getPageFiles/assertPageConfigs.js +12 -12
- package/dist/esm/shared/getPageFiles/getExports.d.ts +2 -2
- package/dist/esm/shared/getPageFiles/getExports.js +1 -1
- package/dist/esm/shared/getPageFiles/parseGlobResults.d.ts +3 -3
- package/dist/esm/shared/getPageFiles/parseGlobResults.js +9 -43
- package/dist/esm/shared/getPageFiles/parsePageConfigsSerialized.d.ts +6 -0
- package/dist/esm/shared/getPageFiles/parsePageConfigsSerialized.js +59 -0
- package/dist/esm/shared/getPageFiles/setPageFiles.d.ts +3 -3
- package/dist/esm/shared/page-configs/Config.d.ts +201 -14
- package/dist/esm/shared/page-configs/PageConfig.d.ts +60 -39
- package/dist/esm/shared/page-configs/assertExports.d.ts +6 -0
- package/dist/esm/shared/page-configs/assertExports.js +54 -0
- package/dist/esm/shared/page-configs/findPageConfig.d.ts +2 -2
- package/dist/esm/shared/page-configs/loadConfigValues.d.ts +3 -0
- package/dist/esm/shared/page-configs/loadConfigValues.js +15 -0
- package/dist/esm/shared/page-configs/parseConfigValuesImported.d.ts +3 -0
- package/dist/esm/shared/page-configs/parseConfigValuesImported.js +44 -0
- package/dist/esm/shared/page-configs/utils.d.ts +3 -2
- package/dist/esm/shared/page-configs/utils.js +1 -1
- package/dist/esm/shared/route/executeGuardHook.d.ts +2 -2
- package/dist/esm/shared/route/index.d.ts +3 -3
- package/dist/esm/shared/route/loadPageRoutes.d.ts +2 -2
- package/dist/esm/shared/route/loadPageRoutes.js +11 -13
- package/dist/esm/shared/route/resolvePrecedence.js +33 -12
- package/dist/esm/shared/route/resolveRedirects.js +1 -1
- package/dist/esm/shared/route/resolveRouteFunction.js +1 -0
- package/dist/esm/shared/route/resolveRouteString.d.ts +21 -4
- package/dist/esm/shared/route/resolveRouteString.js +98 -42
- package/dist/esm/shared/types.d.ts +8 -6
- package/dist/esm/shared/utils.d.ts +1 -1
- package/dist/esm/shared/utils.js +1 -1
- package/dist/esm/types/defineConfig.d.ts +3 -0
- package/dist/esm/types/defineConfig.js +4 -0
- package/dist/esm/types/index.d.ts +3 -1
- package/dist/esm/types/index.js +1 -1
- package/dist/esm/utils/getFilePathAbsolute.d.ts +2 -2
- package/dist/esm/utils/getFilePathAbsolute.js +15 -11
- package/dist/esm/utils/objectAssign.js +3 -1
- package/dist/esm/utils/parseUrl.js +6 -1
- package/dist/esm/utils/projectInfo.d.ts +1 -1
- package/dist/esm/utils/projectInfo.js +1 -1
- package/dist/esm/utils/requireResolve.d.ts +2 -0
- package/dist/esm/utils/requireResolve.js +57 -0
- package/package.json +3 -3
- package/dist/cjs/shared/page-configs/loadPageCode.js +0 -63
- package/dist/cjs/utils/addFileExtensionsToRequireResolve.js +0 -23
- package/dist/cjs/utils/assertDefaultExport.js +0 -53
- package/dist/esm/shared/page-configs/loadPageCode.d.ts +0 -3
- package/dist/esm/shared/page-configs/loadPageCode.js +0 -57
- package/dist/esm/utils/addFileExtensionsToRequireResolve.d.ts +0 -2
- package/dist/esm/utils/addFileExtensionsToRequireResolve.js +0 -20
- package/dist/esm/utils/assertDefaultExport.d.ts +0 -8
- package/dist/esm/utils/assertDefaultExport.js +0 -47
- /package/dist/cjs/shared/getPageFiles/{assertExports.js → assert_exports_old_design.js} +0 -0
- /package/dist/esm/shared/getPageFiles/{assertExports.d.ts → assert_exports_old_design.d.ts} +0 -0
- /package/dist/esm/shared/getPageFiles/{assertExports.js → assert_exports_old_design.js} +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export { parsePageConfigsSerialized };
|
|
2
|
+
import { parse } from '@brillout/json-serializer/parse';
|
|
3
|
+
import { parseConfigValuesImported } from '../page-configs/parseConfigValuesImported.js';
|
|
4
|
+
import { assert, assertUsage, isCallable } from '../utils.js';
|
|
5
|
+
function parsePageConfigsSerialized(pageConfigsSerialized, pageConfigGlobalSerialized) {
|
|
6
|
+
const pageConfigs = pageConfigsSerialized.map((pageConfigSerialized) => {
|
|
7
|
+
const configValues = {};
|
|
8
|
+
{
|
|
9
|
+
const { configValuesSerialized } = pageConfigSerialized;
|
|
10
|
+
Object.entries(configValuesSerialized).forEach(([configName, configValueSeriliazed]) => {
|
|
11
|
+
{
|
|
12
|
+
const { valueSerialized, definedAtInfo } = configValueSeriliazed;
|
|
13
|
+
assert(valueSerialized);
|
|
14
|
+
assert(!configValues[configName]);
|
|
15
|
+
configValues[configName] = {
|
|
16
|
+
value: parse(valueSerialized),
|
|
17
|
+
definedAtInfo
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
{
|
|
23
|
+
const { configValuesImported } = pageConfigSerialized;
|
|
24
|
+
const configValuesAddendum = parseConfigValuesImported(configValuesImported);
|
|
25
|
+
Object.assign(configValues, configValuesAddendum);
|
|
26
|
+
}
|
|
27
|
+
const { pageId, isErrorPage, routeFilesystem, loadConfigValuesAll } = pageConfigSerialized;
|
|
28
|
+
assertRouteConfigValue(configValues);
|
|
29
|
+
return {
|
|
30
|
+
pageId,
|
|
31
|
+
isErrorPage,
|
|
32
|
+
routeFilesystem,
|
|
33
|
+
configValues,
|
|
34
|
+
loadConfigValuesAll
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
const pageConfigGlobal = { configValues: {} };
|
|
38
|
+
{
|
|
39
|
+
const configValuesAddendum = parseConfigValuesImported(pageConfigGlobalSerialized.configValuesImported);
|
|
40
|
+
Object.assign(pageConfigGlobal.configValues, configValuesAddendum);
|
|
41
|
+
}
|
|
42
|
+
return { pageConfigs, pageConfigGlobal };
|
|
43
|
+
}
|
|
44
|
+
function assertRouteConfigValue(configValues) {
|
|
45
|
+
if (!configValues.route)
|
|
46
|
+
return;
|
|
47
|
+
const { value, definedAtInfo } = configValues.route;
|
|
48
|
+
const configValueType = typeof value;
|
|
49
|
+
assert(definedAtInfo);
|
|
50
|
+
assertUsage(configValueType === 'string' || isCallable(value), `${definedAtInfo.filePath} has an invalid type '${configValueType}': it should be a string or a function instead, see https://vike.dev/route`);
|
|
51
|
+
/* We don't use assertRouteString() in order to avoid unnecessarily bloating the client-side bundle when using Server Routing:
|
|
52
|
+
* - When using Server Routing, this file is loaded => loading assertRouteString() would bloat the client bundle.
|
|
53
|
+
* - assertRouteString() is already called on the server-side
|
|
54
|
+
* - When using Server Routing, client-side validation is superfluous as Route Strings only need to be validated on the server-side
|
|
55
|
+
if (typeof configValue === 'string') {
|
|
56
|
+
assertRouteString(configValue, `${configElement.configDefinedAt} defines an`)
|
|
57
|
+
}
|
|
58
|
+
*/
|
|
59
|
+
}
|
|
@@ -2,12 +2,12 @@ export { setPageFiles };
|
|
|
2
2
|
export { setPageFilesAsync };
|
|
3
3
|
export { getPageFilesAll };
|
|
4
4
|
import type { PageFile } from './getPageFileObject.js';
|
|
5
|
-
import type {
|
|
5
|
+
import type { PageConfigRuntime, PageConfigGlobalRuntime } from '../page-configs/PageConfig.js';
|
|
6
6
|
declare function setPageFiles(pageFilesExports: unknown): void;
|
|
7
7
|
declare function setPageFilesAsync(getPageFilesExports: () => Promise<unknown>): void;
|
|
8
8
|
declare function getPageFilesAll(isClientSide: boolean, isProduction?: boolean): Promise<{
|
|
9
9
|
pageFilesAll: PageFile[];
|
|
10
10
|
allPageIds: string[];
|
|
11
|
-
pageConfigs:
|
|
12
|
-
pageConfigGlobal:
|
|
11
|
+
pageConfigs: PageConfigRuntime[];
|
|
12
|
+
pageConfigGlobal: PageConfigGlobalRuntime;
|
|
13
13
|
}>;
|
|
@@ -3,15 +3,202 @@ export type { ConfigBuiltIn };
|
|
|
3
3
|
export type { ConfigNameBuiltIn };
|
|
4
4
|
export type { ConfigMeta };
|
|
5
5
|
export type { HookName };
|
|
6
|
+
export type { GuardAsync };
|
|
7
|
+
export type { GuardSync };
|
|
8
|
+
export type { OnBeforePrerenderStartAsync };
|
|
9
|
+
export type { OnBeforePrerenderStartSync };
|
|
10
|
+
export type { OnBeforeRenderAsync };
|
|
11
|
+
export type { OnBeforeRenderSync };
|
|
12
|
+
export type { OnBeforeRouteAsync };
|
|
13
|
+
export type { OnBeforeRouteSync };
|
|
14
|
+
export type { OnHydrationEndAsync };
|
|
15
|
+
export type { OnHydrationEndSync };
|
|
16
|
+
export type { OnPageTransitionEndAsync };
|
|
17
|
+
export type { OnPageTransitionEndSync };
|
|
18
|
+
export type { OnPageTransitionStartAsync };
|
|
19
|
+
export type { OnPageTransitionStartSync };
|
|
20
|
+
export type { OnPrerenderStartAsync };
|
|
21
|
+
export type { OnPrerenderStartSync };
|
|
22
|
+
export type { OnRenderClientAsync };
|
|
23
|
+
export type { OnRenderClientSync };
|
|
24
|
+
export type { OnRenderHtmlAsync };
|
|
25
|
+
export type { OnRenderHtmlSync };
|
|
26
|
+
export type { RouteAsync };
|
|
27
|
+
export type { RouteSync };
|
|
6
28
|
import type { PrefetchStaticAssets } from '../../client/client-routing-runtime/prefetch/getPrefetchSettings.js';
|
|
7
29
|
import type { ConfigDefinition } from '../../node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js';
|
|
30
|
+
import type { DocumentHtml } from '../../node/runtime/html/renderHtml.js';
|
|
8
31
|
import type { ConfigVikeUserProvided } from '../ConfigVike.js';
|
|
9
32
|
import type { Vike, VikePackages } from '../VikeNamespace.js';
|
|
33
|
+
import type { PageContextClient, PageContextServer } from '../types.js';
|
|
10
34
|
type HookName = 'onHydrationEnd' | 'onBeforePrerender' | 'onBeforePrerenderStart' | 'onBeforeRender' | 'onBeforeRoute' | 'onPageTransitionStart' | 'onPageTransitionEnd' | 'onPrerenderStart' | 'onRenderHtml' | 'onRenderClient' | 'guard' | 'render';
|
|
11
|
-
type
|
|
12
|
-
type ConfigNameBuiltInInternal = 'isClientSideRenderable' | 'onBeforeRenderEnv';
|
|
13
|
-
type ConfigNameBuiltIn = ConfigNameBuiltInPublic | ConfigNameBuiltInInternal;
|
|
35
|
+
type ConfigNameBuiltIn = Exclude<keyof Config, keyof ConfigVikeUserProvided | 'onBeforeRoute' | 'onPrerenderStart'> | 'prerender' | 'isClientSideRenderable' | 'onBeforeRenderEnv';
|
|
14
36
|
type Config = ConfigBuiltIn & Vike.Config & (VikePackages.ConfigVikeReact | VikePackages.ConfigVikeVue | VikePackages.ConfigVikeSolid | VikePackages.ConfigVikeSvelte);
|
|
37
|
+
/** Protect page(s), e.g. forbid unauthorized access.
|
|
38
|
+
*
|
|
39
|
+
* https://vike.dev/guard
|
|
40
|
+
*/
|
|
41
|
+
type GuardAsync = (pageContext: PageContextServer) => Promise<void>;
|
|
42
|
+
/** Protect page(s), e.g. forbid unauthorized access.
|
|
43
|
+
*
|
|
44
|
+
* https://vike.dev/guard
|
|
45
|
+
*/
|
|
46
|
+
type GuardSync = (pageContext: PageContextServer) => void;
|
|
47
|
+
/** Global Hook called before the whole pre-rendering process starts.
|
|
48
|
+
*
|
|
49
|
+
* https://vike.dev/onBeforePrerenderStart
|
|
50
|
+
*/
|
|
51
|
+
type OnBeforePrerenderStartAsync = () => Promise<(string | {
|
|
52
|
+
url: string;
|
|
53
|
+
pageContext: Partial<Vike.PageContext>;
|
|
54
|
+
})[]>;
|
|
55
|
+
/** Global Hook called before the whole pre-rendering process starts.
|
|
56
|
+
*
|
|
57
|
+
* https://vike.dev/onBeforePrerenderStart
|
|
58
|
+
*/
|
|
59
|
+
type OnBeforePrerenderStartSync = () => (string | {
|
|
60
|
+
url: string;
|
|
61
|
+
pageContext: Partial<Vike.PageContext>;
|
|
62
|
+
})[];
|
|
63
|
+
/** Hook called before the page is rendered, usually for fetching data.
|
|
64
|
+
*
|
|
65
|
+
* https://vike.dev/onBeforeRender
|
|
66
|
+
*/
|
|
67
|
+
type OnBeforeRenderAsync = (pageContext: PageContextServer) => Promise<{
|
|
68
|
+
pageContext: Partial<Vike.PageContext>;
|
|
69
|
+
} | void>;
|
|
70
|
+
/** Hook called before the page is rendered, usually for fetching data.
|
|
71
|
+
*
|
|
72
|
+
* https://vike.dev/onBeforeRender
|
|
73
|
+
*/
|
|
74
|
+
type OnBeforeRenderSync = (pageContext: PageContextServer) => {
|
|
75
|
+
pageContext: Partial<Vike.PageContext>;
|
|
76
|
+
} | void;
|
|
77
|
+
/** Hook called before the URL is routed to a page.
|
|
78
|
+
*
|
|
79
|
+
* https://vike.dev/onBeforeRoute
|
|
80
|
+
*/
|
|
81
|
+
type OnBeforeRouteAsync = (pageContext: PageContextServer) => Promise<{
|
|
82
|
+
pageContext: Partial<{
|
|
83
|
+
/** The URL you provided to Vike when calling `renderPage({ urlOriginal })` in your server middleware.
|
|
84
|
+
*
|
|
85
|
+
* https://vike.dev/renderPage
|
|
86
|
+
*/
|
|
87
|
+
urlOriginal: string;
|
|
88
|
+
} | Vike.PageContext>;
|
|
89
|
+
}>;
|
|
90
|
+
/** Hook called before the URL is routed to a page.
|
|
91
|
+
*
|
|
92
|
+
* https://vike.dev/onBeforeRoute
|
|
93
|
+
*/
|
|
94
|
+
type OnBeforeRouteSync = (pageContext: PageContextServer) => {
|
|
95
|
+
pageContext: Partial<{
|
|
96
|
+
/** The URL you provided to Vike when calling `renderPage({ urlOriginal })` in your server middleware.
|
|
97
|
+
*
|
|
98
|
+
* https://vike.dev/renderPage
|
|
99
|
+
*/
|
|
100
|
+
urlOriginal: string;
|
|
101
|
+
} | Vike.PageContext>;
|
|
102
|
+
};
|
|
103
|
+
/** Hook called after the page is hydrated.
|
|
104
|
+
*
|
|
105
|
+
* https://vike.dev/clientRouting
|
|
106
|
+
*/
|
|
107
|
+
type OnHydrationEndAsync = (pageContext: PageContextClient) => Promise<void>;
|
|
108
|
+
/** Hook called after the page is hydrated.
|
|
109
|
+
*
|
|
110
|
+
* https://vike.dev/clientRouting
|
|
111
|
+
*/
|
|
112
|
+
type OnHydrationEndSync = (pageContext: PageContextClient) => void;
|
|
113
|
+
/** Hook called after the user navigates to a new page.
|
|
114
|
+
*
|
|
115
|
+
* https://vike.dev/clientRouting
|
|
116
|
+
*/
|
|
117
|
+
type OnPageTransitionEndAsync = (pageContext: PageContextClient) => Promise<void>;
|
|
118
|
+
/** Hook called after the user navigates to a new page.
|
|
119
|
+
*
|
|
120
|
+
* https://vike.dev/clientRouting
|
|
121
|
+
*/
|
|
122
|
+
type OnPageTransitionEndSync = (pageContext: PageContextClient) => void;
|
|
123
|
+
/** Hook called before the user navigates to a new page.
|
|
124
|
+
*
|
|
125
|
+
* https://vike.dev/clientRouting
|
|
126
|
+
*/
|
|
127
|
+
type OnPageTransitionStartAsync = (pageContext: PageContextClient) => Promise<void>;
|
|
128
|
+
/** Hook called before the user navigates to a new page.
|
|
129
|
+
*
|
|
130
|
+
* https://vike.dev/clientRouting
|
|
131
|
+
*/
|
|
132
|
+
type OnPageTransitionStartSync = (pageContext: PageContextClient) => void;
|
|
133
|
+
/** Page Hook called when pre-rendering starts.
|
|
134
|
+
*
|
|
135
|
+
* https://vike.dev/onPrerenderStart
|
|
136
|
+
*/
|
|
137
|
+
type OnPrerenderStartAsync = (prerenderContext: {
|
|
138
|
+
pageContexts: PageContextServer[];
|
|
139
|
+
}) => Promise<{
|
|
140
|
+
prerenderContext: {
|
|
141
|
+
pageContexts: PageContextServer[];
|
|
142
|
+
};
|
|
143
|
+
}>;
|
|
144
|
+
/** Page Hook called when pre-rendering starts.
|
|
145
|
+
*
|
|
146
|
+
* https://vike.dev/onPrerenderStart
|
|
147
|
+
*/
|
|
148
|
+
type OnPrerenderStartSync = (prerenderContext: {
|
|
149
|
+
pageContexts: PageContextServer[];
|
|
150
|
+
}) => {
|
|
151
|
+
prerenderContext: {
|
|
152
|
+
pageContexts: PageContextServer[];
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
/** Hook called when page is rendered on the client-side.
|
|
156
|
+
*
|
|
157
|
+
* https://vike.dev/onRenderClient
|
|
158
|
+
*/
|
|
159
|
+
type OnRenderClientAsync = (pageContext: PageContextClient) => Promise<void>;
|
|
160
|
+
/** Hook called when page is rendered on the client-side.
|
|
161
|
+
*
|
|
162
|
+
* https://vike.dev/onRenderClient
|
|
163
|
+
*/
|
|
164
|
+
type OnRenderClientSync = (pageContext: PageContextClient) => void;
|
|
165
|
+
/** Hook called when page is rendered to HTML on the server-side.
|
|
166
|
+
*
|
|
167
|
+
* https://vike.dev/onRenderHtml
|
|
168
|
+
*/
|
|
169
|
+
type OnRenderHtmlAsync = (pageContext: PageContextServer) => Promise<DocumentHtml | {
|
|
170
|
+
documentHtml: DocumentHtml;
|
|
171
|
+
pageContext: OnRenderHtmlPageContextReturn | (() => Promise<OnRenderHtmlPageContextReturn> | OnRenderHtmlPageContextReturn);
|
|
172
|
+
}>;
|
|
173
|
+
/** Hook called when page is rendered to HTML on the server-side.
|
|
174
|
+
*
|
|
175
|
+
* https://vike.dev/onRenderHtml
|
|
176
|
+
*/
|
|
177
|
+
type OnRenderHtmlSync = (pageContext: PageContextServer) => DocumentHtml | {
|
|
178
|
+
documentHtml: DocumentHtml;
|
|
179
|
+
pageContext: OnRenderHtmlPageContextReturn | (() => Promise<OnRenderHtmlPageContextReturn> | OnRenderHtmlPageContextReturn);
|
|
180
|
+
};
|
|
181
|
+
type OnRenderHtmlPageContextReturn = Partial<Vike.PageContext & {
|
|
182
|
+
/** See https://vike.dev/stream */
|
|
183
|
+
enableEagerStreaming: boolean;
|
|
184
|
+
}>;
|
|
185
|
+
/** @deprecated Use a sync route() with an async guard() instead */
|
|
186
|
+
type RouteAsync = (pageContext: PageContextServer | PageContextClient) => Promise<{
|
|
187
|
+
routeParams?: Record<string, string>;
|
|
188
|
+
precedence?: number;
|
|
189
|
+
} | boolean>;
|
|
190
|
+
/** The page's URL(s).
|
|
191
|
+
*
|
|
192
|
+
* https://vike.dev/route
|
|
193
|
+
*/
|
|
194
|
+
type RouteSync = (pageContext: PageContextServer | PageContextClient) => {
|
|
195
|
+
routeParams?: Record<string, string>;
|
|
196
|
+
precedence?: number;
|
|
197
|
+
} | boolean;
|
|
198
|
+
/** The page's URL(s).
|
|
199
|
+
*
|
|
200
|
+
* https://vike.dev/route
|
|
201
|
+
*/
|
|
15
202
|
/** Page configuration.
|
|
16
203
|
*
|
|
17
204
|
* https://vike.dev/config
|
|
@@ -23,12 +210,12 @@ type ConfigBuiltIn = {
|
|
|
23
210
|
*
|
|
24
211
|
* https://vike.dev/route
|
|
25
212
|
*/
|
|
26
|
-
route?: string |
|
|
213
|
+
route?: string | RouteAsync | RouteSync | ImportString;
|
|
27
214
|
/** Protect page(s), e.g. forbid unauthorized access.
|
|
28
215
|
*
|
|
29
216
|
* https://vike.dev/guard
|
|
30
217
|
*/
|
|
31
|
-
guard?:
|
|
218
|
+
guard?: GuardAsync | GuardSync | ImportString;
|
|
32
219
|
/**
|
|
33
220
|
* Whether to pre-render the page(s).
|
|
34
221
|
*
|
|
@@ -45,7 +232,7 @@ type ConfigBuiltIn = {
|
|
|
45
232
|
*
|
|
46
233
|
* https://vike.dev/onBeforeRender
|
|
47
234
|
*/
|
|
48
|
-
onBeforeRender?:
|
|
235
|
+
onBeforeRender?: OnBeforeRenderAsync | OnBeforeRenderSync | ImportString | null;
|
|
49
236
|
/** Determines what pageContext properties are sent to the client-side.
|
|
50
237
|
*
|
|
51
238
|
* https://vike.dev/passToClient
|
|
@@ -55,12 +242,12 @@ type ConfigBuiltIn = {
|
|
|
55
242
|
*
|
|
56
243
|
* https://vike.dev/onRenderClient
|
|
57
244
|
*/
|
|
58
|
-
onRenderClient?:
|
|
245
|
+
onRenderClient?: OnRenderClientAsync | OnRenderClientSync | ImportString;
|
|
59
246
|
/** Hook called when page is rendered to HTML on the server-side.
|
|
60
247
|
*
|
|
61
248
|
* https://vike.dev/onRenderHtml
|
|
62
249
|
*/
|
|
63
|
-
onRenderHtml?:
|
|
250
|
+
onRenderHtml?: OnRenderHtmlAsync | OnRenderHtmlSync | ImportString;
|
|
64
251
|
/** Enable async Route Functions.
|
|
65
252
|
*
|
|
66
253
|
* https://vike.dev/route-function#async
|
|
@@ -75,32 +262,32 @@ type ConfigBuiltIn = {
|
|
|
75
262
|
*
|
|
76
263
|
* https://vike.dev/onPrerenderStart
|
|
77
264
|
*/
|
|
78
|
-
onPrerenderStart?:
|
|
265
|
+
onPrerenderStart?: OnPrerenderStartAsync | OnPrerenderStartSync | ImportString;
|
|
79
266
|
/** Global Hook called before the whole pre-rendering process starts.
|
|
80
267
|
*
|
|
81
268
|
* https://vike.dev/onBeforePrerenderStart
|
|
82
269
|
*/
|
|
83
|
-
onBeforePrerenderStart?:
|
|
270
|
+
onBeforePrerenderStart?: OnBeforePrerenderStartAsync | OnBeforePrerenderStartSync | ImportString;
|
|
84
271
|
/** Hook called before the URL is routed to a page.
|
|
85
272
|
*
|
|
86
273
|
* https://vike.dev/onBeforeRoute
|
|
87
274
|
*/
|
|
88
|
-
onBeforeRoute?:
|
|
275
|
+
onBeforeRoute?: OnBeforeRouteAsync | OnBeforeRouteSync | ImportString;
|
|
89
276
|
/** Hook called after the page is hydrated.
|
|
90
277
|
*
|
|
91
278
|
* https://vike.dev/clientRouting
|
|
92
279
|
*/
|
|
93
|
-
onHydrationEnd?:
|
|
280
|
+
onHydrationEnd?: OnHydrationEndAsync | OnHydrationEndSync | ImportString;
|
|
94
281
|
/** Hook called before the user navigates to a new page.
|
|
95
282
|
*
|
|
96
283
|
* https://vike.dev/clientRouting
|
|
97
284
|
*/
|
|
98
|
-
onPageTransitionStart?:
|
|
285
|
+
onPageTransitionStart?: OnPageTransitionStartAsync | OnPageTransitionStartSync | ImportString;
|
|
99
286
|
/** Hook called after the user navigates to a new page.
|
|
100
287
|
*
|
|
101
288
|
* https://vike.dev/clientRouting
|
|
102
289
|
*/
|
|
103
|
-
onPageTransitionEnd?:
|
|
290
|
+
onPageTransitionEnd?: OnPageTransitionEndAsync | OnPageTransitionEndSync | ImportString;
|
|
104
291
|
/** Whether the UI framework (React/Vue/Solid/...) allows the page's hydration to be aborted.
|
|
105
292
|
*
|
|
106
293
|
* https://vike.dev/clientRouting
|
|
@@ -1,35 +1,70 @@
|
|
|
1
|
-
export type {
|
|
2
|
-
export type {
|
|
1
|
+
export type { PageConfigRuntime };
|
|
2
|
+
export type { PageConfigRuntimeLoaded };
|
|
3
|
+
export type { PageConfigRuntimeSerialized };
|
|
3
4
|
export type { PageConfigBuildTime };
|
|
4
|
-
export type { PageConfigCommon };
|
|
5
5
|
export type { ConfigEnvInternal };
|
|
6
6
|
export type { ConfigEnv };
|
|
7
|
-
export type {
|
|
8
|
-
export type {
|
|
7
|
+
export type { PageConfigGlobalRuntime };
|
|
8
|
+
export type { PageConfigGlobalRuntimeSerialized };
|
|
9
|
+
export type { PageConfigGlobalBuildTime };
|
|
9
10
|
export type { ConfigSource };
|
|
10
11
|
export type { ConfigValue };
|
|
12
|
+
export type { ConfigValueSerialized };
|
|
13
|
+
export type { ConfigValueImported };
|
|
11
14
|
export type { ConfigValues };
|
|
12
15
|
export type { ConfigValueSource };
|
|
13
16
|
export type { ConfigValueSources };
|
|
14
17
|
export type { DefinedAtInfo };
|
|
15
18
|
export type { DefinedAtInfoFull };
|
|
16
|
-
type
|
|
17
|
-
type ConfigEnvInternal = ConfigEnv | '_routing-eager' | '_routing-lazy';
|
|
18
|
-
type PageConfigBuildTime = PageConfigCommon & {
|
|
19
|
-
configValueSources: ConfigValueSources;
|
|
20
|
-
};
|
|
21
|
-
type PageConfigCommon = {
|
|
19
|
+
type PageConfigBase = {
|
|
22
20
|
pageId: string;
|
|
23
|
-
isErrorPage
|
|
24
|
-
routeFilesystem
|
|
21
|
+
isErrorPage?: true;
|
|
22
|
+
routeFilesystem?: {
|
|
25
23
|
routeString: string;
|
|
26
24
|
definedBy: string;
|
|
27
25
|
};
|
|
26
|
+
};
|
|
27
|
+
/** Page config data structure available and used at runtime */
|
|
28
|
+
type PageConfigRuntime = PageConfigBase & {
|
|
29
|
+
/** Loaded config values */
|
|
30
|
+
configValues: ConfigValues;
|
|
31
|
+
/** Load config values that are lazily loaded such as config.Page */
|
|
32
|
+
loadConfigValuesAll: LoadConfigValuesAll;
|
|
33
|
+
};
|
|
34
|
+
/** Same as PageConfigRuntime but also contains all lazily loaded config values such as config.Page */
|
|
35
|
+
type PageConfigRuntimeLoaded = PageConfigRuntime & {
|
|
36
|
+
/** Whether loadConfigValuesAll() was called */
|
|
37
|
+
isLoaded: true;
|
|
38
|
+
};
|
|
39
|
+
/** page config data structure available and used at build-time */
|
|
40
|
+
type PageConfigBuildTime = PageConfigBase & {
|
|
41
|
+
configValues: ConfigValues;
|
|
42
|
+
configValueSources: ConfigValueSources;
|
|
43
|
+
};
|
|
44
|
+
/** page config data structure serialized in virtual files: parsing it results in PageConfigRuntime */
|
|
45
|
+
type PageConfigRuntimeSerialized = PageConfigBase & {
|
|
46
|
+
/** Config values that are loaded eagerly and serializable such as config.passToClient */
|
|
47
|
+
configValuesSerialized: Record<string, ConfigValueSerialized>;
|
|
48
|
+
/** Config values imported eagerly such as config.route */
|
|
49
|
+
configValuesImported: ConfigValueImported[];
|
|
50
|
+
/** Config values imported lazily such as config.page */
|
|
51
|
+
loadConfigValuesAll: LoadConfigValuesAll;
|
|
52
|
+
};
|
|
53
|
+
/** page config that applies to all pages */
|
|
54
|
+
type PageConfigGlobalRuntime = {
|
|
28
55
|
configValues: ConfigValues;
|
|
29
56
|
};
|
|
57
|
+
type PageConfigGlobalRuntimeSerialized = {
|
|
58
|
+
configValuesImported: ConfigValueImported[];
|
|
59
|
+
};
|
|
60
|
+
type PageConfigGlobalBuildTime = {
|
|
61
|
+
configValueSources: ConfigValueSources;
|
|
62
|
+
};
|
|
63
|
+
type ConfigEnv = 'client-only' | 'server-only' | 'server-and-client' | 'config-only';
|
|
64
|
+
/** For Vike internal use */
|
|
65
|
+
type ConfigEnvInternal = ConfigEnv | '_routing-eager' | '_routing-lazy';
|
|
30
66
|
type ConfigValueSource = {
|
|
31
67
|
configEnv: ConfigEnvInternal;
|
|
32
|
-
valueSerialized?: string;
|
|
33
68
|
value?: unknown;
|
|
34
69
|
valueIsImportedAtRuntime: boolean;
|
|
35
70
|
valueIsFilePath?: true;
|
|
@@ -46,6 +81,10 @@ type ConfigValue = {
|
|
|
46
81
|
value: unknown;
|
|
47
82
|
definedAtInfo: null | DefinedAtInfo;
|
|
48
83
|
};
|
|
84
|
+
type ConfigValueSerialized = {
|
|
85
|
+
valueSerialized: string;
|
|
86
|
+
definedAtInfo: null | DefinedAtInfo;
|
|
87
|
+
};
|
|
49
88
|
type ConfigValues = Record<string, ConfigValue>;
|
|
50
89
|
type DefinedAtInfo = {
|
|
51
90
|
filePath: string;
|
|
@@ -65,33 +104,15 @@ type ConfigSource = {
|
|
|
65
104
|
configSourceFileDefaultExportKey: string;
|
|
66
105
|
configSourceFileExportName?: undefined;
|
|
67
106
|
});
|
|
68
|
-
type
|
|
69
|
-
|
|
70
|
-
isLoaded?: true;
|
|
71
|
-
};
|
|
72
|
-
type PageConfigLoaded = PageConfig & {
|
|
73
|
-
isLoaded: true;
|
|
74
|
-
};
|
|
75
|
-
type PageConfigGlobalData = {
|
|
76
|
-
onPrerenderStart: null | ConfigValueSource;
|
|
77
|
-
onBeforeRoute: null | ConfigValueSource;
|
|
78
|
-
};
|
|
79
|
-
type PageConfigGlobal = {
|
|
80
|
-
onPrerenderStart: null | (ConfigValueSource & {
|
|
81
|
-
value: unknown;
|
|
82
|
-
});
|
|
83
|
-
onBeforeRoute: null | (ConfigValueSource & {
|
|
84
|
-
value: unknown;
|
|
85
|
-
});
|
|
86
|
-
};
|
|
87
|
-
type LoadConfigValuesAll = () => Promise<({
|
|
107
|
+
type LoadConfigValuesAll = () => Promise<ConfigValueImported[]>;
|
|
108
|
+
type ConfigValueImported = {
|
|
88
109
|
configName: string;
|
|
89
|
-
|
|
110
|
+
importPath: string;
|
|
90
111
|
} & ({
|
|
91
|
-
|
|
112
|
+
isValueFile: true;
|
|
92
113
|
importFileExports: Record<string, unknown>;
|
|
93
114
|
} | {
|
|
94
|
-
|
|
95
|
-
|
|
115
|
+
isValueFile: false;
|
|
116
|
+
exportName: string;
|
|
96
117
|
importFileExportValue: unknown;
|
|
97
|
-
})
|
|
118
|
+
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { assertExportsOfValueFile };
|
|
2
|
+
export { assertExportsOfConfigFile };
|
|
3
|
+
declare function assertExportsOfValueFile(fileExports: Record<string, unknown>, filePathToShowToUser: string, configName: string): void;
|
|
4
|
+
declare function assertExportsOfConfigFile(fileExports: Record<string, unknown>, filePathToShowToUser: string): asserts fileExports is {
|
|
5
|
+
default: Record<string, unknown>;
|
|
6
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export { assertExportsOfValueFile };
|
|
2
|
+
export { assertExportsOfConfigFile };
|
|
3
|
+
import { assert, assertUsage, assertWarning, isObject } from '../utils.js';
|
|
4
|
+
import pc from '@brillout/picocolors';
|
|
5
|
+
const EXPORTS_IGNORE = [
|
|
6
|
+
// vite-plugin-solid adds `export { $$registrations }`
|
|
7
|
+
'$$registrations',
|
|
8
|
+
// @vitejs/plugin-vue adds `export { _rerender_only }`
|
|
9
|
+
'_rerender_only'
|
|
10
|
+
];
|
|
11
|
+
// Tolerate `export { frontmatter }` in .mdx files
|
|
12
|
+
const TOLERATE_SIDE_EXPORTS = ['.md', '.mdx'];
|
|
13
|
+
function assertExportsOfValueFile(fileExports, filePathToShowToUser, configName) {
|
|
14
|
+
assertExports(fileExports, filePathToShowToUser, configName);
|
|
15
|
+
}
|
|
16
|
+
function assertExportsOfConfigFile(fileExports, filePathToShowToUser) {
|
|
17
|
+
assertExports(fileExports, filePathToShowToUser);
|
|
18
|
+
const exportDefault = fileExports.default;
|
|
19
|
+
assertUsage(isObject(exportDefault), `The ${pc.cyan('export default')} of ${filePathToShowToUser} should be an object (but it's ${pc.cyan(`typeof exportDefault === ${JSON.stringify(typeof exportDefault)}`)} instead)`);
|
|
20
|
+
}
|
|
21
|
+
function assertExports(fileExports, filePathToShowToUser, configName) {
|
|
22
|
+
const exportsAll = Object.keys(fileExports);
|
|
23
|
+
const exportsRelevant = exportsAll.filter((exportName) => !EXPORTS_IGNORE.includes(exportName));
|
|
24
|
+
const exportsInvalid = exportsRelevant.filter((e) => e !== 'default' &&
|
|
25
|
+
// !!configName => isValueFile
|
|
26
|
+
e !== configName);
|
|
27
|
+
if (exportsInvalid.length === 0) {
|
|
28
|
+
if (exportsRelevant.length === 1) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
assert(exportsRelevant.length === 0);
|
|
33
|
+
let errMsg = `${filePathToShowToUser} doesn't export any value, but it should have a ${pc.cyan('export default')}`;
|
|
34
|
+
if (configName)
|
|
35
|
+
errMsg += ` or ${pc.cyan(`export { ${configName} }`)}`;
|
|
36
|
+
assertUsage(false, errMsg);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// !configName => isConfigFile
|
|
41
|
+
if (!configName) {
|
|
42
|
+
const exportsInvalidStr = exportsInvalid.join(', ');
|
|
43
|
+
assertUsage(false, `${filePathToShowToUser} replace ${pc.cyan(`export { ${exportsInvalidStr} }`)} with ${pc.cyan(`export default { ${exportsInvalidStr} }`)}`);
|
|
44
|
+
}
|
|
45
|
+
// !!configName => isValueFile
|
|
46
|
+
else {
|
|
47
|
+
if (TOLERATE_SIDE_EXPORTS.some((ext) => filePathToShowToUser.endsWith(ext)))
|
|
48
|
+
return;
|
|
49
|
+
exportsInvalid.forEach((exportInvalid) => {
|
|
50
|
+
assertWarning(false, `${filePathToShowToUser} should have only a single export: move ${pc.cyan(`export { ${exportInvalid} }`)} to +config.h.js or its own +${exportsInvalid}.js`, { onlyOnce: true });
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { findPageConfig };
|
|
2
|
-
import type {
|
|
3
|
-
declare function findPageConfig(pageConfigs:
|
|
2
|
+
import type { PageConfigRuntime } from './PageConfig.js';
|
|
3
|
+
declare function findPageConfig(pageConfigs: PageConfigRuntime[], pageId: string): null | PageConfigRuntime;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { loadConfigValues };
|
|
2
|
+
import { objectAssign } from '../utils.js';
|
|
3
|
+
import { parseConfigValuesImported } from './parseConfigValuesImported.js';
|
|
4
|
+
async function loadConfigValues(pageConfig, isDev) {
|
|
5
|
+
if ('isLoaded' in pageConfig &&
|
|
6
|
+
// We don't need to cache in dev, since Vite already caches the virtual module
|
|
7
|
+
!isDev) {
|
|
8
|
+
return pageConfig;
|
|
9
|
+
}
|
|
10
|
+
const configValuesImported = await pageConfig.loadConfigValuesAll();
|
|
11
|
+
const configValuesAddendum = parseConfigValuesImported(configValuesImported);
|
|
12
|
+
Object.assign(pageConfig.configValues, configValuesAddendum);
|
|
13
|
+
objectAssign(pageConfig, { isLoaded: true });
|
|
14
|
+
return pageConfig;
|
|
15
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export { parseConfigValuesImported };
|
|
2
|
+
import { assert, assertUsage } from '../utils.js';
|
|
3
|
+
import { assertExportsOfValueFile } from './assertExports.js';
|
|
4
|
+
import pc from '@brillout/picocolors';
|
|
5
|
+
function parseConfigValuesImported(configValuesImported) {
|
|
6
|
+
const configValues = {};
|
|
7
|
+
const addConfigValue = (configName, value, filePath, exportName) => {
|
|
8
|
+
configValues[configName] = {
|
|
9
|
+
value,
|
|
10
|
+
definedAtInfo: {
|
|
11
|
+
filePath,
|
|
12
|
+
fileExportPath: [exportName]
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
assertIsNotNull(value, configName, filePath);
|
|
16
|
+
};
|
|
17
|
+
configValuesImported.forEach((configValueLoaded) => {
|
|
18
|
+
if (configValueLoaded.isValueFile) {
|
|
19
|
+
const { importFileExports, importPath, configName } = configValueLoaded;
|
|
20
|
+
if (configName !== 'client') {
|
|
21
|
+
assertExportsOfValueFile(importFileExports, importPath, configName);
|
|
22
|
+
}
|
|
23
|
+
Object.entries(importFileExports).forEach(([exportName, exportValue]) => {
|
|
24
|
+
const isSideExport = exportName !== 'default'; // .md files may have "side-exports" such as `export { frontmatter }`
|
|
25
|
+
const configName = isSideExport ? exportName : configValueLoaded.configName;
|
|
26
|
+
if (isSideExport && configName in configValues) {
|
|
27
|
+
// We can't avoid side-export conflicts upstream. (Because we cannot know about side-exports upstream at build-time.)
|
|
28
|
+
// Side-exports have the lowest priority.
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
addConfigValue(configName, exportValue, importPath, exportName);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const { configName, importPath, importFileExportValue, exportName } = configValueLoaded;
|
|
36
|
+
addConfigValue(configName, importFileExportValue, importPath, exportName);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
return configValues;
|
|
40
|
+
}
|
|
41
|
+
function assertIsNotNull(configValue, configName, importPath) {
|
|
42
|
+
assert(!importPath.includes('+config.'));
|
|
43
|
+
assertUsage(configValue !== null, `Set ${pc.cyan(configName)} to ${pc.cyan('null')} in a +config.h.js file instead of ${importPath}`);
|
|
44
|
+
}
|
|
@@ -3,8 +3,9 @@ export { getPageConfig };
|
|
|
3
3
|
export { getConfigDefinedAtString };
|
|
4
4
|
export { getConfigDefinedAtInfo };
|
|
5
5
|
export { getDefinedAtString };
|
|
6
|
-
import type { DefinedAtInfo,
|
|
6
|
+
import type { DefinedAtInfo, PageConfigRuntime, PageConfigBuildTime } from './PageConfig.js';
|
|
7
7
|
import type { ConfigNameBuiltIn } from './Config.js';
|
|
8
|
+
type PageConfigCommon = PageConfigRuntime | PageConfigBuildTime;
|
|
8
9
|
type ConfigName = ConfigNameBuiltIn;
|
|
9
10
|
declare function getConfigValue(pageConfig: PageConfigCommon, configName: ConfigName, type: 'string'): null | {
|
|
10
11
|
value: string;
|
|
@@ -16,7 +17,7 @@ declare function getConfigValue(pageConfig: PageConfigCommon, configName: Config
|
|
|
16
17
|
value: unknown;
|
|
17
18
|
};
|
|
18
19
|
declare function getConfigDefinedAtInfo(pageConfig: PageConfigCommon, configName: ConfigName): DefinedAtInfo;
|
|
19
|
-
declare function getPageConfig(pageId: string, pageConfigs:
|
|
20
|
+
declare function getPageConfig(pageId: string, pageConfigs: PageConfigRuntime[]): PageConfigRuntime;
|
|
20
21
|
type ConfigDefinedAtUppercase<ConfigName extends string> = `Config ${ConfigName}${string}`;
|
|
21
22
|
type ConfigDefinedAtLowercase<ConfigName extends string> = `config ${ConfigName}${string}`;
|
|
22
23
|
declare function getConfigDefinedAtString<ConfigName extends string>(configName: ConfigName, { definedAtInfo }: {
|
|
@@ -51,7 +51,7 @@ function assertConfigValueType(value, type, configName, definedAtInfo) {
|
|
|
51
51
|
const valuePrintable = getValuePrintable(value);
|
|
52
52
|
const problem = valuePrintable !== null ? `value ${pc.cyan(valuePrintable)}` : `type ${pc.cyan(typeActual)}`;
|
|
53
53
|
const configDefinedAt = getConfigDefinedAtString(configName, { definedAtInfo }, true);
|
|
54
|
-
assertUsage(false, `${configDefinedAt} has an invalid ${problem}:
|
|
54
|
+
assertUsage(false, `${configDefinedAt} has an invalid ${problem}: it should be a ${pc.cyan(type)} instead`);
|
|
55
55
|
}
|
|
56
56
|
function getConfigDefinedAtString(configName, { definedAtInfo }, sentenceBegin, append) {
|
|
57
57
|
let configDefinedAt = `${sentenceBegin ? `Config` : `config`} ${pc.cyan(configName)}`;
|