@marko/vite 2.2.7 → 2.2.10

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 +48 -55
  2. package/dist/index.mjs +48 -55
  3. package/package.json +18 -17
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) {
@@ -120,43 +121,41 @@ function markoPlugin(opts = {}) {
120
121
  enforce: "pre",
121
122
  async config(config, env) {
122
123
  compiler ?? (compiler = await import(opts.compiler || "@marko/compiler"));
123
- root = config.root || process.cwd();
124
+ root = normalizePath(config.root || process.cwd());
124
125
  devEntryFile = import_path.default.join(root, "index.html");
125
126
  isBuild = env.command === "build";
126
127
  isSSRBuild = isBuild && linked && Boolean(config.build.ssr);
127
128
  if (!registeredTag) {
128
129
  const transformer = import_path.default.resolve(thisFile, "../render-assets-transform");
129
- 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"));
130
131
  compiler.taglib.register("@marko/vite", {
131
132
  "<_vite>": { template: registeredTag },
132
133
  "<head>": { transformer },
133
134
  "<body>": { transformer }
134
135
  });
135
136
  }
136
- if (!isBuild) {
137
- const lookup = compiler.taglib.buildLookup(root);
138
- const domRuntimeDeps = compiler.getRuntimeEntryFiles("dom", opts.translator);
139
- const htmlRuntimeDeps = compiler.getRuntimeEntryFiles("html", opts.translator);
140
- const taglibDeps = [];
141
- for (const name in lookup.taglibsById) {
142
- const taglib = lookup.taglibsById[name];
143
- if (/[\\/]node_modules[\\/](?!@marko[\\/])/.test(taglib.dirname)) {
144
- for (const tagName in taglib.tags) {
145
- const tag = taglib.tags[tagName];
146
- const entry = tag.template || tag.renderer;
147
- if (entry) {
148
- taglibDeps.push(entry.replace(/^.*?[\\/]node_modules[\\/]/, ""));
149
- }
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[\\/]/, ""));
150
147
  }
151
148
  }
152
149
  }
153
- const domDeps = Array.from(new Set(domRuntimeDeps.concat(taglibDeps)));
154
- const serverDeps = Array.from(new Set(htmlRuntimeDeps.concat(taglibDeps)));
155
- const optimizeDeps = config.optimizeDeps ?? (config.optimizeDeps = {});
156
- optimizeDeps.include ?? (optimizeDeps.include = []);
157
- optimizeDeps.include = optimizeDeps.include.concat(domDeps.filter((dep) => import_path.default.extname(dep) !== markoExt));
158
- optimizeDeps.exclude ?? (optimizeDeps.exclude = []);
159
- 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)));
160
159
  const ssr = config.ssr ?? (config.ssr = {});
161
160
  ssr.external ?? (ssr.external = []);
162
161
  ssr.external = ssr.external.concat(serverDeps);
@@ -219,7 +218,7 @@ function markoPlugin(opts = {}) {
219
218
  }
220
219
  if (importeeQuery) {
221
220
  const resolved = importee[0] === "." ? {
222
- 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))
223
222
  } : await this.resolve(importee, importer, resolveOpts);
224
223
  if (resolved) {
225
224
  resolved.id += importeeQuery;
@@ -229,36 +228,30 @@ function markoPlugin(opts = {}) {
229
228
  return null;
230
229
  },
231
230
  async load(id) {
232
- const query = getMarkoQuery(id);
233
- if (query) {
234
- if (!id.startsWith(root)) {
235
- id = import_path.default.join(root, id);
236
- }
237
- switch (query) {
238
- case serverEntryQuery: {
239
- const fileName = id.slice(0, -serverEntryQuery.length);
240
- let entryData;
241
- if (isBuild) {
242
- const relativeFileName = import_path.default.relative(root, fileName);
243
- const entryId = toEntryId(relativeFileName);
244
- serverManifest ?? (serverManifest = {
245
- entries: {},
246
- chunksNeedingAssets: []
247
- });
248
- serverManifest.entries[entryId] = relativeFileName;
249
- entryData = JSON.stringify(entryId);
250
- } else {
251
- entryData = JSON.stringify(await (0, import_manifest_generator.generateDocManifest)(await devServer.transformIndexHtml("/", (0, import_manifest_generator.generateInputDoc)(fileNameToURL(fileName, root)))));
252
- }
253
- return (0, import_server_entry_template.default)({
254
- fileName,
255
- entryData,
256
- 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: []
257
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)))));
258
246
  }
259
- case browserEntryQuery:
260
- 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
+ });
261
252
  }
253
+ case browserEntryQuery:
254
+ return import_fs.default.promises.readFile(id.slice(0, -browserEntryQuery.length), "utf-8");
262
255
  }
263
256
  return virtualFiles.get(id) || null;
264
257
  },
@@ -266,7 +259,7 @@ function markoPlugin(opts = {}) {
266
259
  if (isBuild) {
267
260
  return html;
268
261
  }
269
- return html.replace(/src\s*=\s*(['"])(\\.|(?!\1).)*\.marko\1/gim, (m) => m.slice(0, -1) + browserEntryQuery + m.slice(-1));
262
+ return html.replace(/(src\s*=\s*(['"])(?:(?!\2).)*\.marko)(?:\?((?:(?!\2).)*))?\2/gim, (_, prefix, quote, query) => prefix + browserEntryQuery + (query ? "&" + query : "") + quote);
270
263
  },
271
264
  async transform(source, id, ssr) {
272
265
  const query = getMarkoQuery(id);
@@ -364,7 +357,7 @@ function isMarkoFile(id) {
364
357
  function toHTMLEntries(root, serverEntries) {
365
358
  const result = [];
366
359
  for (const id in serverEntries) {
367
- const markoFile = import_path.default.join(root, serverEntries[id]);
360
+ const markoFile = import_path.default.posix.join(root, serverEntries[id]);
368
361
  const htmlFile = markoFile + htmlExt;
369
362
  virtualFiles.set(htmlFile, {
370
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) {
@@ -83,43 +84,41 @@ function markoPlugin(opts = {}) {
83
84
  enforce: "pre",
84
85
  async config(config, env) {
85
86
  compiler ?? (compiler = await import(opts.compiler || "@marko/compiler"));
86
- root = config.root || process.cwd();
87
+ root = normalizePath(config.root || process.cwd());
87
88
  devEntryFile = path.join(root, "index.html");
88
89
  isBuild = env.command === "build";
89
90
  isSSRBuild = isBuild && linked && Boolean(config.build.ssr);
90
91
  if (!registeredTag) {
91
92
  const transformer = path.resolve(thisFile, "../render-assets-transform");
92
- registeredTag = path.resolve(thisFile, "../components", isBuild ? "vite.marko" : "vite-watch.marko");
93
+ registeredTag = normalizePath(path.resolve(thisFile, "../components", isBuild ? "vite.marko" : "vite-watch.marko"));
93
94
  compiler.taglib.register("@marko/vite", {
94
95
  "<_vite>": { template: registeredTag },
95
96
  "<head>": { transformer },
96
97
  "<body>": { transformer }
97
98
  });
98
99
  }
99
- if (!isBuild) {
100
- const lookup = compiler.taglib.buildLookup(root);
101
- const domRuntimeDeps = compiler.getRuntimeEntryFiles("dom", opts.translator);
102
- const htmlRuntimeDeps = compiler.getRuntimeEntryFiles("html", opts.translator);
103
- const taglibDeps = [];
104
- for (const name in lookup.taglibsById) {
105
- const taglib = lookup.taglibsById[name];
106
- if (/[\\/]node_modules[\\/](?!@marko[\\/])/.test(taglib.dirname)) {
107
- for (const tagName in taglib.tags) {
108
- const tag = taglib.tags[tagName];
109
- const entry = tag.template || tag.renderer;
110
- if (entry) {
111
- taglibDeps.push(entry.replace(/^.*?[\\/]node_modules[\\/]/, ""));
112
- }
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[\\/]/, ""));
113
110
  }
114
111
  }
115
112
  }
116
- const domDeps = Array.from(new Set(domRuntimeDeps.concat(taglibDeps)));
117
- const serverDeps = Array.from(new Set(htmlRuntimeDeps.concat(taglibDeps)));
118
- const optimizeDeps = config.optimizeDeps ?? (config.optimizeDeps = {});
119
- optimizeDeps.include ?? (optimizeDeps.include = []);
120
- optimizeDeps.include = optimizeDeps.include.concat(domDeps.filter((dep) => path.extname(dep) !== markoExt));
121
- optimizeDeps.exclude ?? (optimizeDeps.exclude = []);
122
- 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)));
123
122
  const ssr = config.ssr ?? (config.ssr = {});
124
123
  ssr.external ?? (ssr.external = []);
125
124
  ssr.external = ssr.external.concat(serverDeps);
@@ -182,7 +181,7 @@ function markoPlugin(opts = {}) {
182
181
  }
183
182
  if (importeeQuery) {
184
183
  const resolved = importee[0] === "." ? {
185
- id: importer ? path.resolve(importer, "..", importee) : path.resolve(root, importee)
184
+ id: normalizePath(importer ? path.resolve(importer, "..", importee) : path.resolve(root, importee))
186
185
  } : await this.resolve(importee, importer, resolveOpts);
187
186
  if (resolved) {
188
187
  resolved.id += importeeQuery;
@@ -192,36 +191,30 @@ function markoPlugin(opts = {}) {
192
191
  return null;
193
192
  },
194
193
  async load(id) {
195
- const query = getMarkoQuery(id);
196
- if (query) {
197
- if (!id.startsWith(root)) {
198
- id = path.join(root, id);
199
- }
200
- switch (query) {
201
- case serverEntryQuery: {
202
- const fileName = id.slice(0, -serverEntryQuery.length);
203
- let entryData;
204
- if (isBuild) {
205
- const relativeFileName = path.relative(root, fileName);
206
- const entryId = toEntryId(relativeFileName);
207
- serverManifest ?? (serverManifest = {
208
- entries: {},
209
- chunksNeedingAssets: []
210
- });
211
- serverManifest.entries[entryId] = relativeFileName;
212
- entryData = JSON.stringify(entryId);
213
- } else {
214
- entryData = JSON.stringify(await generateDocManifest(await devServer.transformIndexHtml("/", generateInputDoc(fileNameToURL(fileName, root)))));
215
- }
216
- return server_entry_template_default({
217
- fileName,
218
- entryData,
219
- 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: []
220
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)))));
221
209
  }
222
- case browserEntryQuery:
223
- return fs.promises.readFile(id.slice(0, -browserEntryQuery.length), "utf-8");
210
+ return server_entry_template_default({
211
+ fileName,
212
+ entryData,
213
+ runtimeId
214
+ });
224
215
  }
216
+ case browserEntryQuery:
217
+ return fs.promises.readFile(id.slice(0, -browserEntryQuery.length), "utf-8");
225
218
  }
226
219
  return virtualFiles.get(id) || null;
227
220
  },
@@ -229,7 +222,7 @@ function markoPlugin(opts = {}) {
229
222
  if (isBuild) {
230
223
  return html;
231
224
  }
232
- return html.replace(/src\s*=\s*(['"])(\\.|(?!\1).)*\.marko\1/gim, (m) => m.slice(0, -1) + browserEntryQuery + m.slice(-1));
225
+ return html.replace(/(src\s*=\s*(['"])(?:(?!\2).)*\.marko)(?:\?((?:(?!\2).)*))?\2/gim, (_, prefix, quote, query) => prefix + browserEntryQuery + (query ? "&" + query : "") + quote);
233
226
  },
234
227
  async transform(source, id, ssr) {
235
228
  const query = getMarkoQuery(id);
@@ -327,7 +320,7 @@ function isMarkoFile(id) {
327
320
  function toHTMLEntries(root, serverEntries) {
328
321
  const result = [];
329
322
  for (const id in serverEntries) {
330
- const markoFile = path.join(root, serverEntries[id]);
323
+ const markoFile = path.posix.join(root, serverEntries[id]);
331
324
  const htmlFile = markoFile + htmlExt;
332
325
  virtualFiles.set(htmlFile, {
333
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.7",
4
+ "version": "2.2.10",
5
5
  "author": "Dylan Piercey <dpiercey@ebay.com>",
6
6
  "bugs": "https://github.com/marko-js/vite/issues",
7
7
  "dependencies": {
@@ -11,36 +11,37 @@
11
11
  "htmlparser2": "^7.2.0"
12
12
  },
13
13
  "devDependencies": {
14
- "@commitlint/cli": "^16.1.0",
15
- "@commitlint/config-conventional": "^16.0.0",
14
+ "@commitlint/cli": "^16.2.1",
15
+ "@commitlint/config-conventional": "^16.2.1",
16
16
  "@marko/compiler": "^5.19.1",
17
17
  "@marko/fixture-snapshots": "^2.1.6",
18
18
  "@marko/testing-library": "^6.0.0",
19
19
  "@types/jsdom": "^16.2.14",
20
20
  "@types/mocha": "^9.1.0",
21
- "@types/node": "^17.0.15",
21
+ "@types/node": "^17.0.21",
22
22
  "@types/serve-handler": "^6.1.1",
23
- "@typescript-eslint/eslint-plugin": "^5.10.2",
24
- "@typescript-eslint/parser": "^5.10.2",
25
- "esbuild": "^0.14.20",
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",
26
27
  "esbuild-register": "^3.3.2",
27
- "eslint": "^8.8.0",
28
- "eslint-config-prettier": "^8.3.0",
28
+ "eslint": "^8.10.0",
29
+ "eslint-config-prettier": "^8.5.0",
29
30
  "fast-glob": "^3.2.11",
30
31
  "fixpack": "^4.0.0",
31
32
  "husky": "^7.0.4",
32
33
  "jsdom": "^19.0.0",
33
- "lint-staged": "^12.3.3",
34
+ "lint-staged": "^12.3.5",
34
35
  "marko": "^5.19.0",
35
- "mocha": "^9.2.0",
36
- "mocha-snap": "^4.2.4",
36
+ "mocha": "^9.2.1",
37
+ "mocha-snap": "^4.3.0",
37
38
  "nyc": "^15.1.0",
38
- "playwright": "^1.18.1",
39
+ "playwright": "^1.19.2",
39
40
  "prettier": "^2.5.1",
40
41
  "semantic-release": "^19.0.2",
41
42
  "serve-handler": "^6.1.3",
42
- "typescript": "^4.5.5",
43
- "vite": "^2.7.13"
43
+ "typescript": "^4.6.2",
44
+ "vite": "^2.8.6"
44
45
  },
45
46
  "exports": {
46
47
  ".": {
@@ -80,8 +81,8 @@
80
81
  "format": "npm run lint:eslint -- --fix && npm run lint:prettier -- --write && (fixpack || true)",
81
82
  "lint": "tsc -b && npm run lint:eslint && npm run lint:prettier -- -l && fixpack",
82
83
  "lint:eslint": "eslint -f visualstudio .",
83
- "lint:prettier": "prettier '**/*{.ts,.js,.json,.md,.yml,rc}'",
84
- "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\"",
85
86
  "prepare": "husky install",
86
87
  "prepublishOnly": "npm run build",
87
88
  "release": "semantic-release",