vike 0.4.210 → 0.4.211-commit-be2fe23

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 (45) hide show
  1. package/dist/cjs/node/plugin/plugins/buildConfig/fixServerAssets.js +81 -26
  2. package/dist/cjs/node/plugin/plugins/buildConfig.js +1 -1
  3. package/dist/cjs/node/plugin/plugins/commonConfig.js +13 -7
  4. package/dist/cjs/node/plugin/plugins/config/index.js +9 -3
  5. package/dist/cjs/node/plugin/plugins/devConfig/index.js +14 -6
  6. package/dist/cjs/node/plugin/plugins/importUserCode/index.js +1 -1
  7. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +3 -3
  8. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.js +38 -11
  9. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +20 -35
  10. package/dist/cjs/node/plugin/plugins/previewConfig.js +5 -4
  11. package/dist/cjs/node/plugin/plugins/setGlobalContext.js +1 -1
  12. package/dist/cjs/node/plugin/utils.js +1 -0
  13. package/dist/cjs/node/runtime/renderPage/getPageAssets/retrieveAssetsDev.js +7 -7
  14. package/dist/cjs/node/runtime/renderPage/logErrorHint.js +11 -7
  15. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  16. package/dist/cjs/utils/assertVersion.js +2 -0
  17. package/dist/cjs/utils/isDev.js +11 -16
  18. package/dist/cjs/utils/isDocker.js +45 -0
  19. package/dist/esm/node/plugin/plugins/buildConfig/fixServerAssets.d.ts +4 -1
  20. package/dist/esm/node/plugin/plugins/buildConfig/fixServerAssets.js +79 -24
  21. package/dist/esm/node/plugin/plugins/buildConfig.js +1 -1
  22. package/dist/esm/node/plugin/plugins/commonConfig.js +14 -8
  23. package/dist/esm/node/plugin/plugins/config/index.js +10 -4
  24. package/dist/esm/node/plugin/plugins/devConfig/index.d.ts +3 -1
  25. package/dist/esm/node/plugin/plugins/devConfig/index.js +12 -7
  26. package/dist/esm/node/plugin/plugins/importUserCode/index.js +2 -2
  27. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +3 -3
  28. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.d.ts +11 -1
  29. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.js +39 -12
  30. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +21 -36
  31. package/dist/esm/node/plugin/plugins/previewConfig.js +6 -5
  32. package/dist/esm/node/plugin/plugins/setGlobalContext.js +2 -2
  33. package/dist/esm/node/plugin/utils.d.ts +1 -0
  34. package/dist/esm/node/plugin/utils.js +1 -0
  35. package/dist/esm/node/runtime/renderPage/getPageAssets/retrieveAssetsDev.js +7 -7
  36. package/dist/esm/node/runtime/renderPage/logErrorHint.js +11 -7
  37. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  38. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  39. package/dist/esm/utils/assertVersion.js +2 -0
  40. package/dist/esm/utils/isDev.d.ts +6 -5
  41. package/dist/esm/utils/isDev.js +11 -16
  42. package/dist/esm/utils/isDocker.d.ts +2 -0
  43. package/dist/esm/utils/isDocker.js +40 -0
  44. package/dist/esm/utils/projectInfo.d.ts +1 -1
  45. package/package.json +2 -2
@@ -9,8 +9,9 @@ exports.fixServerAssets_assertCssCodeSplit = fixServerAssets_assertCssCodeSplit;
9
9
  exports.fixServerAssets_assertCssTarget = fixServerAssets_assertCssTarget;
10
10
  exports.fixServerAssets_assertCssTarget_populate = fixServerAssets_assertCssTarget_populate;
11
11
  const promises_1 = __importDefault(require("fs/promises"));
12
+ const fs_1 = __importDefault(require("fs"));
12
13
  const path_1 = __importDefault(require("path"));
13
- const fs_1 = require("fs");
14
+ const fs_2 = require("fs");
14
15
  const utils_js_1 = require("../../utils.js");
15
16
  const virtualFilePageConfigValuesAll_js_1 = require("../../../shared/virtual-files/virtualFilePageConfigValuesAll.js");
16
17
  const buildConfig_js_1 = require("../buildConfig.js");
@@ -33,9 +34,9 @@ async function fixServerAssets(config) {
33
34
  const outDirs = (0, utils_js_1.getOutDirs)(config);
34
35
  const clientManifest = await loadManifest(outDirs.outDirClient);
35
36
  const serverManifest = await loadManifest(outDirs.outDirServer);
36
- const { clientManifestMod, filesToCopy } = addServerAssets(clientManifest, serverManifest);
37
- await copyAssets(filesToCopy, config);
38
- return clientManifestMod;
37
+ const { clientManifestMod, serverManifestMod, filesToCopy, filesToRemove } = addServerAssets(clientManifest, serverManifest);
38
+ await copyAssets(filesToCopy, filesToRemove, config);
39
+ return { clientManifestMod, serverManifestMod };
39
40
  }
40
41
  async function loadManifest(outDir) {
41
42
  const manifestFilePath = path_1.default.posix.join(outDir, buildConfig_js_1.manifestTempFile);
@@ -45,26 +46,32 @@ async function loadManifest(outDir) {
45
46
  (0, utils_js_1.assert)(manifest);
46
47
  return manifest;
47
48
  }
48
- async function copyAssets(filesToCopy, config) {
49
+ async function copyAssets(filesToCopy, filesToRemove, config) {
49
50
  const { outDirClient, outDirServer } = (0, utils_js_1.getOutDirs)(config);
50
51
  const assetsDir = (0, getAssetsDir_js_1.getAssetsDir)(config);
51
52
  const assetsDirServer = path_1.default.posix.join(outDirServer, assetsDir);
52
- if (!filesToCopy.length)
53
+ if (!filesToCopy.length && !filesToRemove.length && !(0, fs_2.existsSync)(assetsDirServer))
53
54
  return;
54
- (0, utils_js_1.assert)((0, fs_1.existsSync)(assetsDirServer));
55
+ (0, utils_js_1.assert)((0, fs_2.existsSync)(assetsDirServer));
55
56
  const concurrencyLimit = (0, utils_js_1.pLimit)(10);
56
- await Promise.all(filesToCopy.map((file) => concurrencyLimit(() =>
57
- // TODO: move instead of copying
58
- promises_1.default.cp(path_1.default.posix.join(outDirServer, file), path_1.default.posix.join(outDirClient, file), {
59
- recursive: true
60
- }))));
57
+ await Promise.all(filesToCopy.map((file) => concurrencyLimit(async () => {
58
+ const source = path_1.default.posix.join(outDirServer, file);
59
+ const target = path_1.default.posix.join(outDirClient, file);
60
+ await promises_1.default.mkdir(path_1.default.posix.dirname(target), { recursive: true });
61
+ await promises_1.default.rename(source, target);
62
+ })));
63
+ filesToRemove.forEach((file) => {
64
+ const filePath = path_1.default.posix.join(outDirServer, file);
65
+ fs_1.default.unlinkSync(filePath);
66
+ });
61
67
  /* We cannot do that because, with some edge case Rollup settings (outputing JavaScript chunks and static assets to the same directoy), this removes JavaScript chunks, see https://github.com/vikejs/vike/issues/1154#issuecomment-1975762404
62
68
  await fs.rm(assetsDirServer, { recursive: true })
63
69
  */
70
+ removeEmptyDirectories(assetsDirServer);
64
71
  }
65
72
  // Add serverManifest resources to clientManifest
66
73
  function addServerAssets(clientManifest, serverManifest) {
67
- var _a, _b;
74
+ var _a, _b, _c, _d;
68
75
  const entriesClient = new Map();
69
76
  const entriesServer = new Map();
70
77
  for (const [key, entry] of Object.entries(clientManifest)) {
@@ -81,36 +88,64 @@ function addServerAssets(clientManifest, serverManifest) {
81
88
  continue;
82
89
  const resources = collectResources(entry, serverManifest);
83
90
  (0, utils_js_1.assert)(!entriesServer.has(pageId));
84
- entriesServer.set(pageId, resources);
91
+ entriesServer.set(pageId, { key, ...resources });
85
92
  }
86
93
  let filesToCopy = [];
94
+ let filesToRemove = [];
87
95
  for (const [pageId, entryClient] of entriesClient.entries()) {
96
+ const entryServer = entriesServer.get(pageId);
97
+ if (!entryServer)
98
+ continue;
88
99
  const cssToAdd = [];
100
+ const cssToRemove = [];
89
101
  const assetsToAdd = [];
90
- const entryServer = entriesServer.get(pageId);
91
- if (entryServer) {
92
- cssToAdd.push(...entryServer.css
93
- .filter((cssServer) => !entryClient.css.some((cssClient) => cssServer.hash === cssClient.hash))
94
- .map((css) => css.src));
95
- assetsToAdd.push(...entryServer.assets
96
- .filter((assertServer) => !entryClient.assets.some((assetClient) => assertServer.hash === assetClient.hash))
97
- .map((asset) => asset.src));
98
- }
99
- const { key } = entryClient;
102
+ const assetsToRemove = [];
103
+ entryServer.css.forEach((cssServer) => {
104
+ if (!entryClient.css.some((cssClient) => cssServer.hash === cssClient.hash)) {
105
+ cssToAdd.push(cssServer.src);
106
+ }
107
+ else {
108
+ cssToRemove.push(cssServer.src);
109
+ }
110
+ });
111
+ entryServer.assets.forEach((assetServer) => {
112
+ if (!entryClient.assets.some((assetClient) => assetServer.hash === assetClient.hash)) {
113
+ assetsToAdd.push(assetServer.src);
114
+ }
115
+ else {
116
+ assetsToRemove.push(assetServer.src);
117
+ }
118
+ });
100
119
  if (cssToAdd.length) {
120
+ const { key } = entryClient;
101
121
  filesToCopy.push(...cssToAdd);
102
122
  (_a = clientManifest[key]).css ?? (_a.css = []);
103
123
  clientManifest[key].css?.push(...cssToAdd);
104
124
  }
125
+ if (cssToRemove.length) {
126
+ const { key } = entryServer;
127
+ filesToRemove.push(...cssToRemove);
128
+ (_b = serverManifest[key]).css ?? (_b.css = []);
129
+ serverManifest[key].css = serverManifest[key].css.filter((entry) => !cssToRemove.includes(entry));
130
+ }
105
131
  if (assetsToAdd.length) {
132
+ const { key } = entryClient;
106
133
  filesToCopy.push(...assetsToAdd);
107
- (_b = clientManifest[key]).assets ?? (_b.assets = []);
134
+ (_c = clientManifest[key]).assets ?? (_c.assets = []);
108
135
  clientManifest[key].assets?.push(...assetsToAdd);
109
136
  }
137
+ if (assetsToRemove.length) {
138
+ const { key } = entryServer;
139
+ filesToRemove.push(...assetsToRemove);
140
+ (_d = serverManifest[key]).assets ?? (_d.assets = []);
141
+ serverManifest[key].assets = serverManifest[key].assets.filter((entry) => !assetsToRemove.includes(entry));
142
+ }
110
143
  }
111
144
  const clientManifestMod = clientManifest;
145
+ const serverManifestMod = serverManifest;
112
146
  filesToCopy = (0, utils_js_1.unique)(filesToCopy);
113
- return { clientManifestMod, filesToCopy };
147
+ filesToRemove = (0, utils_js_1.unique)(filesToRemove).filter((file) => !filesToCopy.includes(file));
148
+ return { clientManifestMod, serverManifestMod, filesToCopy, filesToRemove };
114
149
  }
115
150
  function getPageId(key) {
116
151
  // Normalize from:
@@ -194,3 +229,23 @@ async function fixServerAssets_assertCssTarget(config) {
194
229
  function resolveCssTarget(target) {
195
230
  return target.css ?? target.global;
196
231
  }
232
+ /**
233
+ * Recursively remove all empty directories in a given directory.
234
+ */
235
+ function removeEmptyDirectories(dirPath) {
236
+ // Read the directory contents
237
+ const files = fs_1.default.readdirSync(dirPath);
238
+ // Iterate through the files and subdirectories
239
+ for (const file of files) {
240
+ const fullPath = path_1.default.join(dirPath, file);
241
+ // Check if it's a directory
242
+ if (fs_1.default.statSync(fullPath).isDirectory()) {
243
+ // Recursively clean up the subdirectory
244
+ removeEmptyDirectories(fullPath);
245
+ }
246
+ }
247
+ // Re-check the directory; remove it if it's now empty
248
+ if (fs_1.default.readdirSync(dirPath).length === 0) {
249
+ fs_1.default.rmdirSync(dirPath);
250
+ }
251
+ }
@@ -100,7 +100,7 @@ function buildConfig() {
100
100
  await promises_1.default.copyFile(clientManifestFilePath, assetsJsonFilePath);
101
101
  }
102
102
  else {
103
- const clientManifestMod = await (0, fixServerAssets_js_1.fixServerAssets)(config);
103
+ const { clientManifestMod } = await (0, fixServerAssets_js_1.fixServerAssets)(config);
104
104
  await promises_1.default.writeFile(assetsJsonFilePath, JSON.stringify(clientManifestMod, null, 2), 'utf-8');
105
105
  }
106
106
  await promises_1.default.rm(clientManifestFilePath);
@@ -38,18 +38,24 @@ function commonConfig() {
38
38
  // Override Vite's default port without overriding the user
39
39
  config: {
40
40
  order: 'post',
41
- handler(config) {
42
- const configMod = {};
43
- if (config.server?.port === undefined)
44
- configMod.server = { port: 3000 };
45
- if (config.preview?.port === undefined)
46
- configMod.preview = { port: 3000 };
47
- return configMod;
41
+ handler(configFromUser) {
42
+ const configFromVike = { server: {}, preview: {} };
43
+ setDefault('port', 3000, configFromUser, configFromVike);
44
+ if ((0, utils_js_1.isDocker)()) {
45
+ setDefault('host', true, configFromUser, configFromVike);
46
+ }
47
+ return configFromVike;
48
48
  }
49
49
  }
50
50
  }
51
51
  ];
52
52
  }
53
+ function setDefault(setting, value, configFromUser, configFromVike) {
54
+ if (configFromUser.server?.[setting] === undefined)
55
+ configFromVike.server[setting] = value;
56
+ if (configFromUser.preview?.[setting] === undefined)
57
+ configFromVike.preview[setting] = value;
58
+ }
53
59
  /*
54
60
  import { version } from 'vite'
55
61
  function overrideViteDefaultSsrExternal(config: ResolvedConfig) {
@@ -11,17 +11,23 @@ const resolveBase_js_1 = require("./resolveBase.js");
11
11
  const getVikeConfig_js_1 = require("../importUserCode/v1-design/getVikeConfig.js");
12
12
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
13
13
  function resolveVikeConfig(vikeConfig) {
14
+ let isDev;
14
15
  return {
15
16
  name: 'vike:resolveVikeConfig',
16
17
  enforce: 'pre',
18
+ apply(_config, env) {
19
+ isDev = (0, utils_js_1.isDevCheck)(env);
20
+ return true;
21
+ },
17
22
  async configResolved(config) {
18
- const promise = getConfigVikPromise(vikeConfig, config);
23
+ (0, utils_js_1.assert)(typeof isDev === 'boolean');
24
+ const promise = getConfigVikPromise(vikeConfig, config, isDev);
19
25
  config.configVikePromise = promise;
20
26
  await promise;
21
27
  }
22
28
  };
23
29
  }
24
- async function getConfigVikPromise(vikeConfig, config) {
30
+ async function getConfigVikPromise(vikeConfig, config, isDev) {
25
31
  const fromPluginOptions = (vikeConfig ?? {});
26
32
  const fromViteConfig = (config.vike ?? {});
27
33
  const configs = [fromPluginOptions, fromViteConfig];
@@ -29,7 +35,7 @@ async function getConfigVikPromise(vikeConfig, config) {
29
35
  // TODO/v1-release: deprecate this
30
36
  (0, assertVikeConfig_js_1.assertVikeConfig)(fromPluginOptions, ({ prop, errMsg }) => `vite.config.js > vike option ${prop} ${errMsg}`);
31
37
  const crawlWithGit = fromPluginOptions.crawl?.git ?? null;
32
- const { globalVikeConfig: fromPlusConfigFile } = await (0, getVikeConfig_js_1.getVikeConfig)(config, (0, utils_js_1.isDev2)(config), { crawlWithGit });
38
+ const { globalVikeConfig: fromPlusConfigFile } = await (0, getVikeConfig_js_1.getVikeConfig)(config, isDev, { crawlWithGit });
33
39
  configs.push(fromPlusConfigFile);
34
40
  (0, assertVikeConfig_js_1.assertVikeConfig)(fromPlusConfigFile, ({ prop, errMsg }) => {
35
41
  // TODO: add config file path ?
@@ -1,6 +1,10 @@
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
6
  exports.devConfig = devConfig;
7
+ exports.logDockerHint = logDockerHint;
4
8
  const determineOptimizeDeps_js_1 = require("./determineOptimizeDeps.js");
5
9
  const determineFsAllowList_js_1 = require("./determineFsAllowList.js");
6
10
  const addSsrMiddleware_js_1 = require("../../shared/addSsrMiddleware.js");
@@ -8,18 +12,16 @@ const utils_js_1 = require("../../utils.js");
8
12
  const loggerVite_js_1 = require("../../shared/loggerVite.js");
9
13
  const isErrorDebug_js_1 = require("../../../shared/isErrorDebug.js");
10
14
  const getHttpRequestAsyncStore_js_1 = require("../../shared/getHttpRequestAsyncStore.js");
15
+ const picocolors_1 = __importDefault(require("@brillout/picocolors"));
11
16
  if ((0, isErrorDebug_js_1.isErrorDebug)()) {
12
17
  Error.stackTraceLimit = Infinity;
13
18
  }
14
- // There doesn't seem to be a straightforward way to discriminate between `$ vite preview` and `$ vite dev`
15
- const apply = 'serve';
16
- const isDev = true;
17
19
  function devConfig() {
18
20
  let config;
19
21
  return [
20
22
  {
21
23
  name: 'vike:devConfig',
22
- apply,
24
+ apply: utils_js_1.applyDev,
23
25
  config() {
24
26
  return {
25
27
  appType: 'custom',
@@ -61,12 +63,13 @@ function devConfig() {
61
63
  },
62
64
  async configResolved(config_) {
63
65
  config = config_;
64
- await (0, determineOptimizeDeps_js_1.determineOptimizeDeps)(config, isDev);
66
+ await (0, determineOptimizeDeps_js_1.determineOptimizeDeps)(config, true);
65
67
  await (0, determineFsAllowList_js_1.determineFsAllowList)(config);
66
68
  if (!(0, isErrorDebug_js_1.isErrorDebug)()) {
67
69
  await (0, getHttpRequestAsyncStore_js_1.installHttpRequestAsyncStore)();
68
70
  (0, loggerVite_js_1.improveViteLogs)(config);
69
71
  }
72
+ logDockerHint(config.server.host);
70
73
  },
71
74
  configureServer() {
72
75
  (0, utils_js_1.markEnvAsViteDev)();
@@ -74,7 +77,7 @@ function devConfig() {
74
77
  },
75
78
  {
76
79
  name: 'vike:devConfig:addSsrMiddleware',
77
- apply,
80
+ apply: utils_js_1.applyDev,
78
81
  // The SSR middleware should be last middleware
79
82
  enforce: 'post',
80
83
  configureServer: {
@@ -100,3 +103,8 @@ function devConfig() {
100
103
  }
101
104
  ];
102
105
  }
106
+ function logDockerHint(configHost) {
107
+ if ((0, utils_js_1.isDocker)()) {
108
+ (0, utils_js_1.assertWarning)(configHost, `Your app seems to be running inside a Docker or Podman container but ${picocolors_1.default.cyan('--host')} isn't set which means that your Vike app won't be accessible from outside the container, see https://vike.dev/docker`, { onlyOnce: true });
109
+ }
110
+ }
@@ -23,7 +23,7 @@ function importUserCode() {
23
23
  return {
24
24
  name: 'vike:importUserCode',
25
25
  config(_, env) {
26
- isDev = (0, utils_js_1.isDev3)(env);
26
+ isDev = (0, utils_js_1.isDevCheck)(env);
27
27
  },
28
28
  async configResolved(config_) {
29
29
  configVike = await (0, getConfigVike_js_1.getConfigVike)(config_);
@@ -67,11 +67,11 @@ async function loadExtendsConfigs(configFileExports, configFilePath, userRootDir
67
67
  (0, utils_js_1.assert)(filePath.filePathAbsoluteFilesystem);
68
68
  extendsConfigFiles.push(filePath);
69
69
  });
70
- await Promise.all(extendsConfigFiles.map(async (configFilePath) => {
71
- const result = await loadConfigFile(configFilePath, userRootDir, visited, true);
70
+ const results = await Promise.all(extendsConfigFiles.map(async (configFilePath) => await loadConfigFile(configFilePath, userRootDir, visited, true)));
71
+ results.forEach((result) => {
72
72
  extendsConfigs.push(result.configFile);
73
73
  extendsConfigs.push(...result.extendsConfigs);
74
- }));
74
+ });
75
75
  const extendsFilePaths = extendsConfigFiles.map((f) => f.filePathAbsoluteFilesystem);
76
76
  return { extendsConfigs, extendsFilePaths };
77
77
  }
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.resolvePointerImportOfConfig = resolvePointerImportOfConfig;
7
7
  exports.resolvePointerImport = resolvePointerImport;
8
8
  exports.clearFilesEnvMap = clearFilesEnvMap;
9
+ exports.resolveConfigEnvWithFileName = resolveConfigEnvWithFileName;
9
10
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
10
11
  const utils_js_1 = require("../../../../utils.js");
11
12
  const transformPointerImports_js_1 = require("./transformPointerImports.js");
@@ -21,12 +22,16 @@ function resolvePointerImportOfConfig(configValue, importerFilePath, userRootDir
21
22
  const { importPath, exportName } = pointerImportData;
22
23
  const filePath = resolvePointerImport(pointerImportData, importerFilePath, userRootDir);
23
24
  const fileExportPathToShowToUser = exportName === 'default' || exportName === configName ? [] : [exportName];
24
- assertUsageFileEnv(filePath.filePathAbsoluteFilesystem, importPath, configEnv, configName);
25
- return {
25
+ let configEnvResolved = configEnv;
26
+ if (filePath.filePathAbsoluteFilesystem)
27
+ configEnvResolved = resolveConfigEnvWithFileName(configEnv, filePath);
28
+ assertUsageFileEnv(filePath, importPath, configEnvResolved, configName);
29
+ const pointerImport = {
26
30
  ...filePath,
27
31
  fileExportName: exportName,
28
32
  fileExportPathToShowToUser
29
33
  };
34
+ return { pointerImport, configEnvResolved };
30
35
  }
31
36
  function resolvePointerImport(pointerImportData, importerFilePath, userRootDir) {
32
37
  // `importPath` should be one of the following:
@@ -39,7 +44,7 @@ function resolvePointerImport(pointerImportData, importerFilePath, userRootDir)
39
44
  (0, utils_js_1.assertPosixPath)(importPath);
40
45
  if (importPath.startsWith('.') || (0, utils_js_1.isFilePathAbsolute)(importPath)) {
41
46
  if (importPath.startsWith('.')) {
42
- (0, utils_js_1.assertUsage)(importPath.startsWith('./') || importPath.startsWith('../'), `Invalid relative import path ${picocolors_1.default.code(importPath)} defined by ${importerFilePath.filePathToShowToUser} because it should start with ${picocolors_1.default.code('./')} or ${picocolors_1.default.code('../')}, or use an npm package import instead.`);
47
+ (0, utils_js_1.assertUsage)(isRelativeImportPath(importPath), `Invalid relative import path ${picocolors_1.default.code(importPath)} defined by ${importerFilePath.filePathToShowToUser} because it should start with ${picocolors_1.default.code('./')} or ${picocolors_1.default.code('../')}, or use an npm package import instead.`);
43
48
  }
44
49
  // Pointer imports are included in virtual files, thus relative imports need to be resolved. (Virtual modules cannot contain relative imports.)
45
50
  assertUsageResolutionSuccess(filePathAbsoluteFilesystem, pointerImportData, importerFilePath);
@@ -67,6 +72,7 @@ function resolvePointerImport(pointerImportData, importerFilePath, userRootDir)
67
72
  });
68
73
  }
69
74
  else {
75
+ // We cannot resolve path aliases defined only in Vite
70
76
  filePath = (0, getFilePath_js_1.getFilePathUnresolved)({
71
77
  importPathAbsolute
72
78
  });
@@ -94,7 +100,7 @@ function assertUsageResolutionSuccess(filePathAbsoluteFilesystem, pointerImportD
94
100
  : `The import ${picocolors_1.default.code(importString)} defined by ${filePathToShowToUser}`;
95
101
  const errIntro2 = `${errIntro} couldn't be resolved: does ${importPathString}`;
96
102
  if (importPath.startsWith('.')) {
97
- (0, utils_js_1.assert)(importPath.startsWith('./') || importPath.startsWith('../'));
103
+ (0, utils_js_1.assert)(isRelativeImportPath(importPath));
98
104
  (0, utils_js_1.assertUsage)(false, `${errIntro2} point to an existing file?`);
99
105
  }
100
106
  else {
@@ -102,13 +108,14 @@ function assertUsageResolutionSuccess(filePathAbsoluteFilesystem, pointerImportD
102
108
  }
103
109
  }
104
110
  }
105
- function assertUsageFileEnv(filePathAbsoluteFilesystem, importPath, configEnv, configName) {
111
+ function assertUsageFileEnv(filePath, importPath, configEnvResolved, configName) {
106
112
  let key;
107
- if (filePathAbsoluteFilesystem) {
108
- key = filePathAbsoluteFilesystem;
113
+ if (filePath.filePathAbsoluteFilesystem) {
114
+ key = filePath.filePathAbsoluteFilesystem;
109
115
  }
110
116
  else {
111
- (0, utils_js_1.assertIsNpmPackageImport)(importPath);
117
+ // Path alias
118
+ (0, utils_js_1.assert)(!isRelativeImportPath(importPath));
112
119
  key = importPath;
113
120
  }
114
121
  (0, utils_js_1.assertPosixPath)(key);
@@ -116,12 +123,12 @@ function assertUsageFileEnv(filePathAbsoluteFilesystem, importPath, configEnv, c
116
123
  filesEnvMap.set(key, []);
117
124
  }
118
125
  const fileEnv = filesEnvMap.get(key);
119
- fileEnv.push({ configEnv, configName });
120
- const configDifferentEnv = fileEnv.filter((c) => !(0, utils_js_1.deepEqual)(c.configEnv, configEnv))[0];
126
+ fileEnv.push({ configEnvResolved, configName });
127
+ const configDifferentEnv = fileEnv.filter((c) => !(0, utils_js_1.deepEqual)(c.configEnvResolved, configEnvResolved))[0];
121
128
  if (configDifferentEnv) {
122
129
  (0, utils_js_1.assertUsage)(false, [
123
130
  `${key} defines the value of configs living in different environments:`,
124
- ...[configDifferentEnv, { configName, configEnv }].map((c) => ` - config ${picocolors_1.default.code(c.configName)} which value lives in environment ${picocolors_1.default.code(JSON.stringify(c.configEnv))}`),
131
+ ...[configDifferentEnv, { configName, configEnvResolved }].map((c) => ` - config ${picocolors_1.default.code(c.configName)} which value lives in environment ${picocolors_1.default.code(JSON.stringify(c.configEnvResolved))}`),
125
132
  'Defining config values in the same file is allowed only if they live in the same environment, see https://vike.dev/config#pointer-imports'
126
133
  ].join('\n'));
127
134
  }
@@ -129,3 +136,23 @@ function assertUsageFileEnv(filePathAbsoluteFilesystem, importPath, configEnv, c
129
136
  function clearFilesEnvMap() {
130
137
  filesEnvMap.clear();
131
138
  }
139
+ function resolveConfigEnvWithFileName(configEnv, filePath) {
140
+ const { fileName } = filePath;
141
+ const configEnvResolved = { ...configEnv };
142
+ if (fileName.includes('.server.')) {
143
+ configEnvResolved.server = true;
144
+ configEnvResolved.client = false;
145
+ }
146
+ else if (fileName.includes('.client.')) {
147
+ configEnvResolved.client = true;
148
+ configEnvResolved.server = false;
149
+ }
150
+ else if (fileName.includes('.shared.')) {
151
+ configEnvResolved.server = true;
152
+ configEnvResolved.client = true;
153
+ }
154
+ return configEnvResolved;
155
+ }
156
+ function isRelativeImportPath(importPath) {
157
+ return importPath.startsWith('./') || importPath.startsWith('../');
158
+ }
@@ -243,7 +243,7 @@ async function loadVikeConfig(userRootDir, outDirRoot, isDev, crawlWithGit) {
243
243
  const importedFilesLoaded = {};
244
244
  const { globalVikeConfig, pageConfigGlobal } = await getGlobalConfigs(interfaceFilesByLocationId, userRootDir, importedFilesLoaded);
245
245
  const pageConfigs = await Promise.all((0, utils_js_1.objectEntries)(interfaceFilesByLocationId)
246
- .filter(([pageId, interfaceFiles]) => isDefiningPage(interfaceFiles))
246
+ .filter(([_pageId, interfaceFiles]) => isDefiningPage(interfaceFiles))
247
247
  .map(async ([locationId]) => {
248
248
  const interfaceFilesRelevant = getInterfaceFilesRelevant(interfaceFilesByLocationId, locationId);
249
249
  const interfaceFilesRelevantList = Object.values(interfaceFilesRelevant).flat(1);
@@ -339,22 +339,6 @@ function assertUsageGlobalConfigs(interfaceFilesRelevantList, configDefinitions,
339
339
  });
340
340
  });
341
341
  }
342
- function deriveConfigEnvFromFileName(env, fileName) {
343
- env = { ...env };
344
- if (fileName.includes('.server.')) {
345
- env.server = true;
346
- env.client = false;
347
- }
348
- else if (fileName.includes('.client.')) {
349
- env.client = true;
350
- env.server = false;
351
- }
352
- else if (fileName.includes('.shared.')) {
353
- env.server = true;
354
- env.client = true;
355
- }
356
- return env;
357
- }
358
342
  function assertPageConfigs(pageConfigs) {
359
343
  pageConfigs.forEach((pageConfig) => {
360
344
  assertOnBeforeRenderEnv(pageConfig);
@@ -535,7 +519,6 @@ function isInterfaceFileUserLand(interfaceFile) {
535
519
  async function getConfigValueSource(configName, interfaceFile, configDef, userRootDir, importedFilesLoaded, isHighestInheritancePrecedence) {
536
520
  const conf = interfaceFile.fileExportsByConfigName[configName];
537
521
  (0, utils_js_1.assert)(conf);
538
- const configEnv = deriveConfigEnvFromFileName(configDef.env, interfaceFile.filePath.fileName);
539
522
  const { locationId } = interfaceFile;
540
523
  const definedAtFilePath_ = {
541
524
  ...interfaceFile.filePath,
@@ -547,14 +530,15 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
547
530
  let definedAtFilePath;
548
531
  let valueFilePath;
549
532
  if (interfaceFile.isConfigFile) {
550
- const { configValue } = conf;
551
- const pointerImport = (0, resolvePointerImport_js_1.resolvePointerImportOfConfig)(configValue, interfaceFile.filePath, userRootDir, configEnv, configName);
533
+ // Defined over pointer import
534
+ const resolved = (0, resolvePointerImport_js_1.resolvePointerImportOfConfig)(conf.configValue, interfaceFile.filePath, userRootDir, configDef.env, configName);
552
535
  const configDefinedAt = (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configName, definedAtFilePath_);
553
- (0, utils_js_1.assertUsage)(pointerImport, `${configDefinedAt} should be an import`);
554
- valueFilePath = pointerImport.filePathAbsoluteVite;
555
- definedAtFilePath = pointerImport;
536
+ (0, utils_js_1.assertUsage)(resolved, `${configDefinedAt} should be an import`);
537
+ valueFilePath = resolved.pointerImport.filePathAbsoluteVite;
538
+ definedAtFilePath = resolved.pointerImport;
556
539
  }
557
540
  else {
541
+ // Defined by value file, i.e. +{configName}.js
558
542
  (0, utils_js_1.assert)(interfaceFile.isValueFile);
559
543
  valueFilePath = interfaceFile.filePath.filePathAbsoluteVite;
560
544
  definedAtFilePath = {
@@ -566,7 +550,7 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
566
550
  locationId,
567
551
  value: valueFilePath,
568
552
  valueIsFilePath: true,
569
- configEnv,
553
+ configEnv: configDef.env,
570
554
  valueIsImportedAtRuntime: true,
571
555
  valueIsDefinedByPlusFile: false,
572
556
  isOverriden,
@@ -578,23 +562,23 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
578
562
  if (interfaceFile.isConfigFile) {
579
563
  (0, utils_js_1.assert)('configValue' in conf);
580
564
  const { configValue } = conf;
581
- // Pointer import
582
- const pointerImport = (0, resolvePointerImport_js_1.resolvePointerImportOfConfig)(configValue, interfaceFile.filePath, userRootDir, configEnv, configName);
583
- if (pointerImport) {
565
+ // Defined over pointer import
566
+ const resolved = (0, resolvePointerImport_js_1.resolvePointerImportOfConfig)(configValue, interfaceFile.filePath, userRootDir, configDef.env, configName);
567
+ if (resolved) {
584
568
  const configValueSource = {
585
569
  locationId,
586
- configEnv,
570
+ configEnv: resolved.configEnvResolved,
587
571
  valueIsImportedAtRuntime: true,
588
572
  valueIsDefinedByPlusFile: false,
589
573
  isOverriden,
590
- definedAtFilePath: pointerImport
574
+ definedAtFilePath: resolved.pointerImport
591
575
  };
592
576
  // Load pointer import
593
577
  if (isLoadableAtBuildTime(configDef) &&
594
578
  // The value of `extends` was already loaded and already used: we don't need the value of `extends` anymore
595
579
  configName !== 'extends') {
596
- if (pointerImport.filePathAbsoluteFilesystem) {
597
- const fileExport = await (0, loadFileAtConfigTime_js_1.loadImportedFile)(pointerImport, userRootDir, importedFilesLoaded);
580
+ if (resolved.pointerImport.filePathAbsoluteFilesystem) {
581
+ const fileExport = await (0, loadFileAtConfigTime_js_1.loadImportedFile)(resolved.pointerImport, userRootDir, importedFilesLoaded);
598
582
  configValueSource.value = fileExport;
599
583
  }
600
584
  else {
@@ -604,11 +588,11 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
604
588
  }
605
589
  return configValueSource;
606
590
  }
607
- // Defined by config file, i.e. +config.js file
591
+ // Defined inside +config.js
608
592
  const configValueSource = {
609
593
  locationId,
610
594
  value: configValue,
611
- configEnv,
595
+ configEnv: configDef.env,
612
596
  valueIsImportedAtRuntime: false,
613
597
  valueIsDefinedByPlusFile: false,
614
598
  isOverriden,
@@ -618,11 +602,12 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
618
602
  }
619
603
  // Defined by value file, i.e. +{configName}.js
620
604
  if (interfaceFile.isValueFile) {
605
+ const configEnvResolved = (0, resolvePointerImport_js_1.resolveConfigEnvWithFileName)(configDef.env, interfaceFile.filePath);
621
606
  const valueAlreadyLoaded = 'configValue' in conf;
622
- (0, utils_js_1.assert)(valueAlreadyLoaded === !!configEnv.config);
607
+ (0, utils_js_1.assert)(valueAlreadyLoaded === !!configEnvResolved.config);
623
608
  const configValueSource = {
624
609
  locationId,
625
- configEnv,
610
+ configEnv: configEnvResolved,
626
611
  valueIsImportedAtRuntime: !valueAlreadyLoaded,
627
612
  valueIsDefinedByPlusFile: true,
628
613
  isOverriden,
@@ -5,17 +5,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.previewConfig = previewConfig;
7
7
  const utils_js_1 = require("../utils.js");
8
- const getConfigVike_js_1 = require("../../shared/getConfigVike.js");
9
8
  const fs_1 = __importDefault(require("fs"));
10
9
  const path_1 = __importDefault(require("path"));
11
10
  const addSsrMiddleware_js_1 = require("../shared/addSsrMiddleware.js");
12
11
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
12
+ const index_js_1 = require("./devConfig/index.js");
13
13
  function previewConfig() {
14
14
  let config;
15
- let configVike;
15
+ // let configVike: ConfigVikeResolved
16
16
  return {
17
17
  name: 'vike:previewConfig',
18
- apply: 'serve',
18
+ apply: utils_js_1.applyPreview,
19
19
  config(config) {
20
20
  return {
21
21
  appType: 'custom',
@@ -26,7 +26,8 @@ function previewConfig() {
26
26
  },
27
27
  async configResolved(config_) {
28
28
  config = config_;
29
- configVike = await (0, getConfigVike_js_1.getConfigVike)(config);
29
+ (0, index_js_1.logDockerHint)(config.preview.host);
30
+ // configVike = await getConfigVike(config)
30
31
  },
31
32
  configurePreviewServer(server) {
32
33
  /* - Couldn't make `appType: 'mpa'` work as of npm:@brillout/vite@5.0.0-beta.14.0426910c
@@ -15,7 +15,7 @@ function setGlobalContext() {
15
15
  },
16
16
  config: {
17
17
  handler(_, env) {
18
- const isDev = (0, utils_js_1.isDev3)(env);
18
+ const isDev = (0, utils_js_1.isDevCheck)(env);
19
19
  (0, globalContext_js_1.setGlobalContext_isDev)(isDev);
20
20
  }
21
21
  },
@@ -44,3 +44,4 @@ __exportStar(require("../../utils/isFilePathAbsoluteFilesystem.js"), exports);
44
44
  __exportStar(require("../../utils/isArray.js"), exports);
45
45
  __exportStar(require("../../utils/PROJECT_VERSION.js"), exports);
46
46
  __exportStar(require("../../utils/isEqualStringList.js"), exports);
47
+ __exportStar(require("../../utils/isDocker.js"), exports);
@@ -61,13 +61,13 @@ function collectCss(mod, styleUrls, visitedModules, importer) {
61
61
  });
62
62
  }
63
63
  function isStyle(mod) {
64
- if (utils_js_1.styleFileRE.test(mod.url) || (mod.id && /\?vue&type=style/.test(mod.id))) {
65
- // `mod.type` seems broken
66
- (0, utils_js_1.assert)(mod.type === 'js');
67
- // logModule(mod)
68
- return true;
69
- }
70
- return false;
64
+ return (
65
+ // CSS-in-JS libraries such as [wyw-in-js](https://github.com/vikejs/vike/issues/2039)
66
+ mod.type === 'css' ||
67
+ // .css, .less, ...
68
+ utils_js_1.styleFileRE.test(mod.url) ||
69
+ // CSS of .vue files
70
+ (mod.id && /\?vue&type=style/.test(mod.id)));
71
71
  }
72
72
  /*
73
73
  function logModule(mod: ModuleNode) {