@codeledger/cli 0.6.6 → 0.6.8
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/dist/architecture-graph/dependency-scanner.d.ts +16 -0
- package/dist/architecture-graph/dependency-scanner.d.ts.map +1 -0
- package/dist/architecture-graph/dependency-scanner.js +96 -0
- package/dist/architecture-graph/dependency-scanner.js.map +1 -0
- package/dist/architecture-graph/graph-builder.d.ts +70 -0
- package/dist/architecture-graph/graph-builder.d.ts.map +1 -0
- package/dist/architecture-graph/graph-builder.js +231 -0
- package/dist/architecture-graph/graph-builder.js.map +1 -0
- package/dist/architecture-graph/index.d.ts +4 -0
- package/dist/architecture-graph/index.d.ts.map +1 -0
- package/dist/architecture-graph/index.js +7 -0
- package/dist/architecture-graph/index.js.map +1 -0
- package/dist/architecture-graph/service-scanner.d.ts +22 -0
- package/dist/architecture-graph/service-scanner.d.ts.map +1 -0
- package/dist/architecture-graph/service-scanner.js +181 -0
- package/dist/architecture-graph/service-scanner.js.map +1 -0
- package/dist/commands/audit-export.d.ts +8 -0
- package/dist/commands/audit-export.d.ts.map +1 -0
- package/dist/commands/audit-export.js +190 -0
- package/dist/commands/audit-export.js.map +1 -0
- package/dist/commands/fix.d.ts +7 -0
- package/dist/commands/fix.d.ts.map +1 -0
- package/dist/commands/fix.js +107 -0
- package/dist/commands/fix.js.map +1 -0
- package/dist/commands/graph.d.ts +8 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +29 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/learn.d.ts +8 -0
- package/dist/commands/learn.d.ts.map +1 -0
- package/dist/commands/learn.js +33 -0
- package/dist/commands/learn.js.map +1 -0
- package/dist/commands/pack.d.ts +12 -0
- package/dist/commands/pack.d.ts.map +1 -0
- package/dist/commands/pack.js +75 -0
- package/dist/commands/pack.js.map +1 -0
- package/dist/commands/serve.d.ts +13 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +179 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/setup-ci.d.ts +6 -4
- package/dist/commands/setup-ci.d.ts.map +1 -1
- package/dist/commands/setup-ci.js +216 -23
- package/dist/commands/setup-ci.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +82 -3
- package/dist/index.js.map +1 -1
- package/dist/review-intelligence/detectors/cjs-named-import.d.ts +13 -0
- package/dist/review-intelligence/detectors/cjs-named-import.d.ts.map +1 -0
- package/dist/review-intelligence/detectors/cjs-named-import.js +134 -0
- package/dist/review-intelligence/detectors/cjs-named-import.js.map +1 -0
- package/dist/review-intelligence/detectors/exact-count-assertion.d.ts +17 -0
- package/dist/review-intelligence/detectors/exact-count-assertion.d.ts.map +1 -0
- package/dist/review-intelligence/detectors/exact-count-assertion.js +93 -0
- package/dist/review-intelligence/detectors/exact-count-assertion.js.map +1 -0
- package/dist/review-intelligence/detectors/exports-map-missing.d.ts +14 -0
- package/dist/review-intelligence/detectors/exports-map-missing.d.ts.map +1 -0
- package/dist/review-intelligence/detectors/exports-map-missing.js +131 -0
- package/dist/review-intelligence/detectors/exports-map-missing.js.map +1 -0
- package/dist/review-intelligence/detectors/fixture-keyword-drift.d.ts +12 -0
- package/dist/review-intelligence/detectors/fixture-keyword-drift.d.ts.map +1 -0
- package/dist/review-intelligence/detectors/fixture-keyword-drift.js +82 -0
- package/dist/review-intelligence/detectors/fixture-keyword-drift.js.map +1 -0
- package/dist/review-intelligence/detectors/optional-infra-crash.d.ts +12 -0
- package/dist/review-intelligence/detectors/optional-infra-crash.d.ts.map +1 -0
- package/dist/review-intelligence/detectors/optional-infra-crash.js +97 -0
- package/dist/review-intelligence/detectors/optional-infra-crash.js.map +1 -0
- package/dist/review-intelligence/detectors/undeclared-dependency.d.ts +11 -0
- package/dist/review-intelligence/detectors/undeclared-dependency.d.ts.map +1 -0
- package/dist/review-intelligence/detectors/undeclared-dependency.js +100 -0
- package/dist/review-intelligence/detectors/undeclared-dependency.js.map +1 -0
- package/dist/review-intelligence/engine/ast-parser.d.ts +90 -0
- package/dist/review-intelligence/engine/ast-parser.d.ts.map +1 -0
- package/dist/review-intelligence/engine/ast-parser.js +266 -0
- package/dist/review-intelligence/engine/ast-parser.js.map +1 -0
- package/dist/review-intelligence/engine/dataflow.d.ts +34 -0
- package/dist/review-intelligence/engine/dataflow.d.ts.map +1 -0
- package/dist/review-intelligence/engine/dataflow.js +115 -0
- package/dist/review-intelligence/engine/dataflow.js.map +1 -0
- package/dist/review-intelligence/engine/index.d.ts +7 -0
- package/dist/review-intelligence/engine/index.d.ts.map +1 -0
- package/dist/review-intelligence/engine/index.js +7 -0
- package/dist/review-intelligence/engine/index.js.map +1 -0
- package/dist/review-intelligence/engine/symbol-resolver.d.ts +34 -0
- package/dist/review-intelligence/engine/symbol-resolver.d.ts.map +1 -0
- package/dist/review-intelligence/engine/symbol-resolver.js +106 -0
- package/dist/review-intelligence/engine/symbol-resolver.js.map +1 -0
- package/dist/review-intelligence/fixes/index.d.ts +36 -0
- package/dist/review-intelligence/fixes/index.d.ts.map +1 -0
- package/dist/review-intelligence/fixes/index.js +157 -0
- package/dist/review-intelligence/fixes/index.js.map +1 -0
- package/dist/review-intelligence/index.d.ts.map +1 -1
- package/dist/review-intelligence/index.js +2 -0
- package/dist/review-intelligence/index.js.map +1 -1
- package/dist/review-intelligence/invariants.d.ts.map +1 -1
- package/dist/review-intelligence/invariants.js +14 -1
- package/dist/review-intelligence/invariants.js.map +1 -1
- package/dist/review-intelligence/learning/index.d.ts +39 -0
- package/dist/review-intelligence/learning/index.d.ts.map +1 -0
- package/dist/review-intelligence/learning/index.js +265 -0
- package/dist/review-intelligence/learning/index.js.map +1 -0
- package/dist/review-intelligence/packs/index.d.ts +69 -0
- package/dist/review-intelligence/packs/index.d.ts.map +1 -0
- package/dist/review-intelligence/packs/index.js +168 -0
- package/dist/review-intelligence/packs/index.js.map +1 -0
- package/dist/review-intelligence/repair-guidance.d.ts.map +1 -1
- package/dist/review-intelligence/repair-guidance.js +46 -0
- package/dist/review-intelligence/repair-guidance.js.map +1 -1
- package/dist/review-intelligence/types.d.ts +6 -1
- package/dist/review-intelligence/types.d.ts.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { listPacks, enablePack, disablePack, } from '../review-intelligence/packs/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* `codeledger pack <subcommand>`
|
|
4
|
+
*
|
|
5
|
+
* Manage invariant packs.
|
|
6
|
+
*
|
|
7
|
+
* Subcommands:
|
|
8
|
+
* list List all available packs and their status
|
|
9
|
+
* enable <name> Enable a pack
|
|
10
|
+
* disable <name> Disable a pack
|
|
11
|
+
*/
|
|
12
|
+
export async function runPack(cwd, flags) {
|
|
13
|
+
const subcommand = flags['_sub'] ?? 'list';
|
|
14
|
+
switch (subcommand) {
|
|
15
|
+
case 'list': {
|
|
16
|
+
const packs = listPacks(cwd);
|
|
17
|
+
console.log('');
|
|
18
|
+
console.log('Invariant Packs');
|
|
19
|
+
console.log('───────────────');
|
|
20
|
+
if (packs.length === 0) {
|
|
21
|
+
console.log(' No packs available.');
|
|
22
|
+
console.log(' Run `codeledger learn --save` to generate a pack from repository conventions.');
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
for (const pack of packs) {
|
|
26
|
+
const status = pack.enabled ? 'ENABLED' : 'disabled';
|
|
27
|
+
console.log(` ${pack.name} [${status}]`);
|
|
28
|
+
console.log(` ${pack.description}`);
|
|
29
|
+
console.log(` Rules: ${pack.rules.length}`);
|
|
30
|
+
console.log('');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
case 'enable': {
|
|
36
|
+
const packName = flags['name'] ?? flags['pack'];
|
|
37
|
+
if (!packName) {
|
|
38
|
+
console.error('Pack name required. Usage: codeledger pack enable --name <pack-name>');
|
|
39
|
+
// Also check for positional arg
|
|
40
|
+
console.error('Or: codeledger pack enable <pack-name>');
|
|
41
|
+
process.exit(2);
|
|
42
|
+
}
|
|
43
|
+
const enabled = enablePack(cwd, packName);
|
|
44
|
+
if (enabled) {
|
|
45
|
+
console.log(`Pack '${packName}' enabled.`);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
console.error(`Pack '${packName}' not found. Run 'codeledger pack list' to see available packs.`);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
case 'disable': {
|
|
54
|
+
const packName = flags['name'] ?? flags['pack'];
|
|
55
|
+
if (!packName) {
|
|
56
|
+
console.error('Pack name required. Usage: codeledger pack disable --name <pack-name>');
|
|
57
|
+
process.exit(2);
|
|
58
|
+
}
|
|
59
|
+
const disabled = disablePack(cwd, packName);
|
|
60
|
+
if (disabled) {
|
|
61
|
+
console.log(`Pack '${packName}' disabled.`);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.error(`Pack '${packName}' not found.`);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
default:
|
|
70
|
+
console.error(`Unknown pack subcommand: ${subcommand}`);
|
|
71
|
+
console.error('Available: list, enable, disable');
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=pack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/commands/pack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `codeledger serve [--port 7400]`
|
|
3
|
+
*
|
|
4
|
+
* Lightweight HTTP server for programmatic access to CodeLedger.
|
|
5
|
+
* Uses node:http — zero external dependencies.
|
|
6
|
+
*
|
|
7
|
+
* Endpoints:
|
|
8
|
+
* GET /health → { status: "ok", version: "..." }
|
|
9
|
+
* POST /verify → JSON verify result (body: { task, flags? })
|
|
10
|
+
* POST /bundle → JSON bundle result (body: { task, flags? })
|
|
11
|
+
*/
|
|
12
|
+
export declare function runServe(cwd: string, flags: Record<string, string>): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=serve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { createServer } from 'node:http';
|
|
2
|
+
import { runBundle } from './bundle.js';
|
|
3
|
+
import { runVerify } from './verify.js';
|
|
4
|
+
/**
|
|
5
|
+
* `codeledger serve [--port 7400]`
|
|
6
|
+
*
|
|
7
|
+
* Lightweight HTTP server for programmatic access to CodeLedger.
|
|
8
|
+
* Uses node:http — zero external dependencies.
|
|
9
|
+
*
|
|
10
|
+
* Endpoints:
|
|
11
|
+
* GET /health → { status: "ok", version: "..." }
|
|
12
|
+
* POST /verify → JSON verify result (body: { task, flags? })
|
|
13
|
+
* POST /bundle → JSON bundle result (body: { task, flags? })
|
|
14
|
+
*/
|
|
15
|
+
export async function runServe(cwd, flags) {
|
|
16
|
+
const port = parseInt(flags['port'] ?? '7400', 10);
|
|
17
|
+
if (isNaN(port) || port < 1 || port > 65535) {
|
|
18
|
+
console.error(`Invalid --port "${flags['port']}". Must be a number between 1 and 65535.`);
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
const server = createServer(async (req, res) => {
|
|
22
|
+
// CORS headers for cross-origin access
|
|
23
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
24
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
25
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
26
|
+
if (req.method === 'OPTIONS') {
|
|
27
|
+
res.writeHead(204);
|
|
28
|
+
res.end();
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const url = (req.url ?? '/').split('?')[0];
|
|
32
|
+
try {
|
|
33
|
+
if (url === '/health' && req.method === 'GET') {
|
|
34
|
+
await handleHealth(res);
|
|
35
|
+
}
|
|
36
|
+
else if (url === '/verify' && req.method === 'POST') {
|
|
37
|
+
await handleVerify(req, res, cwd);
|
|
38
|
+
}
|
|
39
|
+
else if (url === '/bundle' && req.method === 'POST') {
|
|
40
|
+
await handleBundle(req, res, cwd);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
sendJson(res, 404, { error: 'Not found', endpoints: ['/health', '/verify', '/bundle'] });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
48
|
+
sendJson(res, 500, { error: 'Internal server error', message });
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
server.listen(port, () => {
|
|
52
|
+
console.log(`CodeLedger API server listening on port ${port}`);
|
|
53
|
+
console.log('');
|
|
54
|
+
console.log('Endpoints:');
|
|
55
|
+
console.log(` GET http://localhost:${port}/health`);
|
|
56
|
+
console.log(` POST http://localhost:${port}/verify { "task": "..." }`);
|
|
57
|
+
console.log(` POST http://localhost:${port}/bundle { "task": "..." }`);
|
|
58
|
+
console.log('');
|
|
59
|
+
console.log('Press Ctrl+C to stop.');
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// ─── Handlers ─────────────────────────────────────────────────────────────────
|
|
63
|
+
async function handleHealth(res) {
|
|
64
|
+
let version = 'unknown';
|
|
65
|
+
try {
|
|
66
|
+
const { CLI_VERSION } = await import('../version.js');
|
|
67
|
+
version = CLI_VERSION;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// version file may not exist in all environments
|
|
71
|
+
}
|
|
72
|
+
sendJson(res, 200, {
|
|
73
|
+
status: 'ok',
|
|
74
|
+
version,
|
|
75
|
+
timestamp: new Date().toISOString(),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async function handleVerify(req, res, cwd) {
|
|
79
|
+
const body = await readBody(req);
|
|
80
|
+
if (!body.task) {
|
|
81
|
+
sendJson(res, 400, { error: 'Missing required field: task' });
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const verifyFlags = {
|
|
85
|
+
task: String(body.task),
|
|
86
|
+
json: 'true',
|
|
87
|
+
...(body.flags ?? {}),
|
|
88
|
+
};
|
|
89
|
+
// Capture stdout to return as JSON
|
|
90
|
+
const result = await captureOutput(() => runVerify(cwd, verifyFlags));
|
|
91
|
+
sendJsonRaw(res, 200, result.stdout);
|
|
92
|
+
}
|
|
93
|
+
async function handleBundle(req, res, cwd) {
|
|
94
|
+
const body = await readBody(req);
|
|
95
|
+
if (!body.task) {
|
|
96
|
+
sendJson(res, 400, { error: 'Missing required field: task' });
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const bundleFlags = {
|
|
100
|
+
task: String(body.task),
|
|
101
|
+
json: 'true',
|
|
102
|
+
...(body.flags ?? {}),
|
|
103
|
+
};
|
|
104
|
+
const result = await captureOutput(() => runBundle(cwd, bundleFlags));
|
|
105
|
+
sendJsonRaw(res, 200, result.stdout);
|
|
106
|
+
}
|
|
107
|
+
// ─── Utilities ────────────────────────────────────────────────────────────────
|
|
108
|
+
function sendJson(res, status, data) {
|
|
109
|
+
res.writeHead(status, { 'Content-Type': 'application/json' });
|
|
110
|
+
res.end(JSON.stringify(data));
|
|
111
|
+
}
|
|
112
|
+
function sendJsonRaw(res, status, raw) {
|
|
113
|
+
res.writeHead(status, { 'Content-Type': 'application/json' });
|
|
114
|
+
// If raw is valid JSON, send it directly; otherwise wrap it
|
|
115
|
+
try {
|
|
116
|
+
JSON.parse(raw);
|
|
117
|
+
res.end(raw);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
res.end(JSON.stringify({ output: raw }));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const MAX_BODY_SIZE = 1_000_000; // 1 MB
|
|
124
|
+
async function readBody(req) {
|
|
125
|
+
return new Promise((resolve, reject) => {
|
|
126
|
+
const chunks = [];
|
|
127
|
+
let totalSize = 0;
|
|
128
|
+
req.on('data', (chunk) => {
|
|
129
|
+
totalSize += chunk.length;
|
|
130
|
+
if (totalSize > MAX_BODY_SIZE) {
|
|
131
|
+
req.destroy();
|
|
132
|
+
reject(new Error('Request body too large (max 1 MB)'));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
chunks.push(chunk);
|
|
136
|
+
});
|
|
137
|
+
req.on('end', () => {
|
|
138
|
+
const raw = Buffer.concat(chunks).toString('utf-8');
|
|
139
|
+
if (!raw) {
|
|
140
|
+
resolve({});
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
const parsed = JSON.parse(raw);
|
|
145
|
+
if (typeof parsed === 'object' && parsed !== null) {
|
|
146
|
+
resolve(parsed);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
reject(new Error('Request body must be a JSON object'));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
reject(new Error('Invalid JSON in request body'));
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
req.on('error', reject);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
async function captureOutput(fn) {
|
|
160
|
+
const originalLog = console.log;
|
|
161
|
+
const originalError = console.error;
|
|
162
|
+
let stdout = '';
|
|
163
|
+
let stderr = '';
|
|
164
|
+
console.log = (...args) => {
|
|
165
|
+
stdout += args.map(String).join(' ') + '\n';
|
|
166
|
+
};
|
|
167
|
+
console.error = (...args) => {
|
|
168
|
+
stderr += args.map(String).join(' ') + '\n';
|
|
169
|
+
};
|
|
170
|
+
try {
|
|
171
|
+
await fn();
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
console.log = originalLog;
|
|
175
|
+
console.error = originalError;
|
|
176
|
+
}
|
|
177
|
+
return { stdout: stdout.trim(), stderr: stderr.trim() };
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
export type CiProvider = 'github' | 'gitlab' | 'circleci' | 'azure';
|
|
1
2
|
/**
|
|
2
|
-
* `codeledger setup-ci [--mode observe|warn|block] [--output <path>]`
|
|
3
|
+
* `codeledger setup-ci [--mode observe|warn|block] [--provider github|gitlab|circleci|azure] [--output <path>]`
|
|
3
4
|
*
|
|
4
|
-
* Generates a ready-to-use
|
|
5
|
-
*
|
|
6
|
-
* integration in one command.
|
|
5
|
+
* Generates a ready-to-use CI workflow and policy file for CI enforcement.
|
|
6
|
+
* Supports GitHub Actions, GitLab CI, CircleCI, and Azure Pipelines.
|
|
7
7
|
*/
|
|
8
8
|
export declare function runSetupCi(cwd: string, flags: Record<string, string>): Promise<void>;
|
|
9
|
+
/** Generate CI workflow content for the given provider and mode */
|
|
10
|
+
export declare function generateWorkflow(provider: CiProvider, mode: string): string;
|
|
9
11
|
//# sourceMappingURL=setup-ci.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-ci.d.ts","sourceRoot":"","sources":["../../src/commands/setup-ci.ts"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"setup-ci.d.ts","sourceRoot":"","sources":["../../src/commands/setup-ci.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAoBpE;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAqFf;AAID,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAW3E"}
|
|
@@ -1,11 +1,25 @@
|
|
|
1
1
|
import { writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
2
2
|
import { join, resolve } from 'node:path';
|
|
3
|
+
const VALID_PROVIDERS = ['github', 'gitlab', 'circleci', 'azure'];
|
|
4
|
+
/** Default output directory per provider */
|
|
5
|
+
const DEFAULT_OUTPUT_DIRS = {
|
|
6
|
+
github: '.github/workflows',
|
|
7
|
+
gitlab: '.',
|
|
8
|
+
circleci: '.circleci',
|
|
9
|
+
azure: '.',
|
|
10
|
+
};
|
|
11
|
+
/** Output filename per provider */
|
|
12
|
+
const WORKFLOW_FILENAMES = {
|
|
13
|
+
github: 'codeledger-verify.yml',
|
|
14
|
+
gitlab: '.gitlab-ci.yml',
|
|
15
|
+
circleci: 'config.yml',
|
|
16
|
+
azure: 'azure-pipelines-codeledger.yml',
|
|
17
|
+
};
|
|
3
18
|
/**
|
|
4
|
-
* `codeledger setup-ci [--mode observe|warn|block] [--output <path>]`
|
|
19
|
+
* `codeledger setup-ci [--mode observe|warn|block] [--provider github|gitlab|circleci|azure] [--output <path>]`
|
|
5
20
|
*
|
|
6
|
-
* Generates a ready-to-use
|
|
7
|
-
*
|
|
8
|
-
* integration in one command.
|
|
21
|
+
* Generates a ready-to-use CI workflow and policy file for CI enforcement.
|
|
22
|
+
* Supports GitHub Actions, GitLab CI, CircleCI, and Azure Pipelines.
|
|
9
23
|
*/
|
|
10
24
|
export async function runSetupCi(cwd, flags) {
|
|
11
25
|
const mode = (flags['mode'] ?? 'warn');
|
|
@@ -13,7 +27,12 @@ export async function runSetupCi(cwd, flags) {
|
|
|
13
27
|
console.error(`Invalid --mode "${mode}". Must be one of: observe, warn, block`);
|
|
14
28
|
process.exit(1);
|
|
15
29
|
}
|
|
16
|
-
const
|
|
30
|
+
const provider = (flags['provider'] ?? 'github');
|
|
31
|
+
if (!VALID_PROVIDERS.includes(provider)) {
|
|
32
|
+
console.error(`Invalid --provider "${provider}". Must be one of: ${VALID_PROVIDERS.join(', ')}`);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
const outputDir = flags['output'] ?? DEFAULT_OUTPUT_DIRS[provider];
|
|
17
36
|
const resolvedOutputDir = resolve(cwd, outputDir);
|
|
18
37
|
const policyDir = join(cwd, '.codeledger', 'policy', 'org');
|
|
19
38
|
// -- Step 1: Create policy file -------------------------------------------
|
|
@@ -47,29 +66,23 @@ export async function runSetupCi(cwd, flags) {
|
|
|
47
66
|
console.log(` Max drift: ${policy.max_drift}`);
|
|
48
67
|
console.log(` Deny paths: ${policy.deny_paths.join(', ')}`);
|
|
49
68
|
}
|
|
50
|
-
// -- Step 2: Create
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
mkdirSync(workflowDir, { recursive: true });
|
|
69
|
+
// -- Step 2: Create CI workflow file --------------------------------------
|
|
70
|
+
if (!existsSync(resolvedOutputDir)) {
|
|
71
|
+
mkdirSync(resolvedOutputDir, { recursive: true });
|
|
54
72
|
}
|
|
55
|
-
const
|
|
73
|
+
const workflowFilename = WORKFLOW_FILENAMES[provider];
|
|
74
|
+
const workflowPath = join(resolvedOutputDir, workflowFilename);
|
|
56
75
|
if (existsSync(workflowPath)) {
|
|
57
76
|
console.log(`\nWorkflow already exists at ${workflowPath}`);
|
|
58
77
|
console.log('To overwrite, delete it and re-run this command.');
|
|
59
78
|
}
|
|
60
79
|
else {
|
|
61
|
-
const workflow = generateWorkflow(mode);
|
|
80
|
+
const workflow = generateWorkflow(provider, mode);
|
|
62
81
|
writeFileSync(workflowPath, workflow);
|
|
63
|
-
console.log(`\nCreated workflow: ${workflowPath}`);
|
|
82
|
+
console.log(`\nCreated ${provider} workflow: ${workflowPath}`);
|
|
64
83
|
}
|
|
65
|
-
// -- Step 3:
|
|
66
|
-
|
|
67
|
-
console.log('To enable tamper-evident manifests, add a repository secret:');
|
|
68
|
-
console.log('');
|
|
69
|
-
console.log(' 1. Go to: Settings > Secrets and variables > Actions');
|
|
70
|
-
console.log(' 2. Add: CODELEDGER_SIGNING_SECRET = <your-secret-key>');
|
|
71
|
-
console.log('');
|
|
72
|
-
console.log('When set, `codeledger verify` will also produce a signed manifest.');
|
|
84
|
+
// -- Step 3: Provider-specific setup instructions -------------------------
|
|
85
|
+
printProviderInstructions(provider, mode);
|
|
73
86
|
// -- Summary ---------------------------------------------------------------
|
|
74
87
|
console.log('\n--- What happens next ---');
|
|
75
88
|
console.log('');
|
|
@@ -78,7 +91,7 @@ export async function runSetupCi(cwd, flags) {
|
|
|
78
91
|
console.log(' but will never fail the build. Good for evaluation.');
|
|
79
92
|
}
|
|
80
93
|
else if (mode === 'warn') {
|
|
81
|
-
console.log(' Mode: WARN — CI will annotate PRs with warnings for policy');
|
|
94
|
+
console.log(' Mode: WARN — CI will annotate PRs/MRs with warnings for policy');
|
|
82
95
|
console.log(' violations but will not block merging. Good for rollout.');
|
|
83
96
|
}
|
|
84
97
|
else {
|
|
@@ -89,9 +102,23 @@ export async function runSetupCi(cwd, flags) {
|
|
|
89
102
|
console.log(' Commit the workflow and policy files to enable CI verification.');
|
|
90
103
|
console.log(' Tune thresholds in: .codeledger/policy/org/default.json');
|
|
91
104
|
}
|
|
92
|
-
|
|
105
|
+
// ─── Workflow Generators ──────────────────────────────────────────────────────
|
|
106
|
+
/** Generate CI workflow content for the given provider and mode */
|
|
107
|
+
export function generateWorkflow(provider, mode) {
|
|
108
|
+
switch (provider) {
|
|
109
|
+
case 'github':
|
|
110
|
+
return generateGitHubWorkflow(mode);
|
|
111
|
+
case 'gitlab':
|
|
112
|
+
return generateGitLabWorkflow(mode);
|
|
113
|
+
case 'circleci':
|
|
114
|
+
return generateCircleCiWorkflow(mode);
|
|
115
|
+
case 'azure':
|
|
116
|
+
return generateAzurePipelinesWorkflow(mode);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function generateGitHubWorkflow(mode) {
|
|
93
120
|
return `# CodeLedger CI Verification
|
|
94
|
-
# Generated by: codeledger setup-ci --mode ${mode}
|
|
121
|
+
# Generated by: codeledger setup-ci --provider github --mode ${mode}
|
|
95
122
|
# Docs: codeledger verify --help
|
|
96
123
|
|
|
97
124
|
name: CodeLedger Verify
|
|
@@ -136,4 +163,170 @@ jobs:
|
|
|
136
163
|
retention-days: 30
|
|
137
164
|
`;
|
|
138
165
|
}
|
|
166
|
+
function generateGitLabWorkflow(mode) {
|
|
167
|
+
const allowFailure = mode !== 'block' ? 'true' : 'false';
|
|
168
|
+
return `# CodeLedger CI Verification
|
|
169
|
+
# Generated by: codeledger setup-ci --provider gitlab --mode ${mode}
|
|
170
|
+
# Docs: codeledger verify --help
|
|
171
|
+
|
|
172
|
+
stages:
|
|
173
|
+
- verify
|
|
174
|
+
|
|
175
|
+
codeledger-verify:
|
|
176
|
+
stage: verify
|
|
177
|
+
image: node:20-alpine
|
|
178
|
+
rules:
|
|
179
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
180
|
+
variables:
|
|
181
|
+
CODELEDGER_SIGNING_SECRET: $CODELEDGER_SIGNING_SECRET
|
|
182
|
+
before_script:
|
|
183
|
+
- npm ci
|
|
184
|
+
script:
|
|
185
|
+
- |
|
|
186
|
+
# Extract task from MR title
|
|
187
|
+
TASK="$CI_MERGE_REQUEST_TITLE"
|
|
188
|
+
npx codeledger verify \\
|
|
189
|
+
--task "\${TASK}" \\
|
|
190
|
+
--artifacts-dir ./codeledger-artifacts
|
|
191
|
+
allow_failure: ${allowFailure}
|
|
192
|
+
artifacts:
|
|
193
|
+
when: always
|
|
194
|
+
paths:
|
|
195
|
+
- codeledger-artifacts/
|
|
196
|
+
expire_in: 30 days
|
|
197
|
+
`;
|
|
198
|
+
}
|
|
199
|
+
function generateCircleCiWorkflow(mode) {
|
|
200
|
+
// In block mode, verify exits non-zero on violations — CircleCI treats this
|
|
201
|
+
// as a step failure which fails the job. In observe/warn mode, we append
|
|
202
|
+
// `|| true` so the job always succeeds regardless of verify exit code.
|
|
203
|
+
const verifySuffix = mode === 'block' ? '' : ' || true';
|
|
204
|
+
return `# CodeLedger CI Verification
|
|
205
|
+
# Generated by: codeledger setup-ci --provider circleci --mode ${mode}
|
|
206
|
+
# Docs: codeledger verify --help
|
|
207
|
+
#
|
|
208
|
+
# Required environment variables (set in CircleCI project settings):
|
|
209
|
+
# CODELEDGER_SIGNING_SECRET - (optional) HMAC signing key
|
|
210
|
+
|
|
211
|
+
version: 2.1
|
|
212
|
+
|
|
213
|
+
jobs:
|
|
214
|
+
codeledger-verify:
|
|
215
|
+
docker:
|
|
216
|
+
- image: cimg/node:20.0
|
|
217
|
+
steps:
|
|
218
|
+
- checkout
|
|
219
|
+
|
|
220
|
+
- restore_cache:
|
|
221
|
+
keys:
|
|
222
|
+
- deps-v1-{{ checksum "package-lock.json" }}
|
|
223
|
+
- deps-v1-
|
|
224
|
+
|
|
225
|
+
- run:
|
|
226
|
+
name: Install dependencies
|
|
227
|
+
command: npm ci
|
|
228
|
+
|
|
229
|
+
- save_cache:
|
|
230
|
+
key: deps-v1-{{ checksum "package-lock.json" }}
|
|
231
|
+
paths:
|
|
232
|
+
- node_modules
|
|
233
|
+
|
|
234
|
+
- run:
|
|
235
|
+
name: Run CodeLedger verification
|
|
236
|
+
command: |
|
|
237
|
+
# Extract task from branch name or use default
|
|
238
|
+
TASK="\${CIRCLE_BRANCH:-verification}"
|
|
239
|
+
npx codeledger verify \\
|
|
240
|
+
--task "\${TASK}" \\
|
|
241
|
+
--artifacts-dir ./codeledger-artifacts${verifySuffix}
|
|
242
|
+
|
|
243
|
+
- store_artifacts:
|
|
244
|
+
path: codeledger-artifacts
|
|
245
|
+
destination: codeledger-verify
|
|
246
|
+
|
|
247
|
+
workflows:
|
|
248
|
+
verify:
|
|
249
|
+
jobs:
|
|
250
|
+
- codeledger-verify:
|
|
251
|
+
filters:
|
|
252
|
+
branches:
|
|
253
|
+
ignore:
|
|
254
|
+
- main
|
|
255
|
+
- master
|
|
256
|
+
`;
|
|
257
|
+
}
|
|
258
|
+
function generateAzurePipelinesWorkflow(mode) {
|
|
259
|
+
const continueOnError = mode !== 'block' ? 'true' : 'false';
|
|
260
|
+
return `# CodeLedger CI Verification
|
|
261
|
+
# Generated by: codeledger setup-ci --provider azure --mode ${mode}
|
|
262
|
+
# Docs: codeledger verify --help
|
|
263
|
+
#
|
|
264
|
+
# Required pipeline variables (set in Azure DevOps project settings):
|
|
265
|
+
# CODELEDGER_SIGNING_SECRET - (optional) HMAC signing key
|
|
266
|
+
|
|
267
|
+
trigger: none
|
|
268
|
+
|
|
269
|
+
pr:
|
|
270
|
+
branches:
|
|
271
|
+
include:
|
|
272
|
+
- main
|
|
273
|
+
- master
|
|
274
|
+
|
|
275
|
+
pool:
|
|
276
|
+
vmImage: 'ubuntu-latest'
|
|
277
|
+
|
|
278
|
+
steps:
|
|
279
|
+
- task: NodeTool@0
|
|
280
|
+
inputs:
|
|
281
|
+
versionSpec: '20.x'
|
|
282
|
+
displayName: 'Install Node.js'
|
|
283
|
+
|
|
284
|
+
- script: npm ci
|
|
285
|
+
displayName: 'Install dependencies'
|
|
286
|
+
|
|
287
|
+
- script: |
|
|
288
|
+
# Extract task from PR title
|
|
289
|
+
TASK="$(System.PullRequest.SourceBranch)"
|
|
290
|
+
npx codeledger verify \\
|
|
291
|
+
--task "\${TASK}" \\
|
|
292
|
+
--artifacts-dir $(Build.ArtifactStagingDirectory)/codeledger-artifacts
|
|
293
|
+
displayName: 'Run CodeLedger verification'
|
|
294
|
+
continueOnError: ${continueOnError}
|
|
295
|
+
env:
|
|
296
|
+
CODELEDGER_SIGNING_SECRET: $(CODELEDGER_SIGNING_SECRET)
|
|
297
|
+
|
|
298
|
+
- publish: $(Build.ArtifactStagingDirectory)/codeledger-artifacts
|
|
299
|
+
artifact: codeledger-verify
|
|
300
|
+
condition: always()
|
|
301
|
+
displayName: 'Publish verification artifacts'
|
|
302
|
+
`;
|
|
303
|
+
}
|
|
304
|
+
// ─── Provider-Specific Instructions ───────────────────────────────────────────
|
|
305
|
+
function printProviderInstructions(provider, _mode) {
|
|
306
|
+
console.log('\n--- Signing (optional) ---');
|
|
307
|
+
console.log('To enable tamper-evident manifests, add a secret:');
|
|
308
|
+
console.log('');
|
|
309
|
+
switch (provider) {
|
|
310
|
+
case 'github':
|
|
311
|
+
console.log(' 1. Go to: Settings > Secrets and variables > Actions');
|
|
312
|
+
console.log(' 2. Add: CODELEDGER_SIGNING_SECRET = <your-secret-key>');
|
|
313
|
+
break;
|
|
314
|
+
case 'gitlab':
|
|
315
|
+
console.log(' 1. Go to: Settings > CI/CD > Variables');
|
|
316
|
+
console.log(' 2. Add: CODELEDGER_SIGNING_SECRET = <your-secret-key>');
|
|
317
|
+
console.log(' Mark as "Masked" and optionally "Protected"');
|
|
318
|
+
break;
|
|
319
|
+
case 'circleci':
|
|
320
|
+
console.log(' 1. Go to: Project Settings > Environment Variables');
|
|
321
|
+
console.log(' 2. Add: CODELEDGER_SIGNING_SECRET = <your-secret-key>');
|
|
322
|
+
break;
|
|
323
|
+
case 'azure':
|
|
324
|
+
console.log(' 1. Go to: Pipelines > Edit > Variables');
|
|
325
|
+
console.log(' 2. Add: CODELEDGER_SIGNING_SECRET = <your-secret-key>');
|
|
326
|
+
console.log(' Mark as secret');
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
console.log('');
|
|
330
|
+
console.log('When set, `codeledger verify` will also produce a signed manifest.');
|
|
331
|
+
}
|
|
139
332
|
//# sourceMappingURL=setup-ci.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-ci.js","sourceRoot":"","sources":["../../src/commands/setup-ci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-ci.js","sourceRoot":"","sources":["../../src/commands/setup-ci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAI1C,MAAM,eAAe,GAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAEhF,4CAA4C;AAC5C,MAAM,mBAAmB,GAA+B;IACtD,MAAM,EAAE,mBAAmB;IAC3B,MAAM,EAAE,GAAG;IACX,QAAQ,EAAE,WAAW;IACrB,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,mCAAmC;AACnC,MAAM,kBAAkB,GAA+B;IACrD,MAAM,EAAE,uBAAuB;IAC/B,MAAM,EAAE,gBAAgB;IACxB,QAAQ,EAAE,YAAY;IACtB,KAAK,EAAE,gCAAgC;CACxC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAW,EACX,KAA6B;IAE7B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,CAAW,CAAC;IACjD,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,mBAAmB,IAAI,yCAAyC,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAe,CAAC;IAC/D,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,uBAAuB,QAAQ,sBAAsB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE5D,4EAA4E;IAC5E,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACnD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,iCAAiC,UAAU,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG;YACb,IAAI;YACJ,cAAc,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;YAC5C,SAAS,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG;YACxC,aAAa,EAAE,IAAI,KAAK,OAAO;YAC/B,UAAU,EAAE;gBACV,OAAO;gBACP,SAAS;gBACT,iBAAiB;gBACjB,aAAa;aACd;YACD,gBAAgB,EAAE,EAAE;YACpB,gBAAgB,EAAE,SAAS;SAC5B,CAAC;QAEF,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,4EAA4E;IAC5E,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACnC,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;IAC/D,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,gCAAgC,YAAY,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClD,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,cAAc,YAAY,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,4EAA4E;IAC5E,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAE1C,6EAA6E;IAC7E,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;SAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;AAC3E,CAAC;AAED,iFAAiF;AAEjF,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,QAAoB,EAAE,IAAY;IACjE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACtC,KAAK,QAAQ;YACX,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACtC,KAAK,UAAU;YACb,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACxC,KAAK,OAAO;YACV,OAAO,8BAA8B,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IAC1C,OAAO;+DACsD,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2ClE,CAAC;AACF,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IAC1C,MAAM,YAAY,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACzD,OAAO;+DACsD,IAAI;;;;;;;;;;;;;;;;;;;;;;mBAsBhD,YAAY;;;;;;CAM9B,CAAC;AACF,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY;IAC5C,4EAA4E;IAC5E,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,YAAY,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;IACxD,OAAO;iEACwD,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sDAoCf,YAAY;;;;;;;;;;;;;;;CAejE,CAAC;AACF,CAAC;AAED,SAAS,8BAA8B,CAAC,IAAY;IAClD,MAAM,eAAe,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5D,OAAO;8DACqD,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAiC3C,eAAe;;;;;;;;CAQrC,CAAC;AACF,CAAC;AAED,iFAAiF;AAEjF,SAAS,yBAAyB,CAAC,QAAoB,EAAE,KAAa;IACpE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACvE,MAAM;QACR,KAAK,QAAQ;YACX,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;YAChE,MAAM;QACR,KAAK,UAAU;YACb,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACvE,MAAM;QACR,KAAK,OAAO;YACV,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,MAAM;IACV,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;AACpF,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA6CA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBhE"}
|