@lage-run/hasher 1.6.2 → 1.6.4

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
@@ -2,7 +2,43 @@
2
2
  "name": "@lage-run/hasher",
3
3
  "entries": [
4
4
  {
5
- "date": "Mon, 21 Oct 2024 22:18:24 GMT",
5
+ "date": "Fri, 08 Nov 2024 19:44:39 GMT",
6
+ "version": "1.6.4",
7
+ "tag": "@lage-run/hasher_v1.6.4",
8
+ "comments": {
9
+ "patch": [
10
+ {
11
+ "author": "beachball",
12
+ "package": "@lage-run/hasher",
13
+ "comment": "Bump @lage-run/target-graph to v0.10.0",
14
+ "commit": "not available"
15
+ }
16
+ ]
17
+ }
18
+ },
19
+ {
20
+ "date": "Tue, 22 Oct 2024 15:19:29 GMT",
21
+ "version": "1.6.3",
22
+ "tag": "@lage-run/hasher_v1.6.3",
23
+ "comments": {
24
+ "patch": [
25
+ {
26
+ "author": "email not defined",
27
+ "package": "@lage-run/hasher",
28
+ "commit": "067b34dac0e6621e6dab889b4ecb3ffb96ed3b7c",
29
+ "comment": "Update dependency workspace-tools to v0.37.0"
30
+ },
31
+ {
32
+ "author": "beachball",
33
+ "package": "@lage-run/hasher",
34
+ "comment": "Bump @lage-run/target-graph to v0.9.3",
35
+ "commit": "not available"
36
+ }
37
+ ]
38
+ }
39
+ },
40
+ {
41
+ "date": "Mon, 21 Oct 2024 22:18:54 GMT",
6
42
  "version": "1.6.2",
7
43
  "tag": "@lage-run/hasher_v1.6.2",
8
44
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,29 @@
1
1
  # Change Log - @lage-run/hasher
2
2
 
3
- <!-- This log was last generated on Mon, 21 Oct 2024 22:18:24 GMT and should not be manually modified. -->
3
+ <!-- This log was last generated on Fri, 08 Nov 2024 19:44:39 GMT and should not be manually modified. -->
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## 1.6.4
8
+
9
+ Fri, 08 Nov 2024 19:44:39 GMT
10
+
11
+ ### Patches
12
+
13
+ - Bump @lage-run/target-graph to v0.10.0
14
+
15
+ ## 1.6.3
16
+
17
+ Tue, 22 Oct 2024 15:19:29 GMT
18
+
19
+ ### Patches
20
+
21
+ - Update dependency workspace-tools to v0.37.0 (email not defined)
22
+ - Bump @lage-run/target-graph to v0.9.3
23
+
7
24
  ## 1.6.2
8
25
 
9
- Mon, 21 Oct 2024 22:18:24 GMT
26
+ Mon, 21 Oct 2024 22:18:54 GMT
10
27
 
11
28
  ### Patches
12
29
 
package/lib/FileHasher.js CHANGED
@@ -74,7 +74,7 @@ function _interop_require_default(obj) {
74
74
  var _store = /*#__PURE__*/ new WeakMap(), _manifestFile = /*#__PURE__*/ new WeakMap();
75
75
  class FileHasher {
76
76
  async getHashesFromGit() {
77
- const { root } = this.options;
77
+ const { root } = this.options;
78
78
  const fileHashes = await (0, _getPackageDeps.getPackageDeps)(root);
79
79
  const files = [
80
80
  ...fileHashes.keys()
@@ -85,7 +85,7 @@ class FileHasher {
85
85
  for (const [relativePath, fileStat] of Object.entries(fileStats)){
86
86
  const hash = fileHashes.get(relativePath);
87
87
  if (hash) {
88
- const { size , mtime } = fileStat;
88
+ const { size, mtime } = fileStat;
89
89
  _class_private_field_get(this, _store)[relativePath] = {
90
90
  hash,
91
91
  size,
@@ -174,7 +174,7 @@ class FileHasher {
174
174
  });
175
175
  this.options = options;
176
176
  _class_private_field_set(this, _store, {});
177
- const { root } = options;
177
+ const { root } = options;
178
178
  const cacheDirectory = _path.default.join(root, "node_modules", ".cache", "lage");
179
179
  _class_private_field_set(this, _manifestFile, _path.default.join(cacheDirectory, "file_hashes.manifest"));
180
180
  }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/FileHasher.ts"],"sourcesContent":["import fs from \"graceful-fs\";\nimport path from \"path\";\nimport { hash as fastHash, stat } from \"glob-hasher\";\nimport { createInterface } from \"node:readline\";\nimport { getPackageDeps } from \"./getPackageDeps.js\";\n\ninterface FileHashStoreOptions {\n root: string;\n}\n\ntype FileHashManifestStore = Record<\n string,\n {\n mtime: bigint;\n size: number;\n hash: string;\n }\n>;\n\nexport class FileHasher {\n #store: FileHashManifestStore = {};\n #manifestFile: string;\n\n constructor(private options: FileHashStoreOptions) {\n const { root } = options;\n const cacheDirectory = path.join(root, \"node_modules\", \".cache\", \"lage\");\n this.#manifestFile = path.join(cacheDirectory, \"file_hashes.manifest\");\n }\n\n async getHashesFromGit() {\n const { root } = this.options;\n const fileHashes = await getPackageDeps(root);\n const files = [...fileHashes.keys()];\n const fileStats = stat(files, { cwd: root }) ?? {};\n\n for (const [relativePath, fileStat] of Object.entries(fileStats)) {\n const hash = fileHashes.get(relativePath);\n if (hash) {\n const { size, mtime } = fileStat;\n\n this.#store[relativePath] = { hash, size, mtime };\n }\n }\n\n this.writeManifest();\n }\n\n async readManifest() {\n return new Promise<void>((resolve) => {\n if (!fs.existsSync(this.#manifestFile)) {\n this.getHashesFromGit().then(() => resolve());\n return;\n }\n\n const inputStream = fs.createReadStream(this.#manifestFile, \"utf-8\");\n const rl = createInterface({\n input: inputStream,\n crlfDelay: Infinity,\n });\n\n let info: string[] = [];\n\n rl.on(\"line\", (line) => {\n info = line.split(\"\\0\");\n\n this.#store[info[0]] = {\n mtime: BigInt(info[1]),\n size: parseInt(info[2]),\n hash: info[3],\n };\n });\n\n inputStream.on(\"end\", () => {\n rl.close();\n resolve();\n });\n });\n }\n\n writeManifest() {\n fs.mkdirSync(path.dirname(this.#manifestFile), { recursive: true });\n const outputLines = Object.entries(this.#store).map(([relativePath, info]) => {\n return `${relativePath}\\0${info.mtime.toString()}\\0${info.size.toString()}\\0${info.hash}`;\n });\n\n fs.writeFileSync(this.#manifestFile, outputLines.join(\"\\n\"), \"utf-8\");\n }\n\n hash(files: string[]) {\n const hashes: Record<string, string> = {};\n\n const updatedFiles: string[] = [];\n\n const stats = stat(files, { cwd: this.options.root }) ?? {};\n\n for (const file of files) {\n const stat = stats[file];\n\n const info = this.#store[file];\n if (info && stat.mtime === info.mtime && stat.size == info.size) {\n hashes[file] = info.hash;\n } else {\n updatedFiles.push(file);\n }\n }\n\n const updatedHashes = fastHash(updatedFiles, { cwd: this.options.root, concurrency: 4 }) ?? {};\n\n for (const [file, hash] of Object.entries(updatedHashes)) {\n const stat = fs.statSync(path.join(this.options.root, file), { bigint: true });\n this.#store[file] = {\n mtime: stat.mtimeMs,\n size: Number(stat.size),\n hash: hash ?? \"\",\n };\n hashes[file] = hash ?? \"\";\n }\n\n return hashes;\n }\n}\n"],"names":["FileHasher","getHashesFromGit","root","options","fileHashes","getPackageDeps","files","keys","fileStats","stat","cwd","relativePath","fileStat","Object","entries","hash","get","size","mtime","writeManifest","readManifest","Promise","resolve","fs","existsSync","then","inputStream","createReadStream","rl","createInterface","input","crlfDelay","Infinity","info","on","line","split","BigInt","parseInt","close","mkdirSync","path","dirname","recursive","outputLines","map","toString","writeFileSync","join","hashes","updatedFiles","stats","file","push","updatedHashes","fastHash","concurrency","statSync","bigint","mtimeMs","Number","constructor","cacheDirectory"],"mappings":"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"}
@@ -73,12 +73,13 @@ function _interop_require_default(obj) {
73
73
  var _tree = /*#__PURE__*/ new WeakMap(), _packageFiles = /*#__PURE__*/ new WeakMap(), _memoizedPackageFiles = /*#__PURE__*/ new WeakMap();
74
74
  class PackageTree {
75
75
  reset() {
76
+ // reset the internal state
76
77
  _class_private_field_set(this, _tree, {});
77
78
  _class_private_field_set(this, _packageFiles, {});
78
79
  _class_private_field_set(this, _memoizedPackageFiles, {});
79
80
  }
80
81
  async initialize() {
81
- const { root , includeUntracked , packageInfos } = this.options;
82
+ const { root, includeUntracked, packageInfos } = this.options;
82
83
  this.reset();
83
84
  // Generate path tree of all packages in workspace (scale: ~2000 * ~3)
84
85
  for (const info of Object.values(packageInfos)){
@@ -137,7 +138,7 @@ class PackageTree {
137
138
  }
138
139
  }
139
140
  getPackageFiles(packageName, patterns) {
140
- const { root , packageInfos } = this.options;
141
+ const { root, packageInfos } = this.options;
141
142
  const packagePath = _path.default.relative(root, _path.default.dirname(packageInfos[packageName].packageJsonPath)).replace(/\\/g, "/");
142
143
  const packageFiles = _class_private_field_get(this, _packageFiles)[packagePath];
143
144
  if (!packageFiles) {
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/PackageTree.ts"],"sourcesContent":["import { type PackageInfos } from \"workspace-tools\";\n\nimport execa from \"execa\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport micromatch from \"micromatch\";\n\nexport interface PackageTreeOptions {\n root: string;\n packageInfos: PackageInfos;\n includeUntracked: boolean;\n}\n\ninterface PathNode {\n [key: string]: PathNode;\n}\n\n/**\n * Package Tree keeps a data structure to quickly find all files in a package.\n *\n * TODO: add a watcher to make sure the tree is up to date during a \"watched\" run.\n */\nexport class PackageTree {\n #tree: PathNode = {};\n #packageFiles: Record<string, string[]> = {};\n #memoizedPackageFiles: Record<string, string[]> = {};\n\n constructor(private options: PackageTreeOptions) {}\n\n reset() {\n // reset the internal state\n this.#tree = {};\n this.#packageFiles = {};\n this.#memoizedPackageFiles = {};\n }\n\n async initialize() {\n const { root, includeUntracked, packageInfos } = this.options;\n\n this.reset();\n\n // Generate path tree of all packages in workspace (scale: ~2000 * ~3)\n for (const info of Object.values(packageInfos)) {\n const packagePath = path.dirname(info.packageJsonPath);\n const pathParts = path.relative(root, packagePath).split(/[\\\\/]/);\n\n let currentNode = this.#tree;\n\n for (const part of pathParts) {\n currentNode[part] = currentNode[part] || {};\n currentNode = currentNode[part];\n }\n }\n\n // Get all files in the workspace (scale: ~2000) according to git\n const lsFilesResults = await execa(\"git\", [\"ls-files\", \"-z\"], { cwd: root });\n\n if (lsFilesResults.exitCode === 0) {\n const files = lsFilesResults.stdout.split(\"\\0\").filter((f) => Boolean(f) && fs.existsSync(path.join(root, f)));\n this.addToPackageTree(files);\n }\n\n if (includeUntracked) {\n // Also get all untracked files in the workspace according to git\n const lsOtherResults = await execa(\"git\", [\"ls-files\", \"-o\", \"--exclude-standard\"], { cwd: root });\n if (lsOtherResults.exitCode === 0) {\n const files = lsOtherResults.stdout.split(\"\\0\").filter(Boolean);\n this.addToPackageTree(files);\n }\n }\n }\n\n async addToPackageTree(filePaths: string[]) {\n // key: path/to/package (packageRoot), value: array of a tuple of [file, hash]\n const packageFiles = this.#packageFiles;\n\n for (const entry of filePaths) {\n const pathParts = entry.split(/[\\\\/]/);\n\n let node = this.#tree;\n const packagePathParts: string[] = [];\n\n for (const part of pathParts) {\n if (node[part]) {\n node = node[part] as PathNode;\n packagePathParts.push(part);\n } else {\n break;\n }\n }\n\n const packageRoot = packagePathParts.join(\"/\");\n packageFiles[packageRoot] = packageFiles[packageRoot] || [];\n packageFiles[packageRoot].push(entry);\n }\n }\n\n getPackageFiles(packageName: string, patterns: string[]) {\n const { root, packageInfos } = this.options;\n const packagePath = path.relative(root, path.dirname(packageInfos[packageName].packageJsonPath)).replace(/\\\\/g, \"/\");\n\n const packageFiles = this.#packageFiles[packagePath];\n\n if (!packageFiles) {\n return [];\n }\n\n const key = `${packageName}\\0${patterns.join(\"\\0\")}`;\n\n if (!this.#memoizedPackageFiles[key]) {\n const packagePatterns = patterns.map((pattern) => {\n if (pattern.startsWith(\"!\")) {\n return `!${path.join(packagePath, pattern.slice(1)).replace(/\\\\/g, \"/\")}`;\n }\n\n return path.join(packagePath, pattern).replace(/\\\\/g, \"/\");\n });\n this.#memoizedPackageFiles[key] = micromatch(packageFiles, packagePatterns, { dot: true });\n }\n\n return this.#memoizedPackageFiles[key];\n }\n}\n"],"names":["PackageTree","reset","initialize","root","includeUntracked","packageInfos","options","info","Object","values","packagePath","path","dirname","packageJsonPath","pathParts","relative","split","currentNode","part","lsFilesResults","execa","cwd","exitCode","files","stdout","filter","f","Boolean","fs","existsSync","join","addToPackageTree","lsOtherResults","filePaths","packageFiles","entry","node","packagePathParts","push","packageRoot","getPackageFiles","packageName","patterns","replace","key","packagePatterns","map","pattern","startsWith","slice","micromatch","dot","constructor"],"mappings":";;;;+BAsBaA;;;eAAAA;;;8DApBK;6DACD;2DACF;mEACQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkBrB,qCACA,6CACA;AAHK,MAAMA;IAOXC,QAAQ;QACN,2BAA2B;uCACtB,OAAQ,CAAC;uCACT,eAAgB,CAAC;uCACjB,uBAAwB,CAAC;IAChC;IAEA,MAAMC,aAAa;QACjB,MAAM,EAAEC,IAAI,EAAEC,gBAAgB,EAAEC,YAAY,EAAE,GAAG,IAAI,CAACC,OAAO;QAE7D,IAAI,CAACL,KAAK;QAEV,sEAAsE;QACtE,KAAK,MAAMM,QAAQC,OAAOC,MAAM,CAACJ,cAAe;YAC9C,MAAMK,cAAcC,aAAI,CAACC,OAAO,CAACL,KAAKM,eAAe;YACrD,MAAMC,YAAYH,aAAI,CAACI,QAAQ,CAACZ,MAAMO,aAAaM,KAAK,CAAC;YAEzD,IAAIC,uCAAc,IAAI,EAAC;YAEvB,KAAK,MAAMC,QAAQJ,UAAW;gBAC5BG,WAAW,CAACC,KAAK,GAAGD,WAAW,CAACC,KAAK,IAAI,CAAC;gBAC1CD,cAAcA,WAAW,CAACC,KAAK;YACjC;QACF;QAEA,iEAAiE;QACjE,MAAMC,iBAAiB,MAAMC,IAAAA,cAAK,EAAC,OAAO;YAAC;YAAY;SAAK,EAAE;YAAEC,KAAKlB;QAAK;QAE1E,IAAIgB,eAAeG,QAAQ,KAAK,GAAG;YACjC,MAAMC,QAAQJ,eAAeK,MAAM,CAACR,KAAK,CAAC,MAAMS,MAAM,CAAC,CAACC,IAAMC,QAAQD,MAAME,WAAE,CAACC,UAAU,CAAClB,aAAI,CAACmB,IAAI,CAAC3B,MAAMuB;YAC1G,IAAI,CAACK,gBAAgB,CAACR;QACxB;QAEA,IAAInB,kBAAkB;YACpB,iEAAiE;YACjE,MAAM4B,iBAAiB,MAAMZ,IAAAA,cAAK,EAAC,OAAO;gBAAC;gBAAY;gBAAM;aAAqB,EAAE;gBAAEC,KAAKlB;YAAK;YAChG,IAAI6B,eAAeV,QAAQ,KAAK,GAAG;gBACjC,MAAMC,QAAQS,eAAeR,MAAM,CAACR,KAAK,CAAC,MAAMS,MAAM,CAACE;gBACvD,IAAI,CAACI,gBAAgB,CAACR;YACxB;QACF;IACF;IAEA,MAAMQ,iBAAiBE,SAAmB,EAAE;QAC1C,8EAA8E;QAC9E,MAAMC,wCAAe,IAAI,EAAC;QAE1B,KAAK,MAAMC,SAASF,UAAW;YAC7B,MAAMnB,YAAYqB,MAAMnB,KAAK,CAAC;YAE9B,IAAIoB,gCAAO,IAAI,EAAC;YAChB,MAAMC,mBAA6B,EAAE;YAErC,KAAK,MAAMnB,QAAQJ,UAAW;gBAC5B,IAAIsB,IAAI,CAAClB,KAAK,EAAE;oBACdkB,OAAOA,IAAI,CAAClB,KAAK;oBACjBmB,iBAAiBC,IAAI,CAACpB;gBACxB,OAAO;oBACL;gBACF;YACF;YAEA,MAAMqB,cAAcF,iBAAiBP,IAAI,CAAC;YAC1CI,YAAY,CAACK,YAAY,GAAGL,YAAY,CAACK,YAAY,IAAI,EAAE;YAC3DL,YAAY,CAACK,YAAY,CAACD,IAAI,CAACH;QACjC;IACF;IAEAK,gBAAgBC,WAAmB,EAAEC,QAAkB,EAAE;QACvD,MAAM,EAAEvC,IAAI,EAAEE,YAAY,EAAE,GAAG,IAAI,CAACC,OAAO;QAC3C,MAAMI,cAAcC,aAAI,CAACI,QAAQ,CAACZ,MAAMQ,aAAI,CAACC,OAAO,CAACP,YAAY,CAACoC,YAAY,CAAC5B,eAAe,GAAG8B,OAAO,CAAC,OAAO;QAEhH,MAAMT,eAAe,yBAAA,IAAI,EAAC,cAAa,CAACxB,YAAY;QAEpD,IAAI,CAACwB,cAAc;YACjB,OAAO,EAAE;QACX;QAEA,MAAMU,MAAM,GAAGH,YAAY,EAAE,EAAEC,SAASZ,IAAI,CAAC,OAAO;QAEpD,IAAI,CAAC,yBAAA,IAAI,EAAC,sBAAqB,CAACc,IAAI,EAAE;YACpC,MAAMC,kBAAkBH,SAASI,GAAG,CAAC,CAACC;gBACpC,IAAIA,QAAQC,UAAU,CAAC,MAAM;oBAC3B,OAAO,CAAC,CAAC,EAAErC,aAAI,CAACmB,IAAI,CAACpB,aAAaqC,QAAQE,KAAK,CAAC,IAAIN,OAAO,CAAC,OAAO,MAAM;gBAC3E;gBAEA,OAAOhC,aAAI,CAACmB,IAAI,CAACpB,aAAaqC,SAASJ,OAAO,CAAC,OAAO;YACxD;YACA,yBAAA,IAAI,EAAC,sBAAqB,CAACC,IAAI,GAAGM,IAAAA,mBAAU,EAAChB,cAAcW,iBAAiB;gBAAEM,KAAK;YAAK;QAC1F;QAEA,OAAO,yBAAA,IAAI,EAAC,sBAAqB,CAACP,IAAI;IACxC;IA9FAQ,YAAY,AAAQ9C,OAA2B,CAAE;;QAJjD,gCAAA;;mBAAA,KAAA;;QACA,gCAAA;;mBAAA,KAAA;;QACA,gCAAA;;mBAAA,KAAA;;aAEoBA,UAAAA;uCAJpB,OAAkB,CAAC;uCACnB,eAA0C,CAAC;uCAC3C,uBAAkD,CAAC;IAED;AA+FpD"}
@@ -40,7 +40,7 @@ function _interop_require_default(obj) {
40
40
  }
41
41
  class TargetHasher {
42
42
  getPackageInfos(workspacePackages) {
43
- const { root } = this.options;
43
+ const { root } = this.options;
44
44
  const packageInfos = {};
45
45
  if (workspacePackages.length) {
46
46
  for (const pkg of workspacePackages){
@@ -68,7 +68,7 @@ class TargetHasher {
68
68
  }
69
69
  }
70
70
  async initialize() {
71
- const { environmentGlob , root } = this.options;
71
+ const { environmentGlob, root } = this.options;
72
72
  if (this.initializedPromise) {
73
73
  await this.initializedPromise;
74
74
  return;
@@ -101,7 +101,7 @@ class TargetHasher {
101
101
  }
102
102
  async hash(target) {
103
103
  this.ensureInitialized();
104
- const { root } = this.options;
104
+ const { root } = this.options;
105
105
  if (target.cwd === root && target.cache) {
106
106
  if (!target.inputs) {
107
107
  throw new Error("Root-level targets must have `inputs` defined if it has cache enabled.");
@@ -117,7 +117,7 @@ class TargetHasher {
117
117
  }
118
118
  // 1. add hash of target's inputs
119
119
  // 2. add hash of target packages' internal and external deps
120
- const { dependencies , devDependencies } = this.packageInfos[target.packageName];
120
+ const { dependencies, devDependencies } = this.packageInfos[target.packageName];
121
121
  const workspaceInfo = this.workspaceInfo;
122
122
  const parsedLock = this.lockInfo;
123
123
  const allDependencies = {
@@ -155,7 +155,7 @@ class TargetHasher {
155
155
  return hashString;
156
156
  }
157
157
  writeTargetHashesManifest() {
158
- for (const [id, { fileHashes , globalFileHashes }] of Object.entries(this.targetHashesLog)){
158
+ for (const [id, { fileHashes, globalFileHashes }] of Object.entries(this.targetHashesLog)){
159
159
  const targetHashesManifestPath = _path.default.join(this.targetHashesDirectory, `${id}.json`);
160
160
  if (!_fs.default.existsSync(_path.default.dirname(targetHashesManifestPath))) {
161
161
  _fs.default.mkdirSync(_path.default.dirname(targetHashesManifestPath), {
@@ -200,7 +200,7 @@ class TargetHasher {
200
200
  dependencies: new Map(),
201
201
  dependents: new Map()
202
202
  };
203
- const { root , logger } = options;
203
+ const { root, logger } = options;
204
204
  this.logger = logger;
205
205
  this.fileHasher = new _FileHasher.FileHasher({
206
206
  root
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/TargetHasher.ts"],"sourcesContent":["import type { Target } from \"@lage-run/target-graph\";\nimport { hash } from \"glob-hasher\";\nimport { globAsync } from \"@lage-run/globby\";\n\nimport fs from \"fs\";\nimport path from \"path\";\nimport {\n type ParsedLock,\n type WorkspaceInfo,\n type PackageInfos,\n getWorkspacesAsync,\n parseLockFile,\n createDependencyMap,\n} from \"workspace-tools\";\nimport type { DependencyMap } from \"workspace-tools/lib/graph/createDependencyMap.js\";\nimport { infoFromPackageJson } from \"workspace-tools/lib/infoFromPackageJson.js\";\n\nimport { hashStrings } from \"./hashStrings.js\";\nimport { resolveInternalDependencies } from \"./resolveInternalDependencies.js\";\nimport { resolveExternalDependencies } from \"./resolveExternalDependencies.js\";\nimport { FileHasher } from \"./FileHasher.js\";\nimport type { Logger } from \"@lage-run/logger\";\nimport { PackageTree } from \"./PackageTree.js\";\nimport { getInputFiles } from \"./getInputFiles.js\";\n\nexport interface TargetHasherOptions {\n root: string;\n environmentGlob: string[];\n cacheKey?: string;\n cliArgs?: string[];\n logger?: Logger;\n}\n\nexport interface TargetManifest {\n id: string;\n hash: string;\n globalInputsHash: string;\n dependency: Record<string, string>;\n fileHasher: FileHasher;\n files: Record<\n string,\n {\n mtimeMs: number;\n size: number;\n hash: string;\n }\n >;\n}\n\n/**\n * TargetHasher is a class that can be used to generate a hash of a target.\n *\n * Currently, it encapsulates the use of `backfill-hasher` to generate a hash.\n */\nexport class TargetHasher {\n targetHashesLog: Record<string, { fileHashes: Record<string, string>; globalFileHashes: Record<string, string> }> = {};\n targetHashesDirectory: string;\n\n logger: Logger | undefined;\n fileHasher: FileHasher;\n packageTree: PackageTree | undefined;\n\n initializedPromise: Promise<unknown> | undefined;\n\n packageInfos: PackageInfos = {};\n workspaceInfo: WorkspaceInfo | undefined;\n globalInputsHash: Record<string, string> | undefined;\n lockInfo: ParsedLock | undefined;\n targetHashes: Record<string, string> = {};\n\n dependencyMap: DependencyMap = {\n dependencies: new Map(),\n dependents: new Map(),\n };\n\n getPackageInfos(workspacePackages: WorkspaceInfo) {\n const { root } = this.options;\n const packageInfos: PackageInfos = {};\n\n if (workspacePackages.length) {\n for (const pkg of workspacePackages) {\n packageInfos[pkg.name] = pkg.packageJson;\n }\n } else {\n const packageJsonPath = path.join(root, \"package.json\");\n if (fs.existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n const rootInfo = infoFromPackageJson(packageJson, packageJsonPath);\n if (rootInfo) {\n packageInfos[rootInfo.name] = rootInfo;\n }\n } catch (e) {\n throw new Error(`Invalid package.json file detected ${packageJsonPath}: ${(e as Error)?.message || e}`);\n }\n }\n }\n\n return packageInfos;\n }\n\n constructor(private options: TargetHasherOptions) {\n const { root, logger } = options;\n this.logger = logger;\n\n this.fileHasher = new FileHasher({\n root,\n });\n\n this.targetHashesDirectory = path.join(root, \"node_modules\", \".cache\", \"lage\", \"hashes\");\n\n if (!fs.existsSync(this.targetHashesDirectory)) {\n fs.mkdirSync(this.targetHashesDirectory, { recursive: true });\n }\n }\n\n ensureInitialized() {\n if (!this.initializedPromise) {\n throw new Error(\"TargetHasher is not initialized\");\n }\n }\n\n async initialize() {\n const { environmentGlob, root } = this.options;\n\n if (this.initializedPromise) {\n await this.initializedPromise;\n return;\n }\n\n this.initializedPromise = Promise.all([\n this.fileHasher\n .readManifest()\n .then(() => globAsync(environmentGlob, { cwd: root }))\n .then((files) => this.fileHasher.hash(files))\n .then((hash) => (this.globalInputsHash = hash)),\n\n getWorkspacesAsync(root)\n .then((workspaceInfo) => (this.workspaceInfo = workspaceInfo))\n .then(() => {\n this.packageInfos = this.getPackageInfos(this.workspaceInfo!);\n\n this.dependencyMap = createDependencyMap(this.packageInfos, { withDevDependencies: true, withPeerDependencies: false });\n this.packageTree = new PackageTree({\n root,\n packageInfos: this.packageInfos,\n\n // TODO: (optimization) false if process.env.TF_BUILD || process.env.CI\n includeUntracked: true,\n });\n\n return this.packageTree.initialize();\n }),\n\n parseLockFile(root).then((lockInfo) => (this.lockInfo = lockInfo)),\n ]);\n\n await this.initializedPromise;\n\n if (this.logger !== undefined) {\n const globalInputsHash = hashStrings(Object.values(this.globalInputsHash ?? {}));\n this.logger.verbose(`Global inputs hash: ${globalInputsHash}`);\n }\n }\n\n async hash(target: Target): Promise<string> {\n this.ensureInitialized();\n\n const { root } = this.options;\n\n if (target.cwd === root && target.cache) {\n if (!target.inputs) {\n throw new Error(\"Root-level targets must have `inputs` defined if it has cache enabled.\");\n }\n\n const files = await globAsync(target.inputs, { cwd: root });\n const fileFashes = hash(files, { cwd: root }) ?? {};\n\n const hashes = Object.values(fileFashes) as string[];\n\n return hashStrings(hashes);\n }\n\n // 1. add hash of target's inputs\n // 2. add hash of target packages' internal and external deps\n const { dependencies, devDependencies } = this.packageInfos[target.packageName!];\n\n const workspaceInfo = this.workspaceInfo!;\n const parsedLock = this.lockInfo!;\n\n const allDependencies: Record<string, string> = {\n ...dependencies,\n ...devDependencies,\n };\n\n const internalDeps = resolveInternalDependencies(allDependencies, workspaceInfo);\n const externalDeps = resolveExternalDependencies(allDependencies, workspaceInfo, parsedLock);\n const resolvedDependencies = [...internalDeps, ...externalDeps].sort();\n\n const files = getInputFiles(target, this.dependencyMap, this.packageTree!);\n const fileHashes = this.fileHasher.hash(files) ?? {}; // this list is sorted by file name\n\n // get target hashes\n const targetDepHashes = target.dependencies?.sort().map((targetDep) => this.targetHashes[targetDep]);\n\n const globalFileHashes = await this.getEnvironmentGlobHashes(root, target);\n\n const combinedHashes = [\n // Environmental hashes\n ...Object.values(globalFileHashes),\n `${target.id}|${JSON.stringify(this.options.cliArgs)}`,\n this.options.cacheKey || \"\",\n\n // File content hashes based on target.inputs\n ...Object.values(fileHashes),\n\n // Dependency hashes\n ...resolvedDependencies,\n ...targetDepHashes,\n ].filter(Boolean);\n\n const hashString = hashStrings(combinedHashes);\n\n this.targetHashes[target.id] = hashString;\n\n this.targetHashesLog[target.id] = { fileHashes, globalFileHashes };\n\n return hashString;\n }\n\n writeTargetHashesManifest() {\n for (const [id, { fileHashes, globalFileHashes }] of Object.entries(this.targetHashesLog)) {\n const targetHashesManifestPath = path.join(this.targetHashesDirectory, `${id}.json`);\n if (!fs.existsSync(path.dirname(targetHashesManifestPath))) {\n fs.mkdirSync(path.dirname(targetHashesManifestPath), { recursive: true });\n }\n fs.writeFileSync(targetHashesManifestPath, JSON.stringify({ fileHashes, globalFileHashes }), \"utf-8\");\n }\n }\n\n async getEnvironmentGlobHashes(root: string, target: Target) {\n const globalFileHashes = target.environmentGlob\n ? this.fileHasher.hash(await globAsync(target.environmentGlob ?? [], { cwd: root }))\n : this.globalInputsHash ?? {};\n\n return globalFileHashes;\n }\n\n async cleanup() {\n this.writeTargetHashesManifest();\n await this.fileHasher.writeManifest();\n }\n}\n"],"names":["TargetHasher","getPackageInfos","workspacePackages","root","options","packageInfos","length","pkg","name","packageJson","packageJsonPath","path","join","fs","existsSync","JSON","parse","readFileSync","rootInfo","infoFromPackageJson","e","Error","message","ensureInitialized","initializedPromise","initialize","environmentGlob","Promise","all","fileHasher","readManifest","then","globAsync","cwd","files","hash","globalInputsHash","getWorkspacesAsync","workspaceInfo","dependencyMap","createDependencyMap","withDevDependencies","withPeerDependencies","packageTree","PackageTree","includeUntracked","parseLockFile","lockInfo","logger","undefined","hashStrings","Object","values","verbose","target","cache","inputs","fileFashes","hashes","dependencies","devDependencies","packageName","parsedLock","allDependencies","internalDeps","resolveInternalDependencies","externalDeps","resolveExternalDependencies","resolvedDependencies","sort","getInputFiles","fileHashes","targetDepHashes","map","targetDep","targetHashes","globalFileHashes","getEnvironmentGlobHashes","combinedHashes","id","stringify","cliArgs","cacheKey","filter","Boolean","hashString","targetHashesLog","writeTargetHashesManifest","entries","targetHashesManifestPath","targetHashesDirectory","dirname","mkdirSync","recursive","writeFileSync","cleanup","writeManifest","constructor","Map","dependents","FileHasher"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/__tests__/TargetHasher.test.ts"],"sourcesContent":["import path from \"path\";\n\nimport { TargetHasher } from \"../index\";\nimport fs from \"fs\";\nimport { Monorepo } from \"@lage-run/monorepo-fixture\";\nimport { Target } from \"@lage-run/target-graph\";\nconst fixturesPath = path.join(__dirname, \"..\", \"__fixtures__\");\n\ndescribe(\"The main Hasher class\", () => {\n async function setupFixture(fixture = \"monorepo\") {\n const monorepo = new Monorepo(\"fixture\");\n await monorepo.init(path.join(fixturesPath, fixture));\n return monorepo;\n }\n\n async function getHash(hasher: TargetHasher, target: Target) {\n await hasher.initialize();\n const hash = await hasher.hash(target);\n await hasher.cleanup();\n\n return hash;\n }\n\n function createTarget(root: string, packageName: string, task: string): Target {\n return {\n cwd: path.join(root, \"packages\", packageName),\n dependencies: [],\n dependents: [],\n depSpecs: [],\n id: `${packageName}#${task}`,\n label: `${packageName}#${task}`,\n packageName,\n task,\n };\n }\n\n it(\"creates different hashes given different global environment glob\", async () => {\n const monorepo1 = await setupFixture(\"monorepo-with-global-files\");\n\n const hasher = new TargetHasher({ root: monorepo1.root, environmentGlob: [\"some-global.config.js\"] });\n const target = createTarget(monorepo1.root, \"package-a\", \"build\");\n const hash = await getHash(hasher, target);\n\n const hasher2 = new TargetHasher({ root: monorepo1.root, environmentGlob: [] });\n const target2 = createTarget(monorepo1.root, \"package-a\", \"build\");\n const hash2 = await getHash(hasher2, target2);\n\n expect(hash).not.toEqual(hash2);\n\n monorepo1.cleanup();\n });\n\n it(\"creates different hashes given different fixtures\", async () => {\n const monorepo1 = await setupFixture(\"monorepo\");\n const hasher = new TargetHasher({ root: monorepo1.root, environmentGlob: [] });\n const target = createTarget(monorepo1.root, \"package-a\", \"build\");\n const hash = await getHash(hasher, target);\n\n const monorepo2 = await setupFixture(\"monorepo-different\");\n const target2 = createTarget(monorepo2.root, \"package-a\", \"build\");\n const hasher2 = new TargetHasher({ root: monorepo2.root, environmentGlob: [] });\n const hash2 = await getHash(hasher2, target2);\n expect(hash).not.toEqual(hash2);\n\n monorepo1.cleanup();\n monorepo2.cleanup();\n });\n\n it(\"creates the same hash given the same fixture, with different target hasher instances\", async () => {\n const monorepo1 = await setupFixture(\"monorepo\");\n const hasher = new TargetHasher({ root: monorepo1.root, environmentGlob: [] });\n const target = createTarget(monorepo1.root, \"package-a\", \"build\");\n const hash = await getHash(hasher, target);\n\n const monorepo2 = await setupFixture(\"monorepo\");\n const hasher2 = new TargetHasher({ root: monorepo2.root, environmentGlob: [] });\n const target2 = createTarget(monorepo2.root, \"package-a\", \"build\");\n const hash2 = await getHash(hasher2, target2);\n\n expect(hash).toEqual(hash2);\n\n monorepo1.cleanup();\n monorepo2.cleanup();\n });\n\n it(\"creates different hashes when a src file has changed\", async () => {\n const monorepo1 = await setupFixture(\"monorepo\");\n const hasher = new TargetHasher({ root: monorepo1.root, environmentGlob: [] });\n const target = createTarget(monorepo1.root, \"package-a\", \"build\");\n const hash = await getHash(hasher, target);\n\n const monorepo2 = await setupFixture(\"monorepo\");\n const hasher2 = new TargetHasher({ root: monorepo2.root, environmentGlob: [] });\n const target2 = createTarget(monorepo2.root, \"package-a\", \"build\");\n\n await monorepo2.commitFiles({ \"packages/package-a/src/index.ts\": \"console.log('hello world');\" });\n\n const hash2 = await getHash(hasher2, target2);\n\n expect(hash).not.toEqual(hash2);\n\n monorepo1.cleanup();\n monorepo2.cleanup();\n });\n\n it(\"creates different hashes when a src file has changed for a dependency\", async () => {\n const monorepo1 = await setupFixture(\"monorepo-with-deps\");\n const hasher = new TargetHasher({ root: monorepo1.root, environmentGlob: [] });\n const target = createTarget(monorepo1.root, \"package-a\", \"build\");\n target.inputs = [\"**/*\", \"^**/*\"];\n\n const hash = await getHash(hasher, target);\n\n const monorepo2 = await setupFixture(\"monorepo-with-deps\");\n await monorepo2.commitFiles({ \"packages/package-b/src/index.ts\": \"console.log('hello world');\" });\n\n const hasher2 = new TargetHasher({ root: monorepo2.root, environmentGlob: [] });\n const target2 = createTarget(monorepo2.root, \"package-a\", \"build\");\n target2.inputs = [\"**/*\", \"^**/*\"];\n\n const hash2 = await getHash(hasher2, target2);\n\n expect(hash).not.toEqual(hash2);\n\n monorepo1.cleanup();\n monorepo2.cleanup();\n });\n\n it(\"creates different hashes when the target has a different env glob\", async () => {\n const monorepo1 = await setupFixture(\"monorepo-with-global-files\");\n const hasher = new TargetHasher({ root: monorepo1.root, environmentGlob: [] });\n const target = createTarget(monorepo1.root, \"package-a\", \"build\");\n target.environmentGlob = [\"some-global*\"];\n target.inputs = [\"**/*\", \"^**/*\"];\n\n const hash = await getHash(hasher, target);\n\n const target2 = createTarget(monorepo1.root, \"package-a\", \"build\");\n target2.environmentGlob = [\"some-global.*\"];\n target2.inputs = [\"**/*\", \"^**/*\"];\n\n const hash2 = await getHash(hasher, target2);\n\n expect(hash).not.toEqual(hash2);\n\n monorepo1.cleanup();\n });\n\n it(\"creates different hashes when the target has a different env glob for different task types\", async () => {\n const monorepo1 = await setupFixture(\"monorepo-with-global-files-different-tasks\");\n const hasher = new TargetHasher({ root: monorepo1.root, environmentGlob: [] });\n const target = createTarget(monorepo1.root, \"package-a\", \"test\");\n target.environmentGlob = [\"some-global*\"];\n target.inputs = [\"**/*\", \"^**/*\"];\n\n const hash = await getHash(hasher, target);\n\n const target2 = createTarget(monorepo1.root, \"package-a\", \"lint\");\n target2.environmentGlob = [\".eslintrc.js\"];\n target2.inputs = [\"**/*\", \"^**/*\"];\n\n const hash2 = await getHash(hasher, target2);\n const target3 = createTarget(monorepo1.root, \"package-a\", \"lint\");\n fs.writeFileSync(path.join(monorepo1.root, \".eslintrc.js\"), \"module.exports = {/*somethingdifferent*/};\");\n target3.environmentGlob = [\".eslintrc.js\"];\n target3.inputs = [\"**/*\", \"^**/*\"];\n\n const hash3 = await getHash(hasher, target3);\n\n expect(hash).not.toEqual(hash2);\n expect(hash2).not.toEqual(hash3);\n\n monorepo1.cleanup();\n });\n});\n"],"names":["fixturesPath","path","join","__dirname","describe","setupFixture","fixture","monorepo","Monorepo","init","getHash","hasher","target","initialize","hash","cleanup","createTarget","root","packageName","task","cwd","dependencies","dependents","depSpecs","id","label","it","monorepo1","TargetHasher","environmentGlob","hasher2","target2","hash2","expect","not","toEqual","monorepo2","commitFiles","inputs","target3","fs","writeFileSync","hash3"],"mappings":"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"}
@@ -27,7 +27,9 @@ function _interop_require_wildcard(obj, nodeInterop) {
27
27
  if (cache && cache.has(obj)) {
28
28
  return cache.get(obj);
29
29
  }
30
- var newObj = {};
30
+ var newObj = {
31
+ __proto__: null
32
+ };
31
33
  var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
32
34
  for(var key in obj){
33
35
  if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/__tests__/getPackageDeps.test.ts"],"sourcesContent":["import * as path from \"path\";\nimport * as fs from \"fs\";\nimport { execSync } from \"child_process\";\n\nimport { getPackageDeps, parseGitLsTree, parseGitFilename } from \"../getPackageDeps\";\nimport { Monorepo } from \"@lage-run/monorepo-fixture\";\n\nconst SOURCE_PATH: string = path.join(__dirname, \"..\", \"__fixtures__\");\n\nconst TEST_PROJECT_PATH: string = path.join(SOURCE_PATH, \"test-project\");\nconst NESTED_TEST_PROJECT_PATH: string = path.join(SOURCE_PATH, \"nested-test-project\");\n\nconst FileSystem = {\n writeFile: fs.writeFileSync,\n deleteFile: fs.rmSync,\n};\n\ndescribe(parseGitFilename.name, () => {\n it(\"can parse backslash-escaped filenames\", () => {\n expect(parseGitFilename(\"some/path/to/a/file name\")).toEqual(\"some/path/to/a/file name\");\n expect(parseGitFilename('\"some/path/to/a/file?name\"')).toEqual(\"some/path/to/a/file?name\");\n expect(parseGitFilename('\"some/path/to/a/file\\\\\\\\name\"')).toEqual(\"some/path/to/a/file\\\\name\");\n expect(parseGitFilename('\"some/path/to/a/file\\\\\"name\"')).toEqual('some/path/to/a/file\"name');\n expect(parseGitFilename('\"some/path/to/a/file\\\\\"name\"')).toEqual('some/path/to/a/file\"name');\n expect(parseGitFilename('\"some/path/to/a/file\\\\347\\\\275\\\\221\\\\347\\\\275\\\\221name\"')).toEqual(\"some/path/to/a/file网网name\");\n expect(parseGitFilename('\"some/path/to/a/file\\\\\\\\347\\\\\\\\\\\\347\\\\275\\\\221name\"')).toEqual(\"some/path/to/a/file\\\\347\\\\网name\");\n expect(parseGitFilename('\"some/path/to/a/file\\\\\\\\\\\\347\\\\275\\\\221\\\\347\\\\275\\\\221name\"')).toEqual(\"some/path/to/a/file\\\\网网name\");\n });\n});\n\ndescribe(parseGitLsTree.name, () => {\n it(\"can handle a blob\", () => {\n const filename: string = \"src/typings/tsd.d.ts\";\n const hash: string = \"3451bccdc831cb43d7a70ed8e628dcf9c7f888c8\";\n\n const output: string = `100644 blob ${hash}\\t${filename}`;\n const changes: Map<string, string> = parseGitLsTree(output);\n\n expect(changes.size).toEqual(1); // Expect there to be exactly 1 change\n expect(changes.get(filename)).toEqual(hash); // Expect the hash to be ${hash}\n });\n\n it(\"can handle a submodule\", () => {\n const filename: string = \"rushstack\";\n const hash: string = \"c5880bf5b0c6c1f2e2c43c95beeb8f0a808e8bac\";\n\n const output: string = `160000 commit ${hash}\\t${filename}`;\n const changes: Map<string, string> = parseGitLsTree(output);\n\n expect(changes.size).toEqual(1); // Expect there to be exactly 1 change\n expect(changes.get(filename)).toEqual(hash); // Expect the hash to be ${hash}\n });\n\n it(\"can handle multiple lines\", () => {\n const filename1: string = \"src/typings/tsd.d.ts\";\n const hash1: string = \"3451bccdc831cb43d7a70ed8e628dcf9c7f888c8\";\n\n const filename2: string = \"src/foo bar/tsd.d.ts\";\n const hash2: string = \"0123456789abcdef1234567890abcdef01234567\";\n\n const output: string = `100644 blob ${hash1}\\t${filename1}\\n100666 blob ${hash2}\\t${filename2}`;\n const changes: Map<string, string> = parseGitLsTree(output);\n\n expect(changes.size).toEqual(2); // Expect there to be exactly 2 changes\n expect(changes.get(filename1)).toEqual(hash1); // Expect the hash to be ${hash1}\n expect(changes.get(filename2)).toEqual(hash2); // Expect the hash to be ${hash2}\n });\n\n it(\"throws with malformed input\", () => {\n expect(parseGitLsTree.bind(undefined, \"some super malformed input\")).toThrow();\n });\n});\n\ndescribe(getPackageDeps.name, () => {\n it(\"can parse committed file\", async () => {\n const monorepo = new Monorepo(\"parse-commited-file\");\n await monorepo.init(TEST_PROJECT_PATH);\n\n const results: Map<string, string> = getPackageDeps(monorepo.root);\n const expectedFiles: { [key: string]: string } = {\n \"file1.txt\": \"c7b2f707ac99ca522f965210a7b6b0b109863f34\",\n \"file 2.txt\": \"a385f754ec4fede884a4864d090064d9aeef8ccb\",\n \"file蝴蝶.txt\": \"ae814af81e16cb2ae8c57503c77e2cab6b5462ba\",\n \"package.json\": \"18a1e415e56220fa5122428a4ef8eb8874756576\",\n };\n const filePaths: string[] = Array.from(results.keys()).sort();\n\n filePaths.forEach((filePath) => expect(results.get(filePath)).toEqual(expectedFiles[filePath]));\n });\n\n it(\"can handle files in subfolders\", async () => {\n const monorepo = new Monorepo(\"files-in-subfolders\");\n await monorepo.init(NESTED_TEST_PROJECT_PATH);\n\n const results: Map<string, string> = getPackageDeps(monorepo.root);\n const expectedFiles: { [key: string]: string } = {\n \"src/file 1.txt\": \"c7b2f707ac99ca522f965210a7b6b0b109863f34\",\n \"package.json\": \"18a1e415e56220fa5122428a4ef8eb8874756576\",\n };\n const filePaths: string[] = Array.from(results.keys()).sort();\n\n filePaths.forEach((filePath) => expect(results.get(filePath)).toEqual(expectedFiles[filePath]));\n\n await monorepo.cleanup();\n });\n\n it(\"can handle adding one file\", async () => {\n const monorepo = new Monorepo(\"add-one-file\");\n await monorepo.init(TEST_PROJECT_PATH);\n\n const tempFilePath: string = path.join(monorepo.root, \"a.txt\");\n\n FileSystem.writeFile(tempFilePath, \"a\");\n\n const results: Map<string, string> = getPackageDeps(monorepo.root);\n try {\n const expectedFiles: { [key: string]: string } = {\n \"a.txt\": \"2e65efe2a145dda7ee51d1741299f848e5bf752e\",\n \"file1.txt\": \"c7b2f707ac99ca522f965210a7b6b0b109863f34\",\n \"file 2.txt\": \"a385f754ec4fede884a4864d090064d9aeef8ccb\",\n \"file蝴蝶.txt\": \"ae814af81e16cb2ae8c57503c77e2cab6b5462ba\",\n \"package.json\": \"18a1e415e56220fa5122428a4ef8eb8874756576\",\n };\n const filePaths: string[] = Array.from(results.keys()).sort();\n\n filePaths.forEach((filePath) => expect(results.get(filePath)).toEqual(expectedFiles[filePath]));\n } finally {\n FileSystem.deleteFile(tempFilePath);\n await monorepo.cleanup();\n }\n });\n\n it(\"can handle adding two files\", async () => {\n const monorepo = new Monorepo(\"add-two-files\");\n await monorepo.init(TEST_PROJECT_PATH);\n\n const tempFilePath1: string = path.join(monorepo.root, \"a.txt\");\n const tempFilePath2: string = path.join(monorepo.root, \"b.txt\");\n\n FileSystem.writeFile(tempFilePath1, \"a\");\n FileSystem.writeFile(tempFilePath2, \"a\");\n\n const results: Map<string, string> = getPackageDeps(monorepo.root);\n try {\n const expectedFiles: { [key: string]: string } = {\n \"a.txt\": \"2e65efe2a145dda7ee51d1741299f848e5bf752e\",\n \"b.txt\": \"2e65efe2a145dda7ee51d1741299f848e5bf752e\",\n \"file1.txt\": \"c7b2f707ac99ca522f965210a7b6b0b109863f34\",\n \"file 2.txt\": \"a385f754ec4fede884a4864d090064d9aeef8ccb\",\n \"file蝴蝶.txt\": \"ae814af81e16cb2ae8c57503c77e2cab6b5462ba\",\n \"package.json\": \"18a1e415e56220fa5122428a4ef8eb8874756576\",\n };\n const filePaths: string[] = Array.from(results.keys()).sort();\n\n filePaths.forEach((filePath) => expect(results.get(filePath)).toEqual(expectedFiles[filePath]));\n } finally {\n FileSystem.deleteFile(tempFilePath1);\n FileSystem.deleteFile(tempFilePath2);\n await monorepo.cleanup();\n }\n });\n\n it(\"can handle removing one file\", async () => {\n const monorepo = new Monorepo(\"remove-one-file\");\n await monorepo.init(TEST_PROJECT_PATH);\n\n const testFilePath: string = path.join(monorepo.root, \"file1.txt\");\n\n FileSystem.deleteFile(testFilePath);\n\n const results: Map<string, string> = getPackageDeps(monorepo.root);\n try {\n const expectedFiles: { [key: string]: string } = {\n \"file 2.txt\": \"a385f754ec4fede884a4864d090064d9aeef8ccb\",\n \"file蝴蝶.txt\": \"ae814af81e16cb2ae8c57503c77e2cab6b5462ba\",\n \"package.json\": \"18a1e415e56220fa5122428a4ef8eb8874756576\",\n };\n const filePaths: string[] = Array.from(results.keys()).sort();\n\n filePaths.forEach((filePath) => expect(results.get(filePath)).toEqual(expectedFiles[filePath]));\n } finally {\n await monorepo.cleanup();\n }\n });\n\n it(\"can handle changing one file\", async () => {\n const monorepo = new Monorepo(\"change-one-file\");\n await monorepo.init(TEST_PROJECT_PATH);\n\n const testFilePath: string = path.join(monorepo.root, \"file1.txt\");\n\n FileSystem.writeFile(testFilePath, \"abc\");\n\n const results: Map<string, string> = getPackageDeps(monorepo.root);\n try {\n const expectedFiles: { [key: string]: string } = {\n \"file1.txt\": \"f2ba8f84ab5c1bce84a7b441cb1959cfc7093b7f\",\n \"file 2.txt\": \"a385f754ec4fede884a4864d090064d9aeef8ccb\",\n \"file蝴蝶.txt\": \"ae814af81e16cb2ae8c57503c77e2cab6b5462ba\",\n \"package.json\": \"18a1e415e56220fa5122428a4ef8eb8874756576\",\n };\n const filePaths: string[] = Array.from(results.keys()).sort();\n\n filePaths.forEach((filePath) => expect(results.get(filePath)).toEqual(expectedFiles[filePath]));\n } finally {\n await monorepo.cleanup();\n }\n });\n\n it(\"can exclude a committed file\", async () => {\n const monorepo = new Monorepo(\"exclude-comitted-file\");\n await monorepo.init(TEST_PROJECT_PATH);\n\n const results: Map<string, string> = getPackageDeps(monorepo.root, [\"file1.txt\", \"file 2.txt\", \"file蝴蝶.txt\"]);\n\n const expectedFiles: { [key: string]: string } = {\n \"package.json\": \"18a1e415e56220fa5122428a4ef8eb8874756576\",\n };\n const filePaths: string[] = Array.from(results.keys()).sort();\n\n filePaths.forEach((filePath) => expect(results.get(filePath)).toEqual(expectedFiles[filePath]));\n await monorepo.cleanup();\n });\n\n it(\"can exclude an added file\", async () => {\n const monorepo = new Monorepo(\"exclude-added-file\");\n await monorepo.init(TEST_PROJECT_PATH);\n\n const tempFilePath: string = path.join(monorepo.root, \"a.txt\");\n\n FileSystem.writeFile(tempFilePath, \"a\");\n\n const results: Map<string, string> = getPackageDeps(monorepo.root, [\"a.txt\"]);\n try {\n const expectedFiles: { [key: string]: string } = {\n \"file1.txt\": \"c7b2f707ac99ca522f965210a7b6b0b109863f34\",\n \"file 2.txt\": \"a385f754ec4fede884a4864d090064d9aeef8ccb\",\n \"file蝴蝶.txt\": \"ae814af81e16cb2ae8c57503c77e2cab6b5462ba\",\n \"package.json\": \"18a1e415e56220fa5122428a4ef8eb8874756576\",\n };\n const filePaths: string[] = Array.from(results.keys()).sort();\n\n expect(filePaths).toHaveLength(Object.keys(expectedFiles).length);\n\n filePaths.forEach((filePath) => expect(results.get(filePath)).toEqual(expectedFiles[filePath]));\n } finally {\n await monorepo.cleanup();\n }\n });\n\n it(\"can handle a filename with spaces\", async () => {\n const monorepo = new Monorepo(\"filename-with-spaces\");\n await monorepo.init(TEST_PROJECT_PATH);\n\n const tempFilePath: string = path.join(monorepo.root, \"a file.txt\");\n\n FileSystem.writeFile(tempFilePath, \"a\");\n\n const results: Map<string, string> = getPackageDeps(monorepo.root);\n try {\n const expectedFiles: { [key: string]: string } = {\n \"file1.txt\": \"c7b2f707ac99ca522f965210a7b6b0b109863f34\",\n \"file 2.txt\": \"a385f754ec4fede884a4864d090064d9aeef8ccb\",\n \"file蝴蝶.txt\": \"ae814af81e16cb2ae8c57503c77e2cab6b5462ba\",\n \"a file.txt\": \"2e65efe2a145dda7ee51d1741299f848e5bf752e\",\n \"package.json\": \"18a1e415e56220fa5122428a4ef8eb8874756576\",\n };\n const filePaths: string[] = Array.from(results.keys()).sort();\n\n expect(filePaths).toHaveLength(Object.keys(expectedFiles).length);\n\n filePaths.forEach((filePath) => expect(results.get(filePath)).toEqual(expectedFiles[filePath]));\n } finally {\n await monorepo.cleanup();\n }\n });\n\n it(\"can handle a filename with multiple spaces\", async () => {\n const monorepo = new Monorepo(\"filename-multiple-spaces\");\n await monorepo.init(TEST_PROJECT_PATH);\n\n const tempFilePath: string = path.join(monorepo.root, \"a file name.txt\");\n\n FileSystem.writeFile(tempFilePath, \"a\");\n\n const results: Map<string, string> = getPackageDeps(monorepo.root);\n try {\n const expectedFiles: { [key: string]: string } = {\n \"file1.txt\": \"c7b2f707ac99ca522f965210a7b6b0b109863f34\",\n \"file 2.txt\": \"a385f754ec4fede884a4864d090064d9aeef8ccb\",\n \"file蝴蝶.txt\": \"ae814af81e16cb2ae8c57503c77e2cab6b5462ba\",\n \"a file name.txt\": \"2e65efe2a145dda7ee51d1741299f848e5bf752e\",\n \"package.json\": \"18a1e415e56220fa5122428a4ef8eb8874756576\",\n };\n const filePaths: string[] = Array.from(results.keys()).sort();\n\n expect(filePaths).toHaveLength(Object.keys(expectedFiles).length);\n\n filePaths.forEach((filePath) => expect(results.get(filePath)).toEqual(expectedFiles[filePath]));\n } finally {\n await monorepo.cleanup();\n }\n });\n\n it(\"can handle a filename with non-standard characters\", async () => {\n const monorepo = new Monorepo(\"non-standard-characters\");\n await monorepo.init(TEST_PROJECT_PATH);\n\n const tempFilePath: string = path.join(monorepo.root, \"newFile批把.txt\");\n\n FileSystem.writeFile(tempFilePath, \"a\");\n\n const results: Map<string, string> = getPackageDeps(monorepo.root);\n try {\n const expectedFiles: { [key: string]: string } = {\n \"file1.txt\": \"c7b2f707ac99ca522f965210a7b6b0b109863f34\",\n \"file 2.txt\": \"a385f754ec4fede884a4864d090064d9aeef8ccb\",\n \"file蝴蝶.txt\": \"ae814af81e16cb2ae8c57503c77e2cab6b5462ba\",\n \"newFile批把.txt\": \"2e65efe2a145dda7ee51d1741299f848e5bf752e\",\n \"package.json\": \"18a1e415e56220fa5122428a4ef8eb8874756576\",\n };\n const filePaths: string[] = Array.from(results.keys()).sort();\n\n expect(filePaths).toHaveLength(Object.keys(expectedFiles).length);\n\n filePaths.forEach((filePath) => expect(results.get(filePath)).toEqual(expectedFiles[filePath]));\n } finally {\n await monorepo.cleanup();\n }\n });\n});\n"],"names":["SOURCE_PATH","path","join","__dirname","TEST_PROJECT_PATH","NESTED_TEST_PROJECT_PATH","FileSystem","writeFile","fs","writeFileSync","deleteFile","rmSync","describe","parseGitFilename","name","it","expect","toEqual","parseGitLsTree","filename","hash","output","changes","size","get","filename1","hash1","filename2","hash2","bind","undefined","toThrow","getPackageDeps","monorepo","Monorepo","init","results","root","expectedFiles","filePaths","Array","from","keys","sort","forEach","filePath","cleanup","tempFilePath","tempFilePath1","tempFilePath2","testFilePath","toHaveLength","Object","length"],"mappings":";;;;8DAAsB;4DACF;gCAG6C;iCACxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEzB,MAAMA,cAAsBC,MAAKC,IAAI,CAACC,WAAW,MAAM;AAEvD,MAAMC,oBAA4BH,MAAKC,IAAI,CAACF,aAAa;AACzD,MAAMK,2BAAmCJ,MAAKC,IAAI,CAACF,aAAa;AAEhE,MAAMM,aAAa;IACjBC,WAAWC,IAAGC,aAAa;IAC3BC,YAAYF,IAAGG,MAAM;AACvB;AAEAC,SAASC,gCAAgB,CAACC,IAAI,EAAE;IAC9BC,GAAG,yCAAyC;QAC1CC,OAAOH,IAAAA,gCAAgB,EAAC,6BAA6BI,OAAO,CAAC;QAC7DD,OAAOH,IAAAA,gCAAgB,EAAC,+BAA+BI,OAAO,CAAC;QAC/DD,OAAOH,IAAAA,gCAAgB,EAAC,kCAAkCI,OAAO,CAAC;QAClED,OAAOH,IAAAA,gCAAgB,EAAC,iCAAiCI,OAAO,CAAC;QACjED,OAAOH,IAAAA,gCAAgB,EAAC,iCAAiCI,OAAO,CAAC;QACjED,OAAOH,IAAAA,gCAAgB,EAAC,4DAA4DI,OAAO,CAAC;QAC5FD,OAAOH,IAAAA,gCAAgB,EAAC,wDAAwDI,OAAO,CAAC;QACxFD,OAAOH,IAAAA,gCAAgB,EAAC,gEAAgEI,OAAO,CAAC;IAClG;AACF;AAEAL,SAASM,8BAAc,CAACJ,IAAI,EAAE;IAC5BC,GAAG,qBAAqB;QACtB,MAAMI,WAAmB;QACzB,MAAMC,OAAe;QAErB,MAAMC,SAAiB,CAAC,YAAY,EAAED,KAAK,EAAE,EAAED,UAAU;QACzD,MAAMG,UAA+BJ,IAAAA,8BAAc,EAACG;QAEpDL,OAAOM,QAAQC,IAAI,EAAEN,OAAO,CAAC,IAAI,sCAAsC;QACvED,OAAOM,QAAQE,GAAG,CAACL,WAAWF,OAAO,CAACG,OAAO,gCAAgC;IAC/E;IAEAL,GAAG,0BAA0B;QAC3B,MAAMI,WAAmB;QACzB,MAAMC,OAAe;QAErB,MAAMC,SAAiB,CAAC,cAAc,EAAED,KAAK,EAAE,EAAED,UAAU;QAC3D,MAAMG,UAA+BJ,IAAAA,8BAAc,EAACG;QAEpDL,OAAOM,QAAQC,IAAI,EAAEN,OAAO,CAAC,IAAI,sCAAsC;QACvED,OAAOM,QAAQE,GAAG,CAACL,WAAWF,OAAO,CAACG,OAAO,gCAAgC;IAC/E;IAEAL,GAAG,6BAA6B;QAC9B,MAAMU,YAAoB;QAC1B,MAAMC,QAAgB;QAEtB,MAAMC,YAAoB;QAC1B,MAAMC,QAAgB;QAEtB,MAAMP,SAAiB,CAAC,YAAY,EAAEK,MAAM,EAAE,EAAED,UAAU,cAAc,EAAEG,MAAM,EAAE,EAAED,WAAW;QAC/F,MAAML,UAA+BJ,IAAAA,8BAAc,EAACG;QAEpDL,OAAOM,QAAQC,IAAI,EAAEN,OAAO,CAAC,IAAI,uCAAuC;QACxED,OAAOM,QAAQE,GAAG,CAACC,YAAYR,OAAO,CAACS,QAAQ,iCAAiC;QAChFV,OAAOM,QAAQE,GAAG,CAACG,YAAYV,OAAO,CAACW,QAAQ,iCAAiC;IAClF;IAEAb,GAAG,+BAA+B;QAChCC,OAAOE,8BAAc,CAACW,IAAI,CAACC,WAAW,+BAA+BC,OAAO;IAC9E;AACF;AAEAnB,SAASoB,8BAAc,CAAClB,IAAI,EAAE;IAC5BC,GAAG,4BAA4B;QAC7B,MAAMkB,WAAW,IAAIC,yBAAQ,CAAC;QAC9B,MAAMD,SAASE,IAAI,CAAC/B;QAEpB,MAAMgC,UAA+BJ,IAAAA,8BAAc,EAACC,SAASI,IAAI;QACjE,MAAMC,gBAA2C;YAC/C,aAAa;YACb,eAAe;YACf,cAAc;YACd,gBAAgB;QAClB;QACA,MAAMC,YAAsBC,MAAMC,IAAI,CAACL,QAAQM,IAAI,IAAIC,IAAI;QAE3DJ,UAAUK,OAAO,CAAC,CAACC,WAAa7B,OAAOoB,QAAQZ,GAAG,CAACqB,WAAW5B,OAAO,CAACqB,aAAa,CAACO,SAAS;IAC/F;IAEA9B,GAAG,kCAAkC;QACnC,MAAMkB,WAAW,IAAIC,yBAAQ,CAAC;QAC9B,MAAMD,SAASE,IAAI,CAAC9B;QAEpB,MAAM+B,UAA+BJ,IAAAA,8BAAc,EAACC,SAASI,IAAI;QACjE,MAAMC,gBAA2C;YAC/C,kBAAkB;YAClB,gBAAgB;QAClB;QACA,MAAMC,YAAsBC,MAAMC,IAAI,CAACL,QAAQM,IAAI,IAAIC,IAAI;QAE3DJ,UAAUK,OAAO,CAAC,CAACC,WAAa7B,OAAOoB,QAAQZ,GAAG,CAACqB,WAAW5B,OAAO,CAACqB,aAAa,CAACO,SAAS;QAE7F,MAAMZ,SAASa,OAAO;IACxB;IAEA/B,GAAG,8BAA8B;QAC/B,MAAMkB,WAAW,IAAIC,yBAAQ,CAAC;QAC9B,MAAMD,SAASE,IAAI,CAAC/B;QAEpB,MAAM2C,eAAuB9C,MAAKC,IAAI,CAAC+B,SAASI,IAAI,EAAE;QAEtD/B,WAAWC,SAAS,CAACwC,cAAc;QAEnC,MAAMX,UAA+BJ,IAAAA,8BAAc,EAACC,SAASI,IAAI;QACjE,IAAI;YACF,MAAMC,gBAA2C;gBAC/C,SAAS;gBACT,aAAa;gBACb,eAAe;gBACf,cAAc;gBACd,gBAAgB;YAClB;YACA,MAAMC,YAAsBC,MAAMC,IAAI,CAACL,QAAQM,IAAI,IAAIC,IAAI;YAE3DJ,UAAUK,OAAO,CAAC,CAACC,WAAa7B,OAAOoB,QAAQZ,GAAG,CAACqB,WAAW5B,OAAO,CAACqB,aAAa,CAACO,SAAS;QAC/F,SAAU;YACRvC,WAAWI,UAAU,CAACqC;YACtB,MAAMd,SAASa,OAAO;QACxB;IACF;IAEA/B,GAAG,+BAA+B;QAChC,MAAMkB,WAAW,IAAIC,yBAAQ,CAAC;QAC9B,MAAMD,SAASE,IAAI,CAAC/B;QAEpB,MAAM4C,gBAAwB/C,MAAKC,IAAI,CAAC+B,SAASI,IAAI,EAAE;QACvD,MAAMY,gBAAwBhD,MAAKC,IAAI,CAAC+B,SAASI,IAAI,EAAE;QAEvD/B,WAAWC,SAAS,CAACyC,eAAe;QACpC1C,WAAWC,SAAS,CAAC0C,eAAe;QAEpC,MAAMb,UAA+BJ,IAAAA,8BAAc,EAACC,SAASI,IAAI;QACjE,IAAI;YACF,MAAMC,gBAA2C;gBAC/C,SAAS;gBACT,SAAS;gBACT,aAAa;gBACb,eAAe;gBACf,cAAc;gBACd,gBAAgB;YAClB;YACA,MAAMC,YAAsBC,MAAMC,IAAI,CAACL,QAAQM,IAAI,IAAIC,IAAI;YAE3DJ,UAAUK,OAAO,CAAC,CAACC,WAAa7B,OAAOoB,QAAQZ,GAAG,CAACqB,WAAW5B,OAAO,CAACqB,aAAa,CAACO,SAAS;QAC/F,SAAU;YACRvC,WAAWI,UAAU,CAACsC;YACtB1C,WAAWI,UAAU,CAACuC;YACtB,MAAMhB,SAASa,OAAO;QACxB;IACF;IAEA/B,GAAG,gCAAgC;QACjC,MAAMkB,WAAW,IAAIC,yBAAQ,CAAC;QAC9B,MAAMD,SAASE,IAAI,CAAC/B;QAEpB,MAAM8C,eAAuBjD,MAAKC,IAAI,CAAC+B,SAASI,IAAI,EAAE;QAEtD/B,WAAWI,UAAU,CAACwC;QAEtB,MAAMd,UAA+BJ,IAAAA,8BAAc,EAACC,SAASI,IAAI;QACjE,IAAI;YACF,MAAMC,gBAA2C;gBAC/C,eAAe;gBACf,cAAc;gBACd,gBAAgB;YAClB;YACA,MAAMC,YAAsBC,MAAMC,IAAI,CAACL,QAAQM,IAAI,IAAIC,IAAI;YAE3DJ,UAAUK,OAAO,CAAC,CAACC,WAAa7B,OAAOoB,QAAQZ,GAAG,CAACqB,WAAW5B,OAAO,CAACqB,aAAa,CAACO,SAAS;QAC/F,SAAU;YACR,MAAMZ,SAASa,OAAO;QACxB;IACF;IAEA/B,GAAG,gCAAgC;QACjC,MAAMkB,WAAW,IAAIC,yBAAQ,CAAC;QAC9B,MAAMD,SAASE,IAAI,CAAC/B;QAEpB,MAAM8C,eAAuBjD,MAAKC,IAAI,CAAC+B,SAASI,IAAI,EAAE;QAEtD/B,WAAWC,SAAS,CAAC2C,cAAc;QAEnC,MAAMd,UAA+BJ,IAAAA,8BAAc,EAACC,SAASI,IAAI;QACjE,IAAI;YACF,MAAMC,gBAA2C;gBAC/C,aAAa;gBACb,eAAe;gBACf,cAAc;gBACd,gBAAgB;YAClB;YACA,MAAMC,YAAsBC,MAAMC,IAAI,CAACL,QAAQM,IAAI,IAAIC,IAAI;YAE3DJ,UAAUK,OAAO,CAAC,CAACC,WAAa7B,OAAOoB,QAAQZ,GAAG,CAACqB,WAAW5B,OAAO,CAACqB,aAAa,CAACO,SAAS;QAC/F,SAAU;YACR,MAAMZ,SAASa,OAAO;QACxB;IACF;IAEA/B,GAAG,gCAAgC;QACjC,MAAMkB,WAAW,IAAIC,yBAAQ,CAAC;QAC9B,MAAMD,SAASE,IAAI,CAAC/B;QAEpB,MAAMgC,UAA+BJ,IAAAA,8BAAc,EAACC,SAASI,IAAI,EAAE;YAAC;YAAa;YAAe;SAAa;QAE7G,MAAMC,gBAA2C;YAC/C,gBAAgB;QAClB;QACA,MAAMC,YAAsBC,MAAMC,IAAI,CAACL,QAAQM,IAAI,IAAIC,IAAI;QAE3DJ,UAAUK,OAAO,CAAC,CAACC,WAAa7B,OAAOoB,QAAQZ,GAAG,CAACqB,WAAW5B,OAAO,CAACqB,aAAa,CAACO,SAAS;QAC7F,MAAMZ,SAASa,OAAO;IACxB;IAEA/B,GAAG,6BAA6B;QAC9B,MAAMkB,WAAW,IAAIC,yBAAQ,CAAC;QAC9B,MAAMD,SAASE,IAAI,CAAC/B;QAEpB,MAAM2C,eAAuB9C,MAAKC,IAAI,CAAC+B,SAASI,IAAI,EAAE;QAEtD/B,WAAWC,SAAS,CAACwC,cAAc;QAEnC,MAAMX,UAA+BJ,IAAAA,8BAAc,EAACC,SAASI,IAAI,EAAE;YAAC;SAAQ;QAC5E,IAAI;YACF,MAAMC,gBAA2C;gBAC/C,aAAa;gBACb,eAAe;gBACf,cAAc;gBACd,gBAAgB;YAClB;YACA,MAAMC,YAAsBC,MAAMC,IAAI,CAACL,QAAQM,IAAI,IAAIC,IAAI;YAE3D3B,OAAOuB,WAAWY,YAAY,CAACC,OAAOV,IAAI,CAACJ,eAAee,MAAM;YAEhEd,UAAUK,OAAO,CAAC,CAACC,WAAa7B,OAAOoB,QAAQZ,GAAG,CAACqB,WAAW5B,OAAO,CAACqB,aAAa,CAACO,SAAS;QAC/F,SAAU;YACR,MAAMZ,SAASa,OAAO;QACxB;IACF;IAEA/B,GAAG,qCAAqC;QACtC,MAAMkB,WAAW,IAAIC,yBAAQ,CAAC;QAC9B,MAAMD,SAASE,IAAI,CAAC/B;QAEpB,MAAM2C,eAAuB9C,MAAKC,IAAI,CAAC+B,SAASI,IAAI,EAAE;QAEtD/B,WAAWC,SAAS,CAACwC,cAAc;QAEnC,MAAMX,UAA+BJ,IAAAA,8BAAc,EAACC,SAASI,IAAI;QACjE,IAAI;YACF,MAAMC,gBAA2C;gBAC/C,aAAa;gBACb,eAAe;gBACf,cAAc;gBACd,cAAc;gBACd,gBAAgB;YAClB;YACA,MAAMC,YAAsBC,MAAMC,IAAI,CAACL,QAAQM,IAAI,IAAIC,IAAI;YAE3D3B,OAAOuB,WAAWY,YAAY,CAACC,OAAOV,IAAI,CAACJ,eAAee,MAAM;YAEhEd,UAAUK,OAAO,CAAC,CAACC,WAAa7B,OAAOoB,QAAQZ,GAAG,CAACqB,WAAW5B,OAAO,CAACqB,aAAa,CAACO,SAAS;QAC/F,SAAU;YACR,MAAMZ,SAASa,OAAO;QACxB;IACF;IAEA/B,GAAG,8CAA8C;QAC/C,MAAMkB,WAAW,IAAIC,yBAAQ,CAAC;QAC9B,MAAMD,SAASE,IAAI,CAAC/B;QAEpB,MAAM2C,eAAuB9C,MAAKC,IAAI,CAAC+B,SAASI,IAAI,EAAE;QAEtD/B,WAAWC,SAAS,CAACwC,cAAc;QAEnC,MAAMX,UAA+BJ,IAAAA,8BAAc,EAACC,SAASI,IAAI;QACjE,IAAI;YACF,MAAMC,gBAA2C;gBAC/C,aAAa;gBACb,eAAe;gBACf,cAAc;gBACd,oBAAoB;gBACpB,gBAAgB;YAClB;YACA,MAAMC,YAAsBC,MAAMC,IAAI,CAACL,QAAQM,IAAI,IAAIC,IAAI;YAE3D3B,OAAOuB,WAAWY,YAAY,CAACC,OAAOV,IAAI,CAACJ,eAAee,MAAM;YAEhEd,UAAUK,OAAO,CAAC,CAACC,WAAa7B,OAAOoB,QAAQZ,GAAG,CAACqB,WAAW5B,OAAO,CAACqB,aAAa,CAACO,SAAS;QAC/F,SAAU;YACR,MAAMZ,SAASa,OAAO;QACxB;IACF;IAEA/B,GAAG,sDAAsD;QACvD,MAAMkB,WAAW,IAAIC,yBAAQ,CAAC;QAC9B,MAAMD,SAASE,IAAI,CAAC/B;QAEpB,MAAM2C,eAAuB9C,MAAKC,IAAI,CAAC+B,SAASI,IAAI,EAAE;QAEtD/B,WAAWC,SAAS,CAACwC,cAAc;QAEnC,MAAMX,UAA+BJ,IAAAA,8BAAc,EAACC,SAASI,IAAI;QACjE,IAAI;YACF,MAAMC,gBAA2C;gBAC/C,aAAa;gBACb,eAAe;gBACf,cAAc;gBACd,iBAAiB;gBACjB,gBAAgB;YAClB;YACA,MAAMC,YAAsBC,MAAMC,IAAI,CAACL,QAAQM,IAAI,IAAIC,IAAI;YAE3D3B,OAAOuB,WAAWY,YAAY,CAACC,OAAOV,IAAI,CAACJ,eAAee,MAAM;YAEhEd,UAAUK,OAAO,CAAC,CAACC,WAAa7B,OAAOoB,QAAQZ,GAAG,CAACqB,WAAW5B,OAAO,CAACqB,aAAa,CAACO,SAAS;QAC/F,SAAU;YACR,MAAMZ,SAASa,OAAO;QACxB;IACF;AACF"}
@@ -9,14 +9,14 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- filterDependenciesInYarnFixture: function() {
13
- return filterDependenciesInYarnFixture;
14
- },
15
12
  filterDependenciesInPnpmFixture: function() {
16
13
  return filterDependenciesInPnpmFixture;
17
14
  },
18
15
  filterDependenciesInRushFixture: function() {
19
16
  return filterDependenciesInRushFixture;
17
+ },
18
+ filterDependenciesInYarnFixture: function() {
19
+ return filterDependenciesInYarnFixture;
20
20
  }
21
21
  });
22
22
  const _path = /*#__PURE__*/ _interop_require_default(require("path"));
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/__tests__/resolveDependenciesHelper.ts"],"sourcesContent":["import path from \"path\";\nimport { Monorepo } from \"@lage-run/monorepo-fixture\";\nconst fixturesPath = path.join(__dirname, \"..\", \"__fixtures__\");\n\nimport { getYarnWorkspaces, getPnpmWorkspaces, getRushWorkspaces } from \"workspace-tools\";\n\nexport async function filterDependenciesInYarnFixture(fixture: string, filterFunction: any) {\n const monorepo = new Monorepo(\"monorepo\");\n await monorepo.init(path.join(fixturesPath, fixture));\n const packageRoot = monorepo.root;\n\n const workspacesPackageInfo = getYarnWorkspaces(packageRoot);\n\n const dependencies = { \"package-a\": \"1.0.0\", foo: \"1.0.0\" };\n\n const filteredDependencies = filterFunction(dependencies, workspacesPackageInfo);\n\n return filteredDependencies;\n}\n\nexport async function filterDependenciesInPnpmFixture(fixture: string, filterFunction: any) {\n const monorepo = new Monorepo(\"monorepo\");\n await monorepo.init(path.join(fixturesPath, fixture));\n const packageRoot = monorepo.root;\n\n const workspacesPackageInfo = getPnpmWorkspaces(packageRoot);\n\n const dependencies = { \"package-a\": \"1.0.0\", foo: \"1.0.0\" };\n\n const filteredDependencies = filterFunction(dependencies, workspacesPackageInfo);\n\n return filteredDependencies;\n}\n\nexport async function filterDependenciesInRushFixture(fixture: string, filterFunction: any) {\n const monorepo = new Monorepo(\"monorepo\");\n await monorepo.init(path.join(fixturesPath, fixture));\n const packageRoot = monorepo.root;\n\n const workspacesPackageInfo = getRushWorkspaces(packageRoot);\n\n const dependencies = { \"package-a\": \"1.0.0\", foo: \"1.0.0\" };\n\n const filteredDependencies = filterFunction(dependencies, workspacesPackageInfo);\n\n return filteredDependencies;\n}\n"],"names":["filterDependenciesInPnpmFixture","filterDependenciesInRushFixture","filterDependenciesInYarnFixture","fixturesPath","path","join","__dirname","fixture","filterFunction","monorepo","Monorepo","init","packageRoot","root","workspacesPackageInfo","getYarnWorkspaces","dependencies","foo","filteredDependencies","getPnpmWorkspaces","getRushWorkspaces"],"mappings":";;;;;;;;;;;IAoBsBA,+BAA+B;eAA/BA;;IAcAC,+BAA+B;eAA/BA;;IA5BAC,+BAA+B;eAA/BA;;;6DANL;iCACQ;gCAG+C;;;;;;AAFxE,MAAMC,eAAeC,aAAI,CAACC,IAAI,CAACC,WAAW,MAAM;AAIzC,eAAeJ,gCAAgCK,OAAe,EAAEC,cAAmB;IACxF,MAAMC,WAAW,IAAIC,yBAAQ,CAAC;IAC9B,MAAMD,SAASE,IAAI,CAACP,aAAI,CAACC,IAAI,CAACF,cAAcI;IAC5C,MAAMK,cAAcH,SAASI,IAAI;IAEjC,MAAMC,wBAAwBC,IAAAA,iCAAiB,EAACH;IAEhD,MAAMI,eAAe;QAAE,aAAa;QAASC,KAAK;IAAQ;IAE1D,MAAMC,uBAAuBV,eAAeQ,cAAcF;IAE1D,OAAOI;AACT;AAEO,eAAelB,gCAAgCO,OAAe,EAAEC,cAAmB;IACxF,MAAMC,WAAW,IAAIC,yBAAQ,CAAC;IAC9B,MAAMD,SAASE,IAAI,CAACP,aAAI,CAACC,IAAI,CAACF,cAAcI;IAC5C,MAAMK,cAAcH,SAASI,IAAI;IAEjC,MAAMC,wBAAwBK,IAAAA,iCAAiB,EAACP;IAEhD,MAAMI,eAAe;QAAE,aAAa;QAASC,KAAK;IAAQ;IAE1D,MAAMC,uBAAuBV,eAAeQ,cAAcF;IAE1D,OAAOI;AACT;AAEO,eAAejB,gCAAgCM,OAAe,EAAEC,cAAmB;IACxF,MAAMC,WAAW,IAAIC,yBAAQ,CAAC;IAC9B,MAAMD,SAASE,IAAI,CAACP,aAAI,CAACC,IAAI,CAACF,cAAcI;IAC5C,MAAMK,cAAcH,SAASI,IAAI;IAEjC,MAAMC,wBAAwBM,IAAAA,iCAAiB,EAACR;IAEhD,MAAMI,eAAe;QAAE,aAAa;QAASC,KAAK;IAAQ;IAE1D,MAAMC,uBAAuBV,eAAeQ,cAAcF;IAE1D,OAAOI;AACT"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/__tests__/resolveExternalDependencies.test.ts"],"sourcesContent":["import { getPnpmWorkspaces, getRushWorkspaces, getYarnWorkspaces, parseLockFile } from \"workspace-tools\";\n\nimport { filterExternalDependencies, resolveExternalDependencies, addToQueue } from \"../resolveExternalDependencies\";\nimport { filterDependenciesInYarnFixture } from \"./resolveDependenciesHelper\";\nimport path from \"path\";\nimport { Monorepo } from \"@lage-run/monorepo-fixture\";\nconst fixturesPath = path.join(__dirname, \"..\", \"__fixtures__\");\n\ndescribe(\"filterExternalDependencies()\", () => {\n it(\"only lists external dependencies\", async () => {\n const results = await filterDependenciesInYarnFixture(\"monorepo\", filterExternalDependencies);\n expect(results).toEqual({ foo: \"1.0.0\" });\n });\n\n it(\"identifies all dependencies as external packages if there are no workspaces\", async () => {\n const results = await filterDependenciesInYarnFixture(\"basic\", filterExternalDependencies);\n expect(results).toEqual({ foo: \"1.0.0\", \"package-a\": \"1.0.0\" });\n });\n});\n\ndescribe(\"addToQueue()\", () => {\n it(\"adds external dependencies to queue\", () => {\n const externalDependencies = { foo: \"1.0.0\" };\n const done: string[] = [];\n const queue: [string, string][] = [];\n\n addToQueue(externalDependencies, done, queue);\n\n const expectedQueue = [[\"foo\", \"1.0.0\"]];\n expect(queue).toEqual(expectedQueue);\n });\n\n it(\"doesn't add to the queue if the dependency has been visited\", () => {\n const externalDependencies = { foo: \"1.0.0\" };\n const done: string[] = [\"foo@1.0.0\"];\n const queue: [string, string][] = [];\n\n addToQueue(externalDependencies, done, queue);\n\n expect(queue).toEqual([]);\n });\n\n it(\"doesn't add to queue if the dependency is already in the queue\", () => {\n const externalDependencies = { foo: \"1.0.0\" };\n const done: string[] = [];\n const queue: [string, string][] = [[\"foo\", \"1.0.0\"]];\n\n addToQueue(externalDependencies, done, queue);\n\n const expectedQueue = [[\"foo\", \"1.0.0\"]];\n expect(queue).toEqual(expectedQueue);\n });\n});\n\ndescribe(\"resolveExternalDependencies() - yarn\", () => {\n it(\"given a list of external dependencies and a parsed Lock file, add all dependencies, transitively\", async () => {\n const monorepo = new Monorepo(\"monorepo\");\n await monorepo.init(path.join(fixturesPath, \"monorepo\"));\n const packageRoot = monorepo.root;\n\n const workspaces = getYarnWorkspaces(packageRoot);\n\n const allDependencies = { \"package-a\": \"1.0.0\", foo: \"1.0.0\" };\n const parsedLockFile = await parseLockFile(packageRoot);\n\n const resolvedDependencies = resolveExternalDependencies(allDependencies, workspaces, parsedLockFile);\n\n expect(resolvedDependencies).toEqual([\"foo@1.0.0\", \"bar@^1.0.0\"]);\n await monorepo.cleanup();\n });\n});\n\ndescribe(\"resolveExternalDependencies() - pnpm\", () => {\n it(\"given a list of external dependencies and a parsed Lock file, add all dependencies, transitively\", async () => {\n const monorepo = new Monorepo(\"monorepo\");\n await monorepo.init(path.join(fixturesPath, \"monorepo-pnpm\"));\n const packageRoot = monorepo.root;\n const workspaces = getPnpmWorkspaces(packageRoot);\n\n const allDependencies = {\n \"package-a\": \"1.0.0\",\n once: \"1.4.0\",\n };\n const parsedLockFile = await parseLockFile(packageRoot);\n\n const resolvedDependencies = resolveExternalDependencies(allDependencies, workspaces, parsedLockFile);\n\n expect(resolvedDependencies).toEqual([\"once@1.4.0\", \"wrappy@1.0.2\"]);\n await monorepo.cleanup();\n });\n});\n\ndescribe(\"resolveExternalDependencies() - rush+pnpm\", () => {\n it(\"given a list of external dependencies and a parsed Lock file, add all dependencies, transitively\", async () => {\n const monorepo = new Monorepo(\"monorepo\");\n await monorepo.init(path.join(fixturesPath, \"monorepo-rush-pnpm\"));\n const packageRoot = monorepo.root;\n const workspaces = getRushWorkspaces(packageRoot);\n\n const allDependencies = {\n \"package-a\": \"1.0.0\",\n once: \"1.4.0\",\n };\n const parsedLockFile = await parseLockFile(packageRoot);\n\n const resolvedDependencies = resolveExternalDependencies(allDependencies, workspaces, parsedLockFile);\n\n expect(resolvedDependencies).toEqual([\"once@1.4.0\", \"wrappy@1.0.2\"]);\n await monorepo.cleanup();\n });\n});\n\ndescribe(\"resolveExternalDependencies() - rush+yarn\", () => {\n it(\"given a list of external dependencies and a parsed Lock file, add all dependencies, transitively\", async () => {\n const monorepo = new Monorepo(\"monorepo\");\n await monorepo.init(path.join(fixturesPath, \"monorepo-rush-yarn\"));\n const packageRoot = monorepo.root;\n const workspaces = getRushWorkspaces(packageRoot);\n\n const allDependencies = {\n \"package-a\": \"1.0.0\",\n once: \"1.4.0\",\n };\n const parsedLockFile = await parseLockFile(packageRoot);\n\n const resolvedDependencies = resolveExternalDependencies(allDependencies, workspaces, parsedLockFile);\n\n expect(resolvedDependencies).toEqual([\"once@1.4.0\", \"wrappy@1.0.2\"]);\n await monorepo.cleanup();\n });\n});\n"],"names":["fixturesPath","path","join","__dirname","describe","it","results","filterDependenciesInYarnFixture","filterExternalDependencies","expect","toEqual","foo","externalDependencies","done","queue","addToQueue","expectedQueue","monorepo","Monorepo","init","packageRoot","root","workspaces","getYarnWorkspaces","allDependencies","parsedLockFile","parseLockFile","resolvedDependencies","resolveExternalDependencies","cleanup","getPnpmWorkspaces","once","getRushWorkspaces"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/__tests__/resolveInternalDependencies.test.ts"],"sourcesContent":["import { getPnpmWorkspaces, getRushWorkspaces, getYarnWorkspaces } from \"workspace-tools\";\n\nimport { filterInternalDependencies, resolveInternalDependencies } from \"../resolveInternalDependencies\";\nimport {\n filterDependenciesInYarnFixture,\n filterDependenciesInPnpmFixture,\n filterDependenciesInRushFixture,\n} from \"./resolveDependenciesHelper\";\nimport path from \"path\";\nimport { Monorepo } from \"@lage-run/monorepo-fixture\";\nconst fixturesPath = path.join(__dirname, \"..\", \"__fixtures__\");\n\ndescribe(\"filterInternalDependencies() for yarn\", () => {\n it(\"only lists internal dependencies\", async () => {\n const results = await filterDependenciesInYarnFixture(\"monorepo\", filterInternalDependencies);\n\n expect(results).toEqual([\"package-a\"]);\n });\n\n it(\"lists no internal packages if there are no workspaces\", async () => {\n const results = await filterDependenciesInYarnFixture(\"basic\", filterInternalDependencies);\n\n expect(results).toEqual([]);\n });\n});\n\ndescribe(\"resolveInternalDependencies() for yarn\", () => {\n it(\"adds internal dependency names to the processedPackages list\", async () => {\n const monorepo = new Monorepo(\"monorepo\");\n await monorepo.init(path.join(fixturesPath, \"monorepo\"));\n const packageRoot = monorepo.root;\n const workspaces = getYarnWorkspaces(packageRoot);\n\n const dependencies = { \"package-a\": \"1.0.0\", foo: \"1.0.0\" };\n\n const resolvedDependencies = resolveInternalDependencies(dependencies, workspaces);\n\n expect(resolvedDependencies).toEqual([\"package-a\"]);\n await monorepo.cleanup();\n });\n});\n\ndescribe(\"filterInternalDependencies() for pnpm\", () => {\n it(\"only lists internal dependencies\", async () => {\n const results = await filterDependenciesInPnpmFixture(\"monorepo-pnpm\", filterInternalDependencies);\n\n expect(results).toEqual([\"package-a\"]);\n });\n\n it(\"lists no internal packages if there are no workspaces\", async () => {\n const results = await filterDependenciesInPnpmFixture(\"basic\", filterInternalDependencies);\n\n expect(results).toEqual([]);\n });\n});\n\ndescribe(\"resolveInternalDependencies() for pnpm\", () => {\n it(\"adds internal dependency names to the processedPackages list\", async () => {\n const monorepo = new Monorepo(\"monorepo\");\n await monorepo.init(path.join(fixturesPath, \"monorepo-pnpm\"));\n const packageRoot = monorepo.root;\n const workspaces = getPnpmWorkspaces(packageRoot);\n\n const dependencies = { \"package-a\": \"1.0.0\", foo: \"1.0.0\" };\n\n const resolvedDependencies = resolveInternalDependencies(dependencies, workspaces);\n\n expect(resolvedDependencies).toEqual([\"package-a\"]);\n await monorepo.cleanup();\n });\n});\n\ndescribe(\"filterInternalDependencies() for rush+pnpm\", () => {\n it(\"only lists internal dependencies\", async () => {\n const results = await filterDependenciesInRushFixture(\"monorepo-rush-pnpm\", filterInternalDependencies);\n\n expect(results).toEqual([\"package-a\"]);\n });\n\n it(\"lists no internal packages if there are no workspaces\", async () => {\n const results = await filterDependenciesInRushFixture(\"basic\", filterInternalDependencies);\n\n expect(results).toEqual([]);\n });\n});\n\ndescribe(\"resolveInternalDependencies() for rush+pnpm\", () => {\n it(\"adds internal dependency names to the processedPackages list\", async () => {\n const monorepo = new Monorepo(\"monorepo\");\n await monorepo.init(path.join(fixturesPath, \"monorepo-rush-pnpm\"));\n const packageRoot = monorepo.root;\n\n const workspaces = getRushWorkspaces(packageRoot);\n\n const dependencies = { \"package-a\": \"1.0.0\", foo: \"1.0.0\" };\n\n const resolvedDependencies = resolveInternalDependencies(dependencies, workspaces);\n\n expect(resolvedDependencies).toEqual([\"package-a\"]);\n await monorepo.cleanup();\n });\n});\n\ndescribe(\"filterInternalDependencies() for rush+yarn\", () => {\n it(\"only lists internal dependencies\", async () => {\n const results = await filterDependenciesInRushFixture(\"monorepo-rush-yarn\", filterInternalDependencies);\n\n expect(results).toEqual([\"package-a\"]);\n });\n\n it(\"lists no internal packages if there are no workspaces\", async () => {\n const results = await filterDependenciesInRushFixture(\"basic\", filterInternalDependencies);\n\n expect(results).toEqual([]);\n });\n});\n\ndescribe(\"resolveInternalDependencies() for rush+yarn\", () => {\n it(\"adds internal dependency names to the processedPackages list\", async () => {\n const monorepo = new Monorepo(\"monorepo\");\n await monorepo.init(path.join(fixturesPath, \"monorepo-rush-yarn\"));\n const packageRoot = monorepo.root;\n const workspaces = getRushWorkspaces(packageRoot);\n\n const dependencies = { \"package-a\": \"1.0.0\", foo: \"1.0.0\" };\n\n const resolvedDependencies = resolveInternalDependencies(dependencies, workspaces);\n\n expect(resolvedDependencies).toEqual([\"package-a\"]);\n await monorepo.cleanup();\n });\n});\n"],"names":["fixturesPath","path","join","__dirname","describe","it","results","filterDependenciesInYarnFixture","filterInternalDependencies","expect","toEqual","monorepo","Monorepo","init","packageRoot","root","workspaces","getYarnWorkspaces","dependencies","foo","resolvedDependencies","resolveInternalDependencies","cleanup","filterDependenciesInPnpmFixture","getPnpmWorkspaces","filterDependenciesInRushFixture","getRushWorkspaces"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/expandInputPatterns.ts"],"sourcesContent":["import { type Target } from \"@lage-run/target-graph\";\nimport { type DependencyMap } from \"workspace-tools\";\n\nexport function expandInputPatterns(patterns: string[], target: Target, dependencyMap: DependencyMap) {\n const expandedPatterns: Record<string, string[]> = {};\n\n for (const pattern of patterns) {\n if (pattern.startsWith(\"^\") || pattern.startsWith(\"!^\")) {\n const matchPattern = pattern.replace(\"^\", \"\");\n\n // get all the packages that are transitive deps and add them to the list\n const queue = [target.packageName];\n\n const visited = new Set<string>();\n\n while (queue.length > 0) {\n const pkg = queue.pop()!;\n if (visited.has(pkg)) {\n continue;\n }\n visited.add(pkg);\n\n if (pkg !== target.packageName) {\n expandedPatterns[pkg] = expandedPatterns[pkg] ?? [];\n expandedPatterns[pkg].push(matchPattern);\n }\n\n if (dependencyMap.dependencies.has(pkg)) {\n const deps = dependencyMap.dependencies.get(pkg);\n if (deps) {\n for (const dep of deps) {\n queue.push(dep);\n }\n }\n }\n }\n } else {\n const pkg = target.packageName!;\n expandedPatterns[pkg] = expandedPatterns[pkg] ?? [];\n expandedPatterns[pkg].push(pattern);\n }\n }\n\n return expandedPatterns;\n}\n"],"names":["expandInputPatterns","patterns","target","dependencyMap","expandedPatterns","pattern","startsWith","matchPattern","replace","queue","packageName","visited","Set","length","pkg","pop","has","add","push","dependencies","deps","get","dep"],"mappings":";;;;+BAGgBA;;;eAAAA;;;AAAT,SAASA,oBAAoBC,QAAkB,EAAEC,MAAc,EAAEC,aAA4B;IAClG,MAAMC,mBAA6C,CAAC;IAEpD,KAAK,MAAMC,WAAWJ,SAAU;QAC9B,IAAII,QAAQC,UAAU,CAAC,QAAQD,QAAQC,UAAU,CAAC,OAAO;YACvD,MAAMC,eAAeF,QAAQG,OAAO,CAAC,KAAK;YAE1C,yEAAyE;YACzE,MAAMC,QAAQ;gBAACP,OAAOQ,WAAW;aAAC;YAElC,MAAMC,UAAU,IAAIC;YAEpB,MAAOH,MAAMI,MAAM,GAAG,EAAG;gBACvB,MAAMC,MAAML,MAAMM,GAAG;gBACrB,IAAIJ,QAAQK,GAAG,CAACF,MAAM;oBACpB;gBACF;gBACAH,QAAQM,GAAG,CAACH;gBAEZ,IAAIA,QAAQZ,OAAOQ,WAAW,EAAE;oBAC9BN,gBAAgB,CAACU,IAAI,GAAGV,gBAAgB,CAACU,IAAI,IAAI,EAAE;oBACnDV,gBAAgB,CAACU,IAAI,CAACI,IAAI,CAACX;gBAC7B;gBAEA,IAAIJ,cAAcgB,YAAY,CAACH,GAAG,CAACF,MAAM;oBACvC,MAAMM,OAAOjB,cAAcgB,YAAY,CAACE,GAAG,CAACP;oBAC5C,IAAIM,MAAM;wBACR,KAAK,MAAME,OAAOF,KAAM;4BACtBX,MAAMS,IAAI,CAACI;wBACb;oBACF;gBACF;YACF;QACF,OAAO;YACL,MAAMR,MAAMZ,OAAOQ,WAAW;YAC9BN,gBAAgB,CAACU,IAAI,GAAGV,gBAAgB,CAACU,IAAI,IAAI,EAAE;YACnDV,gBAAgB,CAACU,IAAI,CAACI,IAAI,CAACb;QAC7B;IACF;IAEA,OAAOD;AACT"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/getInputFiles.ts"],"sourcesContent":["import { type Target } from \"@lage-run/target-graph\";\nimport { type DependencyMap } from \"workspace-tools\";\nimport { type PackageTree } from \"./PackageTree.js\";\nimport { expandInputPatterns } from \"./expandInputPatterns.js\";\n\nexport function getInputFiles(target: Target, dependencyMap: DependencyMap, packageTree: PackageTree) {\n const inputs = target.inputs ?? [\"**/*\"];\n\n const packagePatterns = expandInputPatterns(inputs, target, dependencyMap);\n const files: string[] = [];\n for (const [pkg, patterns] of Object.entries(packagePatterns)) {\n const packageFiles = packageTree.getPackageFiles(pkg, patterns);\n files.push(...packageFiles);\n }\n return files;\n}\n"],"names":["getInputFiles","target","dependencyMap","packageTree","inputs","packagePatterns","expandInputPatterns","files","pkg","patterns","Object","entries","packageFiles","getPackageFiles","push"],"mappings":";;;;+BAKgBA;;;eAAAA;;;qCAFoB;AAE7B,SAASA,cAAcC,MAAc,EAAEC,aAA4B,EAAEC,WAAwB;IAClG,MAAMC,SAASH,OAAOG,MAAM,IAAI;QAAC;KAAO;IAExC,MAAMC,kBAAkBC,IAAAA,wCAAmB,EAACF,QAAQH,QAAQC;IAC5D,MAAMK,QAAkB,EAAE;IAC1B,KAAK,MAAM,CAACC,KAAKC,SAAS,IAAIC,OAAOC,OAAO,CAACN,iBAAkB;QAC7D,MAAMO,eAAeT,YAAYU,eAAe,CAACL,KAAKC;QACtDF,MAAMO,IAAI,IAAIF;IAChB;IACA,OAAOL;AACT"}
@@ -9,26 +9,26 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- parseGitFilename: function() {
13
- return parseGitFilename;
14
- },
15
- parseGitLsTree: function() {
16
- return parseGitLsTree;
17
- },
18
- parseGitStatus: function() {
19
- return parseGitStatus;
20
- },
21
12
  getGitHashForFiles: function() {
22
13
  return getGitHashForFiles;
23
14
  },
15
+ getPackageDeps: function() {
16
+ return getPackageDeps;
17
+ },
24
18
  gitLsTree: function() {
25
19
  return gitLsTree;
26
20
  },
27
21
  gitStatus: function() {
28
22
  return gitStatus;
29
23
  },
30
- getPackageDeps: function() {
31
- return getPackageDeps;
24
+ parseGitFilename: function() {
25
+ return parseGitFilename;
26
+ },
27
+ parseGitLsTree: function() {
28
+ return parseGitLsTree;
29
+ },
30
+ parseGitStatus: function() {
31
+ return parseGitStatus;
32
32
  }
33
33
  });
34
34
  const _path = /*#__PURE__*/ _interop_require_wildcard(require("path"));
@@ -59,7 +59,9 @@ function _interop_require_wildcard(obj, nodeInterop) {
59
59
  if (cache && cache.has(obj)) {
60
60
  return cache.get(obj);
61
61
  }
62
- var newObj = {};
62
+ var newObj = {
63
+ __proto__: null
64
+ };
63
65
  var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
64
66
  for(var key in obj){
65
67
  if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/getPackageDeps.ts"],"sourcesContent":["import * as path from \"path\";\nimport execa from \"execa\";\n\n/**\n * Parses a quoted filename sourced from the output of the \"git status\" command.\n *\n * Paths with non-standard characters will be enclosed with double-quotes, and non-standard\n * characters will be backslash escaped (ex. double-quotes, non-ASCII characters). The\n * escaped chars can be included in one of two ways:\n * - backslash-escaped chars (ex. \\\")\n * - octal encoded chars (ex. \\347)\n *\n * See documentation: https://git-scm.com/docs/git-status\n */\nexport function parseGitFilename(filename: string): string {\n // If there are no double-quotes around the string, then there are no escaped characters\n // to decode, so just return\n if (!filename.match(/^\".+\"$/)) {\n return filename;\n }\n\n // Need to hex encode '%' since we will be decoding the converted octal values from hex\n filename = filename.replace(/%/g, \"%25\");\n // Replace all instances of octal literals with percent-encoded hex (ex. '\\347\\275\\221' -> '%E7%BD%91').\n // This is done because the octal literals represent UTF-8 bytes, and by converting them to percent-encoded\n // hex, we can use decodeURIComponent to get the Unicode chars.\n filename = filename.replace(/(?:\\\\(\\d{1,3}))/g, (match, ...[octalValue, index, source]) => {\n // We need to make sure that the backslash is intended to escape the octal value. To do this, walk\n // backwards from the match to ensure that it's already escaped.\n const trailingBackslashes: RegExpMatchArray | null = (source as string).slice(0, index as number).match(/\\\\*$/);\n return trailingBackslashes && trailingBackslashes.length > 0 && trailingBackslashes[0].length % 2 === 0\n ? `%${parseInt(octalValue, 8).toString(16)}`\n : match;\n });\n\n // Finally, decode the filename and unescape the escaped UTF-8 chars\n return JSON.parse(decodeURIComponent(filename));\n}\n\n/**\n * Parses the output of the \"git ls-tree\" command\n */\nexport function parseGitLsTree(output: string): Map<string, string> {\n const changes: Map<string, string> = new Map<string, string>();\n\n if (output) {\n // A line is expected to look like:\n // 100644 blob 3451bccdc831cb43d7a70ed8e628dcf9c7f888c8 src/typings/tsd.d.ts\n // 160000 commit c5880bf5b0c6c1f2e2c43c95beeb8f0a808e8bac rushstack\n const gitRegex = /([0-9]{6})\\s(blob|commit)\\s([a-f0-9]{40})\\s*(.*)/;\n\n // Note: The output of git ls-tree uses \\n newlines regardless of OS.\n const outputLines: string[] = output.trim().split(\"\\n\");\n for (const line of outputLines) {\n if (line) {\n // Take everything after the \"100644 blob\", which is just the hash and filename\n const matches: RegExpMatchArray | null = line.match(gitRegex);\n if (matches && matches[3] && matches[4]) {\n const hash: string = matches[3];\n const filename: string = parseGitFilename(matches[4]);\n\n changes.set(filename, hash);\n } else {\n throw new Error(`Cannot parse git ls-tree input: \"${line}\"`);\n }\n }\n }\n }\n\n return changes;\n}\n\n/**\n * Parses the output of the \"git status\" command\n */\nexport function parseGitStatus(output: string): Map<string, string> {\n const changes: Map<string, string> = new Map<string, string>();\n\n /*\n * Typically, output will look something like:\n * M temp_modules/rush-package-deps-hash/package.json\n * D package-deps-hash/src/index.ts\n */\n\n // If there was an issue with `git ls-tree`, or there are no current changes, processOutputBlocks[1]\n // will be empty or undefined\n if (!output) {\n return changes;\n }\n\n // Note: The output of git hash-object uses \\n newlines regardless of OS.\n const outputLines: string[] = output.trim().split(\"\\n\");\n for (const line of outputLines) {\n /*\n * changeType is in the format of \"XY\" where \"X\" is the status of the file in the index and \"Y\" is the status of\n * the file in the working tree. Some example statuses:\n * - 'D' == deletion\n * - 'M' == modification\n * - 'A' == addition\n * - '??' == untracked\n * - 'R' == rename\n * - 'RM' == rename with modifications\n * - '[MARC]D' == deleted in work tree\n * Full list of examples: https://git-scm.com/docs/git-status#_short_format\n */\n const match: RegExpMatchArray | null = line.match(/(\"(\\\\\"|[^\"])+\")|(\\S+\\s*)/g);\n\n if (match && match.length > 1) {\n const [changeType, ...filenameMatches] = match;\n\n // We always care about the last filename in the filenames array. In the case of non-rename changes,\n // the filenames array only contains one file, so we can join all segments that were split on spaces.\n // In the case of rename changes, the last item in the array is the path to the file in the working tree,\n // which is the only one that we care about. It is also surrounded by double-quotes if spaces are\n // included, so no need to worry about joining different segments\n let lastFilename: string = changeType.startsWith(\"R\") ? filenameMatches[filenameMatches.length - 1] : filenameMatches.join(\"\");\n lastFilename = parseGitFilename(lastFilename);\n\n changes.set(lastFilename, changeType.trimRight());\n }\n }\n\n return changes;\n}\n\n/**\n * Takes a list of files and returns the current git hashes for them\n *\n * @public\n */\nexport function getGitHashForFiles(filesToHash: string[], packagePath: string, gitPath?: string): Map<string, string> {\n const changes: Map<string, string> = new Map<string, string>();\n\n if (filesToHash.length) {\n // Use --stdin-paths arg to pass the list of files to git in order to avoid issues with\n // command length\n const result = execa.sync(gitPath || \"git\", [\"hash-object\", \"--stdin-paths\"], {\n input: filesToHash.map((x) => path.resolve(packagePath, x)).join(\"\\n\"),\n });\n\n if (result.exitCode !== 0) {\n throw new Error(`git hash-object exited with status ${result.exitCode}: ${result.stderr}`);\n }\n\n const hashStdout: string = result.stdout.trim();\n\n // The result of \"git hash-object\" will be a list of file hashes delimited by newlines\n const hashes: string[] = hashStdout.split(\"\\n\");\n\n if (hashes.length !== filesToHash.length) {\n throw new Error(`Passed ${filesToHash.length} file paths to Git to hash, but received ${hashes.length} hashes.`);\n }\n\n for (let i = 0; i < hashes.length; i++) {\n const hash: string = hashes[i];\n const filePath: string = filesToHash[i];\n changes.set(filePath, hash);\n }\n }\n\n return changes;\n}\n\n/**\n * Executes \"git ls-tree\" in a folder\n */\nexport function gitLsTree(path: string, gitPath?: string): string {\n const result = execa.sync(gitPath || \"git\", [\"ls-tree\", \"HEAD\", \"-r\"], {\n cwd: path,\n });\n\n if (result.exitCode !== 0) {\n throw new Error(`git ls-tree exited with status ${result.exitCode}: ${result.stderr}`);\n }\n\n return result.stdout;\n}\n\n/**\n * Executes \"git status\" in a folder\n */\nexport function gitStatus(path: string, gitPath?: string): string {\n /**\n * -s - Short format. Will be printed as 'XY PATH' or 'XY ORIG_PATH -> PATH'. Paths with non-standard\n * characters will be escaped using double-quotes, and non-standard characters will be backslash\n * escaped (ex. spaces, tabs, double-quotes)\n * -u - Untracked files are included\n *\n * See documentation here: https://git-scm.com/docs/git-status\n */\n const result = execa.sync(gitPath || \"git\", [\"status\", \"-s\", \"-u\", \".\"], {\n cwd: path,\n });\n\n if (result.exitCode !== 0) {\n throw new Error(`git status exited with status ${result.exitCode}: ${result.stderr}`);\n }\n\n return result.stdout;\n}\n\n/**\n * Builds an object containing hashes for the files under the specified `packagePath` folder.\n * @param packagePath - The folder path to derive the package dependencies from. This is typically the folder\n * containing package.json. If omitted, the default value is the current working directory.\n * @param excludedPaths - An optional array of file path exclusions. If a file should be omitted from the list\n * of dependencies, use this to exclude it.\n * @returns the package-deps.json file content\n *\n * @public\n */\nexport function getPackageDeps(packagePath: string = process.cwd(), excludedPaths?: string[], gitPath?: string): Map<string, string> {\n const gitLsOutput: string = gitLsTree(packagePath, gitPath);\n\n // Add all the checked in hashes\n const result: Map<string, string> = parseGitLsTree(gitLsOutput);\n\n // Remove excluded paths\n if (excludedPaths) {\n for (const excludedPath of excludedPaths) {\n result.delete(excludedPath);\n }\n }\n\n // Update the checked in hashes with the current repo status\n const gitStatusOutput: string = gitStatus(packagePath, gitPath);\n const currentlyChangedFiles: Map<string, string> = parseGitStatus(gitStatusOutput);\n const filesToHash: string[] = [];\n const excludedPathSet: Set<string> = new Set<string>(excludedPaths);\n for (const [filename, changeType] of currentlyChangedFiles) {\n // See comments inside parseGitStatus() for more information\n if (changeType === \"D\" || (changeType.length === 2 && changeType.charAt(1) === \"D\")) {\n result.delete(filename);\n } else {\n if (!excludedPathSet.has(filename)) {\n filesToHash.push(filename);\n }\n }\n }\n\n const currentlyChangedFileHashes: Map<string, string> = getGitHashForFiles(filesToHash, packagePath, gitPath);\n for (const [filename, hash] of currentlyChangedFileHashes) {\n result.set(filename, hash);\n }\n\n return result;\n}\n"],"names":["getGitHashForFiles","getPackageDeps","gitLsTree","gitStatus","parseGitFilename","parseGitLsTree","parseGitStatus","filename","match","replace","octalValue","index","source","trailingBackslashes","slice","length","parseInt","toString","JSON","parse","decodeURIComponent","output","changes","Map","gitRegex","outputLines","trim","split","line","matches","hash","set","Error","changeType","filenameMatches","lastFilename","startsWith","join","trimRight","filesToHash","packagePath","gitPath","result","execa","sync","input","map","x","path","resolve","exitCode","stderr","hashStdout","stdout","hashes","i","filePath","cwd","process","excludedPaths","gitLsOutput","excludedPath","delete","gitStatusOutput","currentlyChangedFiles","excludedPathSet","Set","charAt","has","push","currentlyChangedFileHashes"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hashStrings.ts"],"sourcesContent":["import crypto from \"crypto\";\n\nexport function hashStrings(strings: string | string[]): string {\n const hasher = crypto.createHash(\"sha1\");\n const anArray = typeof strings === \"string\" ? [strings] : strings;\n const elements = [...anArray];\n elements.sort((a, b) => a.localeCompare(b));\n elements.forEach((element) => hasher.update(element));\n\n return hasher.digest(\"hex\");\n}\n"],"names":["hashStrings","strings","hasher","crypto","createHash","anArray","elements","sort","a","b","localeCompare","forEach","element","update","digest"],"mappings":";;;;+BAEgBA;;;eAAAA;;;+DAFG;;;;;;AAEZ,SAASA,YAAYC,OAA0B;IACpD,MAAMC,SAASC,eAAM,CAACC,UAAU,CAAC;IACjC,MAAMC,UAAU,OAAOJ,YAAY,WAAW;QAACA;KAAQ,GAAGA;IAC1D,MAAMK,WAAW;WAAID;KAAQ;IAC7BC,SAASC,IAAI,CAAC,CAACC,GAAGC,IAAMD,EAAEE,aAAa,CAACD;IACxCH,SAASK,OAAO,CAAC,CAACC,UAAYV,OAAOW,MAAM,CAACD;IAE5C,OAAOV,OAAOY,MAAM,CAAC;AACvB"}
package/lib/index.js CHANGED
@@ -9,12 +9,12 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- TargetHasher: function() {
13
- return _TargetHasher.TargetHasher;
14
- },
15
12
  PackageTree: function() {
16
13
  return _PackageTree.PackageTree;
17
14
  },
15
+ TargetHasher: function() {
16
+ return _TargetHasher.TargetHasher;
17
+ },
18
18
  getInputFiles: function() {
19
19
  return _getInputFiles.getInputFiles;
20
20
  }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { TargetHasher } from \"./TargetHasher.js\";\nexport { PackageTree } from \"./PackageTree.js\";\nexport { getInputFiles } from \"./getInputFiles.js\";\n"],"names":["PackageTree","TargetHasher","getInputFiles"],"mappings":";;;;;;;;;;;IACSA,WAAW;eAAXA,wBAAW;;IADXC,YAAY;eAAZA,0BAAY;;IAEZC,aAAa;eAAbA,4BAAa;;;8BAFO;6BACD;+BACE"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/nameAtVersion.ts"],"sourcesContent":["export function nameAtVersion(name: string, version: string): string {\n return `${name}@${version}`;\n}\n"],"names":["nameAtVersion","name","version"],"mappings":";;;;+BAAgBA;;;eAAAA;;;AAAT,SAASA,cAAcC,IAAY,EAAEC,OAAe;IACzD,OAAO,GAAGD,KAAK,CAAC,EAAEC,SAAS;AAC7B"}
@@ -9,12 +9,12 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- filterExternalDependencies: function() {
13
- return filterExternalDependencies;
14
- },
15
12
  addToQueue: function() {
16
13
  return addToQueue;
17
14
  },
15
+ filterExternalDependencies: function() {
16
+ return filterExternalDependencies;
17
+ },
18
18
  resolveExternalDependencies: function() {
19
19
  return resolveExternalDependencies;
20
20
  }
@@ -64,7 +64,7 @@ function resolveExternalDependencies(allDependencies, workspaces, lockInfo) {
64
64
  doneRange.push((0, _nameAtVersion.nameAtVersion)(name, versionRange));
65
65
  const lockFileResult = (0, _workspacetools.queryLockFile)(name, versionRange, lockInfo);
66
66
  if (lockFileResult) {
67
- const { version , dependencies } = lockFileResult;
67
+ const { version, dependencies } = lockFileResult;
68
68
  addToQueue(dependencies, doneRange, queue);
69
69
  done.push((0, _nameAtVersion.nameAtVersion)(name, version));
70
70
  } else {
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resolveExternalDependencies.ts"],"sourcesContent":["import type { ParsedLock, WorkspaceInfo } from \"workspace-tools\";\nimport { queryLockFile, listOfWorkspacePackageNames } from \"workspace-tools\";\nimport { nameAtVersion } from \"./nameAtVersion.js\";\n\nexport type Dependencies = { [key in string]: string };\n\nexport type ExternalDependenciesQueue = {\n name: string;\n versionRange: string;\n}[];\n\nexport function filterExternalDependencies(dependencies: Dependencies, workspaces: WorkspaceInfo): Dependencies {\n const workspacePackageNames = listOfWorkspacePackageNames(workspaces);\n const externalDependencies: Dependencies = {};\n\n Object.entries(dependencies).forEach(([name, versionRange]) => {\n if (workspacePackageNames.indexOf(name) < 0) {\n externalDependencies[name] = versionRange;\n }\n });\n\n return externalDependencies;\n}\n\nfunction isDone(done: string[], key: string): boolean {\n return done.indexOf(key) >= 0;\n}\n\nfunction isInQueue(queue: [string, string][], key: string): boolean {\n return Boolean(queue.find(([name, versionRange]) => nameAtVersion(name, versionRange) === key));\n}\n\nexport function addToQueue(dependencies: Dependencies | undefined, done: string[], queue: [string, string][]): void {\n if (dependencies) {\n Object.entries(dependencies).forEach(([name, versionRange]) => {\n const versionRangeSignature = nameAtVersion(name, versionRange);\n\n if (!isDone(done, versionRangeSignature) && !isInQueue(queue, versionRangeSignature)) {\n queue.push([name, versionRange]);\n }\n });\n }\n}\n\nexport function resolveExternalDependencies(allDependencies: Dependencies, workspaces: WorkspaceInfo, lockInfo: ParsedLock): string[] {\n const externalDependencies = filterExternalDependencies(allDependencies, workspaces);\n\n const done: string[] = [];\n const doneRange: string[] = [];\n const queue = Object.entries(externalDependencies);\n\n while (queue.length > 0) {\n const next = queue.shift();\n\n if (!next) {\n continue;\n }\n\n const [name, versionRange] = next;\n doneRange.push(nameAtVersion(name, versionRange));\n\n const lockFileResult = queryLockFile(name, versionRange, lockInfo);\n\n if (lockFileResult) {\n const { version, dependencies } = lockFileResult;\n\n addToQueue(dependencies, doneRange, queue);\n done.push(nameAtVersion(name, version));\n } else {\n done.push(nameAtVersion(name, versionRange));\n }\n }\n\n return done;\n}\n"],"names":["addToQueue","filterExternalDependencies","resolveExternalDependencies","dependencies","workspaces","workspacePackageNames","listOfWorkspacePackageNames","externalDependencies","Object","entries","forEach","name","versionRange","indexOf","isDone","done","key","isInQueue","queue","Boolean","find","nameAtVersion","versionRangeSignature","push","allDependencies","lockInfo","doneRange","length","next","shift","lockFileResult","queryLockFile","version"],"mappings":";;;;;;;;;;;IAgCgBA,UAAU;eAAVA;;IArBAC,0BAA0B;eAA1BA;;IAiCAC,2BAA2B;eAA3BA;;;gCA3C2C;+BAC7B;AASvB,SAASD,2BAA2BE,YAA0B,EAAEC,UAAyB;IAC9F,MAAMC,wBAAwBC,IAAAA,2CAA2B,EAACF;IAC1D,MAAMG,uBAAqC,CAAC;IAE5CC,OAAOC,OAAO,CAACN,cAAcO,OAAO,CAAC,CAAC,CAACC,MAAMC,aAAa;QACxD,IAAIP,sBAAsBQ,OAAO,CAACF,QAAQ,GAAG;YAC3CJ,oBAAoB,CAACI,KAAK,GAAGC;QAC/B;IACF;IAEA,OAAOL;AACT;AAEA,SAASO,OAAOC,IAAc,EAAEC,GAAW;IACzC,OAAOD,KAAKF,OAAO,CAACG,QAAQ;AAC9B;AAEA,SAASC,UAAUC,KAAyB,EAAEF,GAAW;IACvD,OAAOG,QAAQD,MAAME,IAAI,CAAC,CAAC,CAACT,MAAMC,aAAa,GAAKS,IAAAA,4BAAa,EAACV,MAAMC,kBAAkBI;AAC5F;AAEO,SAAShB,WAAWG,YAAsC,EAAEY,IAAc,EAAEG,KAAyB;IAC1G,IAAIf,cAAc;QAChBK,OAAOC,OAAO,CAACN,cAAcO,OAAO,CAAC,CAAC,CAACC,MAAMC,aAAa;YACxD,MAAMU,wBAAwBD,IAAAA,4BAAa,EAACV,MAAMC;YAElD,IAAI,CAACE,OAAOC,MAAMO,0BAA0B,CAACL,UAAUC,OAAOI,wBAAwB;gBACpFJ,MAAMK,IAAI,CAAC;oBAACZ;oBAAMC;iBAAa;YACjC;QACF;IACF;AACF;AAEO,SAASV,4BAA4BsB,eAA6B,EAAEpB,UAAyB,EAAEqB,QAAoB;IACxH,MAAMlB,uBAAuBN,2BAA2BuB,iBAAiBpB;IAEzE,MAAMW,OAAiB,EAAE;IACzB,MAAMW,YAAsB,EAAE;IAC9B,MAAMR,QAAQV,OAAOC,OAAO,CAACF;IAE7B,MAAOW,MAAMS,MAAM,GAAG,EAAG;QACvB,MAAMC,OAAOV,MAAMW,KAAK;QAExB,IAAI,CAACD,MAAM;YACT;QACF;QAEA,MAAM,CAACjB,MAAMC,aAAa,GAAGgB;QAC7BF,UAAUH,IAAI,CAACF,IAAAA,4BAAa,EAACV,MAAMC;QAEnC,MAAMkB,iBAAiBC,IAAAA,6BAAa,EAACpB,MAAMC,cAAca;QAEzD,IAAIK,gBAAgB;YAClB,MAAM,EAAEE,OAAO,EAAE7B,YAAY,EAAE,GAAG2B;YAElC9B,WAAWG,cAAcuB,WAAWR;YACpCH,KAAKQ,IAAI,CAACF,IAAAA,4BAAa,EAACV,MAAMqB;QAChC,OAAO;YACLjB,KAAKQ,IAAI,CAACF,IAAAA,4BAAa,EAACV,MAAMC;QAChC;IACF;IAEA,OAAOG;AACT"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resolveInternalDependencies.ts"],"sourcesContent":["import type { WorkspaceInfo } from \"workspace-tools\";\nimport { listOfWorkspacePackageNames } from \"workspace-tools\";\n\nexport type Dependencies = { [key in string]: string };\n\nexport function filterInternalDependencies(dependencies: Dependencies, workspaces: WorkspaceInfo): string[] {\n const workspacePackageNames = listOfWorkspacePackageNames(workspaces);\n return Object.keys(dependencies).filter((dependency) => workspacePackageNames.indexOf(dependency) >= 0);\n}\n\nexport function resolveInternalDependencies(allDependencies: Dependencies, workspaces: WorkspaceInfo): string[] {\n const dependencyNames = filterInternalDependencies(allDependencies, workspaces);\n\n return dependencyNames;\n}\n"],"names":["filterInternalDependencies","resolveInternalDependencies","dependencies","workspaces","workspacePackageNames","listOfWorkspacePackageNames","Object","keys","filter","dependency","indexOf","allDependencies","dependencyNames"],"mappings":";;;;;;;;;;;IAKgBA,0BAA0B;eAA1BA;;IAKAC,2BAA2B;eAA3BA;;;gCAT4B;AAIrC,SAASD,2BAA2BE,YAA0B,EAAEC,UAAyB;IAC9F,MAAMC,wBAAwBC,IAAAA,2CAA2B,EAACF;IAC1D,OAAOG,OAAOC,IAAI,CAACL,cAAcM,MAAM,CAAC,CAACC,aAAeL,sBAAsBM,OAAO,CAACD,eAAe;AACvG;AAEO,SAASR,4BAA4BU,eAA6B,EAAER,UAAyB;IAClG,MAAMS,kBAAkBZ,2BAA2BW,iBAAiBR;IAEpE,OAAOS;AACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lage-run/hasher",
3
- "version": "1.6.2",
3
+ "version": "1.6.4",
4
4
  "description": "Hasher for Lage Targets",
5
5
  "repository": {
6
6
  "url": "https://github.com/microsoft/lage"
@@ -17,12 +17,12 @@
17
17
  "dependencies": {
18
18
  "@lage-run/globby": "^14.2.0",
19
19
  "@lage-run/logger": "^1.3.1",
20
- "@lage-run/target-graph": "^0.9.2",
20
+ "@lage-run/target-graph": "^0.10.0",
21
21
  "execa": "5.1.1",
22
22
  "glob-hasher": "^1.4.2",
23
23
  "graceful-fs": "4.2.11",
24
24
  "micromatch": "4.0.8",
25
- "workspace-tools": "0.36.4"
25
+ "workspace-tools": "0.37.0"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@lage-run/monorepo-fixture": "*",