@5ive-tech/cli 1.0.4
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 +226 -0
- package/dist/assets/vm/five_vm_wasm.d.ts +762 -0
- package/dist/assets/vm/five_vm_wasm.js +3754 -0
- package/dist/assets/vm/five_vm_wasm_bg.wasm +0 -0
- package/dist/assets/vm/five_vm_wasm_bg.wasm.d.ts +247 -0
- package/dist/assets/vm/package.json +11 -0
- package/dist/cli.d.ts +47 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +343 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/analyze.d.ts +3 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +435 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/build.d.ts +3 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +66 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/compile.d.ts +3 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +872 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +431 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/deploy-and-execute.d.ts +3 -0
- package/dist/commands/deploy-and-execute.d.ts.map +1 -0
- package/dist/commands/deploy-and-execute.js +317 -0
- package/dist/commands/deploy-and-execute.js.map +1 -0
- package/dist/commands/deploy.d.ts +21 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +806 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/donate.d.ts +4 -0
- package/dist/commands/donate.d.ts.map +1 -0
- package/dist/commands/donate.js +104 -0
- package/dist/commands/donate.js.map +1 -0
- package/dist/commands/execute.d.ts +6 -0
- package/dist/commands/execute.d.ts.map +1 -0
- package/dist/commands/execute.js +749 -0
- package/dist/commands/execute.js.map +1 -0
- package/dist/commands/fmt.d.ts +3 -0
- package/dist/commands/fmt.d.ts.map +1 -0
- package/dist/commands/fmt.js +327 -0
- package/dist/commands/fmt.js.map +1 -0
- package/dist/commands/help.d.ts +6 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +224 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/index.d.ts +45 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +119 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +887 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/local.d.ts +3 -0
- package/dist/commands/local.d.ts.map +1 -0
- package/dist/commands/local.js +703 -0
- package/dist/commands/local.js.map +1 -0
- package/dist/commands/namespace.d.ts +3 -0
- package/dist/commands/namespace.d.ts.map +1 -0
- package/dist/commands/namespace.js +328 -0
- package/dist/commands/namespace.js.map +1 -0
- package/dist/commands/template.d.ts +4 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +486 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/commands/test.d.ts +6 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +890 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/version.d.ts +6 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +339 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/config/ConfigManager.d.ts +69 -0
- package/dist/config/ConfigManager.d.ts.map +1 -0
- package/dist/config/ConfigManager.js +261 -0
- package/dist/config/ConfigManager.js.map +1 -0
- package/dist/config/index.d.ts +10 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +21 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +35 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +105 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/project/ProjectLoader.d.ts +12 -0
- package/dist/project/ProjectLoader.d.ts.map +1 -0
- package/dist/project/ProjectLoader.js +115 -0
- package/dist/project/ProjectLoader.js.map +1 -0
- package/dist/types.d.ts +334 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/AccountFixtureGenerator.d.ts +48 -0
- package/dist/utils/AccountFixtureGenerator.d.ts.map +1 -0
- package/dist/utils/AccountFixtureGenerator.js +265 -0
- package/dist/utils/AccountFixtureGenerator.js.map +1 -0
- package/dist/utils/FiveFileManager.d.ts +96 -0
- package/dist/utils/FiveFileManager.d.ts.map +1 -0
- package/dist/utils/FiveFileManager.js +329 -0
- package/dist/utils/FiveFileManager.js.map +1 -0
- package/dist/utils/ascii-art.d.ts +72 -0
- package/dist/utils/ascii-art.d.ts.map +1 -0
- package/dist/utils/ascii-art.js +314 -0
- package/dist/utils/ascii-art.js.map +1 -0
- package/dist/utils/cli-ui.d.ts +39 -0
- package/dist/utils/cli-ui.d.ts.map +1 -0
- package/dist/utils/cli-ui.js +75 -0
- package/dist/utils/cli-ui.js.map +1 -0
- package/dist/utils/fileUtils.d.ts +25 -0
- package/dist/utils/fileUtils.d.ts.map +1 -0
- package/dist/utils/fileUtils.js +50 -0
- package/dist/utils/fileUtils.js.map +1 -0
- package/dist/utils/logger.d.ts +53 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +287 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/wasm/compiler.d.ts +101 -0
- package/dist/wasm/compiler.d.ts.map +1 -0
- package/dist/wasm/compiler.js +906 -0
- package/dist/wasm/compiler.js.map +1 -0
- package/dist/wasm/loader.d.ts +2 -0
- package/dist/wasm/loader.d.ts.map +1 -0
- package/dist/wasm/loader.js +90 -0
- package/dist/wasm/loader.js.map +1 -0
- package/dist/wasm/vm.d.ts +32 -0
- package/dist/wasm/vm.d.ts.map +1 -0
- package/dist/wasm/vm.js +440 -0
- package/dist/wasm/vm.js.map +1 -0
- package/package.json +100 -0
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
// Generate starter Five DSL (.v) templates for common patterns.
|
|
2
|
+
import { mkdir, writeFile, access, readFile } from 'fs/promises';
|
|
3
|
+
import { join, resolve, dirname } from 'path';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import { success as uiSuccess, warning as uiWarning, uiColors } from '../utils/cli-ui.js';
|
|
7
|
+
export const templateCommand = {
|
|
8
|
+
name: 'template',
|
|
9
|
+
description: 'Generate Five DSL templates (vault, escrow, amm, token, nft, nft-globals). Note: nft-globals assumes metadata is set globally and only handles transfers.',
|
|
10
|
+
aliases: ['tmpl', 'scaffold'],
|
|
11
|
+
options: [
|
|
12
|
+
{
|
|
13
|
+
flags: '-t, --type <name>',
|
|
14
|
+
description: 'Template type',
|
|
15
|
+
choices: ['vault', 'escrow', 'amm', 'token', 'nft', 'nft-globals', 'multisig', 'vesting', 'auction-english', 'staking', 'airdrop-merkle', 'system-lamports', 'interface', 'spl-token'],
|
|
16
|
+
required: false,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
flags: '--all',
|
|
20
|
+
description: 'Generate all templates',
|
|
21
|
+
defaultValue: false,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
flags: '-o, --out-dir <dir>',
|
|
25
|
+
description: 'Output directory',
|
|
26
|
+
defaultValue: '.',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
flags: '-f, --force',
|
|
30
|
+
description: 'Overwrite existing files',
|
|
31
|
+
defaultValue: false,
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
arguments: [
|
|
35
|
+
{
|
|
36
|
+
name: 'name',
|
|
37
|
+
description: 'Optional base filename (without extension) when generating single template',
|
|
38
|
+
required: false,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
examples: [
|
|
42
|
+
{
|
|
43
|
+
command: 'five template --type vault',
|
|
44
|
+
description: 'Generate a vault.v template in current directory',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
command: 'five template --type escrow -o examples',
|
|
48
|
+
description: 'Generate escrow.v under examples/',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
command: 'five template --all -o templates',
|
|
52
|
+
description: 'Generate all templates into templates/',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
command: 'five template --type token my_token',
|
|
56
|
+
description: 'Generate my_token.v for a single template',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
command: 'five template --type nft-globals',
|
|
60
|
+
description: 'Generate nft-globals.v (transfer-only; metadata assumed pre-set)',
|
|
61
|
+
},
|
|
62
|
+
// Quickstart flows (Token)
|
|
63
|
+
{
|
|
64
|
+
command: '# Token: generate → compile → run locally',
|
|
65
|
+
description: '—',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
command: 'five template --type token -o templates',
|
|
69
|
+
description: 'Create token.v in ./templates',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
command: 'five compile templates/token.v -o build/token.bin',
|
|
73
|
+
description: 'Compile to bytecode (.bin)',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
command: 'five execute build/token.bin --local',
|
|
77
|
+
description: 'Local WASM execution (use -f to pick a function index)',
|
|
78
|
+
},
|
|
79
|
+
// Quickstart flows (AMM)
|
|
80
|
+
{
|
|
81
|
+
command: '# AMM: generate → compile → run locally',
|
|
82
|
+
description: '—',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
command: 'five template --type amm -o templates',
|
|
86
|
+
description: 'Create amm.v in ./templates',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
command: 'five compile templates/amm.v -o build/amm.bin',
|
|
90
|
+
description: 'Compile AMM template',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
command: 'five execute build/amm.bin --local',
|
|
94
|
+
description: 'Local WASM execution for AMM',
|
|
95
|
+
},
|
|
96
|
+
// Quickstart flows (NFT)
|
|
97
|
+
{
|
|
98
|
+
command: '# NFT: generate → compile → run locally',
|
|
99
|
+
description: '—',
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
command: 'five template --type nft -o templates',
|
|
103
|
+
description: 'Create nft.v in ./templates',
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
command: 'five compile templates/nft.v -o build/nft.bin',
|
|
107
|
+
description: 'Compile NFT template',
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
command: 'five execute build/nft.bin --local',
|
|
111
|
+
description: 'Local WASM execution for NFT',
|
|
112
|
+
},
|
|
113
|
+
// Deploy + on-chain execution (mainnet)
|
|
114
|
+
{
|
|
115
|
+
command: '# Deploy + execute on-chain (generic)',
|
|
116
|
+
description: '—',
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
command: 'five deploy build/token.bin --target mainnet',
|
|
120
|
+
description: 'Deploy compiled bytecode to mainnet',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
command: 'five execute --script-account <ACCOUNT_ID> -f 0 --target mainnet',
|
|
124
|
+
description: 'Execute function 0 of deployed script (replace <ACCOUNT_ID>)',
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
handler: async (args, options, context) => {
|
|
128
|
+
const { logger } = context;
|
|
129
|
+
const outDir = resolve(options.outDir || options['out-dir'] || '.');
|
|
130
|
+
const baseNameArg = args[0];
|
|
131
|
+
const force = !!options.force;
|
|
132
|
+
const all = !!options.all;
|
|
133
|
+
const type = options.type;
|
|
134
|
+
if (!all && !type) {
|
|
135
|
+
logger.error('Please specify --type <vault|escrow|amm|token|nft|nft-globals> or use --all');
|
|
136
|
+
throw new Error('Template type not specified');
|
|
137
|
+
}
|
|
138
|
+
// Determine which templates to generate
|
|
139
|
+
const templates = all
|
|
140
|
+
? ['vault', 'escrow', 'amm', 'token', 'nft', 'nft-globals', 'multisig', 'vesting', 'auction-english', 'staking', 'airdrop-merkle', 'system-lamports', 'interface', 'spl-token']
|
|
141
|
+
: [type];
|
|
142
|
+
const spinner = ora(`Generating ${all ? 'all templates' : `${type} template`}...`).start();
|
|
143
|
+
try {
|
|
144
|
+
await mkdir(outDir, { recursive: true });
|
|
145
|
+
const results = [];
|
|
146
|
+
for (const t of templates) {
|
|
147
|
+
const filename = buildFilename(t, baseNameArg);
|
|
148
|
+
const filepath = join(outDir, filename);
|
|
149
|
+
const content = await getTemplateContent(t);
|
|
150
|
+
const created = await writeFileSafe(filepath, content, force);
|
|
151
|
+
results.push({ file: filepath, created });
|
|
152
|
+
}
|
|
153
|
+
spinner.succeed('Template generation complete');
|
|
154
|
+
for (const r of results) {
|
|
155
|
+
if (r.created) {
|
|
156
|
+
console.log(`${uiSuccess('Created')} ${uiColors.info(r.file)}`);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
console.log(uiWarning(`Skipped (exists): ${r.file}`));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
console.log('\nNext steps:');
|
|
163
|
+
console.log(`- Edit generated .v files to fit your use case`);
|
|
164
|
+
console.log(`- Compile: ${uiColors.info('five compile <file>.v')}`);
|
|
165
|
+
console.log(`- Execute locally: ${uiColors.info('five execute <file>.five --local')}`);
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
spinner.fail('Failed to generate templates');
|
|
169
|
+
logger.error(err.message);
|
|
170
|
+
throw err;
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
function buildFilename(type, base) {
|
|
175
|
+
if (base && base.trim().length > 0) {
|
|
176
|
+
return `${base.trim()}.v`;
|
|
177
|
+
}
|
|
178
|
+
return `${type}.v`;
|
|
179
|
+
}
|
|
180
|
+
async function writeFileSafe(path, content, force) {
|
|
181
|
+
try {
|
|
182
|
+
if (!force) {
|
|
183
|
+
await access(path);
|
|
184
|
+
// Exists and not forcing
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
// Does not exist, proceed
|
|
190
|
+
}
|
|
191
|
+
await writeFile(path, content);
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
async function getTemplateContent(name) {
|
|
195
|
+
// Prefer external template files for easier debugging and iteration
|
|
196
|
+
try {
|
|
197
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
198
|
+
const __dirname = dirname(__filename); // .../dist/commands at runtime
|
|
199
|
+
const candidatePaths = [
|
|
200
|
+
// When running from dist
|
|
201
|
+
resolve(__dirname, '../templates', `${name}.v`),
|
|
202
|
+
// When running from src via ts-node or tests
|
|
203
|
+
resolve(__dirname, '../../src/templates', `${name}.v`),
|
|
204
|
+
// When executed from repository root
|
|
205
|
+
resolve(process.cwd(), 'templates', `${name}.v`),
|
|
206
|
+
];
|
|
207
|
+
for (const p of candidatePaths) {
|
|
208
|
+
try {
|
|
209
|
+
const data = await readFile(p, 'utf8');
|
|
210
|
+
if (data && data.trim().length > 0)
|
|
211
|
+
return data;
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
// try next
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
// ignore and fall back to inline
|
|
220
|
+
}
|
|
221
|
+
// Fallback to inline templates if files not found
|
|
222
|
+
switch (name) {
|
|
223
|
+
case 'vault':
|
|
224
|
+
return TEMPLATE_VAULT;
|
|
225
|
+
case 'escrow':
|
|
226
|
+
return TEMPLATE_ESCROW;
|
|
227
|
+
case 'amm':
|
|
228
|
+
return TEMPLATE_AMM;
|
|
229
|
+
case 'token':
|
|
230
|
+
return TEMPLATE_TOKEN;
|
|
231
|
+
case 'nft':
|
|
232
|
+
return TEMPLATE_NFT;
|
|
233
|
+
case 'nft-globals':
|
|
234
|
+
// Minimal inline fallback; prefer file template
|
|
235
|
+
return `// NFT (globals) inline fallback\nmut collection_symbol: string;\nmut base_uri: string;\naccount NFT { token_id: pubkey; owner_key: pubkey; uri: string; }\nconfigure(symbol: string, base: string) { collection_symbol = symbol; base_uri = base; }\nmint_from_globals(state: NFT @mut, owner: pubkey) { state.token_id = owner; state.owner_key = owner; state.uri = base_uri; }\n`;
|
|
236
|
+
case 'multisig':
|
|
237
|
+
return `account MultisigState { threshold: u8; approvals: u64; last_proposal_id: u64; proposal_hash: u64; executed: bool; }\ninit_multisig(state: MultisigState @mut, t: u8) { state.threshold = t; state.approvals = 0; state.last_proposal_id = 0; state.proposal_hash = 0; state.executed = false; }\nopen_proposal(state: MultisigState @mut, h: u64) { state.last_proposal_id = state.last_proposal_id + 1; state.proposal_hash = h; state.approvals = 0; state.executed = false; }\napprove(state: MultisigState @mut) { state.approvals = state.approvals + 1; }\nexecute(state: MultisigState @mut) { require(!state.executed); require(state.approvals >= state.threshold); state.executed = true; }\n`;
|
|
238
|
+
case 'vesting':
|
|
239
|
+
return `account VestingState { beneficiary: pubkey; start_time: u64; cliff_seconds: u64; duration_seconds: u64; total_amount: u64; released_amount: u64; }\ninit_vesting(state: VestingState @mut, b: pubkey, s: u64, c: u64, d: u64, t: u64) { state.beneficiary = b; state.start_time = s; state.cliff_seconds = c; state.duration_seconds = d; state.total_amount = t; state.released_amount = 0; }\nrelease(state: VestingState @mut, amount: u64) -> u64 { require(amount > 0); state.released_amount = state.released_amount + amount; return amount; }\n`;
|
|
240
|
+
case 'auction-english':
|
|
241
|
+
return `account AuctionState { seller: pubkey; end_time: u64; min_increment: u64; highest_bid: u64; highest_bidder: pubkey; settled: bool; }\ninit_auction(state: AuctionState @mut, s: pubkey, e: u64, m: u64, r: u64) { state.seller = s; state.end_time = e; state.min_increment = m; state.highest_bid = r; state.highest_bidder = s; state.settled = false; }\nbid(state: AuctionState @mut, b: pubkey, a: u64) { let now = get_clock(); require(now < state.end_time); require(a >= state.highest_bid + state.min_increment); state.highest_bid = a; state.highest_bidder = b; }\nsettle(state: AuctionState @mut) { let now = get_clock(); require(now >= state.end_time); require(!state.settled); state.settled = true; }\n`;
|
|
242
|
+
case 'staking':
|
|
243
|
+
return `account Pool { reward_rate_per_slot: u64; last_update_slot: u64; acc_reward_per_share: u64; scale: u64; }\naccount StakeAccount { owner_key: pubkey; amount: u64; reward_debt: u64; }\ninit_pool(state: Pool @mut, r: u64, sc: u64) { state.reward_rate_per_slot = r; state.last_update_slot = get_clock(); state.acc_reward_per_share = 0; state.scale = sc; }\naccrue(state: Pool @mut, slots: u64) { state.acc_reward_per_share = state.acc_reward_per_share + (state.reward_rate_per_slot * slots); state.last_update_slot = state.last_update_slot + slots; }\ninit_staker(state: StakeAccount @mut, o: pubkey) { state.owner_key = o; state.amount = 0; state.reward_debt = 0; }\nstake(state: StakeAccount @mut, o: pubkey, a: u64, acc: u64) { require(state.owner_key == o); state.reward_debt = state.reward_debt + (a * acc); state.amount = state.amount + a; }\nunstake(state: StakeAccount @mut, o: pubkey, a: u64, acc: u64) { require(state.owner_key == o); require(state.amount >= a); state.amount = state.amount - a; state.reward_debt = state.reward_debt - (a * acc); }\nclaimable(state: StakeAccount, acc: u64) -> u64 { let accrued = state.amount * acc; if (accrued <= state.reward_debt) { return 0; } return accrued - state.reward_debt; }\nrecord_claim(state: StakeAccount @mut, c: u64) { state.reward_debt = state.reward_debt + c; }\n`;
|
|
244
|
+
case 'airdrop-merkle':
|
|
245
|
+
return `account AirdropConfig { merkle_root: u64; total_claimed: u64; }\naccount ClaimRecord { claimer: pubkey; amount: u64; claimed: bool; }\ninit_airdrop(state: AirdropConfig @mut, r: u64) { state.merkle_root = r; state.total_claimed = 0; }\nclaim(state: ClaimRecord @mut, c: pubkey, a: u64, expected: u64, cfg_root: u64) { require(expected == cfg_root); require(!state.claimed); state.claimer = c; state.amount = a; state.claimed = true; }\n`;
|
|
246
|
+
case 'system-lamports':
|
|
247
|
+
return `quote_transfer(from: account, to: account, amount: u64) -> (u64, u64) { require(amount > 0); require(from.lamports >= amount); let nf = from.lamports - amount; let nt = to.lamports + amount; return (nf, nt); }\ncheck_min_balance(acc: account, min: u64) -> bool { return acc.lamports >= min; }\ntopup_needed(acc: account, min: u64) -> u64 { if (acc.lamports >= min) { return 0; } return min - acc.lamports; }\n`;
|
|
248
|
+
case 'interface':
|
|
249
|
+
return `interface ExampleProgram @program("11111111111111111111111111111111") { do_thing @discriminator(1) (arg: u64); }\ncall_example(target: account @signer, value: u64) { ExampleProgram.do_thing(value); }\n`;
|
|
250
|
+
case 'spl-token':
|
|
251
|
+
return `interface SPLToken @program("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA") { initialize_mint @discriminator(0) (mint: pubkey, decimals: u8, authority: pubkey, freeze_authority: pubkey); mint_to @discriminator(7) (mint: pubkey, to: pubkey, authority: pubkey, amount: u64); }\ncreate_mint(payer: account @signer, mint: account @init, decimals: u8) -> pubkey { SPLToken.initialize_mint(mint, decimals, payer, payer); return mint; }\nmint_tokens(mint: account @mut, dest: account @mut, amount: u64) { SPLToken.mint_to(mint, dest, mint, amount); }\n`;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// --- Templates ---
|
|
255
|
+
const COMMON_HEADER = `// Generated by five template
|
|
256
|
+
// Starter template in Five DSL. Adjust constraints and accounts
|
|
257
|
+
// to match your application and follow state layout best practices.
|
|
258
|
+
`;
|
|
259
|
+
const TEMPLATE_VAULT = `${COMMON_HEADER}
|
|
260
|
+
// Vault template: lamport custody via System Program CPI
|
|
261
|
+
|
|
262
|
+
// System Program interface for lamports transfer
|
|
263
|
+
interface SystemProgram @program("11111111111111111111111111111112") {
|
|
264
|
+
create_account @discriminator(0) (from: pubkey, to: pubkey, lamports: u64, space: u64, owner: pubkey);
|
|
265
|
+
assign @discriminator(1) (account: pubkey, owner: pubkey);
|
|
266
|
+
transfer_lamports @discriminator(2) (from: pubkey, to: pubkey, lamports: u64);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
account VaultState {
|
|
270
|
+
balance: u64;
|
|
271
|
+
authorized_user: pubkey;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// Initialize vault state (sets authority; vault_account provided during deposit/withdraw)
|
|
275
|
+
init_vault(state: VaultState @mut, authority: account @signer) {
|
|
276
|
+
state.balance = 0;
|
|
277
|
+
state.authorized_user = authority.key;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Deposit lamports into the vault: transfer from payer to vault_account
|
|
281
|
+
// - payer: signer funding the deposit
|
|
282
|
+
// - vault_account: the on-chain account holding lamports for the vault
|
|
283
|
+
// Updates internal balance for accounting
|
|
284
|
+
deposit(state: VaultState @mut, payer: account @signer @mut, vault_account: account @mut, amount: u64) {
|
|
285
|
+
require(amount > 0);
|
|
286
|
+
SystemProgram.transfer_lamports(payer, vault_account, amount);
|
|
287
|
+
state.balance = state.balance + amount;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// Withdraw lamports from the vault to a recipient (requires authority)
|
|
291
|
+
// - authority: must match configured authorized_user
|
|
292
|
+
// - vault_account: source of lamports (vault's account)
|
|
293
|
+
// - recipient: destination account to receive lamports
|
|
294
|
+
withdraw(state: VaultState @mut, authority: account @signer, vault_account: account @mut, recipient: account @mut, amount: u64) {
|
|
295
|
+
require(state.authorized_user == authority.key);
|
|
296
|
+
require(state.balance >= amount);
|
|
297
|
+
SystemProgram.transfer_lamports(vault_account, recipient, amount);
|
|
298
|
+
state.balance = state.balance - amount;
|
|
299
|
+
}
|
|
300
|
+
`;
|
|
301
|
+
const TEMPLATE_ESCROW = `${COMMON_HEADER}
|
|
302
|
+
// Escrow template: maker locks funds for a designated taker
|
|
303
|
+
|
|
304
|
+
account EscrowState {
|
|
305
|
+
maker: pubkey;
|
|
306
|
+
taker: pubkey;
|
|
307
|
+
amount: u64;
|
|
308
|
+
is_funded: bool;
|
|
309
|
+
is_settled: bool;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
init_escrow(state: EscrowState @mut, maker: account @signer, taker: pubkey, amount: u64) {
|
|
313
|
+
state.maker = maker.key;
|
|
314
|
+
state.taker = taker;
|
|
315
|
+
state.amount = amount;
|
|
316
|
+
state.is_funded = false;
|
|
317
|
+
state.is_settled = false;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
fund_escrow(state: EscrowState @mut, maker: account @signer, amount: u64) {
|
|
321
|
+
require(state.maker == maker.key);
|
|
322
|
+
require(amount == state.amount);
|
|
323
|
+
state.is_funded = true;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
claim_escrow(state: EscrowState @mut, taker: account @signer) {
|
|
327
|
+
require(state.is_funded);
|
|
328
|
+
require(!state.is_settled);
|
|
329
|
+
require(state.taker == taker.key);
|
|
330
|
+
state.is_settled = true;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
cancel_escrow(state: EscrowState @mut, maker: account @signer) {
|
|
334
|
+
require(!state.is_settled);
|
|
335
|
+
require(state.maker == maker.key);
|
|
336
|
+
state.is_funded = false;
|
|
337
|
+
}
|
|
338
|
+
`;
|
|
339
|
+
const TEMPLATE_AMM = `${COMMON_HEADER}
|
|
340
|
+
// Constant-product AMM template (x*y=k) with simple fee
|
|
341
|
+
|
|
342
|
+
account Pool {
|
|
343
|
+
token_a: u64;
|
|
344
|
+
token_b: u64;
|
|
345
|
+
total_shares: u64;
|
|
346
|
+
fee_bps: u64;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
init_pool(state: Pool @mut, fee_bps: u64) {
|
|
350
|
+
state.token_a = 0;
|
|
351
|
+
state.token_b = 0;
|
|
352
|
+
state.total_shares = 0;
|
|
353
|
+
state.fee_bps = fee_bps;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
add_liquidity(state: Pool @mut, amount_a: u64, amount_b: u64) -> u64 {
|
|
357
|
+
// Share calc for template
|
|
358
|
+
let shares = amount_a;
|
|
359
|
+
state.token_a = state.token_a + amount_a;
|
|
360
|
+
state.token_b = state.token_b + amount_b;
|
|
361
|
+
state.total_shares = state.total_shares + shares;
|
|
362
|
+
return shares;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
swap(state: Pool @mut, amount_in: u64, a_for_b: bool) -> u64 {
|
|
366
|
+
// Skeleton implementation for validator compatibility
|
|
367
|
+
let fee = (amount_in * state.fee_bps) / 10000;
|
|
368
|
+
let net_in = amount_in - fee;
|
|
369
|
+
// No state changes to avoid multi-account/multi-branch rules in validator
|
|
370
|
+
return net_in;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// Quote liquidity shares without mutating state
|
|
374
|
+
quote_add_liquidity(state: Pool, amount_a: u64, amount_b: u64) -> u64 {
|
|
375
|
+
if (amount_b < amount_a) {
|
|
376
|
+
return amount_b;
|
|
377
|
+
}
|
|
378
|
+
return amount_a;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
// Remove liquidity (simplified)
|
|
382
|
+
remove_liquidity(state: Pool @mut, share: u64) -> u64 {
|
|
383
|
+
require(state.total_shares >= share);
|
|
384
|
+
state.total_shares = state.total_shares - share;
|
|
385
|
+
return share;
|
|
386
|
+
}
|
|
387
|
+
`;
|
|
388
|
+
const TEMPLATE_TOKEN = `${COMMON_HEADER}
|
|
389
|
+
// Fungible token template with simple mint and transfer
|
|
390
|
+
|
|
391
|
+
account Mint {
|
|
392
|
+
authority: pubkey;
|
|
393
|
+
supply: u64;
|
|
394
|
+
decimals: u8;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
account TokenAccount {
|
|
398
|
+
owner_key: pubkey;
|
|
399
|
+
bal: u64;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// Initialize mint state
|
|
403
|
+
init_mint(state: Mint @mut, authority: pubkey, decimals: u8) {
|
|
404
|
+
state.authority = authority;
|
|
405
|
+
state.supply = 0;
|
|
406
|
+
state.decimals = decimals;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// Initialize a token account
|
|
410
|
+
init_account(state: TokenAccount @mut, owner: pubkey) {
|
|
411
|
+
state.owner_key = owner;
|
|
412
|
+
state.bal = 0;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// Split flows to satisfy current validator constraints
|
|
416
|
+
mint_increase_supply(state: Mint @mut, authority: pubkey, amount: u64) {
|
|
417
|
+
require(state.authority == authority);
|
|
418
|
+
state.supply = state.supply + amount;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
credit_account(state: TokenAccount @mut, amount: u64) {
|
|
422
|
+
state.bal = state.bal + amount;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
debit_account(state: TokenAccount @mut, signer: pubkey, amount: u64) {
|
|
426
|
+
require(state.owner_key == signer);
|
|
427
|
+
require(state.bal >= amount);
|
|
428
|
+
state.bal = state.bal - amount;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
credit_after_debit(state: TokenAccount @mut, amount: u64) {
|
|
432
|
+
state.bal = state.bal + amount;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// Burn reduces supply
|
|
436
|
+
burn_supply(state: Mint @mut, authority: pubkey, amount: u64) {
|
|
437
|
+
require(state.authority == authority);
|
|
438
|
+
require(state.supply >= amount);
|
|
439
|
+
state.supply = state.supply - amount;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
// Change mint authority
|
|
443
|
+
set_mint_authority(state: Mint @mut, current: pubkey, new_auth: pubkey) {
|
|
444
|
+
require(state.authority == current);
|
|
445
|
+
state.authority = new_auth;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
// Read-only helpers
|
|
449
|
+
get_supply(state: Mint) -> u64 { return state.supply; }
|
|
450
|
+
get_balance(state: TokenAccount) -> u64 { return state.bal; }
|
|
451
|
+
`;
|
|
452
|
+
const TEMPLATE_NFT = `${COMMON_HEADER}
|
|
453
|
+
// NFT template with simple mint and transfer
|
|
454
|
+
|
|
455
|
+
account NFT {
|
|
456
|
+
token_id: pubkey;
|
|
457
|
+
owner_key: pubkey;
|
|
458
|
+
uri: string;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
// Initialize NFT fields
|
|
462
|
+
mint_nft(state: NFT @mut, owner: pubkey, uri: string) {
|
|
463
|
+
// For template simplicity, assign token_id deterministically
|
|
464
|
+
state.token_id = owner;
|
|
465
|
+
state.owner_key = owner;
|
|
466
|
+
state.uri = uri;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
// Transfer ownership
|
|
470
|
+
transfer_nft(state: NFT @mut, from: pubkey, to: pubkey) {
|
|
471
|
+
require(state.owner_key == from);
|
|
472
|
+
state.owner_key = to;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
// Update token metadata URI
|
|
476
|
+
set_uri(state: NFT @mut, owner: pubkey, new_uri: string) {
|
|
477
|
+
require(state.owner_key == owner);
|
|
478
|
+
state.uri = new_uri;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
// Read-only helpers
|
|
482
|
+
get_uri(state: NFT) -> string { return state.uri; }
|
|
483
|
+
get_owner(state: NFT) -> pubkey { return state.owner_key; }
|
|
484
|
+
`;
|
|
485
|
+
export default templateCommand;
|
|
486
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAEhE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,OAAO,IAAI,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAS1F,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,2JAA2J;IACxK,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;IAE7B,OAAO,EAAE;QACP;YACE,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,eAAe;YAC5B,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,CAAC;YACtL,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,KAAK,EAAE,OAAO;YACd,WAAW,EAAE,wBAAwB;YACrC,YAAY,EAAE,KAAK;SACpB;QACD;YACE,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EAAE,kBAAkB;YAC/B,YAAY,EAAE,GAAG;SAClB;QACD;YACE,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,0BAA0B;YACvC,YAAY,EAAE,KAAK;SACpB;KACF;IAED,SAAS,EAAE;QACT;YACE,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,4EAA4E;YACzF,QAAQ,EAAE,KAAK;SAChB;KACF;IAED,QAAQ,EAAE;QACR;YACE,OAAO,EAAE,4BAA4B;YACrC,WAAW,EAAE,kDAAkD;SAChE;QACD;YACE,OAAO,EAAE,yCAAyC;YAClD,WAAW,EAAE,mCAAmC;SACjD;QACD;YACE,OAAO,EAAE,kCAAkC;YAC3C,WAAW,EAAE,wCAAwC;SACtD;QACD;YACE,OAAO,EAAE,qCAAqC;YAC9C,WAAW,EAAE,2CAA2C;SACzD;QACD;YACE,OAAO,EAAE,kCAAkC;YAC3C,WAAW,EAAE,kEAAkE;SAChF;QACD,2BAA2B;QAC3B;YACE,OAAO,EAAE,2CAA2C;YACpD,WAAW,EAAE,GAAG;SACjB;QACD;YACE,OAAO,EAAE,yCAAyC;YAClD,WAAW,EAAE,+BAA+B;SAC7C;QACD;YACE,OAAO,EAAE,mDAAmD;YAC5D,WAAW,EAAE,4BAA4B;SAC1C;QACD;YACE,OAAO,EAAE,sCAAsC;YAC/C,WAAW,EAAE,wDAAwD;SACtE;QACD,yBAAyB;QACzB;YACE,OAAO,EAAE,yCAAyC;YAClD,WAAW,EAAE,GAAG;SACjB;QACD;YACE,OAAO,EAAE,uCAAuC;YAChD,WAAW,EAAE,6BAA6B;SAC3C;QACD;YACE,OAAO,EAAE,+CAA+C;YACxD,WAAW,EAAE,sBAAsB;SACpC;QACD;YACE,OAAO,EAAE,oCAAoC;YAC7C,WAAW,EAAE,8BAA8B;SAC5C;QACD,yBAAyB;QACzB;YACE,OAAO,EAAE,yCAAyC;YAClD,WAAW,EAAE,GAAG;SACjB;QACD;YACE,OAAO,EAAE,uCAAuC;YAChD,WAAW,EAAE,6BAA6B;SAC3C;QACD;YACE,OAAO,EAAE,+CAA+C;YACxD,WAAW,EAAE,sBAAsB;SACpC;QACD;YACE,OAAO,EAAE,oCAAoC;YAC7C,WAAW,EAAE,8BAA8B;SAC5C;QACD,wCAAwC;QACxC;YACE,OAAO,EAAE,uCAAuC;YAChD,WAAW,EAAE,GAAG;SACjB;QACD;YACE,OAAO,EAAE,8CAA8C;YACvD,WAAW,EAAE,qCAAqC;SACnD;QACD;YACE,OAAO,EAAE,kEAAkE;YAC3E,WAAW,EAAE,8DAA8D;SAC5E;KACF;IAED,OAAO,EAAE,KAAK,EAAE,IAAc,EAAE,OAAY,EAAE,OAAuB,EAAiB,EAAE;QACtF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAE3B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAC9B,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAgC,CAAC;QAEtD,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC;YAC5F,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,wCAAwC;QACxC,MAAM,SAAS,GAAmB,GAAG;YACnC,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,CAAC;YAC/K,CAAC,CAAC,CAAC,IAAoB,CAAC,CAAC;QAE3B,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,WAAW,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3F,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEzC,MAAM,OAAO,GAAyC,EAAE,CAAC;YACzD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;gBAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACxC,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,CAAC,CAAC,CAAC;gBAC5C,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC9D,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,CAAC;YAED,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;YAChD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,CAAC,IAAI,CAAC,kCAAkC,CAAC,EAAE,CAAC,CAAC;QAEzF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC7C,MAAM,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;CACF,CAAC;AAEF,SAAS,aAAa,CAAC,IAAkB,EAAE,IAAa;IACtD,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5B,CAAC;IACD,OAAO,GAAG,IAAI,IAAI,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,OAAe,EAAE,KAAc;IACxE,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,yBAAyB;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IACD,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAAkB;IAClD,oEAAoE;IACpE,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,+BAA+B;QACtE,MAAM,cAAc,GAAG;YACrB,yBAAyB;YACzB,OAAO,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI,IAAI,CAAC;YAC/C,6CAA6C;YAC7C,OAAO,CAAC,SAAS,EAAE,qBAAqB,EAAE,GAAG,IAAI,IAAI,CAAC;YACtD,qCAAqC;YACrC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,GAAG,IAAI,IAAI,CAAC;SACjD,CAAC;QAEF,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACvC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO,IAAI,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IAED,kDAAkD;IAClD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,cAAc,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO,eAAe,CAAC;QACzB,KAAK,KAAK;YACR,OAAO,YAAY,CAAC;QACtB,KAAK,OAAO;YACV,OAAO,cAAc,CAAC;QACxB,KAAK,KAAK;YACR,OAAO,YAAY,CAAC;QACtB,KAAK,aAAa;YAChB,gDAAgD;YAChD,OAAO,sXAAsX,CAAC;QAChY,KAAK,UAAU;YACb,OAAO,yqBAAyqB,CAAC;QACnrB,KAAK,SAAS;YACZ,OAAO,yhBAAyhB,CAAC;QACniB,KAAK,iBAAiB;YACpB,OAAO,8rBAA8rB,CAAC;QACxsB,KAAK,SAAS;YACZ,OAAO,4yCAA4yC,CAAC;QACtzC,KAAK,gBAAgB;YACnB,OAAO,sbAAsb,CAAC;QAChc,KAAK,iBAAiB;YACpB,OAAO,2ZAA2Z,CAAC;QACra,KAAK,WAAW;YACd,OAAO,2MAA2M,CAAC;QACrN,KAAK,WAAW;YACd,OAAO,kiBAAkiB,CAAC;IAE9iB,CAAC;AACH,CAAC;AAED,oBAAoB;AAEpB,MAAM,aAAa,GAAG;;;CAGrB,CAAC;AAEF,MAAM,cAAc,GAAG,GAAG,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCtC,CAAC;AAEF,MAAM,eAAe,GAAG,GAAG,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCvC,CAAC;AAEF,MAAM,YAAY,GAAG,GAAG,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDpC,CAAC;AAEF,MAAM,cAAc,GAAG,GAAG,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DtC,CAAC;AAEF,MAAM,YAAY,GAAG,GAAG,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCpC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,iBAAiB,EAIlB,MAAM,aAAa,CAAC;AAqErB;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,iBA8NzB,CAAC"}
|