@rushstack/rundown 1.0.143 → 1.0.147

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/CHANGELOG.json CHANGED
@@ -1,6 +1,89 @@
1
1
  {
2
2
  "name": "@rushstack/rundown",
3
3
  "entries": [
4
+ {
5
+ "version": "1.0.147",
6
+ "tag": "@rushstack/rundown_v1.0.147",
7
+ "date": "Tue, 05 Oct 2021 15:08:38 GMT",
8
+ "comments": {
9
+ "dependency": [
10
+ {
11
+ "comment": "Updating dependency \"@rushstack/node-core-library\" to `3.42.0`"
12
+ },
13
+ {
14
+ "comment": "Updating dependency \"@rushstack/heft\" to `0.41.0`"
15
+ },
16
+ {
17
+ "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `1.2.19`"
18
+ }
19
+ ]
20
+ }
21
+ },
22
+ {
23
+ "version": "1.0.146",
24
+ "tag": "@rushstack/rundown_v1.0.146",
25
+ "date": "Mon, 04 Oct 2021 15:10:18 GMT",
26
+ "comments": {
27
+ "dependency": [
28
+ {
29
+ "comment": "Updating dependency \"@rushstack/ts-command-line\" to `4.10.0`"
30
+ },
31
+ {
32
+ "comment": "Updating dependency \"@rushstack/heft\" to `0.40.0`"
33
+ },
34
+ {
35
+ "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `1.2.18`"
36
+ }
37
+ ]
38
+ }
39
+ },
40
+ {
41
+ "version": "1.0.145",
42
+ "tag": "@rushstack/rundown_v1.0.145",
43
+ "date": "Fri, 24 Sep 2021 00:09:29 GMT",
44
+ "comments": {
45
+ "dependency": [
46
+ {
47
+ "comment": "Updating dependency \"@rushstack/node-core-library\" to `3.41.0`"
48
+ },
49
+ {
50
+ "comment": "Updating dependency \"@rushstack/heft\" to `0.39.2`"
51
+ },
52
+ {
53
+ "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `1.2.17`"
54
+ }
55
+ ]
56
+ }
57
+ },
58
+ {
59
+ "version": "1.0.144",
60
+ "tag": "@rushstack/rundown_v1.0.144",
61
+ "date": "Thu, 23 Sep 2021 00:10:41 GMT",
62
+ "comments": {
63
+ "patch": [
64
+ {
65
+ "comment": "Upgrade the `@types/node` dependency to version to version 12."
66
+ }
67
+ ],
68
+ "dependency": [
69
+ {
70
+ "comment": "Updating dependency \"@rushstack/node-core-library\" to `3.40.3`"
71
+ },
72
+ {
73
+ "comment": "Updating dependency \"@rushstack/ts-command-line\" to `4.9.1`"
74
+ },
75
+ {
76
+ "comment": "Updating dependency \"@rushstack/eslint-config\" to `2.4.1`"
77
+ },
78
+ {
79
+ "comment": "Updating dependency \"@rushstack/heft\" to `0.39.1`"
80
+ },
81
+ {
82
+ "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `1.2.16`"
83
+ }
84
+ ]
85
+ }
86
+ },
4
87
  {
5
88
  "version": "1.0.143",
6
89
  "tag": "@rushstack/rundown_v1.0.143",
package/CHANGELOG.md CHANGED
@@ -1,6 +1,28 @@
1
1
  # Change Log - @rushstack/rundown
2
2
 
3
- This log was last generated on Wed, 22 Sep 2021 03:27:12 GMT and should not be manually modified.
3
+ This log was last generated on Tue, 05 Oct 2021 15:08:38 GMT and should not be manually modified.
4
+
5
+ ## 1.0.147
6
+ Tue, 05 Oct 2021 15:08:38 GMT
7
+
8
+ _Version update only_
9
+
10
+ ## 1.0.146
11
+ Mon, 04 Oct 2021 15:10:18 GMT
12
+
13
+ _Version update only_
14
+
15
+ ## 1.0.145
16
+ Fri, 24 Sep 2021 00:09:29 GMT
17
+
18
+ _Version update only_
19
+
20
+ ## 1.0.144
21
+ Thu, 23 Sep 2021 00:10:41 GMT
22
+
23
+ ### Patches
24
+
25
+ - Upgrade the `@types/node` dependency to version to version 12.
4
26
 
5
27
  ## 1.0.143
6
28
  Wed, 22 Sep 2021 03:27:12 GMT
package/lib/Rundown.js CHANGED
@@ -16,7 +16,7 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
16
16
  var __importStar = (this && this.__importStar) || function (mod) {
17
17
  if (mod && mod.__esModule) return mod;
18
18
  var result = {};
19
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
19
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
20
20
  __setModuleDefault(result, mod);
21
21
  return result;
22
22
  };
@@ -39,7 +39,7 @@ class Rundown {
39
39
  throw new Error('The specified script path does not exist: ' + scriptPath);
40
40
  }
41
41
  const absoluteScriptPath = path.resolve(scriptPath);
42
- const expandedArgs = args === undefined ? [] : string_argv_1.default(args);
42
+ const expandedArgs = args === undefined ? [] : (0, string_argv_1.default)(args);
43
43
  console.log('Starting process: ' + [absoluteScriptPath, ...expandedArgs].join(' '));
44
44
  console.log();
45
45
  // Example process.argv:
@@ -1 +1 @@
1
- {"version":3,"file":"Rundown.js","sourceRoot":"","sources":["../src/Rundown.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;AAE3D,oEAAyF;AACzF,6DAA+C;AAC/C,2CAA6B;AAC7B,8DAAqC;AAIrC,MAAa,OAAO;IAApB;QACE,yCAAyC;QACjC,uBAAkB,GAAwB,IAAI,GAAG,EAAE,CAAC;IAqI9D,CAAC;IAnIQ,KAAK,CAAC,WAAW,CACtB,UAAkB,EAClB,IAAwB,EACxB,KAAc,EACd,cAAuB;QAEvB,IAAI,CAAC,8BAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,4CAA4C,GAAG,UAAU,CAAC,CAAC;SAC5E;QACD,MAAM,kBAAkB,GAAW,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE5D,MAAM,YAAY,GAAa,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAU,CAAC,IAAI,CAAC,CAAC;QAE1E,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,CAAC,kBAAkB,EAAE,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,wBAAwB;QACxB,0EAA0E;QAC1E,MAAM,QAAQ,GAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,kBAAkB,EAAE,GAAG,YAAY,CAAC,CAAC;QAEtG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QAEhE,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,CAAC,GAAG,EAAE,CAAC;SACf;IACH,CAAC;IAEM,mBAAmB;QACxB,MAAM,UAAU,GAAW,sBAAsB,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,UAAU,CAAC,CAAC;QAElD,MAAM,iBAAiB,GAAsB,IAAI,qCAAiB,EAAE,CAAC;QACrE,MAAM,aAAa,GAAa,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,sBAAsB,GAAgB,IAAI,GAAG,EAAE,CAAC;QAEtD,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;YACxC,MAAM,qBAAqB,GACzB,iBAAiB,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;YACzD,IAAI,qBAAqB,EAAE;gBACzB,IAAI,yBAAyB,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE;oBACzD,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;iBAClE;qBAAM;oBACL,MAAM,YAAY,GAAW,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;oBACjF,sBAAsB,CAAC,GAAG,CAAC,wBAAI,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;iBACtE;aACF;iBAAM;gBACL,kGAAkG;gBAClG,6EAA6E;aAC9E;SACF;QAED,wBAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACrC,MAAM,IAAI,GAAW,CAAC,GAAG,sBAAsB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAEnE,8BAAU,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAEM,kBAAkB,CAAC,YAAqB;QAC7C,MAAM,UAAU,GAAW,qBAAqB,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,UAAU,CAAC,CAAC;QAElD,MAAM,aAAa,GAAa,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,aAAa,CAAC,IAAI,EAAE,CAAC;QAErB,IAAI,IAAI,GAAW,EAAE,CAAC;QAEtB,IAAI,YAAY,EAAE;YAChB,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;gBACxC,IAAI,IAAI,YAAY,GAAG,IAAI,CAAC;gBAE5B,IAAI,OAAO,GAAW,YAAY,CAAC;gBACnC,MAAM,OAAO,GAAgB,IAAI,GAAG,EAAE,CAAC;gBACvC,SAAS;oBACP,MAAM,UAAU,GAAuB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC5E,IAAI,CAAC,UAAU,EAAE;wBACf,MAAM;qBACP;oBACD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;wBAC3B,MAAM;qBACP;oBACD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBACxB,IAAI,IAAI,gBAAgB,GAAG,UAAU,GAAG,IAAI,CAAC;oBAC7C,OAAO,GAAG,UAAU,CAAC;iBACtB;gBACD,IAAI,IAAI,IAAI,CAAC;aACd;SACF;aAAM;YACL,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;SACxC;QAED,8BAAU,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,QAAkB,EAClB,KAAc,EACd,cAAuB;QAEvB,MAAM,YAAY,GAA+B,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE;YAC/F,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;SACjG,CAAC,CAAC;QAEH,IAAI,iBAAiB,GAAY,KAAK,CAAC;QAEvC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAmB,EAAQ,EAAE;YACvD,QAAQ,OAAO,CAAC,EAAE,EAAE;gBAClB,KAAK,OAAO;oBACV,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;wBACpC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;qBAC1E;oBACD,MAAM;gBACR,KAAK,MAAM;oBACT,iBAAiB,GAAG,IAAI,CAAC;oBACzB,MAAM;gBACR;oBACE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;aACtE;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAmB,EAAE,MAAqB,EAAQ,EAAE;gBAC3E,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE;oBACjC,MAAM,CAAC,IAAI,KAAK,CAAC,0CAA0C,GAAG,IAAI,CAAC,CAAC,CAAC;iBACtE;qBAAM,IAAI,CAAC,iBAAiB,EAAE;oBAC7B,MAAM,CAAC,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC,CAAC;iBAChF;qBAAM;oBACL,OAAO,EAAE,CAAC;iBACX;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAvID,0BAuIC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport { FileSystem, PackageJsonLookup, Sort, Text } from '@rushstack/node-core-library';\r\nimport * as child_process from 'child_process';\r\nimport * as path from 'path';\r\nimport stringArgv from 'string-argv';\r\n\r\nimport { IpcMessage } from './LauncherTypes';\r\n\r\nexport class Rundown {\r\n // Map from required path --> caller path\r\n private _importedModuleMap: Map<string, string> = new Map();\r\n\r\n public async invokeAsync(\r\n scriptPath: string,\r\n args: string | undefined,\r\n quiet: boolean,\r\n ignoreExitCode: boolean\r\n ): Promise<void> {\r\n if (!FileSystem.exists(scriptPath)) {\r\n throw new Error('The specified script path does not exist: ' + scriptPath);\r\n }\r\n const absoluteScriptPath: string = path.resolve(scriptPath);\r\n\r\n const expandedArgs: string[] = args === undefined ? [] : stringArgv(args);\r\n\r\n console.log('Starting process: ' + [absoluteScriptPath, ...expandedArgs].join(' '));\r\n console.log();\r\n\r\n // Example process.argv:\r\n // [\"path/to/launcher.js\", \"path/to/target-script.js\", \"first-target-arg\"]\r\n const nodeArgs: string[] = [path.join(__dirname, 'launcher.js'), absoluteScriptPath, ...expandedArgs];\r\n\r\n await this._spawnLauncherAsync(nodeArgs, quiet, ignoreExitCode);\r\n\r\n if (!quiet) {\r\n console.log();\r\n }\r\n }\r\n\r\n public writeSnapshotReport(): void {\r\n const reportPath: string = 'rundown-snapshot.log';\r\n console.log('Writing report file: ' + reportPath);\r\n\r\n const packageJsonLookup: PackageJsonLookup = new PackageJsonLookup();\r\n const importedPaths: string[] = [...this._importedModuleMap.keys()];\r\n const importedPackageFolders: Set<string> = new Set();\r\n\r\n for (const importedPath of importedPaths) {\r\n const importedPackageFolder: string | undefined =\r\n packageJsonLookup.tryGetPackageFolderFor(importedPath);\r\n if (importedPackageFolder) {\r\n if (/[\\\\/]node_modules[\\\\/]/i.test(importedPackageFolder)) {\r\n importedPackageFolders.add(path.basename(importedPackageFolder));\r\n } else {\r\n const relativePath: string = path.relative(process.cwd(), importedPackageFolder);\r\n importedPackageFolders.add(Text.replaceAll(relativePath, '\\\\', '/'));\r\n }\r\n } else {\r\n // If the importedPath does not belong to an NPM package, then rundown-snapshot.log can ignore it.\r\n // In other words, treat it the same way as the local project's source files.\r\n }\r\n }\r\n\r\n Sort.sortSet(importedPackageFolders);\r\n const data: string = [...importedPackageFolders].join('\\n') + '\\n';\r\n\r\n FileSystem.writeFile(reportPath, data);\r\n }\r\n\r\n public writeInspectReport(traceImports: boolean): void {\r\n const reportPath: string = 'rundown-inspect.log';\r\n console.log('Writing report file: ' + reportPath);\r\n\r\n const importedPaths: string[] = [...this._importedModuleMap.keys()];\r\n importedPaths.sort();\r\n\r\n let data: string = '';\r\n\r\n if (traceImports) {\r\n for (const importedPath of importedPaths) {\r\n data += importedPath + '\\n';\r\n\r\n let current: string = importedPath;\r\n const visited: Set<string> = new Set();\r\n for (;;) {\r\n const callerPath: string | undefined = this._importedModuleMap.get(current);\r\n if (!callerPath) {\r\n break;\r\n }\r\n if (visited.has(callerPath)) {\r\n break;\r\n }\r\n visited.add(callerPath);\r\n data += ' imported by ' + callerPath + '\\n';\r\n current = callerPath;\r\n }\r\n data += '\\n';\r\n }\r\n } else {\r\n data = importedPaths.join('\\n') + '\\n';\r\n }\r\n\r\n FileSystem.writeFile(reportPath, data);\r\n }\r\n\r\n private async _spawnLauncherAsync(\r\n nodeArgs: string[],\r\n quiet: boolean,\r\n ignoreExitCode: boolean\r\n ): Promise<void> {\r\n const childProcess: child_process.ChildProcess = child_process.spawn(process.execPath, nodeArgs, {\r\n stdio: quiet ? ['inherit', 'ignore', 'ignore', 'ipc'] : ['inherit', 'inherit', 'inherit', 'ipc']\r\n });\r\n\r\n let completedNormally: boolean = false;\r\n\r\n childProcess.on('message', (message: IpcMessage): void => {\r\n switch (message.id) {\r\n case 'trace':\r\n for (const record of message.records) {\r\n this._importedModuleMap.set(record.importedModule, record.callingModule);\r\n }\r\n break;\r\n case 'done':\r\n completedNormally = true;\r\n break;\r\n default:\r\n throw new Error('Unknown IPC message: ' + JSON.stringify(message));\r\n }\r\n });\r\n\r\n await new Promise<void>((resolve, reject) => {\r\n childProcess.on('exit', (code: number | null, signal: string | null): void => {\r\n if (code !== 0 && !ignoreExitCode) {\r\n reject(new Error('Child process terminated with exit code ' + code));\r\n } else if (!completedNormally) {\r\n reject(new Error('Child process terminated without completing IPC handshake'));\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Rundown.js","sourceRoot":"","sources":["../src/Rundown.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport { FileSystem, PackageJsonLookup, Sort, Text } from '@rushstack/node-core-library';\r\nimport * as child_process from 'child_process';\r\nimport * as path from 'path';\r\nimport stringArgv from 'string-argv';\r\n\r\nimport { IpcMessage } from './LauncherTypes';\r\n\r\nexport class Rundown {\r\n // Map from required path --> caller path\r\n private _importedModuleMap: Map<string, string> = new Map();\r\n\r\n public async invokeAsync(\r\n scriptPath: string,\r\n args: string | undefined,\r\n quiet: boolean,\r\n ignoreExitCode: boolean\r\n ): Promise<void> {\r\n if (!FileSystem.exists(scriptPath)) {\r\n throw new Error('The specified script path does not exist: ' + scriptPath);\r\n }\r\n const absoluteScriptPath: string = path.resolve(scriptPath);\r\n\r\n const expandedArgs: string[] = args === undefined ? [] : stringArgv(args);\r\n\r\n console.log('Starting process: ' + [absoluteScriptPath, ...expandedArgs].join(' '));\r\n console.log();\r\n\r\n // Example process.argv:\r\n // [\"path/to/launcher.js\", \"path/to/target-script.js\", \"first-target-arg\"]\r\n const nodeArgs: string[] = [path.join(__dirname, 'launcher.js'), absoluteScriptPath, ...expandedArgs];\r\n\r\n await this._spawnLauncherAsync(nodeArgs, quiet, ignoreExitCode);\r\n\r\n if (!quiet) {\r\n console.log();\r\n }\r\n }\r\n\r\n public writeSnapshotReport(): void {\r\n const reportPath: string = 'rundown-snapshot.log';\r\n console.log('Writing report file: ' + reportPath);\r\n\r\n const packageJsonLookup: PackageJsonLookup = new PackageJsonLookup();\r\n const importedPaths: string[] = [...this._importedModuleMap.keys()];\r\n const importedPackageFolders: Set<string> = new Set();\r\n\r\n for (const importedPath of importedPaths) {\r\n const importedPackageFolder: string | undefined =\r\n packageJsonLookup.tryGetPackageFolderFor(importedPath);\r\n if (importedPackageFolder) {\r\n if (/[\\\\/]node_modules[\\\\/]/i.test(importedPackageFolder)) {\r\n importedPackageFolders.add(path.basename(importedPackageFolder));\r\n } else {\r\n const relativePath: string = path.relative(process.cwd(), importedPackageFolder);\r\n importedPackageFolders.add(Text.replaceAll(relativePath, '\\\\', '/'));\r\n }\r\n } else {\r\n // If the importedPath does not belong to an NPM package, then rundown-snapshot.log can ignore it.\r\n // In other words, treat it the same way as the local project's source files.\r\n }\r\n }\r\n\r\n Sort.sortSet(importedPackageFolders);\r\n const data: string = [...importedPackageFolders].join('\\n') + '\\n';\r\n\r\n FileSystem.writeFile(reportPath, data);\r\n }\r\n\r\n public writeInspectReport(traceImports: boolean): void {\r\n const reportPath: string = 'rundown-inspect.log';\r\n console.log('Writing report file: ' + reportPath);\r\n\r\n const importedPaths: string[] = [...this._importedModuleMap.keys()];\r\n importedPaths.sort();\r\n\r\n let data: string = '';\r\n\r\n if (traceImports) {\r\n for (const importedPath of importedPaths) {\r\n data += importedPath + '\\n';\r\n\r\n let current: string = importedPath;\r\n const visited: Set<string> = new Set();\r\n for (;;) {\r\n const callerPath: string | undefined = this._importedModuleMap.get(current);\r\n if (!callerPath) {\r\n break;\r\n }\r\n if (visited.has(callerPath)) {\r\n break;\r\n }\r\n visited.add(callerPath);\r\n data += ' imported by ' + callerPath + '\\n';\r\n current = callerPath;\r\n }\r\n data += '\\n';\r\n }\r\n } else {\r\n data = importedPaths.join('\\n') + '\\n';\r\n }\r\n\r\n FileSystem.writeFile(reportPath, data);\r\n }\r\n\r\n private async _spawnLauncherAsync(\r\n nodeArgs: string[],\r\n quiet: boolean,\r\n ignoreExitCode: boolean\r\n ): Promise<void> {\r\n const childProcess: child_process.ChildProcess = child_process.spawn(process.execPath, nodeArgs, {\r\n stdio: quiet ? ['inherit', 'ignore', 'ignore', 'ipc'] : ['inherit', 'inherit', 'inherit', 'ipc']\r\n });\r\n\r\n let completedNormally: boolean = false;\r\n\r\n childProcess.on('message', (message: IpcMessage): void => {\r\n switch (message.id) {\r\n case 'trace':\r\n for (const record of message.records) {\r\n this._importedModuleMap.set(record.importedModule, record.callingModule);\r\n }\r\n break;\r\n case 'done':\r\n completedNormally = true;\r\n break;\r\n default:\r\n throw new Error('Unknown IPC message: ' + JSON.stringify(message));\r\n }\r\n });\r\n\r\n await new Promise<void>((resolve, reject) => {\r\n childProcess.on('exit', (code: number | null, signal: string | null): void => {\r\n if (code !== 0 && !ignoreExitCode) {\r\n reject(new Error('Child process terminated with exit code ' + code));\r\n } else if (!completedNormally) {\r\n reject(new Error('Child process terminated without completing IPC handshake'));\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rushstack/rundown",
3
- "version": "1.0.143",
3
+ "version": "1.0.147",
4
4
  "description": "Detect load time regressions by running an app, tracing require() calls, and generating a deterministic report",
5
5
  "repository": {
6
6
  "type": "git",
@@ -16,16 +16,16 @@
16
16
  },
17
17
  "license": "MIT",
18
18
  "dependencies": {
19
- "@rushstack/node-core-library": "3.40.2",
20
- "@rushstack/ts-command-line": "4.9.0",
19
+ "@rushstack/node-core-library": "3.42.0",
20
+ "@rushstack/ts-command-line": "4.10.0",
21
21
  "string-argv": "~0.3.1"
22
22
  },
23
23
  "devDependencies": {
24
- "@rushstack/eslint-config": "2.4.0",
25
- "@rushstack/heft": "0.39.0",
26
- "@rushstack/heft-node-rig": "1.2.15",
24
+ "@rushstack/eslint-config": "2.4.1",
25
+ "@rushstack/heft": "0.41.0",
26
+ "@rushstack/heft-node-rig": "1.2.19",
27
27
  "@types/heft-jest": "1.0.1",
28
- "@types/node": "10.17.13"
28
+ "@types/node": "12.20.24"
29
29
  },
30
30
  "scripts": {
31
31
  "build": "heft build --clean"