@proteinjs/reflection-build 2.0.1 → 2.0.3
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.md +16 -0
- package/package.json +5 -5
- package/test/examples/source-repository/a/node_modules/.package-lock.json +13 -13
- package/test/examples/source-repository/a/node_modules/@proteinjs/util/CHANGELOG.md +8 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util/LICENSE +21 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util/package.json +3 -2
- package/test/examples/source-repository/a/node_modules/@proteinjs/util/tsconfig.json +1 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/CHANGELOG.md +63 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/LICENSE +21 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/index.d.ts +1 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/index.js +1 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/index.js.map +1 -1
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/src/ArgsMap.js +7 -4
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/src/ArgsMap.js.map +1 -1
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/src/Fs.js +16 -12
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/src/Fs.js.map +1 -1
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/src/PackageUtil.d.ts +59 -13
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/src/PackageUtil.js +119 -80
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/src/PackageUtil.js.map +1 -1
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/src/WorkspaceDeclaration.d.ts +91 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/src/WorkspaceDeclaration.js +608 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/src/WorkspaceDeclaration.js.map +1 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/src/promisifiedFs.d.ts +0 -1
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/index.ts +1 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/package.json +4 -3
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/src/ArgsMap.ts +7 -4
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/src/Fs.ts +12 -9
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/src/PackageUtil.ts +92 -38
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/src/WorkspaceDeclaration.ts +340 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/test/ArgsMap.test.ts +35 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/test/Fs.getFilePathsMatchingGlob.test.ts +70 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/test/PackageUtil.getLocalPackageMap.test.ts +107 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/test/PackageUtil.pathKeyedIdentity.test.ts +169 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/test/WorkspaceDeclaration.test.ts +174 -0
- package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/tsconfig.json +1 -0
- package/test/examples/source-repository/a/package-lock.json +16 -16
- package/test/examples/source-repository/a/package.json +3 -3
- package/test/examples/source-repository/b/node_modules/.package-lock.json +10 -10
- package/test/examples/source-repository/b/node_modules/@proteinjs/util/CHANGELOG.md +8 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util/LICENSE +21 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util/package.json +3 -2
- package/test/examples/source-repository/b/node_modules/@proteinjs/util/tsconfig.json +1 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/CHANGELOG.md +63 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/LICENSE +21 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/index.d.ts +1 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/index.js +1 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/index.js.map +1 -1
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/src/ArgsMap.js +7 -4
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/src/ArgsMap.js.map +1 -1
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/src/Fs.js +16 -12
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/src/Fs.js.map +1 -1
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/src/PackageUtil.d.ts +59 -13
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/src/PackageUtil.js +119 -80
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/src/PackageUtil.js.map +1 -1
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/src/WorkspaceDeclaration.d.ts +91 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/src/WorkspaceDeclaration.js +608 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/src/WorkspaceDeclaration.js.map +1 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/src/promisifiedFs.d.ts +0 -1
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/index.ts +1 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/package.json +4 -3
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/src/ArgsMap.ts +7 -4
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/src/Fs.ts +12 -9
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/src/PackageUtil.ts +92 -38
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/src/WorkspaceDeclaration.ts +340 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/test/ArgsMap.test.ts +35 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/test/Fs.getFilePathsMatchingGlob.test.ts +70 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/test/PackageUtil.getLocalPackageMap.test.ts +107 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/test/PackageUtil.pathKeyedIdentity.test.ts +169 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/test/WorkspaceDeclaration.test.ts +174 -0
- package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/tsconfig.json +1 -0
- package/test/examples/source-repository/b/package-lock.json +13 -13
- package/test/examples/source-repository/b/package.json +3 -3
|
@@ -0,0 +1,608 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __assign = (this && this.__assign) || function () {
|
|
18
|
+
__assign = Object.assign || function(t) {
|
|
19
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
20
|
+
s = arguments[i];
|
|
21
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
22
|
+
t[p] = s[p];
|
|
23
|
+
}
|
|
24
|
+
return t;
|
|
25
|
+
};
|
|
26
|
+
return __assign.apply(this, arguments);
|
|
27
|
+
};
|
|
28
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
29
|
+
if (k2 === undefined) k2 = k;
|
|
30
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
31
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
32
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
33
|
+
}
|
|
34
|
+
Object.defineProperty(o, k2, desc);
|
|
35
|
+
}) : (function(o, m, k, k2) {
|
|
36
|
+
if (k2 === undefined) k2 = k;
|
|
37
|
+
o[k2] = m[k];
|
|
38
|
+
}));
|
|
39
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
40
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
41
|
+
}) : function(o, v) {
|
|
42
|
+
o["default"] = v;
|
|
43
|
+
});
|
|
44
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
45
|
+
if (mod && mod.__esModule) return mod;
|
|
46
|
+
var result = {};
|
|
47
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
48
|
+
__setModuleDefault(result, mod);
|
|
49
|
+
return result;
|
|
50
|
+
};
|
|
51
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
52
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
53
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
54
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
55
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
56
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
57
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
61
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
62
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
63
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
64
|
+
function step(op) {
|
|
65
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
66
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
67
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
68
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
69
|
+
switch (op[0]) {
|
|
70
|
+
case 0: case 1: t = op; break;
|
|
71
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
72
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
73
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
74
|
+
default:
|
|
75
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
76
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
77
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
78
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
79
|
+
if (t[2]) _.ops.pop();
|
|
80
|
+
_.trys.pop(); continue;
|
|
81
|
+
}
|
|
82
|
+
op = body.call(thisArg, _);
|
|
83
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
84
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
88
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
89
|
+
if (ar || !(i in from)) {
|
|
90
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
91
|
+
ar[i] = from[i];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
95
|
+
};
|
|
96
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
97
|
+
exports.WorkspaceDeclaration = exports.WorkspaceDeclarationError = void 0;
|
|
98
|
+
var path = __importStar(require("path"));
|
|
99
|
+
var fs = __importStar(require("fs/promises"));
|
|
100
|
+
/** A declared-workspace rule was broken. The message names every path involved. */
|
|
101
|
+
var WorkspaceDeclarationError = /** @class */ (function (_super) {
|
|
102
|
+
__extends(WorkspaceDeclarationError, _super);
|
|
103
|
+
function WorkspaceDeclarationError(message) {
|
|
104
|
+
var _this = _super.call(this, message) || this;
|
|
105
|
+
_this.name = 'WorkspaceDeclarationError';
|
|
106
|
+
Object.setPrototypeOf(_this, WorkspaceDeclarationError.prototype); // ES5 target: keep instanceof true across the Error subclass
|
|
107
|
+
return _this;
|
|
108
|
+
}
|
|
109
|
+
return WorkspaceDeclarationError;
|
|
110
|
+
}(Error));
|
|
111
|
+
exports.WorkspaceDeclarationError = WorkspaceDeclarationError;
|
|
112
|
+
/**
|
|
113
|
+
* The ONE owner of workspace membership: which package.json files belong to the workspace rooted
|
|
114
|
+
* at a directory.
|
|
115
|
+
*
|
|
116
|
+
* Membership is DECLARED, never crawled. A directory holding a `lerna.json` (its `packages`
|
|
117
|
+
* globs; lerna's own default `packages/*` when the field is absent) or a root `package.json`
|
|
118
|
+
* carrying `workspacePackages` (extra roots the workspace tooling builds alongside lerna's
|
|
119
|
+
* members — e.g. an app's `ops/*` tools that lerna must not version) is a workspace ROOT. Its
|
|
120
|
+
* members are exactly what it declares, and it OWNS its subtree: nothing undeclared beneath it is
|
|
121
|
+
* a member, however the tree is walked from above. A member that is itself a root expands through
|
|
122
|
+
* its own declaration (the metarepo's nested lerna roots).
|
|
123
|
+
*
|
|
124
|
+
* Why: the previous crawl (every package.json under the root, keyed by name, last path wins)
|
|
125
|
+
* let a CI fixture tree whose package.json files reused the app's own package names shadow the
|
|
126
|
+
* real packages — build-workspace built "1 package in workspace" and the release image shipped
|
|
127
|
+
* with no server dist (n3xah/app Deploy to Test run 33747781291, 2026-09-03). A declaration
|
|
128
|
+
* cannot be shadowed by a file nobody declared.
|
|
129
|
+
*
|
|
130
|
+
* A tree with no declaration at its root (the n3xa metarepo root) still crawls — bounded exactly
|
|
131
|
+
* as before: never into hidden directories, `node_modules`, `dist`, or through symlinks — and
|
|
132
|
+
* hands every declared root it meets to that root's declaration.
|
|
133
|
+
*
|
|
134
|
+
* Hard errors, each naming its paths: a declared literal path with no package.json; two leaf
|
|
135
|
+
* packages sharing a name (dependencies resolve to members BY NAME). Containers — a package.json
|
|
136
|
+
* with members beneath it; every root in the metarepo is named `root` — are identified by path
|
|
137
|
+
* and exempt from the name rule.
|
|
138
|
+
*
|
|
139
|
+
* npm's own `workspaces` field is deliberately NOT read: it changes how `npm i` installs at the
|
|
140
|
+
* root, which is a different install model from the per-package installs this tooling performs.
|
|
141
|
+
*/
|
|
142
|
+
var WorkspaceDeclaration = /** @class */ (function () {
|
|
143
|
+
function WorkspaceDeclaration() {
|
|
144
|
+
}
|
|
145
|
+
/** Every member package.json of the workspace rooted at `rootDir`, sorted by path. */
|
|
146
|
+
WorkspaceDeclaration.discover = function (rootDir) {
|
|
147
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
148
|
+
var found, root, declaration, discovered;
|
|
149
|
+
return __generator(this, function (_a) {
|
|
150
|
+
switch (_a.label) {
|
|
151
|
+
case 0:
|
|
152
|
+
found = new Map();
|
|
153
|
+
root = path.resolve(rootDir);
|
|
154
|
+
return [4 /*yield*/, WorkspaceDeclaration.read(root)];
|
|
155
|
+
case 1:
|
|
156
|
+
declaration = _a.sent();
|
|
157
|
+
if (!declaration) return [3 /*break*/, 3];
|
|
158
|
+
return [4 /*yield*/, WorkspaceDeclaration.discoverDeclared(declaration, found)];
|
|
159
|
+
case 2:
|
|
160
|
+
_a.sent();
|
|
161
|
+
return [3 /*break*/, 5];
|
|
162
|
+
case 3: return [4 /*yield*/, WorkspaceDeclaration.crawl(root, found)];
|
|
163
|
+
case 4:
|
|
164
|
+
_a.sent();
|
|
165
|
+
_a.label = 5;
|
|
166
|
+
case 5:
|
|
167
|
+
discovered = Array.from(found.values()).sort(function (a, b) {
|
|
168
|
+
return a.filePath < b.filePath ? -1 : a.filePath > b.filePath ? 1 : 0;
|
|
169
|
+
});
|
|
170
|
+
WorkspaceDeclaration.assertNoLeafNameCollisions(discovered);
|
|
171
|
+
return [2 /*return*/, discovered];
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
};
|
|
176
|
+
/** The declaration at `dir` when `dir` is a workspace root; undefined otherwise. */
|
|
177
|
+
WorkspaceDeclaration.read = function (dir) {
|
|
178
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
179
|
+
var patterns, lernaPath, lernaJson, declared, _i, declared_1, pattern, packageJsonPath, packageJson, extra, _a, extra_1, pattern;
|
|
180
|
+
return __generator(this, function (_b) {
|
|
181
|
+
switch (_b.label) {
|
|
182
|
+
case 0:
|
|
183
|
+
patterns = [];
|
|
184
|
+
lernaPath = path.join(dir, 'lerna.json');
|
|
185
|
+
return [4 /*yield*/, WorkspaceDeclaration.readJsonIfExists(lernaPath)];
|
|
186
|
+
case 1:
|
|
187
|
+
lernaJson = _b.sent();
|
|
188
|
+
if (lernaJson) {
|
|
189
|
+
declared = Array.isArray(lernaJson.packages)
|
|
190
|
+
? lernaJson.packages
|
|
191
|
+
: WorkspaceDeclaration.lernaDefaultPackages;
|
|
192
|
+
for (_i = 0, declared_1 = declared; _i < declared_1.length; _i++) {
|
|
193
|
+
pattern = declared_1[_i];
|
|
194
|
+
patterns.push({ pattern: WorkspaceDeclaration.assertPattern(pattern, lernaPath), source: lernaPath });
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
packageJsonPath = path.join(dir, 'package.json');
|
|
198
|
+
return [4 /*yield*/, WorkspaceDeclaration.readJsonIfExists(packageJsonPath)];
|
|
199
|
+
case 2:
|
|
200
|
+
packageJson = _b.sent();
|
|
201
|
+
extra = packageJson === null || packageJson === void 0 ? void 0 : packageJson[WorkspaceDeclaration.EXTRA_PACKAGES_FIELD];
|
|
202
|
+
if (extra !== undefined) {
|
|
203
|
+
if (!Array.isArray(extra)) {
|
|
204
|
+
throw new WorkspaceDeclarationError("".concat(packageJsonPath, ": \"").concat(WorkspaceDeclaration.EXTRA_PACKAGES_FIELD, "\" must be an array of package globs"));
|
|
205
|
+
}
|
|
206
|
+
for (_a = 0, extra_1 = extra; _a < extra_1.length; _a++) {
|
|
207
|
+
pattern = extra_1[_a];
|
|
208
|
+
patterns.push({
|
|
209
|
+
pattern: WorkspaceDeclaration.assertPattern(pattern, packageJsonPath),
|
|
210
|
+
source: packageJsonPath,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return [2 /*return*/, patterns.length > 0 ? { rootDir: dir, patterns: patterns } : undefined];
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
};
|
|
219
|
+
/** A declared root: its own package.json (the container), then exactly its declared members. */
|
|
220
|
+
WorkspaceDeclaration.discoverDeclared = function (declaration, found) {
|
|
221
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
222
|
+
var own, _i, _a, _b, pattern, source, _c, _d, memberDir, nested;
|
|
223
|
+
return __generator(this, function (_e) {
|
|
224
|
+
switch (_e.label) {
|
|
225
|
+
case 0:
|
|
226
|
+
own = path.join(declaration.rootDir, 'package.json');
|
|
227
|
+
return [4 /*yield*/, WorkspaceDeclaration.exists(own)];
|
|
228
|
+
case 1:
|
|
229
|
+
if (!_e.sent()) return [3 /*break*/, 3];
|
|
230
|
+
return [4 /*yield*/, WorkspaceDeclaration.add(found, own, 'declared', declaration.patterns[0].source)];
|
|
231
|
+
case 2:
|
|
232
|
+
_e.sent();
|
|
233
|
+
_e.label = 3;
|
|
234
|
+
case 3:
|
|
235
|
+
_i = 0, _a = declaration.patterns;
|
|
236
|
+
_e.label = 4;
|
|
237
|
+
case 4:
|
|
238
|
+
if (!(_i < _a.length)) return [3 /*break*/, 13];
|
|
239
|
+
_b = _a[_i], pattern = _b.pattern, source = _b.source;
|
|
240
|
+
_c = 0;
|
|
241
|
+
return [4 /*yield*/, WorkspaceDeclaration.expand(declaration.rootDir, pattern, source)];
|
|
242
|
+
case 5:
|
|
243
|
+
_d = _e.sent();
|
|
244
|
+
_e.label = 6;
|
|
245
|
+
case 6:
|
|
246
|
+
if (!(_c < _d.length)) return [3 /*break*/, 12];
|
|
247
|
+
memberDir = _d[_c];
|
|
248
|
+
return [4 /*yield*/, WorkspaceDeclaration.read(memberDir)];
|
|
249
|
+
case 7:
|
|
250
|
+
nested = _e.sent();
|
|
251
|
+
if (!nested) return [3 /*break*/, 9];
|
|
252
|
+
return [4 /*yield*/, WorkspaceDeclaration.discoverDeclared(nested, found)];
|
|
253
|
+
case 8:
|
|
254
|
+
_e.sent(); // a nested root owns its subtree
|
|
255
|
+
return [3 /*break*/, 11];
|
|
256
|
+
case 9: return [4 /*yield*/, WorkspaceDeclaration.add(found, path.join(memberDir, 'package.json'), 'declared', source)];
|
|
257
|
+
case 10:
|
|
258
|
+
_e.sent();
|
|
259
|
+
_e.label = 11;
|
|
260
|
+
case 11:
|
|
261
|
+
_c++;
|
|
262
|
+
return [3 /*break*/, 6];
|
|
263
|
+
case 12:
|
|
264
|
+
_i++;
|
|
265
|
+
return [3 /*break*/, 4];
|
|
266
|
+
case 13: return [2 /*return*/];
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
};
|
|
271
|
+
/**
|
|
272
|
+
* The bounded walk of an UNDECLARED tree (the metarepo root): every package.json it meets is a
|
|
273
|
+
* member, and every declared root it meets is handed to that root's declaration instead of
|
|
274
|
+
* being walked. Never enters hidden directories, node_modules, or dist; never follows symlinks
|
|
275
|
+
* (`withFileTypes` reports a symlink as neither directory nor file).
|
|
276
|
+
*/
|
|
277
|
+
WorkspaceDeclaration.crawl = function (rootDir, found) {
|
|
278
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
279
|
+
var pending, currentDir, _i, _a, dirent, entryPath, declaration;
|
|
280
|
+
return __generator(this, function (_b) {
|
|
281
|
+
switch (_b.label) {
|
|
282
|
+
case 0:
|
|
283
|
+
pending = [rootDir];
|
|
284
|
+
_b.label = 1;
|
|
285
|
+
case 1:
|
|
286
|
+
if (!(pending.length > 0)) return [3 /*break*/, 12];
|
|
287
|
+
currentDir = pending.pop();
|
|
288
|
+
_i = 0;
|
|
289
|
+
return [4 /*yield*/, fs.readdir(currentDir, { withFileTypes: true })];
|
|
290
|
+
case 2:
|
|
291
|
+
_a = _b.sent();
|
|
292
|
+
_b.label = 3;
|
|
293
|
+
case 3:
|
|
294
|
+
if (!(_i < _a.length)) return [3 /*break*/, 11];
|
|
295
|
+
dirent = _a[_i];
|
|
296
|
+
entryPath = path.join(currentDir, dirent.name);
|
|
297
|
+
if (!dirent.isDirectory()) return [3 /*break*/, 8];
|
|
298
|
+
if (WorkspaceDeclaration.isPrunedDirName(dirent.name)) {
|
|
299
|
+
return [3 /*break*/, 10];
|
|
300
|
+
}
|
|
301
|
+
return [4 /*yield*/, WorkspaceDeclaration.read(entryPath)];
|
|
302
|
+
case 4:
|
|
303
|
+
declaration = _b.sent();
|
|
304
|
+
if (!declaration) return [3 /*break*/, 6];
|
|
305
|
+
return [4 /*yield*/, WorkspaceDeclaration.discoverDeclared(declaration, found)];
|
|
306
|
+
case 5:
|
|
307
|
+
_b.sent();
|
|
308
|
+
return [3 /*break*/, 7];
|
|
309
|
+
case 6:
|
|
310
|
+
pending.push(entryPath);
|
|
311
|
+
_b.label = 7;
|
|
312
|
+
case 7: return [3 /*break*/, 10];
|
|
313
|
+
case 8:
|
|
314
|
+
if (!(dirent.isFile() && dirent.name === 'package.json')) return [3 /*break*/, 10];
|
|
315
|
+
return [4 /*yield*/, WorkspaceDeclaration.add(found, entryPath, 'crawled')];
|
|
316
|
+
case 9:
|
|
317
|
+
_b.sent();
|
|
318
|
+
_b.label = 10;
|
|
319
|
+
case 10:
|
|
320
|
+
_i++;
|
|
321
|
+
return [3 /*break*/, 3];
|
|
322
|
+
case 11: return [3 /*break*/, 1];
|
|
323
|
+
case 12: return [2 /*return*/];
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
};
|
|
328
|
+
/**
|
|
329
|
+
* The directories a declared pattern names under `rootDir`, lerna's semantics: a literal path
|
|
330
|
+
* MUST hold a package.json (hard error otherwise — a declared package that does not exist is
|
|
331
|
+
* a broken declaration, never a silent skip); a glob (`*` within a segment, `**` for any depth)
|
|
332
|
+
* matches directories that hold one, walking with the same prune rules as the crawl. A declared
|
|
333
|
+
* root met inside a glob's walk is matched as a whole and not walked past — it owns its subtree.
|
|
334
|
+
*/
|
|
335
|
+
WorkspaceDeclaration.expand = function (rootDir, pattern, source) {
|
|
336
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
337
|
+
var segments, dir, matches;
|
|
338
|
+
return __generator(this, function (_a) {
|
|
339
|
+
switch (_a.label) {
|
|
340
|
+
case 0:
|
|
341
|
+
segments = pattern.split('/').filter(function (segment) { return segment.length > 0 && segment !== '.'; });
|
|
342
|
+
if (!!segments.some(function (segment) { return segment.includes('*'); })) return [3 /*break*/, 2];
|
|
343
|
+
dir = path.join.apply(path, __spreadArray([rootDir], segments, false));
|
|
344
|
+
return [4 /*yield*/, WorkspaceDeclaration.exists(path.join(dir, 'package.json'))];
|
|
345
|
+
case 1:
|
|
346
|
+
if (!(_a.sent())) {
|
|
347
|
+
throw new WorkspaceDeclarationError("".concat(source, " declares \"").concat(pattern, "\" but ").concat(path.join(dir, 'package.json'), " does not exist \u2014 a declared package must exist (fix the declaration or restore the package)"));
|
|
348
|
+
}
|
|
349
|
+
return [2 /*return*/, [dir]];
|
|
350
|
+
case 2:
|
|
351
|
+
matches = new Set();
|
|
352
|
+
return [4 /*yield*/, WorkspaceDeclaration.matchSegments(rootDir, segments, 0, matches)];
|
|
353
|
+
case 3:
|
|
354
|
+
_a.sent();
|
|
355
|
+
return [2 /*return*/, Array.from(matches).sort()];
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
});
|
|
359
|
+
};
|
|
360
|
+
WorkspaceDeclaration.matchSegments = function (dir, segments, index, matches) {
|
|
361
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
362
|
+
var segment, remaining, _i, _a, child, children, _b, _c, children_1, child, _d;
|
|
363
|
+
return __generator(this, function (_e) {
|
|
364
|
+
switch (_e.label) {
|
|
365
|
+
case 0:
|
|
366
|
+
if (!(index === segments.length)) return [3 /*break*/, 2];
|
|
367
|
+
return [4 /*yield*/, WorkspaceDeclaration.exists(path.join(dir, 'package.json'))];
|
|
368
|
+
case 1:
|
|
369
|
+
if (_e.sent()) {
|
|
370
|
+
matches.add(dir);
|
|
371
|
+
}
|
|
372
|
+
return [2 /*return*/];
|
|
373
|
+
case 2:
|
|
374
|
+
segment = segments[index];
|
|
375
|
+
remaining = segments.length - index - 1;
|
|
376
|
+
if (!(segment === '**')) return [3 /*break*/, 10];
|
|
377
|
+
return [4 /*yield*/, WorkspaceDeclaration.matchSegments(dir, segments, index + 1, matches)];
|
|
378
|
+
case 3:
|
|
379
|
+
_e.sent(); // zero directories
|
|
380
|
+
_i = 0;
|
|
381
|
+
return [4 /*yield*/, WorkspaceDeclaration.childDirs(dir)];
|
|
382
|
+
case 4:
|
|
383
|
+
_a = _e.sent();
|
|
384
|
+
_e.label = 5;
|
|
385
|
+
case 5:
|
|
386
|
+
if (!(_i < _a.length)) return [3 /*break*/, 9];
|
|
387
|
+
child = _a[_i];
|
|
388
|
+
return [4 /*yield*/, WorkspaceDeclaration.read(child)];
|
|
389
|
+
case 6:
|
|
390
|
+
if (_e.sent()) {
|
|
391
|
+
matches.add(child); // a nested root owns its subtree — matched whole, never walked past
|
|
392
|
+
return [3 /*break*/, 8];
|
|
393
|
+
}
|
|
394
|
+
return [4 /*yield*/, WorkspaceDeclaration.matchSegments(child, segments, index, matches)];
|
|
395
|
+
case 7:
|
|
396
|
+
_e.sent(); // one more directory under **
|
|
397
|
+
_e.label = 8;
|
|
398
|
+
case 8:
|
|
399
|
+
_i++;
|
|
400
|
+
return [3 /*break*/, 5];
|
|
401
|
+
case 9: return [2 /*return*/];
|
|
402
|
+
case 10:
|
|
403
|
+
if (!segment.includes('*')) return [3 /*break*/, 12];
|
|
404
|
+
return [4 /*yield*/, WorkspaceDeclaration.childDirs(dir)];
|
|
405
|
+
case 11:
|
|
406
|
+
_b = (_e.sent()).filter(function (child) {
|
|
407
|
+
return WorkspaceDeclaration.segmentMatcher(segment).test(path.basename(child));
|
|
408
|
+
});
|
|
409
|
+
return [3 /*break*/, 14];
|
|
410
|
+
case 12: return [4 /*yield*/, WorkspaceDeclaration.isRealDir(path.join(dir, segment))];
|
|
411
|
+
case 13:
|
|
412
|
+
_b = (_e.sent())
|
|
413
|
+
? [path.join(dir, segment)]
|
|
414
|
+
: [];
|
|
415
|
+
_e.label = 14;
|
|
416
|
+
case 14:
|
|
417
|
+
children = _b;
|
|
418
|
+
_c = 0, children_1 = children;
|
|
419
|
+
_e.label = 15;
|
|
420
|
+
case 15:
|
|
421
|
+
if (!(_c < children_1.length)) return [3 /*break*/, 20];
|
|
422
|
+
child = children_1[_c];
|
|
423
|
+
_d = remaining > 0;
|
|
424
|
+
if (!_d) return [3 /*break*/, 17];
|
|
425
|
+
return [4 /*yield*/, WorkspaceDeclaration.read(child)];
|
|
426
|
+
case 16:
|
|
427
|
+
_d = (_e.sent());
|
|
428
|
+
_e.label = 17;
|
|
429
|
+
case 17:
|
|
430
|
+
if (_d) {
|
|
431
|
+
matches.add(child);
|
|
432
|
+
return [3 /*break*/, 19];
|
|
433
|
+
}
|
|
434
|
+
return [4 /*yield*/, WorkspaceDeclaration.matchSegments(child, segments, index + 1, matches)];
|
|
435
|
+
case 18:
|
|
436
|
+
_e.sent();
|
|
437
|
+
_e.label = 19;
|
|
438
|
+
case 19:
|
|
439
|
+
_c++;
|
|
440
|
+
return [3 /*break*/, 15];
|
|
441
|
+
case 20: return [2 /*return*/];
|
|
442
|
+
}
|
|
443
|
+
});
|
|
444
|
+
});
|
|
445
|
+
};
|
|
446
|
+
/** Leaf packages resolve by name; two leaves with one name is a broken workspace, not a tie to break. */
|
|
447
|
+
WorkspaceDeclaration.assertNoLeafNameCollisions = function (discovered) {
|
|
448
|
+
var _a, _b;
|
|
449
|
+
var dirs = discovered.map(function (entry) { return path.dirname(entry.filePath); });
|
|
450
|
+
var isContainer = function (entry) {
|
|
451
|
+
var prefix = path.dirname(entry.filePath) + path.sep;
|
|
452
|
+
return dirs.some(function (dir) { return dir.startsWith(prefix); });
|
|
453
|
+
};
|
|
454
|
+
var byName = new Map();
|
|
455
|
+
for (var _i = 0, discovered_1 = discovered; _i < discovered_1.length; _i++) {
|
|
456
|
+
var entry = discovered_1[_i];
|
|
457
|
+
var name_1 = (_a = entry.packageJson) === null || _a === void 0 ? void 0 : _a.name;
|
|
458
|
+
if (typeof name_1 !== 'string' || name_1.length === 0) {
|
|
459
|
+
continue;
|
|
460
|
+
}
|
|
461
|
+
byName.set(name_1, ((_b = byName.get(name_1)) !== null && _b !== void 0 ? _b : []).concat(entry));
|
|
462
|
+
}
|
|
463
|
+
var collisions = [];
|
|
464
|
+
for (var _c = 0, _d = Array.from(byName.entries()); _c < _d.length; _c++) {
|
|
465
|
+
var _e = _d[_c], name_2 = _e[0], entries = _e[1];
|
|
466
|
+
var leaves = entries.filter(function (entry) { return !isContainer(entry); });
|
|
467
|
+
if (leaves.length < 2) {
|
|
468
|
+
continue;
|
|
469
|
+
}
|
|
470
|
+
collisions.push("\"".concat(name_2, "\" is claimed by\n") +
|
|
471
|
+
leaves
|
|
472
|
+
.map(function (entry) {
|
|
473
|
+
return " - ".concat(entry.filePath, " (").concat(entry.origin === 'declared' ? "declared by ".concat(entry.declaredBy) : 'crawled — no declaration names it', ")");
|
|
474
|
+
})
|
|
475
|
+
.join('\n'));
|
|
476
|
+
}
|
|
477
|
+
if (collisions.length > 0) {
|
|
478
|
+
throw new WorkspaceDeclarationError("Workspace package name collision \u2014 dependencies resolve to workspace members BY NAME, so two packages cannot share one:\n".concat(collisions.join('\n'), "\nRename the impostor (fixtures carry fixture names) or move it outside the workspace."));
|
|
479
|
+
}
|
|
480
|
+
};
|
|
481
|
+
WorkspaceDeclaration.add = function (found, filePath, origin, declaredBy) {
|
|
482
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
483
|
+
var packageJson, _a, _b;
|
|
484
|
+
return __generator(this, function (_c) {
|
|
485
|
+
switch (_c.label) {
|
|
486
|
+
case 0:
|
|
487
|
+
if (found.has(filePath)) {
|
|
488
|
+
return [2 /*return*/];
|
|
489
|
+
}
|
|
490
|
+
_b = (_a = JSON).parse;
|
|
491
|
+
return [4 /*yield*/, fs.readFile(filePath, 'utf8')];
|
|
492
|
+
case 1:
|
|
493
|
+
packageJson = _b.apply(_a, [_c.sent()]);
|
|
494
|
+
found.set(filePath, __assign({ filePath: filePath, packageJson: packageJson, origin: origin }, (declaredBy ? { declaredBy: declaredBy } : {})));
|
|
495
|
+
return [2 /*return*/];
|
|
496
|
+
}
|
|
497
|
+
});
|
|
498
|
+
});
|
|
499
|
+
};
|
|
500
|
+
WorkspaceDeclaration.assertPattern = function (pattern, source) {
|
|
501
|
+
if (typeof pattern !== 'string' || pattern.trim().length === 0) {
|
|
502
|
+
throw new WorkspaceDeclarationError("".concat(source, ": package patterns must be non-empty strings, got ").concat(JSON.stringify(pattern)));
|
|
503
|
+
}
|
|
504
|
+
if (path.isAbsolute(pattern) || pattern.split('/').includes('..')) {
|
|
505
|
+
throw new WorkspaceDeclarationError("".concat(source, ": package pattern \"").concat(pattern, "\" must be relative to the root and stay inside it"));
|
|
506
|
+
}
|
|
507
|
+
return pattern;
|
|
508
|
+
};
|
|
509
|
+
WorkspaceDeclaration.segmentMatcher = function (segment) {
|
|
510
|
+
var escaped = segment.replace(/[.+?^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '[^/]*');
|
|
511
|
+
return new RegExp("^".concat(escaped, "$"));
|
|
512
|
+
};
|
|
513
|
+
WorkspaceDeclaration.isPrunedDirName = function (name) {
|
|
514
|
+
return name.startsWith('.') || WorkspaceDeclaration.prunedDirNames.has(name);
|
|
515
|
+
};
|
|
516
|
+
/** Real (non-symlink, non-pruned) child directories of `dir`. */
|
|
517
|
+
WorkspaceDeclaration.childDirs = function (dir) {
|
|
518
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
519
|
+
var dirents, _a;
|
|
520
|
+
return __generator(this, function (_b) {
|
|
521
|
+
switch (_b.label) {
|
|
522
|
+
case 0:
|
|
523
|
+
_b.trys.push([0, 2, , 3]);
|
|
524
|
+
return [4 /*yield*/, fs.readdir(dir, { withFileTypes: true })];
|
|
525
|
+
case 1:
|
|
526
|
+
dirents = _b.sent();
|
|
527
|
+
return [3 /*break*/, 3];
|
|
528
|
+
case 2:
|
|
529
|
+
_a = _b.sent();
|
|
530
|
+
return [2 /*return*/, []];
|
|
531
|
+
case 3: return [2 /*return*/, dirents
|
|
532
|
+
.filter(function (dirent) { return dirent.isDirectory() && !WorkspaceDeclaration.isPrunedDirName(dirent.name); })
|
|
533
|
+
.map(function (dirent) { return path.join(dir, dirent.name); })
|
|
534
|
+
.sort()];
|
|
535
|
+
}
|
|
536
|
+
});
|
|
537
|
+
});
|
|
538
|
+
};
|
|
539
|
+
WorkspaceDeclaration.isRealDir = function (p) {
|
|
540
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
541
|
+
var _a;
|
|
542
|
+
return __generator(this, function (_b) {
|
|
543
|
+
switch (_b.label) {
|
|
544
|
+
case 0:
|
|
545
|
+
_b.trys.push([0, 2, , 3]);
|
|
546
|
+
return [4 /*yield*/, fs.lstat(p)];
|
|
547
|
+
case 1: return [2 /*return*/, (_b.sent()).isDirectory()];
|
|
548
|
+
case 2:
|
|
549
|
+
_a = _b.sent();
|
|
550
|
+
return [2 /*return*/, false];
|
|
551
|
+
case 3: return [2 /*return*/];
|
|
552
|
+
}
|
|
553
|
+
});
|
|
554
|
+
});
|
|
555
|
+
};
|
|
556
|
+
WorkspaceDeclaration.exists = function (p) {
|
|
557
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
558
|
+
var _a;
|
|
559
|
+
return __generator(this, function (_b) {
|
|
560
|
+
switch (_b.label) {
|
|
561
|
+
case 0:
|
|
562
|
+
_b.trys.push([0, 2, , 3]);
|
|
563
|
+
return [4 /*yield*/, fs.access(p)];
|
|
564
|
+
case 1:
|
|
565
|
+
_b.sent();
|
|
566
|
+
return [2 /*return*/, true];
|
|
567
|
+
case 2:
|
|
568
|
+
_a = _b.sent();
|
|
569
|
+
return [2 /*return*/, false];
|
|
570
|
+
case 3: return [2 /*return*/];
|
|
571
|
+
}
|
|
572
|
+
});
|
|
573
|
+
});
|
|
574
|
+
};
|
|
575
|
+
WorkspaceDeclaration.readJsonIfExists = function (p) {
|
|
576
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
577
|
+
var text, _a;
|
|
578
|
+
return __generator(this, function (_b) {
|
|
579
|
+
switch (_b.label) {
|
|
580
|
+
case 0:
|
|
581
|
+
_b.trys.push([0, 2, , 3]);
|
|
582
|
+
return [4 /*yield*/, fs.readFile(p, 'utf8')];
|
|
583
|
+
case 1:
|
|
584
|
+
text = _b.sent();
|
|
585
|
+
return [3 /*break*/, 3];
|
|
586
|
+
case 2:
|
|
587
|
+
_a = _b.sent();
|
|
588
|
+
return [2 /*return*/, undefined];
|
|
589
|
+
case 3:
|
|
590
|
+
try {
|
|
591
|
+
return [2 /*return*/, JSON.parse(text)];
|
|
592
|
+
}
|
|
593
|
+
catch (error) {
|
|
594
|
+
throw new WorkspaceDeclarationError("".concat(p, " is not valid JSON: ").concat(error instanceof Error ? error.message : String(error)));
|
|
595
|
+
}
|
|
596
|
+
return [2 /*return*/];
|
|
597
|
+
}
|
|
598
|
+
});
|
|
599
|
+
});
|
|
600
|
+
};
|
|
601
|
+
/** Root package.json field naming extra member globs beside lerna's `packages`. */
|
|
602
|
+
WorkspaceDeclaration.EXTRA_PACKAGES_FIELD = 'workspacePackages';
|
|
603
|
+
WorkspaceDeclaration.lernaDefaultPackages = ['packages/*'];
|
|
604
|
+
WorkspaceDeclaration.prunedDirNames = new Set(['node_modules', 'dist']);
|
|
605
|
+
return WorkspaceDeclaration;
|
|
606
|
+
}());
|
|
607
|
+
exports.WorkspaceDeclaration = WorkspaceDeclaration;
|
|
608
|
+
//# sourceMappingURL=WorkspaceDeclaration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkspaceDeclaration.js","sourceRoot":"","sources":["../../src/WorkspaceDeclaration.ts"],"names":[],"mappings":"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"}
|