@lage-run/hasher 0.1.1 → 0.1.2
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 +16 -1
- package/CHANGELOG.md +10 -2
- package/lib/__tests__/createPackageHashes.test.js +13 -12
- package/lib/__tests__/getPackageDeps.test.js +149 -131
- package/lib/__tests__/getRepoDeps.test.js +106 -91
- package/lib/__tests__/getRepoState.test.js +70 -33
- package/lib/__tests__/hashOfFiles.test.js +71 -68
- package/lib/__tests__/helpers.test.js +12 -11
- package/lib/__tests__/index.test.js +50 -39
- package/lib/__tests__/resolveDependenciesHelper.js +44 -25
- package/lib/__tests__/resolveExternalDependencies.test.js +114 -68
- package/lib/__tests__/resolveInternalDependencies.test.js +98 -67
- package/lib/createPackageHashes.js +27 -20
- package/lib/getPackageDeps.js +118 -125
- package/lib/getRepoState.js +86 -101
- package/lib/hashOfFiles.js +59 -53
- package/lib/hashOfPackage.js +41 -28
- package/lib/helpers.js +35 -19
- package/lib/index.js +50 -41
- package/lib/repoInfo.js +26 -29
- package/lib/resolveExternalDependencies.js +32 -22
- package/lib/resolveInternalDependencies.js +16 -8
- package/package.json +2 -2
- package/lib/__fixtures__/config/backfill.config.js +0 -5
- package/lib/__fixtures__/config/backfill.config.js.map +0 -1
- package/lib/__fixtures__/config/packages/package-1/backfill.config.js +0 -2
- package/lib/__fixtures__/config/packages/package-1/backfill.config.js.map +0 -1
- package/lib/__tests__/createPackageHashes.test.js.map +0 -1
- package/lib/__tests__/getPackageDeps.test.js.map +0 -1
- package/lib/__tests__/getRepoDeps.test.js.map +0 -1
- package/lib/__tests__/getRepoState.test.js.map +0 -1
- package/lib/__tests__/hashOfFiles.test.js.map +0 -1
- package/lib/__tests__/helpers.test.js.map +0 -1
- package/lib/__tests__/index.test.js.map +0 -1
- package/lib/__tests__/resolveDependenciesHelper.js.map +0 -1
- package/lib/__tests__/resolveExternalDependencies.test.js.map +0 -1
- package/lib/__tests__/resolveInternalDependencies.test.js.map +0 -1
- package/lib/createPackageHashes.js.map +0 -1
- package/lib/getPackageDeps.js.map +0 -1
- package/lib/getRepoState.js.map +0 -1
- package/lib/hashOfFiles.js.map +0 -1
- package/lib/hashOfPackage.js.map +0 -1
- package/lib/helpers.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/repoInfo.js.map +0 -1
- package/lib/resolveExternalDependencies.js.map +0 -1
- package/lib/resolveInternalDependencies.js.map +0 -1
package/lib/hashOfFiles.js
CHANGED
|
@@ -1,65 +1,71 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "generateHashOfFiles", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: ()=>generateHashOfFiles
|
|
17
8
|
});
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
9
|
+
const _path = /*#__PURE__*/ _interopRequireWildcard(require("path"));
|
|
10
|
+
const _helpersJs = require("./helpers.js");
|
|
11
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
12
|
+
if (typeof WeakMap !== "function") return null;
|
|
13
|
+
var cacheBabelInterop = new WeakMap();
|
|
14
|
+
var cacheNodeInterop = new WeakMap();
|
|
15
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
16
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
17
|
+
})(nodeInterop);
|
|
18
|
+
}
|
|
19
|
+
function _interopRequireWildcard(obj, nodeInterop) {
|
|
20
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
21
|
+
return obj;
|
|
22
|
+
}
|
|
23
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
24
|
+
return {
|
|
25
|
+
default: obj
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
29
|
+
if (cache && cache.has(obj)) {
|
|
30
|
+
return cache.get(obj);
|
|
31
|
+
}
|
|
32
|
+
var newObj = {};
|
|
33
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
34
|
+
for(var key in obj){
|
|
35
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
36
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
37
|
+
if (desc && (desc.get || desc.set)) {
|
|
38
|
+
Object.defineProperty(newObj, key, desc);
|
|
39
|
+
} else {
|
|
40
|
+
newObj[key] = obj[key];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
newObj.default = obj;
|
|
45
|
+
if (cache) {
|
|
46
|
+
cache.set(obj, newObj);
|
|
47
|
+
}
|
|
48
|
+
return newObj;
|
|
49
|
+
}
|
|
41
50
|
async function generateHashOfFiles(packageRoot, repoInfo) {
|
|
42
|
-
const { repoHashes, root, packageHashes
|
|
51
|
+
const { repoHashes , root , packageHashes } = repoInfo;
|
|
43
52
|
const hashes = [];
|
|
44
|
-
const packageRelativeRoot =
|
|
53
|
+
const packageRelativeRoot = _path.default.relative(root, packageRoot).replace(/\\/g, "/");
|
|
45
54
|
if (packageHashes[packageRelativeRoot]) {
|
|
46
55
|
// Fast path: if files are clearly inside a package as per the packageHashes cache
|
|
47
|
-
for (const hash of packageHashes[packageRelativeRoot])
|
|
56
|
+
for (const hash of packageHashes[packageRelativeRoot]){
|
|
48
57
|
hashes.push(hash[0], hash[1]);
|
|
49
58
|
}
|
|
50
|
-
return (0,
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
59
|
+
return (0, _helpersJs.hashStrings)(hashes);
|
|
60
|
+
} else {
|
|
53
61
|
// Slow old path: if files are not clearly inside a package (mostly the case for malformed monorepos, like tests)
|
|
54
|
-
const normalized =
|
|
55
|
-
const files = Object.keys(repoHashes).filter((f)
|
|
56
|
-
files.sort((a, b)
|
|
57
|
-
const
|
|
58
|
-
for (const file of files)
|
|
59
|
-
|
|
62
|
+
const normalized = _path.default.normalize(packageRoot) + _path.sep;
|
|
63
|
+
const files = Object.keys(repoHashes).filter((f)=>_path.default.join(root, f).includes(normalized));
|
|
64
|
+
files.sort((a, b)=>a.localeCompare(b));
|
|
65
|
+
const hashes1 = [];
|
|
66
|
+
for (const file of files){
|
|
67
|
+
hashes1.push(file, repoHashes[file]);
|
|
60
68
|
}
|
|
61
|
-
return (0,
|
|
69
|
+
return (0, _helpersJs.hashStrings)(hashes1);
|
|
62
70
|
}
|
|
63
71
|
}
|
|
64
|
-
exports.generateHashOfFiles = generateHashOfFiles;
|
|
65
|
-
//# sourceMappingURL=hashOfFiles.js.map
|
package/lib/hashOfPackage.js
CHANGED
|
@@ -1,52 +1,65 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
generateHashOfInternalPackages: ()=>generateHashOfInternalPackages,
|
|
13
|
+
getPackageHash: ()=>getPackageHash
|
|
14
|
+
});
|
|
15
|
+
const _crypto = /*#__PURE__*/ _interopRequireDefault(require("crypto"));
|
|
16
|
+
const _path = /*#__PURE__*/ _interopRequireDefault(require("path"));
|
|
17
|
+
const _fs = /*#__PURE__*/ _interopRequireDefault(require("fs"));
|
|
18
|
+
const _resolveInternalDependenciesJs = require("./resolveInternalDependencies.js");
|
|
19
|
+
const _resolveExternalDependenciesJs = require("./resolveExternalDependencies.js");
|
|
20
|
+
const _hashOfFilesJs = require("./hashOfFiles.js");
|
|
21
|
+
const _helpersJs = require("./helpers.js");
|
|
22
|
+
function _interopRequireDefault(obj) {
|
|
23
|
+
return obj && obj.__esModule ? obj : {
|
|
24
|
+
default: obj
|
|
25
|
+
};
|
|
26
|
+
}
|
|
14
27
|
function generateHashOfInternalPackages(internalPackages) {
|
|
15
|
-
internalPackages.sort((a, b)
|
|
16
|
-
const hasher =
|
|
17
|
-
internalPackages.forEach((pkg)
|
|
28
|
+
internalPackages.sort((a, b)=>a.name.localeCompare(b.name));
|
|
29
|
+
const hasher = _crypto.default.createHash("sha1");
|
|
30
|
+
internalPackages.forEach((pkg)=>{
|
|
18
31
|
hasher.update(pkg.name);
|
|
19
32
|
hasher.update(pkg.filesHash);
|
|
20
33
|
hasher.update(pkg.dependenciesHash);
|
|
21
34
|
});
|
|
22
35
|
return hasher.digest("hex");
|
|
23
36
|
}
|
|
24
|
-
exports.generateHashOfInternalPackages = generateHashOfInternalPackages;
|
|
25
37
|
const memoization = {};
|
|
26
38
|
async function getPackageHash(packageRoot, repoInfo) {
|
|
27
|
-
const { workspaceInfo, parsedLock
|
|
28
|
-
const memoizationKey =
|
|
39
|
+
const { workspaceInfo , parsedLock } = repoInfo;
|
|
40
|
+
const memoizationKey = _path.default.resolve(packageRoot);
|
|
29
41
|
if (memoization[memoizationKey]) {
|
|
30
42
|
return memoization[memoizationKey];
|
|
31
43
|
}
|
|
32
|
-
const { name, dependencies, devDependencies
|
|
44
|
+
const { name , dependencies , devDependencies } = JSON.parse(_fs.default.readFileSync(_path.default.join(packageRoot, "package.json"), "utf-8"));
|
|
33
45
|
const allDependencies = {
|
|
34
46
|
...dependencies,
|
|
35
|
-
...devDependencies
|
|
47
|
+
...devDependencies
|
|
36
48
|
};
|
|
37
|
-
const internalDependencies = (0,
|
|
38
|
-
const externalDeoendencies = (0,
|
|
39
|
-
const resolvedDependencies = [
|
|
40
|
-
|
|
41
|
-
|
|
49
|
+
const internalDependencies = (0, _resolveInternalDependenciesJs.resolveInternalDependencies)(allDependencies, workspaceInfo);
|
|
50
|
+
const externalDeoendencies = (0, _resolveExternalDependenciesJs.resolveExternalDependencies)(allDependencies, workspaceInfo, parsedLock);
|
|
51
|
+
const resolvedDependencies = [
|
|
52
|
+
...internalDependencies,
|
|
53
|
+
...externalDeoendencies
|
|
54
|
+
];
|
|
55
|
+
const filesHash = await (0, _hashOfFilesJs.generateHashOfFiles)(packageRoot, repoInfo);
|
|
56
|
+
const dependenciesHash = (0, _helpersJs.hashStrings)(resolvedDependencies);
|
|
42
57
|
const packageHash = {
|
|
43
58
|
name,
|
|
44
59
|
filesHash,
|
|
45
60
|
dependenciesHash,
|
|
46
|
-
internalDependencies
|
|
61
|
+
internalDependencies
|
|
47
62
|
};
|
|
48
63
|
memoization[memoizationKey] = packageHash;
|
|
49
64
|
return packageHash;
|
|
50
65
|
}
|
|
51
|
-
exports.getPackageHash = getPackageHash;
|
|
52
|
-
//# sourceMappingURL=hashOfPackage.js.map
|
package/lib/helpers.js
CHANGED
|
@@ -1,31 +1,47 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
hashStrings: ()=>hashStrings,
|
|
13
|
+
getPackageRoot: ()=>getPackageRoot,
|
|
14
|
+
nameAtVersion: ()=>nameAtVersion
|
|
15
|
+
});
|
|
16
|
+
const _path = /*#__PURE__*/ _interopRequireDefault(require("path"));
|
|
17
|
+
const _crypto = /*#__PURE__*/ _interopRequireDefault(require("crypto"));
|
|
18
|
+
const _findUp = /*#__PURE__*/ _interopRequireDefault(require("find-up"));
|
|
19
|
+
function _interopRequireDefault(obj) {
|
|
20
|
+
return obj && obj.__esModule ? obj : {
|
|
21
|
+
default: obj
|
|
22
|
+
};
|
|
23
|
+
}
|
|
10
24
|
function hashStrings(strings) {
|
|
11
|
-
const hasher =
|
|
12
|
-
const anArray = typeof strings === "string" ? [
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
elements
|
|
25
|
+
const hasher = _crypto.default.createHash("sha1");
|
|
26
|
+
const anArray = typeof strings === "string" ? [
|
|
27
|
+
strings
|
|
28
|
+
] : strings;
|
|
29
|
+
const elements = [
|
|
30
|
+
...anArray
|
|
31
|
+
];
|
|
32
|
+
elements.sort((a, b)=>a.localeCompare(b));
|
|
33
|
+
elements.forEach((element)=>hasher.update(element));
|
|
16
34
|
return hasher.digest("hex");
|
|
17
35
|
}
|
|
18
|
-
exports.hashStrings = hashStrings;
|
|
19
36
|
async function getPackageRoot(cwd) {
|
|
20
|
-
const packageRoot = await (0,
|
|
37
|
+
const packageRoot = await (0, _findUp.default)("package.json", {
|
|
38
|
+
cwd
|
|
39
|
+
});
|
|
21
40
|
if (!packageRoot) {
|
|
22
41
|
throw new Error(`Could not find package.json inside ${cwd}.`);
|
|
23
42
|
}
|
|
24
|
-
return
|
|
43
|
+
return _path.default.dirname(packageRoot);
|
|
25
44
|
}
|
|
26
|
-
exports.getPackageRoot = getPackageRoot;
|
|
27
45
|
function nameAtVersion(name, version) {
|
|
28
46
|
return `${name}@${version}`;
|
|
29
47
|
}
|
|
30
|
-
exports.nameAtVersion = nameAtVersion;
|
|
31
|
-
//# sourceMappingURL=helpers.js.map
|
package/lib/index.js
CHANGED
|
@@ -1,33 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
})
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
addToQueue: ()=>addToQueue,
|
|
13
|
+
Hasher: ()=>Hasher
|
|
14
|
+
});
|
|
15
|
+
const _workspaceTools = require("workspace-tools");
|
|
16
|
+
const _hashOfPackageJs = require("./hashOfPackage.js");
|
|
17
|
+
const _helpersJs = require("./helpers.js");
|
|
18
|
+
const _repoInfoJs = _exportStar(require("./repoInfo.js"), exports);
|
|
19
|
+
function _exportStar(from, to) {
|
|
20
|
+
Object.keys(from).forEach(function(k) {
|
|
21
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) Object.defineProperty(to, k, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function() {
|
|
24
|
+
return from[k];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
return from;
|
|
29
|
+
}
|
|
22
30
|
function isDone(done, packageName) {
|
|
23
|
-
return Boolean(done.find(({ name
|
|
31
|
+
return Boolean(done.find(({ name })=>name === packageName));
|
|
24
32
|
}
|
|
25
33
|
function isInQueue(queue, packagePath) {
|
|
26
34
|
return queue.indexOf(packagePath) >= 0;
|
|
27
35
|
}
|
|
28
36
|
function addToQueue(dependencyNames, queue, done, workspaces) {
|
|
29
|
-
dependencyNames.forEach((name)
|
|
30
|
-
const dependencyPath = (0,
|
|
37
|
+
dependencyNames.forEach((name)=>{
|
|
38
|
+
const dependencyPath = (0, _workspaceTools.findWorkspacePath)(workspaces, name);
|
|
31
39
|
if (dependencyPath) {
|
|
32
40
|
if (!isDone(done, name) && !isInQueue(queue, dependencyPath)) {
|
|
33
41
|
queue.push(dependencyPath);
|
|
@@ -35,32 +43,33 @@ function addToQueue(dependencyNames, queue, done, workspaces) {
|
|
|
35
43
|
}
|
|
36
44
|
});
|
|
37
45
|
}
|
|
38
|
-
exports.addToQueue = addToQueue;
|
|
39
46
|
class Hasher {
|
|
40
|
-
constructor(packageRoot) {
|
|
41
|
-
this.packageRoot = packageRoot;
|
|
42
|
-
}
|
|
43
47
|
async createPackageHash(salt) {
|
|
44
|
-
const packageRoot = await (0,
|
|
45
|
-
this.repoInfo = await (0,
|
|
46
|
-
const { workspaceInfo
|
|
47
|
-
const queue = [
|
|
48
|
+
const packageRoot = await (0, _helpersJs.getPackageRoot)(this.packageRoot);
|
|
49
|
+
this.repoInfo = await (0, _repoInfoJs.getRepoInfo)(packageRoot);
|
|
50
|
+
const { workspaceInfo } = this.repoInfo;
|
|
51
|
+
const queue = [
|
|
52
|
+
packageRoot
|
|
53
|
+
];
|
|
48
54
|
const done = [];
|
|
49
|
-
while
|
|
50
|
-
const
|
|
51
|
-
if (!
|
|
55
|
+
while(queue.length > 0){
|
|
56
|
+
const packageRoot1 = queue.shift();
|
|
57
|
+
if (!packageRoot1) {
|
|
52
58
|
continue;
|
|
53
59
|
}
|
|
54
|
-
const packageHash = await (0,
|
|
60
|
+
const packageHash = await (0, _hashOfPackageJs.getPackageHash)(packageRoot1, this.repoInfo);
|
|
55
61
|
addToQueue(packageHash.internalDependencies, queue, done, workspaceInfo);
|
|
56
62
|
done.push(packageHash);
|
|
57
63
|
}
|
|
58
|
-
const internalPackagesHash = (0,
|
|
59
|
-
const buildCommandHash = (0,
|
|
60
|
-
const combinedHash = (0,
|
|
64
|
+
const internalPackagesHash = (0, _hashOfPackageJs.generateHashOfInternalPackages)(done);
|
|
65
|
+
const buildCommandHash = (0, _helpersJs.hashStrings)(salt);
|
|
66
|
+
const combinedHash = (0, _helpersJs.hashStrings)([
|
|
67
|
+
internalPackagesHash,
|
|
68
|
+
buildCommandHash
|
|
69
|
+
]);
|
|
61
70
|
return combinedHash;
|
|
62
71
|
}
|
|
72
|
+
constructor(packageRoot){
|
|
73
|
+
this.packageRoot = packageRoot;
|
|
74
|
+
}
|
|
63
75
|
}
|
|
64
|
-
exports.Hasher = Hasher;
|
|
65
|
-
__exportStar(require("./repoInfo.js"), exports);
|
|
66
|
-
//# sourceMappingURL=index.js.map
|
package/lib/repoInfo.js
CHANGED
|
@@ -1,61 +1,60 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
getRepoInfoNoCache: ()=>getRepoInfoNoCache,
|
|
13
|
+
getRepoInfo: ()=>getRepoInfo
|
|
14
|
+
});
|
|
15
|
+
const _workspaceTools = require("workspace-tools");
|
|
16
|
+
const _getPackageDepsJs = require("./getPackageDeps.js");
|
|
17
|
+
const _createPackageHashesJs = require("./createPackageHashes.js");
|
|
7
18
|
const repoInfoCache = [];
|
|
8
19
|
/**
|
|
9
20
|
* repoInfo cache lookup - it is specialized to be using a substring match to make it run as fast as possible
|
|
10
21
|
* @param packageRoot
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
for (const repoInfo of repoInfoCache) {
|
|
22
|
+
*/ function searchRepoInfoCache(packageRoot) {
|
|
23
|
+
for (const repoInfo of repoInfoCache){
|
|
14
24
|
if (repoInfo.workspaceInfo && packageRoot.startsWith(repoInfo.root)) {
|
|
15
25
|
return repoInfo;
|
|
16
26
|
}
|
|
17
27
|
}
|
|
18
28
|
}
|
|
19
29
|
async function getRepoInfoNoCache(cwd) {
|
|
20
|
-
const root = (0,
|
|
30
|
+
const root = (0, _workspaceTools.getWorkspaceRoot)(cwd);
|
|
21
31
|
if (!root) {
|
|
22
32
|
throw new Error("Cannot initialize Repo class without a workspace root");
|
|
23
33
|
}
|
|
24
34
|
// Assuming the package-deps-hash package returns a map of files to hashes that are unordered
|
|
25
|
-
const unorderedRepoHashes = Object.fromEntries((0,
|
|
35
|
+
const unorderedRepoHashes = Object.fromEntries((0, _getPackageDepsJs.getPackageDeps)(root));
|
|
26
36
|
// Sorting repoHash by key because we want to consistent hashing based on the order of the files
|
|
27
|
-
const repoHashes = Object.keys(unorderedRepoHashes)
|
|
28
|
-
.sort((a, b) => a.localeCompare(b))
|
|
29
|
-
.reduce((obj, key) => {
|
|
37
|
+
const repoHashes = Object.keys(unorderedRepoHashes).sort((a, b)=>a.localeCompare(b)).reduce((obj, key)=>{
|
|
30
38
|
obj[key] = unorderedRepoHashes[key];
|
|
31
39
|
return obj;
|
|
32
40
|
}, {});
|
|
33
|
-
const workspaceInfo = (0,
|
|
34
|
-
const parsedLock = await (0,
|
|
35
|
-
const packageHashes = (0,
|
|
41
|
+
const workspaceInfo = (0, _workspaceTools.getWorkspaces)(root);
|
|
42
|
+
const parsedLock = await (0, _workspaceTools.parseLockFile)(root);
|
|
43
|
+
const packageHashes = (0, _createPackageHashesJs.createPackageHashes)(root, workspaceInfo, repoHashes);
|
|
36
44
|
const repoInfo = {
|
|
37
45
|
root,
|
|
38
46
|
workspaceInfo,
|
|
39
47
|
parsedLock,
|
|
40
48
|
repoHashes,
|
|
41
|
-
packageHashes
|
|
49
|
+
packageHashes
|
|
42
50
|
};
|
|
43
51
|
repoInfoCache.push(repoInfo);
|
|
44
52
|
return repoInfo;
|
|
45
53
|
}
|
|
46
|
-
exports.getRepoInfoNoCache = getRepoInfoNoCache;
|
|
47
54
|
// A promise to guarantee the getRepoInfo is done one at a time
|
|
48
55
|
let oneAtATime = Promise.resolve();
|
|
49
|
-
/**
|
|
50
|
-
* Retrieves the repoInfo, one at a time
|
|
51
|
-
*
|
|
52
|
-
* No parallel of this function is allowed; this maximizes the cache hit even
|
|
53
|
-
* though the getWorkspaces and parseLockFile are async functions from workspace-tools
|
|
54
|
-
*
|
|
55
|
-
* @param cwd
|
|
56
|
-
*/
|
|
57
56
|
async function getRepoInfo(cwd) {
|
|
58
|
-
oneAtATime = oneAtATime.then(async ()
|
|
57
|
+
oneAtATime = oneAtATime.then(async ()=>{
|
|
59
58
|
const searchResult = searchRepoInfoCache(cwd);
|
|
60
59
|
if (searchResult) {
|
|
61
60
|
return searchResult;
|
|
@@ -64,5 +63,3 @@ async function getRepoInfo(cwd) {
|
|
|
64
63
|
});
|
|
65
64
|
return oneAtATime;
|
|
66
65
|
}
|
|
67
|
-
exports.getRepoInfo = getRepoInfo;
|
|
68
|
-
//# sourceMappingURL=repoInfo.js.map
|
|
@@ -1,59 +1,69 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
filterExternalDependencies: ()=>filterExternalDependencies,
|
|
13
|
+
addToQueue: ()=>addToQueue,
|
|
14
|
+
resolveExternalDependencies: ()=>resolveExternalDependencies
|
|
15
|
+
});
|
|
16
|
+
const _workspaceTools = require("workspace-tools");
|
|
17
|
+
const _helpersJs = require("./helpers.js");
|
|
6
18
|
function filterExternalDependencies(dependencies, workspaces) {
|
|
7
|
-
const workspacePackageNames = (0,
|
|
19
|
+
const workspacePackageNames = (0, _workspaceTools.listOfWorkspacePackageNames)(workspaces);
|
|
8
20
|
const externalDependencies = {};
|
|
9
|
-
Object.entries(dependencies).forEach(([name, versionRange])
|
|
21
|
+
Object.entries(dependencies).forEach(([name, versionRange])=>{
|
|
10
22
|
if (workspacePackageNames.indexOf(name) < 0) {
|
|
11
23
|
externalDependencies[name] = versionRange;
|
|
12
24
|
}
|
|
13
25
|
});
|
|
14
26
|
return externalDependencies;
|
|
15
27
|
}
|
|
16
|
-
exports.filterExternalDependencies = filterExternalDependencies;
|
|
17
28
|
function isDone(done, key) {
|
|
18
29
|
return done.indexOf(key) >= 0;
|
|
19
30
|
}
|
|
20
31
|
function isInQueue(queue, key) {
|
|
21
|
-
return Boolean(queue.find(([name, versionRange])
|
|
32
|
+
return Boolean(queue.find(([name, versionRange])=>(0, _helpersJs.nameAtVersion)(name, versionRange) === key));
|
|
22
33
|
}
|
|
23
34
|
function addToQueue(dependencies, done, queue) {
|
|
24
35
|
if (dependencies) {
|
|
25
|
-
Object.entries(dependencies).forEach(([name, versionRange])
|
|
26
|
-
const versionRangeSignature = (0,
|
|
36
|
+
Object.entries(dependencies).forEach(([name, versionRange])=>{
|
|
37
|
+
const versionRangeSignature = (0, _helpersJs.nameAtVersion)(name, versionRange);
|
|
27
38
|
if (!isDone(done, versionRangeSignature) && !isInQueue(queue, versionRangeSignature)) {
|
|
28
|
-
queue.push([
|
|
39
|
+
queue.push([
|
|
40
|
+
name,
|
|
41
|
+
versionRange
|
|
42
|
+
]);
|
|
29
43
|
}
|
|
30
44
|
});
|
|
31
45
|
}
|
|
32
46
|
}
|
|
33
|
-
exports.addToQueue = addToQueue;
|
|
34
47
|
function resolveExternalDependencies(allDependencies, workspaces, lockInfo) {
|
|
35
48
|
const externalDependencies = filterExternalDependencies(allDependencies, workspaces);
|
|
36
49
|
const done = [];
|
|
37
50
|
const doneRange = [];
|
|
38
51
|
const queue = Object.entries(externalDependencies);
|
|
39
|
-
while
|
|
52
|
+
while(queue.length > 0){
|
|
40
53
|
const next = queue.shift();
|
|
41
54
|
if (!next) {
|
|
42
55
|
continue;
|
|
43
56
|
}
|
|
44
57
|
const [name, versionRange] = next;
|
|
45
|
-
doneRange.push((0,
|
|
46
|
-
const lockFileResult = (0,
|
|
58
|
+
doneRange.push((0, _helpersJs.nameAtVersion)(name, versionRange));
|
|
59
|
+
const lockFileResult = (0, _workspaceTools.queryLockFile)(name, versionRange, lockInfo);
|
|
47
60
|
if (lockFileResult) {
|
|
48
|
-
const { version, dependencies
|
|
61
|
+
const { version , dependencies } = lockFileResult;
|
|
49
62
|
addToQueue(dependencies, doneRange, queue);
|
|
50
|
-
done.push((0,
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
done.push((0, helpers_js_1.nameAtVersion)(name, versionRange));
|
|
63
|
+
done.push((0, _helpersJs.nameAtVersion)(name, version));
|
|
64
|
+
} else {
|
|
65
|
+
done.push((0, _helpersJs.nameAtVersion)(name, versionRange));
|
|
54
66
|
}
|
|
55
67
|
}
|
|
56
68
|
return done;
|
|
57
69
|
}
|
|
58
|
-
exports.resolveExternalDependencies = resolveExternalDependencies;
|
|
59
|
-
//# sourceMappingURL=resolveExternalDependencies.js.map
|
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
filterInternalDependencies: ()=>filterInternalDependencies,
|
|
13
|
+
resolveInternalDependencies: ()=>resolveInternalDependencies
|
|
14
|
+
});
|
|
15
|
+
const _workspaceTools = require("workspace-tools");
|
|
5
16
|
function filterInternalDependencies(dependencies, workspaces) {
|
|
6
|
-
const workspacePackageNames = (0,
|
|
7
|
-
return Object.keys(dependencies).filter((dependency)
|
|
17
|
+
const workspacePackageNames = (0, _workspaceTools.listOfWorkspacePackageNames)(workspaces);
|
|
18
|
+
return Object.keys(dependencies).filter((dependency)=>workspacePackageNames.indexOf(dependency) >= 0);
|
|
8
19
|
}
|
|
9
|
-
exports.filterInternalDependencies = filterInternalDependencies;
|
|
10
20
|
function resolveInternalDependencies(allDependencies, workspaces) {
|
|
11
21
|
const dependencyNames = filterInternalDependencies(allDependencies, workspaces);
|
|
12
22
|
return dependencyNames;
|
|
13
23
|
}
|
|
14
|
-
exports.resolveInternalDependencies = resolveInternalDependencies;
|
|
15
|
-
//# sourceMappingURL=resolveInternalDependencies.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lage-run/hasher",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Hasher for Lage Targets",
|
|
5
5
|
"repository": {
|
|
6
6
|
"url": "https://github.com/microsoft/lage"
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"execa": "5.1.1",
|
|
19
|
-
"workspace-tools": "0.29.
|
|
19
|
+
"workspace-tools": "0.29.1",
|
|
20
20
|
"find-up": "^5.0.0"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"backfill.config.js","sourceRoot":"","sources":["../../../src/__fixtures__/config/backfill.config.js"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,GAAG;IACf,mBAAmB,EAAE,KAAK;CAC3B,CAAC"}
|