diff --git a/npm/bin/lsif-npm b/npm/bin/lsif-npm old mode 100644 new mode 100755 index c6524eba..7e307f19 --- a/npm/bin/lsif-npm +++ b/npm/bin/lsif-npm @@ -1,2 +1,2 @@ -#!/usr/bin/env node +#!/usr/bin/env node require('../lib/main.js').main(); \ No newline at end of file diff --git a/npm/src/main.ts b/npm/src/main.ts index 7ee5c698..078deb9a 100644 --- a/npm/src/main.ts +++ b/npm/src/main.ts @@ -86,11 +86,23 @@ function makeAbsolute(p: string, root?: string): string { } } +const makeIntIdGenerator = () => { + let counter = Number.MAX_SAFE_INTEGER; + + return () => { + return counter--; + } +} + +const uuidIdGenerator = () => { + return uuid.v4() +} + class Linker { private _idGenerator: (() => Id) | undefined; - constructor() { + constructor(private intIdGenerator: () => Id) { } protected get idGenerator(): () => Id { @@ -105,14 +117,9 @@ class Linker { return; } if (typeof id === 'number') { - let counter = Number.MAX_SAFE_INTEGER; - this._idGenerator = () => { - return counter--; - }; + this._idGenerator = this.intIdGenerator } else { - this._idGenerator = () => { - return uuid.v4(); - }; + this._idGenerator = uuidIdGenerator } } @@ -167,8 +174,8 @@ class ExportLinker extends Linker { private packageInformation: PackageInformation | undefined; - constructor(private projectRoot: string, private packageJson: PackageJson) { - super(); + constructor(private projectRoot: string, private packageJson: PackageJson, intIdGenerator: () => Id) { + super(intIdGenerator); } public handleMoniker(moniker: Moniker): void { @@ -212,8 +219,8 @@ class ImportLinker extends Linker { private packageData: Map; - constructor(private projectRoot: string) { - super(); + constructor(private projectRoot: string, intIdGenerator: () => Id) { + super(intIdGenerator); this.packageData = new Map(); } @@ -354,11 +361,12 @@ export function main(): void { return; } + const intIdGenerator = makeIntIdGenerator() let exportLinker: ExportLinker | undefined; if (packageJson !== undefined) { - exportLinker = new ExportLinker(projectRoot, packageJson); + exportLinker = new ExportLinker(projectRoot, packageJson, intIdGenerator); } - const importLinker: ImportLinker = new ImportLinker(projectRoot); + const importLinker: ImportLinker = new ImportLinker(projectRoot, intIdGenerator); let input: NodeJS.ReadStream | fs.ReadStream = process.stdin; if (options.in !== undefined && fs.existsSync(options.in)) { input = fs.createReadStream(options.in, { encoding: 'utf8'});