@stilhq/core 0.5.0 → 0.6.1

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 (161) hide show
  1. package/README.md +61 -0
  2. package/dist/changeset/apply.d.ts +11 -0
  3. package/dist/changeset/apply.d.ts.map +1 -0
  4. package/dist/changeset/apply.js +239 -0
  5. package/dist/changeset/apply.js.map +1 -0
  6. package/dist/changeset/ci-report.d.ts +25 -0
  7. package/dist/changeset/ci-report.d.ts.map +1 -0
  8. package/dist/changeset/ci-report.js +206 -0
  9. package/dist/changeset/ci-report.js.map +1 -0
  10. package/dist/changeset/classify.d.ts +77 -0
  11. package/dist/changeset/classify.d.ts.map +1 -0
  12. package/dist/changeset/classify.js +285 -0
  13. package/dist/changeset/classify.js.map +1 -0
  14. package/dist/changeset/cli-gate.d.ts +46 -0
  15. package/dist/changeset/cli-gate.d.ts.map +1 -0
  16. package/dist/changeset/cli-gate.js +409 -0
  17. package/dist/changeset/cli-gate.js.map +1 -0
  18. package/dist/changeset/conflict.d.ts +11 -0
  19. package/dist/changeset/conflict.d.ts.map +1 -0
  20. package/dist/changeset/conflict.js +130 -0
  21. package/dist/changeset/conflict.js.map +1 -0
  22. package/dist/changeset/diff-components.d.ts +80 -0
  23. package/dist/changeset/diff-components.d.ts.map +1 -0
  24. package/dist/changeset/diff-components.js +264 -0
  25. package/dist/changeset/diff-components.js.map +1 -0
  26. package/dist/changeset/diff-text.d.ts +66 -0
  27. package/dist/changeset/diff-text.d.ts.map +1 -0
  28. package/dist/changeset/diff-text.js +284 -0
  29. package/dist/changeset/diff-text.js.map +1 -0
  30. package/dist/changeset/diff-tokens.d.ts +63 -0
  31. package/dist/changeset/diff-tokens.d.ts.map +1 -0
  32. package/dist/changeset/diff-tokens.js +483 -0
  33. package/dist/changeset/diff-tokens.js.map +1 -0
  34. package/dist/changeset/impact.d.ts +31 -0
  35. package/dist/changeset/impact.d.ts.map +1 -0
  36. package/dist/changeset/impact.js +188 -0
  37. package/dist/changeset/impact.js.map +1 -0
  38. package/dist/changeset/pr-body.d.ts +33 -0
  39. package/dist/changeset/pr-body.d.ts.map +1 -0
  40. package/dist/changeset/pr-body.js +421 -0
  41. package/dist/changeset/pr-body.js.map +1 -0
  42. package/dist/changeset/quality-gate.d.ts +10 -0
  43. package/dist/changeset/quality-gate.d.ts.map +1 -0
  44. package/dist/changeset/quality-gate.js +207 -0
  45. package/dist/changeset/quality-gate.js.map +1 -0
  46. package/dist/changeset/rollback.d.ts +19 -0
  47. package/dist/changeset/rollback.d.ts.map +1 -0
  48. package/dist/changeset/rollback.js +163 -0
  49. package/dist/changeset/rollback.js.map +1 -0
  50. package/dist/ci/template-generator.d.ts +22 -0
  51. package/dist/ci/template-generator.d.ts.map +1 -0
  52. package/dist/ci/template-generator.js +215 -0
  53. package/dist/ci/template-generator.js.map +1 -0
  54. package/dist/core/schema.d.ts +64 -0
  55. package/dist/core/schema.d.ts.map +1 -1
  56. package/dist/core/text.d.ts +45 -0
  57. package/dist/core/text.d.ts.map +1 -0
  58. package/dist/core/text.js +189 -0
  59. package/dist/core/text.js.map +1 -0
  60. package/dist/gate/engine.d.ts +20 -0
  61. package/dist/gate/engine.d.ts.map +1 -0
  62. package/dist/gate/engine.js +109 -0
  63. package/dist/gate/engine.js.map +1 -0
  64. package/dist/gate/types.d.ts +76 -0
  65. package/dist/gate/types.d.ts.map +1 -0
  66. package/dist/gate/types.js +6 -0
  67. package/dist/gate/types.js.map +1 -0
  68. package/dist/index.d.ts +56 -0
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +150 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/pr/comment-manager.d.ts +33 -0
  73. package/dist/pr/comment-manager.d.ts.map +1 -0
  74. package/dist/pr/comment-manager.js +137 -0
  75. package/dist/pr/comment-manager.js.map +1 -0
  76. package/dist/pr/conflict.d.ts +34 -0
  77. package/dist/pr/conflict.d.ts.map +1 -0
  78. package/dist/pr/conflict.js +127 -0
  79. package/dist/pr/conflict.js.map +1 -0
  80. package/dist/pr/generator.d.ts +70 -0
  81. package/dist/pr/generator.d.ts.map +1 -0
  82. package/dist/pr/generator.js +241 -0
  83. package/dist/pr/generator.js.map +1 -0
  84. package/dist/pr/github-api.d.ts +122 -0
  85. package/dist/pr/github-api.d.ts.map +1 -0
  86. package/dist/pr/github-api.js +269 -0
  87. package/dist/pr/github-api.js.map +1 -0
  88. package/dist/report/changeset-report.d.ts +10 -0
  89. package/dist/report/changeset-report.d.ts.map +1 -0
  90. package/dist/report/changeset-report.js +14 -0
  91. package/dist/report/changeset-report.js.map +1 -0
  92. package/dist/report/classification-report.d.ts +12 -0
  93. package/dist/report/classification-report.d.ts.map +1 -0
  94. package/dist/report/classification-report.js +157 -0
  95. package/dist/report/classification-report.js.map +1 -0
  96. package/dist/report/impact-report.d.ts +10 -0
  97. package/dist/report/impact-report.d.ts.map +1 -0
  98. package/dist/report/impact-report.js +47 -0
  99. package/dist/report/impact-report.js.map +1 -0
  100. package/dist/report/summary-report.d.ts +10 -0
  101. package/dist/report/summary-report.d.ts.map +1 -0
  102. package/dist/report/summary-report.js +96 -0
  103. package/dist/report/summary-report.js.map +1 -0
  104. package/dist/report/writer.d.ts +17 -0
  105. package/dist/report/writer.d.ts.map +1 -0
  106. package/dist/report/writer.js +41 -0
  107. package/dist/report/writer.js.map +1 -0
  108. package/dist/rules/engine.d.ts +46 -0
  109. package/dist/rules/engine.d.ts.map +1 -0
  110. package/dist/rules/engine.js +200 -0
  111. package/dist/rules/engine.js.map +1 -0
  112. package/dist/rules/index.d.ts +10 -0
  113. package/dist/rules/index.d.ts.map +1 -0
  114. package/dist/rules/index.js +25 -0
  115. package/dist/rules/index.js.map +1 -0
  116. package/dist/rules/loader.d.ts +20 -0
  117. package/dist/rules/loader.d.ts.map +1 -0
  118. package/dist/rules/loader.js +93 -0
  119. package/dist/rules/loader.js.map +1 -0
  120. package/dist/rules/packs/core.d.ts +14 -0
  121. package/dist/rules/packs/core.d.ts.map +1 -0
  122. package/dist/rules/packs/core.js +377 -0
  123. package/dist/rules/packs/core.js.map +1 -0
  124. package/dist/rules/schema.d.ts +12 -0
  125. package/dist/rules/schema.d.ts.map +1 -0
  126. package/dist/rules/schema.js +149 -0
  127. package/dist/rules/schema.js.map +1 -0
  128. package/dist/rules/types.d.ts +86 -0
  129. package/dist/rules/types.d.ts.map +1 -0
  130. package/dist/rules/types.js +9 -0
  131. package/dist/rules/types.js.map +1 -0
  132. package/dist/types/changeset.d.ts +509 -0
  133. package/dist/types/changeset.d.ts.map +1 -0
  134. package/dist/types/changeset.js +14 -0
  135. package/dist/types/changeset.js.map +1 -0
  136. package/dist/w3c/__tests__/fixtures/tokens-studio-export.json +58 -0
  137. package/dist/w3c/parser.d.ts +44 -0
  138. package/dist/w3c/parser.d.ts.map +1 -0
  139. package/dist/w3c/parser.js +146 -0
  140. package/dist/w3c/parser.js.map +1 -0
  141. package/dist/w3c/types.d.ts +31 -0
  142. package/dist/w3c/types.d.ts.map +1 -0
  143. package/dist/w3c/types.js +7 -0
  144. package/dist/w3c/types.js.map +1 -0
  145. package/dist/w3c/validator.d.ts +14 -0
  146. package/dist/w3c/validator.d.ts.map +1 -0
  147. package/dist/w3c/validator.js +162 -0
  148. package/dist/w3c/validator.js.map +1 -0
  149. package/package.json +6 -4
  150. package/templates/stil-quality-gate.yml +122 -0
  151. package/templates/workspace/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  152. package/templates/workspace/.github/workflows/stil-gate.yml +42 -0
  153. package/templates/workspace/.github/workflows/stil-preview.yml +29 -0
  154. package/templates/workspace/.stil/components/snapshots/.gitkeep +0 -0
  155. package/templates/workspace/.stil/reports/.gitkeep +0 -0
  156. package/templates/workspace/.stil/rules/.gitkeep +0 -0
  157. package/templates/workspace/.stil/text/snapshots/.gitkeep +0 -0
  158. package/templates/workspace/.stil/tokens/config/mapping.json +16 -0
  159. package/templates/workspace/.stil/tokens/raw/.gitkeep +0 -0
  160. package/templates/workspace/README.md +40 -0
  161. package/templates/workspace/package.json +19 -0
@@ -0,0 +1,409 @@
1
+ "use strict";
2
+ // cli-gate.ts — CLI entry point for Quality Gate
3
+ //
4
+ // Quality Gate をコマンドラインから実行するための最小エントリーポイント。
5
+ //
6
+ // 使い方:
7
+ // node cli-gate.js --changesets ./changesets/*.json --rules ./gate-rules.json
8
+ // node cli-gate.js --changesets ./changesets/*.json --format gh-annotations
9
+ //
10
+ // 戻り値: process.exit(0) = pass, process.exit(1) = fail
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.parseArgs = parseArgs;
46
+ exports.getHelpMessage = getHelpMessage;
47
+ exports.runGate = runGate;
48
+ exports.parseGateArgs = parseGateArgs;
49
+ exports.runGateEngineCli = runGateEngineCli;
50
+ exports.getGateHelpMessage = getGateHelpMessage;
51
+ const fs = __importStar(require("fs"));
52
+ const path = __importStar(require("path"));
53
+ const quality_gate_1 = require("./quality-gate");
54
+ const ci_report_1 = require("./ci-report");
55
+ const engine_1 = require("../gate/engine");
56
+ const writer_1 = require("../report/writer");
57
+ const loader_1 = require("../rules/loader");
58
+ // ========================================
59
+ // Core: parseArgs
60
+ // ========================================
61
+ /**
62
+ * コマンドライン引数をパースする。
63
+ */
64
+ function parseArgs(argv) {
65
+ const args = {
66
+ changesetPaths: [],
67
+ format: "log",
68
+ };
69
+ let i = 0;
70
+ while (i < argv.length) {
71
+ const arg = argv[i];
72
+ if (arg === "--help" || arg === "-h") {
73
+ return null; // help requested
74
+ }
75
+ if (arg === "--changesets" || arg === "-c") {
76
+ i++;
77
+ while (i < argv.length && !argv[i].startsWith("-")) {
78
+ args.changesetPaths.push(argv[i]);
79
+ i++;
80
+ }
81
+ continue;
82
+ }
83
+ if (arg === "--rules" || arg === "-r") {
84
+ i++;
85
+ if (i < argv.length) {
86
+ args.rulesPath = argv[i];
87
+ i++;
88
+ }
89
+ continue;
90
+ }
91
+ if (arg === "--format" || arg === "-f") {
92
+ i++;
93
+ if (i < argv.length) {
94
+ const fmt = argv[i];
95
+ if (fmt === "log" || fmt === "pr-comment" || fmt === "gh-annotations") {
96
+ args.format = fmt;
97
+ }
98
+ i++;
99
+ }
100
+ continue;
101
+ }
102
+ if (arg === "--output" || arg === "-o") {
103
+ i++;
104
+ if (i < argv.length) {
105
+ args.outputPath = argv[i];
106
+ i++;
107
+ }
108
+ continue;
109
+ }
110
+ i++;
111
+ }
112
+ return args;
113
+ }
114
+ /**
115
+ * ヘルプメッセージを生成する。
116
+ */
117
+ function getHelpMessage() {
118
+ return `Stil Quality Gate CLI
119
+
120
+ Usage:
121
+ node cli-gate.js --changesets <files...> [options]
122
+
123
+ Options:
124
+ -c, --changesets <files...> ChangeSet JSON file paths (required)
125
+ -r, --rules <file> Quality Gate rules JSON file path
126
+ -f, --format <format> Output format: log | pr-comment | gh-annotations (default: log)
127
+ -o, --output <file> Write result JSON to file
128
+ -h, --help Show this help message
129
+
130
+ Examples:
131
+ node cli-gate.js --changesets .stil/changesets/*.json
132
+ node cli-gate.js -c cs-001.json cs-002.json -f gh-annotations
133
+ node cli-gate.js -c .stil/changesets/*.json -r gate-rules.json -o result.json`;
134
+ }
135
+ // ========================================
136
+ // Core: runGate
137
+ // ========================================
138
+ /**
139
+ * Quality Gate を実行する CLI エントリーポイント。
140
+ *
141
+ * @returns exitCode (0 = pass, 1 = fail, 2 = error)
142
+ */
143
+ async function runGate(args) {
144
+ // Load changesets
145
+ const changesets = [];
146
+ for (const filePath of args.changesetPaths) {
147
+ const resolved = path.resolve(filePath);
148
+ const content = fs.readFileSync(resolved, "utf-8");
149
+ const cs = JSON.parse(content);
150
+ changesets.push(cs);
151
+ }
152
+ // Load rules
153
+ let rules = quality_gate_1.DEFAULT_QUALITY_GATE_RULES;
154
+ if (args.rulesPath) {
155
+ const resolved = path.resolve(args.rulesPath);
156
+ const content = fs.readFileSync(resolved, "utf-8");
157
+ rules = {
158
+ ...quality_gate_1.DEFAULT_QUALITY_GATE_RULES,
159
+ ...JSON.parse(content),
160
+ };
161
+ }
162
+ // Run quality gate
163
+ const result = (0, quality_gate_1.runQualityGate)({ changesets, rules });
164
+ // Format output
165
+ let output;
166
+ switch (args.format) {
167
+ case "pr-comment":
168
+ output = (0, ci_report_1.formatPRComment)(result);
169
+ break;
170
+ case "gh-annotations":
171
+ output = (0, ci_report_1.formatGHAnnotations)(result);
172
+ break;
173
+ default:
174
+ output = (0, ci_report_1.formatCILog)(result);
175
+ break;
176
+ }
177
+ // Write to stdout
178
+ process.stdout.write(output + "\n");
179
+ // Write result JSON to file if requested
180
+ if (args.outputPath) {
181
+ const resolved = path.resolve(args.outputPath);
182
+ fs.writeFileSync(resolved, JSON.stringify(result, null, 2), "utf-8");
183
+ }
184
+ return result.exitCode;
185
+ }
186
+ // ========================================
187
+ // Main entry (when run directly)
188
+ // ========================================
189
+ /* istanbul ignore next */
190
+ async function main() {
191
+ const argv = process.argv.slice(2);
192
+ const args = parseArgs(argv);
193
+ if (args === null) {
194
+ process.stdout.write(getHelpMessage() + "\n");
195
+ process.exit(0);
196
+ }
197
+ if (args.changesetPaths.length === 0) {
198
+ process.stderr.write("Error: No changeset files specified\n\n");
199
+ process.stdout.write(getHelpMessage() + "\n");
200
+ process.exit(2);
201
+ }
202
+ try {
203
+ const exitCode = await runGate(args);
204
+ process.exit(exitCode);
205
+ }
206
+ catch (err) {
207
+ const message = err instanceof Error ? err.message : String(err);
208
+ process.stderr.write(`Error: ${message}\n`);
209
+ process.exit(2);
210
+ }
211
+ }
212
+ /**
213
+ * Parse `stil gate` style arguments.
214
+ */
215
+ function parseGateArgs(argv) {
216
+ const args = {
217
+ changesetPaths: [],
218
+ mode: "warn",
219
+ format: "both",
220
+ };
221
+ let i = 0;
222
+ while (i < argv.length) {
223
+ const arg = argv[i];
224
+ if (arg === "--help" || arg === "-h") {
225
+ return null;
226
+ }
227
+ if (arg === "--changesets" || arg === "-c") {
228
+ i++;
229
+ while (i < argv.length && !argv[i].startsWith("-")) {
230
+ args.changesetPaths.push(argv[i]);
231
+ i++;
232
+ }
233
+ continue;
234
+ }
235
+ if (arg === "--mode" || arg === "-m") {
236
+ i++;
237
+ if (i < argv.length && (argv[i] === "warn" || argv[i] === "strict")) {
238
+ args.mode = argv[i];
239
+ i++;
240
+ }
241
+ continue;
242
+ }
243
+ if (arg === "--lane") {
244
+ i++;
245
+ if (i < argv.length) {
246
+ const val = argv[i];
247
+ if (val === "tokens" || val === "text" || val === "components") {
248
+ args.lane = val;
249
+ }
250
+ i++;
251
+ }
252
+ continue;
253
+ }
254
+ if (arg === "--scope") {
255
+ i++;
256
+ if (i < argv.length) {
257
+ args.scope = argv[i];
258
+ i++;
259
+ }
260
+ continue;
261
+ }
262
+ if (arg === "--output") {
263
+ i++;
264
+ if (i < argv.length) {
265
+ args.outputDir = argv[i];
266
+ i++;
267
+ }
268
+ continue;
269
+ }
270
+ if (arg === "--ci") {
271
+ args.ci = true;
272
+ args.mode = "strict";
273
+ i++;
274
+ continue;
275
+ }
276
+ if (arg === "--format") {
277
+ i++;
278
+ if (i < argv.length) {
279
+ const fmt = argv[i];
280
+ if (fmt === "json" || fmt === "markdown" || fmt === "both") {
281
+ args.format = fmt;
282
+ }
283
+ i++;
284
+ }
285
+ continue;
286
+ }
287
+ if (arg === "--strict-warnings") {
288
+ args.strictWarnings = true;
289
+ i++;
290
+ continue;
291
+ }
292
+ if (arg === "--rules") {
293
+ i++;
294
+ if (!args.rulesFiles)
295
+ args.rulesFiles = [];
296
+ while (i < argv.length && !argv[i].startsWith("-")) {
297
+ args.rulesFiles.push(argv[i]);
298
+ i++;
299
+ }
300
+ continue;
301
+ }
302
+ if (arg === "--rules-dir") {
303
+ i++;
304
+ if (i < argv.length) {
305
+ args.rulesDir = argv[i];
306
+ i++;
307
+ }
308
+ continue;
309
+ }
310
+ if (arg === "--no-core-rules") {
311
+ args.noCoreRules = true;
312
+ i++;
313
+ continue;
314
+ }
315
+ i++;
316
+ }
317
+ return args;
318
+ }
319
+ /**
320
+ * Run the Gate Engine pipeline from CLI arguments.
321
+ *
322
+ * @returns exitCode (0 = pass, 1 = fail, 2 = error)
323
+ */
324
+ async function runGateEngineCli(args) {
325
+ // Load changesets
326
+ const changesets = [];
327
+ for (const filePath of args.changesetPaths) {
328
+ const resolved = path.resolve(filePath);
329
+ const content = fs.readFileSync(resolved, "utf-8");
330
+ const cs = JSON.parse(content);
331
+ // Filter by lane if specified
332
+ if (args.lane && cs.lane !== args.lane)
333
+ continue;
334
+ changesets.push(cs);
335
+ }
336
+ if (changesets.length === 0) {
337
+ process.stdout.write("No changesets to process.\n");
338
+ return 0;
339
+ }
340
+ // Load rule packs if specified
341
+ let rulePacks;
342
+ if (args.rulesFiles || args.rulesDir) {
343
+ rulePacks = [];
344
+ if (args.rulesFiles) {
345
+ for (const ruleFile of args.rulesFiles) {
346
+ const pack = (0, loader_1.loadRulePackFromFile)(path.resolve(ruleFile));
347
+ if (pack)
348
+ rulePacks.push(pack);
349
+ }
350
+ }
351
+ if (args.rulesDir) {
352
+ const dirPacks = (0, loader_1.loadRulePacks)(args.rulesDir);
353
+ rulePacks.push(...dirPacks);
354
+ }
355
+ }
356
+ let finalExitCode = 0;
357
+ for (const cs of changesets) {
358
+ const result = await (0, engine_1.runGateEngine)(cs, {
359
+ mode: args.mode,
360
+ lane: args.lane,
361
+ scope: args.scope,
362
+ outputDir: args.outputDir,
363
+ strictWarnings: args.strictWarnings,
364
+ rulePacks,
365
+ });
366
+ // Write reports if requested
367
+ if (args.outputDir) {
368
+ await (0, writer_1.writeReports)(result, args.outputDir);
369
+ }
370
+ // Output to console
371
+ process.stdout.write(result.summary + "\n");
372
+ if (result.exitCode !== 0) {
373
+ finalExitCode = 1;
374
+ }
375
+ }
376
+ return finalExitCode;
377
+ }
378
+ function getGateHelpMessage() {
379
+ return `Stil Gate CLI
380
+
381
+ Usage:
382
+ stil gate --changesets <files...> [options]
383
+
384
+ Options:
385
+ -c, --changesets <files...> ChangeSet JSON file paths (required)
386
+ -m, --mode warn|strict Gate mode (default: warn)
387
+ --lane tokens|text|components Filter by lane
388
+ --scope <scope> Scope filter
389
+ --output <dir> Output directory (default: .stil/reports/)
390
+ --ci CI mode (strict default, no prompts)
391
+ --format json|markdown|both Output format (default: both)
392
+ --strict-warnings In strict mode, warnings also fail
393
+ --rules <files...> Rule Pack JSON files
394
+ --rules-dir <dir> Directory containing Rule Pack JSON files
395
+ --no-core-rules Disable built-in core rules
396
+ -h, --help Show this help message
397
+
398
+ Exit codes:
399
+ 0 = Gate passed
400
+ 1 = Gate failed
401
+ 2 = Error`;
402
+ }
403
+ // Only run main if executed directly (not imported)
404
+ const isDirectExecution = typeof require !== "undefined" && require.main === module;
405
+ /* istanbul ignore next */
406
+ if (isDirectExecution) {
407
+ main();
408
+ }
409
+ //# sourceMappingURL=cli-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-gate.js","sourceRoot":"","sources":["../../src/changeset/cli-gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ConflictCheckInput, ConflictCheckResult } from "../types/changeset";
2
+ import type { AliasMap } from "./impact";
3
+ /**
4
+ * 新しい ChangeSet と pending ChangeSet 間の競合を検出する。
5
+ *
6
+ * @param input - 新しい ChangeSet と pending リスト
7
+ * @param aliasConsumers - alias chain の依存関係マップ(tokens lane 用)
8
+ * @returns 競合チェック結果
9
+ */
10
+ export declare function checkConflicts(input: ConflictCheckInput, aliasConsumers?: AliasMap): ConflictCheckResult;
11
+ //# sourceMappingURL=conflict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict.d.ts","sourceRoot":"","sources":["../../src/changeset/conflict.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAKV,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAMzC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,kBAAkB,EACzB,cAAc,CAAC,EAAE,QAAQ,GACxB,mBAAmB,CA2FrB"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ // conflict.ts — Conflict Detection
3
+ //
4
+ // 同一対象への未適用 ChangeSet が競合していないかをチェックするロジック。
5
+ //
6
+ // CHANGESET_SPEC.md Section 7 に基づく:
7
+ // - 同一 tokenKey / i18nKey / componentId への複数 ChangeSet を検出
8
+ // - Tokens の alias chain 依存も衝突チェック対象
9
+ // - 衝突時は Apply をブロック
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.checkConflicts = checkConflicts;
12
+ // ========================================
13
+ // Core: checkConflicts
14
+ // ========================================
15
+ /**
16
+ * 新しい ChangeSet と pending ChangeSet 間の競合を検出する。
17
+ *
18
+ * @param input - 新しい ChangeSet と pending リスト
19
+ * @param aliasConsumers - alias chain の依存関係マップ(tokens lane 用)
20
+ * @returns 競合チェック結果
21
+ */
22
+ function checkConflicts(input, aliasConsumers) {
23
+ const { newChangeset, pendingChangesets } = input;
24
+ const conflicts = [];
25
+ // Filter pending changesets to same lane only
26
+ const sameLanePending = pendingChangesets.filter((cs) => cs.lane === newChangeset.lane && cs.id !== newChangeset.id);
27
+ if (sameLanePending.length === 0) {
28
+ return { hasConflict: false, conflicts: [] };
29
+ }
30
+ // Extract target IDs from the new changeset
31
+ const newTargetIds = extractTargetIds(newChangeset);
32
+ // For tokens: also collect alias-dependent targets
33
+ const newExpandedTargets = new Set(newTargetIds);
34
+ if (newChangeset.lane === "tokens" && aliasConsumers) {
35
+ for (const targetId of newTargetIds) {
36
+ const dependents = collectDependencyChain(targetId, aliasConsumers);
37
+ for (const dep of dependents) {
38
+ newExpandedTargets.add(dep);
39
+ }
40
+ }
41
+ }
42
+ // Check each pending changeset for same-target conflicts
43
+ for (const pending of sameLanePending) {
44
+ const pendingTargetIds = extractTargetIds(pending);
45
+ // For tokens: also expand pending targets through alias chain
46
+ const pendingExpandedTargets = new Set(pendingTargetIds);
47
+ if (pending.lane === "tokens" && aliasConsumers) {
48
+ for (const targetId of pendingTargetIds) {
49
+ const dependents = collectDependencyChain(targetId, aliasConsumers);
50
+ for (const dep of dependents) {
51
+ pendingExpandedTargets.add(dep);
52
+ }
53
+ }
54
+ }
55
+ // Direct same-target conflicts
56
+ for (const targetId of newTargetIds) {
57
+ if (pendingTargetIds.includes(targetId)) {
58
+ conflicts.push({
59
+ targetId,
60
+ existingChangeSetId: pending.id,
61
+ newChangeSetId: newChangeset.id,
62
+ type: "same-target",
63
+ });
64
+ }
65
+ }
66
+ // Dependency conflicts (tokens only, via alias chain)
67
+ if (newChangeset.lane === "tokens" && aliasConsumers) {
68
+ // Check if new targets affect pending targets via aliases
69
+ for (const newTarget of newTargetIds) {
70
+ for (const pendingTarget of pendingTargetIds) {
71
+ // Skip if already reported as same-target
72
+ if (newTarget === pendingTarget)
73
+ continue;
74
+ if (newExpandedTargets.has(pendingTarget) ||
75
+ pendingExpandedTargets.has(newTarget)) {
76
+ // Check for duplicates
77
+ const alreadyReported = conflicts.some((c) => c.targetId === pendingTarget &&
78
+ c.existingChangeSetId === pending.id &&
79
+ c.type === "dependency");
80
+ if (!alreadyReported) {
81
+ conflicts.push({
82
+ targetId: pendingTarget,
83
+ existingChangeSetId: pending.id,
84
+ newChangeSetId: newChangeset.id,
85
+ type: "dependency",
86
+ });
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
92
+ }
93
+ return {
94
+ hasConflict: conflicts.length > 0,
95
+ conflicts,
96
+ };
97
+ }
98
+ // ========================================
99
+ // Target ID extraction per lane
100
+ // ========================================
101
+ function extractTargetIds(changeset) {
102
+ switch (changeset.lane) {
103
+ case "tokens":
104
+ return changeset.items.map((item) => item.tokenKey);
105
+ case "text":
106
+ return changeset.items.map((item) => item.i18nKey);
107
+ case "components":
108
+ return changeset.items.map((item) => item.componentId);
109
+ }
110
+ }
111
+ // ========================================
112
+ // Alias chain dependency collection
113
+ // ========================================
114
+ /**
115
+ * alias chain を辿って、指定トークンに依存する全トークンを収集する。
116
+ * 循環参照を防止する。
117
+ */
118
+ function collectDependencyChain(tokenKey, aliasConsumers, visited = new Set()) {
119
+ if (visited.has(tokenKey))
120
+ return [];
121
+ visited.add(tokenKey);
122
+ const directConsumers = aliasConsumers[tokenKey] || [];
123
+ const allDependents = [...directConsumers];
124
+ for (const consumer of directConsumers) {
125
+ const transitive = collectDependencyChain(consumer, aliasConsumers, visited);
126
+ allDependents.push(...transitive);
127
+ }
128
+ return allDependents;
129
+ }
130
+ //# sourceMappingURL=conflict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict.js","sourceRoot":"","sources":["../../src/changeset/conflict.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type { ChangeSet, VariantDiff, ChangeSetDirection } from "../types/changeset";
2
+ /** Figma Component snapshot 内の 1 コンポーネント */
3
+ export interface FigmaComponentEntry {
4
+ /** Figma component key (e.g., "fileId/componentId") */
5
+ figmaComponentKey: string;
6
+ /** コンポーネント名 */
7
+ name: string;
8
+ /** variant prop → 現在の値一覧 */
9
+ variantProps: Record<string, string[]>;
10
+ }
11
+ /** Figma Component snapshot */
12
+ export interface FigmaComponentSnapshot {
13
+ /** スコープ */
14
+ scope: string;
15
+ /** 生成日時 */
16
+ generatedAt?: string;
17
+ /** コンポーネント一覧 */
18
+ components: FigmaComponentEntry[];
19
+ }
20
+ /** Git 側 component manifest 内の 1 コンポーネント */
21
+ export interface GitComponentEntry {
22
+ /** 内部コンポーネント ID */
23
+ componentId: string;
24
+ /** コンポーネント名 */
25
+ name: string;
26
+ /** variant prop → 値一覧 */
27
+ variantProps: Record<string, string[]>;
28
+ }
29
+ /** Git 側 component manifest */
30
+ export interface GitComponentManifest {
31
+ /** コンポーネント一覧 */
32
+ components: GitComponentEntry[];
33
+ }
34
+ /**
35
+ * componentId ↔ figmaComponentKey のマッピング
36
+ * key: figmaComponentKey, value: componentId
37
+ */
38
+ export type ComponentMapping = Record<string, string>;
39
+ /** diff-components の入力 */
40
+ export interface DiffComponentsInput {
41
+ /** Figma snapshot */
42
+ figmaSnapshot: FigmaComponentSnapshot;
43
+ /** Git 側の manifest */
44
+ gitManifest: GitComponentManifest;
45
+ /** figmaComponentKey → componentId のマッピング */
46
+ componentMapping: ComponentMapping;
47
+ /** スコープ名 */
48
+ scope?: string;
49
+ /** 変更の方向(デフォルト: figma-to-code) */
50
+ direction?: ChangeSetDirection;
51
+ /** 作成者 ID */
52
+ createdBy?: string;
53
+ }
54
+ /** diff-components の出力 */
55
+ export interface DiffComponentsResult {
56
+ /** 生成された ChangeSet(差分がない場合は null) */
57
+ changeset: ChangeSet | null;
58
+ /** 警告 */
59
+ warnings: string[];
60
+ /** diff の統計情報 */
61
+ stats: {
62
+ added: number;
63
+ removed: number;
64
+ modified: number;
65
+ unchanged: number;
66
+ unmapped: number;
67
+ };
68
+ }
69
+ /**
70
+ * Figma Component snapshot と Git 側の manifest を比較し、
71
+ * ChangeSet(lane: 'components')を生成する。
72
+ *
73
+ * v1 contract: variant props/values のみ比較。
74
+ */
75
+ export declare function diffComponents(input: DiffComponentsInput): DiffComponentsResult;
76
+ /**
77
+ * 2 つの variantProps を比較して VariantDiff を生成
78
+ */
79
+ export declare function diffVariantProps(gitProps: Record<string, string[]>, figmaProps: Record<string, string[]>): VariantDiff;
80
+ //# sourceMappingURL=diff-components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-components.d.ts","sourceRoot":"","sources":["../../src/changeset/diff-components.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,SAAS,EAGT,WAAW,EAKX,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAO5B,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACxC;AAED,+BAA+B;AAC/B,MAAM,WAAW,sBAAsB;IACrC,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB;IAChB,UAAU,EAAE,mBAAmB,EAAE,CAAC;CACnC;AAED,4CAA4C;AAC5C,MAAM,WAAW,iBAAiB;IAChC,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACxC;AAED,+BAA+B;AAC/B,MAAM,WAAW,oBAAoB;IACnC,gBAAgB;IAChB,UAAU,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtD,0BAA0B;AAC1B,MAAM,WAAW,mBAAmB;IAClC,qBAAqB;IACrB,aAAa,EAAE,sBAAsB,CAAC;IACtC,sBAAsB;IACtB,WAAW,EAAE,oBAAoB,CAAC;IAClC,6CAA6C;IAC7C,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,aAAa;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,0BAA0B;AAC1B,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,SAAS;IACT,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB;IACjB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAMD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,mBAAmB,GACzB,oBAAoB,CA+LtB;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACnC,WAAW,CA0Cb"}