Commit
- Loading branch information
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -55,7 +55,7 @@ | |
"column": 4 | ||
}, | ||
"original": { | ||
"line": 90, | ||
"line": 92, | ||
"column": 0 | ||
} | ||
}, | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,11 @@ | ||
{ | ||
"mappings": "AAAA,UAAU,Y;SAAM;AAAC,CAAjB", | ||
"version": 3, | ||
"mappings": "AAAA,UAAU,Y;SAAM,C;CAAC", | ||
"names": [], | ||
"sources": ["original.js"], | ||
"sourcesContent": ["var foo = () => 4;"], | ||
"version": 3 | ||
} | ||
"sources": [ | ||
"original.js" | ||
], | ||
"sourcesContent": [ | ||
"var foo = () => 4;" | ||
] | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,13 @@ | ||
{ | ||
"version": 3, | ||
"mappings": "AAAC,KCAD;ACAA,K", | ||
"mappings": "AAAC,KAAG;ACAJ,KAAG", | ||
"names": [], | ||
"sources": [ | ||
"bar.js", | ||
"input.tsx", | ||
"baz.js" | ||
], | ||
"sourcesContent": [ | ||
"<bar />", | ||
"foo(1);\nfunction foo(bar: number): never {\n throw new Error('Intentional.');\n}", | ||
"baz();" | ||
] | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,11 @@ | ||
{ | ||
"mappings": "AAAA,UAAU,Y;SAAM;AAAC,CAAjB", | ||
"version": 3, | ||
"mappings": "AAAA,UAAU,Y;SAAM,C;CAAC", | ||
"names": [], | ||
"sources": ["source-maps/input-source-map-same-location/input.js"], | ||
"sourcesContent": ["var foo = () => 4;"], | ||
"version": 3 | ||
} | ||
"sources": [ | ||
"source-maps/input-source-map-same-location/input.js" | ||
], | ||
"sourcesContent": [ | ||
"var foo = () => 4;" | ||
] | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,11 @@ | ||
{ | ||
"version": 3, | ||
"mappings": "AAAC,KCAD", | ||
"mappings": "AAAC,KAAG", | ||
"names": [], | ||
"sources": [ | ||
"test.js", | ||
"input.tsx" | ||
"test.js" | ||
], | ||
"sourcesContent": [ | ||
"<bar />", | ||
"foo(1);\nfunction foo(bar: number): never {\n throw new Error('Intentional.');\n}" | ||
"<bar />" | ||
] | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,11 @@ | ||
{ | ||
"mappings": "AAAA,UAAU,Y;SAAM;AAAC,CAAjB", | ||
"version": 3, | ||
"mappings": "AAAA,UAAU,Y;SAAM,C;CAAC", | ||
"names": [], | ||
"sources": ["original.js"], | ||
"sourcesContent": ["var foo = () => 4;"], | ||
"version": 3 | ||
} | ||
"sources": [ | ||
"original.js" | ||
], | ||
"sourcesContent": [ | ||
"var foo = () => 4;" | ||
] | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
{ | ||
"plugins": ["typescript"], | ||
"sourceMaps": true | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,168 @@ | ||
// From packages\babel-cli\src\babel\watcher.ts | ||
|
||
import { createRequire } from "module"; | ||
import path from "path"; | ||
import type { WatchOptions, FSWatcher } from "chokidar"; | ||
|
||
const fileToDeps = new Map<string, Set<string>>(); | ||
const depToFiles = new Map<string, Set<string>>(); | ||
|
||
let isWatchMode = false; | ||
let watcher: FSWatcher; | ||
const watchQueue = new Set<string>(); | ||
let hasStarted = false; | ||
|
||
export function enable({ enableGlobbing }: { enableGlobbing: boolean }) { | ||
isWatchMode = true; | ||
|
||
const { FSWatcher } = requireChokidar(); | ||
|
||
const options: WatchOptions = { | ||
disableGlobbing: !enableGlobbing, | ||
persistent: true, | ||
ignoreInitial: true, | ||
awaitWriteFinish: { | ||
stabilityThreshold: 50, | ||
pollInterval: 10, | ||
}, | ||
}; | ||
watcher = new FSWatcher(options); | ||
|
||
watcher.on("unlink", unwatchFile); | ||
} | ||
|
||
export function startWatcher() { | ||
hasStarted = true; | ||
|
||
for (const dep of watchQueue) { | ||
watcher.add(dep); | ||
} | ||
watchQueue.clear(); | ||
|
||
watcher.on("ready", () => { | ||
console.log("The watcher is ready."); | ||
}); | ||
} | ||
|
||
export function watch(filename: string): void { | ||
if (!isWatchMode) { | ||
throw new Error( | ||
"Internal Babel error: .watch called when not in watch mode.", | ||
); | ||
} | ||
|
||
if (!hasStarted) { | ||
watchQueue.add(path.resolve(filename)); | ||
} else { | ||
watcher.add(path.resolve(filename)); | ||
} | ||
} | ||
|
||
/** | ||
* Call @param callback whenever a dependency (source file)/ | ||
* external dependency (non-source file) changes. | ||
* | ||
* Handles mapping external dependencies to their corresponding | ||
* dependencies. | ||
*/ | ||
export function onFilesChange( | ||
callback: (filenames: string[], event: string, cause: string) => void, | ||
): void { | ||
if (!isWatchMode) { | ||
throw new Error( | ||
"Internal Babel error: .onFilesChange called when not in watch mode.", | ||
); | ||
} | ||
|
||
watcher.on("all", (event, filename) => { | ||
if (event !== "change" && event !== "add") return; | ||
|
||
const absoluteFile = path.resolve(filename); | ||
callback( | ||
[absoluteFile, ...(depToFiles.get(absoluteFile) ?? [])], | ||
event, | ||
absoluteFile, | ||
); | ||
}); | ||
} | ||
|
||
export function updateExternalDependencies( | ||
filename: string, | ||
dependencies: Set<string>, | ||
) { | ||
if (!isWatchMode) return; | ||
|
||
// Use absolute paths | ||
const absFilename = path.resolve(filename); | ||
const absDependencies = new Set( | ||
Array.from(dependencies, dep => path.resolve(dep)), | ||
); | ||
|
||
const deps = fileToDeps.get(absFilename); | ||
if (deps) { | ||
for (const dep of deps) { | ||
if (!absDependencies.has(dep)) { | ||
removeFileDependency(absFilename, dep); | ||
} | ||
} | ||
} | ||
for (const dep of absDependencies) { | ||
let deps = depToFiles.get(dep); | ||
if (!deps) { | ||
depToFiles.set(dep, (deps = new Set())); | ||
|
||
if (!hasStarted) { | ||
watchQueue.add(dep); | ||
} else { | ||
watcher.add(dep); | ||
} | ||
} | ||
|
||
deps.add(absFilename); | ||
} | ||
|
||
fileToDeps.set(absFilename, absDependencies); | ||
} | ||
|
||
function removeFileDependency(filename: string, dep: string) { | ||
const deps = depToFiles.get(dep) as Set<string>; | ||
deps.delete(filename); | ||
|
||
if (deps.size === 0) { | ||
depToFiles.delete(dep); | ||
|
||
if (!hasStarted) { | ||
watchQueue.delete(dep); | ||
} else { | ||
watcher.unwatch(dep); | ||
} | ||
} | ||
} | ||
|
||
function unwatchFile(filename: string) { | ||
const deps = fileToDeps.get(filename); | ||
if (!deps) return; | ||
|
||
for (const dep of deps) { | ||
removeFileDependency(filename, dep); | ||
} | ||
fileToDeps.delete(filename); | ||
} | ||
|
||
function requireChokidar(): any { | ||
const require = createRequire(import.meta.url); | ||
|
||
try { | ||
return process.env.BABEL_8_BREAKING | ||
? require("chokidar") | ||
: parseInt(process.versions.node) >= 8 | ||
? require("chokidar") | ||
: require("@nicolo-ribaudo/chokidar-2"); | ||
} catch (err) { | ||
console.error( | ||
"The optional dependency chokidar failed to install and is required for " + | ||
"--watch. Chokidar is likely not supported on your platform.", | ||
); | ||
throw err; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
{ | ||
"plugins": ["typescript"], | ||
"sourceMaps": true | ||
} |