phantom-build 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +378 -0
- package/dist/analyzer.d.ts +11 -0
- package/dist/analyzer.d.ts.map +1 -0
- package/dist/analyzer.js +330 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/ast-compat.d.ts +11 -0
- package/dist/ast-compat.d.ts.map +1 -0
- package/dist/ast-compat.js +84 -0
- package/dist/ast-compat.js.map +1 -0
- package/dist/classify/boundary.d.ts +30 -0
- package/dist/classify/boundary.d.ts.map +1 -0
- package/dist/classify/boundary.js +145 -0
- package/dist/classify/boundary.js.map +1 -0
- package/dist/classify/browser-globals.d.ts +29 -0
- package/dist/classify/browser-globals.d.ts.map +1 -0
- package/dist/classify/browser-globals.js +197 -0
- package/dist/classify/browser-globals.js.map +1 -0
- package/dist/classify/index.d.ts +14 -0
- package/dist/classify/index.d.ts.map +1 -0
- package/dist/classify/index.js +294 -0
- package/dist/classify/index.js.map +1 -0
- package/dist/classify/lazy-llm.d.ts +122 -0
- package/dist/classify/lazy-llm.d.ts.map +1 -0
- package/dist/classify/lazy-llm.js +142 -0
- package/dist/classify/lazy-llm.js.map +1 -0
- package/dist/classify/lazy.d.ts +23 -0
- package/dist/classify/lazy.d.ts.map +1 -0
- package/dist/classify/lazy.js +686 -0
- package/dist/classify/lazy.js.map +1 -0
- package/dist/classify/llm-client.d.ts +59 -0
- package/dist/classify/llm-client.d.ts.map +1 -0
- package/dist/classify/llm-client.js +193 -0
- package/dist/classify/llm-client.js.map +1 -0
- package/dist/classify/purity.d.ts +21 -0
- package/dist/classify/purity.d.ts.map +1 -0
- package/dist/classify/purity.js +47 -0
- package/dist/classify/purity.js.map +1 -0
- package/dist/classify/react-patterns.d.ts +15 -0
- package/dist/classify/react-patterns.d.ts.map +1 -0
- package/dist/classify/react-patterns.js +82 -0
- package/dist/classify/react-patterns.js.map +1 -0
- package/dist/classify/taint.d.ts +32 -0
- package/dist/classify/taint.d.ts.map +1 -0
- package/dist/classify/taint.js +68 -0
- package/dist/classify/taint.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +109 -0
- package/dist/cli.js.map +1 -0
- package/dist/extract/chunk-module.d.ts +20 -0
- package/dist/extract/chunk-module.d.ts.map +1 -0
- package/dist/extract/chunk-module.js +163 -0
- package/dist/extract/chunk-module.js.map +1 -0
- package/dist/extract/client-stub.d.ts +25 -0
- package/dist/extract/client-stub.d.ts.map +1 -0
- package/dist/extract/client-stub.js +233 -0
- package/dist/extract/client-stub.js.map +1 -0
- package/dist/extract/import-resolver.d.ts +20 -0
- package/dist/extract/import-resolver.d.ts.map +1 -0
- package/dist/extract/import-resolver.js +51 -0
- package/dist/extract/import-resolver.js.map +1 -0
- package/dist/extract/index.d.ts +20 -0
- package/dist/extract/index.d.ts.map +1 -0
- package/dist/extract/index.js +105 -0
- package/dist/extract/index.js.map +1 -0
- package/dist/extract/lazy-transform.d.ts +14 -0
- package/dist/extract/lazy-transform.d.ts.map +1 -0
- package/dist/extract/lazy-transform.js +473 -0
- package/dist/extract/lazy-transform.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin.d.ts +7 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +535 -0
- package/dist/plugin.js.map +1 -0
- package/dist/runtime/index.d.ts +28 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +73 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/types.d.ts +219 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/vite.d.ts +3 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +3 -0
- package/dist/vite.js.map +1 -0
- package/dist/webpack.d.ts +3 -0
- package/dist/webpack.d.ts.map +1 -0
- package/dist/webpack.js +3 -0
- package/dist/webpack.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy.js","sourceRoot":"","sources":["../../src/classify/lazy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cerebras LLM client for lazy component optimization.
|
|
3
|
+
*
|
|
4
|
+
* Uses the Cerebras Cloud API (OpenAI-compatible) with a Qwen model
|
|
5
|
+
* for fast structured inference. No SDK dependency — raw fetch.
|
|
6
|
+
*
|
|
7
|
+
* Supports both single-module and batched multi-module calls.
|
|
8
|
+
* The batched path sends ALL modules' candidates in a single API request
|
|
9
|
+
* for cross-module awareness and minimal latency.
|
|
10
|
+
*/
|
|
11
|
+
import type { LazyCandidate, ComponentProfile, LazyCandidateResult } from '../types.js';
|
|
12
|
+
import { type LazyIR } from './lazy-llm.js';
|
|
13
|
+
export declare const CEREBRAS_API_URL = "https://api.cerebras.ai/v1/chat/completions";
|
|
14
|
+
export declare const DEFAULT_MODEL = "qwen-3-32b";
|
|
15
|
+
/**
|
|
16
|
+
* Call the Cerebras API to refine lazy detection heuristics for a single module.
|
|
17
|
+
*
|
|
18
|
+
* Returns the merged candidates with LLM overrides applied,
|
|
19
|
+
* or the original candidates if the API call fails.
|
|
20
|
+
*/
|
|
21
|
+
export declare function refineLazyCandidatesWithLLM(candidates: LazyCandidate[], keepStatic: LazyCandidateResult['keepStatic'], filePath: string, parentComponentName: string, componentProfiles: Map<string, ComponentProfile> | undefined, apiKey: string, model?: string, confidenceThreshold?: number): Promise<{
|
|
22
|
+
candidates: LazyCandidate[];
|
|
23
|
+
movedToStatic: Array<{
|
|
24
|
+
localName: string;
|
|
25
|
+
source: string;
|
|
26
|
+
reason: string;
|
|
27
|
+
}>;
|
|
28
|
+
insights: string[];
|
|
29
|
+
}>;
|
|
30
|
+
/**
|
|
31
|
+
* Batch-refine lazy candidates across ALL modules in a single LLM call.
|
|
32
|
+
*
|
|
33
|
+
* Takes the accumulated stash from every module's transform pass and sends
|
|
34
|
+
* one batched request. Returns merged results keyed by file path, or
|
|
35
|
+
* falls back to heuristic decisions on failure.
|
|
36
|
+
*/
|
|
37
|
+
export declare function refineLazyCandidatesBatched(moduleStash: Map<string, {
|
|
38
|
+
candidates: LazyCandidate[];
|
|
39
|
+
keepStatic: Array<{
|
|
40
|
+
localName: string;
|
|
41
|
+
source: string;
|
|
42
|
+
reason: string;
|
|
43
|
+
}>;
|
|
44
|
+
parentComponent: string;
|
|
45
|
+
componentProfiles: Map<string, ComponentProfile> | undefined;
|
|
46
|
+
}>, apiKey: string, model?: string, confidenceThreshold?: number): Promise<{
|
|
47
|
+
results: Map<string, {
|
|
48
|
+
updated: LazyCandidate[];
|
|
49
|
+
movedToStatic: Array<{
|
|
50
|
+
localName: string;
|
|
51
|
+
source: string;
|
|
52
|
+
reason: string;
|
|
53
|
+
}>;
|
|
54
|
+
insights: string[];
|
|
55
|
+
}>;
|
|
56
|
+
globalInsights: string[];
|
|
57
|
+
}>;
|
|
58
|
+
export declare function buildLazyIR(candidates: LazyCandidate[], keepStatic: LazyCandidateResult['keepStatic'], filePath: string, parentComponentName: string, componentProfiles: Map<string, ComponentProfile> | undefined): LazyIR;
|
|
59
|
+
//# sourceMappingURL=llm-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/classify/llm-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EACL,KAAK,MAAM,EAQZ,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,gBAAgB,gDAAgD,CAAC;AAC9E,eAAO,MAAM,aAAa,eAAe,CAAC;AAE1C;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,aAAa,EAAE,EAC3B,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,EAC7C,QAAQ,EAAE,MAAM,EAChB,mBAAmB,EAAE,MAAM,EAC3B,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,SAAS,EAC5D,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAsB,EAC7B,mBAAmB,GAAE,MAAY,GAChC,OAAO,CAAC;IACT,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,aAAa,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,CA0BD;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;IACvB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,UAAU,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzE,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,SAAS,CAAC;CAC9D,CAAC,EACF,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAsB,EAC7B,mBAAmB,GAAE,MAAY,GAChC,OAAO,CAAC;IACT,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE;QACnB,OAAO,EAAE,aAAa,EAAE,CAAC;QACzB,aAAa,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC5E,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC,CAAC;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC,CAiDD;AAID,wBAAgB,WAAW,CACzB,UAAU,EAAE,aAAa,EAAE,EAC3B,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,EAC7C,QAAQ,EAAE,MAAM,EAChB,mBAAmB,EAAE,MAAM,EAC3B,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,SAAS,GAC3D,MAAM,CA0BR"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cerebras LLM client for lazy component optimization.
|
|
3
|
+
*
|
|
4
|
+
* Uses the Cerebras Cloud API (OpenAI-compatible) with a Qwen model
|
|
5
|
+
* for fast structured inference. No SDK dependency — raw fetch.
|
|
6
|
+
*
|
|
7
|
+
* Supports both single-module and batched multi-module calls.
|
|
8
|
+
* The batched path sends ALL modules' candidates in a single API request
|
|
9
|
+
* for cross-module awareness and minimal latency.
|
|
10
|
+
*/
|
|
11
|
+
import { LAZY_SYSTEM_PROMPT, LAZY_BATCHED_SYSTEM_PROMPT, mergeLLMDecisions, mergeBatchedLLMDecisions, } from './lazy-llm.js';
|
|
12
|
+
export const CEREBRAS_API_URL = 'https://api.cerebras.ai/v1/chat/completions';
|
|
13
|
+
export const DEFAULT_MODEL = 'qwen-3-32b';
|
|
14
|
+
/**
|
|
15
|
+
* Call the Cerebras API to refine lazy detection heuristics for a single module.
|
|
16
|
+
*
|
|
17
|
+
* Returns the merged candidates with LLM overrides applied,
|
|
18
|
+
* or the original candidates if the API call fails.
|
|
19
|
+
*/
|
|
20
|
+
export async function refineLazyCandidatesWithLLM(candidates, keepStatic, filePath, parentComponentName, componentProfiles, apiKey, model = DEFAULT_MODEL, confidenceThreshold = 0.8) {
|
|
21
|
+
// Build the compact IR
|
|
22
|
+
const ir = buildLazyIR(candidates, keepStatic, filePath, parentComponentName, componentProfiles);
|
|
23
|
+
try {
|
|
24
|
+
const llmResponse = await callCerebras(ir, apiKey, model);
|
|
25
|
+
const { updated, movedToStatic } = mergeLLMDecisions(candidates, llmResponse, confidenceThreshold);
|
|
26
|
+
return {
|
|
27
|
+
candidates: updated,
|
|
28
|
+
movedToStatic,
|
|
29
|
+
insights: llmResponse.insights ?? [],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
// LLM failure is non-fatal — fall back to heuristic decisions
|
|
34
|
+
console.warn(`[phantom] LLM refinement failed, using heuristics:`, err instanceof Error ? err.message : err);
|
|
35
|
+
return { candidates, movedToStatic: [], insights: [] };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Batch-refine lazy candidates across ALL modules in a single LLM call.
|
|
40
|
+
*
|
|
41
|
+
* Takes the accumulated stash from every module's transform pass and sends
|
|
42
|
+
* one batched request. Returns merged results keyed by file path, or
|
|
43
|
+
* falls back to heuristic decisions on failure.
|
|
44
|
+
*/
|
|
45
|
+
export async function refineLazyCandidatesBatched(moduleStash, apiKey, model = DEFAULT_MODEL, confidenceThreshold = 0.8) {
|
|
46
|
+
// Build batched IR from all modules
|
|
47
|
+
const batchedIR = buildBatchedIR(moduleStash);
|
|
48
|
+
try {
|
|
49
|
+
const batchedResponse = await callCebrasBatched(batchedIR, apiKey, model);
|
|
50
|
+
// Extract just the candidates/keepStatic for the merge function
|
|
51
|
+
const mergeInput = new Map();
|
|
52
|
+
for (const [filePath, stashed] of moduleStash) {
|
|
53
|
+
mergeInput.set(filePath, {
|
|
54
|
+
candidates: stashed.candidates,
|
|
55
|
+
keepStatic: stashed.keepStatic,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
const results = mergeBatchedLLMDecisions(mergeInput, batchedResponse, confidenceThreshold);
|
|
59
|
+
return {
|
|
60
|
+
results,
|
|
61
|
+
globalInsights: batchedResponse.globalInsights ?? [],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
// LLM failure is non-fatal — fall back to heuristic decisions for all modules
|
|
66
|
+
console.warn(`[phantom] Batched LLM refinement failed, using heuristics for all modules:`, err instanceof Error ? err.message : err);
|
|
67
|
+
const results = new Map();
|
|
68
|
+
for (const [filePath, stashed] of moduleStash) {
|
|
69
|
+
results.set(filePath, {
|
|
70
|
+
updated: stashed.candidates,
|
|
71
|
+
movedToStatic: [],
|
|
72
|
+
insights: [],
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return { results, globalInsights: [] };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// ── IR builders ──────────────────────────────────────────────────────────
|
|
79
|
+
export function buildLazyIR(candidates, keepStatic, filePath, parentComponentName, componentProfiles) {
|
|
80
|
+
return {
|
|
81
|
+
parent: parentComponentName,
|
|
82
|
+
file: filePath,
|
|
83
|
+
candidates: candidates.map((c) => {
|
|
84
|
+
const profile = componentProfiles?.get(c.source);
|
|
85
|
+
return {
|
|
86
|
+
name: c.localName,
|
|
87
|
+
source: c.source,
|
|
88
|
+
jsxPosition: c.jsxPosition,
|
|
89
|
+
conditional: c.conditional,
|
|
90
|
+
hasHandlers: profile?.hasHandlers ?? false,
|
|
91
|
+
hasState: profile?.hasState ?? false,
|
|
92
|
+
hasEffects: profile?.hasEffects ?? false,
|
|
93
|
+
handlerCount: profile?.handlerCount ?? 0,
|
|
94
|
+
estimatedSize: profile?.estimatedSize ?? 0,
|
|
95
|
+
heuristicPrefetch: c.prefetch,
|
|
96
|
+
heuristicReason: c.reason,
|
|
97
|
+
};
|
|
98
|
+
}),
|
|
99
|
+
keptStatic: keepStatic.map((s) => ({
|
|
100
|
+
name: s.localName,
|
|
101
|
+
reason: s.reason,
|
|
102
|
+
})),
|
|
103
|
+
sharedState: [], // Static analysis for shared state is a future enhancement
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function buildBatchedIR(moduleStash) {
|
|
107
|
+
const modules = [];
|
|
108
|
+
let totalCandidates = 0;
|
|
109
|
+
for (const [filePath, stashed] of moduleStash) {
|
|
110
|
+
const ir = buildLazyIR(stashed.candidates, stashed.keepStatic, filePath, stashed.parentComponent, stashed.componentProfiles);
|
|
111
|
+
modules.push(ir);
|
|
112
|
+
totalCandidates += stashed.candidates.length;
|
|
113
|
+
}
|
|
114
|
+
return { modules, totalCandidates };
|
|
115
|
+
}
|
|
116
|
+
// ── Cerebras API calls ──────────────────────────────────────────────────
|
|
117
|
+
async function callCerebras(ir, apiKey, model) {
|
|
118
|
+
const response = await fetch(CEREBRAS_API_URL, {
|
|
119
|
+
method: 'POST',
|
|
120
|
+
headers: {
|
|
121
|
+
'Content-Type': 'application/json',
|
|
122
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
123
|
+
},
|
|
124
|
+
body: JSON.stringify({
|
|
125
|
+
model,
|
|
126
|
+
messages: [
|
|
127
|
+
{ role: 'system', content: LAZY_SYSTEM_PROMPT },
|
|
128
|
+
{ role: 'user', content: JSON.stringify(ir, null, 2) },
|
|
129
|
+
],
|
|
130
|
+
temperature: 0.1,
|
|
131
|
+
max_tokens: 2048,
|
|
132
|
+
response_format: { type: 'json_object' },
|
|
133
|
+
}),
|
|
134
|
+
});
|
|
135
|
+
if (!response.ok) {
|
|
136
|
+
const body = await response.text().catch(() => '');
|
|
137
|
+
throw new Error(`Cerebras API error ${response.status}: ${body}`);
|
|
138
|
+
}
|
|
139
|
+
const data = await response.json();
|
|
140
|
+
const content = data.choices?.[0]?.message?.content;
|
|
141
|
+
if (!content) {
|
|
142
|
+
throw new Error('Empty response from Cerebras API');
|
|
143
|
+
}
|
|
144
|
+
const parsed = JSON.parse(content);
|
|
145
|
+
// Validate basic structure
|
|
146
|
+
if (!Array.isArray(parsed.decisions)) {
|
|
147
|
+
throw new Error('Invalid LLM response: missing decisions array');
|
|
148
|
+
}
|
|
149
|
+
return parsed;
|
|
150
|
+
}
|
|
151
|
+
async function callCebrasBatched(ir, apiKey, model) {
|
|
152
|
+
// Scale max_tokens with the number of modules — each module needs ~500 tokens
|
|
153
|
+
const maxTokens = Math.min(8192, 1024 + ir.modules.length * 512);
|
|
154
|
+
const response = await fetch(CEREBRAS_API_URL, {
|
|
155
|
+
method: 'POST',
|
|
156
|
+
headers: {
|
|
157
|
+
'Content-Type': 'application/json',
|
|
158
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
159
|
+
},
|
|
160
|
+
body: JSON.stringify({
|
|
161
|
+
model,
|
|
162
|
+
messages: [
|
|
163
|
+
{ role: 'system', content: LAZY_BATCHED_SYSTEM_PROMPT },
|
|
164
|
+
{ role: 'user', content: JSON.stringify(ir, null, 2) },
|
|
165
|
+
],
|
|
166
|
+
temperature: 0.1,
|
|
167
|
+
max_tokens: maxTokens,
|
|
168
|
+
response_format: { type: 'json_object' },
|
|
169
|
+
}),
|
|
170
|
+
});
|
|
171
|
+
if (!response.ok) {
|
|
172
|
+
const body = await response.text().catch(() => '');
|
|
173
|
+
throw new Error(`Cerebras API error ${response.status}: ${body}`);
|
|
174
|
+
}
|
|
175
|
+
const data = await response.json();
|
|
176
|
+
const content = data.choices?.[0]?.message?.content;
|
|
177
|
+
if (!content) {
|
|
178
|
+
throw new Error('Empty response from Cerebras API');
|
|
179
|
+
}
|
|
180
|
+
const parsed = JSON.parse(content);
|
|
181
|
+
// Validate basic structure
|
|
182
|
+
if (!parsed.modules || typeof parsed.modules !== 'object') {
|
|
183
|
+
throw new Error('Invalid batched LLM response: missing modules object');
|
|
184
|
+
}
|
|
185
|
+
// Validate each module response
|
|
186
|
+
for (const [filePath, moduleResponse] of Object.entries(parsed.modules)) {
|
|
187
|
+
if (!Array.isArray(moduleResponse.decisions)) {
|
|
188
|
+
throw new Error(`Invalid batched LLM response: missing decisions array for ${filePath}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return parsed;
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=llm-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/classify/llm-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { FunctionDependency } from '../types.js';
|
|
2
|
+
import type { TaintResult } from './taint.js';
|
|
3
|
+
export interface PurityResult {
|
|
4
|
+
/** Whether this function is pure computation (no side effects, no browser APIs) */
|
|
5
|
+
pure: boolean;
|
|
6
|
+
/** Reasons why it's pure or impure */
|
|
7
|
+
reasons: string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Pass 2: Purity Analysis
|
|
11
|
+
*
|
|
12
|
+
* Determines if a non-tainted function is "pure computation" —
|
|
13
|
+
* meaning it only transforms data without side effects.
|
|
14
|
+
*
|
|
15
|
+
* A function is considered pure if:
|
|
16
|
+
* - It is NOT tainted (no browser globals)
|
|
17
|
+
* - It has no unknown globals (conservative)
|
|
18
|
+
* - Its captured variables are from data flow (not side-effectful)
|
|
19
|
+
*/
|
|
20
|
+
export declare function analyzePurity(fn: FunctionDependency, taint: TaintResult): PurityResult;
|
|
21
|
+
//# sourceMappingURL=purity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purity.d.ts","sourceRoot":"","sources":["../../src/classify/purity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,mFAAmF;IACnF,IAAI,EAAE,OAAO,CAAC;IACd,sCAAsC;IACtC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,kBAAkB,EACtB,KAAK,EAAE,WAAW,GACjB,YAAY,CA0Cd"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pass 2: Purity Analysis
|
|
3
|
+
*
|
|
4
|
+
* Determines if a non-tainted function is "pure computation" —
|
|
5
|
+
* meaning it only transforms data without side effects.
|
|
6
|
+
*
|
|
7
|
+
* A function is considered pure if:
|
|
8
|
+
* - It is NOT tainted (no browser globals)
|
|
9
|
+
* - It has no unknown globals (conservative)
|
|
10
|
+
* - Its captured variables are from data flow (not side-effectful)
|
|
11
|
+
*/
|
|
12
|
+
export function analyzePurity(fn, taint) {
|
|
13
|
+
const reasons = [];
|
|
14
|
+
// If tainted, definitely not pure
|
|
15
|
+
if (taint.tainted) {
|
|
16
|
+
reasons.push(`References browser APIs: ${taint.browserGlobals.join(', ')}`);
|
|
17
|
+
return { pure: false, reasons };
|
|
18
|
+
}
|
|
19
|
+
// If there are ambiguous globals (fetch, crypto, etc.), not pure
|
|
20
|
+
if (taint.ambiguousGlobals.length > 0) {
|
|
21
|
+
reasons.push(`References cross-environment APIs: ${taint.ambiguousGlobals.join(', ')}`);
|
|
22
|
+
return { pure: false, reasons };
|
|
23
|
+
}
|
|
24
|
+
// If there are unknown globals, be conservative
|
|
25
|
+
if (taint.unknownGlobals.length > 0) {
|
|
26
|
+
reasons.push(`References unknown globals: ${taint.unknownGlobals.join(', ')}`);
|
|
27
|
+
return { pure: false, reasons };
|
|
28
|
+
}
|
|
29
|
+
// If the function only uses:
|
|
30
|
+
// - local variables
|
|
31
|
+
// - captured variables (from parent scope — data flow)
|
|
32
|
+
// - imported modules (from dependencies)
|
|
33
|
+
// - pure globals (Math, JSON, etc.)
|
|
34
|
+
// Then it's a pure computation candidate.
|
|
35
|
+
if (fn.globals.length === 0 || taint.pureGlobals.length === fn.globals.length) {
|
|
36
|
+
reasons.push('No browser APIs, only pure globals');
|
|
37
|
+
}
|
|
38
|
+
if (fn.captured.length > 0) {
|
|
39
|
+
reasons.push(`Captures: ${fn.captured.join(', ')}`);
|
|
40
|
+
}
|
|
41
|
+
if (fn.imported.length > 0) {
|
|
42
|
+
reasons.push(`Uses imports: ${fn.imported.join(', ')}`);
|
|
43
|
+
}
|
|
44
|
+
reasons.push('Function body is pure computation');
|
|
45
|
+
return { pure: true, reasons };
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=purity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purity.js","sourceRoot":"","sources":["../../src/classify/purity.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAC3B,EAAsB,EACtB,KAAkB;IAElB,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,kCAAkC;IAClC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,4BAA4B,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5E,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,iEAAiE;IACjE,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,sCAAsC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,gDAAgD;IAChD,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,+BAA+B,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/E,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,6BAA6B;IAC7B,oBAAoB;IACpB,uDAAuD;IACvD,yCAAyC;IACzC,oCAAoC;IACpC,0CAA0C;IAE1C,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAClD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hook classification rules.
|
|
3
|
+
*
|
|
4
|
+
* Determines whether a hook's callback is a PureComputation candidate
|
|
5
|
+
* or must stay on the client.
|
|
6
|
+
*/
|
|
7
|
+
/** Hooks whose callbacks are PureComputation candidates if the body is pure */
|
|
8
|
+
export declare const EXTRACTABLE_HOOKS: Set<string>;
|
|
9
|
+
/** Hooks whose callbacks must always stay on client (side effects) */
|
|
10
|
+
export declare const CLIENT_ONLY_HOOKS: Set<string>;
|
|
11
|
+
/** Hooks that are neutral — they don't indicate server or client */
|
|
12
|
+
export declare const NEUTRAL_HOOKS: Set<string>;
|
|
13
|
+
/** JSX event handler prop names (callbacks that receive browser events) */
|
|
14
|
+
export declare const EVENT_HANDLER_PROPS: Set<string>;
|
|
15
|
+
//# sourceMappingURL=react-patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-patterns.d.ts","sourceRoot":"","sources":["../../src/classify/react-patterns.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,aAG5B,CAAC;AAEH,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,aAI5B,CAAC;AAEH,oEAAoE;AACpE,eAAO,MAAM,aAAa,aAWxB,CAAC;AAEH,2EAA2E;AAC3E,eAAO,MAAM,mBAAmB,aAiD9B,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hook classification rules.
|
|
3
|
+
*
|
|
4
|
+
* Determines whether a hook's callback is a PureComputation candidate
|
|
5
|
+
* or must stay on the client.
|
|
6
|
+
*/
|
|
7
|
+
/** Hooks whose callbacks are PureComputation candidates if the body is pure */
|
|
8
|
+
export const EXTRACTABLE_HOOKS = new Set([
|
|
9
|
+
'useMemo',
|
|
10
|
+
'useCallback',
|
|
11
|
+
]);
|
|
12
|
+
/** Hooks whose callbacks must always stay on client (side effects) */
|
|
13
|
+
export const CLIENT_ONLY_HOOKS = new Set([
|
|
14
|
+
'useEffect',
|
|
15
|
+
'useLayoutEffect',
|
|
16
|
+
'useInsertionEffect',
|
|
17
|
+
]);
|
|
18
|
+
/** Hooks that are neutral — they don't indicate server or client */
|
|
19
|
+
export const NEUTRAL_HOOKS = new Set([
|
|
20
|
+
'useState',
|
|
21
|
+
'useReducer',
|
|
22
|
+
'useRef',
|
|
23
|
+
'useContext',
|
|
24
|
+
'useId',
|
|
25
|
+
'useSyncExternalStore',
|
|
26
|
+
'useTransition',
|
|
27
|
+
'useDeferredValue',
|
|
28
|
+
'useImperativeHandle',
|
|
29
|
+
'useDebugValue',
|
|
30
|
+
]);
|
|
31
|
+
/** JSX event handler prop names (callbacks that receive browser events) */
|
|
32
|
+
export const EVENT_HANDLER_PROPS = new Set([
|
|
33
|
+
'onClick',
|
|
34
|
+
'onChange',
|
|
35
|
+
'onSubmit',
|
|
36
|
+
'onInput',
|
|
37
|
+
'onFocus',
|
|
38
|
+
'onBlur',
|
|
39
|
+
'onKeyDown',
|
|
40
|
+
'onKeyUp',
|
|
41
|
+
'onKeyPress',
|
|
42
|
+
'onMouseDown',
|
|
43
|
+
'onMouseUp',
|
|
44
|
+
'onMouseMove',
|
|
45
|
+
'onMouseEnter',
|
|
46
|
+
'onMouseLeave',
|
|
47
|
+
'onMouseOver',
|
|
48
|
+
'onMouseOut',
|
|
49
|
+
'onTouchStart',
|
|
50
|
+
'onTouchEnd',
|
|
51
|
+
'onTouchMove',
|
|
52
|
+
'onDrag',
|
|
53
|
+
'onDragStart',
|
|
54
|
+
'onDragEnd',
|
|
55
|
+
'onDragOver',
|
|
56
|
+
'onDragEnter',
|
|
57
|
+
'onDragLeave',
|
|
58
|
+
'onDrop',
|
|
59
|
+
'onScroll',
|
|
60
|
+
'onWheel',
|
|
61
|
+
'onResize',
|
|
62
|
+
'onLoad',
|
|
63
|
+
'onError',
|
|
64
|
+
'onContextMenu',
|
|
65
|
+
'onDoubleClick',
|
|
66
|
+
'onCopy',
|
|
67
|
+
'onCut',
|
|
68
|
+
'onPaste',
|
|
69
|
+
'onSelect',
|
|
70
|
+
'onAnimationStart',
|
|
71
|
+
'onAnimationEnd',
|
|
72
|
+
'onAnimationIteration',
|
|
73
|
+
'onTransitionEnd',
|
|
74
|
+
'onPointerDown',
|
|
75
|
+
'onPointerUp',
|
|
76
|
+
'onPointerMove',
|
|
77
|
+
'onPointerEnter',
|
|
78
|
+
'onPointerLeave',
|
|
79
|
+
'onPointerOver',
|
|
80
|
+
'onPointerOut',
|
|
81
|
+
]);
|
|
82
|
+
//# sourceMappingURL=react-patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-patterns.js","sourceRoot":"","sources":["../../src/classify/react-patterns.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IACvC,SAAS;IACT,aAAa;CACd,CAAC,CAAC;AAEH,sEAAsE;AACtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IACvC,WAAW;IACX,iBAAiB;IACjB,oBAAoB;CACrB,CAAC,CAAC;AAEH,oEAAoE;AACpE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IACnC,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,YAAY;IACZ,OAAO;IACP,sBAAsB;IACtB,eAAe;IACf,kBAAkB;IAClB,qBAAqB;IACrB,eAAe;CAChB,CAAC,CAAC;AAEH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IACzC,SAAS;IACT,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,QAAQ;IACR,WAAW;IACX,SAAS;IACT,YAAY;IACZ,aAAa;IACb,WAAW;IACX,aAAa;IACb,cAAc;IACd,cAAc;IACd,aAAa;IACb,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,aAAa;IACb,QAAQ;IACR,aAAa;IACb,WAAW;IACX,YAAY;IACZ,aAAa;IACb,aAAa;IACb,QAAQ;IACR,UAAU;IACV,SAAS;IACT,UAAU;IACV,QAAQ;IACR,SAAS;IACT,eAAe;IACf,eAAe;IACf,QAAQ;IACR,OAAO;IACP,SAAS;IACT,UAAU;IACV,kBAAkB;IAClB,gBAAgB;IAChB,sBAAsB;IACtB,iBAAiB;IACjB,eAAe;IACf,aAAa;IACb,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,cAAc;CACf,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { FunctionDependency } from '../types.js';
|
|
2
|
+
export interface TaintResult {
|
|
3
|
+
/** Whether this function is tainted (references browser APIs) */
|
|
4
|
+
tainted: boolean;
|
|
5
|
+
/** Which browser globals caused the taint */
|
|
6
|
+
browserGlobals: string[];
|
|
7
|
+
/** Which globals are pure (Math, JSON, etc.) */
|
|
8
|
+
pureGlobals: string[];
|
|
9
|
+
/** Cross-environment globals (fetch, crypto, etc.) */
|
|
10
|
+
ambiguousGlobals: string[];
|
|
11
|
+
/** Which globals are unknown (not in any list) */
|
|
12
|
+
unknownGlobals: string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Pass 1: Taint Analysis
|
|
16
|
+
*
|
|
17
|
+
* Classifies each function's global references as browser-tainted,
|
|
18
|
+
* ambiguous (cross-environment), pure, or unknown.
|
|
19
|
+
*
|
|
20
|
+
* A function is "tainted" if it references any browser-only global
|
|
21
|
+
* (window, document, localStorage, etc.).
|
|
22
|
+
*/
|
|
23
|
+
export declare function analyzeTaint(fn: FunctionDependency): TaintResult;
|
|
24
|
+
/**
|
|
25
|
+
* Propagate taint through function call chains.
|
|
26
|
+
*
|
|
27
|
+
* If function A calls function B and B is tainted, then A is tainted.
|
|
28
|
+
* This requires knowledge of the full call graph, which we build from
|
|
29
|
+
* the function dependency information.
|
|
30
|
+
*/
|
|
31
|
+
export declare function propagateTaint(functions: FunctionDependency[], taintResults: Map<FunctionDependency, TaintResult>): void;
|
|
32
|
+
//# sourceMappingURL=taint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taint.d.ts","sourceRoot":"","sources":["../../src/classify/taint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtD,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAC;IACjB,6CAA6C;IAC7C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gDAAgD;IAChD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sDAAsD;IACtD,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,kDAAkD;IAClD,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,kBAAkB,GAAG,WAAW,CAyBhE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,kBAAkB,EAAE,EAC/B,YAAY,EAAE,GAAG,CAAC,kBAAkB,EAAE,WAAW,CAAC,GACjD,IAAI,CAuBN"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { isBrowserGlobal, isAmbiguousGlobal, isPureGlobal } from './browser-globals.js';
|
|
2
|
+
/**
|
|
3
|
+
* Pass 1: Taint Analysis
|
|
4
|
+
*
|
|
5
|
+
* Classifies each function's global references as browser-tainted,
|
|
6
|
+
* ambiguous (cross-environment), pure, or unknown.
|
|
7
|
+
*
|
|
8
|
+
* A function is "tainted" if it references any browser-only global
|
|
9
|
+
* (window, document, localStorage, etc.).
|
|
10
|
+
*/
|
|
11
|
+
export function analyzeTaint(fn) {
|
|
12
|
+
const browserGlobals = [];
|
|
13
|
+
const pureGlobals = [];
|
|
14
|
+
const ambiguousGlobals = [];
|
|
15
|
+
const unknownGlobals = [];
|
|
16
|
+
for (const global of fn.globals) {
|
|
17
|
+
if (isBrowserGlobal(global)) {
|
|
18
|
+
browserGlobals.push(global);
|
|
19
|
+
}
|
|
20
|
+
else if (isAmbiguousGlobal(global)) {
|
|
21
|
+
ambiguousGlobals.push(global);
|
|
22
|
+
}
|
|
23
|
+
else if (isPureGlobal(global)) {
|
|
24
|
+
pureGlobals.push(global);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
unknownGlobals.push(global);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
tainted: browserGlobals.length > 0,
|
|
32
|
+
browserGlobals,
|
|
33
|
+
pureGlobals,
|
|
34
|
+
ambiguousGlobals,
|
|
35
|
+
unknownGlobals,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Propagate taint through function call chains.
|
|
40
|
+
*
|
|
41
|
+
* If function A calls function B and B is tainted, then A is tainted.
|
|
42
|
+
* This requires knowledge of the full call graph, which we build from
|
|
43
|
+
* the function dependency information.
|
|
44
|
+
*/
|
|
45
|
+
export function propagateTaint(functions, taintResults) {
|
|
46
|
+
let changed = true;
|
|
47
|
+
while (changed) {
|
|
48
|
+
changed = false;
|
|
49
|
+
for (const fn of functions) {
|
|
50
|
+
const result = taintResults.get(fn);
|
|
51
|
+
if (!result || result.tainted)
|
|
52
|
+
continue;
|
|
53
|
+
// Check if any captured variable is a tainted function
|
|
54
|
+
for (const captured of fn.captured) {
|
|
55
|
+
const capturedFn = functions.find((f) => f.name === captured);
|
|
56
|
+
if (capturedFn) {
|
|
57
|
+
const capturedResult = taintResults.get(capturedFn);
|
|
58
|
+
if (capturedResult?.tainted) {
|
|
59
|
+
result.tainted = true;
|
|
60
|
+
result.browserGlobals.push(`(via ${captured})`);
|
|
61
|
+
changed = true;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=taint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taint.js","sourceRoot":"","sources":["../../src/classify/taint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAexF;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,EAAsB;IACjD,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAChC,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC;QAClC,cAAc;QACd,WAAW;QACX,gBAAgB;QAChB,cAAc;KACf,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,SAA+B,EAC/B,YAAkD;IAElD,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,OAAO,OAAO,EAAE,CAAC;QACf,OAAO,GAAG,KAAK,CAAC;QAChB,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO;gBAAE,SAAS;YAExC,uDAAuD;YACvD,KAAK,MAAM,QAAQ,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;gBAC9D,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBACpD,IAAI,cAAc,EAAE,OAAO,EAAE,CAAC;wBAC5B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;wBACtB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,QAAQ,GAAG,CAAC,CAAC;wBAChD,OAAO,GAAG,IAAI,CAAC;oBACjB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|