vike 0.4.211 → 0.4.212

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.
@@ -34,9 +34,9 @@ async function fixServerAssets(config) {
34
34
  const outDirs = (0, utils_js_1.getOutDirs)(config);
35
35
  const clientManifest = await loadManifest(outDirs.outDirClient);
36
36
  const serverManifest = await loadManifest(outDirs.outDirServer);
37
- const { clientManifestMod, filesToCopy } = addServerAssets(clientManifest, serverManifest);
38
- await copyAssets(filesToCopy, config);
39
- return clientManifestMod;
37
+ const { clientManifestMod, serverManifestMod, filesToCopy, filesToRemove } = addServerAssets(clientManifest, serverManifest);
38
+ await copyAssets(filesToCopy, filesToRemove, config);
39
+ return { clientManifestMod, serverManifestMod };
40
40
  }
41
41
  async function loadManifest(outDir) {
42
42
  const manifestFilePath = path_1.default.posix.join(outDir, buildConfig_js_1.manifestTempFile);
@@ -46,11 +46,11 @@ async function loadManifest(outDir) {
46
46
  (0, utils_js_1.assert)(manifest);
47
47
  return manifest;
48
48
  }
49
- async function copyAssets(filesToCopy, config) {
49
+ async function copyAssets(filesToCopy, filesToRemove, config) {
50
50
  const { outDirClient, outDirServer } = (0, utils_js_1.getOutDirs)(config);
51
51
  const assetsDir = (0, getAssetsDir_js_1.getAssetsDir)(config);
52
52
  const assetsDirServer = path_1.default.posix.join(outDirServer, assetsDir);
53
- if (!filesToCopy.length)
53
+ if (!filesToCopy.length && !filesToRemove.length && !(0, fs_2.existsSync)(assetsDirServer))
54
54
  return;
55
55
  (0, utils_js_1.assert)((0, fs_2.existsSync)(assetsDirServer));
56
56
  const concurrencyLimit = (0, utils_js_1.pLimit)(10);
@@ -60,6 +60,10 @@ async function copyAssets(filesToCopy, config) {
60
60
  await promises_1.default.mkdir(path_1.default.posix.dirname(target), { recursive: true });
61
61
  await promises_1.default.rename(source, target);
62
62
  })));
63
+ filesToRemove.forEach((file) => {
64
+ const filePath = path_1.default.posix.join(outDirServer, file);
65
+ fs_1.default.unlinkSync(filePath);
66
+ });
63
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
64
68
  await fs.rm(assetsDirServer, { recursive: true })
65
69
  */
@@ -67,7 +71,7 @@ async function copyAssets(filesToCopy, config) {
67
71
  }
68
72
  // Add serverManifest resources to clientManifest
69
73
  function addServerAssets(clientManifest, serverManifest) {
70
- var _a, _b;
74
+ var _a, _b, _c, _d;
71
75
  const entriesClient = new Map();
72
76
  const entriesServer = new Map();
73
77
  for (const [key, entry] of Object.entries(clientManifest)) {
@@ -84,36 +88,64 @@ function addServerAssets(clientManifest, serverManifest) {
84
88
  continue;
85
89
  const resources = collectResources(entry, serverManifest);
86
90
  (0, utils_js_1.assert)(!entriesServer.has(pageId));
87
- entriesServer.set(pageId, resources);
91
+ entriesServer.set(pageId, { key, ...resources });
88
92
  }
89
93
  let filesToCopy = [];
94
+ let filesToRemove = [];
90
95
  for (const [pageId, entryClient] of entriesClient.entries()) {
96
+ const entryServer = entriesServer.get(pageId);
97
+ if (!entryServer)
98
+ continue;
91
99
  const cssToAdd = [];
100
+ const cssToRemove = [];
92
101
  const assetsToAdd = [];
93
- const entryServer = entriesServer.get(pageId);
94
- if (entryServer) {
95
- cssToAdd.push(...entryServer.css
96
- .filter((cssServer) => !entryClient.css.some((cssClient) => cssServer.hash === cssClient.hash))
97
- .map((css) => css.src));
98
- assetsToAdd.push(...entryServer.assets
99
- .filter((assertServer) => !entryClient.assets.some((assetClient) => assertServer.hash === assetClient.hash))
100
- .map((asset) => asset.src));
101
- }
102
- 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
+ });
103
119
  if (cssToAdd.length) {
120
+ const { key } = entryClient;
104
121
  filesToCopy.push(...cssToAdd);
105
122
  (_a = clientManifest[key]).css ?? (_a.css = []);
106
123
  clientManifest[key].css?.push(...cssToAdd);
107
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
+ }
108
131
  if (assetsToAdd.length) {
132
+ const { key } = entryClient;
109
133
  filesToCopy.push(...assetsToAdd);
110
- (_b = clientManifest[key]).assets ?? (_b.assets = []);
134
+ (_c = clientManifest[key]).assets ?? (_c.assets = []);
111
135
  clientManifest[key].assets?.push(...assetsToAdd);
112
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
+ }
113
143
  }
114
144
  const clientManifestMod = clientManifest;
145
+ const serverManifestMod = serverManifest;
115
146
  filesToCopy = (0, utils_js_1.unique)(filesToCopy);
116
- return { clientManifestMod, filesToCopy };
147
+ filesToRemove = (0, utils_js_1.unique)(filesToRemove).filter((file) => !filesToCopy.includes(file));
148
+ return { clientManifestMod, serverManifestMod, filesToCopy, filesToRemove };
117
149
  }
118
150
  function getPageId(key) {
119
151
  // Normalize from:
@@ -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);
@@ -60,7 +60,7 @@ function determineInjection({ fileType, isForClientSide, isClientRouting, isPrer
60
60
  }
61
61
  }
62
62
  async function generateGlobImports(globRoots, isBuild, isForClientSide, isClientRouting, configVike, isPrerendering, config, isDev, id) {
63
- let fileContent = `// Generatead by node/plugin/plugins/virtualFiles/index.ts
63
+ let fileContent = `// Generated by https://github.com/vikejs/vike/blob/main/vike/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.ts
64
64
 
65
65
  export const pageFilesLazy = {};
66
66
  export const pageFilesEager = {};
@@ -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) {
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PROJECT_VERSION = void 0;
4
4
  // Automatically updated by @brillout/release-me
5
- exports.PROJECT_VERSION = '0.4.211';
5
+ exports.PROJECT_VERSION = '0.4.212';
@@ -13,7 +13,10 @@ import { ResolvedConfig } from 'vite';
13
13
  */
14
14
  declare function fixServerAssets_isEnabled(): boolean;
15
15
  /** https://github.com/vikejs/vike/issues/1339 */
16
- declare function fixServerAssets(config: ResolvedConfig): Promise<ViteManifest>;
16
+ declare function fixServerAssets(config: ResolvedConfig): Promise<{
17
+ clientManifestMod: ViteManifest;
18
+ serverManifestMod: ViteManifest;
19
+ }>;
17
20
  declare function fixServerAssets_assertCssCodeSplit(config: ResolvedConfig): void;
18
21
  declare function fixServerAssets_assertCssTarget_populate(config: ResolvedConfig): void;
19
22
  declare function fixServerAssets_assertCssTarget(config: ResolvedConfig): Promise<void>;
@@ -29,9 +29,9 @@ async function fixServerAssets(config) {
29
29
  const outDirs = getOutDirs(config);
30
30
  const clientManifest = await loadManifest(outDirs.outDirClient);
31
31
  const serverManifest = await loadManifest(outDirs.outDirServer);
32
- const { clientManifestMod, filesToCopy } = addServerAssets(clientManifest, serverManifest);
33
- await copyAssets(filesToCopy, config);
34
- return clientManifestMod;
32
+ const { clientManifestMod, serverManifestMod, filesToCopy, filesToRemove } = addServerAssets(clientManifest, serverManifest);
33
+ await copyAssets(filesToCopy, filesToRemove, config);
34
+ return { clientManifestMod, serverManifestMod };
35
35
  }
36
36
  async function loadManifest(outDir) {
37
37
  const manifestFilePath = path.posix.join(outDir, manifestTempFile);
@@ -41,11 +41,11 @@ async function loadManifest(outDir) {
41
41
  assert(manifest);
42
42
  return manifest;
43
43
  }
44
- async function copyAssets(filesToCopy, config) {
44
+ async function copyAssets(filesToCopy, filesToRemove, config) {
45
45
  const { outDirClient, outDirServer } = getOutDirs(config);
46
46
  const assetsDir = getAssetsDir(config);
47
47
  const assetsDirServer = path.posix.join(outDirServer, assetsDir);
48
- if (!filesToCopy.length)
48
+ if (!filesToCopy.length && !filesToRemove.length && !existsSync(assetsDirServer))
49
49
  return;
50
50
  assert(existsSync(assetsDirServer));
51
51
  const concurrencyLimit = pLimit(10);
@@ -55,6 +55,10 @@ async function copyAssets(filesToCopy, config) {
55
55
  await fs.mkdir(path.posix.dirname(target), { recursive: true });
56
56
  await fs.rename(source, target);
57
57
  })));
58
+ filesToRemove.forEach((file) => {
59
+ const filePath = path.posix.join(outDirServer, file);
60
+ fs_sync.unlinkSync(filePath);
61
+ });
58
62
  /* 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
59
63
  await fs.rm(assetsDirServer, { recursive: true })
60
64
  */
@@ -62,7 +66,7 @@ async function copyAssets(filesToCopy, config) {
62
66
  }
63
67
  // Add serverManifest resources to clientManifest
64
68
  function addServerAssets(clientManifest, serverManifest) {
65
- var _a, _b;
69
+ var _a, _b, _c, _d;
66
70
  const entriesClient = new Map();
67
71
  const entriesServer = new Map();
68
72
  for (const [key, entry] of Object.entries(clientManifest)) {
@@ -79,36 +83,64 @@ function addServerAssets(clientManifest, serverManifest) {
79
83
  continue;
80
84
  const resources = collectResources(entry, serverManifest);
81
85
  assert(!entriesServer.has(pageId));
82
- entriesServer.set(pageId, resources);
86
+ entriesServer.set(pageId, { key, ...resources });
83
87
  }
84
88
  let filesToCopy = [];
89
+ let filesToRemove = [];
85
90
  for (const [pageId, entryClient] of entriesClient.entries()) {
91
+ const entryServer = entriesServer.get(pageId);
92
+ if (!entryServer)
93
+ continue;
86
94
  const cssToAdd = [];
95
+ const cssToRemove = [];
87
96
  const assetsToAdd = [];
88
- const entryServer = entriesServer.get(pageId);
89
- if (entryServer) {
90
- cssToAdd.push(...entryServer.css
91
- .filter((cssServer) => !entryClient.css.some((cssClient) => cssServer.hash === cssClient.hash))
92
- .map((css) => css.src));
93
- assetsToAdd.push(...entryServer.assets
94
- .filter((assertServer) => !entryClient.assets.some((assetClient) => assertServer.hash === assetClient.hash))
95
- .map((asset) => asset.src));
96
- }
97
- const { key } = entryClient;
97
+ const assetsToRemove = [];
98
+ entryServer.css.forEach((cssServer) => {
99
+ if (!entryClient.css.some((cssClient) => cssServer.hash === cssClient.hash)) {
100
+ cssToAdd.push(cssServer.src);
101
+ }
102
+ else {
103
+ cssToRemove.push(cssServer.src);
104
+ }
105
+ });
106
+ entryServer.assets.forEach((assetServer) => {
107
+ if (!entryClient.assets.some((assetClient) => assetServer.hash === assetClient.hash)) {
108
+ assetsToAdd.push(assetServer.src);
109
+ }
110
+ else {
111
+ assetsToRemove.push(assetServer.src);
112
+ }
113
+ });
98
114
  if (cssToAdd.length) {
115
+ const { key } = entryClient;
99
116
  filesToCopy.push(...cssToAdd);
100
117
  (_a = clientManifest[key]).css ?? (_a.css = []);
101
118
  clientManifest[key].css?.push(...cssToAdd);
102
119
  }
120
+ if (cssToRemove.length) {
121
+ const { key } = entryServer;
122
+ filesToRemove.push(...cssToRemove);
123
+ (_b = serverManifest[key]).css ?? (_b.css = []);
124
+ serverManifest[key].css = serverManifest[key].css.filter((entry) => !cssToRemove.includes(entry));
125
+ }
103
126
  if (assetsToAdd.length) {
127
+ const { key } = entryClient;
104
128
  filesToCopy.push(...assetsToAdd);
105
- (_b = clientManifest[key]).assets ?? (_b.assets = []);
129
+ (_c = clientManifest[key]).assets ?? (_c.assets = []);
106
130
  clientManifest[key].assets?.push(...assetsToAdd);
107
131
  }
132
+ if (assetsToRemove.length) {
133
+ const { key } = entryServer;
134
+ filesToRemove.push(...assetsToRemove);
135
+ (_d = serverManifest[key]).assets ?? (_d.assets = []);
136
+ serverManifest[key].assets = serverManifest[key].assets.filter((entry) => !assetsToRemove.includes(entry));
137
+ }
108
138
  }
109
139
  const clientManifestMod = clientManifest;
140
+ const serverManifestMod = serverManifest;
110
141
  filesToCopy = unique(filesToCopy);
111
- return { clientManifestMod, filesToCopy };
142
+ filesToRemove = unique(filesToRemove).filter((file) => !filesToCopy.includes(file));
143
+ return { clientManifestMod, serverManifestMod, filesToCopy, filesToRemove };
112
144
  }
113
145
  function getPageId(key) {
114
146
  // Normalize from:
@@ -94,7 +94,7 @@ function buildConfig() {
94
94
  await fs.copyFile(clientManifestFilePath, assetsJsonFilePath);
95
95
  }
96
96
  else {
97
- const clientManifestMod = await fixServerAssets(config);
97
+ const { clientManifestMod } = await fixServerAssets(config);
98
98
  await fs.writeFile(assetsJsonFilePath, JSON.stringify(clientManifestMod, null, 2), 'utf-8');
99
99
  }
100
100
  await fs.rm(clientManifestFilePath);
@@ -55,7 +55,7 @@ function determineInjection({ fileType, isForClientSide, isClientRouting, isPrer
55
55
  }
56
56
  }
57
57
  async function generateGlobImports(globRoots, isBuild, isForClientSide, isClientRouting, configVike, isPrerendering, config, isDev, id) {
58
- let fileContent = `// Generatead by node/plugin/plugins/virtualFiles/index.ts
58
+ let fileContent = `// Generated by https://github.com/vikejs/vike/blob/main/vike/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.ts
59
59
 
60
60
  export const pageFilesLazy = {};
61
61
  export const pageFilesEager = {};
@@ -59,13 +59,13 @@ function collectCss(mod, styleUrls, visitedModules, importer) {
59
59
  });
60
60
  }
61
61
  function isStyle(mod) {
62
- if (styleFileRE.test(mod.url) || (mod.id && /\?vue&type=style/.test(mod.id))) {
63
- // `mod.type` seems broken
64
- assert(mod.type === 'js');
65
- // logModule(mod)
66
- return true;
67
- }
68
- return false;
62
+ return (
63
+ // CSS-in-JS libraries such as [wyw-in-js](https://github.com/vikejs/vike/issues/2039)
64
+ mod.type === 'css' ||
65
+ // .css, .less, ...
66
+ styleFileRE.test(mod.url) ||
67
+ // CSS of .vue files
68
+ (mod.id && /\?vue&type=style/.test(mod.id)));
69
69
  }
70
70
  /*
71
71
  function logModule(mod: ModuleNode) {
@@ -1 +1 @@
1
- export declare const PROJECT_VERSION: "0.4.211";
1
+ export declare const PROJECT_VERSION: "0.4.212";
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.211';
2
+ export const PROJECT_VERSION = '0.4.212';
@@ -1,4 +1,4 @@
1
1
  export declare const projectInfo: {
2
2
  projectName: "Vike";
3
- projectVersion: "0.4.211";
3
+ projectVersion: "0.4.212";
4
4
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.211",
3
+ "version": "0.4.212",
4
4
  "repository": "https://github.com/vikejs/vike",
5
5
  "exports": {
6
6
  "./server": {