@remix-run/assets 0.1.0 → 0.3.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.
Files changed (72) hide show
  1. package/README.md +88 -67
  2. package/dist/lib/access.d.ts.map +1 -1
  3. package/dist/lib/access.js +3 -0
  4. package/dist/lib/asset-server.d.ts +50 -45
  5. package/dist/lib/asset-server.d.ts.map +1 -1
  6. package/dist/lib/asset-server.js +159 -50
  7. package/dist/lib/compilation-error.d.ts +2 -2
  8. package/dist/lib/compilation-error.d.ts.map +1 -1
  9. package/dist/lib/compilation-error.js +1 -1
  10. package/dist/lib/file-matcher.d.ts.map +1 -1
  11. package/dist/lib/file-matcher.js +3 -2
  12. package/dist/lib/injected-packages.d.ts +11 -0
  13. package/dist/lib/injected-packages.d.ts.map +1 -0
  14. package/dist/lib/injected-packages.js +86 -0
  15. package/dist/lib/module-store.d.ts +41 -0
  16. package/dist/lib/module-store.d.ts.map +1 -0
  17. package/dist/lib/{scripts/store.js → module-store.js} +43 -41
  18. package/dist/lib/paths.d.ts +1 -0
  19. package/dist/lib/paths.d.ts.map +1 -1
  20. package/dist/lib/paths.js +12 -0
  21. package/dist/lib/routes.d.ts +5 -7
  22. package/dist/lib/routes.d.ts.map +1 -1
  23. package/dist/lib/routes.js +13 -16
  24. package/dist/lib/scripts/compiler.d.ts +15 -15
  25. package/dist/lib/scripts/compiler.d.ts.map +1 -1
  26. package/dist/lib/scripts/compiler.js +50 -46
  27. package/dist/lib/scripts/emit.js +2 -2
  28. package/dist/lib/scripts/resolve.d.ts +7 -17
  29. package/dist/lib/scripts/resolve.d.ts.map +1 -1
  30. package/dist/lib/scripts/resolve.js +47 -14
  31. package/dist/lib/scripts/transform.d.ts +11 -9
  32. package/dist/lib/scripts/transform.d.ts.map +1 -1
  33. package/dist/lib/scripts/transform.js +110 -23
  34. package/dist/lib/source-maps.d.ts +1 -1
  35. package/dist/lib/source-maps.d.ts.map +1 -1
  36. package/dist/lib/source-maps.js +7 -1
  37. package/dist/lib/styles/compiler.d.ts +52 -0
  38. package/dist/lib/styles/compiler.d.ts.map +1 -0
  39. package/dist/lib/styles/compiler.js +272 -0
  40. package/dist/lib/styles/emit.d.ts +25 -0
  41. package/dist/lib/styles/emit.d.ts.map +1 -0
  42. package/dist/lib/styles/emit.js +78 -0
  43. package/dist/lib/styles/resolve.d.ts +48 -0
  44. package/dist/lib/styles/resolve.d.ts.map +1 -0
  45. package/dist/lib/styles/resolve.js +188 -0
  46. package/dist/lib/styles/transform.d.ts +47 -0
  47. package/dist/lib/styles/transform.d.ts.map +1 -0
  48. package/dist/lib/styles/transform.js +131 -0
  49. package/dist/lib/target.d.ts +21 -0
  50. package/dist/lib/target.d.ts.map +1 -0
  51. package/dist/lib/target.js +127 -0
  52. package/package.json +13 -4
  53. package/src/lib/access.ts +2 -0
  54. package/src/lib/asset-server.ts +239 -99
  55. package/src/lib/compilation-error.ts +7 -7
  56. package/src/lib/file-matcher.ts +3 -2
  57. package/src/lib/injected-packages.ts +117 -0
  58. package/src/lib/{scripts/store.ts → module-store.ts} +100 -87
  59. package/src/lib/paths.ts +28 -0
  60. package/src/lib/routes.ts +31 -22
  61. package/src/lib/scripts/compiler.ts +88 -70
  62. package/src/lib/scripts/emit.ts +2 -2
  63. package/src/lib/scripts/resolve.ts +85 -28
  64. package/src/lib/scripts/transform.ts +153 -36
  65. package/src/lib/source-maps.ts +8 -1
  66. package/src/lib/styles/compiler.ts +400 -0
  67. package/src/lib/styles/emit.ts +137 -0
  68. package/src/lib/styles/resolve.ts +316 -0
  69. package/src/lib/styles/transform.ts +226 -0
  70. package/src/lib/target.ts +196 -0
  71. package/dist/lib/scripts/store.d.ts +0 -40
  72. package/dist/lib/scripts/store.d.ts.map +0 -1
@@ -1,8 +1,10 @@
1
1
  import type { ResolverFactory } from 'oxc-resolver';
2
2
  import type { AssetServerCompilationError } from '../compilation-error.ts';
3
+ import type { ModuleRecord, ModuleTracking } from '../module-store.ts';
3
4
  import type { CompiledRoutes } from '../routes.ts';
4
- import type { ModuleRecord } from './store.ts';
5
5
  import type { ResolveModuleResult, TransformedModule } from './transform.ts';
6
+ import type { EmittedModule } from './emit.ts';
7
+ type ScriptRecord = ModuleRecord<TransformedModule, ResolvedModule, EmittedModule>;
6
8
  export declare const resolverExtensionAlias: {
7
9
  '.js': string[];
8
10
  '.jsx': string[];
@@ -16,38 +18,26 @@ type ResolvedImport = {
16
18
  quote?: '"' | "'" | '`';
17
19
  start: number;
18
20
  };
19
- type RelativeImportResolution = {
20
- candidatePaths: readonly string[];
21
- candidatePrefixes: readonly string[];
22
- specifier: string;
23
- };
24
- export type TrackedResolution = RelativeImportResolution & {
25
- resolvedIdentityPath: string | null;
26
- };
27
21
  export type ResolvedModule = {
28
22
  deps: string[];
29
23
  fingerprint: string | null;
30
24
  identityPath: string;
31
25
  imports: ResolvedImport[];
32
26
  trackedFiles: string[];
33
- trackedResolutions: TrackedResolution[];
34
27
  rawCode: string;
35
28
  resolvedPath: string;
36
29
  sourceMap: string | null;
37
30
  stableUrlPathname: string;
38
31
  };
39
- export type ResolutionFailureState = {
40
- trackedFiles: readonly string[];
41
- trackedResolutions: readonly TrackedResolution[];
42
- };
43
32
  type ResolveResult = {
33
+ tracking: ModuleTracking;
34
+ } & ({
44
35
  ok: true;
45
36
  value: ResolvedModule;
46
37
  } | {
47
38
  ok: false;
48
39
  error: AssetServerCompilationError;
49
- tracking: ResolutionFailureState;
50
- };
40
+ });
51
41
  export type ResolveArgs = {
52
42
  isAllowed(absolutePath: string): boolean;
53
43
  isWatchIgnored(filePath: string): boolean;
@@ -55,6 +45,6 @@ export type ResolveArgs = {
55
45
  resolverFactory: ResolverFactory;
56
46
  routes: CompiledRoutes;
57
47
  };
58
- export declare function resolveModule(record: ModuleRecord, transformed: TransformedModule, args: ResolveArgs): Promise<ResolveResult>;
48
+ export declare function resolveModule(record: ScriptRecord, transformed: TransformedModule, args: ResolveArgs): Promise<ResolveResult>;
59
49
  export {};
60
50
  //# sourceMappingURL=resolve.d.ts.map
@@ -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;AAE1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAE5E,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;AAED,KAAK,wBAAwB,GAAG;IAC9B,cAAc,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,wBAAwB,GAAG;IACzD,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;CACpC,CAAA;AAED,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,kBAAkB,EAAE,iBAAiB,EAAE,CAAA;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B,kBAAkB,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACjD,CAAA;AAED,KAAK,aAAa,GACd;IACE,EAAE,EAAE,IAAI,CAAA;IACR,KAAK,EAAE,cAAc,CAAA;CACtB,GACD;IACE,EAAE,EAAE,KAAK,CAAA;IACT,KAAK,EAAE,2BAA2B,CAAA;IAClC,QAAQ,EAAE,sBAAsB,CAAA;CACjC,CAAA;AAEL,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;AAQD,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,iBAAiB,EAC9B,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,aAAa,CAAC,CAyIxB"}
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,CA0IxB"}
@@ -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'],
@@ -28,30 +29,31 @@ 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 trackedResolution = getTrackedRelativeImportResolution(transformed.importerDir, unresolved.specifier, args.isWatchIgnored);
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 "${unresolved.specifier}" in ${transformed.resolvedPath}. ` +
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(`Resolved import "${unresolved.specifier}" in ${transformed.resolvedPath} is not a supported script module. ` +
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(`Resolved import "${unresolved.specifier}" in ${transformed.resolvedPath} is not allowed by the asset server allow/deny configuration. ` +
48
- `Add a matching allow rule, remove a conflicting deny rule, or mark this import as external.`, {
49
+ return failResolve(createAssetServerCompilationError(`Import "${displaySpecifier}" in ${transformed.resolvedPath}, resolved to "${resolvedImport.identityPath}", is not allowed by the asset server allow/deny configuration. ` +
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(`Resolved import "${unresolved.specifier}" in ${transformed.resolvedPath} is outside all configured fileMap entries. ` +
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 });
@@ -78,13 +80,13 @@ export async function resolveModule(record, transformed, args) {
78
80
  }
79
81
  return {
80
82
  ok: true,
83
+ tracking: toResolveTracking(trackedFiles, trackedResolutions),
81
84
  value: {
82
85
  deps: [...deps],
83
86
  fingerprint: transformed.fingerprint,
84
87
  identityPath: record.identityPath,
85
88
  imports: importsWithPaths,
86
89
  trackedFiles: [...trackedFiles],
87
- trackedResolutions,
88
90
  rawCode: transformed.rawCode,
89
91
  resolvedPath: transformed.resolvedPath,
90
92
  sourceMap: transformed.sourceMap,
@@ -164,10 +166,13 @@ async function batchResolveSpecifiers(specifiers, importerPath, resolverFactory)
164
166
  return resolvedBySpecifier;
165
167
  try {
166
168
  for (let specifier of specifiers) {
167
- let resolutionResult = await resolverFactory.resolveFileAsync(importerPath, specifier);
169
+ let normalizedResolution = normalizeSpecifierResolution(specifier, importerPath);
170
+ let resolutionResult = await resolverFactory.resolveFileAsync(normalizedResolution.importerPath, normalizedResolution.specifier);
168
171
  if (resolutionResult.error) {
169
- throw createAssetServerCompilationError(`Failed to resolve import "${specifier}" in ${importerPath}. ` +
170
- `Ensure it resolves to a file within the configured asset server fileMap, or mark it as external.`, {
172
+ throw createAssetServerCompilationError(normalizedResolution.importerPath === getInjectedPackageImporterPath()
173
+ ? `Failed to resolve injected import "${specifier}" from asset server.`
174
+ : `Failed to resolve import "${normalizedResolution.specifier}" in ${normalizedResolution.importerPath}. ` +
175
+ `Ensure it resolves to a file within the configured asset server fileMap, or mark it as external.`, {
171
176
  code: 'IMPORT_RESOLUTION_FAILED',
172
177
  });
173
178
  }
@@ -199,14 +204,42 @@ function getUniqueSpecifiers(unresolvedImports) {
199
204
  function formatUnknownError(error) {
200
205
  return error instanceof Error ? error.message : String(error);
201
206
  }
207
+ function normalizeSpecifierResolution(specifier, importerPath) {
208
+ let authoredInjectedPackageSpecifier = restoreAuthoredInjectedPackageSpecifier(specifier);
209
+ if (authoredInjectedPackageSpecifier) {
210
+ return {
211
+ importerPath,
212
+ specifier: authoredInjectedPackageSpecifier,
213
+ };
214
+ }
215
+ if (getInjectedPackageNameForSpecifier(specifier)) {
216
+ return {
217
+ importerPath: getInjectedPackageImporterPath(),
218
+ specifier,
219
+ };
220
+ }
221
+ return {
222
+ importerPath,
223
+ specifier,
224
+ };
225
+ }
226
+ function getDisplayImportSpecifier(specifier) {
227
+ return restoreAuthoredInjectedPackageSpecifier(specifier) ?? specifier;
228
+ }
202
229
  function failResolve(error, trackedFiles, trackedResolutions, importerPath, options = {}) {
203
230
  return {
204
231
  ok: false,
205
232
  error: toResolveError(error, importerPath),
206
- tracking: {
207
- trackedFiles: [...trackedFiles],
208
- trackedResolutions: appendFailedTrackedResolution(trackedResolutions, options.trackedResolution),
209
- },
233
+ tracking: toResolveTracking(trackedFiles, appendFailedTrackedResolution(trackedResolutions, options.trackedResolution)),
234
+ };
235
+ }
236
+ function toResolveTracking(trackedFiles, trackedResolutions) {
237
+ return {
238
+ trackedFiles: [
239
+ ...trackedFiles,
240
+ ...trackedResolutions.flatMap((trackedResolution) => trackedResolution.candidatePaths),
241
+ ],
242
+ trackedDirectories: trackedResolutions.flatMap((trackedResolution) => trackedResolution.candidatePrefixes),
210
243
  };
211
244
  }
212
245
  function appendFailedTrackedResolution(trackedResolutions, trackedResolution) {
@@ -1,8 +1,11 @@
1
1
  import type { TsConfigJsonResolved } from 'get-tsconfig';
2
2
  import type { AssetServerCompilationError } from '../compilation-error.ts';
3
+ import type { ModuleRecord, ModuleTracking } from '../module-store.ts';
3
4
  import type { CompiledRoutes } from '../routes.ts';
4
- import type { ScriptsTarget } from '../asset-server.ts';
5
- import type { ModuleRecord } from './store.ts';
5
+ import type { EmittedModule } from './emit.ts';
6
+ import type { ResolvedScriptTarget } from '../target.ts';
7
+ import type { ResolvedModule } from './resolve.ts';
8
+ type ScriptRecord = ModuleRecord<TransformedModule, ResolvedModule, EmittedModule>;
6
9
  export type ResolveModuleResult = {
7
10
  identityPath: string;
8
11
  resolvedPath: string;
@@ -25,16 +28,15 @@ export type TransformedModule = {
25
28
  trackedFiles: string[];
26
29
  unresolvedImports: UnresolvedImport[];
27
30
  };
28
- export type TransformFailureState = {
29
- trackedFiles: readonly string[];
30
- };
31
31
  type TransformResult = {
32
+ tracking: ModuleTracking;
33
+ } & ({
32
34
  ok: true;
33
35
  value: TransformedModule;
34
- } | ({
36
+ } | {
35
37
  ok: false;
36
38
  error: AssetServerCompilationError;
37
- } & TransformFailureState);
39
+ });
38
40
  type TsconfigTransformOptions = {
39
41
  trackedFiles: string[];
40
42
  tsconfigRaw?: TsConfigJsonResolved;
@@ -50,13 +52,13 @@ export type TransformArgs = {
50
52
  routes: CompiledRoutes;
51
53
  sourceMapSourcePaths: 'absolute' | 'url';
52
54
  sourceMaps: 'external' | 'inline' | null;
53
- target: ScriptsTarget | null;
55
+ target: ResolvedScriptTarget | null;
54
56
  tsconfigTransformOptionsResolver: TsconfigTransformOptionsResolver;
55
57
  };
56
58
  export declare function createTsconfigTransformOptionsResolver(): {
57
59
  clear(): void;
58
60
  getTransformOptions(filePath: string, isWatchIgnored: (filePath: string) => boolean): TsconfigTransformOptions;
59
61
  };
60
- export declare function transformModule(record: ModuleRecord, args: TransformArgs): Promise<TransformResult>;
62
+ export declare function transformModule(record: ScriptRecord, args: TransformArgs): Promise<TransformResult>;
61
63
  export {};
62
64
  //# sourceMappingURL=transform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/lib/scripts/transform.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAS,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAQ/D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAG1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AA6B9C,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,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;CAChC,CAAA;AAED,KAAK,eAAe,GAChB;IACE,EAAE,EAAE,IAAI,CAAA;IACR,KAAK,EAAE,iBAAiB,CAAA;CACzB,GACD,CAAC;IACC,EAAE,EAAE,KAAK,CAAA;IACT,KAAK,EAAE,2BAA2B,CAAA;CACnC,GAAG,qBAAqB,CAAC,CAAA;AAE9B,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,aAAa,GAAG,IAAI,CAAA;IAC5B,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,CAiH1B"}
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 = [
@@ -63,10 +66,12 @@ export async function transformModule(record, args) {
63
66
  if (!resolvedPath) {
64
67
  return {
65
68
  ok: false,
66
- error: createAssetServerCompilationError(`Module not found: ${record.identityPath}`, {
67
- code: 'MODULE_NOT_FOUND',
69
+ error: createAssetServerCompilationError(`File not found: ${record.identityPath}`, {
70
+ code: 'FILE_NOT_FOUND',
68
71
  }),
69
- trackedFiles: args.isWatchIgnored(record.identityPath) ? [] : [record.identityPath],
72
+ tracking: {
73
+ trackedFiles: args.isWatchIgnored(record.identityPath) ? [] : [record.identityPath],
74
+ },
70
75
  };
71
76
  }
72
77
  let transformOptions = args.tsconfigTransformOptionsResolver.getTransformOptions(resolvedPath, args.isWatchIgnored);
@@ -82,17 +87,21 @@ export async function transformModule(record, args) {
82
87
  if (isNoEntityError(error)) {
83
88
  return {
84
89
  ok: false,
85
- error: createAssetServerCompilationError(`Module not found: ${resolvedPath}`, {
90
+ error: createAssetServerCompilationError(`File not found: ${resolvedPath}`, {
86
91
  cause: error,
87
- code: 'MODULE_NOT_FOUND',
92
+ code: 'FILE_NOT_FOUND',
88
93
  }),
89
- trackedFiles,
94
+ tracking: {
95
+ trackedFiles,
96
+ },
90
97
  };
91
98
  }
92
99
  return {
93
100
  ok: false,
94
101
  error: toTransformFailedError(error, resolvedPath),
95
- trackedFiles,
102
+ tracking: {
103
+ trackedFiles,
104
+ },
96
105
  };
97
106
  }
98
107
  try {
@@ -102,25 +111,28 @@ export async function transformModule(record, args) {
102
111
  sourceMaps: args.sourceMaps ?? undefined,
103
112
  target: args.target ?? undefined,
104
113
  });
105
- analysis.unresolvedImports = analysis.unresolvedImports.filter((unresolved) => !args.externalSet.has(unresolved.specifier));
114
+ analysis.unresolvedImports = analysis.unresolvedImports.filter((unresolved) => !args.externalSet.has(getDisplayImportSpecifier(unresolved.specifier)));
106
115
  if (mayContainCommonJSModuleGlobals(sourceText) && isCommonJS(analysis.rawCode)) {
107
116
  throw createAssetServerCompilationError(`CommonJS module detected: ${resolvedPath}. ` +
108
117
  `This module uses CommonJS (require/module.exports) which is not supported. ` +
109
118
  `Please use an ESM-compatible module.`, {
110
- code: 'MODULE_COMMONJS_NOT_SUPPORTED',
119
+ code: 'COMMONJS_NOT_SUPPORTED',
111
120
  });
112
121
  }
113
122
  let stableUrlPathname = args.routes.toUrlPathname(record.identityPath);
114
123
  if (!stableUrlPathname) {
115
- throw createAssetServerCompilationError(`Module ${record.identityPath} is outside all configured fileMap entries.`, {
116
- code: 'MODULE_OUTSIDE_FILE_MAP',
124
+ throw createAssetServerCompilationError(`File ${record.identityPath} is outside all configured fileMap entries.`, {
125
+ code: 'FILE_OUTSIDE_FILE_MAP',
117
126
  });
118
127
  }
119
128
  let sourceMap = analysis.sourceMap
120
- ? rewriteSourceMapSources(analysis.sourceMap, resolvedPath, stableUrlPathname, args.sourceMapSourcePaths)
129
+ ? rewriteSourceMapSources(analysis.sourceMap, resolvedPath, stableUrlPathname, args.sourceMapSourcePaths, sourceText)
121
130
  : null;
122
131
  return {
123
132
  ok: true,
133
+ tracking: {
134
+ trackedFiles,
135
+ },
124
136
  value: {
125
137
  fingerprint: args.buildId === null
126
138
  ? null
@@ -146,7 +158,9 @@ export async function transformModule(record, args) {
146
158
  return {
147
159
  ok: false,
148
160
  error: toTransformFailedError(error, resolvedPath),
149
- trackedFiles,
161
+ tracking: {
162
+ trackedFiles,
163
+ },
150
164
  };
151
165
  }
152
166
  }
@@ -167,17 +181,18 @@ function isPackageImportSpecifier(specifier) {
167
181
  return !specifier.startsWith('./') && !specifier.startsWith('../') && !specifier.startsWith('/');
168
182
  }
169
183
  async function analyzeModuleSource(sourceText, resolvedPath, transformOptions, options) {
184
+ let maskedSourceText = maskAuthoredInjectedPackageImports(sourceText, resolvedPath);
170
185
  let transformResult;
171
186
  try {
172
- transformResult = await oxcTransform(resolvedPath, sourceText, getTransformOptions(resolvedPath, transformOptions, options));
187
+ transformResult = await oxcTransform(resolvedPath, maskedSourceText, getTransformOptions(resolvedPath, transformOptions, options));
173
188
  assertNoCompilerErrors(transformResult.errors, resolvedPath, 'transform');
174
189
  }
175
190
  catch (error) {
176
191
  if (isAssetServerCompilationError(error))
177
192
  throw error;
178
- throw createAssetServerCompilationError(`Failed to transform module ${resolvedPath}. ${formatUnknownError(error)}`, {
193
+ throw createAssetServerCompilationError(`Failed to transform script ${resolvedPath}. ${formatUnknownError(error)}`, {
179
194
  cause: error,
180
- code: 'MODULE_TRANSFORM_FAILED',
195
+ code: 'TRANSFORM_FAILED',
181
196
  });
182
197
  }
183
198
  let rawCode = transformResult.code.trimEnd();
@@ -213,9 +228,9 @@ async function minifyModule(rawCode, resolvedPath, target, sourceMaps) {
213
228
  catch (error) {
214
229
  if (isAssetServerCompilationError(error))
215
230
  throw error;
216
- throw createAssetServerCompilationError(`Failed to minify module ${resolvedPath}. ${formatUnknownError(error)}`, {
231
+ throw createAssetServerCompilationError(`Failed to minify script ${resolvedPath}. ${formatUnknownError(error)}`, {
217
232
  cause: error,
218
- code: 'MODULE_TRANSFORM_FAILED',
233
+ code: 'TRANSFORM_FAILED',
219
234
  });
220
235
  }
221
236
  }
@@ -256,7 +271,7 @@ function getJsxOptions(resolvedPath, compilerOptions) {
256
271
  if (jsx === 'preserve' || jsx === 'react-native') {
257
272
  throw createAssetServerCompilationError(`Unsupported tsconfig compilerOptions.jsx = "${jsx}" for ${resolvedPath}. ` +
258
273
  `Asset server must compile JSX to browser-runnable JavaScript.`, {
259
- code: 'MODULE_TRANSFORM_FAILED',
274
+ code: 'TRANSFORM_FAILED',
260
275
  });
261
276
  }
262
277
  if (jsx === 'react-jsx' || jsx === 'react-jsxdev') {
@@ -293,8 +308,8 @@ function getStringOption(compilerOptions, key) {
293
308
  function assertNoCompilerErrors(errors, resolvedPath, operation) {
294
309
  if (!errors || errors.length === 0)
295
310
  return;
296
- throw createAssetServerCompilationError(`Failed to ${operation} module ${resolvedPath}. ${errors[0].message ?? 'Unknown error'}`, {
297
- code: 'MODULE_TRANSFORM_FAILED',
311
+ throw createAssetServerCompilationError(`Failed to ${operation} script ${resolvedPath}. ${errors[0].message ?? 'Unknown error'}`, {
312
+ code: 'TRANSFORM_FAILED',
298
313
  });
299
314
  }
300
315
  async function getUnresolvedImportsFromLexer(rawCode) {
@@ -314,6 +329,78 @@ async function getUnresolvedImportsFromLexer(rawCode) {
314
329
  }
315
330
  return unresolvedImports;
316
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
+ }
317
404
  function getStaticImportSpecifier(source, imported) {
318
405
  if (imported.n != null) {
319
406
  return imported.n;
@@ -352,9 +439,9 @@ function formatUnknownError(error) {
352
439
  function toTransformFailedError(error, resolvedPath) {
353
440
  if (isAssetServerCompilationError(error))
354
441
  return error;
355
- return createAssetServerCompilationError(`Failed to transform module ${resolvedPath}. ${formatUnknownError(error)}`, {
442
+ return createAssetServerCompilationError(`Failed to transform script ${resolvedPath}. ${formatUnknownError(error)}`, {
356
443
  cause: error,
357
- code: 'MODULE_TRANSFORM_FAILED',
444
+ code: 'TRANSFORM_FAILED',
358
445
  });
359
446
  }
360
447
  function isNoEntityError(error) {
@@ -1,4 +1,4 @@
1
1
  export declare function composeSourceMaps(rewriteSourceMap: string, transformSourceMap: string): string;
2
- export declare function rewriteSourceMapSources(sourceMap: string, resolvedPath: string, stableUrlPathname: string, sourceMapSourcePaths: 'absolute' | 'url'): string;
2
+ export declare function rewriteSourceMapSources(sourceMap: string, resolvedPath: string, stableUrlPathname: string, sourceMapSourcePaths: 'absolute' | 'url', sourceContent?: string): string;
3
3
  export declare function stringifySourceMap(map: unknown): string | null;
4
4
  //# sourceMappingURL=source-maps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-maps.d.ts","sourceRoot":"","sources":["../../src/lib/source-maps.ts"],"names":[],"mappings":"AAIA,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM,CA2C9F;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,EACzB,oBAAoB,EAAE,UAAU,GAAG,KAAK,GACvC,MAAM,CAMR;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAK9D"}
1
+ {"version":3,"file":"source-maps.d.ts","sourceRoot":"","sources":["../../src/lib/source-maps.ts"],"names":[],"mappings":"AAIA,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM,CA2C9F;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,EACzB,oBAAoB,EAAE,UAAU,GAAG,KAAK,EACxC,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CASR;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQ9D"}
@@ -38,11 +38,14 @@ export function composeSourceMaps(rewriteSourceMap, transformSourceMap) {
38
38
  }
39
39
  return JSON.stringify(generator.toJSON());
40
40
  }
41
- export function rewriteSourceMapSources(sourceMap, resolvedPath, stableUrlPathname, sourceMapSourcePaths) {
41
+ export function rewriteSourceMapSources(sourceMap, resolvedPath, stableUrlPathname, sourceMapSourcePaths, sourceContent) {
42
42
  let json = JSON.parse(sourceMap);
43
43
  json.sources = [
44
44
  sourceMapSourcePaths === 'absolute' ? normalizeFilePath(resolvedPath) : stableUrlPathname,
45
45
  ];
46
+ if (sourceContent !== undefined) {
47
+ json.sourcesContent = [sourceContent];
48
+ }
46
49
  return JSON.stringify(json);
47
50
  }
48
51
  export function stringifySourceMap(map) {
@@ -50,6 +53,9 @@ export function stringifySourceMap(map) {
50
53
  return null;
51
54
  if (typeof map === 'string')
52
55
  return map;
56
+ if (map instanceof Uint8Array) {
57
+ return Buffer.from(map).toString('utf8');
58
+ }
53
59
  if (typeof map === 'object' && map !== null)
54
60
  return JSON.stringify(map);
55
61
  return String(map);
@@ -0,0 +1,52 @@
1
+ import type { CompiledRoutes } from '../routes.ts';
2
+ import type { ResolvedStyleTarget } from '../target.ts';
3
+ import type { EmittedAsset } from './emit.ts';
4
+ type StyleCompileResult = {
5
+ code: EmittedAsset;
6
+ fingerprint: string | null;
7
+ sourceMap: EmittedAsset | null;
8
+ };
9
+ type StyleGetResult = {
10
+ style: StyleCompileResult;
11
+ type: 'style';
12
+ } | {
13
+ etag: string;
14
+ type: 'not-modified';
15
+ };
16
+ type StyleGetOptions = {
17
+ ifNoneMatch: string | null;
18
+ isSourceMapRequest: boolean;
19
+ requestedFingerprint: string | null;
20
+ };
21
+ type StyleCompilerOptions = {
22
+ buildId?: string;
23
+ fingerprintAssets: boolean;
24
+ isAllowed(absolutePath: string): boolean;
25
+ minify: boolean;
26
+ onWatchDirectoriesChange?: (delta: {
27
+ add: string[];
28
+ remove: string[];
29
+ }) => void;
30
+ rootDir: string;
31
+ routes: CompiledRoutes;
32
+ sourceMapSourcePaths: 'absolute' | 'url';
33
+ sourceMaps?: 'external' | 'inline';
34
+ targets?: ResolvedStyleTarget;
35
+ watchIgnore?: readonly string[];
36
+ };
37
+ type StyleCompiler = {
38
+ getHref(filePath: string): Promise<string>;
39
+ getPreloadLayers(filePath: string | readonly string[]): Promise<string[][]>;
40
+ getStyle(filePath: string, options: StyleGetOptions): Promise<StyleGetResult>;
41
+ handleFileEvent(filePath: string, event: 'add' | 'change' | 'unlink'): Promise<void>;
42
+ };
43
+ export declare function createStyleCompiler(options: StyleCompilerOptions): StyleCompiler;
44
+ export declare function isStyleFilePath(filePath: string): boolean;
45
+ export declare function createResponseForStyle(result: StyleCompileResult, options: {
46
+ cacheControl: string;
47
+ ifNoneMatch: string | null;
48
+ isSourceMapRequest: boolean;
49
+ method: string;
50
+ }): Response;
51
+ export {};
52
+ //# sourceMappingURL=compiler.d.ts.map
@@ -0,0 +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,CAiOhF;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"}