@marko/vite 2.0.0 → 2.0.3
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.
- package/LICENSE +1 -1
- package/dist/chunk-HWRQJHCN.mjs +22 -0
- package/dist/chunk-MPTD6LHF.mjs +65 -0
- package/dist/chunk-VL2HLMVE.mjs +80 -0
- package/dist/chunk-Z64RCGRQ.mjs +74 -0
- package/dist/components/vite.marko +34 -0
- package/dist/esbuild-plugin.d.ts +3 -0
- package/dist/esbuild-plugin.js +97 -0
- package/dist/esbuild-plugin.mjs +6 -0
- package/dist/{cjs/index.d.ts → index.d.ts} +1 -1
- package/dist/index.js +416 -0
- package/dist/index.mjs +400 -0
- package/dist/{cjs/manifest-generator.d.ts → manifest-generator.d.ts} +0 -0
- package/dist/manifest-generator.js +88 -0
- package/dist/manifest-generator.mjs +9 -0
- package/dist/{cjs/render-assets-transform.d.ts → render-assets-transform.d.ts} +0 -0
- package/dist/render-assets-transform.js +34 -0
- package/dist/render-assets-transform.mjs +13 -0
- package/dist/{cjs/serializer.d.ts → serializer.d.ts} +0 -0
- package/dist/serializer.js +100 -0
- package/dist/serializer.mjs +6 -0
- package/dist/{cjs/server-entry-template.d.ts → server-entry-template.d.ts} +0 -0
- package/dist/server-entry-template.js +45 -0
- package/dist/server-entry-template.mjs +6 -0
- package/package.json +62 -45
- package/CHANGELOG.md +0 -72
- package/components/vite-watch.marko +0 -31
- package/components/vite.marko +0 -31
- package/dist/cjs/esbuild-plugin.d.ts +0 -0
- package/dist/cjs/esbuild-plugin.js +0 -2
- package/dist/cjs/esbuild-plugin.js.map +0 -1
- package/dist/cjs/index.js +0 -417
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/manifest-generator.js +0 -63
- package/dist/cjs/manifest-generator.js.map +0 -1
- package/dist/cjs/render-assets-transform.js +0 -12
- package/dist/cjs/render-assets-transform.js.map +0 -1
- package/dist/cjs/serializer.js +0 -81
- package/dist/cjs/serializer.js.map +0 -1
- package/dist/cjs/server-entry-template.js +0 -22
- package/dist/cjs/server-entry-template.js.map +0 -1
- package/dist/esm/esbuild-plugin.d.ts +0 -0
- package/dist/esm/esbuild-plugin.js +0 -2
- package/dist/esm/esbuild-plugin.js.map +0 -1
- package/dist/esm/index.d.ts +0 -10
- package/dist/esm/index.js +0 -413
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/manifest-generator.d.ts +0 -11
- package/dist/esm/manifest-generator.js +0 -57
- package/dist/esm/manifest-generator.js.map +0 -1
- package/dist/esm/render-assets-transform.d.ts +0 -3
- package/dist/esm/render-assets-transform.js +0 -10
- package/dist/esm/render-assets-transform.js.map +0 -1
- package/dist/esm/serializer.d.ts +0 -2
- package/dist/esm/serializer.js +0 -78
- package/dist/esm/serializer.js.map +0 -1
- package/dist/esm/server-entry-template.d.ts +0 -6
- package/dist/esm/server-entry-template.js +0 -19
- package/dist/esm/server-entry-template.js.map +0 -1
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
import {
|
|
2
|
+
esbuildPlugin
|
|
3
|
+
} from "./chunk-Z64RCGRQ.mjs";
|
|
4
|
+
import {
|
|
5
|
+
generateDocManifest,
|
|
6
|
+
generateInputDoc
|
|
7
|
+
} from "./chunk-MPTD6LHF.mjs";
|
|
8
|
+
import "./chunk-VL2HLMVE.mjs";
|
|
9
|
+
import {
|
|
10
|
+
server_entry_template_default
|
|
11
|
+
} from "./chunk-HWRQJHCN.mjs";
|
|
12
|
+
|
|
13
|
+
// src/index.ts
|
|
14
|
+
import os from "os";
|
|
15
|
+
import fs from "fs";
|
|
16
|
+
import path from "path";
|
|
17
|
+
import crypto from "crypto";
|
|
18
|
+
import anyMatch from "anymatch";
|
|
19
|
+
import { pathToFileURL, fileURLToPath } from "url";
|
|
20
|
+
import { relativeImportPath } from "relative-import-path";
|
|
21
|
+
var normalizePath = path.sep === "\\" ? (id) => id.replace(/\\/g, "/") : (id) => id;
|
|
22
|
+
var virtualFiles = /* @__PURE__ */ new Map();
|
|
23
|
+
var queryReg = /\?marko-.+$/;
|
|
24
|
+
var browserEntryQuery = "?marko-browser-entry";
|
|
25
|
+
var serverEntryQuery = "?marko-server-entry";
|
|
26
|
+
var virtualFileQuery = "?marko-virtual";
|
|
27
|
+
var markoExt = ".marko";
|
|
28
|
+
var htmlExt = ".html";
|
|
29
|
+
var resolveOpts = { skipSelf: true };
|
|
30
|
+
var cache = /* @__PURE__ */ new Map();
|
|
31
|
+
var thisFile = typeof __filename === "string" ? __filename : fileURLToPath(import.meta.url);
|
|
32
|
+
var tempDir;
|
|
33
|
+
function markoPlugin(opts = {}) {
|
|
34
|
+
var _a;
|
|
35
|
+
let compiler;
|
|
36
|
+
const { runtimeId, linked = true } = opts;
|
|
37
|
+
const baseConfig = {
|
|
38
|
+
cache,
|
|
39
|
+
runtimeId,
|
|
40
|
+
sourceMaps: true,
|
|
41
|
+
writeVersionComment: false,
|
|
42
|
+
babelConfig: {
|
|
43
|
+
...opts.babelConfig,
|
|
44
|
+
caller: {
|
|
45
|
+
name: "@marko/vite",
|
|
46
|
+
supportsStaticESM: true,
|
|
47
|
+
supportsDynamicImport: true,
|
|
48
|
+
supportsTopLevelAwait: true,
|
|
49
|
+
supportsExportNamespaceFrom: true,
|
|
50
|
+
...(_a = opts.babelConfig) == null ? void 0 : _a.caller
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const resolveViteVirtualDep = (from, dep) => {
|
|
55
|
+
const query = `${virtualFileQuery}&id=${normalizePath(dep.virtualPath)}`;
|
|
56
|
+
const id = normalizePath(from) + query;
|
|
57
|
+
if (devServer) {
|
|
58
|
+
const prev = virtualFiles.get(id);
|
|
59
|
+
if (prev && prev.code !== dep.code) {
|
|
60
|
+
devServer.moduleGraph.invalidateModule(devServer.moduleGraph.getModuleById(id));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
virtualFiles.set(id, dep);
|
|
64
|
+
return `./${path.basename(from) + query}`;
|
|
65
|
+
};
|
|
66
|
+
const ssrConfig = {
|
|
67
|
+
...baseConfig,
|
|
68
|
+
resolveVirtualDependency: resolveViteVirtualDep,
|
|
69
|
+
output: "html"
|
|
70
|
+
};
|
|
71
|
+
const domConfig = {
|
|
72
|
+
...baseConfig,
|
|
73
|
+
resolveVirtualDependency: resolveViteVirtualDep,
|
|
74
|
+
output: "dom"
|
|
75
|
+
};
|
|
76
|
+
const hydrateConfig = {
|
|
77
|
+
...baseConfig,
|
|
78
|
+
resolveVirtualDependency: resolveViteVirtualDep,
|
|
79
|
+
output: "hydrate"
|
|
80
|
+
};
|
|
81
|
+
let root;
|
|
82
|
+
let devEntryFile;
|
|
83
|
+
let isBuild = false;
|
|
84
|
+
let isSSRBuild = false;
|
|
85
|
+
let devServer;
|
|
86
|
+
let registeredTag = false;
|
|
87
|
+
let serverManifest;
|
|
88
|
+
const transformWatchFiles = /* @__PURE__ */ new Map();
|
|
89
|
+
const transformOptionalFiles = /* @__PURE__ */ new Map();
|
|
90
|
+
return [
|
|
91
|
+
{
|
|
92
|
+
name: "marko-vite:pre",
|
|
93
|
+
enforce: "pre",
|
|
94
|
+
async config(config, env) {
|
|
95
|
+
var _a2, _b, _c;
|
|
96
|
+
compiler ?? (compiler = await import(opts.compiler || "@marko/compiler"));
|
|
97
|
+
root = normalizePath(config.root || process.cwd());
|
|
98
|
+
devEntryFile = path.join(root, "index.html");
|
|
99
|
+
isBuild = env.command === "build";
|
|
100
|
+
isSSRBuild = isBuild && linked && Boolean(config.build.ssr);
|
|
101
|
+
if (linked && !registeredTag) {
|
|
102
|
+
const transformer = path.resolve(thisFile, "../render-assets-transform");
|
|
103
|
+
registeredTag = normalizePath(path.resolve(thisFile, "../components", "vite.marko"));
|
|
104
|
+
compiler.taglib.register("@marko/vite", {
|
|
105
|
+
"<_vite>": { template: registeredTag },
|
|
106
|
+
"<head>": { transformer },
|
|
107
|
+
"<body>": { transformer }
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
const lookup = compiler.taglib.buildLookup(root);
|
|
111
|
+
const taglibDeps = [];
|
|
112
|
+
for (const name in lookup.taglibsById) {
|
|
113
|
+
const taglib = lookup.taglibsById[name];
|
|
114
|
+
if (!/^marko-(.+-)?core$/.test(taglib.id) && /[\\/]node_modules[\\/]/.test(taglib.dirname)) {
|
|
115
|
+
for (const tagName in taglib.tags) {
|
|
116
|
+
const tag = taglib.tags[tagName];
|
|
117
|
+
const entry = tag.template || tag.renderer;
|
|
118
|
+
if (entry) {
|
|
119
|
+
taglibDeps.push(relativeImportPath(devEntryFile, entry));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const optimizeDeps = config.optimizeDeps ?? (config.optimizeDeps = {});
|
|
125
|
+
optimizeDeps.include = Array.from(/* @__PURE__ */ new Set([
|
|
126
|
+
...optimizeDeps.include || [],
|
|
127
|
+
...compiler.getRuntimeEntryFiles("dom", opts.translator),
|
|
128
|
+
...compiler.getRuntimeEntryFiles("html", opts.translator),
|
|
129
|
+
...taglibDeps
|
|
130
|
+
]));
|
|
131
|
+
const ssr = config.ssr ?? (config.ssr = {});
|
|
132
|
+
if (ssr.noExternal !== true) {
|
|
133
|
+
ssr.noExternal = Array.from(new Set(taglibDeps.concat(ssr.noExternal || [])));
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
...config,
|
|
137
|
+
optimizeDeps: {
|
|
138
|
+
...config.optimizeDeps,
|
|
139
|
+
extensions: [".marko", ...((_a2 = config.optimizeDeps) == null ? void 0 : _a2.extensions) || []],
|
|
140
|
+
esbuildOptions: {
|
|
141
|
+
plugins: [
|
|
142
|
+
esbuildPlugin(compiler, baseConfig),
|
|
143
|
+
...((_c = (_b = config.optimizeDeps) == null ? void 0 : _b.esbuildOptions) == null ? void 0 : _c.plugins) || []
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
},
|
|
149
|
+
configureServer(_server) {
|
|
150
|
+
ssrConfig.hot = domConfig.hot = true;
|
|
151
|
+
devServer = _server;
|
|
152
|
+
devServer.watcher.on("all", (type, filename) => {
|
|
153
|
+
for (const [id, files] of transformWatchFiles) {
|
|
154
|
+
if (anyMatch(files, filename)) {
|
|
155
|
+
devServer.watcher.emit("change", id);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (type === "add" || type === "unlink") {
|
|
159
|
+
let clearedCache = false;
|
|
160
|
+
for (const [id, files] of transformOptionalFiles) {
|
|
161
|
+
if (anyMatch(files, filename)) {
|
|
162
|
+
if (!clearedCache) {
|
|
163
|
+
baseConfig.cache.clear();
|
|
164
|
+
clearedCache = true;
|
|
165
|
+
}
|
|
166
|
+
devServer.watcher.emit("change", id);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
},
|
|
172
|
+
async buildStart(inputOptions) {
|
|
173
|
+
if (isBuild && linked && !isSSRBuild) {
|
|
174
|
+
const serverMetaFile = await getServerManifestFile(root);
|
|
175
|
+
this.addWatchFile(serverMetaFile);
|
|
176
|
+
try {
|
|
177
|
+
serverManifest = JSON.parse(await fs.promises.readFile(serverMetaFile, "utf-8"));
|
|
178
|
+
inputOptions.input = toHTMLEntries(root, serverManifest.entries);
|
|
179
|
+
} catch (err) {
|
|
180
|
+
this.error(`You must run the "ssr" build before the "browser" build.`);
|
|
181
|
+
}
|
|
182
|
+
if (isEmpty(inputOptions.input)) {
|
|
183
|
+
this.error("No Marko files were found when compiling the server.");
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
async resolveId(importee, importer, importOpts, ssr = importOpts.ssr) {
|
|
188
|
+
var _a2;
|
|
189
|
+
if (virtualFiles.has(importee)) {
|
|
190
|
+
return importee;
|
|
191
|
+
}
|
|
192
|
+
let importeeQuery = getMarkoQuery(importee);
|
|
193
|
+
if (importeeQuery) {
|
|
194
|
+
importee = importee.slice(0, -importeeQuery.length);
|
|
195
|
+
} else if (ssr && linked && importer && importer !== devEntryFile && isMarkoFile(importee) && !isMarkoFile(importer.replace(queryReg, ""))) {
|
|
196
|
+
importeeQuery = serverEntryQuery;
|
|
197
|
+
} else if (!ssr && isBuild && importer && isMarkoFile(importee) && ((_a2 = this.getModuleInfo(importer)) == null ? void 0 : _a2.isEntry)) {
|
|
198
|
+
importeeQuery = browserEntryQuery;
|
|
199
|
+
}
|
|
200
|
+
if (importeeQuery) {
|
|
201
|
+
const resolved = importee[0] === "." ? {
|
|
202
|
+
id: normalizePath(importer ? path.resolve(importer, "..", importee) : path.resolve(root, importee))
|
|
203
|
+
} : await this.resolve(importee, importer, resolveOpts);
|
|
204
|
+
if (resolved) {
|
|
205
|
+
resolved.id += importeeQuery;
|
|
206
|
+
}
|
|
207
|
+
return resolved;
|
|
208
|
+
}
|
|
209
|
+
return null;
|
|
210
|
+
},
|
|
211
|
+
async load(id) {
|
|
212
|
+
switch (getMarkoQuery(id)) {
|
|
213
|
+
case serverEntryQuery: {
|
|
214
|
+
const fileName = id.slice(0, -serverEntryQuery.length);
|
|
215
|
+
let entryData;
|
|
216
|
+
if (isBuild) {
|
|
217
|
+
const relativeFileName = path.posix.relative(root, fileName);
|
|
218
|
+
const entryId = toEntryId(relativeFileName);
|
|
219
|
+
serverManifest ?? (serverManifest = {
|
|
220
|
+
entries: {},
|
|
221
|
+
chunksNeedingAssets: []
|
|
222
|
+
});
|
|
223
|
+
serverManifest.entries[entryId] = relativeFileName;
|
|
224
|
+
entryData = JSON.stringify(entryId);
|
|
225
|
+
} else {
|
|
226
|
+
entryData = JSON.stringify(await generateDocManifest(await devServer.transformIndexHtml("/", generateInputDoc(fileNameToURL(fileName, root)))));
|
|
227
|
+
}
|
|
228
|
+
return server_entry_template_default({
|
|
229
|
+
fileName,
|
|
230
|
+
entryData,
|
|
231
|
+
runtimeId
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
case browserEntryQuery:
|
|
235
|
+
return fs.promises.readFile(id.slice(0, -browserEntryQuery.length), "utf-8");
|
|
236
|
+
}
|
|
237
|
+
return virtualFiles.get(id) || null;
|
|
238
|
+
},
|
|
239
|
+
async transformIndexHtml(html) {
|
|
240
|
+
if (isBuild) {
|
|
241
|
+
return html;
|
|
242
|
+
}
|
|
243
|
+
return html.replace(/(src\s*=\s*(['"])(?:(?!\2).)*\.marko)(?:\?((?:(?!\2).)*))?\2/gim, (_, prefix, quote, query) => prefix + browserEntryQuery + (query ? "&" + query : "") + quote);
|
|
244
|
+
},
|
|
245
|
+
async transform(source, id, ssr) {
|
|
246
|
+
const query = getMarkoQuery(id);
|
|
247
|
+
if (query && !query.startsWith(virtualFileQuery)) {
|
|
248
|
+
id = id.slice(0, -query.length);
|
|
249
|
+
if (query === serverEntryQuery) {
|
|
250
|
+
id = `${id.slice(0, -markoExt.length)}.entry.marko`;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
if (!isMarkoFile(id)) {
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
const compiled = await compiler.compile(source, id, (typeof ssr === "object" ? ssr.ssr : ssr) ? ssrConfig : query === browserEntryQuery ? hydrateConfig : domConfig);
|
|
257
|
+
const { map, meta } = compiled;
|
|
258
|
+
let { code } = compiled;
|
|
259
|
+
if (query !== browserEntryQuery && devServer) {
|
|
260
|
+
code += `
|
|
261
|
+
if (import.meta.hot) import.meta.hot.accept();`;
|
|
262
|
+
}
|
|
263
|
+
if (devServer) {
|
|
264
|
+
const templateName = getBasenameWithoutExt(id);
|
|
265
|
+
const optionalFilePrefix = path.dirname(id) + path.sep + (templateName === "index" ? "" : `${templateName}.`);
|
|
266
|
+
for (const file of meta.watchFiles) {
|
|
267
|
+
this.addWatchFile(file);
|
|
268
|
+
}
|
|
269
|
+
transformOptionalFiles.set(id, [
|
|
270
|
+
`${optionalFilePrefix}style.*`,
|
|
271
|
+
`${optionalFilePrefix}component.*`,
|
|
272
|
+
`${optionalFilePrefix}component-browser.*`,
|
|
273
|
+
`${optionalFilePrefix}marko-tag.json`
|
|
274
|
+
]);
|
|
275
|
+
transformWatchFiles.set(id, meta.watchFiles);
|
|
276
|
+
}
|
|
277
|
+
return { code, map };
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
name: "marko-vite:post",
|
|
282
|
+
apply: "build",
|
|
283
|
+
enforce: "post",
|
|
284
|
+
async generateBundle(outputOptions, bundle, isWrite) {
|
|
285
|
+
if (!linked) {
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
if (!isWrite) {
|
|
289
|
+
this.error(`Linked builds are currently only supported when in "write" mode.`);
|
|
290
|
+
}
|
|
291
|
+
if (!serverManifest) {
|
|
292
|
+
this.error("No Marko files were found when bundling the server in linked mode.");
|
|
293
|
+
}
|
|
294
|
+
if (isSSRBuild) {
|
|
295
|
+
const dir = outputOptions.dir ? path.resolve(outputOptions.dir) : path.resolve(outputOptions.file, "..");
|
|
296
|
+
for (const fileName in bundle) {
|
|
297
|
+
const chunk = bundle[fileName];
|
|
298
|
+
if (chunk.type === "chunk") {
|
|
299
|
+
for (const id in chunk.modules) {
|
|
300
|
+
if (id === registeredTag) {
|
|
301
|
+
serverManifest.chunksNeedingAssets.push(path.resolve(dir, fileName));
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
await fs.promises.writeFile(await getServerManifestFile(root), JSON.stringify(serverManifest));
|
|
308
|
+
} else {
|
|
309
|
+
const browserManifest = {};
|
|
310
|
+
for (const entryId in serverManifest.entries) {
|
|
311
|
+
const fileName = serverManifest.entries[entryId];
|
|
312
|
+
let chunkId = fileName + htmlExt;
|
|
313
|
+
let chunk = bundle[chunkId];
|
|
314
|
+
if (!chunk) {
|
|
315
|
+
chunkId = chunkId.replace(/\//g, "\\");
|
|
316
|
+
chunk = bundle[chunkId];
|
|
317
|
+
}
|
|
318
|
+
if ((chunk == null ? void 0 : chunk.type) === "asset") {
|
|
319
|
+
browserManifest[entryId] = await generateDocManifest(chunk.source.toString());
|
|
320
|
+
delete bundle[chunkId];
|
|
321
|
+
} else {
|
|
322
|
+
this.error(`Marko template had unexpected output from vite, ${fileName}`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
const manifestStr = `;var __MARKO_MANIFEST__=${JSON.stringify(browserManifest)};
|
|
326
|
+
`;
|
|
327
|
+
for (const fileName of serverManifest.chunksNeedingAssets) {
|
|
328
|
+
await fs.promises.appendFile(fileName, manifestStr);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
];
|
|
334
|
+
}
|
|
335
|
+
function getMarkoQuery(id) {
|
|
336
|
+
var _a;
|
|
337
|
+
return ((_a = queryReg.exec(id)) == null ? void 0 : _a[0]) || "";
|
|
338
|
+
}
|
|
339
|
+
function isMarkoFile(id) {
|
|
340
|
+
return id.endsWith(markoExt);
|
|
341
|
+
}
|
|
342
|
+
function toHTMLEntries(root, serverEntries) {
|
|
343
|
+
const result = [];
|
|
344
|
+
for (const id in serverEntries) {
|
|
345
|
+
const markoFile = path.posix.join(root, serverEntries[id]);
|
|
346
|
+
const htmlFile = markoFile + htmlExt;
|
|
347
|
+
virtualFiles.set(htmlFile, {
|
|
348
|
+
code: generateInputDoc(markoFile)
|
|
349
|
+
});
|
|
350
|
+
result.push(htmlFile);
|
|
351
|
+
}
|
|
352
|
+
return result;
|
|
353
|
+
}
|
|
354
|
+
async function getServerManifestFile(root) {
|
|
355
|
+
return path.join(await getTempDir(root), "manifest.json");
|
|
356
|
+
}
|
|
357
|
+
function getTempDir(root) {
|
|
358
|
+
return tempDir || (tempDir = (async () => {
|
|
359
|
+
const dir = path.join(os.tmpdir(), `marko-vite-${crypto.createHash("SHA1").update(root).digest("hex")}`);
|
|
360
|
+
try {
|
|
361
|
+
const stat = await fs.promises.stat(dir);
|
|
362
|
+
if (stat.isDirectory()) {
|
|
363
|
+
return dir;
|
|
364
|
+
}
|
|
365
|
+
} catch {
|
|
366
|
+
await fs.promises.mkdir(dir);
|
|
367
|
+
return dir;
|
|
368
|
+
}
|
|
369
|
+
throw new Error("Unable to create temp directory");
|
|
370
|
+
})());
|
|
371
|
+
}
|
|
372
|
+
function toEntryId(id) {
|
|
373
|
+
const lastSepIndex = id.lastIndexOf(path.sep);
|
|
374
|
+
let name = id.slice(lastSepIndex + 1, id.indexOf(".", lastSepIndex));
|
|
375
|
+
if (name === "index" || name === "template") {
|
|
376
|
+
name = id.slice(id.lastIndexOf(path.sep, lastSepIndex - 1) + 1, lastSepIndex);
|
|
377
|
+
}
|
|
378
|
+
return `${name}_${crypto.createHash("SHA1").update(id).digest("base64").replace(/[/+]/g, "-").slice(0, 4)}`;
|
|
379
|
+
}
|
|
380
|
+
function fileNameToURL(fileName, root) {
|
|
381
|
+
const relativeURL = path.posix.relative(pathToFileURL(root).pathname, pathToFileURL(fileName).pathname);
|
|
382
|
+
if (relativeURL[0] === ".") {
|
|
383
|
+
throw new Error("@marko/vite: Entry templates must exist under the current root directory.");
|
|
384
|
+
}
|
|
385
|
+
return `/${relativeURL}`;
|
|
386
|
+
}
|
|
387
|
+
function getBasenameWithoutExt(file) {
|
|
388
|
+
const baseStart = file.lastIndexOf(path.sep) + 1;
|
|
389
|
+
const extStart = file.indexOf(".", baseStart + 1);
|
|
390
|
+
return file.slice(baseStart, extStart);
|
|
391
|
+
}
|
|
392
|
+
function isEmpty(obj) {
|
|
393
|
+
for (const _ in obj) {
|
|
394
|
+
return false;
|
|
395
|
+
}
|
|
396
|
+
return true;
|
|
397
|
+
}
|
|
398
|
+
export {
|
|
399
|
+
markoPlugin as default
|
|
400
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
|
21
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
22
|
+
var manifest_generator_exports = {};
|
|
23
|
+
__export(manifest_generator_exports, {
|
|
24
|
+
generateDocManifest: () => generateDocManifest,
|
|
25
|
+
generateInputDoc: () => generateInputDoc
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(manifest_generator_exports);
|
|
28
|
+
var import_htmlparser2 = require("htmlparser2");
|
|
29
|
+
var import_domelementtype = require("domelementtype");
|
|
30
|
+
var import_domhandler = require("domhandler");
|
|
31
|
+
var import_serializer = __toESM(require("./serializer"));
|
|
32
|
+
const MARKER_COMMENT = "MARKO_VITE";
|
|
33
|
+
function generateDocManifest(rawHtml) {
|
|
34
|
+
return new Promise((resolve, reject) => {
|
|
35
|
+
const parser = new import_htmlparser2.Parser(new import_domhandler.DomHandler(function(err, dom) {
|
|
36
|
+
if (err) {
|
|
37
|
+
return reject(err);
|
|
38
|
+
}
|
|
39
|
+
const htmlChildren = dom.find(isElement).childNodes;
|
|
40
|
+
const headPrepend = [];
|
|
41
|
+
const head = [];
|
|
42
|
+
const bodyPrepend = [];
|
|
43
|
+
const body = [];
|
|
44
|
+
splitNodesByMarker(htmlChildren.find((node) => isElement(node) && node.tagName === "head").childNodes, headPrepend, head);
|
|
45
|
+
splitNodesByMarker(htmlChildren.find((node) => isElement(node) && node.tagName === "body").childNodes, bodyPrepend, body);
|
|
46
|
+
resolve({
|
|
47
|
+
"head-prepend": serializeOrNull(headPrepend),
|
|
48
|
+
head: serializeOrNull(head),
|
|
49
|
+
"body-prepend": serializeOrNull(bodyPrepend),
|
|
50
|
+
body: serializeOrNull(body)
|
|
51
|
+
});
|
|
52
|
+
}));
|
|
53
|
+
parser.write(rawHtml);
|
|
54
|
+
parser.end();
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function generateInputDoc(entry) {
|
|
58
|
+
return `<!DOCTYPE html><html><head><!--${MARKER_COMMENT}--></head><body><!--${MARKER_COMMENT}--><script async type="module" src=${JSON.stringify(entry)}><\/script></body></html>`;
|
|
59
|
+
}
|
|
60
|
+
function serializeOrNull(nodes) {
|
|
61
|
+
const result = (0, import_serializer.default)(nodes);
|
|
62
|
+
if (result.length) {
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
function splitNodesByMarker(nodes, before, after) {
|
|
68
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
69
|
+
let node = nodes[i];
|
|
70
|
+
if (node.data === MARKER_COMMENT) {
|
|
71
|
+
i++;
|
|
72
|
+
for (; i < nodes.length; i++) {
|
|
73
|
+
node = nodes[i];
|
|
74
|
+
after.push(node);
|
|
75
|
+
}
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
before.push(node);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function isElement(node) {
|
|
82
|
+
return node.type === import_domelementtype.ElementType.Tag;
|
|
83
|
+
}
|
|
84
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
85
|
+
0 && (module.exports = {
|
|
86
|
+
generateDocManifest,
|
|
87
|
+
generateInputDoc
|
|
88
|
+
});
|
|
File without changes
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var render_assets_transform_exports = {};
|
|
20
|
+
__export(render_assets_transform_exports, {
|
|
21
|
+
default: () => render_assets_transform_default
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(render_assets_transform_exports);
|
|
24
|
+
var render_assets_transform_default = (tag, t) => {
|
|
25
|
+
const body = tag.get("body");
|
|
26
|
+
const tagName = tag.get("name").node.value;
|
|
27
|
+
body.unshiftContainer("body", renderAssetsCall(t, `${tagName}-prepend`));
|
|
28
|
+
body.pushContainer("body", renderAssetsCall(t, tagName));
|
|
29
|
+
};
|
|
30
|
+
function renderAssetsCall(t, slot) {
|
|
31
|
+
return t.markoPlaceholder(t.callExpression(t.memberExpression(t.memberExpression(t.identifier("out"), t.identifier("global")), t.identifier("___viteRenderAssets")), [t.stringLiteral(slot)]), false);
|
|
32
|
+
}
|
|
33
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
34
|
+
0 && (module.exports = {});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// src/render-assets-transform.ts
|
|
2
|
+
var render_assets_transform_default = (tag, t) => {
|
|
3
|
+
const body = tag.get("body");
|
|
4
|
+
const tagName = tag.get("name").node.value;
|
|
5
|
+
body.unshiftContainer("body", renderAssetsCall(t, `${tagName}-prepend`));
|
|
6
|
+
body.pushContainer("body", renderAssetsCall(t, tagName));
|
|
7
|
+
};
|
|
8
|
+
function renderAssetsCall(t, slot) {
|
|
9
|
+
return t.markoPlaceholder(t.callExpression(t.memberExpression(t.memberExpression(t.identifier("out"), t.identifier("global")), t.identifier("___viteRenderAssets")), [t.stringLiteral(slot)]), false);
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
render_assets_transform_default as default
|
|
13
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var serializer_exports = {};
|
|
20
|
+
__export(serializer_exports, {
|
|
21
|
+
default: () => serialize
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(serializer_exports);
|
|
24
|
+
var import_domelementtype = require("domelementtype");
|
|
25
|
+
const voidElements = /* @__PURE__ */ new Set([
|
|
26
|
+
"area",
|
|
27
|
+
"base",
|
|
28
|
+
"br",
|
|
29
|
+
"col",
|
|
30
|
+
"embed",
|
|
31
|
+
"hr",
|
|
32
|
+
"img",
|
|
33
|
+
"input",
|
|
34
|
+
"link",
|
|
35
|
+
"meta",
|
|
36
|
+
"param",
|
|
37
|
+
"source",
|
|
38
|
+
"track",
|
|
39
|
+
"wbr"
|
|
40
|
+
]);
|
|
41
|
+
function serialize(nodes, parts) {
|
|
42
|
+
let curString = parts ? parts.pop() : "";
|
|
43
|
+
parts ?? (parts = []);
|
|
44
|
+
for (const node of nodes) {
|
|
45
|
+
switch (node.type) {
|
|
46
|
+
case import_domelementtype.ElementType.Tag:
|
|
47
|
+
case import_domelementtype.ElementType.Style:
|
|
48
|
+
case import_domelementtype.ElementType.Script: {
|
|
49
|
+
const tag = node;
|
|
50
|
+
const { name } = tag;
|
|
51
|
+
curString += `<${name}`;
|
|
52
|
+
switch (tag.tagName) {
|
|
53
|
+
case "script":
|
|
54
|
+
parts.push(curString);
|
|
55
|
+
curString = "";
|
|
56
|
+
break;
|
|
57
|
+
case "style":
|
|
58
|
+
parts.push(curString);
|
|
59
|
+
curString = "";
|
|
60
|
+
break;
|
|
61
|
+
case "link":
|
|
62
|
+
if (tag.attribs.rel === "stylesheet") {
|
|
63
|
+
parts.push(curString);
|
|
64
|
+
curString = "";
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
for (const attr of tag.attributes) {
|
|
69
|
+
curString += ` ${attr.value === "" ? attr.name : `${attr.name}="${attr.value.replace(/"/g, "'")}"`}`;
|
|
70
|
+
}
|
|
71
|
+
curString += ">";
|
|
72
|
+
if (tag.children.length) {
|
|
73
|
+
parts.push(curString);
|
|
74
|
+
serialize(tag.children, parts);
|
|
75
|
+
curString = parts.pop();
|
|
76
|
+
}
|
|
77
|
+
if (!voidElements.has(name)) {
|
|
78
|
+
curString += `</${name}>`;
|
|
79
|
+
}
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
case import_domelementtype.ElementType.Text: {
|
|
83
|
+
const text = node.data;
|
|
84
|
+
if (!/^\s*$/.test(text)) {
|
|
85
|
+
curString += text;
|
|
86
|
+
}
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case import_domelementtype.ElementType.Comment:
|
|
90
|
+
curString += `<!--${node.data}-->`;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (curString) {
|
|
95
|
+
parts.push(curString);
|
|
96
|
+
}
|
|
97
|
+
return parts;
|
|
98
|
+
}
|
|
99
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
100
|
+
0 && (module.exports = {});
|
|
File without changes
|