@empire-builder-kit/nx 1.0.0-beta.10

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 (243) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +5 -0
  3. package/README.md +34 -0
  4. package/executors.json +74 -0
  5. package/generators.json +40 -0
  6. package/migrations/standard-pre-v1-to-v1.md +11 -0
  7. package/package.json +80 -0
  8. package/src/blueprints/execution.d.ts +31 -0
  9. package/src/blueprints/execution.js +166 -0
  10. package/src/blueprints/execution.js.map +1 -0
  11. package/src/blueprints/index.d.ts +5 -0
  12. package/src/blueprints/index.js +9 -0
  13. package/src/blueprints/index.js.map +1 -0
  14. package/src/blueprints/inputs.d.ts +43 -0
  15. package/src/blueprints/inputs.js +103 -0
  16. package/src/blueprints/inputs.js.map +1 -0
  17. package/src/blueprints/manifest.d.ts +281 -0
  18. package/src/blueprints/manifest.js +441 -0
  19. package/src/blueprints/manifest.js.map +1 -0
  20. package/src/blueprints/resolver.d.ts +28 -0
  21. package/src/blueprints/resolver.js +218 -0
  22. package/src/blueprints/resolver.js.map +1 -0
  23. package/src/blueprints/transitions.d.ts +20 -0
  24. package/src/blueprints/transitions.js +61 -0
  25. package/src/blueprints/transitions.js.map +1 -0
  26. package/src/executors/deploy/deploy.d.ts +4 -0
  27. package/src/executors/deploy/deploy.js +6 -0
  28. package/src/executors/deploy/deploy.js.map +1 -0
  29. package/src/executors/deployment-plan/deployment-plan.d.ts +9 -0
  30. package/src/executors/deployment-plan/deployment-plan.js +50 -0
  31. package/src/executors/deployment-plan/deployment-plan.js.map +1 -0
  32. package/src/executors/deployment-plan/schema.json +24 -0
  33. package/src/executors/dev/dev.d.ts +4 -0
  34. package/src/executors/dev/dev.js +6 -0
  35. package/src/executors/dev/dev.js.map +1 -0
  36. package/src/executors/dev-doctor/dev-doctor.d.ts +31 -0
  37. package/src/executors/dev-doctor/dev-doctor.js +260 -0
  38. package/src/executors/dev-doctor/dev-doctor.js.map +1 -0
  39. package/src/executors/dev-doctor/schema.json +17 -0
  40. package/src/executors/dev-setup/dev-setup.d.ts +11 -0
  41. package/src/executors/dev-setup/dev-setup.js +454 -0
  42. package/src/executors/dev-setup/dev-setup.js.map +1 -0
  43. package/src/executors/dev-setup/schema.json +16 -0
  44. package/src/executors/fleet/fleet.d.ts +62 -0
  45. package/src/executors/fleet/fleet.js +613 -0
  46. package/src/executors/fleet/fleet.js.map +1 -0
  47. package/src/executors/fleet/schema.json +37 -0
  48. package/src/executors/foundation-preflight/foundation-preflight.d.ts +15 -0
  49. package/src/executors/foundation-preflight/foundation-preflight.js +116 -0
  50. package/src/executors/foundation-preflight/foundation-preflight.js.map +1 -0
  51. package/src/executors/foundation-preflight/schema.json +31 -0
  52. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +8 -0
  53. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +41 -0
  54. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +1 -0
  55. package/src/executors/foundation-profile-preflight/schema.json +21 -0
  56. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +13 -0
  57. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +69 -0
  58. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +1 -0
  59. package/src/executors/foundation-remove-preflight/schema.json +17 -0
  60. package/src/executors/github-bootstrap/github-bootstrap.d.ts +8 -0
  61. package/src/executors/github-bootstrap/github-bootstrap.js +30 -0
  62. package/src/executors/github-bootstrap/github-bootstrap.js.map +1 -0
  63. package/src/executors/github-bootstrap/schema.json +25 -0
  64. package/src/executors/refresh/refresh.d.ts +4 -0
  65. package/src/executors/refresh/refresh.js +6 -0
  66. package/src/executors/refresh/refresh.js.map +1 -0
  67. package/src/executors/remove/remove.d.ts +4 -0
  68. package/src/executors/remove/remove.js +6 -0
  69. package/src/executors/remove/remove.js.map +1 -0
  70. package/src/executors/sst-lifecycle/run-sst-command.d.ts +31 -0
  71. package/src/executors/sst-lifecycle/run-sst-command.js +226 -0
  72. package/src/executors/sst-lifecycle/run-sst-command.js.map +1 -0
  73. package/src/executors/sst-lifecycle/schema.json +45 -0
  74. package/src/executors/unlock/unlock.d.ts +4 -0
  75. package/src/executors/unlock/unlock.js +6 -0
  76. package/src/executors/unlock/unlock.js.map +1 -0
  77. package/src/executors/work-markers/schema.json +14 -0
  78. package/src/executors/work-markers/work-markers.d.ts +6 -0
  79. package/src/executors/work-markers/work-markers.js +20 -0
  80. package/src/executors/work-markers/work-markers.js.map +1 -0
  81. package/src/foundation/aurora-logical-database.d.ts +76 -0
  82. package/src/foundation/aurora-logical-database.js +419 -0
  83. package/src/foundation/aurora-logical-database.js.map +1 -0
  84. package/src/foundation/discovery.d.ts +55 -0
  85. package/src/foundation/discovery.js +55 -0
  86. package/src/foundation/discovery.js.map +1 -0
  87. package/src/foundation/index.d.ts +6 -0
  88. package/src/foundation/index.js +10 -0
  89. package/src/foundation/index.js.map +1 -0
  90. package/src/foundation/local-database-contract.d.ts +30 -0
  91. package/src/foundation/local-database-contract.js +75 -0
  92. package/src/foundation/local-database-contract.js.map +1 -0
  93. package/src/foundation/preflight.d.ts +31 -0
  94. package/src/foundation/preflight.js +114 -0
  95. package/src/foundation/preflight.js.map +1 -0
  96. package/src/foundation/provision-database-bindings.d.ts +30 -0
  97. package/src/foundation/provision-database-bindings.js +113 -0
  98. package/src/foundation/provision-database-bindings.js.map +1 -0
  99. package/src/foundation/provision-logical-database.d.ts +26 -0
  100. package/src/foundation/provision-logical-database.js +163 -0
  101. package/src/foundation/provision-logical-database.js.map +1 -0
  102. package/src/foundation/requirements.d.ts +37 -0
  103. package/src/foundation/requirements.js +141 -0
  104. package/src/foundation/requirements.js.map +1 -0
  105. package/src/foundation/stages.d.ts +14 -0
  106. package/src/foundation/stages.js +51 -0
  107. package/src/foundation/stages.js.map +1 -0
  108. package/src/generators/function/function.d.ts +13 -0
  109. package/src/generators/function/function.js +71 -0
  110. package/src/generators/function/function.js.map +1 -0
  111. package/src/generators/function/schema.d.ts +5 -0
  112. package/src/generators/function/schema.json +20 -0
  113. package/src/generators/job/job.d.ts +4 -0
  114. package/src/generators/job/job.js +5 -0
  115. package/src/generators/job/job.js.map +1 -0
  116. package/src/generators/preset/generator.d.ts +5 -0
  117. package/src/generators/preset/generator.js +41 -0
  118. package/src/generators/preset/generator.js.map +1 -0
  119. package/src/generators/preset/schema.d.ts +4 -0
  120. package/src/generators/preset/schema.json +22 -0
  121. package/src/generators/preset/workspace-files.d.ts +18 -0
  122. package/src/generators/preset/workspace-files.js +1605 -0
  123. package/src/generators/preset/workspace-files.js.map +1 -0
  124. package/src/generators/repository-policy/repository-policy.d.ts +4 -0
  125. package/src/generators/repository-policy/repository-policy.js +107 -0
  126. package/src/generators/repository-policy/repository-policy.js.map +1 -0
  127. package/src/generators/repository-policy/schema.d.ts +18 -0
  128. package/src/generators/repository-policy/schema.json +46 -0
  129. package/src/generators/service/service.d.ts +4 -0
  130. package/src/generators/service/service.js +5 -0
  131. package/src/generators/service/service.js.map +1 -0
  132. package/src/generators/slice/schema.d.ts +7 -0
  133. package/src/generators/slice/schema.json +38 -0
  134. package/src/generators/slice/slice.d.ts +26 -0
  135. package/src/generators/slice/slice.js +1698 -0
  136. package/src/generators/slice/slice.js.map +1 -0
  137. package/src/generators/upgrade/schema.d.ts +8 -0
  138. package/src/generators/upgrade/schema.json +31 -0
  139. package/src/generators/upgrade/upgrade.d.ts +27 -0
  140. package/src/generators/upgrade/upgrade.js +682 -0
  141. package/src/generators/upgrade/upgrade.js.map +1 -0
  142. package/src/generators/workload/schema.d.ts +6 -0
  143. package/src/generators/workload/schema.json +21 -0
  144. package/src/generators/workload/workload.d.ts +16 -0
  145. package/src/generators/workload/workload.js +157 -0
  146. package/src/generators/workload/workload.js.map +1 -0
  147. package/src/git-policy/action-pins.d.ts +28 -0
  148. package/src/git-policy/action-pins.js +35 -0
  149. package/src/git-policy/action-pins.js.map +1 -0
  150. package/src/git-policy/github-bootstrap.d.ts +23 -0
  151. package/src/git-policy/github-bootstrap.js +759 -0
  152. package/src/git-policy/github-bootstrap.js.map +1 -0
  153. package/src/git-policy/index.d.ts +3 -0
  154. package/src/git-policy/index.js +7 -0
  155. package/src/git-policy/index.js.map +1 -0
  156. package/src/git-policy/routing.d.ts +15 -0
  157. package/src/git-policy/routing.js +77 -0
  158. package/src/git-policy/routing.js.map +1 -0
  159. package/src/index.d.ts +8 -0
  160. package/src/index.js +12 -0
  161. package/src/index.js.map +1 -0
  162. package/src/local-dev/contracts.d.ts +31 -0
  163. package/src/local-dev/contracts.js +126 -0
  164. package/src/local-dev/contracts.js.map +1 -0
  165. package/src/local-dev/effects.d.ts +16 -0
  166. package/src/local-dev/effects.js +63 -0
  167. package/src/local-dev/effects.js.map +1 -0
  168. package/src/local-dev/gateway-daemon.d.ts +4 -0
  169. package/src/local-dev/gateway-daemon.js +39 -0
  170. package/src/local-dev/gateway-daemon.js.map +1 -0
  171. package/src/local-dev/gateway.d.ts +60 -0
  172. package/src/local-dev/gateway.js +368 -0
  173. package/src/local-dev/gateway.js.map +1 -0
  174. package/src/local-dev/identity.d.ts +16 -0
  175. package/src/local-dev/identity.js +101 -0
  176. package/src/local-dev/identity.js.map +1 -0
  177. package/src/local-dev/index.d.ts +7 -0
  178. package/src/local-dev/index.js +11 -0
  179. package/src/local-dev/index.js.map +1 -0
  180. package/src/local-dev/portless.d.ts +15 -0
  181. package/src/local-dev/portless.js +115 -0
  182. package/src/local-dev/portless.js.map +1 -0
  183. package/src/local-dev/ports.d.ts +10 -0
  184. package/src/local-dev/ports.js +39 -0
  185. package/src/local-dev/ports.js.map +1 -0
  186. package/src/local-dev/proxy.d.ts +37 -0
  187. package/src/local-dev/proxy.js +271 -0
  188. package/src/local-dev/proxy.js.map +1 -0
  189. package/src/local-dev/tls.d.ts +24 -0
  190. package/src/local-dev/tls.js +294 -0
  191. package/src/local-dev/tls.js.map +1 -0
  192. package/src/ownership/composition.d.ts +16 -0
  193. package/src/ownership/composition.js +125 -0
  194. package/src/ownership/composition.js.map +1 -0
  195. package/src/ownership/foundation-record.d.ts +66 -0
  196. package/src/ownership/foundation-record.js +108 -0
  197. package/src/ownership/foundation-record.js.map +1 -0
  198. package/src/ownership/hash.d.ts +2 -0
  199. package/src/ownership/hash.js +10 -0
  200. package/src/ownership/hash.js.map +1 -0
  201. package/src/ownership/index.d.ts +6 -0
  202. package/src/ownership/index.js +10 -0
  203. package/src/ownership/index.js.map +1 -0
  204. package/src/ownership/json-ownership.d.ts +13 -0
  205. package/src/ownership/json-ownership.js +147 -0
  206. package/src/ownership/json-ownership.js.map +1 -0
  207. package/src/ownership/record.d.ts +186 -0
  208. package/src/ownership/record.js +336 -0
  209. package/src/ownership/record.js.map +1 -0
  210. package/src/ownership/workspace-record.d.ts +66 -0
  211. package/src/ownership/workspace-record.js +108 -0
  212. package/src/ownership/workspace-record.js.map +1 -0
  213. package/src/repository-policy/aurora-preflight.d.ts +15 -0
  214. package/src/repository-policy/aurora-preflight.js +45 -0
  215. package/src/repository-policy/aurora-preflight.js.map +1 -0
  216. package/src/repository-policy/deployment-plan.d.ts +24 -0
  217. package/src/repository-policy/deployment-plan.js +124 -0
  218. package/src/repository-policy/deployment-plan.js.map +1 -0
  219. package/src/repository-policy/foundation-profile.d.ts +20 -0
  220. package/src/repository-policy/foundation-profile.js +45 -0
  221. package/src/repository-policy/foundation-profile.js.map +1 -0
  222. package/src/repository-policy/index.d.ts +4 -0
  223. package/src/repository-policy/index.js +8 -0
  224. package/src/repository-policy/index.js.map +1 -0
  225. package/src/repository-policy/policy.d.ts +59 -0
  226. package/src/repository-policy/policy.js +274 -0
  227. package/src/repository-policy/policy.js.map +1 -0
  228. package/src/schemas/blueprint-input-schema-v1.json +23 -0
  229. package/src/schemas/blueprint-v1.json +186 -0
  230. package/src/schemas/foundation-ownership-v2.json +42 -0
  231. package/src/schemas/foundation-requirement-v1.json +32 -0
  232. package/src/schemas/generated-ownership-v2.json +117 -0
  233. package/src/schemas/repository-policy-v1.json +58 -0
  234. package/src/schemas/workspace-ownership-v2.json +42 -0
  235. package/src/validation.d.ts +14 -0
  236. package/src/validation.js +14 -0
  237. package/src/validation.js.map +1 -0
  238. package/src/work-markers/index.d.ts +1 -0
  239. package/src/work-markers/index.js +5 -0
  240. package/src/work-markers/index.js.map +1 -0
  241. package/src/work-markers/work-markers.d.ts +39 -0
  242. package/src/work-markers/work-markers.js +359 -0
  243. package/src/work-markers/work-markers.js.map +1 -0
@@ -0,0 +1,359 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WORK_MARKER_KINDS = void 0;
4
+ exports.scanWorkMarkers = scanWorkMarkers;
5
+ exports.formatWorkMarkerComment = formatWorkMarkerComment;
6
+ exports.formatWorkMarkerReport = formatWorkMarkerReport;
7
+ exports.assertWorkMarkerReport = assertWorkMarkerReport;
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = require("node:path");
10
+ const index_js_1 = require("../ownership/index.js");
11
+ exports.WORK_MARKER_KINDS = [
12
+ 'TODO',
13
+ 'ASSUMPTION',
14
+ 'QUESTION',
15
+ 'SECURITY',
16
+ 'BLOCKER',
17
+ ];
18
+ const IGNORED_DIRECTORIES = new Set([
19
+ '.cache',
20
+ '.git',
21
+ '.next',
22
+ '.nx',
23
+ '.open-next',
24
+ '.sst',
25
+ '.turbo',
26
+ 'build',
27
+ 'coverage',
28
+ 'dist',
29
+ 'node_modules',
30
+ 'out',
31
+ ]);
32
+ const SCANNED_EXTENSIONS = new Set([
33
+ '.bash',
34
+ '.c',
35
+ '.cc',
36
+ '.conf',
37
+ '.cpp',
38
+ '.cs',
39
+ '.csh',
40
+ '.css',
41
+ '.cts',
42
+ '.fish',
43
+ '.go',
44
+ '.gql',
45
+ '.graphql',
46
+ '.h',
47
+ '.hcl',
48
+ '.hh',
49
+ '.hpp',
50
+ '.htm',
51
+ '.html',
52
+ '.ini',
53
+ '.java',
54
+ '.js',
55
+ '.jsx',
56
+ '.kt',
57
+ '.kts',
58
+ '.less',
59
+ '.mjs',
60
+ '.mts',
61
+ '.php',
62
+ '.properties',
63
+ '.py',
64
+ '.rb',
65
+ '.rs',
66
+ '.sass',
67
+ '.scss',
68
+ '.sh',
69
+ '.sql',
70
+ '.svelte',
71
+ '.swift',
72
+ '.tf',
73
+ '.toml',
74
+ '.ts',
75
+ '.tsx',
76
+ '.vue',
77
+ '.xml',
78
+ '.yaml',
79
+ '.yml',
80
+ '.zsh',
81
+ ]);
82
+ const SCANNED_BASENAMES = new Set(['Containerfile', 'Dockerfile', 'Makefile']);
83
+ const WORK_MARKER_COMMENT_PREFIXES = ['//', '#', '--', '/*', '<!--'];
84
+ const MARKER_LINE_PATTERN = /^\s*(?:\/\/|#|--|\/\*+|\*|<!--)\s*(?<content>.*)$/;
85
+ const MARKER_KIND_PATTERN = /^EBK-(?<kind>[A-Z][A-Z-]*)(?=\(|:)/;
86
+ const MARKER_PATTERN = /^EBK-(?<kind>[A-Z][A-Z-]*)\((?<reference>[^)]+)\):\s+(?<description>.+)$/;
87
+ const MARKER_REFERENCE_PATTERN = /^(?:GH:[1-9]\d*|PLAN:[a-z0-9][a-z0-9-]*\/[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?)$/;
88
+ function toWorkspacePath(root, path) {
89
+ const value = (0, node_path_1.relative)(root, path);
90
+ return value.split(node_path_1.sep).join('/');
91
+ }
92
+ function isScannedSource(path) {
93
+ const name = path.split(node_path_1.sep).at(-1) ?? path;
94
+ return (SCANNED_BASENAMES.has(name) ||
95
+ SCANNED_EXTENSIONS.has((0, node_path_1.extname)(name).toLowerCase()));
96
+ }
97
+ function isOwnershipRecord(path) {
98
+ return (path.split(node_path_1.sep).at(-1) === 'ownership.json' &&
99
+ path.split(node_path_1.sep).at(-2) === '.ebk');
100
+ }
101
+ function walkWorkspace(root, issues) {
102
+ const ownershipRecords = [];
103
+ const sourceFiles = [];
104
+ const visit = (directory) => {
105
+ let entries;
106
+ try {
107
+ entries = (0, node_fs_1.readdirSync)(directory, { withFileTypes: true });
108
+ }
109
+ catch (error) {
110
+ issues.push({
111
+ code: 'unreadable-path',
112
+ line: 1,
113
+ message: `cannot read directory: ${error instanceof Error ? error.message : String(error)}`,
114
+ path: toWorkspacePath(root, directory) || '.',
115
+ });
116
+ return;
117
+ }
118
+ entries.sort((left, right) => left.name.localeCompare(right.name));
119
+ for (const entry of entries) {
120
+ const path = (0, node_path_1.join)(directory, entry.name);
121
+ if (entry.isSymbolicLink())
122
+ continue;
123
+ if (entry.isDirectory()) {
124
+ const isEbkCache = entry.name === 'cache' && directory.split(node_path_1.sep).at(-1) === '.ebk';
125
+ if (!IGNORED_DIRECTORIES.has(entry.name) && !isEbkCache)
126
+ visit(path);
127
+ continue;
128
+ }
129
+ if (!entry.isFile())
130
+ continue;
131
+ if (isOwnershipRecord(path))
132
+ ownershipRecords.push(path);
133
+ if (isScannedSource(path))
134
+ sourceFiles.push(path);
135
+ }
136
+ };
137
+ visit(root);
138
+ return { ownershipRecords, sourceFiles };
139
+ }
140
+ function ownershipValidation(value) {
141
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
142
+ const record = value;
143
+ if (record.kind === 'workspace') {
144
+ return (0, index_js_1.validateWorkspaceOwnershipRecord)(value);
145
+ }
146
+ if (record.kind === 'foundation') {
147
+ return (0, index_js_1.validateFoundationOwnershipRecord)(value);
148
+ }
149
+ if ('slice' in record || 'blueprint' in record) {
150
+ return (0, index_js_1.validateGeneratedOwnershipRecord)(value);
151
+ }
152
+ }
153
+ return {
154
+ issues: [
155
+ {
156
+ message: 'must identify a workspace, Foundation, or Product Slice',
157
+ path: 'ownership',
158
+ },
159
+ ],
160
+ valid: false,
161
+ };
162
+ }
163
+ function addOwnershipPaths(workspaceRoot, recordPath, paths, ownership, issues) {
164
+ const recordRoot = (0, node_path_1.dirname)((0, node_path_1.dirname)(recordPath));
165
+ for (const entry of paths) {
166
+ const absolutePath = (0, node_path_1.resolve)(recordRoot, ...entry.path.split('/'));
167
+ const current = ownership.get(absolutePath);
168
+ if (current && current !== entry.mode) {
169
+ issues.push({
170
+ code: 'ownership-conflict',
171
+ line: 1,
172
+ message: `ownership records disagree whether this path is ${current} or ${entry.mode}`,
173
+ path: toWorkspacePath(workspaceRoot, absolutePath),
174
+ });
175
+ ownership.set(absolutePath, 'managed');
176
+ continue;
177
+ }
178
+ ownership.set(absolutePath, entry.mode);
179
+ }
180
+ }
181
+ function readOwnership(workspaceRoot, recordPaths, issues) {
182
+ const ownership = new Map();
183
+ for (const recordPath of recordPaths) {
184
+ let value;
185
+ try {
186
+ value = JSON.parse((0, node_fs_1.readFileSync)(recordPath, 'utf8'));
187
+ }
188
+ catch (error) {
189
+ issues.push({
190
+ code: 'invalid-ownership-record',
191
+ line: 1,
192
+ message: `cannot parse ownership record: ${error instanceof Error ? error.message : String(error)}`,
193
+ path: toWorkspacePath(workspaceRoot, recordPath),
194
+ });
195
+ continue;
196
+ }
197
+ const validation = ownershipValidation(value);
198
+ if (!validation.valid) {
199
+ issues.push({
200
+ code: 'invalid-ownership-record',
201
+ line: 1,
202
+ message: validation.issues
203
+ .map((issue) => `${issue.path}: ${issue.message}`)
204
+ .join('; '),
205
+ path: toWorkspacePath(workspaceRoot, recordPath),
206
+ });
207
+ continue;
208
+ }
209
+ addOwnershipPaths(workspaceRoot, recordPath, validation.value.paths, ownership, issues);
210
+ }
211
+ return ownership;
212
+ }
213
+ function trimCommentClose(value) {
214
+ return value.replace(/\s*(?:\*\/|-->)\s*$/, '').trim();
215
+ }
216
+ function scanSourceFile(workspaceRoot, path, ownership, markers, issues) {
217
+ let content;
218
+ try {
219
+ content = (0, node_fs_1.readFileSync)(path, 'utf8');
220
+ }
221
+ catch (error) {
222
+ issues.push({
223
+ code: 'unreadable-path',
224
+ line: 1,
225
+ message: `cannot read source file: ${error instanceof Error ? error.message : String(error)}`,
226
+ path: toWorkspacePath(workspaceRoot, path),
227
+ });
228
+ return;
229
+ }
230
+ if (content.includes('\0'))
231
+ return;
232
+ const workspacePath = toWorkspacePath(workspaceRoot, path);
233
+ const pathOwnership = ownership.get((0, node_path_1.resolve)(path)) ?? 'user-owned';
234
+ const lines = content.split(/\r?\n/);
235
+ lines.forEach((line, index) => {
236
+ const comment = MARKER_LINE_PATTERN.exec(line)?.groups?.content;
237
+ if (!comment || !comment.includes('EBK-'))
238
+ return;
239
+ const candidate = trimCommentClose(comment);
240
+ const markerKind = MARKER_KIND_PATTERN.exec(candidate)?.groups?.kind;
241
+ // Vocabulary names can appear in prose. Only the two marker-shaped forms
242
+ // are executable attempts: EBK-KIND(...) and the malformed EBK-KIND: form.
243
+ if (!markerKind)
244
+ return;
245
+ if (!exports.WORK_MARKER_KINDS.includes(markerKind)) {
246
+ issues.push({
247
+ code: 'unknown-marker-kind',
248
+ line: index + 1,
249
+ message: `EBK-${markerKind} is not in the framework marker vocabulary`,
250
+ path: workspacePath,
251
+ });
252
+ return;
253
+ }
254
+ const match = MARKER_PATTERN.exec(candidate);
255
+ const reference = match?.groups?.reference?.trim();
256
+ const description = match?.groups?.description?.trim();
257
+ if (!match ||
258
+ !reference ||
259
+ !MARKER_REFERENCE_PATTERN.test(reference) ||
260
+ !description) {
261
+ issues.push({
262
+ code: 'invalid-marker-syntax',
263
+ line: index + 1,
264
+ message: 'marker must use EBK-KIND(GH:<positive-number>|PLAN:<phase>/<slug>): self-contained description',
265
+ path: workspacePath,
266
+ });
267
+ return;
268
+ }
269
+ const marker = {
270
+ description,
271
+ kind: markerKind,
272
+ line: index + 1,
273
+ ownership: pathOwnership,
274
+ path: workspacePath,
275
+ reference,
276
+ };
277
+ markers.push(marker);
278
+ if (pathOwnership === 'managed') {
279
+ issues.push({
280
+ code: 'managed-file-marker',
281
+ line: marker.line,
282
+ message: 'work markers are permitted only in seeded or user-owned files; report a managed framework defect outside the generated file',
283
+ path: workspacePath,
284
+ });
285
+ }
286
+ });
287
+ }
288
+ function compareLocations(left, right) {
289
+ return left.path.localeCompare(right.path) || left.line - right.line;
290
+ }
291
+ function scanWorkMarkers(root) {
292
+ const workspaceRoot = (0, node_path_1.resolve)(root);
293
+ let isDirectory = false;
294
+ try {
295
+ isDirectory = (0, node_fs_1.statSync)(workspaceRoot).isDirectory();
296
+ }
297
+ catch {
298
+ // Use the stable contract error below.
299
+ }
300
+ if (!isDirectory) {
301
+ throw new Error(`Work-marker root is not a directory: ${root}`);
302
+ }
303
+ const issues = [];
304
+ const { ownershipRecords, sourceFiles } = walkWorkspace(workspaceRoot, issues);
305
+ const markers = [];
306
+ const ownership = readOwnership(workspaceRoot, ownershipRecords, issues);
307
+ for (const path of sourceFiles) {
308
+ scanSourceFile(workspaceRoot, path, ownership, markers, issues);
309
+ }
310
+ markers.sort(compareLocations);
311
+ issues.sort(compareLocations);
312
+ return {
313
+ blockingMarkers: markers.filter((marker) => marker.kind === 'SECURITY' || marker.kind === 'BLOCKER'),
314
+ issues,
315
+ markers,
316
+ root: workspaceRoot,
317
+ };
318
+ }
319
+ function formatWorkMarkerComment(input) {
320
+ if (!exports.WORK_MARKER_KINDS.includes(input.kind)) {
321
+ throw new Error(`Unknown EBK work-marker kind: ${String(input.kind)}`);
322
+ }
323
+ const reference = input.reference.trim();
324
+ if (!MARKER_REFERENCE_PATTERN.test(reference)) {
325
+ throw new Error('EBK work-marker reference must be GH:<positive-number> or PLAN:<phase>/<slug>.');
326
+ }
327
+ const description = input.description.trim();
328
+ if (description === '' || /[\r\n]/.test(description)) {
329
+ throw new Error('EBK work-marker description must be non-empty and remain on one line.');
330
+ }
331
+ const commentPrefix = input.commentPrefix ?? '//';
332
+ if (!WORK_MARKER_COMMENT_PREFIXES.includes(commentPrefix)) {
333
+ throw new Error('EBK work-marker comment prefix must be //, #, --, /*, or <!--.');
334
+ }
335
+ const commentClose = commentPrefix === '/*' ? ' */' : commentPrefix === '<!--' ? ' -->' : '';
336
+ return `${commentPrefix} EBK-${input.kind}(${reference}): ${description}${commentClose}`;
337
+ }
338
+ function formatWorkMarkerReport(report) {
339
+ const lines = [
340
+ `[ebk-work-markers] ${report.markers.length} open marker(s); ${report.issues.length} validation issue(s); ${report.blockingMarkers.length} protected-promotion blocker(s).`,
341
+ ];
342
+ for (const marker of report.markers) {
343
+ lines.push(` ${marker.path}:${marker.line} EBK-${marker.kind}(${marker.reference}) [${marker.ownership}] ${marker.description}`);
344
+ }
345
+ for (const issue of report.issues) {
346
+ lines.push(` ERROR ${issue.path}:${issue.line} ${issue.code}: ${issue.message}`);
347
+ }
348
+ return lines.join('\n');
349
+ }
350
+ function assertWorkMarkerReport(report, options = {}) {
351
+ const failures = report.issues.map((issue) => `${issue.path}:${issue.line} ${issue.code}: ${issue.message}`);
352
+ if (options.protectedPromotion) {
353
+ failures.push(...report.blockingMarkers.map((marker) => `${marker.path}:${marker.line} EBK-${marker.kind}(${marker.reference}) blocks protected deploy and refresh`));
354
+ }
355
+ if (failures.length > 0) {
356
+ throw new Error(`EBK work-marker validation failed:\n${failures.join('\n')}`);
357
+ }
358
+ }
359
+ //# sourceMappingURL=work-markers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-markers.js","sourceRoot":"","sources":["../../../../../packages/nx/src/work-markers/work-markers.ts"],"names":[],"mappings":"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"}