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