@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.
- package/README.md +61 -0
- package/dist/changeset/apply.d.ts +11 -0
- package/dist/changeset/apply.d.ts.map +1 -0
- package/dist/changeset/apply.js +239 -0
- package/dist/changeset/apply.js.map +1 -0
- package/dist/changeset/ci-report.d.ts +25 -0
- package/dist/changeset/ci-report.d.ts.map +1 -0
- package/dist/changeset/ci-report.js +206 -0
- package/dist/changeset/ci-report.js.map +1 -0
- package/dist/changeset/classify.d.ts +77 -0
- package/dist/changeset/classify.d.ts.map +1 -0
- package/dist/changeset/classify.js +285 -0
- package/dist/changeset/classify.js.map +1 -0
- package/dist/changeset/cli-gate.d.ts +46 -0
- package/dist/changeset/cli-gate.d.ts.map +1 -0
- package/dist/changeset/cli-gate.js +409 -0
- package/dist/changeset/cli-gate.js.map +1 -0
- package/dist/changeset/conflict.d.ts +11 -0
- package/dist/changeset/conflict.d.ts.map +1 -0
- package/dist/changeset/conflict.js +130 -0
- package/dist/changeset/conflict.js.map +1 -0
- package/dist/changeset/diff-components.d.ts +80 -0
- package/dist/changeset/diff-components.d.ts.map +1 -0
- package/dist/changeset/diff-components.js +264 -0
- package/dist/changeset/diff-components.js.map +1 -0
- package/dist/changeset/diff-text.d.ts +66 -0
- package/dist/changeset/diff-text.d.ts.map +1 -0
- package/dist/changeset/diff-text.js +284 -0
- package/dist/changeset/diff-text.js.map +1 -0
- package/dist/changeset/diff-tokens.d.ts +63 -0
- package/dist/changeset/diff-tokens.d.ts.map +1 -0
- package/dist/changeset/diff-tokens.js +483 -0
- package/dist/changeset/diff-tokens.js.map +1 -0
- package/dist/changeset/impact.d.ts +31 -0
- package/dist/changeset/impact.d.ts.map +1 -0
- package/dist/changeset/impact.js +188 -0
- package/dist/changeset/impact.js.map +1 -0
- package/dist/changeset/pr-body.d.ts +33 -0
- package/dist/changeset/pr-body.d.ts.map +1 -0
- package/dist/changeset/pr-body.js +421 -0
- package/dist/changeset/pr-body.js.map +1 -0
- package/dist/changeset/quality-gate.d.ts +10 -0
- package/dist/changeset/quality-gate.d.ts.map +1 -0
- package/dist/changeset/quality-gate.js +207 -0
- package/dist/changeset/quality-gate.js.map +1 -0
- package/dist/changeset/rollback.d.ts +19 -0
- package/dist/changeset/rollback.d.ts.map +1 -0
- package/dist/changeset/rollback.js +163 -0
- package/dist/changeset/rollback.js.map +1 -0
- package/dist/ci/template-generator.d.ts +22 -0
- package/dist/ci/template-generator.d.ts.map +1 -0
- package/dist/ci/template-generator.js +215 -0
- package/dist/ci/template-generator.js.map +1 -0
- package/dist/core/schema.d.ts +64 -0
- package/dist/core/schema.d.ts.map +1 -1
- package/dist/core/text.d.ts +45 -0
- package/dist/core/text.d.ts.map +1 -0
- package/dist/core/text.js +189 -0
- package/dist/core/text.js.map +1 -0
- package/dist/gate/engine.d.ts +20 -0
- package/dist/gate/engine.d.ts.map +1 -0
- package/dist/gate/engine.js +109 -0
- package/dist/gate/engine.js.map +1 -0
- package/dist/gate/types.d.ts +76 -0
- package/dist/gate/types.d.ts.map +1 -0
- package/dist/gate/types.js +6 -0
- package/dist/gate/types.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +150 -1
- package/dist/index.js.map +1 -1
- package/dist/pr/comment-manager.d.ts +33 -0
- package/dist/pr/comment-manager.d.ts.map +1 -0
- package/dist/pr/comment-manager.js +137 -0
- package/dist/pr/comment-manager.js.map +1 -0
- package/dist/pr/conflict.d.ts +34 -0
- package/dist/pr/conflict.d.ts.map +1 -0
- package/dist/pr/conflict.js +127 -0
- package/dist/pr/conflict.js.map +1 -0
- package/dist/pr/generator.d.ts +70 -0
- package/dist/pr/generator.d.ts.map +1 -0
- package/dist/pr/generator.js +241 -0
- package/dist/pr/generator.js.map +1 -0
- package/dist/pr/github-api.d.ts +122 -0
- package/dist/pr/github-api.d.ts.map +1 -0
- package/dist/pr/github-api.js +269 -0
- package/dist/pr/github-api.js.map +1 -0
- package/dist/report/changeset-report.d.ts +10 -0
- package/dist/report/changeset-report.d.ts.map +1 -0
- package/dist/report/changeset-report.js +14 -0
- package/dist/report/changeset-report.js.map +1 -0
- package/dist/report/classification-report.d.ts +12 -0
- package/dist/report/classification-report.d.ts.map +1 -0
- package/dist/report/classification-report.js +157 -0
- package/dist/report/classification-report.js.map +1 -0
- package/dist/report/impact-report.d.ts +10 -0
- package/dist/report/impact-report.d.ts.map +1 -0
- package/dist/report/impact-report.js +47 -0
- package/dist/report/impact-report.js.map +1 -0
- package/dist/report/summary-report.d.ts +10 -0
- package/dist/report/summary-report.d.ts.map +1 -0
- package/dist/report/summary-report.js +96 -0
- package/dist/report/summary-report.js.map +1 -0
- package/dist/report/writer.d.ts +17 -0
- package/dist/report/writer.d.ts.map +1 -0
- package/dist/report/writer.js +41 -0
- package/dist/report/writer.js.map +1 -0
- package/dist/rules/engine.d.ts +46 -0
- package/dist/rules/engine.d.ts.map +1 -0
- package/dist/rules/engine.js +200 -0
- package/dist/rules/engine.js.map +1 -0
- package/dist/rules/index.d.ts +10 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +25 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/loader.d.ts +20 -0
- package/dist/rules/loader.d.ts.map +1 -0
- package/dist/rules/loader.js +93 -0
- package/dist/rules/loader.js.map +1 -0
- package/dist/rules/packs/core.d.ts +14 -0
- package/dist/rules/packs/core.d.ts.map +1 -0
- package/dist/rules/packs/core.js +377 -0
- package/dist/rules/packs/core.js.map +1 -0
- package/dist/rules/schema.d.ts +12 -0
- package/dist/rules/schema.d.ts.map +1 -0
- package/dist/rules/schema.js +149 -0
- package/dist/rules/schema.js.map +1 -0
- package/dist/rules/types.d.ts +86 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +9 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/types/changeset.d.ts +509 -0
- package/dist/types/changeset.d.ts.map +1 -0
- package/dist/types/changeset.js +14 -0
- package/dist/types/changeset.js.map +1 -0
- package/dist/w3c/__tests__/fixtures/tokens-studio-export.json +58 -0
- package/dist/w3c/parser.d.ts +44 -0
- package/dist/w3c/parser.d.ts.map +1 -0
- package/dist/w3c/parser.js +146 -0
- package/dist/w3c/parser.js.map +1 -0
- package/dist/w3c/types.d.ts +31 -0
- package/dist/w3c/types.d.ts.map +1 -0
- package/dist/w3c/types.js +7 -0
- package/dist/w3c/types.js.map +1 -0
- package/dist/w3c/validator.d.ts +14 -0
- package/dist/w3c/validator.d.ts.map +1 -0
- package/dist/w3c/validator.js +162 -0
- package/dist/w3c/validator.js.map +1 -0
- package/package.json +6 -4
- package/templates/stil-quality-gate.yml +122 -0
- package/templates/workspace/.github/PULL_REQUEST_TEMPLATE.md +14 -0
- package/templates/workspace/.github/workflows/stil-gate.yml +42 -0
- package/templates/workspace/.github/workflows/stil-preview.yml +29 -0
- package/templates/workspace/.stil/components/snapshots/.gitkeep +0 -0
- package/templates/workspace/.stil/reports/.gitkeep +0 -0
- package/templates/workspace/.stil/rules/.gitkeep +0 -0
- package/templates/workspace/.stil/text/snapshots/.gitkeep +0 -0
- package/templates/workspace/.stil/tokens/config/mapping.json +16 -0
- package/templates/workspace/.stil/tokens/raw/.gitkeep +0 -0
- package/templates/workspace/README.md +40 -0
- 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"}
|