@embroider/vite 0.2.1 → 0.2.2-unstable.aaeb674

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/src/resolver.js CHANGED
@@ -1,65 +1,169 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.resolver = resolver;
7
- const path_1 = require("path");
8
- const core_1 = require("@embroider/core");
9
- const fs_extra_1 = require("fs-extra");
10
- const request_1 = require("./request");
11
- const assert_never_1 = __importDefault(require("assert-never"));
12
- function resolver() {
13
- let resolverOptions = (0, fs_extra_1.readJSONSync)((0, path_1.join)((0, core_1.locateEmbroiderWorkingDir)(process.cwd()), 'resolver.json'));
14
- let resolver = new core_1.Resolver(resolverOptions);
1
+ import core from '@embroider/core';
2
+ const { virtualContent, ResolverLoader, explicitRelative, cleanUrl, tmpdir } = core;
3
+ import { RollupModuleRequest, virtualPrefix } from './request.js';
4
+ import { assertNever } from 'assert-never';
5
+ import makeDebug from 'debug';
6
+ import { resolve, join } from 'path';
7
+ import { writeStatus } from './esbuild-request.js';
8
+ import { externalName } from '@embroider/reverse-exports';
9
+ import fs from 'fs-extra';
10
+ import { createHash } from 'crypto';
11
+ const { ensureSymlinkSync, outputJSONSync } = fs;
12
+ const debug = makeDebug('embroider:vite');
13
+ export function resolver() {
14
+ const resolverLoader = new ResolverLoader(process.cwd());
15
+ let server;
16
+ const virtualDeps = new Map();
17
+ const notViteDeps = new Set();
15
18
  return {
16
19
  name: 'embroider-resolver',
17
20
  enforce: 'pre',
21
+ configureServer(s) {
22
+ server = s;
23
+ server.watcher.on('all', (_eventName, path) => {
24
+ for (let [id, watches] of virtualDeps) {
25
+ for (let watch of watches) {
26
+ if (path.startsWith(watch)) {
27
+ debug('Invalidate %s because %s', id, path);
28
+ server.moduleGraph.onFileChange(id);
29
+ let m = server.moduleGraph.getModuleById(id);
30
+ if (m) {
31
+ server.reloadModule(m);
32
+ }
33
+ }
34
+ }
35
+ }
36
+ });
37
+ },
18
38
  async resolveId(source, importer, options) {
19
- let request = request_1.RollupModuleRequest.from(source, importer, options.custom);
39
+ var _a;
40
+ if ((_a = options.custom) === null || _a === void 0 ? void 0 : _a.depScan) {
41
+ return await observeDepScan(this, source, importer, options);
42
+ }
43
+ let request = RollupModuleRequest.from(this, source, importer, options.custom);
20
44
  if (!request) {
21
45
  // fallthrough to other rollup plugins
22
46
  return null;
23
47
  }
24
- let resolution = await resolver.resolve(request, defaultResolve(this));
48
+ let resolution = await resolverLoader.resolver.resolve(request);
25
49
  switch (resolution.type) {
26
50
  case 'found':
51
+ if (resolution.isVirtual) {
52
+ return resolution.result;
53
+ }
54
+ else {
55
+ return await maybeCaptureNewOptimizedDep(this, resolverLoader.resolver, resolution.result, notViteDeps);
56
+ }
57
+ case 'ignored':
27
58
  return resolution.result;
28
59
  case 'not_found':
29
60
  return null;
30
61
  default:
31
- throw (0, assert_never_1.default)(resolution);
62
+ throw assertNever(resolution);
32
63
  }
33
64
  },
34
65
  load(id) {
35
- if (id.startsWith(request_1.virtualPrefix)) {
36
- return (0, core_1.virtualContent)(id.slice(request_1.virtualPrefix.length), resolver);
66
+ if (id.startsWith(virtualPrefix)) {
67
+ let { pathname } = new URL(id, 'http://example.com');
68
+ let { src, watches } = virtualContent(pathname.slice(virtualPrefix.length + 1), resolverLoader.resolver);
69
+ virtualDeps.set(id, watches);
70
+ server === null || server === void 0 ? void 0 : server.watcher.add(watches);
71
+ return src;
37
72
  }
38
73
  },
74
+ buildEnd() {
75
+ this.emitFile({
76
+ type: 'asset',
77
+ fileName: '@embroider/virtual/vendor.js',
78
+ source: virtualContent(resolve(resolverLoader.resolver.options.engines[0].root, '-embroider-vendor.js'), resolverLoader.resolver).src,
79
+ });
80
+ this.emitFile({
81
+ type: 'asset',
82
+ fileName: '@embroider/virtual/test-support.js',
83
+ source: virtualContent(resolve(resolverLoader.resolver.options.engines[0].root, '-embroider-test-support.js'), resolverLoader.resolver).src,
84
+ });
85
+ },
39
86
  };
40
87
  }
41
- function defaultResolve(context) {
42
- return async (request) => {
43
- if (request.isVirtual) {
44
- return {
45
- type: 'found',
46
- result: { id: request.specifier, resolvedBy: request.fromFile },
47
- };
48
- }
49
- let result = await context.resolve(request.specifier, request.fromFile, {
50
- skipSelf: true,
51
- custom: {
52
- embroider: {
53
- meta: request.meta,
54
- },
55
- },
56
- });
57
- if (result) {
58
- return { type: 'found', result };
59
- }
60
- else {
61
- return { type: 'not_found', err: undefined };
88
+ // During depscan, we have a wildly different job than during normal
89
+ // usage. Embroider's esbuild resolver plugin replaces this rollup
90
+ // resolver plugin for actually doing resolving, so we don't do any of
91
+ // that. But we are still well-positioned to observe what vite's rollup
92
+ // resolver plugin is doing, and that is important because vite's
93
+ // esbuild depscan plugin will always obscure the results before
94
+ // embroider's esbuild resolver plugin can see them. It obscures the
95
+ // results by marking *both* "not found" and "this is a third-party
96
+ // package" as "external: true". We really care about the difference
97
+ // between the two, since we have fallback behaviors that should apply
98
+ // to "not found" that should not apply to successfully discovered
99
+ // third-party packages.
100
+ async function observeDepScan(context, source, importer, options) {
101
+ let result = await context.resolve(source, importer, {
102
+ ...options,
103
+ skipSelf: true,
104
+ });
105
+ writeStatus(source, result ? 'found' : 'not_found');
106
+ return result;
107
+ }
108
+ function idFromResult(result) {
109
+ if (!result) {
110
+ return undefined;
111
+ }
112
+ if (typeof result === 'string') {
113
+ return cleanUrl(result);
114
+ }
115
+ return cleanUrl(result.id);
116
+ }
117
+ function hashed(path) {
118
+ let h = createHash('sha1');
119
+ return h.update(path).digest('hex').slice(0, 8);
120
+ }
121
+ async function maybeCaptureNewOptimizedDep(context, resolver, result, notViteDeps) {
122
+ let foundFile = idFromResult(result);
123
+ if (!foundFile) {
124
+ return result;
125
+ }
126
+ if (foundFile.startsWith(join(resolver.packageCache.appRoot, 'node_modules', '.vite'))) {
127
+ debug('maybeCaptureNewOptimizedDep: %s already in vite deps', foundFile);
128
+ return result;
129
+ }
130
+ let pkg = resolver.packageCache.ownerOfFile(foundFile);
131
+ if (!(pkg === null || pkg === void 0 ? void 0 : pkg.isV2Addon())) {
132
+ debug('maybeCaptureNewOptimizedDep: %s not in v2 addon', foundFile);
133
+ return result;
134
+ }
135
+ let target = externalName(pkg.packageJSON, explicitRelative(pkg.root, foundFile));
136
+ if (!target) {
137
+ debug('maybeCaptureNewOptimizedDep: %s is not exported', foundFile);
138
+ return result;
139
+ }
140
+ if (notViteDeps.has(foundFile)) {
141
+ debug('maybeCaptureNewOptimizedDep: already attmpted %s', foundFile);
142
+ return result;
143
+ }
144
+ debug('maybeCaptureNewOptimizedDep: doing re-resolve for %s ', foundFile);
145
+ let jumpRoot = join(tmpdir, 'embroider-vite-jump', hashed(pkg.root));
146
+ let fromFile = join(jumpRoot, 'package.json');
147
+ outputJSONSync(fromFile, {
148
+ name: 'jump-root',
149
+ });
150
+ ensureSymlinkSync(pkg.root, join(jumpRoot, 'node_modules', pkg.name));
151
+ let newResult = await context.resolve(target, fromFile);
152
+ if (newResult) {
153
+ if (idFromResult(newResult) === foundFile) {
154
+ // This case is normal. For example, people could be using
155
+ // `optimizeDeps.exclude` or they might be working in a monorepo where an
156
+ // addon is not in node_modules. In both cases vite will decide not to
157
+ // optimize the file, even though we gave it a chance to.
158
+ //
159
+ // We cache that result so we don't keep trying.
160
+ debug('maybeCaptureNewOptimizedDep: %s did not become an optimized dep', foundFile);
161
+ notViteDeps.add(foundFile);
62
162
  }
63
- };
163
+ return newResult;
164
+ }
165
+ else {
166
+ return result;
167
+ }
64
168
  }
65
169
  //# sourceMappingURL=resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["resolver.ts"],"names":[],"mappings":";;;;;AASA,4BA6BC;AApCD,+BAA4B;AAE5B,0CAAsF;AACtF,uCAAwC;AACxC,uCAA+D;AAC/D,gEAAuC;AAEvC,SAAgB,QAAQ;IACtB,IAAI,eAAe,GAAoB,IAAA,uBAAY,EAAC,IAAA,WAAI,EAAC,IAAA,gCAAyB,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;IACrH,IAAI,QAAQ,GAAG,IAAI,eAAQ,CAAC,eAAe,CAAC,CAAC;IAE7C,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,KAAK;QACd,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO;YACvC,IAAI,OAAO,GAAG,6BAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACzE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,sCAAsC;gBACtC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YACvE,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;gBACxB,KAAK,OAAO;oBACV,OAAO,UAAU,CAAC,MAAM,CAAC;gBAC3B,KAAK,WAAW;oBACd,OAAO,IAAI,CAAC;gBACd;oBACE,MAAM,IAAA,sBAAW,EAAC,UAAU,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,EAAE;YACL,IAAI,EAAE,CAAC,UAAU,CAAC,uBAAa,CAAC,EAAE,CAAC;gBACjC,OAAO,IAAA,qBAAc,EAAC,EAAE,CAAC,KAAK,CAAC,uBAAa,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,OAAsB;IAC5C,OAAO,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC5C,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,QAAQ,EAAE;aAChE,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE;YACtE,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE;gBACN,SAAS,EAAE;oBACT,IAAI,EAAE,OAAO,CAAC,IAAI;iBACnB;aACF;SACF,CAAC,CAAC;QACH,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { PluginContext, ResolveIdResult } from 'rollup';\nimport type { Plugin } from 'vite';\nimport { join } from 'path';\nimport type { Resolution, ResolverFunction, ResolverOptions } from '@embroider/core';\nimport { Resolver, locateEmbroiderWorkingDir, virtualContent } from '@embroider/core';\nimport { readJSONSync } from 'fs-extra';\nimport { RollupModuleRequest, virtualPrefix } from './request';\nimport assertNever from 'assert-never';\n\nexport function resolver(): Plugin {\n let resolverOptions: ResolverOptions = readJSONSync(join(locateEmbroiderWorkingDir(process.cwd()), 'resolver.json'));\n let resolver = new Resolver(resolverOptions);\n\n return {\n name: 'embroider-resolver',\n enforce: 'pre',\n async resolveId(source, importer, options) {\n let request = RollupModuleRequest.from(source, importer, options.custom);\n if (!request) {\n // fallthrough to other rollup plugins\n return null;\n }\n let resolution = await resolver.resolve(request, defaultResolve(this));\n switch (resolution.type) {\n case 'found':\n return resolution.result;\n case 'not_found':\n return null;\n default:\n throw assertNever(resolution);\n }\n },\n load(id) {\n if (id.startsWith(virtualPrefix)) {\n return virtualContent(id.slice(virtualPrefix.length), resolver);\n }\n },\n };\n}\n\nfunction defaultResolve(context: PluginContext): ResolverFunction<RollupModuleRequest, Resolution<ResolveIdResult>> {\n return async (request: RollupModuleRequest) => {\n if (request.isVirtual) {\n return {\n type: 'found',\n result: { id: request.specifier, resolvedBy: request.fromFile },\n };\n }\n let result = await context.resolve(request.specifier, request.fromFile, {\n skipSelf: true,\n custom: {\n embroider: {\n meta: request.meta,\n },\n },\n });\n if (result) {\n return { type: 'found', result };\n } else {\n return { type: 'not_found', err: undefined };\n }\n };\n}\n"]}
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["resolver.ts"],"names":[],"mappings":"AACA,OAAO,IAAuB,MAAM,iBAAiB,CAAC;AACtD,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,SAAS,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;AAEjD,MAAM,KAAK,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAAC;AAE1C,MAAM,UAAU,QAAQ;IACtB,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,IAAI,MAAqB,CAAC;IAC1B,MAAM,WAAW,GAA0B,IAAI,GAAG,EAAE,CAAC;IACrD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IAEtC,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,KAAK;QAEd,eAAe,CAAC,CAAC;YACf,MAAM,GAAG,CAAC,CAAC;YACX,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;gBAC5C,KAAK,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,WAAW,EAAE,CAAC;oBACtC,KAAK,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC1B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC3B,KAAK,CAAC,0BAA0B,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;4BAC5C,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;4BACpC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;4BAC7C,IAAI,CAAC,EAAE,CAAC;gCACN,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;4BACzB,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO;;YACvC,IAAI,MAAA,OAAO,CAAC,MAAM,0CAAE,OAAO,EAAE,CAAC;gBAC5B,OAAO,MAAM,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC/D,CAAC;YAED,IAAI,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC/E,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,sCAAsC;gBACtC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAChE,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;gBACxB,KAAK,OAAO;oBACV,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;wBACzB,OAAO,UAAU,CAAC,MAAM,CAAC;oBAC3B,CAAC;yBAAM,CAAC;wBACN,OAAO,MAAM,2BAA2B,CAAC,IAAI,EAAE,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;oBAC1G,CAAC;gBACH,KAAK,SAAS;oBACZ,OAAO,UAAU,CAAC,MAAM,CAAC;gBAC3B,KAAK,WAAW;oBACd,OAAO,IAAI,CAAC;gBACd;oBACE,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,EAAE;YACL,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBACjC,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;gBACrD,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;gBACzG,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC7B,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC7B,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;QACD,QAAQ;YACN,IAAI,CAAC,QAAQ,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,8BAA8B;gBACxC,MAAM,EAAE,cAAc,CACpB,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,sBAAsB,CAAC,EAChF,cAAc,CAAC,QAAQ,CACxB,CAAC,GAAG;aACN,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,oCAAoC;gBAC9C,MAAM,EAAE,cAAc,CACpB,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,4BAA4B,CAAC,EACtF,cAAc,CAAC,QAAQ,CACxB,CAAC,GAAG;aACN,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,kEAAkE;AAClE,sEAAsE;AACtE,uEAAuE;AACvE,iEAAiE;AACjE,gEAAgE;AAChE,oEAAoE;AACpE,mEAAmE;AACnE,oEAAoE;AACpE,sEAAsE;AACtE,kEAAkE;AAClE,wBAAwB;AACxB,KAAK,UAAU,cAAc,CAAC,OAAsB,EAAE,MAAc,EAAE,QAA4B,EAAE,OAAY;IAC9G,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE;QACnD,GAAG,OAAO;QACV,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,MAAuB;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,2BAA2B,CACxC,OAAsB,EACtB,QAAkB,EAClB,MAAuB,EACvB,WAAwB;IAExB,IAAI,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;QACvF,KAAK,CAAC,sDAAsD,EAAE,SAAS,CAAC,CAAC;QACzE,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,EAAE,CAAA,EAAE,CAAC;QACtB,KAAK,CAAC,iDAAiD,EAAE,SAAS,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAClF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,iDAAiD,EAAE,SAAS,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,kDAAkD,EAAE,SAAS,CAAC,CAAC;QACrE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,uDAAuD,EAAE,SAAS,CAAC,CAAC;IAE1E,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,qBAAqB,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACrE,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC9C,cAAc,CAAC,QAAQ,EAAE;QACvB,IAAI,EAAE,WAAW;KAClB,CAAC,CAAC;IACH,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,IAAI,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxD,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,YAAY,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;YAC1C,0DAA0D;YAC1D,yEAAyE;YACzE,sEAAsE;YACtE,yDAAyD;YACzD,EAAE;YACF,gDAAgD;YAChD,KAAK,CAAC,iEAAiE,EAAE,SAAS,CAAC,CAAC;YACpF,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC","sourcesContent":["import type { Plugin, ViteDevServer } from 'vite';\nimport core, { type Resolver } from '@embroider/core';\nconst { virtualContent, ResolverLoader, explicitRelative, cleanUrl, tmpdir } = core;\nimport { RollupModuleRequest, virtualPrefix } from './request.js';\nimport { assertNever } from 'assert-never';\nimport makeDebug from 'debug';\nimport { resolve, join } 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\n return {\n name: 'embroider-resolver',\n enforce: 'pre',\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 },\n\n async resolveId(source, importer, options) {\n if (options.custom?.depScan) {\n return await observeDepScan(this, source, importer, options);\n }\n\n let request = RollupModuleRequest.from(this, source, importer, options.custom);\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.isVirtual) {\n return resolution.result;\n } else {\n return await maybeCaptureNewOptimizedDep(this, resolverLoader.resolver, resolution.result, notViteDeps);\n }\n case 'ignored':\n return resolution.result;\n case 'not_found':\n return null;\n default:\n throw assertNever(resolution);\n }\n },\n load(id) {\n if (id.startsWith(virtualPrefix)) {\n let { pathname } = new URL(id, 'http://example.com');\n let { src, watches } = virtualContent(pathname.slice(virtualPrefix.length + 1), resolverLoader.resolver);\n virtualDeps.set(id, watches);\n server?.watcher.add(watches);\n return src;\n }\n },\n buildEnd() {\n this.emitFile({\n type: 'asset',\n fileName: '@embroider/virtual/vendor.js',\n source: virtualContent(\n resolve(resolverLoader.resolver.options.engines[0].root, '-embroider-vendor.js'),\n resolverLoader.resolver\n ).src,\n });\n this.emitFile({\n type: 'asset',\n fileName: '@embroider/virtual/test-support.js',\n source: virtualContent(\n resolve(resolverLoader.resolver.options.engines[0].root, '-embroider-test-support.js'),\n resolverLoader.resolver\n ).src,\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 ? 'found' : '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"]}
package/src/scripts.js CHANGED
@@ -1,34 +1,9 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.scripts = scripts;
27
- const jsdom_1 = require("jsdom");
28
- const fs_extra_1 = require("fs-extra");
29
- const path_1 = require("path");
1
+ import { JSDOM } from 'jsdom';
2
+ import fs from 'fs-extra';
3
+ const { readFileSync, readJSONSync, existsSync } = fs;
4
+ import { dirname, posix, resolve } from 'path';
30
5
  const defaults = ['/assets/vendor.js', '/assets/test-support.js'];
31
- function scripts(params) {
6
+ export function scripts(params) {
32
7
  var _a;
33
8
  let optimizer;
34
9
  // configured names are always interpreted as origin-absolute URLs.
@@ -71,19 +46,24 @@ class ScriptOptimizer {
71
46
  this.emitted = new Map();
72
47
  }
73
48
  async optimizedScript(script) {
49
+ let fullName = resolve(this.rootDir, script.slice(1));
50
+ if (!existsSync(fullName)) {
51
+ // in prod builds, test-support.js isn't going to exist (for example)
52
+ return [];
53
+ }
74
54
  // loading these lazily here so they never load in non-production builds.
75
55
  // The node cache will ensures we only load them once.
76
- const [Terser, srcURL] = await Promise.all([Promise.resolve().then(() => __importStar(require('terser'))), Promise.resolve().then(() => __importStar(require('source-map-url')))]);
77
- let inCode = (0, fs_extra_1.readFileSync)((0, path_1.resolve)(this.rootDir, script.slice(1)), 'utf8');
56
+ const [Terser, srcURL] = await Promise.all([import('terser'), import('source-map-url')]);
57
+ let inCode = readFileSync(fullName, 'utf8');
78
58
  let terserOpts = {};
79
59
  let fileRelativeSourceMapURL;
80
60
  let appRelativeSourceMapURL;
81
61
  if (srcURL.default.existsIn(inCode)) {
82
62
  fileRelativeSourceMapURL = srcURL.default.getFrom(inCode);
83
- appRelativeSourceMapURL = path_1.posix.join((0, path_1.dirname)(script.slice(1)), fileRelativeSourceMapURL);
63
+ appRelativeSourceMapURL = posix.join(dirname(script.slice(1)), fileRelativeSourceMapURL);
84
64
  let content;
85
65
  try {
86
- content = (0, fs_extra_1.readJSONSync)((0, path_1.resolve)(this.rootDir, appRelativeSourceMapURL));
66
+ content = readJSONSync(resolve(this.rootDir, appRelativeSourceMapURL));
87
67
  }
88
68
  catch (err) {
89
69
  // the script refers to a sourcemap that doesn't exist, so we just leave
@@ -93,7 +73,7 @@ class ScriptOptimizer {
93
73
  terserOpts.sourceMap = { content, url: fileRelativeSourceMapURL };
94
74
  }
95
75
  }
96
- let { code: outCode, map: outMap } = await Terser.default.minify(inCode, terserOpts);
76
+ let { code: outCode, map: outMap } = await Terser.minify(inCode, terserOpts);
97
77
  let finalFilename = await this.getFingerprintedFilename(script, outCode);
98
78
  let emit = [];
99
79
  emit.push({
@@ -112,7 +92,7 @@ class ScriptOptimizer {
112
92
  return emit;
113
93
  }
114
94
  async getFingerprintedFilename(filename, content) {
115
- let crypto = await Promise.resolve().then(() => __importStar(require('crypto')));
95
+ let crypto = await import('crypto');
116
96
  let md5 = crypto.createHash('md5');
117
97
  md5.update(content);
118
98
  let hash = md5.digest('hex');
@@ -123,7 +103,7 @@ class ScriptOptimizer {
123
103
  transformHTML(htmlIn) {
124
104
  var _a;
125
105
  if (((_a = this.transformState) === null || _a === void 0 ? void 0 : _a.htmlIn) !== htmlIn) {
126
- let parsed = new jsdom_1.JSDOM(htmlIn);
106
+ let parsed = new JSDOM(htmlIn);
127
107
  let scriptTags = [...parsed.window.document.querySelectorAll('script')];
128
108
  for (let scriptTag of scriptTags) {
129
109
  if (scriptTag.type !== 'module') {
@@ -1 +1 @@
1
- {"version":3,"file":"scripts.js","sourceRoot":"","sources":["scripts.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Plugin } from 'vite';\nimport type { EmittedFile } from 'rollup';\nimport { JSDOM } from 'jsdom';\nimport { readFileSync, readJSONSync } from 'fs-extra';\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 return {\n name: 'embroider-scripts',\n enforce: 'pre',\n\n configResolved(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);\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 // 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(resolve(this.rootDir, script.slice(1)), '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.default.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) {\n if (this.transformState?.htmlIn !== htmlIn) {\n let parsed = new JSDOM(htmlIn);\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 }\n }\n let htmlOut = parsed.serialize();\n this.transformState = { htmlIn, parsed, htmlOut };\n }\n return this.transformState.htmlOut;\n }\n}\n"]}
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["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 return {\n name: 'embroider-scripts',\n enforce: 'pre',\n\n configResolved(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);\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) {\n if (this.transformState?.htmlIn !== htmlIn) {\n let parsed = new JSDOM(htmlIn);\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 }\n }\n let htmlOut = parsed.serialize();\n this.transformState = { htmlIn, parsed, htmlOut };\n }\n return this.transformState.htmlOut;\n }\n}\n"]}
@@ -1,46 +1,16 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.templateTag = templateTag;
4
- const pluginutils_1 = require("@rollup/pluginutils");
5
- const fs_1 = require("fs");
6
- const content_tag_1 = require("content-tag");
7
- const gjsFilter = (0, pluginutils_1.createFilter)('**/*.gjs');
8
- function templateTag({ inline_source_map } = { inline_source_map: false }) {
9
- let preprocessor = new content_tag_1.Preprocessor();
10
- function candidates(id) {
11
- return [id + '.gjs'];
12
- }
1
+ import { createFilter } from '@rollup/pluginutils';
2
+ import { Preprocessor } from 'content-tag';
3
+ const gjsFilter = createFilter('**/*.{gjs,gts}?(\\?)*');
4
+ export function templateTag({ inline_source_map } = { inline_source_map: false }) {
5
+ let preprocessor = new Preprocessor();
13
6
  return {
14
7
  name: 'embroider-template-tag',
15
8
  enforce: 'pre',
16
- async resolveId(id, importer) {
17
- let resolution = await this.resolve(id, importer, {
18
- skipSelf: true,
19
- });
20
- if (resolution) {
21
- return resolution;
22
- }
23
- for (let candidate of candidates(id)) {
24
- resolution = await this.resolve(candidate, importer, {
25
- skipSelf: true,
26
- custom: {
27
- embroider: {
28
- enableCustomResolver: false,
29
- },
30
- },
31
- });
32
- if (resolution) {
33
- return {
34
- id: resolution.id,
35
- };
36
- }
37
- }
38
- },
39
- load(id) {
9
+ transform(code, id) {
40
10
  if (!gjsFilter(id)) {
41
11
  return null;
42
12
  }
43
- return preprocessor.process((0, fs_1.readFileSync)(id, 'utf8'), {
13
+ return preprocessor.process(code, {
44
14
  filename: id,
45
15
  inline_source_map: inline_source_map,
46
16
  });
@@ -1 +1 @@
1
- {"version":3,"file":"template-tag.js","sourceRoot":"","sources":["template-tag.ts"],"names":[],"mappings":";;AAOA,kCA6CC;AApDD,qDAAmD;AAEnD,2BAAkC;AAClC,6CAA2C;AAE3C,MAAM,SAAS,GAAG,IAAA,0BAAY,EAAC,UAAU,CAAC,CAAC;AAE3C,SAAgB,WAAW,CAAC,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE;IAC9E,IAAI,YAAY,GAAG,IAAI,0BAAY,EAAE,CAAC;IAEtC,SAAS,UAAU,CAAC,EAAU;QAC5B,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,KAAK;QAEd,KAAK,CAAC,SAAS,CAAC,EAAU,EAAE,QAA4B;YACtD,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE;gBAChD,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,UAAU,CAAC;YACpB,CAAC;YACD,KAAK,IAAI,SAAS,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;gBACrC,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE;oBACnD,QAAQ,EAAE,IAAI;oBACd,MAAM,EAAE;wBACN,SAAS,EAAE;4BACT,oBAAoB,EAAE,KAAK;yBAC5B;qBACF;iBACF,CAAC,CAAC;gBACH,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO;wBACL,EAAE,EAAE,UAAU,CAAC,EAAE;qBAClB,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,EAAU;YACb,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,YAAY,CAAC,OAAO,CAAC,IAAA,iBAAY,EAAC,EAAE,EAAE,MAAM,CAAC,EAAE;gBACpD,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 { readFileSync } from 'fs';\nimport { Preprocessor } from 'content-tag';\n\nconst gjsFilter = createFilter('**/*.gjs');\n\nexport function templateTag({ inline_source_map } = { inline_source_map: false }): Plugin {\n let preprocessor = new Preprocessor();\n\n function candidates(id: string) {\n return [id + '.gjs'];\n }\n\n return {\n name: 'embroider-template-tag',\n enforce: 'pre',\n\n async resolveId(id: string, importer: string | undefined) {\n let resolution = await this.resolve(id, importer, {\n skipSelf: true,\n });\n if (resolution) {\n return resolution;\n }\n for (let candidate of candidates(id)) {\n resolution = await this.resolve(candidate, importer, {\n skipSelf: true,\n custom: {\n embroider: {\n enableCustomResolver: false,\n },\n },\n });\n if (resolution) {\n return {\n id: resolution.id,\n };\n }\n }\n },\n\n load(id: string) {\n if (!gjsFilter(id)) {\n return null;\n }\n return preprocessor.process(readFileSync(id, 'utf8'), {\n filename: id,\n inline_source_map: inline_source_map,\n });\n },\n };\n}\n"]}
1
+ {"version":3,"file":"template-tag.js","sourceRoot":"","sources":["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"]}
package/src/addons.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare function addons(root: string): string[];
package/src/addons.js DELETED
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addons = addons;
4
- const core_1 = require("@embroider/core");
5
- function addons(root) {
6
- let rloader = new core_1.ResolverLoader(root);
7
- let { options } = rloader.resolver;
8
- let names = new Set();
9
- for (let from of Object.keys(options.renameModules)) {
10
- let pName = (0, core_1.packageName)(from);
11
- if (pName) {
12
- names.add(pName);
13
- }
14
- }
15
- for (let from of Object.keys(options.renamePackages)) {
16
- names.add(from);
17
- }
18
- for (let name of Object.keys(options.activeAddons)) {
19
- names.add(name);
20
- }
21
- return [...names];
22
- }
23
- //# sourceMappingURL=addons.js.map
package/src/addons.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"addons.js","sourceRoot":"","sources":["addons.ts"],"names":[],"mappings":";;AAEA,wBAiBC;AAnBD,0CAA8D;AAE9D,SAAgB,MAAM,CAAC,IAAY;IACjC,IAAI,OAAO,GAAG,IAAI,qBAAc,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IACnC,IAAI,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK,GAAG,IAAA,kBAAW,EAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACnD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC","sourcesContent":["import { ResolverLoader, packageName } from '@embroider/core';\n\nexport function addons(root: string): string[] {\n let rloader = new ResolverLoader(root);\n let { options } = rloader.resolver;\n let names = new Set<string>();\n for (let from of Object.keys(options.renameModules)) {\n let pName = packageName(from);\n if (pName) {\n names.add(pName);\n }\n }\n for (let from of Object.keys(options.renamePackages)) {\n names.add(from);\n }\n for (let name of Object.keys(options.activeAddons)) {\n names.add(name);\n }\n return [...names];\n}\n"]}