@msn-control/liftoff 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,48 @@
1
+ # Liftoff CLI
2
+
3
+ Status: implemented.
4
+
5
+ Liftoff is the Mission Control Launchpad Engine package. It exposes the `liftoff` command and scaffolds enterprise GenAI applications with FastAPI, PydanticAI, Docker Compose, OpenTofu, and spec-driven governance assets.
6
+
7
+ ## Installation
8
+
9
+ Install the latest stable CLI globally:
10
+
11
+ ```bash
12
+ npm install -g @msn-control/liftoff@latest
13
+ ```
14
+
15
+ After installation, run:
16
+
17
+ ```bash
18
+ liftoff help
19
+ liftoff create
20
+ ```
21
+
22
+ ## Development
23
+
24
+ Repository-local commands are for contributors working from a Mission Control checkout. Run package commands from the repository root:
25
+
26
+ ```bash
27
+ npm run build
28
+ npm test
29
+ npm run check
30
+ ```
31
+
32
+ Or run them directly in this workspace package:
33
+
34
+ ```bash
35
+ npm run check --workspace @msn-control/liftoff
36
+ ```
37
+
38
+ Run the package smoke test before publishing:
39
+
40
+ ```bash
41
+ npm run smoke:package --workspace @msn-control/liftoff
42
+ ```
43
+
44
+ ## Release
45
+
46
+ The `Release Liftoff` workflow builds, tests, packs, smoke-installs, and publishes only the `@msn-control/liftoff` workspace package. Stable versions publish with the `latest` npm dist-tag; prerelease versions publish with `next`.
47
+
48
+ Prefer npm trusted publishing with provenance for release authentication. If trusted publishing is not configured for the repository and npm organization, create a scoped npm automation token and store it as the repository secret `NPM_TOKEN`.
package/dist/args.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import type { ParsedArgs } from './types.js';
2
+ export declare function parseArgs(argv: string[]): ParsedArgs;
3
+ export declare function readStringFlag(flags: ParsedArgs['flags'], name: string): string | undefined;
4
+ export declare function readBooleanFlag(flags: ParsedArgs['flags'], name: string): boolean | undefined;
5
+ export declare function readListFlag(flags: ParsedArgs['flags'], name: string): string[] | undefined;
package/dist/args.js ADDED
@@ -0,0 +1,74 @@
1
+ const commandsWithSubcommands = new Set(['regions', 'dev', 'infra']);
2
+ const booleanFlags = new Set(['yes', 'frontend', 'help', 'json', 'print']);
3
+ const valueFlags = new Set(['pattern', 'cloud', 'region', 'spec', 'environments', 'config', 'project', 'env', 'profile']);
4
+ export function parseArgs(argv) {
5
+ const [command, maybeSubcommand, ...rest] = argv;
6
+ const positional = [];
7
+ const flags = {};
8
+ const hasSubcommand = Boolean(command && maybeSubcommand && !maybeSubcommand.startsWith('-') && commandsWithSubcommands.has(command));
9
+ const tokens = hasSubcommand ? rest : argv.slice(1);
10
+ const subcommand = hasSubcommand ? maybeSubcommand : undefined;
11
+ for (let index = 0; index < tokens.length; index += 1) {
12
+ const token = tokens[index];
13
+ if (!token.startsWith('--')) {
14
+ positional.push(token);
15
+ continue;
16
+ }
17
+ const withoutPrefix = token.slice(2);
18
+ if (withoutPrefix.startsWith('no-')) {
19
+ flags[withoutPrefix.slice(3)] = false;
20
+ continue;
21
+ }
22
+ const equalsIndex = withoutPrefix.indexOf('=');
23
+ if (equalsIndex >= 0) {
24
+ const key = withoutPrefix.slice(0, equalsIndex);
25
+ flags[key] = withoutPrefix.slice(equalsIndex + 1);
26
+ continue;
27
+ }
28
+ if (booleanFlags.has(withoutPrefix)) {
29
+ flags[withoutPrefix] = true;
30
+ continue;
31
+ }
32
+ if (valueFlags.has(withoutPrefix)) {
33
+ const next = tokens[index + 1];
34
+ if (!next || next.startsWith('--')) {
35
+ throw new Error(`Missing value for --${withoutPrefix}.`);
36
+ }
37
+ flags[withoutPrefix] = next;
38
+ index += 1;
39
+ continue;
40
+ }
41
+ flags[withoutPrefix] = true;
42
+ }
43
+ return {
44
+ command,
45
+ subcommand,
46
+ positional,
47
+ flags
48
+ };
49
+ }
50
+ export function readStringFlag(flags, name) {
51
+ const value = flags[name];
52
+ if (typeof value === 'string') {
53
+ return value;
54
+ }
55
+ return undefined;
56
+ }
57
+ export function readBooleanFlag(flags, name) {
58
+ const value = flags[name];
59
+ if (typeof value === 'boolean') {
60
+ return value;
61
+ }
62
+ return undefined;
63
+ }
64
+ export function readListFlag(flags, name) {
65
+ const value = flags[name];
66
+ if (typeof value === 'string') {
67
+ return value.split(',').map((item) => item.trim()).filter(Boolean);
68
+ }
69
+ if (Array.isArray(value)) {
70
+ return value;
71
+ }
72
+ return undefined;
73
+ }
74
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAEA,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACrE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;AAE1H,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACjD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAAgD,EAAE,CAAC;IAC9D,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACtI,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QAED,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YACtC,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAChD,KAAK,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;YAClD,SAAS;QACX,CAAC;QAED,IAAI,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;YAC5B,SAAS;QACX,CAAC;QAED,IAAI,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,uBAAuB,aAAa,GAAG,CAAC,CAAC;YAC3D,CAAC;YACD,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;YAC5B,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,OAAO;QACP,UAAU;QACV,UAAU;QACV,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAA0B,EAAE,IAAY;IACrE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAA0B,EAAE,IAAY;IACtE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAA0B,EAAE,IAAY;IACnE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { EnvironmentDefinition, EnvironmentId, PatternDefinition, PatternId, ProviderDefinition, ProviderId, RegionDefinition, SpecWorkflowDefinition, SpecWorkflowId } from './types.js';
2
+ export declare const approvedStack: string[];
3
+ export declare const patterns: PatternDefinition[];
4
+ export declare const providers: ProviderDefinition[];
5
+ export declare const azureRegions: RegionDefinition[];
6
+ export declare const environments: EnvironmentDefinition[];
7
+ export declare const specWorkflows: SpecWorkflowDefinition[];
8
+ export declare function getPattern(value: string): PatternDefinition | undefined;
9
+ export declare function getProvider(value: string): ProviderDefinition | undefined;
10
+ export declare function getSpecWorkflow(value: string): SpecWorkflowDefinition | undefined;
11
+ export declare function getEnvironment(value: string): EnvironmentDefinition | undefined;
12
+ export declare function getDefaultRegion(provider: ProviderId): RegionDefinition;
13
+ export declare function listRegions(provider: ProviderId): RegionDefinition[];
14
+ export declare function searchRegions(provider: ProviderId, input: string): RegionDefinition[];
15
+ export type RegionResolution = {
16
+ status: 'resolved';
17
+ region: RegionDefinition;
18
+ } | {
19
+ status: 'ambiguous';
20
+ matches: RegionDefinition[];
21
+ } | {
22
+ status: 'unknown';
23
+ input: string;
24
+ };
25
+ export declare function resolveRegion(provider: ProviderId, input?: string): RegionResolution;
26
+ export declare function isPatternId(value: string): value is PatternId;
27
+ export declare function isProviderId(value: string): value is ProviderId;
28
+ export declare function isEnvironmentId(value: string): value is EnvironmentId;
29
+ export declare function isSpecWorkflowId(value: string): value is SpecWorkflowId;
@@ -0,0 +1,262 @@
1
+ const normalize = (value) => value.toLowerCase().replace(/[^a-z0-9]/g, '');
2
+ export const approvedStack = [
3
+ 'FastAPI',
4
+ 'PydanticAI',
5
+ 'Pydantic settings',
6
+ 'Scalar',
7
+ 'PostgreSQL',
8
+ 'Alembic',
9
+ 'Redis',
10
+ 'Azure Service Bus',
11
+ 'Azure Blob Storage',
12
+ 'Azure Communication Services',
13
+ 'Langfuse',
14
+ 'Docker Compose',
15
+ 'OpenTofu'
16
+ ];
17
+ export const patterns = [
18
+ {
19
+ id: 'rag',
20
+ label: 'RAG (Knowledge Retrieval)',
21
+ aliases: ['rag', 'retrieval', 'knowledge', 'knowledge-retrieval'],
22
+ description: 'Retrieval augmented generation with ingestion, embeddings, pgvector retrieval, and answer synthesis.',
23
+ scaffoldStatus: 'full',
24
+ frontendStarter: 'Retrieval/search interface',
25
+ routePrefix: '/api/rag',
26
+ worker: true
27
+ },
28
+ {
29
+ id: 'chatbot',
30
+ label: 'Chatbot / Conversational AI',
31
+ aliases: ['chatbot', 'chat', 'conversational', 'conversational-ai'],
32
+ description: 'Conversation APIs, message persistence, prompt templates, and PydanticAI chat orchestration.',
33
+ scaffoldStatus: 'full',
34
+ frontendStarter: 'Chat interface',
35
+ routePrefix: '/api/chat',
36
+ worker: false
37
+ },
38
+ {
39
+ id: 'agent',
40
+ label: 'Agent-based (Task Automation)',
41
+ aliases: ['agent', 'agent-based', 'automation', 'task-automation'],
42
+ description: 'Agent orchestration, tool boundaries, task execution routes, and background worker structure.',
43
+ scaffoldStatus: 'full',
44
+ frontendStarter: 'Task run console',
45
+ routePrefix: '/api/agent',
46
+ worker: true
47
+ },
48
+ {
49
+ id: 'prompt',
50
+ label: 'Prompt-based App (Simple LLM)',
51
+ aliases: ['prompt', 'prompt-based', 'simple-llm', 'llm'],
52
+ description: 'Named prompt templates, invocation API, and structured output validation examples.',
53
+ scaffoldStatus: 'full',
54
+ frontendStarter: 'Prompt playground',
55
+ routePrefix: '/api/invoke',
56
+ worker: false
57
+ },
58
+ {
59
+ id: 'multi-agent',
60
+ label: 'Multi-Agent System',
61
+ aliases: ['multi-agent', 'multiagent', 'multi-agent-system'],
62
+ description: 'Supervisor/worker coordination structure, agent roles, shared state boundaries, and run orchestration.',
63
+ scaffoldStatus: 'foundation',
64
+ frontendStarter: 'Agent run console',
65
+ routePrefix: '/api/multi-agent',
66
+ worker: true
67
+ },
68
+ {
69
+ id: 'fine-tuned',
70
+ label: 'Fine-tuned Model App',
71
+ aliases: ['fine-tuned', 'finetuned', 'fine-tune', 'fine-tuning'],
72
+ description: 'Endpoint configuration, invocation API, and evaluation dataset structure for deployed fine-tuned models.',
73
+ scaffoldStatus: 'integration-shell',
74
+ frontendStarter: 'Model invocation playground',
75
+ routePrefix: '/api/fine-tuned',
76
+ worker: false
77
+ },
78
+ {
79
+ id: 'streaming',
80
+ label: 'Real-time / Streaming AI',
81
+ aliases: ['streaming', 'real-time', 'realtime', 'sse', 'websocket'],
82
+ description: 'Streaming response routes and frontend-compatible streaming configuration.',
83
+ scaffoldStatus: 'full',
84
+ frontendStarter: 'Live response interface',
85
+ routePrefix: '/api/stream',
86
+ worker: false
87
+ },
88
+ {
89
+ id: 'workflow',
90
+ label: 'AI Workflow / Pipeline',
91
+ aliases: ['workflow', 'pipeline', 'ai-workflow', 'ai-pipeline'],
92
+ description: 'Pipeline stage structure, run persistence, trigger configuration, and worker structure.',
93
+ scaffoldStatus: 'foundation',
94
+ frontendStarter: 'Workflow run dashboard',
95
+ routePrefix: '/api/workflows',
96
+ worker: true
97
+ }
98
+ ];
99
+ export const providers = [
100
+ {
101
+ id: 'azure',
102
+ label: 'Azure',
103
+ status: 'available',
104
+ description: 'Complete V1 provider with Azure OpenTofu infrastructure.'
105
+ },
106
+ {
107
+ id: 'aws',
108
+ label: 'AWS',
109
+ status: 'planned',
110
+ description: 'Planned provider adapter; not available for V1 generation.'
111
+ },
112
+ {
113
+ id: 'gcp',
114
+ label: 'GCP',
115
+ status: 'planned',
116
+ description: 'Planned provider adapter; not available for V1 generation.'
117
+ }
118
+ ];
119
+ export const azureRegions = [
120
+ {
121
+ provider: 'azure',
122
+ slug: 'eastus',
123
+ displayName: 'East US',
124
+ geography: 'United States',
125
+ aliases: ['east us', 'eastus', 'virginia', 'us east'],
126
+ default: true
127
+ },
128
+ {
129
+ provider: 'azure',
130
+ slug: 'eastus2',
131
+ displayName: 'East US 2',
132
+ geography: 'United States',
133
+ aliases: ['east us 2', 'eastus2', 'us east 2']
134
+ },
135
+ {
136
+ provider: 'azure',
137
+ slug: 'westus2',
138
+ displayName: 'West US 2',
139
+ geography: 'United States',
140
+ aliases: ['west us 2', 'westus2', 'us west 2']
141
+ },
142
+ {
143
+ provider: 'azure',
144
+ slug: 'westeurope',
145
+ displayName: 'West Europe',
146
+ geography: 'Europe',
147
+ aliases: ['west europe', 'westeurope', 'netherlands', 'amsterdam']
148
+ },
149
+ {
150
+ provider: 'azure',
151
+ slug: 'southeastasia',
152
+ displayName: 'Southeast Asia',
153
+ geography: 'Asia Pacific',
154
+ aliases: ['southeast asia', 'southeastasia', 'singapore']
155
+ },
156
+ {
157
+ provider: 'azure',
158
+ slug: 'koreacentral',
159
+ displayName: 'Korea Central',
160
+ geography: 'Korea',
161
+ aliases: ['korea', 'korea central', 'koreacentral', 'seoul']
162
+ },
163
+ {
164
+ provider: 'azure',
165
+ slug: 'koreasouth',
166
+ displayName: 'Korea South',
167
+ geography: 'Korea',
168
+ aliases: ['korea', 'korea south', 'koreasouth', 'busan']
169
+ }
170
+ ];
171
+ export const environments = [
172
+ { id: 'dev', label: 'Development', description: 'Low-cost local and Azure development defaults.' },
173
+ { id: 'test', label: 'Test', description: 'Production-like validation configuration with modest scale.' },
174
+ { id: 'prod', label: 'Production', description: 'Production-oriented settings and stricter security controls.' }
175
+ ];
176
+ export const specWorkflows = [
177
+ {
178
+ id: 'openspec',
179
+ label: 'OpenSpec',
180
+ default: true,
181
+ description: 'Generate OpenSpec config, specs, changes, and a seed bootstrap change.'
182
+ },
183
+ {
184
+ id: 'spec-kit',
185
+ label: 'Spec Kit',
186
+ default: false,
187
+ description: 'Generate Spec Kit constitution and supporting templates.'
188
+ }
189
+ ];
190
+ export function getPattern(value) {
191
+ const normalized = normalize(value);
192
+ return patterns.find((pattern) => normalize(pattern.id) === normalized || pattern.aliases.some((alias) => normalize(alias) === normalized));
193
+ }
194
+ export function getProvider(value) {
195
+ const normalized = normalize(value);
196
+ return providers.find((provider) => normalize(provider.id) === normalized || normalize(provider.label) === normalized);
197
+ }
198
+ export function getSpecWorkflow(value) {
199
+ const normalized = normalize(value);
200
+ return specWorkflows.find((workflow) => normalize(workflow.id) === normalized || normalize(workflow.label) === normalized);
201
+ }
202
+ export function getEnvironment(value) {
203
+ const normalized = normalize(value);
204
+ return environments.find((environment) => normalize(environment.id) === normalized || normalize(environment.label) === normalized);
205
+ }
206
+ export function getDefaultRegion(provider) {
207
+ if (provider !== 'azure') {
208
+ throw new Error(`No default region catalog is available for planned provider ${provider}.`);
209
+ }
210
+ const region = azureRegions.find((candidate) => candidate.default);
211
+ if (!region) {
212
+ throw new Error('Azure region catalog is missing a default region.');
213
+ }
214
+ return region;
215
+ }
216
+ export function listRegions(provider) {
217
+ if (provider === 'azure') {
218
+ return azureRegions;
219
+ }
220
+ return [];
221
+ }
222
+ export function searchRegions(provider, input) {
223
+ const normalized = normalize(input);
224
+ if (!normalized) {
225
+ return listRegions(provider);
226
+ }
227
+ return listRegions(provider).filter((region) => {
228
+ const searchable = [region.slug, region.displayName, region.geography, ...region.aliases].map(normalize);
229
+ return searchable.some((value) => value === normalized || value.includes(normalized));
230
+ });
231
+ }
232
+ export function resolveRegion(provider, input) {
233
+ if (!input || input.trim().length === 0) {
234
+ return { status: 'resolved', region: getDefaultRegion(provider) };
235
+ }
236
+ const normalized = normalize(input);
237
+ const exact = listRegions(provider).find((region) => normalize(region.slug) === normalized);
238
+ if (exact) {
239
+ return { status: 'resolved', region: exact };
240
+ }
241
+ const matches = searchRegions(provider, input);
242
+ if (matches.length === 1) {
243
+ return { status: 'resolved', region: matches[0] };
244
+ }
245
+ if (matches.length > 1) {
246
+ return { status: 'ambiguous', matches };
247
+ }
248
+ return { status: 'unknown', input };
249
+ }
250
+ export function isPatternId(value) {
251
+ return patterns.some((pattern) => pattern.id === value);
252
+ }
253
+ export function isProviderId(value) {
254
+ return providers.some((provider) => provider.id === value);
255
+ }
256
+ export function isEnvironmentId(value) {
257
+ return environments.some((environment) => environment.id === value);
258
+ }
259
+ export function isSpecWorkflowId(value) {
260
+ return specWorkflows.some((workflow) => workflow.id === value);
261
+ }
262
+ //# sourceMappingURL=catalogs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogs.js","sourceRoot":"","sources":["../src/catalogs.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import { parseArgs } from './args.js';
3
+ import { runCommand } from './commands.js';
4
+ const parsed = parseArgs(process.argv.slice(2));
5
+ const exitCode = await runCommand(parsed, {
6
+ cwd: process.cwd(),
7
+ stdout: process.stdout,
8
+ stderr: process.stderr
9
+ });
10
+ process.exitCode = exitCode;
11
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE;IACxC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;IAClB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,MAAM,EAAE,OAAO,CAAC,MAAM;CACvB,CAAC,CAAC;AAEH,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ParsedArgs, ProjectOptions } from './types.js';
2
+ export interface CommandContext {
3
+ cwd: string;
4
+ stdout: NodeJS.WritableStream;
5
+ stderr: NodeJS.WritableStream;
6
+ }
7
+ export declare function runCommand(parsed: ParsedArgs, context: CommandContext): Promise<number>;
8
+ export declare function createFixtureProject(options: ProjectOptions): Promise<string>;