mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Add test for #16955 which simulates npm install
This commit is contained in:
1 parent
55931c46bb
commit
e65df125f8
1 file changed
+302
-119
@@ -4086,121 +4086,6 @@ namespace ts.projectSystem {
|
||||
}
|
||||
}
|
||||
|
||||
function verifyWatchDirectoriesCaseSensitivity(useCaseSensitiveFileNames: boolean) {
|
||||
const frontendDir = "/Users/someuser/work/applications/frontend";
|
||||
const canonicalFrontendDir = useCaseSensitiveFileNames ? frontendDir : frontendDir.toLowerCase();
|
||||
const file1: FileOrFolder = {
|
||||
path: `${frontendDir}/src/app/utils/Analytic.ts`,
|
||||
content: "export class SomeClass { };"
|
||||
};
|
||||
const file2: FileOrFolder = {
|
||||
path: `${frontendDir}/src/app/redux/configureStore.ts`,
|
||||
content: "export class configureStore { }"
|
||||
};
|
||||
const file3: FileOrFolder = {
|
||||
path: `${frontendDir}/src/app/utils/Cookie.ts`,
|
||||
content: "export class Cookie { }"
|
||||
};
|
||||
const es2016LibFile: FileOrFolder = {
|
||||
path: "/a/lib/lib.es2016.full.d.ts",
|
||||
content: libFile.content
|
||||
};
|
||||
const tsconfigFile: FileOrFolder = {
|
||||
path: `${frontendDir}/tsconfig.json`,
|
||||
content: JSON.stringify({
|
||||
"compilerOptions": {
|
||||
"strict": true,
|
||||
"strictNullChecks": true,
|
||||
"target": "es2016",
|
||||
"module": "commonjs",
|
||||
"moduleResolution": "node",
|
||||
"sourceMap": true,
|
||||
"noEmitOnError": true,
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"types": [
|
||||
"node",
|
||||
"jest"
|
||||
],
|
||||
"noUnusedLocals": true,
|
||||
"outDir": "./compiled",
|
||||
"typeRoots": [
|
||||
"types",
|
||||
"node_modules/@types"
|
||||
],
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"*": [
|
||||
"types/*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"include": [
|
||||
"src/**/*"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"compiled"
|
||||
]
|
||||
})
|
||||
};
|
||||
const projectFiles = [file1, file2, es2016LibFile, tsconfigFile];
|
||||
const host = createServerHost(projectFiles, { useCaseSensitiveFileNames });
|
||||
const projectService = createProjectService(host);
|
||||
const canonicalConfigPath = useCaseSensitiveFileNames ? tsconfigFile.path : tsconfigFile.path.toLowerCase();
|
||||
const { configFileName } = projectService.openClientFile(file1.path);
|
||||
assert.equal(configFileName, tsconfigFile.path, `should find config`);
|
||||
checkNumberOfConfiguredProjects(projectService, 1);
|
||||
|
||||
const project = projectService.configuredProjects.get(canonicalConfigPath);
|
||||
verifyProjectAndWatchedDirectories();
|
||||
|
||||
const callsTrackingHost = createCallsTrackingHost(host);
|
||||
|
||||
// Create file cookie.ts
|
||||
projectFiles.push(file3);
|
||||
host.reloadFS(projectFiles);
|
||||
host.runQueuedTimeoutCallbacks();
|
||||
|
||||
const canonicalFile3Path = useCaseSensitiveFileNames ? file3.path : file3.path.toLocaleLowerCase();
|
||||
callsTrackingHost.verifyCalledOnEachEntryOnce("fileExists", [canonicalFile3Path]);
|
||||
|
||||
// Called for type root resolution
|
||||
const directoryExistsCalled = createMap<number>();
|
||||
for (let dir = frontendDir; dir !== "/"; dir = getDirectoryPath(dir)) {
|
||||
directoryExistsCalled.set(`${dir}/node_modules`, 2);
|
||||
}
|
||||
directoryExistsCalled.set(`/node_modules`, 2);
|
||||
directoryExistsCalled.set(`${frontendDir}/types`, 2);
|
||||
directoryExistsCalled.set(`${frontendDir}/node_modules/@types`, 2);
|
||||
directoryExistsCalled.set(canonicalFile3Path, 1);
|
||||
callsTrackingHost.verifyCalledOnEachEntry("directoryExists", directoryExistsCalled);
|
||||
|
||||
callsTrackingHost.verifyNoCall("getDirectories");
|
||||
callsTrackingHost.verifyCalledOnEachEntryOnce("readFile", [file3.path]);
|
||||
callsTrackingHost.verifyNoCall("readDirectory");
|
||||
|
||||
checkNumberOfConfiguredProjects(projectService, 1);
|
||||
assert.strictEqual(projectService.configuredProjects.get(canonicalConfigPath), project);
|
||||
verifyProjectAndWatchedDirectories();
|
||||
|
||||
callsTrackingHost.clear();
|
||||
|
||||
const { configFileName: configFile2 } = projectService.openClientFile(file3.path);
|
||||
assert.equal(configFile2, configFileName);
|
||||
|
||||
checkNumberOfConfiguredProjects(projectService, 1);
|
||||
assert.strictEqual(projectService.configuredProjects.get(canonicalConfigPath), project);
|
||||
verifyProjectAndWatchedDirectories();
|
||||
callsTrackingHost.verifyNoHostCalls();
|
||||
|
||||
function verifyProjectAndWatchedDirectories() {
|
||||
checkProjectActualFiles(project, map(projectFiles, f => f.path));
|
||||
checkWatchedDirectories(host, [`${canonicalFrontendDir}/src`], /*recursive*/ true);
|
||||
checkWatchedDirectories(host, [`${canonicalFrontendDir}/types`, `${canonicalFrontendDir}/node_modules/@types`], /*recursive*/ false);
|
||||
}
|
||||
}
|
||||
|
||||
it("when calling goto definition of module", () => {
|
||||
const clientFile: FileOrFolder = {
|
||||
path: "/a/b/controllers/vessels/client.ts",
|
||||
@@ -4276,12 +4161,310 @@ namespace ts.projectSystem {
|
||||
assert.strictEqual(projectService.configuredProjects.get(tsconfigFile.path), project);
|
||||
});
|
||||
|
||||
it("WatchDirectories for config file With non case sensitive file system", () => {
|
||||
verifyWatchDirectoriesCaseSensitivity(/*useCaseSensitiveFileNames*/ false);
|
||||
describe("WatchDirectories for config file with", () => {
|
||||
function verifyWatchDirectoriesCaseSensitivity(useCaseSensitiveFileNames: boolean) {
|
||||
const frontendDir = "/Users/someuser/work/applications/frontend";
|
||||
const canonicalFrontendDir = useCaseSensitiveFileNames ? frontendDir : frontendDir.toLowerCase();
|
||||
const file1: FileOrFolder = {
|
||||
path: `${frontendDir}/src/app/utils/Analytic.ts`,
|
||||
content: "export class SomeClass { };"
|
||||
};
|
||||
const file2: FileOrFolder = {
|
||||
path: `${frontendDir}/src/app/redux/configureStore.ts`,
|
||||
content: "export class configureStore { }"
|
||||
};
|
||||
const file3: FileOrFolder = {
|
||||
path: `${frontendDir}/src/app/utils/Cookie.ts`,
|
||||
content: "export class Cookie { }"
|
||||
};
|
||||
const es2016LibFile: FileOrFolder = {
|
||||
path: "/a/lib/lib.es2016.full.d.ts",
|
||||
content: libFile.content
|
||||
};
|
||||
const tsconfigFile: FileOrFolder = {
|
||||
path: `${frontendDir}/tsconfig.json`,
|
||||
content: JSON.stringify({
|
||||
"compilerOptions": {
|
||||
"strict": true,
|
||||
"strictNullChecks": true,
|
||||
"target": "es2016",
|
||||
"module": "commonjs",
|
||||
"moduleResolution": "node",
|
||||
"sourceMap": true,
|
||||
"noEmitOnError": true,
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"types": [
|
||||
"node",
|
||||
"jest"
|
||||
],
|
||||
"noUnusedLocals": true,
|
||||
"outDir": "./compiled",
|
||||
"typeRoots": [
|
||||
"types",
|
||||
"node_modules/@types"
|
||||
],
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"*": [
|
||||
"types/*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"include": [
|
||||
"src/**/*"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"compiled"
|
||||
]
|
||||
})
|
||||
};
|
||||
const projectFiles = [file1, file2, es2016LibFile, tsconfigFile];
|
||||
const host = createServerHost(projectFiles, { useCaseSensitiveFileNames });
|
||||
const projectService = createProjectService(host);
|
||||
const canonicalConfigPath = useCaseSensitiveFileNames ? tsconfigFile.path : tsconfigFile.path.toLowerCase();
|
||||
const { configFileName } = projectService.openClientFile(file1.path);
|
||||
assert.equal(configFileName, tsconfigFile.path, `should find config`);
|
||||
checkNumberOfConfiguredProjects(projectService, 1);
|
||||
|
||||
const project = projectService.configuredProjects.get(canonicalConfigPath);
|
||||
verifyProjectAndWatchedDirectories();
|
||||
|
||||
const callsTrackingHost = createCallsTrackingHost(host);
|
||||
|
||||
// Create file cookie.ts
|
||||
projectFiles.push(file3);
|
||||
host.reloadFS(projectFiles);
|
||||
host.runQueuedTimeoutCallbacks();
|
||||
|
||||
const canonicalFile3Path = useCaseSensitiveFileNames ? file3.path : file3.path.toLocaleLowerCase();
|
||||
callsTrackingHost.verifyCalledOnEachEntryOnce("fileExists", [canonicalFile3Path]);
|
||||
|
||||
// Called for type root resolution
|
||||
const directoryExistsCalled = createMap<number>();
|
||||
for (let dir = frontendDir; dir !== "/"; dir = getDirectoryPath(dir)) {
|
||||
directoryExistsCalled.set(`${dir}/node_modules`, 2);
|
||||
}
|
||||
directoryExistsCalled.set(`/node_modules`, 2);
|
||||
directoryExistsCalled.set(`${frontendDir}/types`, 2);
|
||||
directoryExistsCalled.set(`${frontendDir}/node_modules/@types`, 2);
|
||||
directoryExistsCalled.set(canonicalFile3Path, 1);
|
||||
callsTrackingHost.verifyCalledOnEachEntry("directoryExists", directoryExistsCalled);
|
||||
|
||||
callsTrackingHost.verifyNoCall("getDirectories");
|
||||
callsTrackingHost.verifyCalledOnEachEntryOnce("readFile", [file3.path]);
|
||||
callsTrackingHost.verifyNoCall("readDirectory");
|
||||
|
||||
checkNumberOfConfiguredProjects(projectService, 1);
|
||||
assert.strictEqual(projectService.configuredProjects.get(canonicalConfigPath), project);
|
||||
verifyProjectAndWatchedDirectories();
|
||||
|
||||
callsTrackingHost.clear();
|
||||
|
||||
const { configFileName: configFile2 } = projectService.openClientFile(file3.path);
|
||||
assert.equal(configFile2, configFileName);
|
||||
|
||||
checkNumberOfConfiguredProjects(projectService, 1);
|
||||
assert.strictEqual(projectService.configuredProjects.get(canonicalConfigPath), project);
|
||||
verifyProjectAndWatchedDirectories();
|
||||
callsTrackingHost.verifyNoHostCalls();
|
||||
|
||||
function verifyProjectAndWatchedDirectories() {
|
||||
checkProjectActualFiles(project, map(projectFiles, f => f.path));
|
||||
checkWatchedDirectories(host, [`${canonicalFrontendDir}/src`], /*recursive*/ true);
|
||||
checkWatchedDirectories(host, [`${canonicalFrontendDir}/types`, `${canonicalFrontendDir}/node_modules/@types`], /*recursive*/ false);
|
||||
}
|
||||
}
|
||||
|
||||
it("case insensitive file system", () => {
|
||||
verifyWatchDirectoriesCaseSensitivity(/*useCaseSensitiveFileNames*/ false);
|
||||
});
|
||||
|
||||
it("case sensitive file system", () => {
|
||||
verifyWatchDirectoriesCaseSensitivity(/*useCaseSensitiveFileNames*/ true);
|
||||
});
|
||||
});
|
||||
|
||||
it("WatchDirectories for config file With case sensitive file system", () => {
|
||||
verifyWatchDirectoriesCaseSensitivity(/*useCaseSensitiveFileNames*/ true);
|
||||
describe("Verify npm install in directory with tsconfig file works when", () => {
|
||||
function verifyNpmInstall(timeoutDuringPartialInstallation: boolean) {
|
||||
const app: FileOrFolder = {
|
||||
path: "/a/b/app.ts",
|
||||
content: "import _ from 'lodash';"
|
||||
};
|
||||
const tsconfigJson: FileOrFolder = {
|
||||
path: "/a/b/tsconfig.json",
|
||||
content: '{ "compilerOptions": { } }'
|
||||
};
|
||||
const packageJson: FileOrFolder = {
|
||||
path: "/a/b/package.json",
|
||||
content: `
|
||||
{
|
||||
"name": "test",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"lodash",
|
||||
"rxjs"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/lodash",
|
||||
"typescript"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
}
|
||||
`
|
||||
};
|
||||
const appFolder = getDirectoryPath(app.path);
|
||||
const projectFiles = [app, libFile, tsconfigJson];
|
||||
const otherFiles = [packageJson];
|
||||
const host = createServerHost(projectFiles.concat(otherFiles));
|
||||
const projectService = createProjectService(host);
|
||||
const { configFileName } = projectService.openClientFile(app.path);
|
||||
assert.equal(configFileName, tsconfigJson.path, `should find config`);
|
||||
const watchedModuleLocations = getNodeModulesWatchedDirectories(appFolder, "lodash");
|
||||
verifyProject();
|
||||
|
||||
let timeoutAfterReloadFs = timeoutDuringPartialInstallation;
|
||||
|
||||
// Simulate npm install
|
||||
const filesAndFoldersToAdd: FileOrFolder[] = [
|
||||
{ "path": "/a/b/node_modules" },
|
||||
{ "path": "/a/b/node_modules/.staging/@types" },
|
||||
{ "path": "/a/b/node_modules/.staging/lodash-b0733faa" },
|
||||
{ "path": "/a/b/node_modules/.staging/@types/lodash-e56c4fe7" },
|
||||
{ "path": "/a/b/node_modules/.staging/symbol-observable-24bcbbff" },
|
||||
{ "path": "/a/b/node_modules/.staging/rxjs-22375c61" },
|
||||
{ "path": "/a/b/node_modules/.staging/typescript-8493ea5d" },
|
||||
{ "path": "/a/b/node_modules/.staging/symbol-observable-24bcbbff/package.json", "content": "{\n \"name\": \"symbol-observable\",\n \"version\": \"1.0.4\",\n \"description\": \"Symbol.observable ponyfill\",\n \"license\": \"MIT\",\n \"repository\": \"blesh/symbol-observable\",\n \"author\": {\n \"name\": \"Ben Lesh\",\n \"email\": \"ben@benlesh.com\"\n },\n \"engines\": {\n \"node\": \">=0.10.0\"\n },\n \"scripts\": {\n \"test\": \"npm run build && mocha && tsc ./ts-test/test.ts && node ./ts-test/test.js && check-es3-syntax -p lib/ --kill\",\n \"build\": \"babel es --out-dir lib\",\n \"prepublish\": \"npm test\"\n },\n \"files\": [\n \"" },
|
||||
{ "path": "/a/b/node_modules/.staging/lodash-b0733faa/package.json", "content": "{\n \"name\": \"lodash\",\n \"version\": \"4.17.4\",\n \"description\": \"Lodash modular utilities.\",\n \"keywords\": \"modules, stdlib, util\",\n \"homepage\": \"https://lodash.com/\",\n \"repository\": \"lodash/lodash\",\n \"icon\": \"https://lodash.com/icon.svg\",\n \"license\": \"MIT\",\n \"main\": \"lodash.js\",\n \"author\": \"John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)\",\n \"contributors\": [\n \"John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)\",\n \"Mathias Bynens <mathias@qiwi." },
|
||||
{ "path": "/a/b/node_modules/.staging/rxjs-22375c61/package.json", "content": "{\n \"name\": \"rxjs\",\n \"version\": \"5.4.3\",\n \"description\": \"Reactive Extensions for modern JavaScript\",\n \"main\": \"Rx.js\",\n \"config\": {\n \"commitizen\": {\n \"path\": \"cz-conventional-changelog\"\n }\n },\n \"lint-staged\": {\n \"*.@(js)\": [\n \"eslint --fix\",\n \"git add\"\n ],\n \"*.@(ts)\": [\n \"tslint --fix\",\n \"git add\"\n ]\n },\n \"scripts-info\": {\n \"info\": \"List available script\",\n \"build_all\": \"Build all packages (ES6, CJS, UMD) and generate packages\",\n \"build_cjs\": \"Build CJS package with clean up existing build, copy source into dist\",\n \"build_es6\": \"Build ES6 package with clean up existing build, copy source into dist\",\n \"build_closure_core\": \"Minify Global core build using closure compiler\",\n \"build_global\": \"Build Global package, then minify build\",\n \"build_perf\": \"Build CJS & Global build, run macro performance test\",\n \"build_test\": \"Build CJS package & test spec, execute mocha test runner\",\n \"build_cover\": \"Run lint to current code, build CJS & test spec, execute test coverage\",\n \"build_docs\": \"Build ES6 & global package, create documentation using it\",\n \"build_spec\": \"Build test specs\",\n \"check_circular_dependencies\": \"Check codebase has circular dependencies\",\n \"clean_spec\": \"Clean up existing test spec build output\",\n \"clean_dist_cjs\": \"Clean up existing CJS package output\",\n \"clean_dist_es6\": \"Clean up existing ES6 package output\",\n \"clean_dist_global\": \"Clean up existing Global package output\",\n \"commit\": \"Run git commit wizard\",\n \"compile_dist_cjs\": \"Compile codebase into CJS module\",\n \"compile_module_es6\": \"Compile codebase into ES6\",\n \"cover\": \"Execute test coverage\",\n \"lint_perf\": \"Run lint against performance test suite\",\n \"lint_spec\": \"Run lint against test spec\",\n \"lint_src\": \"Run lint against source\",\n \"lint\": \"Run lint against everything\",\n \"perf\": \"Run macro performance benchmark\",\n \"perf_micro\": \"Run micro performance benchmark\",\n \"test_mocha\": \"Execute mocha test runner against existing test spec build\",\n \"test_browser\": \"Execute mocha test runner on browser against existing test spec build\",\n \"test\": \"Clean up existing test spec build, build test spec and execute mocha test runner\",\n \"tests2png\": \"Generate marble diagram image from test spec\",\n \"watch\": \"Watch codebase, trigger compile when source code changes\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git@github.com:ReactiveX/RxJS.git\"\n },\n \"keywords\": [\n \"Rx\",\n \"RxJS\",\n \"ReactiveX\",\n \"ReactiveExtensions\",\n \"Streams\",\n \"Observables\",\n \"Observable\",\n \"Stream\",\n \"ES6\",\n \"ES2015\"\n ],\n \"author\": \"Ben Lesh <ben@benlesh.com>\",\n \"contributors\": [\n {\n \"name\": \"Ben Lesh\",\n \"email\": \"ben@benlesh.com\"\n },\n {\n \"name\": \"Paul Taylor\",\n \"email\": \"paul.e.taylor@me.com\"\n },\n {\n \"name\": \"Jeff Cross\",\n \"email\": \"crossj@google.com\"\n },\n {\n \"name\": \"Matthew Podwysocki\",\n \"email\": \"matthewp@microsoft.com\"\n },\n {\n \"name\": \"OJ Kwon\",\n \"email\": \"kwon.ohjoong@gmail.com\"\n },\n {\n \"name\": \"Andre Staltz\",\n \"email\": \"andre@staltz.com\"\n }\n ],\n \"license\": \"Apache-2.0\",\n \"bugs\": {\n \"url\": \"https://github.com/ReactiveX/RxJS/issues\"\n },\n \"homepage\": \"https://github.com/ReactiveX/RxJS\",\n \"devDependencies\": {\n \"babel-polyfill\": \"^6.23.0\",\n \"benchmark\": \"^2.1.0\",\n \"benchpress\": \"2.0.0-beta.1\",\n \"chai\": \"^3.5.0\",\n \"color\": \"^0.11.1\",\n \"colors\": \"1.1.2\",\n \"commitizen\": \"^2.8.6\",\n \"coveralls\": \"^2.11.13\",\n \"cz-conventional-changelog\": \"^1.2.0\",\n \"danger\": \"^1.1.0\",\n \"doctoc\": \"^1.0.0\",\n \"escape-string-regexp\": \"^1.0.5 \",\n \"esdoc\": \"^0.4.7\",\n \"eslint\": \"^3.8.0\",\n \"fs-extra\": \"^2.1.2\",\n \"get-folder-size\": \"^1.0.0\",\n \"glob\": \"^7.0.3\",\n \"gm\": \"^1.22.0\",\n \"google-closure-compiler-js\": \"^20170218.0.0\",\n \"gzip-size\": \"^3.0.0\",\n \"http-server\": \"^0.9.0\",\n \"husky\": \"^0.13.3\",\n \"lint-staged\": \"3.2.5\",\n \"lodash\": \"^4.15.0\",\n \"madge\": \"^1.4.3\",\n \"markdown-doctest\": \"^0.9.1\",\n \"minimist\": \"^1.2.0\",\n \"mkdirp\": \"^0.5.1\",\n \"mocha\": \"^3.0.2\",\n \"mocha-in-sauce\": \"0.0.1\",\n \"npm-run-all\": \"^4.0.2\",\n \"npm-scripts-info\": \"^0.3.4\",\n \"nyc\": \"^10.2.0\",\n \"opn-cli\": \"^3.1.0\",\n \"platform\": \"^1.3.1\",\nLine truncated
|
||||
{ "path": "/a/b/node_modules/.staging/typescript-8493ea5d/package.json", "content": "{\n \"name\": \"typescript\",\n \"author\": \"Microsoft Corp.\",\n \"homepage\": \"http://typescriptlang.org/\",\n \"version\": \"2.4.2\",\n \"license\": \"Apache-2.0\",\n \"description\": \"TypeScript is a language for application scale JavaScript development\",\n \"keywords\": [\n \"TypeScript\",\n \"Microsoft\",\n \"compiler\",\n \"language\",\n \"javascript\"\n ],\n \"bugs\": {\n \"url\": \"https://github.com/Microsoft/TypeScript/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/Microsoft/TypeScript.git\"\n },\n \"main\": \"./lib/typescript.js\",\n \"typings\": \"./lib/typescript.d.ts\",\n \"bin\": {\n \"tsc\": \"./bin/tsc\",\n \"tsserver\": \"./bin/tsserver\"\n },\n \"engines\": {\n \"node\": \">=4.2.0\"\n },\n \"devDependencies\": {\n \"@types/browserify\": \"latest\",\n \"@types/chai\": \"latest\",\n \"@types/convert-source-map\": \"latest\",\n \"@types/del\": \"latest\",\n \"@types/glob\": \"latest\",\n \"@types/gulp\": \"latest\",\n \"@types/gulp-concat\": \"latest\",\n \"@types/gulp-help\": \"latest\",\n \"@types/gulp-newer\": \"latest\",\n \"@types/gulp-sourcemaps\": \"latest\",\n \"@types/merge2\": \"latest\",\n \"@types/minimatch\": \"latest\",\n \"@types/minimist\": \"latest\",\n \"@types/mkdirp\": \"latest\",\n \"@types/mocha\": \"latest\",\n \"@types/node\": \"latest\",\n \"@types/q\": \"latest\",\n \"@types/run-sequence\": \"latest\",\n \"@types/through2\": \"latest\",\n \"browserify\": \"latest\",\n \"chai\": \"latest\",\n \"convert-source-map\": \"latest\",\n \"del\": \"latest\",\n \"gulp\": \"latest\",\n \"gulp-clone\": \"latest\",\n \"gulp-concat\": \"latest\",\n \"gulp-help\": \"latest\",\n \"gulp-insert\": \"latest\",\n \"gulp-newer\": \"latest\",\n \"gulp-sourcemaps\": \"latest\",\n \"gulp-typescript\": \"latest\",\n \"into-stream\": \"latest\",\n \"istanbul\": \"latest\",\n \"jake\": \"latest\",\n \"merge2\": \"latest\",\n \"minimist\": \"latest\",\n \"mkdirp\": \"latest\",\n \"mocha\": \"latest\",\n \"mocha-fivemat-progress-reporter\": \"latest\",\n \"q\": \"latest\",\n \"run-sequence\": \"latest\",\n \"sorcery\": \"latest\",\n \"through2\": \"latest\",\n \"travis-fold\": \"latest\",\n \"ts-node\": \"latest\",\n \"tslint\": \"latest\",\n \"typescript\": \"^2.4\"\n },\n \"scripts\": {\n \"pretest\": \"jake tests\",\n \"test\": \"jake runtests-parallel\",\n \"build\": \"npm run build:compiler && npm run build:tests\",\n \"build:compiler\": \"jake local\",\n \"build:tests\": \"jake tests\",\n \"start\": \"node lib/tsc\",\n \"clean\": \"jake clean\",\n \"gulp\": \"gulp\",\n \"jake\": \"jake\",\n \"lint\": \"jake lint\",\n \"setup-hooks\": \"node scripts/link-hooks.js\"\n },\n \"browser\": {\n \"buffer\": false,\n \"fs\": false,\n \"os\": false,\n \"path\": false\n }\n}" },
|
||||
{ "path": "/a/b/node_modules/.staging/symbol-observable-24bcbbff/index.js", "content": "module.exports = require('./lib/index');\n" },
|
||||
{ "path": "/a/b/node_modules/.staging/symbol-observable-24bcbbff/index.d.ts", "content": "declare const observableSymbol: symbol;\nexport default observableSymbol;\n" },
|
||||
{ "path": "/a/b/node_modules/.staging/symbol-observable-24bcbbff/lib" },
|
||||
{ "path": "/a/b/node_modules/.staging/symbol-observable-24bcbbff/lib/index.js", "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _ponyfill = require('./ponyfill');\n\nvar _ponyfill2 = _interopRequireDefault(_ponyfill);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar root; /* global window */\n\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (typeof module !== 'undefined') {\n root = module;\n} else {\n root = Function('return this')();\n}\n\nvar result = (0, _ponyfill2['default'])(root);\nexports['default'] = result;" },
|
||||
];
|
||||
verifyAfterPartialOrCompleteNpmInstall(2);
|
||||
|
||||
filesAndFoldersToAdd.push(
|
||||
{ "path": "/a/b/node_modules/.staging/typescript-8493ea5d/lib" },
|
||||
{ "path": "/a/b/node_modules/.staging/rxjs-22375c61/add/operator" },
|
||||
{ "path": "/a/b/node_modules/.staging/@types/lodash-e56c4fe7/package.json", "content": "{\n \"name\": \"@types/lodash\",\n \"version\": \"4.14.74\",\n \"description\": \"TypeScript definitions for Lo-Dash\",\n \"license\": \"MIT\",\n \"contributors\": [\n {\n \"name\": \"Brian Zengel\",\n \"url\": \"https://github.com/bczengel\"\n },\n {\n \"name\": \"Ilya Mochalov\",\n \"url\": \"https://github.com/chrootsu\"\n },\n {\n \"name\": \"Stepan Mikhaylyuk\",\n \"url\": \"https://github.com/stepancar\"\n },\n {\n \"name\": \"Eric L Anderson\",\n \"url\": \"https://github.com/ericanderson\"\n },\n {\n \"name\": \"AJ Richardson\",\n \"url\": \"https://github.com/aj-r\"\n },\n {\n \"name\": \"Junyoung Clare Jang\",\n \"url\": \"https://github.com/ailrun\"\n }\n ],\n \"main\": \"\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://www.github.com/DefinitelyTyped/DefinitelyTyped.git\"\n },\n \"scripts\": {},\n \"dependencies\": {},\n \"typesPublisherContentHash\": \"12af578ffaf8d86d2df37e591857906a86b983fa9258414326544a0fe6af0de8\",\n \"typeScriptVersion\": \"2.2\"\n}" },
|
||||
{ "path": "/a/b/node_modules/.staging/lodash-b0733faa/index.js", "content": "module.exports = require('./lodash');" },
|
||||
{ "path": "/a/b/node_modules/.staging/typescript-8493ea5d/package.json.3017591594" }
|
||||
);
|
||||
// Since we didnt add any supported extension file, there wont be any timeout scheduled
|
||||
verifyAfterPartialOrCompleteNpmInstall(0);
|
||||
|
||||
// Remove file "/a/b/node_modules/.staging/typescript-8493ea5d/package.json.3017591594"
|
||||
filesAndFoldersToAdd.length--;
|
||||
verifyAfterPartialOrCompleteNpmInstall(0);
|
||||
|
||||
filesAndFoldersToAdd.push(
|
||||
{ "path": "/a/b/node_modules/.staging/rxjs-22375c61/bundles" },
|
||||
{ "path": "/a/b/node_modules/.staging/rxjs-22375c61/operator" },
|
||||
{ "path": "/a/b/node_modules/.staging/rxjs-22375c61/src/add/observable/dom" },
|
||||
{ "path": "/a/b/node_modules/.staging/@types/lodash-e56c4fe7/index.d.ts", "content": "// Type definitions for Lo-Dash 4.14\n// Project: http://lodash.com/\n// Definitions by: Brian Zengel <https://github.com/bczengel>,\n// Ilya Mochalov <https://github.com/chrootsu>,\n// Stepan Mikhaylyuk <https://github.com/stepancar>,\n// Eric L Anderson <https://github.com/ericanderson>,\n// AJ Richardson <https://github.com/aj-r>,\n// Junyoung Clare Jang <https://github.com/ailrun>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.2\n\n/**\n### 4.0.0 Changelog (https://github.com/lodash/lodash/wiki/Changelog)\n\n#### TODO:\nremoved:\n- [x] Removed _.support\n- [x] Removed _.findWhere in favor of _.find with iteratee shorthand\n- [x] Removed _.where in favor of _.filter with iteratee shorthand\n- [x] Removed _.pluck in favor of _.map with iteratee shorthand\n\nrenamed:\n- [x] Renamed _.first to _.head\n- [x] Renamed _.indexBy to _.keyBy\n- [x] Renamed _.invoke to _.invokeMap\n- [x] Renamed _.overArgs to _.overArgs\n- [x] Renamed _.padLeft & _.padRight to _.padStart & _.padEnd\n- [x] Renamed _.pairs to _.toPairs\n- [x] Renamed _.rest to _.tail\n- [x] Renamed _.restParam to _.rest\n- [x] Renamed _.sortByOrder to _.orderBy\n- [x] Renamed _.trimLeft & _.trimRight to _.trimStart & _.trimEnd\n- [x] Renamed _.trunc to _.truncate\n\nsplit:\n- [x] Split _.indexOf & _.lastIndexOf into _.sortedIndexOf & _.sortedLastIndexOf\n- [x] Split _.max & _.min into _.maxBy & _.minBy\n- [x] Split _.omit & _.pick into _.omitBy & _.pickBy\n- [x] Split _.sample into _.sampleSize\n- [x] Split _.sortedIndex into _.sortedIndexBy\n- [x] Split _.sortedLastIndex into _.sortedLastIndexBy\n- [x] Split _.uniq into _.sortedUniq, _.sortedUniqBy, & _.uniqBy\n\nchanges:\n- [x] Absorbed _.sortByAll into _.sortBy\n- [x] Changed the category of _.at to “Object”\n- [x] Changed the category of _.bindAll to “Utility”\n- [x] Made _.capitalize uppercase the first character & lowercase the rest\n- [x] Made _.functions return only own method names\n\nadded 23 array methods:\n- [x] _.concat\n- [x] _.differenceBy\n- [x] _.differenceWith\n- [x] _.flatMap\n- [x] _.fromPairs\n- [x] _.intersectionBy\n- [x] _.intersectionWith\n- [x] _.join\n- [x] _.pullAll\n- [x] _.pullAllBy\n- [x] _.reverse\n- [x] _.sortedIndexBy\n- [x] _.sortedIndexOf\n- [x] _.sortedLastIndexBy\n- [x] _.sortedLastIndexOf\n- [x] _.sortedUniq\n- [x] _.sortedUniqBy\n- [x] _.unionBy\n- [x] _.unionWith\n- [x] _.uniqBy\n- [x] _.uniqWith\n- [x] _.xorBy\n- [x] _.xorWith\n\nadded 20 lang methods:\n- [x] _.cloneDeepWith\n- [x] _.cloneWith\n- [x] _.eq\n- [x] _.isArrayLike\n- [x] _.isArrayLikeObject\n- [x] _.isEqualWith\n- [x] _.isInteger\n- [x] _.isLength\n- [x] _.isMatchWith\n- [x] _.isNil\n- [x] _.isObjectLike\n- [x] _.isSafeInteger\n- [x] _.isSymbol\n- [x] _.toInteger\n- [x] _.toLength\n- [x] _.toNumber\n- [x] _.toSafeInteger\n- [x] _.toString\n- [X] _.conforms\n- [X] _.conformsTo\n\nadded 13 object methods:\n- [x] _.assignIn\n- [x] _.assignInWith\n- [x] _.assignWith\n- [x] _.functionsIn\n- [x] _.hasIn\n- [x] _.mergeWith\n- [x] _.omitBy\n- [x] _.pickBy\n\nadded 8 string methods:\n- [x] _.lowerCase\n- [x] _.lowerFirst\n- [x] _.upperCase\n- [x] _.upperFirst\n- [x] _.toLower\n- [x] _.toUpper\n\nadded 8 utility methods:\n- [x] _.toPath\n\nadded 4 math methods:\n- [x] _.maxBy\n- [x] _.mean\n- [x] _.minBy\n- [x] _.sumBy\n\nadded 2 function methods:\n- [x] _.flip\n- [x] _.unary\n\nadded 2 number methods:\n- [x] _.clamp\n- [x] _.subtract\n\nadded collection method:\n- [x] _.sampleSize\n\nAdded 3 aliases\n\n- [x] _.first as an alias of _.head\n\nRemoved 17 aliases\n- [x] Removed aliase _.all\n- [x] Removed aliase _.any\n- [x] Removed aliase _.backflow\n- [x] Removed aliase _.callback\n- [x] Removed aliase _.collect\n- [x] Removed aliase _.compose\n- [x] Removed aliase _.contains\n- [x] Removed aliase _.detect\n- [x] Removed aliase _.foldl\n- [x] Removed aliase _.foldr\n- [x] Removed aliase _.include\n- [x] Removed aliase _.inject\n- [x] Removed aliase _.methods\n- [x] Removed aliase _.object\n- [x] Removed aliase _.run\n- [x] Removed aliase _.select\n- [x] Removed aliase _.unique\n\nOther changes\n- [x] Added support for array buffers to _.isEqual\n- [x] Added support for converting iterators to _.toArray\n- [x] Added support for deep paths to _.zipObject\n- [x] Changed UMD to export to window or self when available regardless of other exports\n- [x] Ensured debounce cancel clears args & thisArg references\n- [x] Ensured _.add, _.subtract, & _.sum don’t skip NaN values\n- [x] Ensured _.clone treats generators like functions\n- [x] Ensured _.clone produces clones with the source’s [[Prototype]]\n- [x] Ensured _.defaults assigns properties that shadow Object.prototype\n- [x] Ensured _.defaultsDeep doesn’t merge a string into an array\n- [x] Ensured _.defaultsDeep & _.me
Line truncated
|
||||
);
|
||||
verifyAfterPartialOrCompleteNpmInstall(2);
|
||||
|
||||
filesAndFoldersToAdd.push(
|
||||
{ "path": "/a/b/node_modules/.staging/rxjs-22375c61/src/scheduler" },
|
||||
{ "path": "/a/b/node_modules/.staging/rxjs-22375c61/src/util" },
|
||||
{ "path": "/a/b/node_modules/.staging/rxjs-22375c61/symbol" },
|
||||
{ "path": "/a/b/node_modules/.staging/rxjs-22375c61/testing" },
|
||||
{ "path": "/a/b/node_modules/.staging/rxjs-22375c61/package.json.2252192041", "content": "{\n \"_args\": [\n [\n {\n \"raw\": \"rxjs@^5.4.2\",\n \"scope\": null,\n \"escapedName\": \"rxjs\",\n \"name\": \"rxjs\",\n \"rawSpec\": \"^5.4.2\",\n \"spec\": \">=5.4.2 <6.0.0\",\n \"type\": \"range\"\n },\n \"C:\\\\Users\\\\shkamat\\\\Desktop\\\\app\"\n ]\n ],\n \"_from\": \"rxjs@>=5.4.2 <6.0.0\",\n \"_id\": \"rxjs@5.4.3\",\n \"_inCache\": true,\n \"_location\": \"/rxjs\",\n \"_nodeVersion\": \"7.7.2\",\n \"_npmOperationalInternal\": {\n \"host\": \"s3://npm-registry-packages\",\n \"tmp\": \"tmp/rxjs-5.4.3.tgz_1502407898166_0.6800217325799167\"\n },\n \"_npmUser\": {\n \"name\": \"blesh\",\n \"email\": \"ben@benlesh.com\"\n },\n \"_npmVersion\": \"5.3.0\",\n \"_phantomChildren\": {},\n \"_requested\": {\n \"raw\": \"rxjs@^5.4.2\",\n \"scope\": null,\n \"escapedName\": \"rxjs\",\n \"name\": \"rxjs\",\n \"rawSpec\": \"^5.4.2\",\n \"spec\": \">=5.4.2 <6.0.0\",\n \"type\": \"range\"\n },\n \"_requiredBy\": [\n \"/\"\n ],\n \"_resolved\": \"https://registry.npmjs.org/rxjs/-/rxjs-5.4.3.tgz\",\n \"_shasum\": \"0758cddee6033d68e0fd53676f0f3596ce3d483f\",\n \"_shrinkwrap\": null,\n \"_spec\": \"rxjs@^5.4.2\",\n \"_where\": \"C:\\\\Users\\\\shkamat\\\\Desktop\\\\app\",\n \"author\": {\n \"name\": \"Ben Lesh\",\n \"email\": \"ben@benlesh.com\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/ReactiveX/RxJS/issues\"\n },\n \"config\": {\n \"commitizen\": {\n \"path\": \"cz-conventional-changelog\"\n }\n },\n \"contributors\": [\n {\n \"name\": \"Ben Lesh\",\n \"email\": \"ben@benlesh.com\"\n },\n {\n \"name\": \"Paul Taylor\",\n \"email\": \"paul.e.taylor@me.com\"\n },\n {\n \"name\": \"Jeff Cross\",\n \"email\": \"crossj@google.com\"\n },\n {\n \"name\": \"Matthew Podwysocki\",\n \"email\": \"matthewp@microsoft.com\"\n },\n {\n \"name\": \"OJ Kwon\",\n \"email\": \"kwon.ohjoong@gmail.com\"\n },\n {\n \"name\": \"Andre Staltz\",\n \"email\": \"andre@staltz.com\"\n }\n ],\n \"dependencies\": {\n \"symbol-observable\": \"^1.0.1\"\n },\n \"description\": \"Reactive Extensions for modern JavaScript\",\n \"devDependencies\": {\n \"babel-polyfill\": \"^6.23.0\",\n \"benchmark\": \"^2.1.0\",\n \"benchpress\": \"2.0.0-beta.1\",\n \"chai\": \"^3.5.0\",\n \"color\": \"^0.11.1\",\n \"colors\": \"1.1.2\",\n \"commitizen\": \"^2.8.6\",\n \"coveralls\": \"^2.11.13\",\n \"cz-conventional-changelog\": \"^1.2.0\",\n \"danger\": \"^1.1.0\",\n \"doctoc\": \"^1.0.0\",\n \"escape-string-regexp\": \"^1.0.5 \",\n \"esdoc\": \"^0.4.7\",\n \"eslint\": \"^3.8.0\",\n \"fs-extra\": \"^2.1.2\",\n \"get-folder-size\": \"^1.0.0\",\n \"glob\": \"^7.0.3\",\n \"gm\": \"^1.22.0\",\n \"google-closure-compiler-js\": \"^20170218.0.0\",\n \"gzip-size\": \"^3.0.0\",\n \"http-server\": \"^0.9.0\",\n \"husky\": \"^0.13.3\",\n \"lint-staged\": \"3.2.5\",\n \"lodash\": \"^4.15.0\",\n \"madge\": \"^1.4.3\",\n \"markdown-doctest\": \"^0.9.1\",\n \"minimist\": \"^1.2.0\",\n \"mkdirp\": \"^0.5.1\",\n \"mocha\": \"^3.0.2\",\n \"mocha-in-sauce\": \"0.0.1\",\n \"npm-run-all\": \"^4.0.2\",\n \"npm-scripts-info\": \"^0.3.4\",\n \"nyc\": \"^10.2.0\",\n \"opn-cli\": \"^3.1.0\",\n \"platform\": \"^1.3.1\",\n \"promise\": \"^7.1.1\",\n \"protractor\": \"^3.1.1\",\n \"rollup\": \"0.36.3\",\n \"rollup-plugin-inject\": \"^2.0.0\",\n \"rollup-plugin-node-resolve\": \"^2.0.0\",\n \"rx\": \"latest\",\n \"rxjs\": \"latest\",\n \"shx\": \"^0.2.2\",\n \"sinon\": \"^2.1.0\",\n \"sinon-chai\": \"^2.9.0\",\n \"source-map-support\": \"^0.4.0\",\n \"tslib\": \"^1.5.0\",\n \"tslint\": \"^4.4.2\",\n \"typescript\": \"~2.0.6\",\n \"typings\": \"^2.0.0\",\n \"validate-commit-msg\": \"^2.14.0\",\n \"watch\": \"^1.0.1\",\n \"webpack\": \"^1.13.1\",\n \"xmlhttprequest\": \"1.8.0\"\n },\n \"directories\": {},\n \"dist\": {\n \"integrity\": \"sha512-fSNi+y+P9ss+EZuV0GcIIqPUK07DEaMRUtLJvdcvMyFjc9dizuDjere+A4V7JrLGnm9iCc+nagV/4QdMTkqC4A==\",\n \"shasum\": \"0758cddee6033d68e0fd53676f0f3596ce3d483f\",\n \"tarball\": \"https://registry.npmjs.org/rxjs/-/rxjs-5.4.3.tgz\"\n },\n \"engines\": {\n \"npm\": \">=2.0.0\"\n },\n \"homepage\": \"https://github.com/ReactiveX/RxJS\",\n \"keywords\": [\n \"Rx\",\n \"RxJS\",\n \"ReactiveX\",\n \"ReactiveExtensions\",\n \"Streams\",\n \"Observables\",\n \"Observable\",\n \"Stream\",\n \"ES6\",\n \"ES2015\"\n ],\n \"license\": \"Apache-2.0\",\n \"lint-staged\": {\n \"*.@(js)\": [\n \"eslint --fix\",\n \"git add\"\n ],\n \"*.@(ts)\": [\n \"tslint --fix\",\n \"Line truncated
|
||||
);
|
||||
verifyAfterPartialOrCompleteNpmInstall(0);
|
||||
|
||||
// remove /a/b/node_modules/.staging/rxjs-22375c61/package.json.2252192041
|
||||
filesAndFoldersToAdd.length--;
|
||||
// and add few more folders/files
|
||||
filesAndFoldersToAdd.push(
|
||||
{ "path": "/a/b/node_modules/symbol-observable" },
|
||||
{ "path": "/a/b/node_modules/@types" },
|
||||
{ "path": "/a/b/node_modules/@types/lodash" },
|
||||
{ "path": "/a/b/node_modules/lodash" },
|
||||
{ "path": "/a/b/node_modules/rxjs" },
|
||||
{ "path": "/a/b/node_modules/typescript" },
|
||||
{ "path": "/a/b/node_modules/.bin" }
|
||||
);
|
||||
verifyAfterPartialOrCompleteNpmInstall(0);
|
||||
|
||||
forEach(filesAndFoldersToAdd, f => {
|
||||
f.path = f.path
|
||||
.replace("/a/b/node_modules/.staging", "/a/b/node_modules")
|
||||
.replace(/[\-\.][\d\w][\d\w][\d\w][\d\w][\d\w][\d\w][\d\w][\d\w]/g, "");
|
||||
});
|
||||
|
||||
const lodashIndexPath = "/a/b/node_modules/@types/lodash/index.d.ts";
|
||||
projectFiles.push(find(filesAndFoldersToAdd, f => f.path === lodashIndexPath));
|
||||
watchedModuleLocations.length = watchedModuleLocations.indexOf(lodashIndexPath);
|
||||
// npm installation complete, timeout after reload fs
|
||||
timeoutAfterReloadFs = true;
|
||||
verifyAfterPartialOrCompleteNpmInstall(2);
|
||||
|
||||
function verifyAfterPartialOrCompleteNpmInstall(timeoutQueueLengthWhenRunningTimeouts: number) {
|
||||
host.reloadFS(projectFiles.concat(otherFiles, filesAndFoldersToAdd));
|
||||
if (timeoutAfterReloadFs) {
|
||||
host.checkTimeoutQueueLengthAndRun(timeoutQueueLengthWhenRunningTimeouts);
|
||||
}
|
||||
else {
|
||||
host.checkTimeoutQueueLength(2);
|
||||
}
|
||||
verifyProject();
|
||||
}
|
||||
|
||||
function verifyProject() {
|
||||
checkNumberOfConfiguredProjects(projectService, 1);
|
||||
|
||||
const project = projectService.configuredProjects.get(tsconfigJson.path);
|
||||
const projectFilePaths = map(projectFiles, f => f.path);
|
||||
checkProjectActualFiles(project, projectFilePaths);
|
||||
|
||||
const filesWatched = filter(projectFilePaths, p => p !== app.path).concat(watchedModuleLocations);
|
||||
checkWatchedFiles(host, filesWatched);
|
||||
checkWatchedDirectories(host, [appFolder], /*recursive*/ true);
|
||||
checkWatchedDirectories(host, [], /*recursive*/ false);
|
||||
}
|
||||
|
||||
function getNodeModulesWatchedDirectories(path: string, module: string): string[] {
|
||||
const nodeModulesDir = combinePaths(path, "node_modules/");
|
||||
const parentDir = getDirectoryPath(path);
|
||||
const parentNodeModules = parentDir !== path ? getNodeModulesWatchedDirectories(parentDir, module) : [];
|
||||
return [
|
||||
`${nodeModulesDir}${module}.ts`,
|
||||
`${nodeModulesDir}${module}.tsx`,
|
||||
`${nodeModulesDir}${module}.d.ts`,
|
||||
`${nodeModulesDir}${module}/index.ts`,
|
||||
`${nodeModulesDir}${module}/index.tsx`,
|
||||
`${nodeModulesDir}${module}/index.d.ts`,
|
||||
`${nodeModulesDir}@types/${module}.d.ts`,
|
||||
`${nodeModulesDir}@types/${module}/index.d.ts`,
|
||||
`${nodeModulesDir}@types/${module}/package.json`,
|
||||
`${nodeModulesDir}${module}.js`,
|
||||
`${nodeModulesDir}${module}.jsx`,
|
||||
`${nodeModulesDir}${module}/package.json`,
|
||||
`${nodeModulesDir}${module}/index.js`,
|
||||
`${nodeModulesDir}${module}/index.jsx`,
|
||||
].concat(parentNodeModules);
|
||||
}
|
||||
}
|
||||
|
||||
it("timeouts occur inbetween installation", () => {
|
||||
verifyNpmInstall(/*timeoutDuringPartialInstallation*/ true);
|
||||
});
|
||||
|
||||
it("timeout occurs after installation", () => {
|
||||
verifyNpmInstall(/*timeoutDuringPartialInstallation*/ false);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in new issue
Block a user