@ttsc/unplugin 0.30.2 → 0.30.3

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.
@@ -1,4 +1,4 @@
1
- import type { ITtscCompilerTransformation } from "ttsc";
1
+ import { type TtscWatchInput } from "./transform.cjs";
2
2
  /** One module node inside a Vite module graph; opaque to this module. */
3
3
  type ViteModuleNodeLike = object;
4
4
  /**
@@ -35,44 +35,22 @@ export interface ViteDevServerLike {
35
35
  moduleGraph?: ViteModuleGraphLike;
36
36
  ws?: ViteHotChannelLike;
37
37
  }
38
+ /** Serve-time compiler dependencies never enter Vite's runtime import graph. */
39
+ export interface ViteServeInputWatch {
40
+ attach(server: ViteDevServerLike): void;
41
+ dispose(): Promise<void>;
42
+ replace(importer: string, inputs: readonly TtscWatchInput[], failed?: boolean): void;
43
+ }
38
44
  /**
39
- * Filesystem watch for derived watch inputs that Vite cannot safely register as
40
- * added imports while a development server is running.
41
- *
42
- * Vite serve treats every transform-context `addWatchFile()` registration as an
43
- * added import: `TransformPluginContext.addWatchFile` stores the path in
44
- * `_addedImports`, and `vite:import-analysis` resolves each entry like a real
45
- * import of the transformed module. A missing path or an existing directory
46
- * that failed a compiler file predicate then fails that resolve and turns the
47
- * importer's first request into a 500, even though the transform succeeded.
45
+ * One filesystem subscription per unique input, shared by all served modules.
48
46
  *
49
- * This registry is the serve-only replacement for those registrations. Each
50
- * path is polled until its exact compiler predicate observation changes; legacy
51
- * envelopes retain their exists-or-file availability check. Its importers are
52
- * then invalidated in the server's module graphs and one full-reload is sent,
53
- * so the next request retransforms against the new resolution winner. The
54
- * project transform cache re-validates the compiler observation, so the
55
- * retransform recompiles instead of replaying.
47
+ * Vite resolves transform-context addWatchFile as a runtime import, including
48
+ * type-only .server files and non-module plugin assets. Use a separate watcher
49
+ * for compiler inputs, including node_modules, which Vite's watcher ignores.
50
+ * Ordinary files use events after their initial subscription is observed.
51
+ * Missing spellings and directory predicates keep a shared predicate poll.
52
+ * Linked files also share topology checks by directory because retargeting a
53
+ * junction need not emit events on its previously watched descendants.
56
54
  */
57
- export interface ViteServeMissingInputWatch {
58
- /** Adopt the dev server whose module graphs creation events invalidate. */
59
- attach(server: ViteDevServerLike): void;
60
- /** Stop every poll; safe to call repeatedly. */
61
- dispose(): void;
62
- /**
63
- * Report whether a dev server has ever been attached. This is not a liveness
64
- * predicate — the reference intentionally survives the server's close (see
65
- * {@link dispose}) — so route decisions must also gate on the resolved
66
- * config's `command`, as the adapter does.
67
- */
68
- serving(): boolean;
69
- /** Register one unsafe watch input and its exact recorded condition. */
70
- watch(input: string, importer: string, condition: ViteServeInputWatchCondition): void;
71
- }
72
- /** A legacy availability condition or an exact compiler predicate proof. */
73
- export type ViteServeInputWatchCondition = "exists" | "file" | ITtscCompilerTransformation.IInputObservation;
74
- /** Create an empty missing-input watch for one plugin instance. */
75
- export declare function createViteServeMissingInputWatch(): ViteServeMissingInputWatch;
76
- /** Key a private poll by predicate and exact lexical spelling. */
77
- export declare function viteServeMissingInputWatchKey(input: string, condition: ViteServeInputWatchCondition): string;
55
+ export declare function createViteServeInputWatch(): ViteServeInputWatch;
78
56
  export {};
@@ -1,4 +1,4 @@
1
- import type { ITtscCompilerTransformation } from "ttsc";
1
+ import { type TtscWatchInput } from "./transform.mjs";
2
2
  /** One module node inside a Vite module graph; opaque to this module. */
3
3
  type ViteModuleNodeLike = object;
4
4
  /**
@@ -35,44 +35,22 @@ export interface ViteDevServerLike {
35
35
  moduleGraph?: ViteModuleGraphLike;
36
36
  ws?: ViteHotChannelLike;
37
37
  }
38
+ /** Serve-time compiler dependencies never enter Vite's runtime import graph. */
39
+ export interface ViteServeInputWatch {
40
+ attach(server: ViteDevServerLike): void;
41
+ dispose(): Promise<void>;
42
+ replace(importer: string, inputs: readonly TtscWatchInput[], failed?: boolean): void;
43
+ }
38
44
  /**
39
- * Filesystem watch for derived watch inputs that Vite cannot safely register as
40
- * added imports while a development server is running.
41
- *
42
- * Vite serve treats every transform-context `addWatchFile()` registration as an
43
- * added import: `TransformPluginContext.addWatchFile` stores the path in
44
- * `_addedImports`, and `vite:import-analysis` resolves each entry like a real
45
- * import of the transformed module. A missing path or an existing directory
46
- * that failed a compiler file predicate then fails that resolve and turns the
47
- * importer's first request into a 500, even though the transform succeeded.
45
+ * One filesystem subscription per unique input, shared by all served modules.
48
46
  *
49
- * This registry is the serve-only replacement for those registrations. Each
50
- * path is polled until its exact compiler predicate observation changes; legacy
51
- * envelopes retain their exists-or-file availability check. Its importers are
52
- * then invalidated in the server's module graphs and one full-reload is sent,
53
- * so the next request retransforms against the new resolution winner. The
54
- * project transform cache re-validates the compiler observation, so the
55
- * retransform recompiles instead of replaying.
47
+ * Vite resolves transform-context addWatchFile as a runtime import, including
48
+ * type-only .server files and non-module plugin assets. Use a separate watcher
49
+ * for compiler inputs, including node_modules, which Vite's watcher ignores.
50
+ * Ordinary files use events after their initial subscription is observed.
51
+ * Missing spellings and directory predicates keep a shared predicate poll.
52
+ * Linked files also share topology checks by directory because retargeting a
53
+ * junction need not emit events on its previously watched descendants.
56
54
  */
57
- export interface ViteServeMissingInputWatch {
58
- /** Adopt the dev server whose module graphs creation events invalidate. */
59
- attach(server: ViteDevServerLike): void;
60
- /** Stop every poll; safe to call repeatedly. */
61
- dispose(): void;
62
- /**
63
- * Report whether a dev server has ever been attached. This is not a liveness
64
- * predicate — the reference intentionally survives the server's close (see
65
- * {@link dispose}) — so route decisions must also gate on the resolved
66
- * config's `command`, as the adapter does.
67
- */
68
- serving(): boolean;
69
- /** Register one unsafe watch input and its exact recorded condition. */
70
- watch(input: string, importer: string, condition: ViteServeInputWatchCondition): void;
71
- }
72
- /** A legacy availability condition or an exact compiler predicate proof. */
73
- export type ViteServeInputWatchCondition = "exists" | "file" | ITtscCompilerTransformation.IInputObservation;
74
- /** Create an empty missing-input watch for one plugin instance. */
75
- export declare function createViteServeMissingInputWatch(): ViteServeMissingInputWatch;
76
- /** Key a private poll by predicate and exact lexical spelling. */
77
- export declare function viteServeMissingInputWatchKey(input: string, condition: ViteServeInputWatchCondition): string;
55
+ export declare function createViteServeInputWatch(): ViteServeInputWatch;
78
56
  export {};
@@ -1,4 +1,4 @@
1
- import type { ITtscCompilerTransformation } from "ttsc";
1
+ import { type TtscWatchInput } from "./transform";
2
2
  /** One module node inside a Vite module graph; opaque to this module. */
3
3
  type ViteModuleNodeLike = object;
4
4
  /**
@@ -35,44 +35,22 @@ export interface ViteDevServerLike {
35
35
  moduleGraph?: ViteModuleGraphLike;
36
36
  ws?: ViteHotChannelLike;
37
37
  }
38
+ /** Serve-time compiler dependencies never enter Vite's runtime import graph. */
39
+ export interface ViteServeInputWatch {
40
+ attach(server: ViteDevServerLike): void;
41
+ dispose(): Promise<void>;
42
+ replace(importer: string, inputs: readonly TtscWatchInput[], failed?: boolean): void;
43
+ }
38
44
  /**
39
- * Filesystem watch for derived watch inputs that Vite cannot safely register as
40
- * added imports while a development server is running.
41
- *
42
- * Vite serve treats every transform-context `addWatchFile()` registration as an
43
- * added import: `TransformPluginContext.addWatchFile` stores the path in
44
- * `_addedImports`, and `vite:import-analysis` resolves each entry like a real
45
- * import of the transformed module. A missing path or an existing directory
46
- * that failed a compiler file predicate then fails that resolve and turns the
47
- * importer's first request into a 500, even though the transform succeeded.
45
+ * One filesystem subscription per unique input, shared by all served modules.
48
46
  *
49
- * This registry is the serve-only replacement for those registrations. Each
50
- * path is polled until its exact compiler predicate observation changes; legacy
51
- * envelopes retain their exists-or-file availability check. Its importers are
52
- * then invalidated in the server's module graphs and one full-reload is sent,
53
- * so the next request retransforms against the new resolution winner. The
54
- * project transform cache re-validates the compiler observation, so the
55
- * retransform recompiles instead of replaying.
47
+ * Vite resolves transform-context addWatchFile as a runtime import, including
48
+ * type-only .server files and non-module plugin assets. Use a separate watcher
49
+ * for compiler inputs, including node_modules, which Vite's watcher ignores.
50
+ * Ordinary files use events after their initial subscription is observed.
51
+ * Missing spellings and directory predicates keep a shared predicate poll.
52
+ * Linked files also share topology checks by directory because retargeting a
53
+ * junction need not emit events on its previously watched descendants.
56
54
  */
57
- export interface ViteServeMissingInputWatch {
58
- /** Adopt the dev server whose module graphs creation events invalidate. */
59
- attach(server: ViteDevServerLike): void;
60
- /** Stop every poll; safe to call repeatedly. */
61
- dispose(): void;
62
- /**
63
- * Report whether a dev server has ever been attached. This is not a liveness
64
- * predicate — the reference intentionally survives the server's close (see
65
- * {@link dispose}) — so route decisions must also gate on the resolved
66
- * config's `command`, as the adapter does.
67
- */
68
- serving(): boolean;
69
- /** Register one unsafe watch input and its exact recorded condition. */
70
- watch(input: string, importer: string, condition: ViteServeInputWatchCondition): void;
71
- }
72
- /** A legacy availability condition or an exact compiler predicate proof. */
73
- export type ViteServeInputWatchCondition = "exists" | "file" | ITtscCompilerTransformation.IInputObservation;
74
- /** Create an empty missing-input watch for one plugin instance. */
75
- export declare function createViteServeMissingInputWatch(): ViteServeMissingInputWatch;
76
- /** Key a private poll by predicate and exact lexical spelling. */
77
- export declare function viteServeMissingInputWatchKey(input: string, condition: ViteServeInputWatchCondition): string;
55
+ export declare function createViteServeInputWatch(): ViteServeInputWatch;
78
56
  export {};
@@ -1,137 +1,274 @@
1
1
  'use strict';
2
2
 
3
+ var chokidar = require('chokidar');
3
4
  var fs = require('node:fs');
4
5
  var path = require('node:path');
5
6
  var transform = require('./transform.js');
6
7
 
7
8
  /**
8
- * How often each registered Vite-unsafe input is predicate-polled, in
9
- * milliseconds.
9
+ * One filesystem subscription per unique input, shared by all served modules.
10
10
  *
11
- * Polling is the only watch primitive that covers the whole class: the dev
12
- * server's chokidar watcher ignores every `node_modules` directory, which is
13
- * exactly where superseding resolution candidates usually live, and `fs.watch`
14
- * cannot observe a path whose parent directories do not exist yet. One `stat`
15
- * every half second per unavailable path is negligible against a dev server's
16
- * baseline. Rich inputs replay only the predicates the compiler recorded.
11
+ * Vite resolves transform-context addWatchFile as a runtime import, including
12
+ * type-only .server files and non-module plugin assets. Use a separate watcher
13
+ * for compiler inputs, including node_modules, which Vite's watcher ignores.
14
+ * Ordinary files use events after their initial subscription is observed.
15
+ * Missing spellings and directory predicates keep a shared predicate poll.
16
+ * Linked files also share topology checks by directory because retargeting a
17
+ * junction need not emit events on its previously watched descendants.
17
18
  */
18
- const MISSING_INPUT_POLL_INTERVAL = 500;
19
- /** Create an empty missing-input watch for one plugin instance. */
20
- function createViteServeMissingInputWatch() {
19
+ function createViteServeInputWatch() {
21
20
  const entries = new Map();
22
- let poller;
21
+ const importerInputs = new Map();
22
+ const pending = new Set();
23
+ const links = new Map();
23
24
  let server;
24
- const stopPollingIfEmpty = () => {
25
- if (entries.size !== 0 || poller === undefined) {
26
- return;
25
+ let watcher;
26
+ let poller;
27
+ let flushTimer;
28
+ let failed = false;
29
+ const remove = (entry) => {
30
+ entries.delete(entry.file);
31
+ watcher?.unwatch(entry.file);
32
+ for (const file of entry.links) {
33
+ const link = links.get(file);
34
+ link?.inputs.delete(entry);
35
+ if (link?.inputs.size === 0)
36
+ links.delete(file);
27
37
  }
28
- clearInterval(poller);
29
- poller = undefined;
30
38
  };
31
- const poll = () => {
39
+ const check = (selected) => {
32
40
  const importers = new Set();
33
- for (const [identity, entry] of entries) {
34
- if (!viteServeInputWatchConditionChanged(entry)) {
41
+ for (const entry of selected) {
42
+ if (entries.get(entry.file) !== entry)
35
43
  continue;
44
+ let baseline;
45
+ for (const [key, condition] of entry.conditions) {
46
+ const state = condition.evidence?.state;
47
+ let changed;
48
+ if (state?.codec === "predicates") {
49
+ changed =
50
+ transform.validateGraphInputObservation(entry.file, state.observation)
51
+ .length !== 0;
52
+ }
53
+ else {
54
+ baseline ??= transform.captureWatchInputBaseline(entry.file);
55
+ changed =
56
+ baseline === undefined ||
57
+ (condition.evidence?.state !== undefined
58
+ ? !transform.watchInputEvidenceMatchesBaseline(condition.evidence, baseline)
59
+ : JSON.stringify(condition.baseline) !==
60
+ JSON.stringify(baseline));
61
+ }
62
+ if (!changed)
63
+ continue;
64
+ for (const importer of condition.importers)
65
+ importers.add(importer);
66
+ entry.conditions.delete(key);
36
67
  }
37
- entries.delete(identity);
38
- for (const importer of entry.importers) {
39
- importers.add(importer);
68
+ if (entry.conditions.size === 0) {
69
+ remove(entry);
40
70
  }
41
71
  }
42
- stopPollingIfEmpty();
43
- if (server === undefined || importers.size === 0) {
44
- return;
72
+ if (server !== undefined && importers.size !== 0) {
73
+ invalidateImporters(server, importers);
74
+ sendFullReload(server);
45
75
  }
46
- invalidateImporters(server, importers);
47
- sendFullReload(server);
76
+ };
77
+ const enqueue = (file, observed) => {
78
+ const absolute = path.resolve(file);
79
+ const direct = entries.get(absolute);
80
+ if (direct !== undefined && observed)
81
+ direct.observed = true;
82
+ for (const candidate of [absolute, path.dirname(absolute)]) {
83
+ const entry = entries.get(candidate);
84
+ if (entry !== undefined)
85
+ pending.add(entry);
86
+ }
87
+ if (pending.size === 0 || flushTimer !== undefined)
88
+ return;
89
+ flushTimer = setTimeout(() => {
90
+ flushTimer = undefined;
91
+ const selected = [...pending];
92
+ pending.clear();
93
+ check(selected);
94
+ }, 0);
95
+ flushTimer.unref();
96
+ };
97
+ const ensureWatcher = () => {
98
+ if (watcher !== undefined)
99
+ return watcher;
100
+ // Chokidar's persistent:false backend omits its native error listener on
101
+ // Windows. Keep the owned subscription alive until dispose() closes it.
102
+ const active = chokidar.watch([], { depth: 0, ignoreInitial: false });
103
+ watcher = active;
104
+ // Initial add events compare compiler-time evidence too: an edit between
105
+ // compilation and asynchronous watcher setup must not be missed.
106
+ active.on("all", (event, file) => {
107
+ if (watcher === active)
108
+ enqueue(file, event === "add" || event === "addDir");
109
+ });
110
+ active.on("error", () => {
111
+ if (watcher === active)
112
+ failed = true;
113
+ });
114
+ poller = setInterval(() => {
115
+ const selected = new Set([...entries.values()].filter((entry) => failed || entry.poll || !entry.observed));
116
+ // Files reached through one linked directory share one topology check.
117
+ // Content edits remain event-driven; retargeting a junction does not
118
+ // reliably emit an event on its previously watched descendants.
119
+ for (const [file, link] of links) {
120
+ const target = realpath(file);
121
+ if (target !== link.target) {
122
+ link.target = target;
123
+ for (const entry of link.inputs) {
124
+ selected.add(entry);
125
+ entry.observed = false;
126
+ active.unwatch(entry.file);
127
+ active.add(entry.file);
128
+ }
129
+ }
130
+ }
131
+ check(selected);
132
+ }, 500);
133
+ poller.unref();
134
+ return watcher;
48
135
  };
49
136
  return {
50
137
  attach(next) {
51
138
  server = next;
52
139
  },
53
- dispose() {
140
+ async dispose() {
54
141
  entries.clear();
55
- if (poller !== undefined) {
142
+ importerInputs.clear();
143
+ pending.clear();
144
+ links.clear();
145
+ if (poller !== undefined)
56
146
  clearInterval(poller);
57
- poller = undefined;
58
- }
59
- // The server reference deliberately survives: `vite.restartServer`
60
- // configures the replacement server (attach) before it closes the old
61
- // one (whose buildEnd runs this dispose), so unsetting it here would
62
- // detach the freshly attached replacement and revive the 500 this
63
- // module exists to prevent. A same-instance `vite build` after a serve
64
- // is instead excluded by the adapter's `config.command` gate.
65
- },
66
- serving() {
67
- return server !== undefined;
147
+ if (flushTimer !== undefined)
148
+ clearTimeout(flushTimer);
149
+ poller = undefined;
150
+ flushTimer = undefined;
151
+ const closing = watcher;
152
+ watcher = undefined;
153
+ failed = false;
154
+ await closing?.close();
155
+ // Retain the attached server across overlapping Vite restart containers.
68
156
  },
69
- watch(input, importer, condition) {
70
- const spelling = path.resolve(input);
71
- const identity = viteServeMissingInputWatchKey(spelling, condition);
72
- const existing = entries.get(identity);
73
- if (existing !== undefined) {
74
- existing.importers.add(path.resolve(importer));
157
+ replace(importer, inputs, failed = false) {
158
+ if (server === undefined)
75
159
  return;
160
+ importer = path.resolve(importer);
161
+ const previous = importerInputs.get(importer) ?? new Map();
162
+ if (failed) {
163
+ // An exception can omit the dependency whose deletion caused it.
164
+ // Keep the last successful spellings until a successful delivery can
165
+ // replace them, observing their current failed state for recovery.
166
+ const reported = new Set(inputs.map((input) => path.resolve(input.file)));
167
+ inputs = [
168
+ ...inputs,
169
+ ...[...previous.keys()]
170
+ .filter((file) => !reported.has(file))
171
+ .map((file) => ({ file })),
172
+ ];
76
173
  }
77
- entries.set(identity, {
78
- condition,
79
- importers: new Set([path.resolve(importer)]),
80
- spelling,
81
- });
82
- if (poller === undefined) {
83
- poller = setInterval(poll, MISSING_INPUT_POLL_INTERVAL);
84
- // A poller must never keep the dev-server process alive on its own.
85
- poller.unref?.();
174
+ const current = new Map();
175
+ const added = [];
176
+ for (const input of inputs) {
177
+ const file = path.resolve(input.file);
178
+ const evidence = input.evidence;
179
+ const key = JSON.stringify(evidence ?? null);
180
+ current.set(file, key);
181
+ let entry = entries.get(file);
182
+ if (entry === undefined) {
183
+ entry = {
184
+ file,
185
+ conditions: new Map(),
186
+ poll: false,
187
+ observed: false,
188
+ links: new Set(),
189
+ };
190
+ entries.set(file, entry);
191
+ added.push(file);
192
+ const directory = path.dirname(file);
193
+ const directoryTarget = realpath(directory);
194
+ const fileTarget = realpath(file);
195
+ const linked = [
196
+ ...(directoryTarget !== undefined &&
197
+ !sameSpelling(directory, directoryTarget)
198
+ ? [directory]
199
+ : []),
200
+ ...(fileTarget !== undefined &&
201
+ directoryTarget !== undefined &&
202
+ !sameSpelling(fileTarget, path.join(directoryTarget, path.basename(file)))
203
+ ? [file]
204
+ : []),
205
+ ];
206
+ for (const linkedFile of linked) {
207
+ let link = links.get(linkedFile);
208
+ if (link === undefined) {
209
+ link = { target: realpath(linkedFile), inputs: new Set() };
210
+ links.set(linkedFile, link);
211
+ }
212
+ link.inputs.add(entry);
213
+ entry.links.add(linkedFile);
214
+ }
215
+ }
216
+ let condition = entry.conditions.get(key);
217
+ if (condition === undefined) {
218
+ condition = {
219
+ evidence,
220
+ baseline: evidence?.state === undefined
221
+ ? transform.captureWatchInputBaseline(file)
222
+ : undefined,
223
+ importers: new Set(),
224
+ };
225
+ entry.conditions.set(key, condition);
226
+ }
227
+ condition.importers.add(importer);
228
+ const observation = evidence?.state?.codec === "predicates"
229
+ ? evidence.state.observation
230
+ : undefined;
231
+ entry.poll ||=
232
+ evidence?.missing === true ||
233
+ evidence?.unavailable !== undefined ||
234
+ (observation !== undefined &&
235
+ observation.fileExists !== true &&
236
+ observation.stat !== "file" &&
237
+ observation.readFile?.ok !== true) ||
238
+ (evidence?.state === undefined &&
239
+ condition.baseline?.fileExists !== true);
86
240
  }
241
+ for (const [file, key] of previous) {
242
+ if (current.get(file) === key)
243
+ continue;
244
+ const entry = entries.get(file);
245
+ const condition = entry?.conditions.get(key);
246
+ condition?.importers.delete(importer);
247
+ if (condition?.importers.size === 0)
248
+ entry?.conditions.delete(key);
249
+ if (entry?.conditions.size === 0 && !current.has(file)) {
250
+ remove(entry);
251
+ }
252
+ }
253
+ importerInputs.set(importer, current);
254
+ if (added.length !== 0)
255
+ ensureWatcher().add(added);
87
256
  },
88
257
  };
89
258
  }
90
- /** Key a private poll by predicate and exact lexical spelling. */
91
- function viteServeMissingInputWatchKey(input, condition) {
92
- // Missing aliases can share a physical parent now and later retarget or
93
- // diverge. Neither predicate may let one lexical spelling answer for another.
94
- const predicate = typeof condition === "string"
95
- ? condition
96
- : `predicates:${JSON.stringify([
97
- condition.accessibleEntries === undefined
98
- ? null
99
- : [
100
- condition.accessibleEntries.directories,
101
- condition.accessibleEntries.files,
102
- ],
103
- condition.directoryExists ?? null,
104
- condition.fileExists ?? null,
105
- condition.readFile === undefined
106
- ? null
107
- : condition.readFile.ok
108
- ? [true, condition.readFile.hash]
109
- : [false],
110
- condition.realpath === undefined
111
- ? null
112
- : condition.realpath.ok
113
- ? [true, condition.realpath.path]
114
- : [false],
115
- condition.stat ?? null,
116
- ])}`;
117
- return `${predicate}:${path.resolve(input)}`;
118
- }
119
- /** Whether one registered condition no longer describes its lexical path. */
120
- function viteServeInputWatchConditionChanged(entry) {
121
- if (typeof entry.condition !== "string") {
122
- return (transform.validateGraphInputObservation(entry.spelling, entry.condition).length !==
123
- 0);
124
- }
259
+ function realpath(file) {
125
260
  try {
126
- if (!fs.existsSync(entry.spelling)) {
127
- return false;
128
- }
129
- return (entry.condition === "exists" || !fs.statSync(entry.spelling).isDirectory());
261
+ return fs.realpathSync.native(file);
130
262
  }
131
263
  catch {
132
- return false;
264
+ return undefined;
133
265
  }
134
266
  }
267
+ function sameSpelling(left, right) {
268
+ return process.platform === "win32"
269
+ ? left.toLowerCase() === right.toLowerCase()
270
+ : left === right;
271
+ }
135
272
  /**
136
273
  * Invalidate every module-graph node of the registered importers so the next
137
274
  * request retransforms them. Importers keep their original absolute spelling so
@@ -216,6 +353,5 @@ function sendFullReload(server) {
216
353
  }
217
354
  }
218
355
 
219
- exports.createViteServeMissingInputWatch = createViteServeMissingInputWatch;
220
- exports.viteServeMissingInputWatchKey = viteServeMissingInputWatchKey;
356
+ exports.createViteServeInputWatch = createViteServeInputWatch;
221
357
  //# sourceMappingURL=viteServe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"viteServe.js","sources":["../../src/core/viteServe.ts"],"sourcesContent":[null],"names":["validateGraphInputObservation","pathIdentityKey"],"mappings":"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"}
1
+ {"version":3,"file":"viteServe.js","sources":["../../src/core/viteServe.ts"],"sourcesContent":[null],"names":["validateGraphInputObservation","captureWatchInputBaseline","watchInputEvidenceMatchesBaseline","watch","pathIdentityKey"],"mappings":"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"}