@embroider/vite 0.2.2-unstable.7afa1cc → 0.2.2-unstable.89cc372
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/{index.mjs → dist/index.d.ts} +1 -0
- package/{index.d.ts → dist/index.js} +5 -1
- package/dist/index.js.map +1 -0
- package/{src → dist/src}/assets.js +6 -2
- package/dist/src/assets.js.map +1 -0
- package/dist/src/build-once.d.ts +1 -0
- package/dist/src/build-once.js +13 -0
- package/dist/src/build-once.js.map +1 -0
- package/{src → dist/src}/build.js +3 -3
- package/dist/src/build.js.map +1 -0
- package/dist/src/classic-ember-support.js.map +1 -0
- package/dist/src/content-for.js.map +1 -0
- package/dist/src/ember.js.map +1 -0
- package/{src → dist/src}/esbuild-request.d.ts +12 -9
- package/{src → dist/src}/esbuild-request.js +29 -14
- package/dist/src/esbuild-request.js.map +1 -0
- package/{src → dist/src}/esbuild-resolver.js +9 -36
- package/dist/src/esbuild-resolver.js.map +1 -0
- package/dist/src/hbs.js +34 -0
- package/dist/src/hbs.js.map +1 -0
- package/dist/src/optimize-deps.js.map +1 -0
- package/{src → dist/src}/request.d.ts +5 -3
- package/{src → dist/src}/request.js +19 -16
- package/dist/src/request.js.map +1 -0
- package/{src → dist/src}/resolver.d.ts +1 -1
- package/{src → dist/src}/resolver.js +77 -57
- package/dist/src/resolver.js.map +1 -0
- package/{src → dist/src}/scripts.js +13 -2
- package/dist/src/scripts.js.map +1 -0
- package/dist/src/template-tag.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +10 -14
- package/src/assets.js.map +0 -1
- package/src/build.js.map +0 -1
- package/src/classic-ember-support.js.map +0 -1
- package/src/content-for.js.map +0 -1
- package/src/ember.js.map +0 -1
- package/src/esbuild-request.js.map +0 -1
- package/src/esbuild-resolver.js.map +0 -1
- package/src/hbs.js +0 -89
- package/src/hbs.js.map +0 -1
- package/src/optimize-deps.js.map +0 -1
- package/src/request.js.map +0 -1
- package/src/resolver.js.map +0 -1
- package/src/scripts.js.map +0 -1
- package/src/template-tag.js.map +0 -1
- /package/{src → dist/src}/assets.d.ts +0 -0
- /package/{src → dist/src}/build.d.ts +0 -0
- /package/{src → dist/src}/classic-ember-support.d.ts +0 -0
- /package/{src → dist/src}/classic-ember-support.js +0 -0
- /package/{src → dist/src}/content-for.d.ts +0 -0
- /package/{src → dist/src}/content-for.js +0 -0
- /package/{src → dist/src}/ember.d.ts +0 -0
- /package/{src → dist/src}/ember.js +0 -0
- /package/{src → dist/src}/esbuild-resolver.d.ts +0 -0
- /package/{src → dist/src}/hbs.d.ts +0 -0
- /package/{src → dist/src}/optimize-deps.d.ts +0 -0
- /package/{src → dist/src}/optimize-deps.js +0 -0
- /package/{src → dist/src}/scripts.d.ts +0 -0
- /package/{src → dist/src}/template-tag.d.ts +0 -0
- /package/{src → dist/src}/template-tag.js +0 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { normalizePath } from 'vite';
|
|
1
2
|
import core, { ModuleRequest } from '@embroider/core';
|
|
2
3
|
const { virtualContent, ResolverLoader, explicitRelative, cleanUrl, tmpdir } = core;
|
|
3
|
-
import { RollupRequestAdapter
|
|
4
|
+
import { RollupRequestAdapter } from './request.js';
|
|
4
5
|
import { assertNever } from 'assert-never';
|
|
5
6
|
import makeDebug from 'debug';
|
|
6
|
-
import {
|
|
7
|
+
import { join, resolve } from 'path';
|
|
7
8
|
import { writeStatus } from './esbuild-request.js';
|
|
8
9
|
import { externalName } from '@embroider/reverse-exports';
|
|
9
10
|
import fs from 'fs-extra';
|
|
@@ -15,6 +16,60 @@ export function resolver() {
|
|
|
15
16
|
let server;
|
|
16
17
|
const virtualDeps = new Map();
|
|
17
18
|
const notViteDeps = new Set();
|
|
19
|
+
const responseMetas = new Map();
|
|
20
|
+
async function resolveId(context, source, importer, options) {
|
|
21
|
+
var _a;
|
|
22
|
+
// vite 5 exposes `custom.depscan`, vite 6 exposes `options.scan`
|
|
23
|
+
if (((_a = options.custom) === null || _a === void 0 ? void 0 : _a.depScan) || options.scan) {
|
|
24
|
+
return await observeDepScan(context, source, importer, options);
|
|
25
|
+
}
|
|
26
|
+
let request = ModuleRequest.create(RollupRequestAdapter.create, {
|
|
27
|
+
context,
|
|
28
|
+
source,
|
|
29
|
+
importer,
|
|
30
|
+
custom: options.custom,
|
|
31
|
+
});
|
|
32
|
+
if (!request) {
|
|
33
|
+
// fallthrough to other rollup plugins
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
let resolution = await resolverLoader.resolver.resolve(request);
|
|
37
|
+
switch (resolution.type) {
|
|
38
|
+
case 'found':
|
|
39
|
+
if (resolution.virtual) {
|
|
40
|
+
return resolution.result;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
return await maybeCaptureNewOptimizedDep(context, resolverLoader.resolver, resolution.result, notViteDeps);
|
|
44
|
+
}
|
|
45
|
+
case 'not_found':
|
|
46
|
+
return null;
|
|
47
|
+
default:
|
|
48
|
+
throw assertNever(resolution);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async function ensureVirtualResolve(context, specifier) {
|
|
52
|
+
var _a;
|
|
53
|
+
let result = await resolveId(context, specifier, resolve(resolverLoader.resolver.options.appRoot, 'package.json'), {});
|
|
54
|
+
if (!result) {
|
|
55
|
+
throw new Error(`bug: expected to resolve ${specifier}`);
|
|
56
|
+
}
|
|
57
|
+
if (typeof result === 'string') {
|
|
58
|
+
throw new Error(`bug: expected to get a PartialResolvedId`);
|
|
59
|
+
}
|
|
60
|
+
let meta = (_a = result.meta) === null || _a === void 0 ? void 0 : _a['embroider-resolver'];
|
|
61
|
+
if (!meta) {
|
|
62
|
+
throw new Error(`bug: no response meta for ${specifier}`);
|
|
63
|
+
}
|
|
64
|
+
return meta;
|
|
65
|
+
}
|
|
66
|
+
async function emitVirtualFile(context, fileName) {
|
|
67
|
+
context.emitFile({
|
|
68
|
+
type: 'asset',
|
|
69
|
+
fileName,
|
|
70
|
+
source: virtualContent((await ensureVirtualResolve(context, fileName)).virtual, resolverLoader.resolver).src,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
18
73
|
let mode = '';
|
|
19
74
|
return {
|
|
20
75
|
name: 'embroider-resolver',
|
|
@@ -41,11 +96,13 @@ export function resolver() {
|
|
|
41
96
|
return () => {
|
|
42
97
|
server.middlewares.use((req, _res, next) => {
|
|
43
98
|
const base = server.config.base || '/';
|
|
44
|
-
|
|
99
|
+
let originalUrl = req.originalUrl;
|
|
100
|
+
if (originalUrl === null || originalUrl === void 0 ? void 0 : originalUrl.startsWith(base)) {
|
|
101
|
+
originalUrl = req.originalUrl.slice(base.length - 1);
|
|
102
|
+
}
|
|
45
103
|
if (originalUrl && originalUrl.length > 1) {
|
|
46
104
|
if (originalUrl === null || originalUrl === void 0 ? void 0 : originalUrl.match(/^\/tests($|\?)/)) {
|
|
47
|
-
req.
|
|
48
|
-
req.url = `${base}tests/index.html`;
|
|
105
|
+
req.url = `/tests/index.html`;
|
|
49
106
|
return next();
|
|
50
107
|
}
|
|
51
108
|
}
|
|
@@ -55,67 +112,30 @@ export function resolver() {
|
|
|
55
112
|
},
|
|
56
113
|
async resolveId(source, importer, options) {
|
|
57
114
|
var _a;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
let request = ModuleRequest.create(RollupRequestAdapter.create, {
|
|
62
|
-
context: this,
|
|
63
|
-
source,
|
|
64
|
-
importer,
|
|
65
|
-
custom: options.custom,
|
|
66
|
-
});
|
|
67
|
-
if (!request) {
|
|
68
|
-
// fallthrough to other rollup plugins
|
|
69
|
-
return null;
|
|
115
|
+
let resolution = await resolveId(this, source, importer, options);
|
|
116
|
+
if (typeof resolution === 'string') {
|
|
117
|
+
return resolution;
|
|
70
118
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
case 'found':
|
|
74
|
-
if (resolution.isVirtual) {
|
|
75
|
-
return resolution.result;
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
return await maybeCaptureNewOptimizedDep(this, resolverLoader.resolver, resolution.result, notViteDeps);
|
|
79
|
-
}
|
|
80
|
-
case 'ignored':
|
|
81
|
-
return resolution.result;
|
|
82
|
-
case 'not_found':
|
|
83
|
-
return null;
|
|
84
|
-
default:
|
|
85
|
-
throw assertNever(resolution);
|
|
119
|
+
if (resolution && ((_a = resolution.meta) === null || _a === void 0 ? void 0 : _a['embroider-resolver'])) {
|
|
120
|
+
responseMetas.set(normalizePath(resolution.id), resolution.meta['embroider-resolver']);
|
|
86
121
|
}
|
|
122
|
+
return resolution;
|
|
87
123
|
},
|
|
88
124
|
load(id) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
let { src, watches } = virtualContent(
|
|
125
|
+
let meta = responseMetas.get(normalizePath(id));
|
|
126
|
+
if (meta === null || meta === void 0 ? void 0 : meta.virtual) {
|
|
127
|
+
let { src, watches } = virtualContent(meta.virtual, resolverLoader.resolver);
|
|
92
128
|
virtualDeps.set(id, watches);
|
|
93
129
|
server === null || server === void 0 ? void 0 : server.watcher.add(watches);
|
|
94
130
|
return src;
|
|
95
131
|
}
|
|
96
132
|
},
|
|
97
|
-
buildEnd() {
|
|
98
|
-
this.
|
|
99
|
-
|
|
100
|
-
fileName: '@embroider/virtual/vendor.js',
|
|
101
|
-
source: virtualContent(resolve(resolverLoader.resolver.options.engines[0].root, '-embroider-vendor.js'), resolverLoader.resolver).src,
|
|
102
|
-
});
|
|
103
|
-
this.emitFile({
|
|
104
|
-
type: 'asset',
|
|
105
|
-
fileName: '@embroider/virtual/vendor.css',
|
|
106
|
-
source: virtualContent(resolve(resolverLoader.resolver.options.engines[0].root, '-embroider-vendor-styles.css'), resolverLoader.resolver).src,
|
|
107
|
-
});
|
|
133
|
+
async buildEnd() {
|
|
134
|
+
emitVirtualFile(this, '@embroider/virtual/vendor.js');
|
|
135
|
+
emitVirtualFile(this, '@embroider/virtual/vendor.css');
|
|
108
136
|
if (mode !== 'production') {
|
|
109
|
-
this.
|
|
110
|
-
|
|
111
|
-
fileName: '@embroider/virtual/test-support.js',
|
|
112
|
-
source: virtualContent(resolve(resolverLoader.resolver.options.engines[0].root, '-embroider-test-support.js'), resolverLoader.resolver).src,
|
|
113
|
-
});
|
|
114
|
-
this.emitFile({
|
|
115
|
-
type: 'asset',
|
|
116
|
-
fileName: '@embroider/virtual/test-support.css',
|
|
117
|
-
source: virtualContent(resolve(resolverLoader.resolver.options.engines[0].root, '-embroider-test-support-styles.css'), resolverLoader.resolver).src,
|
|
118
|
-
});
|
|
137
|
+
emitVirtualFile(this, '@embroider/virtual/test-support.js');
|
|
138
|
+
emitVirtualFile(this, '@embroider/virtual/test-support.css');
|
|
119
139
|
}
|
|
120
140
|
},
|
|
121
141
|
};
|
|
@@ -137,7 +157,7 @@ async function observeDepScan(context, source, importer, options) {
|
|
|
137
157
|
...options,
|
|
138
158
|
skipSelf: true,
|
|
139
159
|
});
|
|
140
|
-
writeStatus(source, result ? 'found' : 'not_found');
|
|
160
|
+
writeStatus(source, result ? { type: 'found', filename: result.id } : { type: 'not_found' });
|
|
141
161
|
return result;
|
|
142
162
|
}
|
|
143
163
|
function idFromResult(result) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Plugin, type ViteDevServer, normalizePath } from 'vite';\nimport core, { ModuleRequest, type Resolver } from '@embroider/core';\nconst { virtualContent, ResolverLoader, explicitRelative, cleanUrl, tmpdir } = core;\nimport { type ResponseMeta, RollupRequestAdapter } from './request.js';\nimport { assertNever } from 'assert-never';\nimport makeDebug from 'debug';\nimport { join, resolve } from 'path';\nimport { writeStatus } from './esbuild-request.js';\nimport type { PluginContext, ResolveIdResult } from 'rollup';\nimport { externalName } from '@embroider/reverse-exports';\nimport fs from 'fs-extra';\nimport { createHash } from 'crypto';\n\nconst { ensureSymlinkSync, outputJSONSync } = fs;\n\nconst debug = makeDebug('embroider:vite');\n\nexport function resolver(): Plugin {\n const resolverLoader = new ResolverLoader(process.cwd());\n let server: ViteDevServer;\n const virtualDeps: Map<string, string[]> = new Map();\n const notViteDeps = new Set<string>();\n const responseMetas: Map<string, ResponseMeta> = new Map();\n\n async function resolveId(\n context: PluginContext,\n source: string,\n importer: string | undefined,\n options: { custom?: Record<string, unknown>; scan?: boolean }\n ) {\n // vite 5 exposes `custom.depscan`, vite 6 exposes `options.scan`\n if (options.custom?.depScan || options.scan) {\n return await observeDepScan(context, source, importer, options);\n }\n\n let request = ModuleRequest.create(RollupRequestAdapter.create, {\n context,\n source,\n importer,\n custom: options.custom,\n });\n if (!request) {\n // fallthrough to other rollup plugins\n return null;\n }\n let resolution = await resolverLoader.resolver.resolve(request);\n switch (resolution.type) {\n case 'found':\n if (resolution.virtual) {\n return resolution.result;\n } else {\n return await maybeCaptureNewOptimizedDep(context, resolverLoader.resolver, resolution.result, notViteDeps);\n }\n case 'not_found':\n return null;\n default:\n throw assertNever(resolution);\n }\n }\n\n async function ensureVirtualResolve(context: PluginContext, specifier: string): Promise<ResponseMeta> {\n let result = await resolveId(\n context,\n specifier,\n resolve(resolverLoader.resolver.options.appRoot, 'package.json'),\n {}\n );\n if (!result) {\n throw new Error(`bug: expected to resolve ${specifier}`);\n }\n if (typeof result === 'string') {\n throw new Error(`bug: expected to get a PartialResolvedId`);\n }\n let meta = result.meta?.['embroider-resolver'] as ResponseMeta | undefined;\n if (!meta) {\n throw new Error(`bug: no response meta for ${specifier}`);\n }\n return meta;\n }\n\n async function emitVirtualFile(context: PluginContext, fileName: string): Promise<void> {\n context.emitFile({\n type: 'asset',\n fileName,\n source: virtualContent((await ensureVirtualResolve(context, fileName)).virtual, resolverLoader.resolver).src,\n });\n }\n\n let mode = '';\n\n return {\n name: 'embroider-resolver',\n enforce: 'pre',\n\n configResolved(config) {\n mode = config.mode;\n },\n\n configureServer(s) {\n server = s;\n server.watcher.on('all', (_eventName, path) => {\n for (let [id, watches] of virtualDeps) {\n for (let watch of watches) {\n if (path.startsWith(watch)) {\n debug('Invalidate %s because %s', id, path);\n server.moduleGraph.onFileChange(id);\n let m = server.moduleGraph.getModuleById(id);\n if (m) {\n server.reloadModule(m);\n }\n }\n }\n }\n });\n return () => {\n server.middlewares.use((req, _res, next) => {\n const base = server.config.base || '/';\n let originalUrl = req.originalUrl;\n if (originalUrl?.startsWith(base)) {\n originalUrl = req.originalUrl!.slice(base.length - 1);\n }\n if (originalUrl && originalUrl.length > 1) {\n if (originalUrl?.match(/^\\/tests($|\\?)/)) {\n req.url = `/tests/index.html`;\n return next();\n }\n }\n return next();\n });\n };\n },\n\n async resolveId(source, importer, options) {\n let resolution = await resolveId(this, source, importer, options);\n if (typeof resolution === 'string') {\n return resolution;\n }\n if (resolution && resolution.meta?.['embroider-resolver']) {\n responseMetas.set(normalizePath(resolution.id), resolution.meta['embroider-resolver'] as ResponseMeta);\n }\n return resolution;\n },\n\n load(id) {\n let meta = responseMetas.get(normalizePath(id));\n if (meta?.virtual) {\n let { src, watches } = virtualContent(meta.virtual, resolverLoader.resolver);\n virtualDeps.set(id, watches);\n server?.watcher.add(watches);\n return src;\n }\n },\n async buildEnd() {\n emitVirtualFile(this, '@embroider/virtual/vendor.js');\n emitVirtualFile(this, '@embroider/virtual/vendor.css');\n\n if (mode !== 'production') {\n emitVirtualFile(this, '@embroider/virtual/test-support.js');\n emitVirtualFile(this, '@embroider/virtual/test-support.css');\n }\n },\n };\n}\n\n// During depscan, we have a wildly different job than during normal\n// usage. Embroider's esbuild resolver plugin replaces this rollup\n// resolver plugin for actually doing resolving, so we don't do any of\n// that. But we are still well-positioned to observe what vite's rollup\n// resolver plugin is doing, and that is important because vite's\n// esbuild depscan plugin will always obscure the results before\n// embroider's esbuild resolver plugin can see them. It obscures the\n// results by marking *both* \"not found\" and \"this is a third-party\n// package\" as \"external: true\". We really care about the difference\n// between the two, since we have fallback behaviors that should apply\n// to \"not found\" that should not apply to successfully discovered\n// third-party packages.\nasync function observeDepScan(context: PluginContext, source: string, importer: string | undefined, options: any) {\n let result = await context.resolve(source, importer, {\n ...options,\n skipSelf: true,\n });\n writeStatus(source, result ? { type: 'found', filename: result.id } : { type: 'not_found' });\n return result;\n}\n\nfunction idFromResult(result: ResolveIdResult): string | undefined {\n if (!result) {\n return undefined;\n }\n if (typeof result === 'string') {\n return cleanUrl(result);\n }\n return cleanUrl(result.id);\n}\n\nfunction hashed(path: string): string {\n let h = createHash('sha1');\n return h.update(path).digest('hex').slice(0, 8);\n}\n\nasync function maybeCaptureNewOptimizedDep(\n context: PluginContext,\n resolver: Resolver,\n result: ResolveIdResult,\n notViteDeps: Set<string>\n): Promise<ResolveIdResult> {\n let foundFile = idFromResult(result);\n if (!foundFile) {\n return result;\n }\n if (foundFile.startsWith(join(resolver.packageCache.appRoot, 'node_modules', '.vite'))) {\n debug('maybeCaptureNewOptimizedDep: %s already in vite deps', foundFile);\n return result;\n }\n let pkg = resolver.packageCache.ownerOfFile(foundFile);\n if (!pkg?.isV2Addon()) {\n debug('maybeCaptureNewOptimizedDep: %s not in v2 addon', foundFile);\n return result;\n }\n let target = externalName(pkg.packageJSON, explicitRelative(pkg.root, foundFile));\n if (!target) {\n debug('maybeCaptureNewOptimizedDep: %s is not exported', foundFile);\n return result;\n }\n\n if (notViteDeps.has(foundFile)) {\n debug('maybeCaptureNewOptimizedDep: already attmpted %s', foundFile);\n return result;\n }\n\n debug('maybeCaptureNewOptimizedDep: doing re-resolve for %s ', foundFile);\n\n let jumpRoot = join(tmpdir, 'embroider-vite-jump', hashed(pkg.root));\n let fromFile = join(jumpRoot, 'package.json');\n outputJSONSync(fromFile, {\n name: 'jump-root',\n });\n ensureSymlinkSync(pkg.root, join(jumpRoot, 'node_modules', pkg.name));\n let newResult = await context.resolve(target, fromFile);\n if (newResult) {\n if (idFromResult(newResult) === foundFile) {\n // This case is normal. For example, people could be using\n // `optimizeDeps.exclude` or they might be working in a monorepo where an\n // addon is not in node_modules. In both cases vite will decide not to\n // optimize the file, even though we gave it a chance to.\n //\n // We cache that result so we don't keep trying.\n debug('maybeCaptureNewOptimizedDep: %s did not become an optimized dep', foundFile);\n notViteDeps.add(foundFile);\n }\n\n return newResult;\n } else {\n return result;\n }\n}\n"]}
|
|
@@ -17,10 +17,12 @@ export function scripts(params) {
|
|
|
17
17
|
return '/' + name;
|
|
18
18
|
}
|
|
19
19
|
});
|
|
20
|
+
let config = null;
|
|
20
21
|
return {
|
|
21
22
|
name: 'embroider-scripts',
|
|
22
23
|
enforce: 'pre',
|
|
23
24
|
configResolved(resolvedConfig) {
|
|
25
|
+
config = resolvedConfig;
|
|
24
26
|
optimizer = new ScriptOptimizer(resolvedConfig.root);
|
|
25
27
|
},
|
|
26
28
|
async generateBundle() {
|
|
@@ -35,7 +37,7 @@ export function scripts(params) {
|
|
|
35
37
|
// we don't do anything in `vite dev`, we only need to work in `vite
|
|
36
38
|
// build`
|
|
37
39
|
if (!context.server) {
|
|
38
|
-
return optimizer.transformHTML(htmlIn);
|
|
40
|
+
return optimizer.transformHTML(htmlIn, config.base);
|
|
39
41
|
}
|
|
40
42
|
},
|
|
41
43
|
};
|
|
@@ -100,10 +102,16 @@ class ScriptOptimizer {
|
|
|
100
102
|
fileParts.splice(fileParts.length - 1, 0, hash);
|
|
101
103
|
return fileParts.join('.');
|
|
102
104
|
}
|
|
103
|
-
transformHTML(htmlIn) {
|
|
105
|
+
transformHTML(htmlIn, baseUrl) {
|
|
104
106
|
var _a;
|
|
105
107
|
if (((_a = this.transformState) === null || _a === void 0 ? void 0 : _a.htmlIn) !== htmlIn) {
|
|
106
108
|
let parsed = new JSDOM(htmlIn);
|
|
109
|
+
let linkTags = [...parsed.window.document.querySelectorAll('link')];
|
|
110
|
+
for (const linkTag of linkTags) {
|
|
111
|
+
if (linkTag.href.startsWith('/@embroider/virtual')) {
|
|
112
|
+
linkTag.href = baseUrl + linkTag.href.slice(1);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
107
115
|
let scriptTags = [...parsed.window.document.querySelectorAll('script')];
|
|
108
116
|
for (let scriptTag of scriptTags) {
|
|
109
117
|
if (scriptTag.type !== 'module') {
|
|
@@ -111,6 +119,9 @@ class ScriptOptimizer {
|
|
|
111
119
|
if (fingerprinted) {
|
|
112
120
|
scriptTag.src = fingerprinted;
|
|
113
121
|
}
|
|
122
|
+
if (scriptTag.src.startsWith('/@embroider/virtual')) {
|
|
123
|
+
scriptTag.src = baseUrl + scriptTag.src.slice(1);
|
|
124
|
+
}
|
|
114
125
|
}
|
|
115
126
|
}
|
|
116
127
|
let htmlOut = parsed.serialize();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../src/scripts.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Plugin } from 'vite';\nimport type { EmittedFile } from 'rollup';\nimport { JSDOM } from 'jsdom';\nimport fs from 'fs-extra';\nconst { readFileSync, readJSONSync, existsSync } = fs;\nimport { dirname, posix, resolve } from 'path';\n\n// This is a type-only import, so it gets compiled away. At runtime, we load\n// terser lazily so it's only loaded for production builds that use it. Don't\n// add any non-type-only imports here.\nimport type { MinifyOptions } from 'terser';\n\nconst defaults = ['/assets/vendor.js', '/assets/test-support.js'];\n\nexport function scripts(params?: { include?: string[]; exclude?: string[] }): Plugin {\n let optimizer: ScriptOptimizer;\n\n // configured names are always interpreted as origin-absolute URLs.\n let names = (params?.include ?? defaults)\n .filter(name => !params?.exclude?.includes(name))\n .map(name => {\n if (name.startsWith('/')) {\n return name;\n } else {\n return '/' + name;\n }\n });\n\n let config: any = null;\n\n return {\n name: 'embroider-scripts',\n enforce: 'pre',\n\n configResolved(resolvedConfig) {\n config = resolvedConfig;\n optimizer = new ScriptOptimizer(resolvedConfig.root);\n },\n\n async generateBundle() {\n // this hook only runs in `vite build`\n for (let name of names) {\n for (let file of await optimizer.optimizedScript(name)) {\n this.emitFile(file);\n }\n }\n },\n\n transformIndexHtml(htmlIn, context) {\n // we don't do anything in `vite dev`, we only need to work in `vite\n // build`\n if (!context.server) {\n return optimizer.transformHTML(htmlIn, config.base);\n }\n },\n };\n}\n\nclass ScriptOptimizer {\n private emitted = new Map<string, string>();\n private transformState:\n | {\n htmlIn: string;\n htmlOut: string;\n parsed: JSDOM;\n }\n | undefined;\n\n constructor(private rootDir: string) {}\n\n async optimizedScript(script: string): Promise<EmittedFile[]> {\n let fullName = resolve(this.rootDir, script.slice(1));\n if (!existsSync(fullName)) {\n // in prod builds, test-support.js isn't going to exist (for example)\n return [];\n }\n\n // loading these lazily here so they never load in non-production builds.\n // The node cache will ensures we only load them once.\n const [Terser, srcURL] = await Promise.all([import('terser'), import('source-map-url')]);\n\n let inCode = readFileSync(fullName, 'utf8');\n let terserOpts: MinifyOptions = {};\n let fileRelativeSourceMapURL;\n let appRelativeSourceMapURL;\n if (srcURL.default.existsIn(inCode)) {\n fileRelativeSourceMapURL = srcURL.default.getFrom(inCode)!;\n appRelativeSourceMapURL = posix.join(dirname(script.slice(1)), fileRelativeSourceMapURL);\n let content;\n try {\n content = readJSONSync(resolve(this.rootDir, appRelativeSourceMapURL));\n } catch (err) {\n // the script refers to a sourcemap that doesn't exist, so we just leave\n // the map out.\n }\n if (content) {\n terserOpts.sourceMap = { content, url: fileRelativeSourceMapURL };\n }\n }\n let { code: outCode, map: outMap } = await Terser.minify(inCode, terserOpts);\n let finalFilename = await this.getFingerprintedFilename(script, outCode!);\n let emit: EmittedFile[] = [];\n emit.push({\n type: 'asset',\n fileName: finalFilename.slice(1),\n source: outCode!,\n });\n this.emitted.set(script, finalFilename);\n if (appRelativeSourceMapURL && outMap) {\n emit.push({\n type: 'asset',\n fileName: appRelativeSourceMapURL,\n source: JSON.stringify(outMap, null, 2),\n });\n }\n return emit;\n }\n\n async getFingerprintedFilename(filename: string, content: string): Promise<string> {\n let crypto = await import('crypto');\n let md5 = crypto.createHash('md5');\n md5.update(content);\n let hash = md5.digest('hex');\n let fileParts = filename.split('.');\n fileParts.splice(fileParts.length - 1, 0, hash);\n return fileParts.join('.');\n }\n\n transformHTML(htmlIn: string, baseUrl: string) {\n if (this.transformState?.htmlIn !== htmlIn) {\n let parsed = new JSDOM(htmlIn);\n let linkTags = [...parsed.window.document.querySelectorAll('link')] as HTMLLinkElement[];\n for (const linkTag of linkTags) {\n if (linkTag.href.startsWith('/@embroider/virtual')) {\n linkTag.href = baseUrl + linkTag.href.slice(1);\n }\n }\n let scriptTags = [...parsed.window.document.querySelectorAll('script')] as HTMLScriptElement[];\n for (let scriptTag of scriptTags) {\n if (scriptTag.type !== 'module') {\n let fingerprinted = this.emitted.get(scriptTag.src);\n if (fingerprinted) {\n scriptTag.src = fingerprinted;\n }\n if (scriptTag.src.startsWith('/@embroider/virtual')) {\n scriptTag.src = baseUrl + scriptTag.src.slice(1);\n }\n }\n }\n let htmlOut = parsed.serialize();\n this.transformState = { htmlIn, parsed, htmlOut };\n }\n return this.transformState.htmlOut;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-tag.js","sourceRoot":"","sources":["../../src/template-tag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,SAAS,GAAG,YAAY,CAAC,uBAAuB,CAAC,CAAC;AAExD,MAAM,UAAU,WAAW,CAAC,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE;IAC9E,IAAI,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IAEtC,OAAO;QACL,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,KAAK;QAEd,SAAS,CAAC,IAAY,EAAE,EAAU;YAChC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE;gBAChC,QAAQ,EAAE,EAAE;gBACZ,iBAAiB,EAAE,iBAAiB;aACrC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { createFilter } from '@rollup/pluginutils';\nimport type { Plugin } from 'vite';\nimport { Preprocessor } from 'content-tag';\n\nconst gjsFilter = createFilter('**/*.{gjs,gts}?(\\\\?)*');\n\nexport function templateTag({ inline_source_map } = { inline_source_map: false }): Plugin {\n let preprocessor = new Preprocessor();\n\n return {\n name: 'embroider-template-tag',\n enforce: 'pre',\n\n transform(code: string, id: string) {\n if (!gjsFilter(id)) {\n return null;\n }\n return preprocessor.process(code, {\n filename: id,\n inline_source_map: inline_source_map,\n });\n },\n };\n}\n"]}
|