vike 0.4.160 → 0.4.161-commit-ba539a4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/cjs/node/cli/bin.js +5 -0
  2. package/dist/cjs/node/client/router.js +4 -2
  3. package/dist/cjs/node/plugin/plugins/autoFullBuild.js +2 -2
  4. package/dist/cjs/node/plugin/plugins/buildConfig/fixServerAssets.js +148 -0
  5. package/dist/cjs/node/plugin/plugins/buildConfig.js +61 -35
  6. package/dist/cjs/node/plugin/plugins/commonConfig.js +5 -13
  7. package/dist/cjs/node/plugin/plugins/config/stemUtils.js +1 -1
  8. package/dist/cjs/node/plugin/plugins/distFileNames.js +9 -1
  9. package/dist/cjs/node/plugin/plugins/extractAssetsPlugin.js +7 -2
  10. package/dist/cjs/node/plugin/plugins/importBuild/index.js +4 -7
  11. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +1 -5
  12. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/filesystemRouting.js +28 -46
  13. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/{loadFileConfigEnv.js → loadFileAtConfigTime.js} +5 -5
  14. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveFilePath.js +33 -0
  15. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveImportPath.js +2 -2
  16. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/{transformImports.js → transformFileImports.js} +7 -7
  17. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +21 -27
  18. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +155 -111
  19. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +2 -1
  20. package/dist/cjs/node/plugin/utils.js +3 -2
  21. package/dist/cjs/node/prerender/runPrerender.js +12 -5
  22. package/dist/cjs/node/runtime/globalContext.js +7 -4
  23. package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +2 -2
  24. package/dist/cjs/node/runtime/html/renderHtml.js +1 -1
  25. package/dist/cjs/node/runtime/html/stream.js +2 -2
  26. package/dist/cjs/node/runtime/renderPage/analyzePage.js +2 -2
  27. package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +2 -2
  28. package/dist/cjs/node/runtime/renderPage/getHttpResponseBody.js +39 -39
  29. package/dist/cjs/node/runtime/renderPage/getPageAssets/assertClientEntryId.js +0 -5
  30. package/dist/cjs/node/runtime/renderPage/getPageAssets/getManifestEntry.js +8 -7
  31. package/dist/cjs/node/runtime/renderPage/getPageAssets.js +15 -19
  32. package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
  33. package/dist/cjs/node/runtime/renderPage/{logHintForCjsEsmError.js → logErrorHint.js} +81 -43
  34. package/dist/cjs/node/runtime/renderPage/loggerProd.js +3 -3
  35. package/dist/cjs/node/runtime/utils.js +1 -1
  36. package/dist/cjs/node/shared/{getClientEntryFilePath.js → getClientEntry.js} +3 -3
  37. package/dist/cjs/node/shared/prependEntriesDir.js +13 -0
  38. package/dist/cjs/shared/page-configs/serialize/parseConfigValuesImported.js +53 -26
  39. package/dist/cjs/shared/route/executeGuardHook.js +3 -2
  40. package/dist/cjs/shared/utils.js +0 -1
  41. package/dist/cjs/utils/assertNodeVersion.js +2 -2
  42. package/dist/cjs/utils/{findUserPackageJsonPath.js → findFile.js} +11 -8
  43. package/dist/cjs/utils/isVersionOrAbove.js +29 -0
  44. package/dist/cjs/utils/nodeEnv.js +23 -1
  45. package/dist/cjs/utils/objectKeys.js +19 -3
  46. package/dist/cjs/utils/projectInfo.js +1 -1
  47. package/dist/cjs/utils/sorter.js +62 -1
  48. package/dist/esm/client/client-routing-runtime/index.d.ts +1 -1
  49. package/dist/esm/client/client-routing-runtime/index.js +1 -1
  50. package/dist/esm/node/cli/bin.js +3 -1
  51. package/dist/esm/node/client/router.d.ts +2 -0
  52. package/dist/esm/node/client/router.js +3 -1
  53. package/dist/esm/node/plugin/plugins/autoFullBuild.js +2 -2
  54. package/dist/esm/node/plugin/plugins/buildConfig/fixServerAssets.d.ts +13 -0
  55. package/dist/esm/node/plugin/plugins/buildConfig/fixServerAssets.js +142 -0
  56. package/dist/esm/node/plugin/plugins/buildConfig.d.ts +2 -0
  57. package/dist/esm/node/plugin/plugins/buildConfig.js +60 -34
  58. package/dist/esm/node/plugin/plugins/commonConfig.js +6 -14
  59. package/dist/esm/node/plugin/plugins/config/stemUtils.js +2 -2
  60. package/dist/esm/node/plugin/plugins/distFileNames.js +9 -1
  61. package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +8 -3
  62. package/dist/esm/node/plugin/plugins/importBuild/index.d.ts +6 -1
  63. package/dist/esm/node/plugin/plugins/importBuild/index.js +4 -7
  64. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +2 -0
  65. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.d.ts +0 -1
  66. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +1 -5
  67. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/filesystemRouting.d.ts +39 -12
  68. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/filesystemRouting.js +29 -47
  69. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/{loadFileConfigEnv.js → loadFileAtConfigTime.js} +4 -4
  70. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveFilePath.d.ts +5 -0
  71. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveFilePath.js +27 -0
  72. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveImportPath.d.ts +1 -1
  73. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveImportPath.js +1 -1
  74. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/{transformImports.d.ts → transformFileImports.d.ts} +2 -2
  75. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/{transformImports.js → transformFileImports.js} +6 -6
  76. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.d.ts +1 -1
  77. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +20 -26
  78. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +4 -0
  79. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +153 -109
  80. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +2 -1
  81. package/dist/esm/node/plugin/utils.d.ts +3 -2
  82. package/dist/esm/node/plugin/utils.js +3 -2
  83. package/dist/esm/node/prerender/runPrerender.js +13 -6
  84. package/dist/esm/node/runtime/globalContext.js +8 -5
  85. package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +2 -2
  86. package/dist/esm/node/runtime/html/renderHtml.js +1 -1
  87. package/dist/esm/node/runtime/html/stream.js +2 -2
  88. package/dist/esm/node/runtime/renderPage/analyzePage.js +2 -2
  89. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +2 -2
  90. package/dist/esm/node/runtime/renderPage/getHttpResponseBody.d.ts +6 -5
  91. package/dist/esm/node/runtime/renderPage/getHttpResponseBody.js +39 -39
  92. package/dist/esm/node/runtime/renderPage/getPageAssets/assertClientEntryId.js +0 -5
  93. package/dist/esm/node/runtime/renderPage/getPageAssets/getManifestEntry.js +8 -7
  94. package/dist/esm/node/runtime/renderPage/getPageAssets.js +16 -20
  95. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
  96. package/dist/esm/node/runtime/renderPage/logErrorHint.d.ts +8 -0
  97. package/dist/esm/node/runtime/renderPage/{logHintForCjsEsmError.js → logErrorHint.js} +80 -42
  98. package/dist/esm/node/runtime/renderPage/loggerProd.js +3 -3
  99. package/dist/esm/node/runtime/utils.d.ts +1 -1
  100. package/dist/esm/node/runtime/utils.js +1 -1
  101. package/dist/esm/node/shared/ViteManifest.d.ts +1 -0
  102. package/dist/esm/node/shared/getClientEntry.d.ts +3 -0
  103. package/dist/esm/node/shared/{getClientEntryFilePath.js → getClientEntry.js} +2 -2
  104. package/dist/esm/node/shared/prependEntriesDir.d.ts +2 -0
  105. package/dist/esm/node/shared/prependEntriesDir.js +10 -0
  106. package/dist/esm/shared/page-configs/Config.d.ts +1 -1
  107. package/dist/esm/shared/page-configs/PageConfig.d.ts +2 -0
  108. package/dist/esm/shared/page-configs/serialize/parseConfigValuesImported.js +53 -26
  109. package/dist/esm/shared/route/executeGuardHook.js +3 -2
  110. package/dist/esm/shared/utils.d.ts +0 -1
  111. package/dist/esm/shared/utils.js +0 -1
  112. package/dist/esm/utils/assertNodeVersion.js +2 -2
  113. package/dist/esm/utils/findFile.d.ts +3 -0
  114. package/dist/esm/utils/findFile.js +21 -0
  115. package/dist/esm/utils/getOutDirs.d.ts +1 -0
  116. package/dist/esm/utils/isVersionOrAbove.d.ts +2 -0
  117. package/dist/esm/utils/isVersionOrAbove.js +26 -0
  118. package/dist/esm/utils/nodeEnv.d.ts +4 -0
  119. package/dist/esm/utils/nodeEnv.js +19 -0
  120. package/dist/esm/utils/objectKeys.d.ts +10 -1
  121. package/dist/esm/utils/objectKeys.js +20 -3
  122. package/dist/esm/utils/projectInfo.d.ts +2 -2
  123. package/dist/esm/utils/projectInfo.js +1 -1
  124. package/dist/esm/utils/sorter.d.ts +59 -0
  125. package/dist/esm/utils/sorter.js +61 -0
  126. package/package.json +2 -2
  127. package/dist/cjs/utils/objectEntries.js +0 -8
  128. package/dist/esm/node/runtime/renderPage/logHintForCjsEsmError.d.ts +0 -13
  129. package/dist/esm/node/shared/getClientEntryFilePath.d.ts +0 -3
  130. package/dist/esm/utils/findUserPackageJsonPath.d.ts +0 -2
  131. package/dist/esm/utils/findUserPackageJsonPath.js +0 -18
  132. package/dist/esm/utils/objectEntries.d.ts +0 -4
  133. package/dist/esm/utils/objectEntries.js +0 -5
  134. /package/dist/cjs/node/runtime/renderPage/{logHintForCjsEsmError → logErrorHint}/errors.js +0 -0
  135. /package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/{loadFileConfigEnv.d.ts → loadFileAtConfigTime.d.ts} +0 -0
  136. /package/dist/esm/node/runtime/renderPage/{logHintForCjsEsmError → logErrorHint}/errors.d.ts +0 -0
  137. /package/dist/esm/node/runtime/renderPage/{logHintForCjsEsmError → logErrorHint}/errors.js +0 -0
@@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.assertNodeVersion = void 0;
4
4
  const assert_js_1 = require("./assert.js");
5
5
  const isNodeJS_js_1 = require("./isNodeJS.js");
6
+ const isVersionOrAbove_js_1 = require("./isVersionOrAbove.js");
6
7
  // package.json#engines.node isn't enough as users can ignore it
7
8
  function assertNodeVersion() {
8
9
  if (!(0, isNodeJS_js_1.isNodeJS)())
9
10
  return;
10
11
  const version = process.versions.node;
11
- const major = parseInt(version.split('.')[0], 10);
12
- (0, assert_js_1.assertUsage)(major >= 16, `Node.js ${version} isn't supported, use Node.js >=16.0.0 instead.`);
12
+ (0, assert_js_1.assertUsage)((0, isVersionOrAbove_js_1.isVersionOrAbove)(version, '16.0.0'), `Node.js ${version} isn't supported, use Node.js >=16.0.0 instead.`);
13
13
  }
14
14
  exports.assertNodeVersion = assertNodeVersion;
@@ -3,16 +3,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.findUserPackageJsonPath = void 0;
6
+ exports.findFile = void 0;
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const fs_1 = __importDefault(require("fs"));
9
- function findUserPackageJsonPath(userDir) {
10
- let dir = userDir;
9
+ function findFile(arg, cwd) {
10
+ const filenames = Array.isArray(arg) ? arg : [arg];
11
+ let dir = cwd;
11
12
  while (true) {
12
- const configFilePath = path_1.default.join(dir, './package.json');
13
- if (fs_1.default.existsSync(configFilePath)) {
14
- // return toPosixPath(configFilePath)
15
- return configFilePath;
13
+ for (const filename of filenames) {
14
+ const configFilePath = path_1.default.join(dir, `./${filename}`);
15
+ if (fs_1.default.existsSync(configFilePath)) {
16
+ // return toPosixPath(configFilePath)
17
+ return configFilePath;
18
+ }
16
19
  }
17
20
  const dirPrevious = dir;
18
21
  dir = path_1.default.dirname(dir);
@@ -21,4 +24,4 @@ function findUserPackageJsonPath(userDir) {
21
24
  }
22
25
  }
23
26
  }
24
- exports.findUserPackageJsonPath = findUserPackageJsonPath;
27
+ exports.findFile = findFile;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isVersionOrAbove = void 0;
4
+ const assert_js_1 = require("./assert.js");
5
+ function isVersionOrAbove(versionActual, versionExpected) {
6
+ const p1 = parseVersion(versionActual);
7
+ const p2 = parseVersion(versionExpected);
8
+ // major
9
+ if (p1[0] !== p2[0])
10
+ return p1[0] > p2[0];
11
+ // minor
12
+ if (p1[1] !== p2[1])
13
+ return p1[1] > p2[1];
14
+ // patch
15
+ if (p1[2] !== p2[2])
16
+ return p1[2] > p2[2];
17
+ // Same version
18
+ return true;
19
+ }
20
+ exports.isVersionOrAbove = isVersionOrAbove;
21
+ function parseVersion(version) {
22
+ // Remove pre-release tag
23
+ version = version.split('-')[0];
24
+ // major.minor.patch
25
+ const partsStr = version.split('.');
26
+ (0, assert_js_1.assert)(partsStr.length === 3);
27
+ const parts = partsStr.map((s) => parseInt(s, 10));
28
+ return parts;
29
+ }
@@ -1,6 +1,13 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isNodeEnvDev = exports.setNodeEnvToProduction = exports.getNodeEnv = void 0;
6
+ exports.assertNodeEnvIsNotDev = exports.getNodeEnvDesc = exports.isNodeEnvDev = exports.setNodeEnvToProduction = exports.getNodeEnv = void 0;
7
+ const picocolors_1 = __importDefault(require("@brillout/picocolors"));
8
+ const assertIsNotBrowser_js_1 = require("./assertIsNotBrowser.js");
9
+ const assert_js_1 = require("./assert.js");
10
+ (0, assertIsNotBrowser_js_1.assertIsNotBrowser)();
4
11
  function getNodeEnv() {
5
12
  if (typeof process === 'undefined')
6
13
  return null;
@@ -24,3 +31,18 @@ function isNodeEnvDev() {
24
31
  return false;
25
32
  }
26
33
  exports.isNodeEnvDev = isNodeEnvDev;
34
+ function getNodeEnvDesc() {
35
+ const nodeEnv = getNodeEnv();
36
+ const isDev = isNodeEnvDev();
37
+ const nodeEnvDesc = `environment is set to be a ${(isDev ? 'development' : 'production')} environment by ${picocolors_1.default.cyan(`process.env.NODE_ENV === ${JSON.stringify(nodeEnv)}`)}`;
38
+ return nodeEnvDesc;
39
+ }
40
+ exports.getNodeEnvDesc = getNodeEnvDesc;
41
+ function assertNodeEnvIsNotDev(operation) {
42
+ const isDev = isNodeEnvDev();
43
+ if (!isDev)
44
+ return;
45
+ const nodeEnvDesc = getNodeEnvDesc();
46
+ (0, assert_js_1.assertUsage)(false, `The ${nodeEnvDesc} which is forbidden upon ${operation}, see https://vike.dev/NODE_ENV`);
47
+ }
48
+ exports.assertNodeEnvIsNotDev = assertNodeEnvIsNotDev;
@@ -1,10 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.objectKeys = void 0;
3
+ exports.objectKeys = exports.objectFromEntries = exports.objectEntries = void 0;
4
+ // https://stackoverflow.com/questions/60141960/typescript-key-value-relation-preserving-object-entries-type/75337277#75337277
5
+ /** Same as Object.entries() but with type inference */
6
+ function objectEntries(obj) {
7
+ return Object.entries(obj);
8
+ }
9
+ exports.objectEntries = objectEntries;
10
+ /** Same as Object.fromEntries() but with type inference */
11
+ function objectFromEntries(arr) {
12
+ return Object.fromEntries(arr);
13
+ }
14
+ exports.objectFromEntries = objectFromEntries;
15
+ // https://stackoverflow.com/questions/52856496/typescript-object-keys-return-string
16
+ // https://github.com/sindresorhus/ts-extras/blob/main/source/object-keys.ts
4
17
  /** Same as Object.keys() but with type inference */
5
18
  function objectKeys(obj) {
6
19
  return Object.keys(obj);
7
20
  }
8
21
  exports.objectKeys = objectKeys;
9
- // https://stackoverflow.com/questions/52856496/typescript-object-keys-return-string
10
- // https://github.com/sindresorhus/ts-extras/blob/main/source/object-keys.ts
22
+ /*
23
+ function objectKeys2<T extends Record<string, unknown>>(obj: T): Array<keyof T> {
24
+ return Object.keys(obj)
25
+ }
26
+ */
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PROJECT_VERSION = exports.projectInfo = void 0;
4
4
  const assertSingleInstance_js_1 = require("./assertSingleInstance.js");
5
- const PROJECT_VERSION = '0.4.160';
5
+ const PROJECT_VERSION = '0.4.161-commit-ba539a4';
6
6
  exports.PROJECT_VERSION = PROJECT_VERSION;
7
7
  const projectInfo = {
8
8
  projectName: 'Vike',
@@ -1,10 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeLast = exports.makeFirst = exports.lowerFirst = exports.higherFirst = void 0;
3
+ exports.reverse = exports.makeLast = exports.makeFirst = exports.lowerFirst = exports.higherFirst = void 0;
4
4
  const assert_js_1 = require("./assert.js");
5
5
  // -1 => element1 first (i.e. `indexOf(element1) < indexOf(element2)`)
6
6
  // +1 => element2 first (i.e. `indexOf(element2) < indexOf(element1)`)
7
7
  // 0 => keep original order of element1 and element2
8
+ /**
9
+ * ```js
10
+ * let arr = [
11
+ * { price: 10 },
12
+ * { price: 1000 },
13
+ * { price: 100 }
14
+ * ]
15
+ * arr = arr.sort(higherFirst(el => el.price))
16
+ * isEqual(arr, [
17
+ * { price: 1000 },
18
+ * { price: 100 },
19
+ * { price: 10 }
20
+ * ])
21
+ * ```
22
+ */
8
23
  function higherFirst(getValue) {
9
24
  return (element1, element2) => {
10
25
  const val1 = getValue(element1);
@@ -16,6 +31,21 @@ function higherFirst(getValue) {
16
31
  };
17
32
  }
18
33
  exports.higherFirst = higherFirst;
34
+ /**
35
+ * ```js
36
+ * let arr = [
37
+ * { price: 10 },
38
+ * { price: 1000 },
39
+ * { price: 100 }
40
+ * ]
41
+ * arr = arr.sort(lowerFirst(el => el.price))
42
+ * isEqual(arr, [
43
+ * { price: 10 },
44
+ * { price: 100 },
45
+ * { price: 1000 }
46
+ * ])
47
+ * ```
48
+ */
19
49
  function lowerFirst(getValue) {
20
50
  return (element1, element2) => {
21
51
  const val1 = getValue(element1);
@@ -27,6 +57,19 @@ function lowerFirst(getValue) {
27
57
  };
28
58
  }
29
59
  exports.lowerFirst = lowerFirst;
60
+ /**
61
+ * ```js
62
+ * let arr = [
63
+ * { name: 'iphone', isRocket: false },
64
+ * { name: 'starship', isRocket: true }
65
+ * ]
66
+ * arr = arr.sort(makeFirst(el => el.isRocket))
67
+ * isEqual(arr, [
68
+ * { name: 'starship', isRocket: true },
69
+ * { name: 'iphone', isRocket: false }
70
+ * ])
71
+ * ```
72
+ */
30
73
  function makeFirst(getValue) {
31
74
  return (element1, element2) => {
32
75
  const val1 = getValue(element1);
@@ -46,6 +89,19 @@ function makeFirst(getValue) {
46
89
  };
47
90
  }
48
91
  exports.makeFirst = makeFirst;
92
+ /**
93
+ * ```js
94
+ * let arr = [
95
+ * { name: 'starship', isRocket: true },
96
+ * { name: 'iphone', isRocket: false }
97
+ * ]
98
+ * arr = arr.sort(makeLast(el => el.isRocket))
99
+ * isEqual(arr, [
100
+ * { name: 'iphone', isRocket: false },
101
+ * { name: 'starship', isRocket: true }
102
+ * ])
103
+ * ```
104
+ */
49
105
  function makeLast(getValue) {
50
106
  return makeFirst((element) => {
51
107
  const val = getValue(element);
@@ -58,3 +114,8 @@ function makeLast(getValue) {
58
114
  });
59
115
  }
60
116
  exports.makeLast = makeLast;
117
+ /** Reverse order result. */
118
+ function reverse(sortKey) {
119
+ return (-1 * sortKey);
120
+ }
121
+ exports.reverse = reverse;
@@ -1,6 +1,6 @@
1
1
  export { navigate, reload } from './navigate.js';
2
2
  export { prefetch } from './prefetch.js';
3
- export { PROJECT_VERSION } from './utils.js';
3
+ export { PROJECT_VERSION as version } from './utils.js';
4
4
  import type { PageContextBuiltInClientWithClientRouting } from '../../shared/types.js';
5
5
  /** @deprecated
6
6
  * Replace:
@@ -5,4 +5,4 @@
5
5
  // Use package.json#exports to make the imports isomorphic.
6
6
  export { navigate, reload } from './navigate.js';
7
7
  export { prefetch } from './prefetch.js';
8
- export { PROJECT_VERSION } from './utils.js';
8
+ export { PROJECT_VERSION as version } from './utils.js';
@@ -1,7 +1,8 @@
1
1
  import { cac } from 'cac';
2
2
  import { resolve } from 'path';
3
3
  import { runPrerenderFromCLI, runPrerender_forceExit } from '../prerender/runPrerender.js';
4
- import { projectInfo, assertUsage } from './utils.js';
4
+ import { projectInfo, assertUsage, assertWarning } from './utils.js';
5
+ import pc from '@brillout/picocolors';
5
6
  const cli = cac(projectInfo.projectName);
6
7
  cli
7
8
  .command('prerender', 'Pre-render the HTML of your pages', { allowUnknownOptions: true })
@@ -28,6 +29,7 @@ function assertOptions() {
28
29
  '--outDir',
29
30
  '--configFile'
30
31
  ].includes(option), 'Unknown option: ' + option);
32
+ assertWarning(false, `You set ${pc.cyan(option)}, but passing options to ${pc.cyan('$ vike prerender')} is deprecated: use the config file instead. See https://vike.dev/command-prerender.`, { onlyOnce: true });
31
33
  });
32
34
  }
33
35
  // Listen to unknown commands
@@ -1,4 +1,6 @@
1
1
  export { navigate };
2
2
  export { reload };
3
+ export { prefetch };
3
4
  declare const navigate: never;
4
5
  declare const reload: never;
6
+ declare const prefetch: never;
@@ -1,11 +1,13 @@
1
1
  export { navigate };
2
2
  export { reload };
3
+ export { prefetch };
3
4
  import { assertWarning } from '../../utils/assert.js';
4
5
  // `never` to ensure package.json#exports["./client/router"].types points to type defined by the client-side code
5
6
  const navigate = (() => warnNoEffect('navigate'));
6
7
  const reload = (() => warnNoEffect('reload'));
8
+ const prefetch = (() => warnNoEffect('prefetch'));
7
9
  function warnNoEffect(caller) {
8
- assertWarning(false, `Calling ${caller} on the server-side has no effect`, {
10
+ assertWarning(false, `Calling ${caller}() on the server-side has no effect`, {
9
11
  showStackTrace: true,
10
12
  onlyOnce: false
11
13
  });
@@ -5,7 +5,7 @@ import { runPrerenderFromAutoFullBuild, runPrerender_forceExit } from '../../pre
5
5
  import { getConfigVike } from '../../shared/getConfigVike.js';
6
6
  import { isViteCliCall, getViteConfigFromCli } from '../shared/isViteCliCall.js';
7
7
  import pc from '@brillout/picocolors';
8
- import { logHintForCjsEsmError } from '../../runtime/renderPage/logHintForCjsEsmError.js';
8
+ import { logErrorHint } from '../../runtime/renderPage/logErrorHint.js';
9
9
  let forceExit = false;
10
10
  function autoFullBuild() {
11
11
  let config;
@@ -82,7 +82,7 @@ async function triggerFullBuild(config, configVike, bundle) {
82
82
  }
83
83
  catch (err) {
84
84
  console.error(err);
85
- logHintForCjsEsmError(err);
85
+ logErrorHint(err);
86
86
  process.exit(1);
87
87
  }
88
88
  if (configVike.prerender && !configVike.prerender.disableAutoRun) {
@@ -0,0 +1,13 @@
1
+ export { fixServerAssets };
2
+ export { fixServerAssets_isEnabled };
3
+ import { ViteManifest } from '../../../shared/ViteManifest.js';
4
+ import { OutDirs } from '../../utils.js';
5
+ /**
6
+ * true => use workaround config.build.ssrEmitAssets
7
+ * false => use workaround extractAssets plugin
8
+ *
9
+ * Only used by V1 design.
10
+ */
11
+ declare function fixServerAssets_isEnabled(): boolean;
12
+ /** https://github.com/vikejs/vike/issues/1339 */
13
+ declare function fixServerAssets(outDirs: OutDirs): Promise<ViteManifest>;
@@ -0,0 +1,142 @@
1
+ export { fixServerAssets };
2
+ export { fixServerAssets_isEnabled };
3
+ import fs from 'fs/promises';
4
+ import path from 'path';
5
+ import { existsSync } from 'fs';
6
+ import { assert, pLimit, unique } from '../../utils.js';
7
+ import { isVirtualFileIdPageConfigValuesAll } from '../../../shared/virtual-files/virtualFilePageConfigValuesAll.js';
8
+ import { manifestTempFile } from '../buildConfig.js';
9
+ /**
10
+ * true => use workaround config.build.ssrEmitAssets
11
+ * false => use workaround extractAssets plugin
12
+ *
13
+ * Only used by V1 design.
14
+ */
15
+ function fixServerAssets_isEnabled() {
16
+ // We currently apply the workaround iff V1 design.
17
+ // Shall we allow the user to toggle between the two workarounds? E.g. based on https://vike.dev/includeAssetsImportedByServer.
18
+ return true;
19
+ }
20
+ /** https://github.com/vikejs/vike/issues/1339 */
21
+ async function fixServerAssets(outDirs) {
22
+ const clientManifest = await loadManifest(outDirs.outDirClient);
23
+ const serverManifest = await loadManifest(outDirs.outDirServer);
24
+ const { clientManifestMod, filesToCopy } = addServerAssets(clientManifest, serverManifest);
25
+ await copyAssets(filesToCopy, outDirs);
26
+ return clientManifestMod;
27
+ }
28
+ async function loadManifest(outDir) {
29
+ const manifestFilePath = path.posix.join(outDir, manifestTempFile);
30
+ const manifestFileContent = await fs.readFile(manifestFilePath, 'utf-8');
31
+ assert(manifestFileContent);
32
+ const manifest = JSON.parse(manifestFileContent);
33
+ assert(manifest);
34
+ return manifest;
35
+ }
36
+ async function copyAssets(filesToCopy, { outDirClient, outDirServer }) {
37
+ const assetsDirServer = path.posix.join(outDirServer, 'assets');
38
+ if (!filesToCopy.length)
39
+ return;
40
+ assert(existsSync(assetsDirServer));
41
+ const concurrencyLimit = pLimit(10);
42
+ await Promise.all(filesToCopy.map((file) => concurrencyLimit(() => fs.cp(path.posix.join(outDirServer, file), path.posix.join(outDirClient, file), {
43
+ recursive: true
44
+ }))));
45
+ await fs.rm(assetsDirServer, { recursive: true });
46
+ }
47
+ // Add serverManifest resources to clientManifest
48
+ function addServerAssets(clientManifest, serverManifest) {
49
+ var _a, _b;
50
+ const entriesClient = new Map();
51
+ const entriesServer = new Map();
52
+ for (const [key, entry] of Object.entries(clientManifest)) {
53
+ const pageId = getPageId(key);
54
+ if (!pageId)
55
+ continue;
56
+ const resources = collectResources(entry, clientManifest);
57
+ assert(!entriesClient.has(pageId));
58
+ entriesClient.set(pageId, { key, ...resources });
59
+ }
60
+ for (const [key, entry] of Object.entries(serverManifest)) {
61
+ const pageId = getPageId(key);
62
+ if (!pageId)
63
+ continue;
64
+ const resources = collectResources(entry, serverManifest);
65
+ assert(!entriesServer.has(pageId));
66
+ entriesServer.set(pageId, resources);
67
+ }
68
+ let filesToCopy = [];
69
+ for (const [pageId, entryClient] of entriesClient.entries()) {
70
+ const cssToAdd = [];
71
+ const assetsToAdd = [];
72
+ const entryServer = entriesServer.get(pageId);
73
+ if (entryServer) {
74
+ cssToAdd.push(...entryServer.css
75
+ .filter((cssServer) => !entryClient.css.some((cssClient) => cssServer.hash === cssClient.hash))
76
+ .map((css) => css.src));
77
+ assetsToAdd.push(...entryServer.assets
78
+ .filter((assertServer) => !entryClient.assets.some((assetClient) => assertServer.hash === assetClient.hash))
79
+ .map((asset) => asset.src));
80
+ }
81
+ const { key } = entryClient;
82
+ if (cssToAdd.length) {
83
+ filesToCopy.push(...cssToAdd);
84
+ (_a = clientManifest[key]).css ?? (_a.css = []);
85
+ clientManifest[key].css?.push(...cssToAdd);
86
+ }
87
+ if (assetsToAdd.length) {
88
+ filesToCopy.push(...assetsToAdd);
89
+ (_b = clientManifest[key]).assets ?? (_b.assets = []);
90
+ clientManifest[key].assets?.push(...assetsToAdd);
91
+ }
92
+ }
93
+ const clientManifestMod = clientManifest;
94
+ filesToCopy = unique(filesToCopy);
95
+ return { clientManifestMod, filesToCopy };
96
+ }
97
+ function getPageId(key) {
98
+ // Normalize from:
99
+ // ../../virtual:vike:pageConfigValuesAll:client:/pages/index
100
+ // to:
101
+ // virtual:vike:pageConfigValuesAll:client:/pages/index
102
+ // (This seems to be needed only for vitest tests that use Vite's build() API with an inline config.)
103
+ key = key.substring(key.indexOf('virtual:vike'));
104
+ const result = isVirtualFileIdPageConfigValuesAll(key);
105
+ return result && result.pageId;
106
+ }
107
+ function collectResources(entryRoot, manifest) {
108
+ const css = [];
109
+ const assets = [];
110
+ const entries = new Set([entryRoot]);
111
+ for (const entry of entries) {
112
+ for (const entryImport of entry.imports ?? []) {
113
+ entries.add(manifest[entryImport]);
114
+ }
115
+ const entryCss = entry.css ?? [];
116
+ if (entry.file.endsWith('.css'))
117
+ entryCss.push(entry.file);
118
+ for (const src of entryCss) {
119
+ const hash = getHash(src);
120
+ css.push({ src, hash });
121
+ }
122
+ const entryAssets = entry.assets ?? [];
123
+ for (const src of entryAssets) {
124
+ const hash = getHash(src);
125
+ assets.push({ src, hash });
126
+ }
127
+ }
128
+ return { css, assets };
129
+ }
130
+ // Use the hash of resources to determine whether they are equal. We need this, otherwise we get:
131
+ // ```html
132
+ // <head>
133
+ // <link rel="stylesheet" type="text/css" href="/assets/static/onRenderClient.2j6TxKIB.css">
134
+ // <link rel="stylesheet" type="text/css" href="/assets/static/onRenderHtml.2j6TxKIB.css">
135
+ // </head>
136
+ // ```
137
+ function getHash(src) {
138
+ // src is guarenteed to end with `.[hash][extname]`, see distFileNames.ts
139
+ const hash = src.split('.').at(-2);
140
+ assert(hash);
141
+ return hash;
142
+ }
@@ -1,8 +1,10 @@
1
1
  export { buildConfig };
2
2
  export { assertRollupInput };
3
3
  export { analyzeClientEntries };
4
+ export { manifestTempFile };
4
5
  import type { ResolvedConfig, Plugin } from 'vite';
5
6
  import type { PageConfigBuildTime } from '../../../shared/page-configs/PageConfig.js';
7
+ declare const manifestTempFile = "_temp_manifest.json";
6
8
  declare function buildConfig(): Plugin;
7
9
  declare function analyzeClientEntries(pageConfigs: PageConfigBuildTime[], config: ResolvedConfig): {
8
10
  hasClientRouting: boolean;