@proteinjs/reflection-build 1.5.0 → 2.0.0

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.
Files changed (80) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/src/BuildContract.d.ts +69 -0
  3. package/dist/src/BuildContract.js +393 -0
  4. package/dist/src/BuildContract.js.map +1 -0
  5. package/dist/src/ReflectionDoctor.d.ts +95 -0
  6. package/dist/src/ReflectionDoctor.js +588 -0
  7. package/dist/src/ReflectionDoctor.js.map +1 -0
  8. package/dist/src/build.d.ts +5 -1
  9. package/dist/src/build.js +13 -77
  10. package/dist/src/build.js.map +1 -1
  11. package/dist/src/codegen/writeGeneratedIndex.d.ts +18 -0
  12. package/dist/src/codegen/writeGeneratedIndex.js +58 -15
  13. package/dist/src/codegen/writeGeneratedIndex.js.map +1 -1
  14. package/dist/src/parser/createGraphBuilder.js +30 -5
  15. package/dist/src/parser/createGraphBuilder.js.map +1 -1
  16. package/dist/src/runBuild.js +12 -2
  17. package/dist/src/runBuild.js.map +1 -1
  18. package/dist/src/runDoctor.d.ts +2 -0
  19. package/dist/src/runDoctor.js +83 -0
  20. package/dist/src/runDoctor.js.map +1 -0
  21. package/dist/test/GraphEmitRelativePaths.test.d.ts +1 -0
  22. package/dist/test/GraphEmitRelativePaths.test.js +162 -0
  23. package/dist/test/GraphEmitRelativePaths.test.js.map +1 -0
  24. package/dist/test/ReflectionDoctor.test.d.ts +1 -0
  25. package/dist/test/ReflectionDoctor.test.js +316 -0
  26. package/dist/test/ReflectionDoctor.test.js.map +1 -0
  27. package/dist/test/TestSubpathContract.test.d.ts +1 -0
  28. package/dist/test/TestSubpathContract.test.js +260 -0
  29. package/dist/test/TestSubpathContract.test.js.map +1 -0
  30. package/dist/test/ValidateDontMutate.test.d.ts +1 -0
  31. package/dist/test/ValidateDontMutate.test.js +238 -0
  32. package/dist/test/ValidateDontMutate.test.js.map +1 -0
  33. package/dist/test/examples/source-repository/a/generated/index.js +1 -1
  34. package/dist/test/examples/source-repository/a/generated/index.js.map +1 -1
  35. package/dist/test/examples/source-repository/b/generated/index.js +1 -1
  36. package/dist/test/examples/source-repository/b/generated/index.js.map +1 -1
  37. package/package.json +5 -4
  38. package/src/BuildContract.ts +384 -0
  39. package/src/ReflectionDoctor.ts +589 -0
  40. package/src/build.ts +19 -56
  41. package/src/codegen/writeGeneratedIndex.ts +51 -13
  42. package/src/parser/createGraphBuilder.ts +9 -4
  43. package/src/runBuild.ts +7 -1
  44. package/src/runDoctor.ts +34 -0
  45. package/test/GraphEmitRelativePaths.test.ts +95 -0
  46. package/test/ReflectionDoctor.test.ts +193 -0
  47. package/test/TestSubpathContract.test.ts +148 -0
  48. package/test/ValidateDontMutate.test.ts +126 -0
  49. package/test/examples/source-repository/a/dist/BuildContract.d.ts +69 -0
  50. package/test/examples/source-repository/a/dist/BuildContract.js +393 -0
  51. package/test/examples/source-repository/a/dist/BuildContract.js.map +1 -0
  52. package/test/examples/source-repository/a/dist/build.d.ts +5 -1
  53. package/test/examples/source-repository/a/dist/build.js +13 -77
  54. package/test/examples/source-repository/a/dist/build.js.map +1 -1
  55. package/test/examples/source-repository/a/dist/codegen/writeGeneratedIndex.d.ts +18 -0
  56. package/test/examples/source-repository/a/dist/codegen/writeGeneratedIndex.js +58 -15
  57. package/test/examples/source-repository/a/dist/codegen/writeGeneratedIndex.js.map +1 -1
  58. package/test/examples/source-repository/a/dist/generated/index.js +1 -1
  59. package/test/examples/source-repository/a/dist/generated/index.js.map +1 -1
  60. package/test/examples/source-repository/a/dist/parser/createGraphBuilder.js +30 -5
  61. package/test/examples/source-repository/a/dist/parser/createGraphBuilder.js.map +1 -1
  62. package/test/examples/source-repository/a/dist/runBuild.js +12 -2
  63. package/test/examples/source-repository/a/dist/runBuild.js.map +1 -1
  64. package/test/examples/source-repository/a/generated/index.ts +1 -1
  65. package/test/examples/source-repository/b/dist/BuildContract.d.ts +69 -0
  66. package/test/examples/source-repository/b/dist/BuildContract.js +393 -0
  67. package/test/examples/source-repository/b/dist/BuildContract.js.map +1 -0
  68. package/test/examples/source-repository/b/dist/build.d.ts +5 -1
  69. package/test/examples/source-repository/b/dist/build.js +13 -77
  70. package/test/examples/source-repository/b/dist/build.js.map +1 -1
  71. package/test/examples/source-repository/b/dist/codegen/writeGeneratedIndex.d.ts +18 -0
  72. package/test/examples/source-repository/b/dist/codegen/writeGeneratedIndex.js +58 -15
  73. package/test/examples/source-repository/b/dist/codegen/writeGeneratedIndex.js.map +1 -1
  74. package/test/examples/source-repository/b/dist/generated/index.js +1 -1
  75. package/test/examples/source-repository/b/dist/generated/index.js.map +1 -1
  76. package/test/examples/source-repository/b/dist/parser/createGraphBuilder.js +30 -5
  77. package/test/examples/source-repository/b/dist/parser/createGraphBuilder.js.map +1 -1
  78. package/test/examples/source-repository/b/dist/runBuild.js +12 -2
  79. package/test/examples/source-repository/b/dist/runBuild.js.map +1 -1
  80. package/test/examples/source-repository/b/generated/index.ts +1 -1
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
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;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __generator = (this && this.__generator) || function (thisArg, body) {
35
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
36
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
37
+ function verb(n) { return function (v) { return step([n, v]); }; }
38
+ function step(op) {
39
+ if (f) throw new TypeError("Generator is already executing.");
40
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
41
+ 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;
42
+ if (y = 0, t) op = [op[0] & 2, t.value];
43
+ switch (op[0]) {
44
+ case 0: case 1: t = op; break;
45
+ case 4: _.label++; return { value: op[1], done: false };
46
+ case 5: _.label++; y = op[1]; op = [0]; continue;
47
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
48
+ default:
49
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
50
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
51
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
52
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
53
+ if (t[2]) _.ops.pop();
54
+ _.trys.pop(); continue;
55
+ }
56
+ op = body.call(thisArg, _);
57
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
58
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
59
+ }
60
+ };
61
+ Object.defineProperty(exports, "__esModule", { value: true });
62
+ var fs = __importStar(require("fs"));
63
+ var os = __importStar(require("os"));
64
+ var path = __importStar(require("path"));
65
+ var child_process_1 = require("child_process");
66
+ var writeGeneratedIndex_1 = require("../src/codegen/writeGeneratedIndex");
67
+ /**
68
+ * The emitted source graph must carry package-relative filePaths (task #104 §3.4 carve-out).
69
+ * Absolute paths from the build machine leak into every consumer bundle (CI runner paths in
70
+ * registry packages, local checkout paths in dev bundles) — a path disclosure with zero
71
+ * runtime value: nothing reads filePath at runtime; it is consumed only at build time to
72
+ * emit sourceLink imports, before serialization.
73
+ *
74
+ * Red-before-green: against pre-fix codegen the emitted graph embeds absolute paths and the
75
+ * assertions below fail.
76
+ */
77
+ describe('graph emit: package-relative filePaths', function () {
78
+ var fixtureA = path.join(__dirname, 'examples', 'source-repository', 'a');
79
+ // A tmp copy of fixture a (sources only), emitted into its own ./generated — the real build
80
+ // layout, so path assertions cover exactly what a real build writes.
81
+ var pkgDir;
82
+ var tmpRoot;
83
+ var emitted;
84
+ var graph;
85
+ beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
86
+ var _i, _a, entry, outDir, generatedIndexPath, literalMatch, serialized;
87
+ return __generator(this, function (_b) {
88
+ switch (_b.label) {
89
+ case 0:
90
+ tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'refl-relpaths-'));
91
+ pkgDir = path.join(tmpRoot, 'a');
92
+ fs.mkdirSync(pkgDir);
93
+ for (_i = 0, _a = ['package.json', 'index.ts', 'src']; _i < _a.length; _i++) {
94
+ entry = _a[_i];
95
+ (0, child_process_1.execSync)("cp -R ".concat(path.join(fixtureA, entry), " ").concat(path.join(pkgDir, entry)));
96
+ }
97
+ outDir = path.join(pkgDir, 'generated');
98
+ fs.mkdirSync(outDir);
99
+ generatedIndexPath = path.join(outDir, 'index.ts');
100
+ return [4 /*yield*/, (0, writeGeneratedIndex_1.writeGeneratedIndex)(pkgDir, outDir, generatedIndexPath, ['src'])];
101
+ case 1:
102
+ _b.sent();
103
+ emitted = fs.readFileSync(generatedIndexPath, 'utf-8');
104
+ literalMatch = emitted.match(/const sourceGraph = (".*");/);
105
+ expect(literalMatch).toBeTruthy();
106
+ serialized = JSON.parse(literalMatch[1]).replace(/\\'/g, "'");
107
+ graph = JSON.parse(serialized);
108
+ return [2 /*return*/];
109
+ }
110
+ });
111
+ }); });
112
+ afterAll(function () {
113
+ fs.rmdirSync(tmpRoot, { recursive: true });
114
+ });
115
+ it('emits no absolute filePath on any graph node', function () {
116
+ var _a;
117
+ var offenders = [];
118
+ for (var _i = 0, _b = graph.nodes; _i < _b.length; _i++) {
119
+ var node = _b[_i];
120
+ var filePath = (_a = node.value) === null || _a === void 0 ? void 0 : _a.filePath;
121
+ if (typeof filePath === 'string' && path.isAbsolute(filePath)) {
122
+ offenders.push("".concat(node.v, ": ").concat(filePath));
123
+ }
124
+ }
125
+ expect(offenders).toEqual([]);
126
+ });
127
+ it('emits no build-machine path anywhere in the serialized graph string', function () {
128
+ // The strongest form of the disclosure check: the package's own absolute location
129
+ // (worktree checkout path here; /home/runner/... in CI) never appears in the artifact.
130
+ expect(emitted).not.toContain(pkgDir);
131
+ expect(emitted).not.toContain(fixtureA);
132
+ });
133
+ it('node filePaths are package-relative and resolve to real source files', function () {
134
+ var _a;
135
+ var checked = [];
136
+ for (var _i = 0, _b = graph.nodes; _i < _b.length; _i++) {
137
+ var node = _b[_i];
138
+ var filePath = (_a = node.value) === null || _a === void 0 ? void 0 : _a.filePath;
139
+ if (typeof filePath !== 'string' || filePath === '') {
140
+ continue;
141
+ }
142
+ expect(fs.existsSync(path.join(pkgDir, filePath))).toBe(true);
143
+ checked.push(filePath);
144
+ }
145
+ // Fixture a declares sources under src/ — the graph must actually carry them.
146
+ expect(checked.length).toBeGreaterThan(0);
147
+ expect(checked.every(function (p) { return p.startsWith('src' + path.sep) || p.startsWith('index.'); })).toBe(true);
148
+ });
149
+ it('sourceLink imports still resolve to the linked source files (outcome: links survive)', function () {
150
+ var importLines = emitted.match(/import \{ .+ \} from '.+';/g) || [];
151
+ var linkImports = importLines.filter(function (line) { return !line.includes('@proteinjs/reflection'); });
152
+ expect(linkImports.length).toBeGreaterThan(0);
153
+ for (var _i = 0, linkImports_1 = linkImports; _i < linkImports_1.length; _i++) {
154
+ var line = linkImports_1[_i];
155
+ var spec = line.match(/from '(.+)';/)[1];
156
+ var resolved = path.resolve(path.join(pkgDir, 'generated'), spec);
157
+ var exists = fs.existsSync("".concat(resolved, ".ts")) || fs.existsSync("".concat(resolved, ".tsx"));
158
+ expect("".concat(spec, ": ").concat(exists)).toBe("".concat(spec, ": true"));
159
+ }
160
+ });
161
+ });
162
+ //# sourceMappingURL=GraphEmitRelativePaths.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphEmitRelativePaths.test.js","sourceRoot":"","sources":["../../test/GraphEmitRelativePaths.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,316 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
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;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __generator = (this && this.__generator) || function (thisArg, body) {
35
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
36
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
37
+ function verb(n) { return function (v) { return step([n, v]); }; }
38
+ function step(op) {
39
+ if (f) throw new TypeError("Generator is already executing.");
40
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
41
+ 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;
42
+ if (y = 0, t) op = [op[0] & 2, t.value];
43
+ switch (op[0]) {
44
+ case 0: case 1: t = op; break;
45
+ case 4: _.label++; return { value: op[1], done: false };
46
+ case 5: _.label++; y = op[1]; op = [0]; continue;
47
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
48
+ default:
49
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
50
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
51
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
52
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
53
+ if (t[2]) _.ops.pop();
54
+ _.trys.pop(); continue;
55
+ }
56
+ op = body.call(thisArg, _);
57
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
58
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
59
+ }
60
+ };
61
+ Object.defineProperty(exports, "__esModule", { value: true });
62
+ var fs = __importStar(require("fs"));
63
+ var os = __importStar(require("os"));
64
+ var path = __importStar(require("path"));
65
+ var ReflectionDoctor_1 = require("../src/ReflectionDoctor");
66
+ var writeGeneratedIndex_1 = require("../src/codegen/writeGeneratedIndex");
67
+ /**
68
+ * reflection-doctor (task #104 §3.1): purely analytical CLI — registered-inventory print,
69
+ * orphan detection (the undeclared-dep/typo class, today silently pruned at runtime), and
70
+ * --explain parent-edge traces naming the broken hop. Executes no dependency code: graphs
71
+ * are harvested statically from dist/generated artifacts.
72
+ *
73
+ * Red-before-green: written against the finished doctor api/trace format; fails before
74
+ * ReflectionDoctor exists.
75
+ */
76
+ describe('ReflectionDoctor', function () {
77
+ var fixtureA = path.join(__dirname, 'examples', 'source-repository', 'a');
78
+ describe('inventory + healthy fixture (fixture a)', function () {
79
+ it('reports dependency graphs, own graph size, and no orphans', function () { return __awaiter(void 0, void 0, void 0, function () {
80
+ var doctor, report;
81
+ return __generator(this, function (_a) {
82
+ switch (_a.label) {
83
+ case 0:
84
+ doctor = new ReflectionDoctor_1.ReflectionDoctor(fixtureA);
85
+ return [4 /*yield*/, doctor.diagnose()];
86
+ case 1:
87
+ report = _a.sent();
88
+ expect(report.dependencies.loaded).toContain('@proteinjs/reflection-build-test-b');
89
+ expect(report.dependencies.withoutGraph).toContain('@proteinjs/reflection');
90
+ expect(report.nodeCount).toBeGreaterThan(0);
91
+ expect(report.edgeCount).toBeGreaterThan(0);
92
+ expect(report.sourceLinkCount).toBeGreaterThan(0);
93
+ expect(report.orphans).toEqual([]);
94
+ expect(report.drift.missingFromDist).toEqual([]);
95
+ expect(report.drift.onlyInDist).toEqual([]);
96
+ expect(report.healthy).toBe(true);
97
+ expect(report.text).toContain('@proteinjs/reflection-build-test-b');
98
+ return [2 /*return*/];
99
+ }
100
+ });
101
+ }); });
102
+ it('explains a Loadable chain through a foreign graph, naming each hop', function () { return __awaiter(void 0, void 0, void 0, function () {
103
+ var doctor, explanation;
104
+ return __generator(this, function (_a) {
105
+ switch (_a.label) {
106
+ case 0:
107
+ doctor = new ReflectionDoctor_1.ReflectionDoctor(fixtureA);
108
+ return [4 /*yield*/, doctor.explain('ImplementsLoadableForeignInterface')];
109
+ case 1:
110
+ explanation = _a.sent();
111
+ expect(explanation.text).toContain('@proteinjs/reflection-build-test-a/ImplementsLoadableForeignInterface');
112
+ expect(explanation.text).toContain('implements interface @proteinjs/reflection-build-test-b/LoadableForeignInterface');
113
+ expect(explanation.text).toContain('[edge OK]');
114
+ expect(explanation.text).toContain('graph @proteinjs/reflection-build-test-b: LOADED');
115
+ expect(explanation.verdict).toContain('Loadable');
116
+ expect(explanation.verdict).toContain("objects('@proteinjs/reflection-build-test-b/LoadableForeignInterface')");
117
+ return [2 /*return*/];
118
+ }
119
+ });
120
+ }); });
121
+ it('explains a deliberately non-Loadable type without inventing a defect', function () { return __awaiter(void 0, void 0, void 0, function () {
122
+ var doctor, explanation;
123
+ return __generator(this, function (_a) {
124
+ switch (_a.label) {
125
+ case 0:
126
+ doctor = new ReflectionDoctor_1.ReflectionDoctor(fixtureA);
127
+ return [4 /*yield*/, doctor.explain('ImplementsNotLoadableForeignInterface')];
128
+ case 1:
129
+ explanation = _a.sent();
130
+ expect(explanation.verdict).toContain('NOT Loadable');
131
+ // The parent package's graph IS loaded; the parent just is not Loadable there.
132
+ expect(explanation.text).toContain('@proteinjs/reflection-build-test-b/NotLoadableForeignInterface');
133
+ expect(explanation.text).toContain('not Loadable');
134
+ return [2 /*return*/];
135
+ }
136
+ });
137
+ }); });
138
+ });
139
+ describe('broken chains (crafted fixture)', function () {
140
+ var pkgDir;
141
+ var emitFixture = function (pkgDirToBuild) { return __awaiter(void 0, void 0, void 0, function () {
142
+ var generatedDir, generatedIndexPath, distGeneratedDir;
143
+ return __generator(this, function (_a) {
144
+ switch (_a.label) {
145
+ case 0:
146
+ generatedDir = path.join(pkgDirToBuild, 'generated');
147
+ fs.mkdirSync(generatedDir, { recursive: true });
148
+ generatedIndexPath = path.join(generatedDir, 'index.ts');
149
+ return [4 /*yield*/, (0, writeGeneratedIndex_1.writeGeneratedIndex)(pkgDirToBuild, generatedDir, generatedIndexPath, ['src'])];
150
+ case 1:
151
+ _a.sent();
152
+ distGeneratedDir = path.join(pkgDirToBuild, 'dist', 'generated');
153
+ fs.mkdirSync(distGeneratedDir, { recursive: true });
154
+ fs.copyFileSync(generatedIndexPath, path.join(distGeneratedDir, 'index.js'));
155
+ return [2 /*return*/];
156
+ }
157
+ });
158
+ }); };
159
+ beforeEach(function () {
160
+ pkgDir = fs.mkdtempSync(path.join(os.tmpdir(), 'refl-doctor-'));
161
+ fs.writeFileSync(path.join(pkgDir, 'package.json'), JSON.stringify({ name: '@test/doctor-fixture', version: '1.0.0', dependencies: {} }, null, 2));
162
+ fs.mkdirSync(path.join(pkgDir, 'src'));
163
+ fs.writeFileSync(path.join(pkgDir, 'src', 'index.ts'), "export * from './Orphan';\n");
164
+ fs.writeFileSync(path.join(pkgDir, 'src', 'Orphan.ts'), "import { ForeignBase } from '@undeclared/pkg';\n\nexport class Orphan implements ForeignBase {}\n");
165
+ });
166
+ afterEach(function () {
167
+ fs.rmdirSync(pkgDir, { recursive: true });
168
+ });
169
+ it('detects the orphan: a kept node whose foreign parent resolves in no loaded graph', function () { return __awaiter(void 0, void 0, void 0, function () {
170
+ var doctor, report;
171
+ return __generator(this, function (_a) {
172
+ switch (_a.label) {
173
+ case 0: return [4 /*yield*/, emitFixture(pkgDir)];
174
+ case 1:
175
+ _a.sent();
176
+ doctor = new ReflectionDoctor_1.ReflectionDoctor(pkgDir);
177
+ return [4 /*yield*/, doctor.diagnose()];
178
+ case 2:
179
+ report = _a.sent();
180
+ expect(report.orphans).toHaveLength(1);
181
+ expect(report.orphans[0].qualifiedName).toBe('@test/doctor-fixture/Orphan');
182
+ expect(report.orphans[0].unresolvedParent).toBe('@undeclared/pkg/ForeignBase');
183
+ expect(report.orphans[0].cause).toContain('not a declared dependency');
184
+ expect(report.healthy).toBe(false);
185
+ expect(report.text).toContain('@undeclared/pkg/ForeignBase');
186
+ return [2 /*return*/];
187
+ }
188
+ });
189
+ }); });
190
+ it('--explain names the broken hop and the cause', function () { return __awaiter(void 0, void 0, void 0, function () {
191
+ var doctor, explanation;
192
+ return __generator(this, function (_a) {
193
+ switch (_a.label) {
194
+ case 0: return [4 /*yield*/, emitFixture(pkgDir)];
195
+ case 1:
196
+ _a.sent();
197
+ doctor = new ReflectionDoctor_1.ReflectionDoctor(pkgDir);
198
+ return [4 /*yield*/, doctor.explain('Orphan')];
199
+ case 2:
200
+ explanation = _a.sent();
201
+ expect(explanation.text).toContain('implements interface @undeclared/pkg/ForeignBase');
202
+ expect(explanation.text).toContain('graph @undeclared/pkg: NOT LOADED');
203
+ expect(explanation.verdict).toContain('NOT Loadable');
204
+ expect(explanation.verdict).toContain('@undeclared/pkg/ForeignBase');
205
+ expect(explanation.verdict).toContain('not a declared dependency');
206
+ return [2 /*return*/];
207
+ }
208
+ });
209
+ }); });
210
+ it('classifies a declared-but-not-reflection-built dependency', function () { return __awaiter(void 0, void 0, void 0, function () {
211
+ var packageJson, depDir, doctor, report;
212
+ return __generator(this, function (_a) {
213
+ switch (_a.label) {
214
+ case 0:
215
+ packageJson = JSON.parse(fs.readFileSync(path.join(pkgDir, 'package.json'), 'utf-8'));
216
+ packageJson.dependencies['@undeclared/pkg'] = '1.0.0';
217
+ fs.writeFileSync(path.join(pkgDir, 'package.json'), JSON.stringify(packageJson, null, 2));
218
+ depDir = path.join(pkgDir, 'node_modules', '@undeclared', 'pkg');
219
+ fs.mkdirSync(depDir, { recursive: true });
220
+ fs.writeFileSync(path.join(depDir, 'package.json'), JSON.stringify({ name: '@undeclared/pkg' }));
221
+ return [4 /*yield*/, emitFixture(pkgDir)];
222
+ case 1:
223
+ _a.sent();
224
+ doctor = new ReflectionDoctor_1.ReflectionDoctor(pkgDir);
225
+ return [4 /*yield*/, doctor.diagnose()];
226
+ case 2:
227
+ report = _a.sent();
228
+ expect(report.orphans).toHaveLength(1);
229
+ expect(report.orphans[0].cause).toContain('not reflection-built');
230
+ expect(report.dependencies.withoutGraph).toContain('@undeclared/pkg');
231
+ return [2 /*return*/];
232
+ }
233
+ });
234
+ }); });
235
+ it('does not report inline type-expression parents as orphans (the ArrayMembershipOp class)', function () { return __awaiter(void 0, void 0, void 0, function () {
236
+ var doctor, report;
237
+ return __generator(this, function (_a) {
238
+ switch (_a.label) {
239
+ case 0:
240
+ // A union alias with a doc comment inside: the parser captures the raw expression as a
241
+ // parent name (leading '/'), dodging the '{'-name guard — a junk, never-resolvable
242
+ // parent edge. The doctor must classify it as inline-expression noise, not as an
243
+ // undeclared dependency.
244
+ fs.writeFileSync(path.join(pkgDir, 'src', 'Ops.ts'), "export type MembershipOp =\n /** Insert */\n | { op: 'add'; id: string }\n /** Remove */\n | { op: 'remove'; id: string };\n");
245
+ return [4 /*yield*/, emitFixture(pkgDir)];
246
+ case 1:
247
+ _a.sent();
248
+ doctor = new ReflectionDoctor_1.ReflectionDoctor(pkgDir);
249
+ return [4 /*yield*/, doctor.diagnose()];
250
+ case 2:
251
+ report = _a.sent();
252
+ // Only the real orphan remains; the junk parent is excluded.
253
+ expect(report.orphans).toHaveLength(1);
254
+ expect(report.orphans[0].unresolvedParent).toBe('@undeclared/pkg/ForeignBase');
255
+ return [2 /*return*/];
256
+ }
257
+ });
258
+ }); });
259
+ it('detects drift: sources added after the artifact was built', function () { return __awaiter(void 0, void 0, void 0, function () {
260
+ var doctor, report;
261
+ return __generator(this, function (_a) {
262
+ switch (_a.label) {
263
+ case 0: return [4 /*yield*/, emitFixture(pkgDir)];
264
+ case 1:
265
+ _a.sent();
266
+ fs.writeFileSync(path.join(pkgDir, 'src', 'Late.ts'), "import { ForeignBase } from '@undeclared/pkg';\n\nexport class Late implements ForeignBase {}\n");
267
+ doctor = new ReflectionDoctor_1.ReflectionDoctor(pkgDir);
268
+ return [4 /*yield*/, doctor.diagnose()];
269
+ case 2:
270
+ report = _a.sent();
271
+ expect(report.drift.missingFromDist).toContain('@test/doctor-fixture/Late');
272
+ expect(report.healthy).toBe(false);
273
+ return [2 /*return*/];
274
+ }
275
+ });
276
+ }); });
277
+ it('--explain diagnoses a declaration that exists but is not exported', function () { return __awaiter(void 0, void 0, void 0, function () {
278
+ var doctor, explanation;
279
+ return __generator(this, function (_a) {
280
+ switch (_a.label) {
281
+ case 0:
282
+ fs.writeFileSync(path.join(pkgDir, 'src', 'Hidden.ts'), "import { ForeignBase } from '@undeclared/pkg';\n\nclass Hidden implements ForeignBase {}\n");
283
+ return [4 /*yield*/, emitFixture(pkgDir)];
284
+ case 1:
285
+ _a.sent();
286
+ doctor = new ReflectionDoctor_1.ReflectionDoctor(pkgDir);
287
+ return [4 /*yield*/, doctor.explain('Hidden')];
288
+ case 2:
289
+ explanation = _a.sent();
290
+ expect(explanation.verdict).toContain('not exported');
291
+ expect(explanation.text).toContain('Hidden.ts');
292
+ return [2 /*return*/];
293
+ }
294
+ });
295
+ }); });
296
+ it('--explain diagnoses a stale dist: declaration in sources but not in the artifact', function () { return __awaiter(void 0, void 0, void 0, function () {
297
+ var doctor, explanation;
298
+ return __generator(this, function (_a) {
299
+ switch (_a.label) {
300
+ case 0: return [4 /*yield*/, emitFixture(pkgDir)];
301
+ case 1:
302
+ _a.sent();
303
+ fs.writeFileSync(path.join(pkgDir, 'src', 'Late.ts'), "import { ForeignBase } from '@undeclared/pkg';\n\nexport class Late implements ForeignBase {}\n");
304
+ doctor = new ReflectionDoctor_1.ReflectionDoctor(pkgDir);
305
+ return [4 /*yield*/, doctor.explain('Late')];
306
+ case 2:
307
+ explanation = _a.sent();
308
+ expect(explanation.verdict.toLowerCase()).toContain('stale');
309
+ expect(explanation.verdict).toContain('rebuild');
310
+ return [2 /*return*/];
311
+ }
312
+ });
313
+ }); });
314
+ });
315
+ });
316
+ //# sourceMappingURL=ReflectionDoctor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReflectionDoctor.test.js","sourceRoot":"","sources":["../../test/ReflectionDoctor.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};