@marko/vite 2.2.6 → 2.2.9

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 (3) hide show
  1. package/dist/index.js +50 -55
  2. package/dist/index.mjs +50 -55
  3. package/package.json +30 -22
package/dist/index.js CHANGED
@@ -55,6 +55,7 @@ var import_url = require("url");
55
55
  var import_server_entry_template = __toESM(require("./server-entry-template"));
56
56
  var import_manifest_generator = require("./manifest-generator");
57
57
  const import_meta = {};
58
+ const normalizePath = import_path.default.sep === "\\" ? (id) => id.replace(/\\/g, "/") : (id) => id;
58
59
  const virtualFiles = /* @__PURE__ */ new Map();
59
60
  const queryReg = /\?marko-.+$/;
60
61
  const browserEntryQuery = "?marko-browser-entry";
@@ -89,8 +90,8 @@ function markoPlugin(opts = {}) {
89
90
  });
90
91
  const domConfig = __spreadProps(__spreadValues({}, baseConfig), {
91
92
  resolveVirtualDependency(from, dep) {
92
- const query = `${virtualFileQuery}&id=${dep.virtualPath}`;
93
- const id = from + query;
93
+ const query = `${virtualFileQuery}&id=${encodeURIComponent(dep.virtualPath)}`;
94
+ const id = normalizePath(from) + query;
94
95
  if (devServer) {
95
96
  const prev = virtualFiles.get(id);
96
97
  if (prev && prev.code !== dep.code) {
@@ -106,6 +107,7 @@ function markoPlugin(opts = {}) {
106
107
  output: "hydrate"
107
108
  });
108
109
  let root;
110
+ let devEntryFile;
109
111
  let isBuild = false;
110
112
  let isSSRBuild = false;
111
113
  let devServer;
@@ -119,42 +121,41 @@ function markoPlugin(opts = {}) {
119
121
  enforce: "pre",
120
122
  async config(config, env) {
121
123
  compiler ?? (compiler = await import(opts.compiler || "@marko/compiler"));
122
- root = config.root || process.cwd();
124
+ root = normalizePath(config.root || process.cwd());
125
+ devEntryFile = import_path.default.join(root, "index.html");
123
126
  isBuild = env.command === "build";
124
127
  isSSRBuild = isBuild && linked && Boolean(config.build.ssr);
125
128
  if (!registeredTag) {
126
129
  const transformer = import_path.default.resolve(thisFile, "../render-assets-transform");
127
- registeredTag = import_path.default.resolve(thisFile, "../components", isBuild ? "vite.marko" : "vite-watch.marko");
130
+ registeredTag = normalizePath(import_path.default.resolve(thisFile, "../components", isBuild ? "vite.marko" : "vite-watch.marko"));
128
131
  compiler.taglib.register("@marko/vite", {
129
132
  "<_vite>": { template: registeredTag },
130
133
  "<head>": { transformer },
131
134
  "<body>": { transformer }
132
135
  });
133
136
  }
134
- if (!isBuild) {
135
- const lookup = compiler.taglib.buildLookup(root);
136
- const domRuntimeDeps = compiler.getRuntimeEntryFiles("dom", opts.translator);
137
- const htmlRuntimeDeps = compiler.getRuntimeEntryFiles("html", opts.translator);
138
- const taglibDeps = [];
139
- for (const name in lookup.taglibsById) {
140
- const taglib = lookup.taglibsById[name];
141
- if (/[\\/]node_modules[\\/](?!@marko[\\/])/.test(taglib.dirname)) {
142
- for (const tagName in taglib.tags) {
143
- const tag = taglib.tags[tagName];
144
- const entry = tag.template || tag.renderer;
145
- if (entry) {
146
- taglibDeps.push(entry.replace(/^.*?[\\/]node_modules[\\/]/, ""));
147
- }
137
+ const lookup = compiler.taglib.buildLookup(root);
138
+ const taglibDeps = [];
139
+ for (const name in lookup.taglibsById) {
140
+ const taglib = lookup.taglibsById[name];
141
+ if (/[\\/]node_modules[\\/](?!@marko[\\/])/.test(taglib.dirname)) {
142
+ for (const tagName in taglib.tags) {
143
+ const tag = taglib.tags[tagName];
144
+ const entry = tag.template || tag.renderer;
145
+ if (entry) {
146
+ taglibDeps.push(entry.replace(/^.*?[\\/]node_modules[\\/]/, ""));
148
147
  }
149
148
  }
150
149
  }
151
- const domDeps = Array.from(new Set(domRuntimeDeps.concat(taglibDeps)));
152
- const serverDeps = Array.from(new Set(htmlRuntimeDeps.concat(taglibDeps)));
153
- const optimizeDeps = config.optimizeDeps ?? (config.optimizeDeps = {});
154
- optimizeDeps.include ?? (optimizeDeps.include = []);
155
- optimizeDeps.include = optimizeDeps.include.concat(domDeps.filter((dep) => import_path.default.extname(dep) !== markoExt));
156
- optimizeDeps.exclude ?? (optimizeDeps.exclude = []);
157
- optimizeDeps.exclude = optimizeDeps.exclude.concat(domDeps.filter((dep) => import_path.default.extname(dep) === markoExt));
150
+ }
151
+ const domDeps = Array.from(new Set(compiler.getRuntimeEntryFiles("dom", opts.translator).concat(taglibDeps)));
152
+ const optimizeDeps = config.optimizeDeps ?? (config.optimizeDeps = {});
153
+ optimizeDeps.include ?? (optimizeDeps.include = []);
154
+ optimizeDeps.include = optimizeDeps.include.concat(domDeps.filter((dep) => import_path.default.extname(dep) !== markoExt));
155
+ optimizeDeps.exclude ?? (optimizeDeps.exclude = []);
156
+ optimizeDeps.exclude = optimizeDeps.exclude.concat(domDeps.filter((dep) => import_path.default.extname(dep) === markoExt));
157
+ if (!isBuild) {
158
+ const serverDeps = Array.from(new Set(compiler.getRuntimeEntryFiles("html", opts.translator).concat(taglibDeps)));
158
159
  const ssr = config.ssr ?? (config.ssr = {});
159
160
  ssr.external ?? (ssr.external = []);
160
161
  ssr.external = ssr.external.concat(serverDeps);
@@ -210,14 +211,14 @@ function markoPlugin(opts = {}) {
210
211
  let importeeQuery = getMarkoQuery(importee);
211
212
  if (importeeQuery) {
212
213
  importee = importee.slice(0, -importeeQuery.length);
213
- } else if (ssr && linked && importer && isMarkoFile(importee) && !isMarkoFile(importer.replace(queryReg, ""))) {
214
+ } else if (ssr && linked && importer && importer !== devEntryFile && isMarkoFile(importee) && !isMarkoFile(importer.replace(queryReg, ""))) {
214
215
  importeeQuery = serverEntryQuery;
215
216
  } else if (!ssr && isBuild && importer && isMarkoFile(importee) && ((_a2 = this.getModuleInfo(importer)) == null ? void 0 : _a2.isEntry)) {
216
217
  importeeQuery = browserEntryQuery;
217
218
  }
218
219
  if (importeeQuery) {
219
220
  const resolved = importee[0] === "." ? {
220
- id: importer ? import_path.default.resolve(importer, "..", importee) : import_path.default.resolve(root, importee)
221
+ id: normalizePath(importer ? import_path.default.resolve(importer, "..", importee) : import_path.default.resolve(root, importee))
221
222
  } : await this.resolve(importee, importer, resolveOpts);
222
223
  if (resolved) {
223
224
  resolved.id += importeeQuery;
@@ -227,36 +228,30 @@ function markoPlugin(opts = {}) {
227
228
  return null;
228
229
  },
229
230
  async load(id) {
230
- const query = getMarkoQuery(id);
231
- if (query) {
232
- if (!id.startsWith(root)) {
233
- id = import_path.default.join(root, id);
234
- }
235
- switch (query) {
236
- case serverEntryQuery: {
237
- const fileName = id.slice(0, -serverEntryQuery.length);
238
- let entryData;
239
- if (isBuild) {
240
- const relativeFileName = import_path.default.relative(root, fileName);
241
- const entryId = toEntryId(relativeFileName);
242
- serverManifest ?? (serverManifest = {
243
- entries: {},
244
- chunksNeedingAssets: []
245
- });
246
- serverManifest.entries[entryId] = relativeFileName;
247
- entryData = JSON.stringify(entryId);
248
- } else {
249
- entryData = JSON.stringify(await (0, import_manifest_generator.generateDocManifest)(await devServer.transformIndexHtml("/", (0, import_manifest_generator.generateInputDoc)(fileNameToURL(fileName, root)))));
250
- }
251
- return (0, import_server_entry_template.default)({
252
- fileName,
253
- entryData,
254
- runtimeId
231
+ switch (getMarkoQuery(id)) {
232
+ case serverEntryQuery: {
233
+ const fileName = id.slice(0, -serverEntryQuery.length);
234
+ let entryData;
235
+ if (isBuild) {
236
+ const relativeFileName = import_path.default.posix.relative(root, fileName);
237
+ const entryId = toEntryId(relativeFileName);
238
+ serverManifest ?? (serverManifest = {
239
+ entries: {},
240
+ chunksNeedingAssets: []
255
241
  });
242
+ serverManifest.entries[entryId] = relativeFileName;
243
+ entryData = JSON.stringify(entryId);
244
+ } else {
245
+ entryData = JSON.stringify(await (0, import_manifest_generator.generateDocManifest)(await devServer.transformIndexHtml("/", (0, import_manifest_generator.generateInputDoc)(fileNameToURL(fileName, root)))));
256
246
  }
257
- case browserEntryQuery:
258
- return import_fs.default.promises.readFile(id.slice(0, -browserEntryQuery.length), "utf-8");
247
+ return (0, import_server_entry_template.default)({
248
+ fileName,
249
+ entryData,
250
+ runtimeId
251
+ });
259
252
  }
253
+ case browserEntryQuery:
254
+ return import_fs.default.promises.readFile(id.slice(0, -browserEntryQuery.length), "utf-8");
260
255
  }
261
256
  return virtualFiles.get(id) || null;
262
257
  },
@@ -362,7 +357,7 @@ function isMarkoFile(id) {
362
357
  function toHTMLEntries(root, serverEntries) {
363
358
  const result = [];
364
359
  for (const id in serverEntries) {
365
- const markoFile = import_path.default.join(root, serverEntries[id]);
360
+ const markoFile = import_path.default.posix.join(root, serverEntries[id]);
366
361
  const htmlFile = markoFile + htmlExt;
367
362
  virtualFiles.set(htmlFile, {
368
363
  code: (0, import_manifest_generator.generateInputDoc)(markoFile)
package/dist/index.mjs CHANGED
@@ -18,6 +18,7 @@ import path from "path";
18
18
  import crypto from "crypto";
19
19
  import anyMatch from "anymatch";
20
20
  import { pathToFileURL, fileURLToPath } from "url";
21
+ var normalizePath = path.sep === "\\" ? (id) => id.replace(/\\/g, "/") : (id) => id;
21
22
  var virtualFiles = /* @__PURE__ */ new Map();
22
23
  var queryReg = /\?marko-.+$/;
23
24
  var browserEntryQuery = "?marko-browser-entry";
@@ -52,8 +53,8 @@ function markoPlugin(opts = {}) {
52
53
  });
53
54
  const domConfig = __spreadProps(__spreadValues({}, baseConfig), {
54
55
  resolveVirtualDependency(from, dep) {
55
- const query = `${virtualFileQuery}&id=${dep.virtualPath}`;
56
- const id = from + query;
56
+ const query = `${virtualFileQuery}&id=${encodeURIComponent(dep.virtualPath)}`;
57
+ const id = normalizePath(from) + query;
57
58
  if (devServer) {
58
59
  const prev = virtualFiles.get(id);
59
60
  if (prev && prev.code !== dep.code) {
@@ -69,6 +70,7 @@ function markoPlugin(opts = {}) {
69
70
  output: "hydrate"
70
71
  });
71
72
  let root;
73
+ let devEntryFile;
72
74
  let isBuild = false;
73
75
  let isSSRBuild = false;
74
76
  let devServer;
@@ -82,42 +84,41 @@ function markoPlugin(opts = {}) {
82
84
  enforce: "pre",
83
85
  async config(config, env) {
84
86
  compiler ?? (compiler = await import(opts.compiler || "@marko/compiler"));
85
- root = config.root || process.cwd();
87
+ root = normalizePath(config.root || process.cwd());
88
+ devEntryFile = path.join(root, "index.html");
86
89
  isBuild = env.command === "build";
87
90
  isSSRBuild = isBuild && linked && Boolean(config.build.ssr);
88
91
  if (!registeredTag) {
89
92
  const transformer = path.resolve(thisFile, "../render-assets-transform");
90
- registeredTag = path.resolve(thisFile, "../components", isBuild ? "vite.marko" : "vite-watch.marko");
93
+ registeredTag = normalizePath(path.resolve(thisFile, "../components", isBuild ? "vite.marko" : "vite-watch.marko"));
91
94
  compiler.taglib.register("@marko/vite", {
92
95
  "<_vite>": { template: registeredTag },
93
96
  "<head>": { transformer },
94
97
  "<body>": { transformer }
95
98
  });
96
99
  }
97
- if (!isBuild) {
98
- const lookup = compiler.taglib.buildLookup(root);
99
- const domRuntimeDeps = compiler.getRuntimeEntryFiles("dom", opts.translator);
100
- const htmlRuntimeDeps = compiler.getRuntimeEntryFiles("html", opts.translator);
101
- const taglibDeps = [];
102
- for (const name in lookup.taglibsById) {
103
- const taglib = lookup.taglibsById[name];
104
- if (/[\\/]node_modules[\\/](?!@marko[\\/])/.test(taglib.dirname)) {
105
- for (const tagName in taglib.tags) {
106
- const tag = taglib.tags[tagName];
107
- const entry = tag.template || tag.renderer;
108
- if (entry) {
109
- taglibDeps.push(entry.replace(/^.*?[\\/]node_modules[\\/]/, ""));
110
- }
100
+ const lookup = compiler.taglib.buildLookup(root);
101
+ const taglibDeps = [];
102
+ for (const name in lookup.taglibsById) {
103
+ const taglib = lookup.taglibsById[name];
104
+ if (/[\\/]node_modules[\\/](?!@marko[\\/])/.test(taglib.dirname)) {
105
+ for (const tagName in taglib.tags) {
106
+ const tag = taglib.tags[tagName];
107
+ const entry = tag.template || tag.renderer;
108
+ if (entry) {
109
+ taglibDeps.push(entry.replace(/^.*?[\\/]node_modules[\\/]/, ""));
111
110
  }
112
111
  }
113
112
  }
114
- const domDeps = Array.from(new Set(domRuntimeDeps.concat(taglibDeps)));
115
- const serverDeps = Array.from(new Set(htmlRuntimeDeps.concat(taglibDeps)));
116
- const optimizeDeps = config.optimizeDeps ?? (config.optimizeDeps = {});
117
- optimizeDeps.include ?? (optimizeDeps.include = []);
118
- optimizeDeps.include = optimizeDeps.include.concat(domDeps.filter((dep) => path.extname(dep) !== markoExt));
119
- optimizeDeps.exclude ?? (optimizeDeps.exclude = []);
120
- optimizeDeps.exclude = optimizeDeps.exclude.concat(domDeps.filter((dep) => path.extname(dep) === markoExt));
113
+ }
114
+ const domDeps = Array.from(new Set(compiler.getRuntimeEntryFiles("dom", opts.translator).concat(taglibDeps)));
115
+ const optimizeDeps = config.optimizeDeps ?? (config.optimizeDeps = {});
116
+ optimizeDeps.include ?? (optimizeDeps.include = []);
117
+ optimizeDeps.include = optimizeDeps.include.concat(domDeps.filter((dep) => path.extname(dep) !== markoExt));
118
+ optimizeDeps.exclude ?? (optimizeDeps.exclude = []);
119
+ optimizeDeps.exclude = optimizeDeps.exclude.concat(domDeps.filter((dep) => path.extname(dep) === markoExt));
120
+ if (!isBuild) {
121
+ const serverDeps = Array.from(new Set(compiler.getRuntimeEntryFiles("html", opts.translator).concat(taglibDeps)));
121
122
  const ssr = config.ssr ?? (config.ssr = {});
122
123
  ssr.external ?? (ssr.external = []);
123
124
  ssr.external = ssr.external.concat(serverDeps);
@@ -173,14 +174,14 @@ function markoPlugin(opts = {}) {
173
174
  let importeeQuery = getMarkoQuery(importee);
174
175
  if (importeeQuery) {
175
176
  importee = importee.slice(0, -importeeQuery.length);
176
- } else if (ssr && linked && importer && isMarkoFile(importee) && !isMarkoFile(importer.replace(queryReg, ""))) {
177
+ } else if (ssr && linked && importer && importer !== devEntryFile && isMarkoFile(importee) && !isMarkoFile(importer.replace(queryReg, ""))) {
177
178
  importeeQuery = serverEntryQuery;
178
179
  } else if (!ssr && isBuild && importer && isMarkoFile(importee) && ((_a2 = this.getModuleInfo(importer)) == null ? void 0 : _a2.isEntry)) {
179
180
  importeeQuery = browserEntryQuery;
180
181
  }
181
182
  if (importeeQuery) {
182
183
  const resolved = importee[0] === "." ? {
183
- id: importer ? path.resolve(importer, "..", importee) : path.resolve(root, importee)
184
+ id: normalizePath(importer ? path.resolve(importer, "..", importee) : path.resolve(root, importee))
184
185
  } : await this.resolve(importee, importer, resolveOpts);
185
186
  if (resolved) {
186
187
  resolved.id += importeeQuery;
@@ -190,36 +191,30 @@ function markoPlugin(opts = {}) {
190
191
  return null;
191
192
  },
192
193
  async load(id) {
193
- const query = getMarkoQuery(id);
194
- if (query) {
195
- if (!id.startsWith(root)) {
196
- id = path.join(root, id);
197
- }
198
- switch (query) {
199
- case serverEntryQuery: {
200
- const fileName = id.slice(0, -serverEntryQuery.length);
201
- let entryData;
202
- if (isBuild) {
203
- const relativeFileName = path.relative(root, fileName);
204
- const entryId = toEntryId(relativeFileName);
205
- serverManifest ?? (serverManifest = {
206
- entries: {},
207
- chunksNeedingAssets: []
208
- });
209
- serverManifest.entries[entryId] = relativeFileName;
210
- entryData = JSON.stringify(entryId);
211
- } else {
212
- entryData = JSON.stringify(await generateDocManifest(await devServer.transformIndexHtml("/", generateInputDoc(fileNameToURL(fileName, root)))));
213
- }
214
- return server_entry_template_default({
215
- fileName,
216
- entryData,
217
- runtimeId
194
+ switch (getMarkoQuery(id)) {
195
+ case serverEntryQuery: {
196
+ const fileName = id.slice(0, -serverEntryQuery.length);
197
+ let entryData;
198
+ if (isBuild) {
199
+ const relativeFileName = path.posix.relative(root, fileName);
200
+ const entryId = toEntryId(relativeFileName);
201
+ serverManifest ?? (serverManifest = {
202
+ entries: {},
203
+ chunksNeedingAssets: []
218
204
  });
205
+ serverManifest.entries[entryId] = relativeFileName;
206
+ entryData = JSON.stringify(entryId);
207
+ } else {
208
+ entryData = JSON.stringify(await generateDocManifest(await devServer.transformIndexHtml("/", generateInputDoc(fileNameToURL(fileName, root)))));
219
209
  }
220
- case browserEntryQuery:
221
- return fs.promises.readFile(id.slice(0, -browserEntryQuery.length), "utf-8");
210
+ return server_entry_template_default({
211
+ fileName,
212
+ entryData,
213
+ runtimeId
214
+ });
222
215
  }
216
+ case browserEntryQuery:
217
+ return fs.promises.readFile(id.slice(0, -browserEntryQuery.length), "utf-8");
223
218
  }
224
219
  return virtualFiles.get(id) || null;
225
220
  },
@@ -325,7 +320,7 @@ function isMarkoFile(id) {
325
320
  function toHTMLEntries(root, serverEntries) {
326
321
  const result = [];
327
322
  for (const id in serverEntries) {
328
- const markoFile = path.join(root, serverEntries[id]);
323
+ const markoFile = path.posix.join(root, serverEntries[id]);
329
324
  const htmlFile = markoFile + htmlExt;
330
325
  virtualFiles.set(htmlFile, {
331
326
  code: generateInputDoc(markoFile)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@marko/vite",
3
3
  "description": "A Marko plugin for Vite",
4
- "version": "2.2.6",
4
+ "version": "2.2.9",
5
5
  "author": "Dylan Piercey <dpiercey@ebay.com>",
6
6
  "bugs": "https://github.com/marko-js/vite/issues",
7
7
  "dependencies": {
@@ -11,29 +11,37 @@
11
11
  "htmlparser2": "^7.2.0"
12
12
  },
13
13
  "devDependencies": {
14
- "@commitlint/cli": "^16.0.1",
15
- "@commitlint/config-conventional": "^16.0.0",
16
- "@marko/compiler": "^5.17.6",
17
- "@types/mocha": "^9.0.0",
18
- "@types/node": "^17.0.6",
19
- "@typescript-eslint/eslint-plugin": "^5.8.1",
20
- "@typescript-eslint/parser": "^5.8.1",
21
- "esbuild": "^0.14.10",
22
- "esbuild-register": "^3.3.1",
23
- "eslint": "^8.6.0",
24
- "eslint-config-prettier": "^8.3.0",
25
- "fast-glob": "^3.2.7",
14
+ "@commitlint/cli": "^16.2.1",
15
+ "@commitlint/config-conventional": "^16.2.1",
16
+ "@marko/compiler": "^5.19.1",
17
+ "@marko/fixture-snapshots": "^2.1.6",
18
+ "@marko/testing-library": "^6.0.0",
19
+ "@types/jsdom": "^16.2.14",
20
+ "@types/mocha": "^9.1.0",
21
+ "@types/node": "^17.0.21",
22
+ "@types/serve-handler": "^6.1.1",
23
+ "@typescript-eslint/eslint-plugin": "^5.14.0",
24
+ "@typescript-eslint/parser": "^5.14.0",
25
+ "cross-env": "^7.0.3",
26
+ "esbuild": "^0.14.25",
27
+ "esbuild-register": "^3.3.2",
28
+ "eslint": "^8.10.0",
29
+ "eslint-config-prettier": "^8.5.0",
30
+ "fast-glob": "^3.2.11",
26
31
  "fixpack": "^4.0.0",
27
32
  "husky": "^7.0.4",
28
- "lint-staged": "^12.1.4",
29
- "marko": "^5.17.6",
30
- "mocha": "^9.1.3",
31
- "mocha-snap": "^4.2.1",
33
+ "jsdom": "^19.0.0",
34
+ "lint-staged": "^12.3.5",
35
+ "marko": "^5.19.0",
36
+ "mocha": "^9.2.1",
37
+ "mocha-snap": "^4.3.0",
32
38
  "nyc": "^15.1.0",
39
+ "playwright": "^1.19.2",
33
40
  "prettier": "^2.5.1",
34
- "semantic-release": "^18.0.1",
35
- "typescript": "^4.5.4",
36
- "vite": "^2.7.10"
41
+ "semantic-release": "^19.0.2",
42
+ "serve-handler": "^6.1.3",
43
+ "typescript": "^4.6.2",
44
+ "vite": "^2.8.6"
37
45
  },
38
46
  "exports": {
39
47
  ".": {
@@ -73,8 +81,8 @@
73
81
  "format": "npm run lint:eslint -- --fix && npm run lint:prettier -- --write && (fixpack || true)",
74
82
  "lint": "tsc -b && npm run lint:eslint && npm run lint:prettier -- -l && fixpack",
75
83
  "lint:eslint": "eslint -f visualstudio .",
76
- "lint:prettier": "prettier '**/*{.ts,.js,.json,.md,.yml,rc}'",
77
- "mocha": "NODE_ENV=test mocha 'src/**/__tests__/*.test.ts'",
84
+ "lint:prettier": "prettier \"./**/*{.ts,.js,.json,.md,.yml,rc}\"",
85
+ "mocha": "cross-env NODE_ENV=test mocha \"./src/**/__tests__/*.test.ts\"",
78
86
  "prepare": "husky install",
79
87
  "prepublishOnly": "npm run build",
80
88
  "release": "semantic-release",