@remix-run/assets 0.2.0 → 0.4.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/README.md +241 -28
- package/dist/assets.d.ts +1 -0
- package/dist/assets.d.ts.map +1 -1
- package/dist/assets.js +1 -0
- package/dist/lib/access.d.ts +1 -0
- package/dist/lib/access.d.ts.map +1 -1
- package/dist/lib/access.js +10 -1
- package/dist/lib/asset-server.d.ts +33 -7
- package/dist/lib/asset-server.d.ts.map +1 -1
- package/dist/lib/asset-server.js +195 -23
- package/dist/lib/compilation-error.d.ts +1 -1
- package/dist/lib/compilation-error.d.ts.map +1 -1
- package/dist/lib/files/compiler.d.ts +71 -0
- package/dist/lib/files/compiler.d.ts.map +1 -0
- package/dist/lib/files/compiler.js +552 -0
- package/dist/lib/files/config.d.ts +101 -0
- package/dist/lib/files/config.d.ts.map +1 -0
- package/dist/lib/files/config.js +219 -0
- package/dist/lib/files/store.d.ts +31 -0
- package/dist/lib/files/store.d.ts.map +1 -0
- package/dist/lib/files/store.js +63 -0
- package/dist/lib/fingerprint.d.ts +3 -3
- package/dist/lib/fingerprint.d.ts.map +1 -1
- package/dist/lib/fingerprint.js +5 -5
- package/dist/lib/injected-packages.d.ts +11 -0
- package/dist/lib/injected-packages.d.ts.map +1 -0
- package/dist/lib/injected-packages.js +86 -0
- package/dist/lib/paths.d.ts +1 -0
- package/dist/lib/paths.d.ts.map +1 -1
- package/dist/lib/paths.js +12 -0
- package/dist/lib/routes.d.ts +5 -7
- package/dist/lib/routes.d.ts.map +1 -1
- package/dist/lib/routes.js +41 -36
- package/dist/lib/scripts/compiler.d.ts +1 -0
- package/dist/lib/scripts/compiler.d.ts.map +1 -1
- package/dist/lib/scripts/compiler.js +30 -5
- package/dist/lib/scripts/resolve.d.ts.map +1 -1
- package/dist/lib/scripts/resolve.js +57 -10
- package/dist/lib/scripts/transform.d.ts.map +1 -1
- package/dist/lib/scripts/transform.js +79 -3
- package/dist/lib/styles/compiler.d.ts +4 -0
- package/dist/lib/styles/compiler.d.ts.map +1 -1
- package/dist/lib/styles/compiler.js +2 -0
- package/dist/lib/styles/emit.d.ts +3 -0
- package/dist/lib/styles/emit.d.ts.map +1 -1
- package/dist/lib/styles/emit.js +36 -1
- package/dist/lib/styles/resolve.d.ts +8 -1
- package/dist/lib/styles/resolve.d.ts.map +1 -1
- package/dist/lib/styles/resolve.js +85 -32
- package/dist/lib/watch.d.ts +2 -0
- package/dist/lib/watch.d.ts.map +1 -1
- package/dist/lib/watch.js +25 -8
- package/package.json +11 -5
- package/src/assets.ts +1 -0
- package/src/lib/access.ts +10 -1
- package/src/lib/asset-server.ts +297 -34
- package/src/lib/compilation-error.ts +9 -0
- package/src/lib/files/compiler.ts +885 -0
- package/src/lib/files/config.ts +479 -0
- package/src/lib/files/store.ts +109 -0
- package/src/lib/fingerprint.ts +8 -7
- package/src/lib/injected-packages.ts +117 -0
- package/src/lib/paths.ts +28 -0
- package/src/lib/routes.ts +67 -55
- package/src/lib/scripts/compiler.ts +43 -5
- package/src/lib/scripts/resolve.ts +89 -11
- package/src/lib/scripts/transform.ts +105 -3
- package/src/lib/styles/compiler.ts +9 -0
- package/src/lib/styles/emit.ts +75 -1
- package/src/lib/styles/resolve.ts +132 -35
- package/src/lib/watch.ts +34 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/lib/scripts/compiler.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAExD,OAAO,KAAK,EAKV,gBAAgB,EACjB,MAAM,oBAAoB,CAAA;AAI3B,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,WAAW,CAAA;AAK5D,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,YAAY,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,YAAY,GAAG,IAAI,CAAA;CAC/B,CAAA;AAED,KAAK,eAAe,GAChB;IACE,MAAM,EAAE,mBAAmB,CAAA;IAC3B,IAAI,EAAE,QAAQ,CAAA;CACf,GACD;IACE,IAAI,EAAE,cAAc,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAEL,KAAK,gBAAgB,GAAG;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,kBAAkB,EAAE,OAAO,CAAA;IAC3B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;CACpC,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAA;IACxC,MAAM,EAAE,OAAO,CAAA;IACf,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAA;IAC/E,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,cAAc,CAAA;IACtB,oBAAoB,EAAE,UAAU,GAAG,KAAK,CAAA;IACxC,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;IAClC,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,KAAK,cAAc,GAAG;IACpB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAChF,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC3E,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1C,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzE,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAAA;CACrE,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;CACpC,CAAA;AAKD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/lib/scripts/compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,8 +30,14 @@ export function createScriptCompiler(options) {
|
|
|
30
30
|
extensionAlias: resolverExtensionAlias,
|
|
31
31
|
extensions: resolverExtensions,
|
|
32
32
|
mainFields: ['browser', 'module', 'main'],
|
|
33
|
+
symlinks: false,
|
|
33
34
|
tsconfig: 'auto',
|
|
34
35
|
});
|
|
36
|
+
let resolveModulePathOptions = {
|
|
37
|
+
isAllowed: resolvedOptions.isAllowed,
|
|
38
|
+
isDenied: resolvedOptions.isDenied,
|
|
39
|
+
routes: resolvedOptions.routes,
|
|
40
|
+
};
|
|
35
41
|
let resolveInFlightByCacheKey = new Map();
|
|
36
42
|
let emitInFlightByCacheKey = new Map();
|
|
37
43
|
let transformArgs = {
|
|
@@ -50,7 +56,9 @@ export function createScriptCompiler(options) {
|
|
|
50
56
|
let resolveArgs = {
|
|
51
57
|
isAllowed: resolvedOptions.isAllowed,
|
|
52
58
|
isWatchIgnored,
|
|
53
|
-
resolveModulePath
|
|
59
|
+
resolveModulePath(absolutePath) {
|
|
60
|
+
return resolveModulePath(absolutePath, resolveModulePathOptions);
|
|
61
|
+
},
|
|
54
62
|
resolverFactory,
|
|
55
63
|
routes: resolvedOptions.routes,
|
|
56
64
|
};
|
|
@@ -144,7 +152,7 @@ export function createScriptCompiler(options) {
|
|
|
144
152
|
return resolveFilePath(resolvedOptions.rootDir, filePath);
|
|
145
153
|
}
|
|
146
154
|
function resolveServedScriptOrThrow(absolutePath) {
|
|
147
|
-
let resolvedModule = resolveModulePath(absolutePath);
|
|
155
|
+
let resolvedModule = resolveModulePath(absolutePath, resolveModulePathOptions);
|
|
148
156
|
if (!resolvedModule) {
|
|
149
157
|
throw createAssetServerCompilationError(`File not found: ${absolutePath}`, {
|
|
150
158
|
code: 'FILE_NOT_FOUND',
|
|
@@ -366,10 +374,11 @@ function isTsconfigPath(filePath) {
|
|
|
366
374
|
function shouldClearResolverCacheForFileEvent(filePath, event) {
|
|
367
375
|
return event !== 'change' || isPackageJsonPath(filePath) || isTsconfigPath(filePath);
|
|
368
376
|
}
|
|
369
|
-
function resolveModulePath(absolutePath) {
|
|
377
|
+
function resolveModulePath(absolutePath, options) {
|
|
378
|
+
let candidateIdentityPath = normalizeFilePath(absolutePath);
|
|
370
379
|
let resolvedPath;
|
|
371
380
|
try {
|
|
372
|
-
resolvedPath = normalizeFilePath(fs.realpathSync(
|
|
381
|
+
resolvedPath = normalizeFilePath(fs.realpathSync(candidateIdentityPath));
|
|
373
382
|
}
|
|
374
383
|
catch (error) {
|
|
375
384
|
if (isNoEntityError(error))
|
|
@@ -380,10 +389,26 @@ function resolveModulePath(absolutePath) {
|
|
|
380
389
|
return null;
|
|
381
390
|
}
|
|
382
391
|
return {
|
|
383
|
-
identityPath: resolvedPath,
|
|
392
|
+
identityPath: getModuleIdentityPath(candidateIdentityPath, resolvedPath, options),
|
|
384
393
|
resolvedPath,
|
|
385
394
|
};
|
|
386
395
|
}
|
|
396
|
+
function getModuleIdentityPath(candidateIdentityPath, resolvedPath, options) {
|
|
397
|
+
if (candidateIdentityPath === resolvedPath)
|
|
398
|
+
return resolvedPath;
|
|
399
|
+
if (!containsNodeModulesPathSegment(candidateIdentityPath))
|
|
400
|
+
return resolvedPath;
|
|
401
|
+
if (!options.routes.toUrlPathname(candidateIdentityPath))
|
|
402
|
+
return resolvedPath;
|
|
403
|
+
if (!options.isAllowed(candidateIdentityPath))
|
|
404
|
+
return resolvedPath;
|
|
405
|
+
if (options.isDenied(resolvedPath))
|
|
406
|
+
return resolvedPath;
|
|
407
|
+
return candidateIdentityPath;
|
|
408
|
+
}
|
|
409
|
+
function containsNodeModulesPathSegment(filePath) {
|
|
410
|
+
return filePath.split('/').includes('node_modules');
|
|
411
|
+
}
|
|
387
412
|
function resolveActualPath(identityPath) {
|
|
388
413
|
try {
|
|
389
414
|
return normalizeFilePath(fs.realpathSync(identityPath));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/lib/scripts/resolve.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAMnD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/lib/scripts/resolve.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAMnD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAM1E,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAE9C,KAAK,YAAY,GAAG,YAAY,CAAC,iBAAiB,EAAE,cAAc,EAAE,aAAa,CAAC,CAAA;AAElF,eAAO,MAAM,sBAAsB;;;;CAIC,CAAA;AAEpC,eAAO,MAAM,kBAAkB,UAAiD,CAAA;AAChF,eAAO,MAAM,yBAAyB,UAAiD,CAAA;AAGvF,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAYD,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,KAAK,aAAa,GAAG;IACnB,QAAQ,EAAE,cAAc,CAAA;CACzB,GAAG,CACA;IACE,EAAE,EAAE,IAAI,CAAA;IACR,KAAK,EAAE,cAAc,CAAA;CACtB,GACD;IACE,EAAE,EAAE,KAAK,CAAA;IACT,KAAK,EAAE,2BAA2B,CAAA;CACnC,CACJ,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAA;IACxC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;IACzC,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAAA;IACnE,eAAe,EAAE,eAAe,CAAA;IAChC,MAAM,EAAE,cAAc,CAAA;CACvB,CAAA;AAaD,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,iBAAiB,EAC9B,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,aAAa,CAAC,CA4IxB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as fs from 'node:fs';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
3
|
import { createAssetServerCompilationError, isAssetServerCompilationError, } from "../compilation-error.js";
|
|
4
|
+
import { getInjectedPackageNameForSpecifier, getInjectedPackageImporterPath, restoreAuthoredInjectedPackageSpecifier, } from "../injected-packages.js";
|
|
4
5
|
import { normalizeFilePath } from "../paths.js";
|
|
5
6
|
export const resolverExtensionAlias = {
|
|
6
7
|
'.js': ['.js', '.ts', '.tsx', '.jsx'],
|
|
@@ -17,7 +18,7 @@ export async function resolveModule(record, transformed, args) {
|
|
|
17
18
|
try {
|
|
18
19
|
resolvedImports =
|
|
19
20
|
transformed.unresolvedImports.length > 0
|
|
20
|
-
? await batchResolveSpecifiers(getUniqueSpecifiers(transformed.unresolvedImports), transformed.
|
|
21
|
+
? await batchResolveSpecifiers(getUniqueSpecifiers(transformed.unresolvedImports), transformed.identityPath, args.resolverFactory)
|
|
21
22
|
: new Map();
|
|
22
23
|
}
|
|
23
24
|
catch (error) {
|
|
@@ -28,37 +29,38 @@ export async function resolveModule(record, transformed, args) {
|
|
|
28
29
|
let importsWithPaths = [];
|
|
29
30
|
let deps = new Set();
|
|
30
31
|
for (let unresolved of transformed.unresolvedImports) {
|
|
31
|
-
let
|
|
32
|
+
let displaySpecifier = getDisplayImportSpecifier(unresolved.specifier);
|
|
33
|
+
let trackedResolution = getTrackedRelativeImportResolution(transformed.importerDir, displaySpecifier, args.isWatchIgnored);
|
|
32
34
|
let resolvedSpec = resolvedImports.get(unresolved.specifier);
|
|
33
35
|
if (!resolvedSpec?.absolutePath) {
|
|
34
|
-
return failResolve(createAssetServerCompilationError(`Failed to resolve import "${
|
|
36
|
+
return failResolve(createAssetServerCompilationError(`Failed to resolve import "${displaySpecifier}" in ${transformed.resolvedPath}. ` +
|
|
35
37
|
`Ensure it resolves to a file within the configured asset server fileMap, or mark it as external.`, {
|
|
36
38
|
code: 'IMPORT_RESOLUTION_FAILED',
|
|
37
39
|
}), trackedFiles, trackedResolutions, transformed.resolvedPath, { isWatchIgnored: args.isWatchIgnored, trackedResolution });
|
|
38
40
|
}
|
|
39
41
|
let resolvedImport = args.resolveModulePath(resolvedSpec.absolutePath);
|
|
40
42
|
if (!resolvedImport) {
|
|
41
|
-
return failResolve(createAssetServerCompilationError(`Import "${
|
|
43
|
+
return failResolve(createAssetServerCompilationError(`Import "${displaySpecifier}" in ${transformed.resolvedPath}, resolved to "${resolvedSpec.absolutePath}", is not a supported script file. ` +
|
|
42
44
|
`Supported extensions are ${supportedScriptExtensions.join(', ')}.`, {
|
|
43
45
|
code: 'IMPORT_NOT_SUPPORTED',
|
|
44
46
|
}), trackedFiles, trackedResolutions, transformed.resolvedPath, { isWatchIgnored: args.isWatchIgnored, trackedResolution });
|
|
45
47
|
}
|
|
46
48
|
if (!args.isAllowed(resolvedImport.identityPath)) {
|
|
47
|
-
return failResolve(createAssetServerCompilationError(`Import "${
|
|
49
|
+
return failResolve(createAssetServerCompilationError(`Import "${displaySpecifier}" in ${transformed.resolvedPath}, resolved to "${resolvedImport.identityPath}", is not allowed by the asset server allow/deny configuration. ` +
|
|
48
50
|
`Add a matching allow rule for this file path, remove a conflicting deny rule for this file path, or mark this import as external.`, {
|
|
49
51
|
code: 'IMPORT_NOT_ALLOWED',
|
|
50
52
|
}), trackedFiles, trackedResolutions, transformed.resolvedPath, { isWatchIgnored: args.isWatchIgnored, trackedResolution });
|
|
51
53
|
}
|
|
52
54
|
let stableUrlPathname = args.routes.toUrlPathname(resolvedImport.identityPath);
|
|
53
55
|
if (!stableUrlPathname) {
|
|
54
|
-
return failResolve(createAssetServerCompilationError(`Import "${
|
|
56
|
+
return failResolve(createAssetServerCompilationError(`Import "${displaySpecifier}" in ${transformed.resolvedPath}, resolved to "${resolvedImport.identityPath}", is outside all configured fileMap entries. ` +
|
|
55
57
|
`Add a matching fileMap entry for this file path, or mark this import as external.`, {
|
|
56
58
|
code: 'IMPORT_OUTSIDE_FILE_MAP',
|
|
57
59
|
}), trackedFiles, trackedResolutions, transformed.resolvedPath, { isWatchIgnored: args.isWatchIgnored, trackedResolution });
|
|
58
60
|
}
|
|
59
61
|
deps.add(resolvedImport.identityPath);
|
|
60
62
|
if (transformed.packageSpecifiers.includes(unresolved.specifier)) {
|
|
61
|
-
let packageJsonPath = resolvedSpec.packageJsonPath
|
|
63
|
+
let packageJsonPath = resolvePackageJsonPath(resolvedSpec.packageJsonPath, resolvedImport.resolvedPath);
|
|
62
64
|
if (packageJsonPath && !args.isWatchIgnored(packageJsonPath)) {
|
|
63
65
|
trackedFiles.add(packageJsonPath);
|
|
64
66
|
}
|
|
@@ -92,6 +94,20 @@ export async function resolveModule(record, transformed, args) {
|
|
|
92
94
|
},
|
|
93
95
|
};
|
|
94
96
|
}
|
|
97
|
+
function resolvePackageJsonPath(packageJsonPath, resolvedPath) {
|
|
98
|
+
return ((packageJsonPath ? resolveExistingPath(packageJsonPath) : null) ??
|
|
99
|
+
findNearestPackageJsonPath(resolvedPath));
|
|
100
|
+
}
|
|
101
|
+
function resolveExistingPath(filePath) {
|
|
102
|
+
try {
|
|
103
|
+
return normalizeFilePath(fs.realpathSync(filePath));
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
if (isNoEntityError(error))
|
|
107
|
+
return null;
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
95
111
|
function findNearestPackageJsonPath(filePath) {
|
|
96
112
|
let directory = path.dirname(filePath);
|
|
97
113
|
while (true) {
|
|
@@ -105,6 +121,12 @@ function findNearestPackageJsonPath(filePath) {
|
|
|
105
121
|
directory = parentDirectory;
|
|
106
122
|
}
|
|
107
123
|
}
|
|
124
|
+
function isNoEntityError(error) {
|
|
125
|
+
return (error instanceof Error &&
|
|
126
|
+
'code' in error &&
|
|
127
|
+
(error.code === 'ENOENT' ||
|
|
128
|
+
error.code === 'ENOTDIR'));
|
|
129
|
+
}
|
|
108
130
|
function isRelativeImportSpecifier(specifier) {
|
|
109
131
|
return specifier.startsWith('./') || specifier.startsWith('../');
|
|
110
132
|
}
|
|
@@ -164,10 +186,13 @@ async function batchResolveSpecifiers(specifiers, importerPath, resolverFactory)
|
|
|
164
186
|
return resolvedBySpecifier;
|
|
165
187
|
try {
|
|
166
188
|
for (let specifier of specifiers) {
|
|
167
|
-
let
|
|
189
|
+
let normalizedResolution = normalizeSpecifierResolution(specifier, importerPath);
|
|
190
|
+
let resolutionResult = await resolverFactory.resolveFileAsync(normalizedResolution.importerPath, normalizedResolution.specifier);
|
|
168
191
|
if (resolutionResult.error) {
|
|
169
|
-
throw createAssetServerCompilationError(
|
|
170
|
-
`
|
|
192
|
+
throw createAssetServerCompilationError(normalizedResolution.importerPath === getInjectedPackageImporterPath()
|
|
193
|
+
? `Failed to resolve injected import "${specifier}" from asset server.`
|
|
194
|
+
: `Failed to resolve import "${normalizedResolution.specifier}" in ${normalizedResolution.importerPath}. ` +
|
|
195
|
+
`Ensure it resolves to a file within the configured asset server fileMap, or mark it as external.`, {
|
|
171
196
|
code: 'IMPORT_RESOLUTION_FAILED',
|
|
172
197
|
});
|
|
173
198
|
}
|
|
@@ -199,6 +224,28 @@ function getUniqueSpecifiers(unresolvedImports) {
|
|
|
199
224
|
function formatUnknownError(error) {
|
|
200
225
|
return error instanceof Error ? error.message : String(error);
|
|
201
226
|
}
|
|
227
|
+
function normalizeSpecifierResolution(specifier, importerPath) {
|
|
228
|
+
let authoredInjectedPackageSpecifier = restoreAuthoredInjectedPackageSpecifier(specifier);
|
|
229
|
+
if (authoredInjectedPackageSpecifier) {
|
|
230
|
+
return {
|
|
231
|
+
importerPath,
|
|
232
|
+
specifier: authoredInjectedPackageSpecifier,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
if (getInjectedPackageNameForSpecifier(specifier)) {
|
|
236
|
+
return {
|
|
237
|
+
importerPath: getInjectedPackageImporterPath(),
|
|
238
|
+
specifier,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
return {
|
|
242
|
+
importerPath,
|
|
243
|
+
specifier,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
function getDisplayImportSpecifier(specifier) {
|
|
247
|
+
return restoreAuthoredInjectedPackageSpecifier(specifier) ?? specifier;
|
|
248
|
+
}
|
|
202
249
|
function failResolve(error, trackedFiles, trackedResolutions, importerPath, options = {}) {
|
|
203
250
|
return {
|
|
204
251
|
ok: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/lib/scripts/transform.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/lib/scripts/transform.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAS,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAS/D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAO1E,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,KAAK,YAAY,GAAG,YAAY,CAAC,iBAAiB,EAAE,cAAc,EAAE,aAAa,CAAC,CAAA;AA4BlF,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,KAAK,gBAAgB,GAAG;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,iBAAiB,EAAE,gBAAgB,EAAE,CAAA;CACtC,CAAA;AAED,KAAK,eAAe,GAAG;IACrB,QAAQ,EAAE,cAAc,CAAA;CACzB,GAAG,CACA;IACE,EAAE,EAAE,IAAI,CAAA;IACR,KAAK,EAAE,iBAAiB,CAAA;CACzB,GACD;IACE,EAAE,EAAE,KAAK,CAAA;IACT,KAAK,EAAE,2BAA2B,CAAA;CACnC,CACJ,CAAA;AAED,KAAK,wBAAwB,GAAG;IAC9B,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,WAAW,CAAC,EAAE,oBAAoB,CAAA;CACnC,CAAA;AAED,KAAK,gCAAgC,GAAG,UAAU,CAAC,OAAO,sCAAsC,CAAC,CAAA;AAEjG,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAA;IACrC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAChC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;IACzC,MAAM,EAAE,OAAO,CAAA;IACf,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACtD,MAAM,EAAE,cAAc,CAAA;IACtB,oBAAoB,EAAE,UAAU,GAAG,KAAK,CAAA;IACxC,UAAU,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAA;IACxC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACnC,gCAAgC,EAAE,gCAAgC,CAAA;CACnE,CAAA;AAED,wBAAgB,sCAAsC;;;EAkCrD;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,eAAe,CAAC,CA6H1B"}
|
|
@@ -2,12 +2,15 @@ import * as fs from 'node:fs';
|
|
|
2
2
|
import * as fsp from 'node:fs/promises';
|
|
3
3
|
import * as path from 'node:path';
|
|
4
4
|
import { getTsconfig } from 'get-tsconfig';
|
|
5
|
+
import MagicString from 'magic-string';
|
|
5
6
|
import { minify } from 'oxc-minify';
|
|
7
|
+
import { parseSync, visitorKeys } from 'oxc-parser';
|
|
6
8
|
import { transform as oxcTransform } from 'oxc-transform';
|
|
7
9
|
import { init as esModuleLexerInit, parse as esModuleLexer } from 'es-module-lexer';
|
|
8
10
|
import { isCommonJS, mayContainCommonJSModuleGlobals } from "./cjs-check.js";
|
|
9
11
|
import { createAssetServerCompilationError, isAssetServerCompilationError, } from "../compilation-error.js";
|
|
10
12
|
import { generateFingerprint } from "../fingerprint.js";
|
|
13
|
+
import { maskAuthoredInjectedPackageSpecifier, mayContainInjectedPackageSpecifier, restoreAuthoredInjectedPackageSpecifier, } from "../injected-packages.js";
|
|
11
14
|
import { normalizeFilePath } from "../paths.js";
|
|
12
15
|
import { composeSourceMaps, rewriteSourceMapSources, stringifySourceMap } from "../source-maps.js";
|
|
13
16
|
const scriptModuleTypes = [
|
|
@@ -108,7 +111,7 @@ export async function transformModule(record, args) {
|
|
|
108
111
|
sourceMaps: args.sourceMaps ?? undefined,
|
|
109
112
|
target: args.target ?? undefined,
|
|
110
113
|
});
|
|
111
|
-
analysis.unresolvedImports = analysis.unresolvedImports.filter((unresolved) => !args.externalSet.has(unresolved.specifier));
|
|
114
|
+
analysis.unresolvedImports = analysis.unresolvedImports.filter((unresolved) => !args.externalSet.has(getDisplayImportSpecifier(unresolved.specifier)));
|
|
112
115
|
if (mayContainCommonJSModuleGlobals(sourceText) && isCommonJS(analysis.rawCode)) {
|
|
113
116
|
throw createAssetServerCompilationError(`CommonJS module detected: ${resolvedPath}. ` +
|
|
114
117
|
`This module uses CommonJS (require/module.exports) which is not supported. ` +
|
|
@@ -138,7 +141,7 @@ export async function transformModule(record, args) {
|
|
|
138
141
|
content: sourceText,
|
|
139
142
|
}),
|
|
140
143
|
identityPath: record.identityPath,
|
|
141
|
-
importerDir: path.dirname(
|
|
144
|
+
importerDir: path.dirname(record.identityPath),
|
|
142
145
|
packageSpecifiers: analysis.unresolvedImports
|
|
143
146
|
.filter((unresolved) => isPackageImportSpecifier(unresolved.specifier))
|
|
144
147
|
.map((unresolved) => unresolved.specifier),
|
|
@@ -178,9 +181,10 @@ function isPackageImportSpecifier(specifier) {
|
|
|
178
181
|
return !specifier.startsWith('./') && !specifier.startsWith('../') && !specifier.startsWith('/');
|
|
179
182
|
}
|
|
180
183
|
async function analyzeModuleSource(sourceText, resolvedPath, transformOptions, options) {
|
|
184
|
+
let maskedSourceText = maskAuthoredInjectedPackageImports(sourceText, resolvedPath);
|
|
181
185
|
let transformResult;
|
|
182
186
|
try {
|
|
183
|
-
transformResult = await oxcTransform(resolvedPath,
|
|
187
|
+
transformResult = await oxcTransform(resolvedPath, maskedSourceText, getTransformOptions(resolvedPath, transformOptions, options));
|
|
184
188
|
assertNoCompilerErrors(transformResult.errors, resolvedPath, 'transform');
|
|
185
189
|
}
|
|
186
190
|
catch (error) {
|
|
@@ -325,6 +329,78 @@ async function getUnresolvedImportsFromLexer(rawCode) {
|
|
|
325
329
|
}
|
|
326
330
|
return unresolvedImports;
|
|
327
331
|
}
|
|
332
|
+
function getDisplayImportSpecifier(specifier) {
|
|
333
|
+
return restoreAuthoredInjectedPackageSpecifier(specifier) ?? specifier;
|
|
334
|
+
}
|
|
335
|
+
function maskAuthoredInjectedPackageImports(sourceText, resolvedPath) {
|
|
336
|
+
if (!mayContainInjectedPackageSpecifier(sourceText)) {
|
|
337
|
+
return sourceText;
|
|
338
|
+
}
|
|
339
|
+
let parseResult = parseSync(resolvedPath, sourceText, {
|
|
340
|
+
lang: getSourceLanguageForPath(resolvedPath),
|
|
341
|
+
sourceType: 'module',
|
|
342
|
+
});
|
|
343
|
+
if (parseResult.errors.length > 0) {
|
|
344
|
+
return sourceText;
|
|
345
|
+
}
|
|
346
|
+
let replacements = [];
|
|
347
|
+
walkAst(parseResult.program, (node) => {
|
|
348
|
+
if (node.type !== 'ImportDeclaration' &&
|
|
349
|
+
node.type !== 'ExportAllDeclaration' &&
|
|
350
|
+
node.type !== 'ExportNamedDeclaration' &&
|
|
351
|
+
node.type !== 'ImportExpression') {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
let source = 'source' in node ? node.source : null;
|
|
355
|
+
if (!isStringLiteralNode(source))
|
|
356
|
+
return;
|
|
357
|
+
let maskedSpecifier = maskAuthoredInjectedPackageSpecifier(source.value);
|
|
358
|
+
if (maskedSpecifier == null)
|
|
359
|
+
return;
|
|
360
|
+
replacements.push({
|
|
361
|
+
end: source.end - 1,
|
|
362
|
+
specifier: maskedSpecifier,
|
|
363
|
+
start: source.start + 1,
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
if (replacements.length === 0)
|
|
367
|
+
return sourceText;
|
|
368
|
+
let rewrittenSource = new MagicString(sourceText);
|
|
369
|
+
for (let replacement of replacements) {
|
|
370
|
+
rewrittenSource.overwrite(replacement.start, replacement.end, replacement.specifier);
|
|
371
|
+
}
|
|
372
|
+
return rewrittenSource.toString();
|
|
373
|
+
}
|
|
374
|
+
function walkAst(node, visit) {
|
|
375
|
+
visit(node);
|
|
376
|
+
let keys = visitorKeys[node.type];
|
|
377
|
+
if (!keys)
|
|
378
|
+
return;
|
|
379
|
+
let walkableNode = node;
|
|
380
|
+
for (let key of keys) {
|
|
381
|
+
let value = walkableNode[key];
|
|
382
|
+
if (Array.isArray(value)) {
|
|
383
|
+
for (let child of value) {
|
|
384
|
+
if (isAstNode(child)) {
|
|
385
|
+
walkAst(child, visit);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
continue;
|
|
389
|
+
}
|
|
390
|
+
if (isAstNode(value)) {
|
|
391
|
+
walkAst(value, visit);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
function isAstNode(value) {
|
|
396
|
+
return typeof value === 'object' && value !== null && 'type' in value;
|
|
397
|
+
}
|
|
398
|
+
function isStringLiteralNode(node) {
|
|
399
|
+
return (node?.type === 'Literal' &&
|
|
400
|
+
typeof node.start === 'number' &&
|
|
401
|
+
typeof node.end === 'number' &&
|
|
402
|
+
typeof node.value === 'string');
|
|
403
|
+
}
|
|
328
404
|
function getStaticImportSpecifier(source, imported) {
|
|
329
405
|
if (imported.n != null) {
|
|
330
406
|
return imported.n;
|
|
@@ -21,7 +21,11 @@ type StyleGetOptions = {
|
|
|
21
21
|
type StyleCompilerOptions = {
|
|
22
22
|
buildId?: string;
|
|
23
23
|
fingerprintAssets: boolean;
|
|
24
|
+
getServedFileUrl?(identityPath: string, options: {
|
|
25
|
+
transform: readonly string[] | null;
|
|
26
|
+
}): Promise<string>;
|
|
24
27
|
isAllowed(absolutePath: string): boolean;
|
|
28
|
+
isServedFilePath(filePath: string): boolean;
|
|
25
29
|
minify: boolean;
|
|
26
30
|
onWatchDirectoriesChange?: (delta: {
|
|
27
31
|
add: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/lib/styles/compiler.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,WAAW,CAAA;AAS3D,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,YAAY,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,YAAY,GAAG,IAAI,CAAA;CAC/B,CAAA;AAED,KAAK,cAAc,GACf;IACE,KAAK,EAAE,kBAAkB,CAAA;IACzB,IAAI,EAAE,OAAO,CAAA;CACd,GACD;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,cAAc,CAAA;CACrB,CAAA;AAEL,KAAK,eAAe,GAAG;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,kBAAkB,EAAE,OAAO,CAAA;IAC3B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;CACpC,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAA;IACxC,MAAM,EAAE,OAAO,CAAA;IACf,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAA;IAC/E,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,cAAc,CAAA;IACtB,oBAAoB,EAAE,UAAU,GAAG,KAAK,CAAA;IACxC,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;IAClC,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAC7B,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAChC,CAAA;AAED,KAAK,aAAa,GAAG;IACnB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC3E,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7E,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACrF,CAAA;AAKD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/lib/styles/compiler.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,WAAW,CAAA;AAS3D,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,YAAY,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,YAAY,GAAG,IAAI,CAAA;CAC/B,CAAA;AAED,KAAK,cAAc,GACf;IACE,KAAK,EAAE,kBAAkB,CAAA;IACzB,IAAI,EAAE,OAAO,CAAA;CACd,GACD;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,cAAc,CAAA;CACrB,CAAA;AAEL,KAAK,eAAe,GAAG;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,kBAAkB,EAAE,OAAO,CAAA;IAC3B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;CACpC,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,gBAAgB,CAAC,CACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;QACP,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;KACpC,GACA,OAAO,CAAC,MAAM,CAAC,CAAA;IAClB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAA;IACxC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;IAC3C,MAAM,EAAE,OAAO,CAAA;IACf,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAA;IAC/E,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,cAAc,CAAA;IACtB,oBAAoB,EAAE,UAAU,GAAG,KAAK,CAAA;IACxC,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;IAClC,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAC7B,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAChC,CAAA;AAED,KAAK,aAAa,GAAG;IACnB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC3E,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7E,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACrF,CAAA;AAKD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAmOhF;AAkED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE;IACP,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,kBAAkB,EAAE,OAAO,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;CACf,GACA,QAAQ,CA6BV"}
|
|
@@ -23,6 +23,7 @@ export function createStyleCompiler(options) {
|
|
|
23
23
|
let emitInFlightByCacheKey = new Map();
|
|
24
24
|
let resolveArgs = {
|
|
25
25
|
isAllowed: resolvedOptions.isAllowed,
|
|
26
|
+
isServedFilePath: resolvedOptions.isServedFilePath,
|
|
26
27
|
isWatchIgnored,
|
|
27
28
|
routes: resolvedOptions.routes,
|
|
28
29
|
};
|
|
@@ -164,6 +165,7 @@ export function createStyleCompiler(options) {
|
|
|
164
165
|
let startedVersion = record.invalidationVersion;
|
|
165
166
|
let resolvedStyle = await getOrCreateResolvedStyle(record);
|
|
166
167
|
let emitResolvedStyleResult = await emitResolvedStyle(resolvedStyle, {
|
|
168
|
+
getServedFileUrl: resolvedOptions.getServedFileUrl,
|
|
167
169
|
getServedUrl,
|
|
168
170
|
sourceMaps: resolvedOptions.sourceMaps,
|
|
169
171
|
});
|
|
@@ -18,6 +18,9 @@ type EmitResult = {
|
|
|
18
18
|
ok: false;
|
|
19
19
|
};
|
|
20
20
|
export declare function emitResolvedStyle(resolvedStyle: ResolvedStyle, options: {
|
|
21
|
+
getServedFileUrl?(identityPath: string, options: {
|
|
22
|
+
transform: readonly string[] | null;
|
|
23
|
+
}): Promise<string>;
|
|
21
24
|
getServedUrl(identityPath: string): Promise<string>;
|
|
22
25
|
sourceMaps?: 'external' | 'inline';
|
|
23
26
|
}): Promise<EmitResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../../src/lib/styles/emit.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,YAAY,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,SAAS,EAAE,YAAY,GAAG,IAAI,CAAA;CAC/B,CAAA;AAED,KAAK,UAAU,GACX;IACE,EAAE,EAAE,IAAI,CAAA;IACR,KAAK,EAAE,YAAY,CAAA;CACpB,GACD;IACE,KAAK,EAAE,2BAA2B,CAAA;IAClC,EAAE,EAAE,KAAK,CAAA;CACV,CAAA;AAEL,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE;IACP,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnD,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;CACnC,GACA,OAAO,CAAC,UAAU,CAAC,CAkCrB"}
|
|
1
|
+
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../../src/lib/styles/emit.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,YAAY,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,SAAS,EAAE,YAAY,GAAG,IAAI,CAAA;CAC/B,CAAA;AAED,KAAK,UAAU,GACX;IACE,EAAE,EAAE,IAAI,CAAA;IACR,KAAK,EAAE,YAAY,CAAA;CACpB,GACD;IACE,KAAK,EAAE,2BAA2B,CAAA;IAClC,EAAE,EAAE,KAAK,CAAA;CACV,CAAA;AAEL,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE;IACP,gBAAgB,CAAC,CACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;QACP,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;KACpC,GACA,OAAO,CAAC,MAAM,CAAC,CAAA;IAClB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnD,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;CACnC,GACA,OAAO,CAAC,UAAU,CAAC,CAkCrB"}
|
package/dist/lib/styles/emit.js
CHANGED
|
@@ -46,7 +46,11 @@ async function rewriteDependencies(resolvedStyle, options) {
|
|
|
46
46
|
for (let dependency of resolvedStyle.dependencies) {
|
|
47
47
|
let replacement = dependency.kind === 'external'
|
|
48
48
|
? dependency.replacement
|
|
49
|
-
:
|
|
49
|
+
: dependency.kind === 'style'
|
|
50
|
+
? `${await options.getServedUrl(dependency.depPath)}${dependency.suffix}`
|
|
51
|
+
: appendUrlSuffix(await getServedFileUrl(options, resolvedStyle.identityPath, dependency.depPath, {
|
|
52
|
+
transform: dependency.requestTransform,
|
|
53
|
+
}), dependency.suffix);
|
|
50
54
|
let start = resolvedStyle.rawCode.indexOf(dependency.placeholder);
|
|
51
55
|
if (start < 0) {
|
|
52
56
|
throw createAssetServerCompilationError(`Missing dependency placeholder "${dependency.placeholder}" while emitting style ${resolvedStyle.identityPath}.`, {
|
|
@@ -62,6 +66,37 @@ async function rewriteDependencies(resolvedStyle, options) {
|
|
|
62
66
|
: null,
|
|
63
67
|
};
|
|
64
68
|
}
|
|
69
|
+
function appendUrlSuffix(url, suffix) {
|
|
70
|
+
if (!suffix.startsWith('?') || !url.includes('?')) {
|
|
71
|
+
return `${url}${suffix}`;
|
|
72
|
+
}
|
|
73
|
+
return `${url}&${suffix.slice(1)}`;
|
|
74
|
+
}
|
|
75
|
+
async function getServedFileUrl(options, importerPath, identityPath, request) {
|
|
76
|
+
if (!options.getServedFileUrl) {
|
|
77
|
+
throw createAssetServerCompilationError(`Missing file URL resolver for ${identityPath}.`, {
|
|
78
|
+
code: 'EMIT_FAILED',
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
return await options.getServedFileUrl(identityPath, request);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
if (request.transform !== null &&
|
|
86
|
+
isAssetServerCompilationError(error) &&
|
|
87
|
+
error.code === 'FILE_TRANSFORM_QUERY_INVALID') {
|
|
88
|
+
console.warn(`Invalid file transform request "${request.transform.join(',')}" in CSS asset ${importerPath} for ${identityPath}: ${error.message}`);
|
|
89
|
+
let href = await options.getServedFileUrl(identityPath, { transform: null });
|
|
90
|
+
let searchParams = new URLSearchParams();
|
|
91
|
+
for (let transform of request.transform) {
|
|
92
|
+
searchParams.append('transform', transform);
|
|
93
|
+
}
|
|
94
|
+
let search = searchParams.toString();
|
|
95
|
+
return search.length > 0 ? `${href}?${search}` : href;
|
|
96
|
+
}
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
65
100
|
async function createEmittedAsset(content) {
|
|
66
101
|
return {
|
|
67
102
|
content,
|
|
@@ -10,9 +10,15 @@ type ResolvedDependency = {
|
|
|
10
10
|
replacement: string;
|
|
11
11
|
} | {
|
|
12
12
|
depPath: string;
|
|
13
|
-
kind: '
|
|
13
|
+
kind: 'style';
|
|
14
14
|
placeholder: string;
|
|
15
15
|
suffix: string;
|
|
16
|
+
} | {
|
|
17
|
+
depPath: string;
|
|
18
|
+
kind: 'file';
|
|
19
|
+
placeholder: string;
|
|
20
|
+
requestTransform: readonly string[] | null;
|
|
21
|
+
suffix: string;
|
|
16
22
|
};
|
|
17
23
|
export type ResolvedStyle = {
|
|
18
24
|
dependencies: ResolvedDependency[];
|
|
@@ -27,6 +33,7 @@ export type ResolvedStyle = {
|
|
|
27
33
|
};
|
|
28
34
|
export type ResolveArgs = {
|
|
29
35
|
isAllowed(absolutePath: string): boolean;
|
|
36
|
+
isServedFilePath(filePath: string): boolean;
|
|
30
37
|
isWatchIgnored(filePath: string): boolean;
|
|
31
38
|
routes: CompiledRoutes;
|
|
32
39
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/lib/styles/resolve.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/lib/styles/resolve.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,KAAK,WAAW,GAAG,YAAY,CAAC,gBAAgB,EAAE,aAAa,EAAE,YAAY,CAAC,CAAA;AAE9E,KAAK,kBAAkB,GACnB;IACE,IAAI,EAAE,UAAU,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB,GACD;IACE,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,OAAO,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf,GACD;IACE,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IAC1C,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAEL,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,EAAE,kBAAkB,EAAE,CAAA;IAClC,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAA;IACxC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;IAC3C,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;IACzC,MAAM,EAAE,cAAc,CAAA;CACvB,CAAA;AAED,KAAK,aAAa,GAAG;IACnB,QAAQ,EAAE,cAAc,CAAA;CACzB,GAAG,CACA;IACE,EAAE,EAAE,IAAI,CAAA;IACR,KAAK,EAAE,aAAa,CAAA;CACrB,GACD;IACE,KAAK,EAAE,2BAA2B,CAAA;IAClC,EAAE,EAAE,KAAK,CAAA;CACV,CACJ,CAAA;AAQD,wBAAsB,YAAY,CAChC,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,gBAAgB,EAC7B,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,aAAa,CAAC,CA+DxB;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,GAChB;IACD,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CA+BA"}
|