@lage-run/hasher 1.6.4 → 1.6.6
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 +37 -1
- package/CHANGELOG.md +19 -2
- package/lib/PackageTree.js +1 -0
- package/lib/PackageTree.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.json
CHANGED
|
@@ -2,7 +2,43 @@
|
|
|
2
2
|
"name": "@lage-run/hasher",
|
|
3
3
|
"entries": [
|
|
4
4
|
{
|
|
5
|
-
"date": "
|
|
5
|
+
"date": "Wed, 20 Nov 2024 08:12:07 GMT",
|
|
6
|
+
"version": "1.6.6",
|
|
7
|
+
"tag": "@lage-run/hasher_v1.6.6",
|
|
8
|
+
"comments": {
|
|
9
|
+
"patch": [
|
|
10
|
+
{
|
|
11
|
+
"author": "email not defined",
|
|
12
|
+
"package": "@lage-run/hasher",
|
|
13
|
+
"commit": "c6e9f4e5339a897dd06a54fe528a1fadd75db243",
|
|
14
|
+
"comment": "Update dependency workspace-tools to v0.38.1"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"author": "beachball",
|
|
18
|
+
"package": "@lage-run/hasher",
|
|
19
|
+
"comment": "Bump @lage-run/target-graph to v0.10.1",
|
|
20
|
+
"commit": "not available"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"date": "Mon, 18 Nov 2024 23:22:30 GMT",
|
|
27
|
+
"version": "1.6.5",
|
|
28
|
+
"tag": "@lage-run/hasher_v1.6.5",
|
|
29
|
+
"comments": {
|
|
30
|
+
"patch": [
|
|
31
|
+
{
|
|
32
|
+
"author": "slivanov@microsoft.com",
|
|
33
|
+
"package": "@lage-run/hasher",
|
|
34
|
+
"commit": "b09af7d39215a3126d9d2a026021f44befdaca54",
|
|
35
|
+
"comment": "Fix git command for getting untracked files in PackageTree.ts"
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"date": "Fri, 08 Nov 2024 19:45:09 GMT",
|
|
6
42
|
"version": "1.6.4",
|
|
7
43
|
"tag": "@lage-run/hasher_v1.6.4",
|
|
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
|
|
3
|
+
<!-- This log was last generated on Wed, 20 Nov 2024 08:12:07 GMT and should not be manually modified. -->
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
+
## 1.6.6
|
|
8
|
+
|
|
9
|
+
Wed, 20 Nov 2024 08:12:07 GMT
|
|
10
|
+
|
|
11
|
+
### Patches
|
|
12
|
+
|
|
13
|
+
- Update dependency workspace-tools to v0.38.1 (email not defined)
|
|
14
|
+
- Bump @lage-run/target-graph to v0.10.1
|
|
15
|
+
|
|
16
|
+
## 1.6.5
|
|
17
|
+
|
|
18
|
+
Mon, 18 Nov 2024 23:22:30 GMT
|
|
19
|
+
|
|
20
|
+
### Patches
|
|
21
|
+
|
|
22
|
+
- Fix git command for getting untracked files in PackageTree.ts (slivanov@microsoft.com)
|
|
23
|
+
|
|
7
24
|
## 1.6.4
|
|
8
25
|
|
|
9
|
-
Fri, 08 Nov 2024 19:
|
|
26
|
+
Fri, 08 Nov 2024 19:45:09 GMT
|
|
10
27
|
|
|
11
28
|
### Patches
|
|
12
29
|
|
package/lib/PackageTree.js
CHANGED
package/lib/PackageTree.js.map
CHANGED
|
@@ -1 +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;
|
|
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\", \"-z\", \"--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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lage-run/hasher",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.6",
|
|
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.10.
|
|
20
|
+
"@lage-run/target-graph": "^0.10.1",
|
|
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.
|
|
25
|
+
"workspace-tools": "0.38.1"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@lage-run/monorepo-fixture": "*",
|