@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,7 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { getFilePathDirectory } from './paths.ts'
|
|
2
|
+
|
|
3
|
+
export type ModuleTracking = {
|
|
4
|
+
trackedFiles: readonly string[]
|
|
5
|
+
trackedDirectories?: readonly string[]
|
|
6
|
+
}
|
|
5
7
|
|
|
6
8
|
export type ModuleWatchEvent = 'change' | 'add' | 'unlink'
|
|
7
9
|
|
|
@@ -12,51 +14,57 @@ export type FileSnapshot = {
|
|
|
12
14
|
|
|
13
15
|
export type ModuleSnapshot = ReadonlyMap<string, FileSnapshot>
|
|
14
16
|
|
|
15
|
-
type ModuleRecordState = {
|
|
17
|
+
type ModuleRecordState<transformed, resolved, emitted> = {
|
|
16
18
|
identityPath: string
|
|
17
19
|
invalidationVersion: number
|
|
18
|
-
transformed?:
|
|
19
|
-
resolved?:
|
|
20
|
-
emitted?:
|
|
20
|
+
transformed?: transformed
|
|
21
|
+
resolved?: resolved
|
|
22
|
+
emitted?: emitted
|
|
21
23
|
emittedSnapshot?: ModuleSnapshot
|
|
22
|
-
staleEmitted?:
|
|
24
|
+
staleEmitted?: emitted
|
|
23
25
|
staleEmittedSnapshot?: ModuleSnapshot
|
|
24
26
|
trackedFiles: ReadonlySet<string>
|
|
25
|
-
|
|
27
|
+
trackedDirectories: ReadonlySet<string>
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
export type ModuleRecord = Readonly<
|
|
30
|
+
export type ModuleRecord<transformed, resolved, emitted> = Readonly<
|
|
31
|
+
ModuleRecordState<transformed, resolved, emitted>
|
|
32
|
+
>
|
|
29
33
|
|
|
30
|
-
type MutableModuleRecord = {
|
|
34
|
+
type MutableModuleRecord<transformed, resolved, emitted> = {
|
|
31
35
|
identityPath: string
|
|
32
36
|
invalidationVersion: number
|
|
33
|
-
transformed?:
|
|
34
|
-
resolved?:
|
|
35
|
-
emitted?:
|
|
37
|
+
transformed?: transformed
|
|
38
|
+
resolved?: resolved
|
|
39
|
+
emitted?: emitted
|
|
36
40
|
emittedSnapshot?: ModuleSnapshot
|
|
37
|
-
staleEmitted?:
|
|
41
|
+
staleEmitted?: emitted
|
|
38
42
|
staleEmittedSnapshot?: ModuleSnapshot
|
|
39
43
|
trackedFiles: Set<string>
|
|
40
|
-
|
|
44
|
+
trackedDirectories: Set<string>
|
|
41
45
|
}
|
|
42
46
|
|
|
43
|
-
type ModuleStore = {
|
|
44
|
-
get(identityPath: string): ModuleRecord
|
|
45
|
-
|
|
46
|
-
setTransformed(
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
export type ModuleStore<transformed, resolved, emitted> = {
|
|
48
|
+
get(identityPath: string): ModuleRecord<transformed, resolved, emitted>
|
|
49
|
+
clearTransformed(identityPath: string, tracking: readonly ModuleTracking[]): void
|
|
50
|
+
setTransformed(
|
|
51
|
+
identityPath: string,
|
|
52
|
+
transformed: transformed,
|
|
53
|
+
tracking: readonly ModuleTracking[],
|
|
54
|
+
): void
|
|
55
|
+
setResolved(identityPath: string, resolved: resolved, tracking: readonly ModuleTracking[]): void
|
|
56
|
+
clearResolved(identityPath: string, tracking: readonly ModuleTracking[]): void
|
|
57
|
+
setEmitted(identityPath: string, emitted: emitted, snapshot: ModuleSnapshot | null): void
|
|
50
58
|
invalidateForFileEvent(filePath: string, event: ModuleWatchEvent): void
|
|
51
59
|
invalidateAll(): void
|
|
52
60
|
}
|
|
53
61
|
|
|
54
|
-
export function createModuleStore(
|
|
62
|
+
export function createModuleStore<transformed, resolved, emitted>(
|
|
55
63
|
options: {
|
|
56
64
|
onWatchDirectoriesChange?: (delta: { add: string[]; remove: string[] }) => void
|
|
57
65
|
} = {},
|
|
58
|
-
): ModuleStore {
|
|
59
|
-
let recordsByIdentityPath = new Map<string, MutableModuleRecord
|
|
66
|
+
): ModuleStore<transformed, resolved, emitted> {
|
|
67
|
+
let recordsByIdentityPath = new Map<string, MutableModuleRecord<transformed, resolved, emitted>>()
|
|
60
68
|
let recordsByTrackedFile = new Map<string, Set<string>>()
|
|
61
69
|
let watchDirectoryRefCountByPath = new Map<string, number>()
|
|
62
70
|
|
|
@@ -65,16 +73,16 @@ export function createModuleStore(
|
|
|
65
73
|
let existing = recordsByIdentityPath.get(identityPath)
|
|
66
74
|
if (existing) return existing
|
|
67
75
|
|
|
68
|
-
let record: MutableModuleRecord = {
|
|
76
|
+
let record: MutableModuleRecord<transformed, resolved, emitted> = {
|
|
69
77
|
identityPath,
|
|
70
78
|
invalidationVersion: 0,
|
|
71
79
|
trackedFiles: new Set(),
|
|
72
|
-
|
|
80
|
+
trackedDirectories: new Set(),
|
|
73
81
|
}
|
|
74
82
|
recordsByIdentityPath.set(identityPath, record)
|
|
75
83
|
return record
|
|
76
84
|
},
|
|
77
|
-
|
|
85
|
+
clearTransformed(identityPath, tracking) {
|
|
78
86
|
let record = getOrCreateMutableRecord(identityPath)
|
|
79
87
|
record.transformed = undefined
|
|
80
88
|
record.resolved = undefined
|
|
@@ -82,13 +90,10 @@ export function createModuleStore(
|
|
|
82
90
|
record.emittedSnapshot = undefined
|
|
83
91
|
record.staleEmitted = undefined
|
|
84
92
|
record.staleEmittedSnapshot = undefined
|
|
85
|
-
setTracking(record,
|
|
86
|
-
trackedFiles: failure.trackedFiles,
|
|
87
|
-
trackedResolutions: [],
|
|
88
|
-
})
|
|
93
|
+
setTracking(record, tracking)
|
|
89
94
|
},
|
|
90
95
|
|
|
91
|
-
setTransformed(identityPath, transformed) {
|
|
96
|
+
setTransformed(identityPath, transformed, tracking) {
|
|
92
97
|
let record = getOrCreateMutableRecord(identityPath)
|
|
93
98
|
record.transformed = transformed
|
|
94
99
|
record.resolved = undefined
|
|
@@ -96,36 +101,27 @@ export function createModuleStore(
|
|
|
96
101
|
record.emittedSnapshot = undefined
|
|
97
102
|
record.staleEmitted = undefined
|
|
98
103
|
record.staleEmittedSnapshot = undefined
|
|
99
|
-
setTracking(record,
|
|
100
|
-
trackedFiles: transformed.trackedFiles,
|
|
101
|
-
trackedResolutions: [],
|
|
102
|
-
})
|
|
104
|
+
setTracking(record, tracking)
|
|
103
105
|
},
|
|
104
106
|
|
|
105
|
-
setResolved(identityPath, resolved) {
|
|
107
|
+
setResolved(identityPath, resolved, tracking) {
|
|
106
108
|
let record = getOrCreateMutableRecord(identityPath)
|
|
107
109
|
record.resolved = resolved
|
|
108
110
|
record.emitted = undefined
|
|
109
111
|
record.emittedSnapshot = undefined
|
|
110
112
|
record.staleEmitted = undefined
|
|
111
113
|
record.staleEmittedSnapshot = undefined
|
|
112
|
-
setTracking(record,
|
|
113
|
-
trackedFiles: resolved.trackedFiles,
|
|
114
|
-
trackedResolutions: resolved.trackedResolutions,
|
|
115
|
-
})
|
|
114
|
+
setTracking(record, tracking)
|
|
116
115
|
},
|
|
117
116
|
|
|
118
|
-
|
|
117
|
+
clearResolved(identityPath, tracking) {
|
|
119
118
|
let record = getOrCreateMutableRecord(identityPath)
|
|
120
119
|
record.resolved = undefined
|
|
121
120
|
record.emitted = undefined
|
|
122
121
|
record.emittedSnapshot = undefined
|
|
123
122
|
record.staleEmitted = undefined
|
|
124
123
|
record.staleEmittedSnapshot = undefined
|
|
125
|
-
setTracking(record,
|
|
126
|
-
trackedFiles: failure.trackedFiles,
|
|
127
|
-
trackedResolutions: failure.trackedResolutions,
|
|
128
|
-
})
|
|
124
|
+
setTracking(record, tracking)
|
|
129
125
|
},
|
|
130
126
|
|
|
131
127
|
setEmitted(identityPath, emitted, snapshot) {
|
|
@@ -141,11 +137,7 @@ export function createModuleStore(
|
|
|
141
137
|
|
|
142
138
|
if (event !== 'change') {
|
|
143
139
|
for (let record of recordsByIdentityPath.values()) {
|
|
144
|
-
if (
|
|
145
|
-
record.trackedResolutions.some((tracked) =>
|
|
146
|
-
mayAffectTrackedResolution(tracked, filePath),
|
|
147
|
-
)
|
|
148
|
-
) {
|
|
140
|
+
if (matchesTrackedDirectory(record.trackedDirectories, filePath)) {
|
|
149
141
|
affected.add(record.identityPath)
|
|
150
142
|
}
|
|
151
143
|
}
|
|
@@ -171,21 +163,26 @@ export function createModuleStore(
|
|
|
171
163
|
},
|
|
172
164
|
}
|
|
173
165
|
|
|
174
|
-
function getOrCreateMutableRecord(
|
|
166
|
+
function getOrCreateMutableRecord(
|
|
167
|
+
identityPath: string,
|
|
168
|
+
): MutableModuleRecord<transformed, resolved, emitted> {
|
|
175
169
|
let existing = recordsByIdentityPath.get(identityPath)
|
|
176
170
|
if (existing) return existing
|
|
177
171
|
|
|
178
|
-
let record: MutableModuleRecord = {
|
|
172
|
+
let record: MutableModuleRecord<transformed, resolved, emitted> = {
|
|
179
173
|
identityPath,
|
|
180
174
|
invalidationVersion: 0,
|
|
181
175
|
trackedFiles: new Set(),
|
|
182
|
-
|
|
176
|
+
trackedDirectories: new Set(),
|
|
183
177
|
}
|
|
184
178
|
recordsByIdentityPath.set(identityPath, record)
|
|
185
179
|
return record
|
|
186
180
|
}
|
|
187
181
|
|
|
188
|
-
function invalidateRecord(
|
|
182
|
+
function invalidateRecord(
|
|
183
|
+
record: MutableModuleRecord<transformed, resolved, emitted>,
|
|
184
|
+
options: { retainStale: boolean },
|
|
185
|
+
) {
|
|
189
186
|
if (!options.retainStale) {
|
|
190
187
|
record.staleEmitted = undefined
|
|
191
188
|
record.staleEmittedSnapshot = undefined
|
|
@@ -205,17 +202,15 @@ export function createModuleStore(
|
|
|
205
202
|
}
|
|
206
203
|
|
|
207
204
|
function setTracking(
|
|
208
|
-
record: MutableModuleRecord,
|
|
209
|
-
tracking:
|
|
210
|
-
trackedFiles: readonly string[]
|
|
211
|
-
trackedResolutions: readonly TrackedResolution[]
|
|
212
|
-
},
|
|
205
|
+
record: MutableModuleRecord<transformed, resolved, emitted>,
|
|
206
|
+
tracking: readonly ModuleTracking[],
|
|
213
207
|
) {
|
|
214
208
|
let previousWatchedDirectories = getWatchedDirectories(record)
|
|
215
209
|
removeIndexes(record)
|
|
216
210
|
|
|
217
|
-
|
|
218
|
-
record.
|
|
211
|
+
let normalizedTracking = mergeTracking(tracking)
|
|
212
|
+
record.trackedFiles = normalizedTracking.trackedFiles
|
|
213
|
+
record.trackedDirectories = normalizedTracking.trackedDirectories
|
|
219
214
|
|
|
220
215
|
for (let trackedFile of record.trackedFiles) {
|
|
221
216
|
addToIndexedSet(recordsByTrackedFile, trackedFile, record.identityPath)
|
|
@@ -226,14 +221,11 @@ export function createModuleStore(
|
|
|
226
221
|
emitWatchDirectoryDelta(delta)
|
|
227
222
|
}
|
|
228
223
|
|
|
229
|
-
function clearTracking(record: MutableModuleRecord) {
|
|
230
|
-
setTracking(record,
|
|
231
|
-
trackedFiles: [],
|
|
232
|
-
trackedResolutions: [],
|
|
233
|
-
})
|
|
224
|
+
function clearTracking(record: MutableModuleRecord<transformed, resolved, emitted>) {
|
|
225
|
+
setTracking(record, [])
|
|
234
226
|
}
|
|
235
227
|
|
|
236
|
-
function removeIndexes(record: MutableModuleRecord) {
|
|
228
|
+
function removeIndexes(record: MutableModuleRecord<transformed, resolved, emitted>) {
|
|
237
229
|
for (let trackedFile of record.trackedFiles) {
|
|
238
230
|
removeFromIndexedSet(recordsByTrackedFile, trackedFile, record.identityPath)
|
|
239
231
|
}
|
|
@@ -292,19 +284,47 @@ function removeFromIndexedSet(map: Map<string, Set<string>>, key: string, value:
|
|
|
292
284
|
}
|
|
293
285
|
}
|
|
294
286
|
|
|
295
|
-
function
|
|
296
|
-
|
|
287
|
+
function matchesTrackedDirectory(
|
|
288
|
+
trackedDirectories: ReadonlySet<string>,
|
|
297
289
|
filePath: string,
|
|
298
290
|
): boolean {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
291
|
+
for (let trackedDirectory of trackedDirectories) {
|
|
292
|
+
if (filePath === trackedDirectory || filePath.startsWith(`${trackedDirectory}/`)) return true
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
return false
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
function normalizeTrackedDirectory(trackedDirectory: string): string {
|
|
299
|
+
return trackedDirectory.replace(/\/+$/, '') || '/'
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
function mergeTracking(tracking: readonly ModuleTracking[]): {
|
|
303
|
+
trackedFiles: Set<string>
|
|
304
|
+
trackedDirectories: Set<string>
|
|
305
|
+
} {
|
|
306
|
+
let trackedFiles = new Set<string>()
|
|
307
|
+
let trackedDirectories = new Set<string>()
|
|
308
|
+
|
|
309
|
+
for (let fragment of tracking) {
|
|
310
|
+
for (let trackedFile of fragment.trackedFiles) {
|
|
311
|
+
trackedFiles.add(trackedFile)
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
for (let trackedDirectory of fragment.trackedDirectories ?? []) {
|
|
315
|
+
trackedDirectories.add(normalizeTrackedDirectory(trackedDirectory))
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
return {
|
|
320
|
+
trackedFiles,
|
|
321
|
+
trackedDirectories,
|
|
322
|
+
}
|
|
303
323
|
}
|
|
304
324
|
|
|
305
325
|
function getWatchedDirectories(record: {
|
|
306
326
|
trackedFiles: ReadonlySet<string>
|
|
307
|
-
|
|
327
|
+
trackedDirectories: ReadonlySet<string>
|
|
308
328
|
}): Set<string> {
|
|
309
329
|
let watchedDirectories = new Set<string>()
|
|
310
330
|
|
|
@@ -312,15 +332,8 @@ function getWatchedDirectories(record: {
|
|
|
312
332
|
watchedDirectories.add(getFilePathDirectory(trackedFile))
|
|
313
333
|
}
|
|
314
334
|
|
|
315
|
-
for (let
|
|
316
|
-
|
|
317
|
-
watchedDirectories.add(getFilePathDirectory(candidatePath))
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
for (let candidatePrefix of trackedResolution.candidatePrefixes) {
|
|
321
|
-
let directoryPath = candidatePrefix.replace(/\/+$/, '') || '/'
|
|
322
|
-
watchedDirectories.add(directoryPath)
|
|
323
|
-
}
|
|
335
|
+
for (let trackedDirectory of record.trackedDirectories) {
|
|
336
|
+
watchedDirectories.add(trackedDirectory)
|
|
324
337
|
}
|
|
325
338
|
|
|
326
339
|
return watchedDirectories
|