@remix-run/assets 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -47
- package/dist/lib/asset-server.d.ts +45 -43
- package/dist/lib/asset-server.d.ts.map +1 -1
- package/dist/lib/asset-server.js +142 -46
- package/dist/lib/compilation-error.d.ts +2 -2
- package/dist/lib/compilation-error.d.ts.map +1 -1
- package/dist/lib/compilation-error.js +1 -1
- package/dist/lib/file-matcher.d.ts.map +1 -1
- package/dist/lib/file-matcher.js +3 -2
- package/dist/lib/module-store.d.ts +41 -0
- package/dist/lib/module-store.d.ts.map +1 -0
- package/dist/lib/{scripts/store.js → module-store.js} +43 -41
- package/dist/lib/scripts/compiler.d.ts +15 -15
- package/dist/lib/scripts/compiler.d.ts.map +1 -1
- package/dist/lib/scripts/compiler.js +50 -46
- package/dist/lib/scripts/emit.js +2 -2
- package/dist/lib/scripts/resolve.d.ts +7 -17
- package/dist/lib/scripts/resolve.d.ts.map +1 -1
- package/dist/lib/scripts/resolve.js +15 -9
- package/dist/lib/scripts/transform.d.ts +11 -9
- package/dist/lib/scripts/transform.d.ts.map +1 -1
- package/dist/lib/scripts/transform.js +32 -21
- package/dist/lib/source-maps.d.ts +1 -1
- package/dist/lib/source-maps.d.ts.map +1 -1
- package/dist/lib/source-maps.js +7 -1
- package/dist/lib/styles/compiler.d.ts +52 -0
- package/dist/lib/styles/compiler.d.ts.map +1 -0
- package/dist/lib/styles/compiler.js +272 -0
- package/dist/lib/styles/emit.d.ts +25 -0
- package/dist/lib/styles/emit.d.ts.map +1 -0
- package/dist/lib/styles/emit.js +78 -0
- package/dist/lib/styles/resolve.d.ts +48 -0
- package/dist/lib/styles/resolve.d.ts.map +1 -0
- package/dist/lib/styles/resolve.js +188 -0
- package/dist/lib/styles/transform.d.ts +47 -0
- package/dist/lib/styles/transform.d.ts.map +1 -0
- package/dist/lib/styles/transform.js +131 -0
- package/dist/lib/target.d.ts +21 -0
- package/dist/lib/target.d.ts.map +1 -0
- package/dist/lib/target.js +127 -0
- package/package.json +7 -2
- package/src/lib/asset-server.ts +218 -96
- package/src/lib/compilation-error.ts +7 -7
- package/src/lib/file-matcher.ts +3 -2
- package/src/lib/{scripts/store.ts → module-store.ts} +100 -87
- package/src/lib/scripts/compiler.ts +88 -70
- package/src/lib/scripts/emit.ts +2 -2
- package/src/lib/scripts/resolve.ts +34 -23
- package/src/lib/scripts/transform.ts +49 -34
- package/src/lib/source-maps.ts +8 -1
- package/src/lib/styles/compiler.ts +400 -0
- package/src/lib/styles/emit.ts +137 -0
- package/src/lib/styles/resolve.ts +316 -0
- package/src/lib/styles/transform.ts +226 -0
- package/src/lib/target.ts +196 -0
- package/dist/lib/scripts/store.d.ts +0 -40
- package/dist/lib/scripts/store.d.ts.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
type AssetServerCompilationErrorCode = '
|
|
1
|
+
type AssetServerCompilationErrorCode = 'FILE_NOT_FOUND' | 'FILE_NOT_ALLOWED' | 'FILE_OUTSIDE_FILE_MAP' | 'COMMONJS_NOT_SUPPORTED' | 'TRANSFORM_FAILED' | 'EMIT_FAILED' | 'IMPORT_RESOLUTION_FAILED' | 'IMPORT_NOT_SUPPORTED' | 'IMPORT_NOT_ALLOWED' | 'IMPORT_OUTSIDE_FILE_MAP';
|
|
2
2
|
/**
|
|
3
|
-
* Internal error used by the request-time
|
|
3
|
+
* Internal error used by the request-time asset compilation pipeline.
|
|
4
4
|
*/
|
|
5
5
|
export declare class AssetServerCompilationError extends Error {
|
|
6
6
|
code: AssetServerCompilationErrorCode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compilation-error.d.ts","sourceRoot":"","sources":["../../src/lib/compilation-error.ts"],"names":[],"mappings":"AAAA,KAAK,+BAA+B,GAChC,kBAAkB,GAClB,
|
|
1
|
+
{"version":3,"file":"compilation-error.d.ts","sourceRoot":"","sources":["../../src/lib/compilation-error.ts"],"names":[],"mappings":"AAAA,KAAK,+BAA+B,GAChC,gBAAgB,GAChB,kBAAkB,GAClB,uBAAuB,GACvB,wBAAwB,GACxB,kBAAkB,GAClB,aAAa,GACb,0BAA0B,GAC1B,sBAAsB,GACtB,oBAAoB,GACpB,yBAAyB,CAAA;AAE7B;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,IAAI,EAAE,+BAA+B,CAAA;IAErC,YACE,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QACP,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,IAAI,EAAE,+BAA+B,CAAA;KACtC,EAKF;CACF;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,2BAA2B,CAEtC;AAED;;;;;;;;GAQG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,+BAA+B,CAAA;CACtC,GACA,2BAA2B,CAE7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-matcher.d.ts","sourceRoot":"","sources":["../../src/lib/file-matcher.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;AAEvD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAA;CAClB,GACL,WAAW,
|
|
1
|
+
{"version":3,"file":"file-matcher.d.ts","sourceRoot":"","sources":["../../src/lib/file-matcher.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;AAEvD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAA;CAClB,GACL,WAAW,CA2Bb"}
|
package/dist/lib/file-matcher.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as fs from 'node:fs';
|
|
2
|
-
import
|
|
2
|
+
import picomatch from 'picomatch';
|
|
3
3
|
import { normalizeFilePath, resolveFilePath } from "./paths.js";
|
|
4
4
|
export function createFileMatcher(pattern, rootDir, options = {}) {
|
|
5
5
|
let resolvedPatternPath = resolveFilePath(rootDir, pattern);
|
|
@@ -26,7 +26,8 @@ export function createFileMatcher(pattern, rootDir, options = {}) {
|
|
|
26
26
|
}
|
|
27
27
|
return (filePath) => filePath === resolvedPatternPath;
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
let globMatcher = picomatch(resolvedPatternPath, { dot: true });
|
|
30
|
+
return (filePath) => globMatcher(filePath);
|
|
30
31
|
}
|
|
31
32
|
function isSameOrDescendantPath(filePath, directoryPath) {
|
|
32
33
|
let normalizedDirectoryPath = directoryPath.replace(/\/+$/, '');
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export type ModuleTracking = {
|
|
2
|
+
trackedFiles: readonly string[];
|
|
3
|
+
trackedDirectories?: readonly string[];
|
|
4
|
+
};
|
|
5
|
+
export type ModuleWatchEvent = 'change' | 'add' | 'unlink';
|
|
6
|
+
export type FileSnapshot = {
|
|
7
|
+
mtimeNs: bigint;
|
|
8
|
+
size: bigint;
|
|
9
|
+
};
|
|
10
|
+
export type ModuleSnapshot = ReadonlyMap<string, FileSnapshot>;
|
|
11
|
+
type ModuleRecordState<transformed, resolved, emitted> = {
|
|
12
|
+
identityPath: string;
|
|
13
|
+
invalidationVersion: number;
|
|
14
|
+
transformed?: transformed;
|
|
15
|
+
resolved?: resolved;
|
|
16
|
+
emitted?: emitted;
|
|
17
|
+
emittedSnapshot?: ModuleSnapshot;
|
|
18
|
+
staleEmitted?: emitted;
|
|
19
|
+
staleEmittedSnapshot?: ModuleSnapshot;
|
|
20
|
+
trackedFiles: ReadonlySet<string>;
|
|
21
|
+
trackedDirectories: ReadonlySet<string>;
|
|
22
|
+
};
|
|
23
|
+
export type ModuleRecord<transformed, resolved, emitted> = Readonly<ModuleRecordState<transformed, resolved, emitted>>;
|
|
24
|
+
export type ModuleStore<transformed, resolved, emitted> = {
|
|
25
|
+
get(identityPath: string): ModuleRecord<transformed, resolved, emitted>;
|
|
26
|
+
clearTransformed(identityPath: string, tracking: readonly ModuleTracking[]): void;
|
|
27
|
+
setTransformed(identityPath: string, transformed: transformed, tracking: readonly ModuleTracking[]): void;
|
|
28
|
+
setResolved(identityPath: string, resolved: resolved, tracking: readonly ModuleTracking[]): void;
|
|
29
|
+
clearResolved(identityPath: string, tracking: readonly ModuleTracking[]): void;
|
|
30
|
+
setEmitted(identityPath: string, emitted: emitted, snapshot: ModuleSnapshot | null): void;
|
|
31
|
+
invalidateForFileEvent(filePath: string, event: ModuleWatchEvent): void;
|
|
32
|
+
invalidateAll(): void;
|
|
33
|
+
};
|
|
34
|
+
export declare function createModuleStore<transformed, resolved, emitted>(options?: {
|
|
35
|
+
onWatchDirectoriesChange?: (delta: {
|
|
36
|
+
add: string[];
|
|
37
|
+
remove: string[];
|
|
38
|
+
}) => void;
|
|
39
|
+
}): ModuleStore<transformed, resolved, emitted>;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=module-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-store.d.ts","sourceRoot":"","sources":["../../src/lib/module-store.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACvC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAA;AAE1D,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;AAE9D,KAAK,iBAAiB,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,IAAI;IACvD,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,eAAe,CAAC,EAAE,cAAc,CAAA;IAChC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,oBAAoB,CAAC,EAAE,cAAc,CAAA;IACrC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,IAAI,QAAQ,CACjE,iBAAiB,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAClD,CAAA;AAeD,MAAM,MAAM,WAAW,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,IAAI;IACxD,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IACvE,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,CAAA;IACjF,cAAc,CACZ,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,SAAS,cAAc,EAAE,GAClC,IAAI,CAAA;IACP,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,CAAA;IAChG,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,CAAA;IAC9E,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAAA;IACzF,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACvE,aAAa,IAAI,IAAI,CAAA;CACtB,CAAA;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAC9D,OAAO,GAAE;IACP,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAA;CAC3E,GACL,WAAW,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CA4M7C"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getFilePathDirectory } from "
|
|
1
|
+
import { getFilePathDirectory } from "./paths.js";
|
|
2
2
|
export function createModuleStore(options = {}) {
|
|
3
3
|
let recordsByIdentityPath = new Map();
|
|
4
4
|
let recordsByTrackedFile = new Map();
|
|
@@ -12,12 +12,12 @@ export function createModuleStore(options = {}) {
|
|
|
12
12
|
identityPath,
|
|
13
13
|
invalidationVersion: 0,
|
|
14
14
|
trackedFiles: new Set(),
|
|
15
|
-
|
|
15
|
+
trackedDirectories: new Set(),
|
|
16
16
|
};
|
|
17
17
|
recordsByIdentityPath.set(identityPath, record);
|
|
18
18
|
return record;
|
|
19
19
|
},
|
|
20
|
-
|
|
20
|
+
clearTransformed(identityPath, tracking) {
|
|
21
21
|
let record = getOrCreateMutableRecord(identityPath);
|
|
22
22
|
record.transformed = undefined;
|
|
23
23
|
record.resolved = undefined;
|
|
@@ -25,12 +25,9 @@ export function createModuleStore(options = {}) {
|
|
|
25
25
|
record.emittedSnapshot = undefined;
|
|
26
26
|
record.staleEmitted = undefined;
|
|
27
27
|
record.staleEmittedSnapshot = undefined;
|
|
28
|
-
setTracking(record,
|
|
29
|
-
trackedFiles: failure.trackedFiles,
|
|
30
|
-
trackedResolutions: [],
|
|
31
|
-
});
|
|
28
|
+
setTracking(record, tracking);
|
|
32
29
|
},
|
|
33
|
-
setTransformed(identityPath, transformed) {
|
|
30
|
+
setTransformed(identityPath, transformed, tracking) {
|
|
34
31
|
let record = getOrCreateMutableRecord(identityPath);
|
|
35
32
|
record.transformed = transformed;
|
|
36
33
|
record.resolved = undefined;
|
|
@@ -38,34 +35,25 @@ export function createModuleStore(options = {}) {
|
|
|
38
35
|
record.emittedSnapshot = undefined;
|
|
39
36
|
record.staleEmitted = undefined;
|
|
40
37
|
record.staleEmittedSnapshot = undefined;
|
|
41
|
-
setTracking(record,
|
|
42
|
-
trackedFiles: transformed.trackedFiles,
|
|
43
|
-
trackedResolutions: [],
|
|
44
|
-
});
|
|
38
|
+
setTracking(record, tracking);
|
|
45
39
|
},
|
|
46
|
-
setResolved(identityPath, resolved) {
|
|
40
|
+
setResolved(identityPath, resolved, tracking) {
|
|
47
41
|
let record = getOrCreateMutableRecord(identityPath);
|
|
48
42
|
record.resolved = resolved;
|
|
49
43
|
record.emitted = undefined;
|
|
50
44
|
record.emittedSnapshot = undefined;
|
|
51
45
|
record.staleEmitted = undefined;
|
|
52
46
|
record.staleEmittedSnapshot = undefined;
|
|
53
|
-
setTracking(record,
|
|
54
|
-
trackedFiles: resolved.trackedFiles,
|
|
55
|
-
trackedResolutions: resolved.trackedResolutions,
|
|
56
|
-
});
|
|
47
|
+
setTracking(record, tracking);
|
|
57
48
|
},
|
|
58
|
-
|
|
49
|
+
clearResolved(identityPath, tracking) {
|
|
59
50
|
let record = getOrCreateMutableRecord(identityPath);
|
|
60
51
|
record.resolved = undefined;
|
|
61
52
|
record.emitted = undefined;
|
|
62
53
|
record.emittedSnapshot = undefined;
|
|
63
54
|
record.staleEmitted = undefined;
|
|
64
55
|
record.staleEmittedSnapshot = undefined;
|
|
65
|
-
setTracking(record,
|
|
66
|
-
trackedFiles: failure.trackedFiles,
|
|
67
|
-
trackedResolutions: failure.trackedResolutions,
|
|
68
|
-
});
|
|
56
|
+
setTracking(record, tracking);
|
|
69
57
|
},
|
|
70
58
|
setEmitted(identityPath, emitted, snapshot) {
|
|
71
59
|
let record = getOrCreateMutableRecord(identityPath);
|
|
@@ -78,7 +66,7 @@ export function createModuleStore(options = {}) {
|
|
|
78
66
|
let affected = new Set(recordsByTrackedFile.get(filePath) ?? []);
|
|
79
67
|
if (event !== 'change') {
|
|
80
68
|
for (let record of recordsByIdentityPath.values()) {
|
|
81
|
-
if (record.
|
|
69
|
+
if (matchesTrackedDirectory(record.trackedDirectories, filePath)) {
|
|
82
70
|
affected.add(record.identityPath);
|
|
83
71
|
}
|
|
84
72
|
}
|
|
@@ -109,7 +97,7 @@ export function createModuleStore(options = {}) {
|
|
|
109
97
|
identityPath,
|
|
110
98
|
invalidationVersion: 0,
|
|
111
99
|
trackedFiles: new Set(),
|
|
112
|
-
|
|
100
|
+
trackedDirectories: new Set(),
|
|
113
101
|
};
|
|
114
102
|
recordsByIdentityPath.set(identityPath, record);
|
|
115
103
|
return record;
|
|
@@ -136,8 +124,9 @@ export function createModuleStore(options = {}) {
|
|
|
136
124
|
function setTracking(record, tracking) {
|
|
137
125
|
let previousWatchedDirectories = getWatchedDirectories(record);
|
|
138
126
|
removeIndexes(record);
|
|
139
|
-
|
|
140
|
-
record.
|
|
127
|
+
let normalizedTracking = mergeTracking(tracking);
|
|
128
|
+
record.trackedFiles = normalizedTracking.trackedFiles;
|
|
129
|
+
record.trackedDirectories = normalizedTracking.trackedDirectories;
|
|
141
130
|
for (let trackedFile of record.trackedFiles) {
|
|
142
131
|
addToIndexedSet(recordsByTrackedFile, trackedFile, record.identityPath);
|
|
143
132
|
}
|
|
@@ -146,10 +135,7 @@ export function createModuleStore(options = {}) {
|
|
|
146
135
|
emitWatchDirectoryDelta(delta);
|
|
147
136
|
}
|
|
148
137
|
function clearTracking(record) {
|
|
149
|
-
setTracking(record,
|
|
150
|
-
trackedFiles: [],
|
|
151
|
-
trackedResolutions: [],
|
|
152
|
-
});
|
|
138
|
+
setTracking(record, []);
|
|
153
139
|
}
|
|
154
140
|
function removeIndexes(record) {
|
|
155
141
|
for (let trackedFile of record.trackedFiles) {
|
|
@@ -206,23 +192,39 @@ function removeFromIndexedSet(map, key, value) {
|
|
|
206
192
|
map.delete(key);
|
|
207
193
|
}
|
|
208
194
|
}
|
|
209
|
-
function
|
|
210
|
-
|
|
211
|
-
|
|
195
|
+
function matchesTrackedDirectory(trackedDirectories, filePath) {
|
|
196
|
+
for (let trackedDirectory of trackedDirectories) {
|
|
197
|
+
if (filePath === trackedDirectory || filePath.startsWith(`${trackedDirectory}/`))
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
function normalizeTrackedDirectory(trackedDirectory) {
|
|
203
|
+
return trackedDirectory.replace(/\/+$/, '') || '/';
|
|
204
|
+
}
|
|
205
|
+
function mergeTracking(tracking) {
|
|
206
|
+
let trackedFiles = new Set();
|
|
207
|
+
let trackedDirectories = new Set();
|
|
208
|
+
for (let fragment of tracking) {
|
|
209
|
+
for (let trackedFile of fragment.trackedFiles) {
|
|
210
|
+
trackedFiles.add(trackedFile);
|
|
211
|
+
}
|
|
212
|
+
for (let trackedDirectory of fragment.trackedDirectories ?? []) {
|
|
213
|
+
trackedDirectories.add(normalizeTrackedDirectory(trackedDirectory));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return {
|
|
217
|
+
trackedFiles,
|
|
218
|
+
trackedDirectories,
|
|
219
|
+
};
|
|
212
220
|
}
|
|
213
221
|
function getWatchedDirectories(record) {
|
|
214
222
|
let watchedDirectories = new Set();
|
|
215
223
|
for (let trackedFile of record.trackedFiles) {
|
|
216
224
|
watchedDirectories.add(getFilePathDirectory(trackedFile));
|
|
217
225
|
}
|
|
218
|
-
for (let
|
|
219
|
-
|
|
220
|
-
watchedDirectories.add(getFilePathDirectory(candidatePath));
|
|
221
|
-
}
|
|
222
|
-
for (let candidatePrefix of trackedResolution.candidatePrefixes) {
|
|
223
|
-
let directoryPath = candidatePrefix.replace(/\/+$/, '') || '/';
|
|
224
|
-
watchedDirectories.add(directoryPath);
|
|
225
|
-
}
|
|
226
|
+
for (let trackedDirectory of record.trackedDirectories) {
|
|
227
|
+
watchedDirectories.add(trackedDirectory);
|
|
226
228
|
}
|
|
227
229
|
return watchedDirectories;
|
|
228
230
|
}
|
|
@@ -1,28 +1,29 @@
|
|
|
1
1
|
import type { CompiledRoutes } from '../routes.ts';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ResolvedScriptTarget } from '../target.ts';
|
|
3
|
+
import type { ModuleWatchEvent } from '../module-store.ts';
|
|
3
4
|
import type { EmittedAsset } from './emit.ts';
|
|
4
|
-
type
|
|
5
|
+
type ScriptCompileResult = {
|
|
5
6
|
code: EmittedAsset;
|
|
6
7
|
fingerprint: string | null;
|
|
7
8
|
sourceMap: EmittedAsset | null;
|
|
8
9
|
};
|
|
9
|
-
type
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
type ScriptGetResult = {
|
|
11
|
+
script: ScriptCompileResult;
|
|
12
|
+
type: 'script';
|
|
12
13
|
} | {
|
|
13
14
|
type: 'not-modified';
|
|
14
15
|
etag: string;
|
|
15
16
|
};
|
|
16
|
-
type
|
|
17
|
+
type ScriptGetOptions = {
|
|
17
18
|
ifNoneMatch: string | null;
|
|
18
19
|
isSourceMapRequest: boolean;
|
|
19
20
|
requestedFingerprint: string | null;
|
|
20
21
|
};
|
|
21
|
-
type
|
|
22
|
+
type ScriptCompilerOptions = {
|
|
22
23
|
buildId?: string;
|
|
23
24
|
define?: Record<string, string>;
|
|
24
25
|
external: string[];
|
|
25
|
-
|
|
26
|
+
fingerprintAssets: boolean;
|
|
26
27
|
isAllowed(absolutePath: string): boolean;
|
|
27
28
|
minify: boolean;
|
|
28
29
|
onWatchDirectoriesChange?: (delta: {
|
|
@@ -33,14 +34,13 @@ type ModuleCompilerOptions = {
|
|
|
33
34
|
routes: CompiledRoutes;
|
|
34
35
|
sourceMapSourcePaths: 'absolute' | 'url';
|
|
35
36
|
sourceMaps?: 'external' | 'inline';
|
|
36
|
-
target?:
|
|
37
|
+
target?: ResolvedScriptTarget;
|
|
37
38
|
watchIgnore?: readonly string[];
|
|
38
39
|
watchMode: boolean;
|
|
39
40
|
};
|
|
40
|
-
type
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
getPreloadUrls(filePath: string | readonly string[]): Promise<string[]>;
|
|
41
|
+
type ScriptCompiler = {
|
|
42
|
+
getScript(filePath: string, options: ScriptGetOptions): Promise<ScriptGetResult>;
|
|
43
|
+
getPreloadLayers(filePath: string | readonly string[]): Promise<string[][]>;
|
|
44
44
|
getHref(filePath: string): Promise<string>;
|
|
45
45
|
handleFileEvent(filePath: string, event: ModuleWatchEvent): Promise<void>;
|
|
46
46
|
parseRequestPathname(pathname: string): ParsedRequestPathname | null;
|
|
@@ -51,8 +51,8 @@ type ParsedRequestPathname = {
|
|
|
51
51
|
isSourceMapRequest: boolean;
|
|
52
52
|
requestedFingerprint: string | null;
|
|
53
53
|
};
|
|
54
|
-
export declare function
|
|
55
|
-
export declare function
|
|
54
|
+
export declare function createScriptCompiler(options: ScriptCompilerOptions): ScriptCompiler;
|
|
55
|
+
export declare function createResponseForScript(result: ScriptCompileResult, options: {
|
|
56
56
|
cacheControl: string;
|
|
57
57
|
ifNoneMatch: string | null;
|
|
58
58
|
isSourceMapRequest: boolean;
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/lib/scripts/compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,18 +9,18 @@ import { formatFingerprintedPathname, getFingerprintRequestCacheControl, parseFi
|
|
|
9
9
|
import { emitResolvedModule } from "./emit.js";
|
|
10
10
|
import { normalizeFilePath, resolveFilePath } from "../paths.js";
|
|
11
11
|
import { resolveModule, resolverExtensionAlias, resolverExtensions, supportedScriptExtensions, } from "./resolve.js";
|
|
12
|
-
import { createModuleStore } from "
|
|
12
|
+
import { createModuleStore } from "../module-store.js";
|
|
13
13
|
import { createTsconfigTransformOptionsResolver, transformModule } from "./transform.js";
|
|
14
14
|
import { ResolverFactory } from 'oxc-resolver';
|
|
15
15
|
const supportedScriptExtensionSet = new Set(supportedScriptExtensions);
|
|
16
16
|
const preloadConcurrency = Math.max(1, Math.min(8, os.availableParallelism() - 1));
|
|
17
|
-
export function
|
|
17
|
+
export function createScriptCompiler(options) {
|
|
18
18
|
let resolvedOptions = {
|
|
19
19
|
...options,
|
|
20
20
|
externalSet: new Set(options.external),
|
|
21
21
|
watchIgnoreMatchers: (options.watchIgnore ?? []).map((pattern) => createFileMatcher(pattern, options.rootDir)),
|
|
22
22
|
};
|
|
23
|
-
let
|
|
23
|
+
let scriptStore = createModuleStore({
|
|
24
24
|
onWatchDirectoriesChange: options.onWatchDirectoriesChange,
|
|
25
25
|
});
|
|
26
26
|
let tsconfigTransformOptionsResolver = createTsconfigTransformOptionsResolver();
|
|
@@ -55,22 +55,22 @@ export function createModuleCompiler(options) {
|
|
|
55
55
|
routes: resolvedOptions.routes,
|
|
56
56
|
};
|
|
57
57
|
return {
|
|
58
|
-
async
|
|
59
|
-
let resolvedModule =
|
|
60
|
-
let record =
|
|
61
|
-
let notModified =
|
|
58
|
+
async getScript(filePath, getOptions) {
|
|
59
|
+
let resolvedModule = resolveServedScriptOrThrow(resolveInputFilePath(filePath));
|
|
60
|
+
let record = scriptStore.get(resolvedModule.identityPath);
|
|
61
|
+
let notModified = getNotModifiedScript(record, getOptions);
|
|
62
62
|
if (notModified)
|
|
63
63
|
return notModified;
|
|
64
|
-
let emitted = await
|
|
64
|
+
let emitted = await getOrCreateEmittedScript(record);
|
|
65
65
|
return {
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
script: toScriptCompileResult(emitted),
|
|
67
|
+
type: 'script',
|
|
68
68
|
};
|
|
69
69
|
},
|
|
70
|
-
async
|
|
70
|
+
async getPreloadLayers(filePath) {
|
|
71
71
|
let resolvedEntries = [];
|
|
72
72
|
let seen = new Set();
|
|
73
|
-
for (let resolvedModule of (Array.isArray(filePath) ? filePath : [filePath]).map((nextPath) =>
|
|
73
|
+
for (let resolvedModule of (Array.isArray(filePath) ? filePath : [filePath]).map((nextPath) => resolveServedScriptOrThrow(resolveInputFilePath(nextPath)))) {
|
|
74
74
|
if (seen.has(resolvedModule.identityPath))
|
|
75
75
|
continue;
|
|
76
76
|
seen.add(resolvedModule.identityPath);
|
|
@@ -78,13 +78,14 @@ export function createModuleCompiler(options) {
|
|
|
78
78
|
}
|
|
79
79
|
let visited = new Set(resolvedEntries);
|
|
80
80
|
let queue = [...resolvedEntries];
|
|
81
|
-
let
|
|
81
|
+
let layers = [];
|
|
82
82
|
while (queue.length > 0) {
|
|
83
83
|
let frontier = queue;
|
|
84
84
|
queue = [];
|
|
85
|
-
let resolvedModules = await
|
|
85
|
+
let resolvedModules = await getOrCreateResolvedScripts(frontier.map((identityPath) => scriptStore.get(identityPath)));
|
|
86
|
+
let layer = [];
|
|
86
87
|
for (let resolvedModule of resolvedModules) {
|
|
87
|
-
|
|
88
|
+
layer.push(getServedUrlForResolvedScript(resolvedModule));
|
|
88
89
|
for (let dep of resolvedModule.deps) {
|
|
89
90
|
if (visited.has(dep))
|
|
90
91
|
continue;
|
|
@@ -92,11 +93,12 @@ export function createModuleCompiler(options) {
|
|
|
92
93
|
queue.push(dep);
|
|
93
94
|
}
|
|
94
95
|
}
|
|
96
|
+
layers.push(layer);
|
|
95
97
|
}
|
|
96
|
-
return
|
|
98
|
+
return layers;
|
|
97
99
|
},
|
|
98
100
|
async getHref(filePath) {
|
|
99
|
-
let resolvedModule =
|
|
101
|
+
let resolvedModule = resolveServedScriptOrThrow(resolveInputFilePath(filePath));
|
|
100
102
|
return getServedUrl(resolvedModule.identityPath);
|
|
101
103
|
},
|
|
102
104
|
async handleFileEvent(filePath, event) {
|
|
@@ -108,21 +110,21 @@ export function createModuleCompiler(options) {
|
|
|
108
110
|
}
|
|
109
111
|
if (isTsconfigPath(normalizedFilePath)) {
|
|
110
112
|
tsconfigTransformOptionsResolver.clear();
|
|
111
|
-
|
|
113
|
+
scriptStore.invalidateAll();
|
|
112
114
|
return;
|
|
113
115
|
}
|
|
114
116
|
if (isPackageJsonPath(normalizedFilePath)) {
|
|
115
|
-
|
|
117
|
+
scriptStore.invalidateAll();
|
|
116
118
|
return;
|
|
117
119
|
}
|
|
118
|
-
|
|
120
|
+
scriptStore.invalidateForFileEvent(normalizedFilePath, event);
|
|
119
121
|
},
|
|
120
122
|
parseRequestPathname(pathname) {
|
|
121
123
|
let parsedPathname = parseServedPathname(pathname);
|
|
122
124
|
let filePath = resolvedOptions.routes.resolveUrlPathname(parsedPathname.stablePathname);
|
|
123
125
|
if (!filePath)
|
|
124
126
|
return null;
|
|
125
|
-
if (resolvedOptions.
|
|
127
|
+
if (resolvedOptions.fingerprintAssets && parsedPathname.requestedFingerprint === null)
|
|
126
128
|
return null;
|
|
127
129
|
return {
|
|
128
130
|
cacheControl: getFingerprintRequestCacheControl(parsedPathname.requestedFingerprint),
|
|
@@ -141,21 +143,21 @@ export function createModuleCompiler(options) {
|
|
|
141
143
|
}
|
|
142
144
|
return resolveFilePath(resolvedOptions.rootDir, filePath);
|
|
143
145
|
}
|
|
144
|
-
function
|
|
146
|
+
function resolveServedScriptOrThrow(absolutePath) {
|
|
145
147
|
let resolvedModule = resolveModulePath(absolutePath);
|
|
146
148
|
if (!resolvedModule) {
|
|
147
|
-
throw createAssetServerCompilationError(`
|
|
148
|
-
code: '
|
|
149
|
+
throw createAssetServerCompilationError(`File not found: ${absolutePath}`, {
|
|
150
|
+
code: 'FILE_NOT_FOUND',
|
|
149
151
|
});
|
|
150
152
|
}
|
|
151
153
|
if (!resolvedOptions.isAllowed(resolvedModule.identityPath)) {
|
|
152
|
-
throw createAssetServerCompilationError(`
|
|
153
|
-
code: '
|
|
154
|
+
throw createAssetServerCompilationError(`File is not allowed: ${resolvedModule.identityPath}`, {
|
|
155
|
+
code: 'FILE_NOT_ALLOWED',
|
|
154
156
|
});
|
|
155
157
|
}
|
|
156
158
|
return resolvedModule;
|
|
157
159
|
}
|
|
158
|
-
function
|
|
160
|
+
function getNotModifiedScript(record, options) {
|
|
159
161
|
let current = getNotModifiedResult(record.emitted, options);
|
|
160
162
|
if (current)
|
|
161
163
|
return current;
|
|
@@ -164,10 +166,10 @@ export function createModuleCompiler(options) {
|
|
|
164
166
|
}
|
|
165
167
|
return getNotModifiedResult(record.staleEmitted, options);
|
|
166
168
|
}
|
|
167
|
-
async function
|
|
168
|
-
return mapWithConcurrency(records, preloadConcurrency, (record) =>
|
|
169
|
+
async function getOrCreateResolvedScripts(records) {
|
|
170
|
+
return mapWithConcurrency(records, preloadConcurrency, (record) => getOrCreateResolvedScript(record));
|
|
169
171
|
}
|
|
170
|
-
async function
|
|
172
|
+
async function getOrCreateResolvedScript(record) {
|
|
171
173
|
if (record.resolved)
|
|
172
174
|
return record.resolved;
|
|
173
175
|
let cacheKey = getRecordCacheKey(record);
|
|
@@ -176,7 +178,7 @@ export function createModuleCompiler(options) {
|
|
|
176
178
|
return existing;
|
|
177
179
|
let promise = (async () => {
|
|
178
180
|
let startedVersion = record.invalidationVersion;
|
|
179
|
-
let transformedModule = await
|
|
181
|
+
let transformedModule = await getOrCreateTransformedScript(record);
|
|
180
182
|
if (resolvedOptions.watchMode &&
|
|
181
183
|
transformedModule.unresolvedImports.some((unresolved) => isBareImportSpecifier(unresolved.specifier))) {
|
|
182
184
|
resolverFactory.clearCache();
|
|
@@ -184,12 +186,14 @@ export function createModuleCompiler(options) {
|
|
|
184
186
|
let resolveModuleResult = await resolveModule(record, transformedModule, resolveArgs);
|
|
185
187
|
if (!resolveModuleResult.ok) {
|
|
186
188
|
if (isFresh(record, startedVersion)) {
|
|
187
|
-
|
|
189
|
+
scriptStore.clearResolved(record.identityPath, [resolveModuleResult.tracking]);
|
|
188
190
|
}
|
|
189
191
|
throw resolveModuleResult.error;
|
|
190
192
|
}
|
|
191
193
|
if (isFresh(record, startedVersion)) {
|
|
192
|
-
|
|
194
|
+
scriptStore.setResolved(record.identityPath, resolveModuleResult.value, [
|
|
195
|
+
resolveModuleResult.tracking,
|
|
196
|
+
]);
|
|
193
197
|
}
|
|
194
198
|
return resolveModuleResult.value;
|
|
195
199
|
})();
|
|
@@ -203,25 +207,25 @@ export function createModuleCompiler(options) {
|
|
|
203
207
|
}
|
|
204
208
|
}
|
|
205
209
|
}
|
|
206
|
-
async function
|
|
210
|
+
async function getOrCreateTransformedScript(record) {
|
|
207
211
|
if (record.transformed)
|
|
208
212
|
return record.transformed;
|
|
209
213
|
let startedVersion = record.invalidationVersion;
|
|
210
214
|
let transformModuleResult = await transformModule(record, transformArgs);
|
|
211
215
|
if (!transformModuleResult.ok) {
|
|
212
216
|
if (isFresh(record, startedVersion)) {
|
|
213
|
-
|
|
214
|
-
trackedFiles: transformModuleResult.trackedFiles,
|
|
215
|
-
});
|
|
217
|
+
scriptStore.clearTransformed(record.identityPath, [transformModuleResult.tracking]);
|
|
216
218
|
}
|
|
217
219
|
throw transformModuleResult.error;
|
|
218
220
|
}
|
|
219
221
|
if (isFresh(record, startedVersion)) {
|
|
220
|
-
|
|
222
|
+
scriptStore.setTransformed(record.identityPath, transformModuleResult.value, [
|
|
223
|
+
transformModuleResult.tracking,
|
|
224
|
+
]);
|
|
221
225
|
}
|
|
222
226
|
return transformModuleResult.value;
|
|
223
227
|
}
|
|
224
|
-
async function
|
|
228
|
+
async function getOrCreateEmittedScript(record) {
|
|
225
229
|
if (record.emitted)
|
|
226
230
|
return record.emitted;
|
|
227
231
|
let cacheKey = getRecordCacheKey(record);
|
|
@@ -230,7 +234,7 @@ export function createModuleCompiler(options) {
|
|
|
230
234
|
return existing;
|
|
231
235
|
let promise = (async () => {
|
|
232
236
|
let startedVersion = record.invalidationVersion;
|
|
233
|
-
let resolvedModule = await
|
|
237
|
+
let resolvedModule = await getOrCreateResolvedScript(record);
|
|
234
238
|
let emitResolvedModuleResult = await emitResolvedModule(resolvedModule, {
|
|
235
239
|
getServedUrl,
|
|
236
240
|
sourceMaps: resolvedOptions.sourceMaps,
|
|
@@ -239,7 +243,7 @@ export function createModuleCompiler(options) {
|
|
|
239
243
|
throw emitResolvedModuleResult.error;
|
|
240
244
|
}
|
|
241
245
|
if (isFresh(record, startedVersion)) {
|
|
242
|
-
|
|
246
|
+
scriptStore.setEmitted(record.identityPath, emitResolvedModuleResult.value, createModuleSnapshot(resolvedModule.trackedFiles));
|
|
243
247
|
}
|
|
244
248
|
return emitResolvedModuleResult.value;
|
|
245
249
|
})();
|
|
@@ -254,10 +258,10 @@ export function createModuleCompiler(options) {
|
|
|
254
258
|
}
|
|
255
259
|
}
|
|
256
260
|
async function getServedUrl(identityPath) {
|
|
257
|
-
return
|
|
261
|
+
return getServedUrlForResolvedScript(await getOrCreateResolvedScript(scriptStore.get(identityPath)));
|
|
258
262
|
}
|
|
259
|
-
function
|
|
260
|
-
return formatFingerprintedPathname(resolvedModule.stableUrlPathname, resolvedOptions.
|
|
263
|
+
function getServedUrlForResolvedScript(resolvedModule) {
|
|
264
|
+
return formatFingerprintedPathname(resolvedModule.stableUrlPathname, resolvedOptions.fingerprintAssets ? resolvedModule.fingerprint : null);
|
|
261
265
|
}
|
|
262
266
|
function isWatchIgnored(filePath) {
|
|
263
267
|
return resolvedOptions.watchIgnoreMatchers.some((matcher) => matcher(filePath));
|
|
@@ -346,7 +350,7 @@ async function mapWithConcurrency(items, concurrency, mapper) {
|
|
|
346
350
|
await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, () => worker()));
|
|
347
351
|
return results;
|
|
348
352
|
}
|
|
349
|
-
function
|
|
353
|
+
function toScriptCompileResult(emittedModule) {
|
|
350
354
|
return {
|
|
351
355
|
code: emittedModule.code,
|
|
352
356
|
fingerprint: emittedModule.fingerprint,
|
|
@@ -405,7 +409,7 @@ function isNoEntityError(error) {
|
|
|
405
409
|
(error.code === 'ENOENT' ||
|
|
406
410
|
error.code === 'ENOTDIR'));
|
|
407
411
|
}
|
|
408
|
-
export function
|
|
412
|
+
export function createResponseForScript(result, options) {
|
|
409
413
|
let body;
|
|
410
414
|
let etag;
|
|
411
415
|
let contentType;
|
package/dist/lib/scripts/emit.js
CHANGED
|
@@ -56,8 +56,8 @@ async function createEmittedAsset(content) {
|
|
|
56
56
|
function toEmitError(error, identityPath) {
|
|
57
57
|
if (isAssetServerCompilationError(error))
|
|
58
58
|
return error;
|
|
59
|
-
return createAssetServerCompilationError(`Failed to emit
|
|
59
|
+
return createAssetServerCompilationError(`Failed to emit script ${identityPath}. ${error instanceof Error ? error.message : String(error)}`, {
|
|
60
60
|
cause: error,
|
|
61
|
-
code: '
|
|
61
|
+
code: 'EMIT_FAILED',
|
|
62
62
|
});
|
|
63
63
|
}
|