@aerostack/cli 1.5.0 → 1.5.2
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/bin/run.js +0 -0
- package/dist/commands/add.d.ts +21 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +248 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +114 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +13 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +79 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/login.d.ts +12 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +59 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/publish.d.ts +11 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +230 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +9 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +24 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/injector.d.ts +30 -0
- package/dist/lib/injector.d.ts.map +1 -0
- package/dist/lib/injector.js +84 -0
- package/dist/lib/injector.js.map +1 -0
- package/dist/lib/registry.d.ts +81 -0
- package/dist/lib/registry.d.ts.map +1 -0
- package/dist/lib/registry.js +124 -0
- package/dist/lib/registry.js.map +1 -0
- package/package.json +1 -1
package/bin/run.js
CHANGED
|
Binary file
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aerostack add <slug>` — The Game Changer
|
|
3
|
+
*
|
|
4
|
+
* Downloads a community function from the registry and wires it into
|
|
5
|
+
* your project automatically.
|
|
6
|
+
*
|
|
7
|
+
* What it does:
|
|
8
|
+
* 1. Fetches the install manifest from the registry API
|
|
9
|
+
* 2. Places all source files into src/modules/<name>/ or src/lib/<name>/
|
|
10
|
+
* 3. Patches src/index.ts with the import + app.route() call
|
|
11
|
+
* 4. (Optional) Generates a Node.js adapter
|
|
12
|
+
* 5. Prints next steps (drizzle-kit push, env vars to set)
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* npx aerostack add stripe-checkout
|
|
16
|
+
* npx aerostack add alice/stripe-checkout
|
|
17
|
+
* npx aerostack add stripe-checkout --runtime=node
|
|
18
|
+
* npx aerostack add stripe-checkout --registry=http://localhost:8787/api
|
|
19
|
+
*/
|
|
20
|
+
export declare function addCommand(args: string[]): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=add.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAuFH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,iBAmK9C"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aerostack add <slug>` — The Game Changer
|
|
3
|
+
*
|
|
4
|
+
* Downloads a community function from the registry and wires it into
|
|
5
|
+
* your project automatically.
|
|
6
|
+
*
|
|
7
|
+
* What it does:
|
|
8
|
+
* 1. Fetches the install manifest from the registry API
|
|
9
|
+
* 2. Places all source files into src/modules/<name>/ or src/lib/<name>/
|
|
10
|
+
* 3. Patches src/index.ts with the import + app.route() call
|
|
11
|
+
* 4. (Optional) Generates a Node.js adapter
|
|
12
|
+
* 5. Prints next steps (drizzle-kit push, env vars to set)
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* npx aerostack add stripe-checkout
|
|
16
|
+
* npx aerostack add alice/stripe-checkout
|
|
17
|
+
* npx aerostack add stripe-checkout --runtime=node
|
|
18
|
+
* npx aerostack add stripe-checkout --registry=http://localhost:8787/api
|
|
19
|
+
*/
|
|
20
|
+
import chalk from 'chalk';
|
|
21
|
+
import ora from 'ora';
|
|
22
|
+
import { mkdirSync, writeFileSync, existsSync } from 'fs';
|
|
23
|
+
import { join, resolve } from 'path';
|
|
24
|
+
import { execSync } from 'child_process';
|
|
25
|
+
import { fetchInstallManifest, DEFAULT_REGISTRY } from '../lib/registry.js';
|
|
26
|
+
import { injectRoute, injectSchema } from '../lib/injector.js';
|
|
27
|
+
function parseArgs(args) {
|
|
28
|
+
const slug = args.find(a => !a.startsWith('--'));
|
|
29
|
+
const flags = {};
|
|
30
|
+
for (const arg of args) {
|
|
31
|
+
if (arg.startsWith('--')) {
|
|
32
|
+
const [key, val] = arg.slice(2).split('=');
|
|
33
|
+
flags[key] = val || 'true';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return { slug, flags };
|
|
37
|
+
}
|
|
38
|
+
function toPascalCase(str) {
|
|
39
|
+
return str.split(/[-_]/).map(s => s[0]?.toUpperCase() + s.slice(1)).join('');
|
|
40
|
+
}
|
|
41
|
+
function toCamelCase(str) {
|
|
42
|
+
const p = toPascalCase(str);
|
|
43
|
+
return p[0].toLowerCase() + p.slice(1);
|
|
44
|
+
}
|
|
45
|
+
function generateNodeAdapter(manifest, moduleName) {
|
|
46
|
+
const pascal = toPascalCase(moduleName);
|
|
47
|
+
const camel = toCamelCase(moduleName);
|
|
48
|
+
const coreFile = manifest.files.find(f => f.path === 'core.ts');
|
|
49
|
+
const hasSchema = manifest.drizzleSchema;
|
|
50
|
+
// Extract exported function names from core.ts if available
|
|
51
|
+
let coreImports = '// import { yourFunction } from \'./core\';';
|
|
52
|
+
if (coreFile) {
|
|
53
|
+
const exports = Array.from(coreFile.content.matchAll(/^export (?:async )?function (\w+)/gm))
|
|
54
|
+
.map(m => m[1]);
|
|
55
|
+
if (exports.length > 0) {
|
|
56
|
+
coreImports = `import { ${exports.join(', ')} } from './core';`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return `/**
|
|
60
|
+
* ${moduleName}/node-adapter.ts — Node.js / Express Adapter
|
|
61
|
+
*
|
|
62
|
+
* Generated by Aerostack CLI. Do not edit directly.
|
|
63
|
+
*
|
|
64
|
+
* This adapter wraps the platform-agnostic core.ts functions
|
|
65
|
+
* for use in Node.js + Express applications.
|
|
66
|
+
*
|
|
67
|
+
* Usage:
|
|
68
|
+
* import { create${pascal}Router } from './modules/${moduleName}/node-adapter';
|
|
69
|
+
* app.use('/api/${moduleName}', create${pascal}Router(db));
|
|
70
|
+
*/
|
|
71
|
+
import { Router } from 'express';
|
|
72
|
+
${hasSchema ? "import { drizzle } from 'drizzle-orm/node-postgres';" : ''}
|
|
73
|
+
${hasSchema ? "import * as schema from './schema';" : ''}
|
|
74
|
+
${coreImports}
|
|
75
|
+
|
|
76
|
+
export function create${pascal}Router(d1OrPgClient: any) {
|
|
77
|
+
const router = Router();
|
|
78
|
+
${hasSchema ? ` const db = typeof d1OrPgClient?.prepare === 'function'
|
|
79
|
+
? drizzle(d1OrPgClient, { schema }) // SQLite/D1
|
|
80
|
+
: drizzle(d1OrPgClient, { schema }); // PostgreSQL
|
|
81
|
+
` : ''}
|
|
82
|
+
|
|
83
|
+
// TODO: Mount your core function calls here
|
|
84
|
+
// Example:
|
|
85
|
+
// router.get('/', async (req, res) => {
|
|
86
|
+
// const result = await yourFunction({ db }, req.query);
|
|
87
|
+
// res.json(result);
|
|
88
|
+
// });
|
|
89
|
+
|
|
90
|
+
router.get('/health', (_req, res) => res.json({ module: '${moduleName}', ok: true }));
|
|
91
|
+
|
|
92
|
+
return router;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export { create${pascal}Router as ${camel}Router };
|
|
96
|
+
`;
|
|
97
|
+
}
|
|
98
|
+
export async function addCommand(args) {
|
|
99
|
+
const { slug, flags } = parseArgs(args);
|
|
100
|
+
if (!slug) {
|
|
101
|
+
console.error(chalk.red('\n Usage: npx aerostack add <function-name>\n'));
|
|
102
|
+
console.log(chalk.gray(' Example: npx aerostack add stripe-checkout\n'));
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
const registry = flags['registry'] || DEFAULT_REGISTRY;
|
|
106
|
+
const runtime = flags['runtime'] || 'cloudflare'; // 'cloudflare' | 'node'
|
|
107
|
+
const dryRun = flags['dry-run'] === 'true';
|
|
108
|
+
const projectRoot = resolve(process.cwd());
|
|
109
|
+
console.log(`\n${chalk.bold.blue(' ⚡ Aerostack Add')}\n`);
|
|
110
|
+
console.log(` Installing ${chalk.cyan(slug)} from registry...\n`);
|
|
111
|
+
// ─── Step 1: Fetch install manifest ──────────────────────────────────────
|
|
112
|
+
const spinner = ora(`Fetching "${slug}" from registry`).start();
|
|
113
|
+
let manifest;
|
|
114
|
+
try {
|
|
115
|
+
manifest = await fetchInstallManifest(registry, slug);
|
|
116
|
+
spinner.succeed(`Found: ${chalk.bold(manifest.name)} by ${chalk.cyan(manifest.author)} ${chalk.gray(`v${manifest.version}`)}`);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
spinner.fail(err.message);
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
const moduleName = manifest.slug;
|
|
123
|
+
const moduleType = manifest.type || 'feature'; // 'feature' → src/modules/, 'utility' → src/lib/
|
|
124
|
+
const moduleDir = moduleType === 'utility'
|
|
125
|
+
? join(projectRoot, 'src', 'lib', moduleName)
|
|
126
|
+
: join(projectRoot, 'src', 'modules', moduleName);
|
|
127
|
+
// ─── Step 2: Write source files ──────────────────────────────────────────
|
|
128
|
+
const writeSpinner = ora('Writing source files').start();
|
|
129
|
+
try {
|
|
130
|
+
if (!dryRun) {
|
|
131
|
+
mkdirSync(moduleDir, { recursive: true });
|
|
132
|
+
for (const file of manifest.files) {
|
|
133
|
+
const filePath = join(moduleDir, file.path);
|
|
134
|
+
writeFileSync(filePath, file.content, 'utf-8');
|
|
135
|
+
}
|
|
136
|
+
// Write aerostack-manifest.json (for publish command to read later)
|
|
137
|
+
writeFileSync(join(moduleDir, 'aerostack-manifest.json'), JSON.stringify({
|
|
138
|
+
id: manifest.id,
|
|
139
|
+
name: manifest.name,
|
|
140
|
+
slug: manifest.slug,
|
|
141
|
+
author: manifest.author,
|
|
142
|
+
version: manifest.version,
|
|
143
|
+
type: manifest.type,
|
|
144
|
+
routeExport: manifest.routeExport,
|
|
145
|
+
routePath: manifest.routePath,
|
|
146
|
+
drizzleSchema: manifest.drizzleSchema,
|
|
147
|
+
npmDependencies: manifest.npmDependencies || [],
|
|
148
|
+
envVars: manifest.envVars || [],
|
|
149
|
+
installedAt: new Date().toISOString(),
|
|
150
|
+
}, null, 2), 'utf-8');
|
|
151
|
+
// Optionally generate node adapter
|
|
152
|
+
if (runtime === 'node') {
|
|
153
|
+
const nodeAdapterContent = generateNodeAdapter(manifest, moduleName);
|
|
154
|
+
writeFileSync(join(moduleDir, 'node-adapter.ts'), nodeAdapterContent, 'utf-8');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
writeSpinner.succeed(`Files placed in ${chalk.cyan(`src/${moduleType === 'utility' ? 'lib' : 'modules'}/${moduleName}/`)}`);
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
writeSpinner.fail(`Failed to write files: ${err.message}`);
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
// ─── Step 3: Patch src/index.ts ──────────────────────────────────────────
|
|
164
|
+
if (moduleType === 'feature' && manifest.routeExport && manifest.routePath) {
|
|
165
|
+
const injectSpinner = ora('Patching src/index.ts').start();
|
|
166
|
+
const indexPath = join(projectRoot, 'src', 'index.ts');
|
|
167
|
+
const relPath = `./modules/${moduleName}/adapter`;
|
|
168
|
+
const importStmt = `import { ${manifest.routeExport} } from '${relPath}';`;
|
|
169
|
+
const routeStmt = `app.route('${manifest.routePath}', ${manifest.routeExport});`;
|
|
170
|
+
if (!dryRun && existsSync(indexPath)) {
|
|
171
|
+
const result = injectRoute(indexPath, {
|
|
172
|
+
importStatement: importStmt,
|
|
173
|
+
routeStatement: routeStmt,
|
|
174
|
+
});
|
|
175
|
+
if (result.modified) {
|
|
176
|
+
injectSpinner.succeed('src/index.ts patched');
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
injectSpinner.info(`src/index.ts: ${result.reason}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
else if (!existsSync(indexPath)) {
|
|
183
|
+
injectSpinner.warn('src/index.ts not found — add these manually:');
|
|
184
|
+
console.log(chalk.gray(`\n ${importStmt}`));
|
|
185
|
+
console.log(chalk.gray(` ${routeStmt}\n`));
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
injectSpinner.succeed('src/index.ts (dry run — would inject)');
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// ─── Step 4: Patch src/db/schema.ts ──────────────────────────────────────
|
|
192
|
+
if (manifest.drizzleSchema) {
|
|
193
|
+
const schemaPath = join(projectRoot, 'src', 'db', 'schema.ts');
|
|
194
|
+
if (!dryRun && existsSync(schemaPath)) {
|
|
195
|
+
const relPath = `../modules/${moduleName}/schema`;
|
|
196
|
+
injectSchema(schemaPath, {
|
|
197
|
+
importStatement: `import * as ${toCamelCase(moduleName)}Schema from '${relPath}';`,
|
|
198
|
+
exportStatement: `export * from '${relPath}';`,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// ─── Step 5: Install npm dependencies ────────────────────────────────────
|
|
203
|
+
if (manifest.npmDependencies && manifest.npmDependencies.length > 0) {
|
|
204
|
+
const depsSpinner = ora(`Installing npm deps: ${manifest.npmDependencies.join(', ')}`).start();
|
|
205
|
+
if (!dryRun) {
|
|
206
|
+
try {
|
|
207
|
+
execSync(`npm install ${manifest.npmDependencies.join(' ')}`, {
|
|
208
|
+
cwd: projectRoot,
|
|
209
|
+
stdio: 'pipe',
|
|
210
|
+
});
|
|
211
|
+
depsSpinner.succeed(`npm packages installed`);
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
depsSpinner.warn(`npm install failed — run manually: npm install ${manifest.npmDependencies.join(' ')}`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
depsSpinner.succeed('(dry run)');
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// ─── Done ─────────────────────────────────────────────────────────────────
|
|
222
|
+
console.log(`\n${chalk.green(' ✓ Done!')} ${chalk.bold(manifest.name)} is installed.\n`);
|
|
223
|
+
const nextSteps = [];
|
|
224
|
+
if (manifest.drizzleSchema) {
|
|
225
|
+
nextSteps.push(`${chalk.gray('→')} Apply schema: ${chalk.cyan('npx drizzle-kit push')}`);
|
|
226
|
+
}
|
|
227
|
+
if (manifest.envVars && manifest.envVars.length > 0) {
|
|
228
|
+
nextSteps.push(`${chalk.gray('→')} Add to wrangler.toml [vars] or .env:`);
|
|
229
|
+
for (const v of manifest.envVars) {
|
|
230
|
+
nextSteps.push(` ${chalk.yellow(v)}=your_value`);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
if (manifest.routePath) {
|
|
234
|
+
nextSteps.push(`${chalk.gray('→')} Route available at: ${chalk.cyan(manifest.routePath)}`);
|
|
235
|
+
}
|
|
236
|
+
if (runtime === 'node') {
|
|
237
|
+
nextSteps.push(`${chalk.gray('→')} Node adapter: ${chalk.cyan(`src/modules/${moduleName}/node-adapter.ts`)}`);
|
|
238
|
+
}
|
|
239
|
+
if (nextSteps.length > 0) {
|
|
240
|
+
console.log(chalk.bold(' Next steps:'));
|
|
241
|
+
for (const step of nextSteps) {
|
|
242
|
+
console.log(` ${step}`);
|
|
243
|
+
}
|
|
244
|
+
console.log();
|
|
245
|
+
}
|
|
246
|
+
console.log(` ${chalk.gray('View source:')} ${chalk.underline(`https://hub.aerostack.dev/functions/${manifest.author}/${manifest.slug}`)}\n`);
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAyB,MAAM,oBAAoB,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE/D,SAAS,SAAS,CAAC,IAAc;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3C,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC;QAC/B,CAAC;IACL,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC5B,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,mBAAmB,CAAC,QAA0B,EAAE,UAAkB;IACvE,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC;IAEzC,4DAA4D;IAC5D,IAAI,WAAW,GAAG,6CAA6C,CAAC;IAChE,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,qCAAqC,CAAC,CAAC;aACvF,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,WAAW,GAAG,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACpE,CAAC;IACL,CAAC;IAED,OAAO;KACN,UAAU;;;;;;;;sBAQO,MAAM,4BAA4B,UAAU;qBAC7C,UAAU,YAAY,MAAM;;;EAG/C,SAAS,CAAC,CAAC,CAAC,sDAAsD,CAAC,CAAC,CAAC,EAAE;EACvE,SAAS,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,EAAE;EACtD,WAAW;;wBAEW,MAAM;;EAE5B,SAAS,CAAC,CAAC,CAAC;;;CAGb,CAAC,CAAC,CAAC,EAAE;;;;;;;;;+DASyD,UAAU;;;;;iBAKxD,MAAM,aAAa,KAAK;CACxC,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAc;IAC3C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAExC,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,gBAAgB,CAAC;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,CAAC,wBAAwB;IAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC;IAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAEnE,4EAA4E;IAC5E,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,IAAI,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;IAChE,IAAI,QAA0B,CAAC;IAC/B,IAAI,CAAC;QACD,QAAQ,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,OAAO,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACnI,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC;IACjC,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,iDAAiD;IAChG,MAAM,SAAS,GAAG,UAAU,KAAK,SAAS;QACtC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC;QAC7C,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAEtD,4EAA4E;IAC5E,MAAM,YAAY,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IACzD,IAAI,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE1C,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACnD,CAAC;YAED,oEAAoE;YACpE,aAAa,CACT,IAAI,CAAC,SAAS,EAAE,yBAAyB,CAAC,EAC1C,IAAI,CAAC,SAAS,CAAC;gBACX,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,aAAa,EAAE,QAAQ,CAAC,aAAa;gBACrC,eAAe,EAAE,QAAQ,CAAC,eAAe,IAAI,EAAE;gBAC/C,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE;gBAC/B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACxC,EAAE,IAAI,EAAE,CAAC,CAAC,EACX,OAAO,CACV,CAAC;YAEF,mCAAmC;YACnC,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;gBACrB,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBACrE,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;YACnF,CAAC;QACL,CAAC;QACD,YAAY,CAAC,OAAO,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC;IAChI,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAChB,YAAY,CAAC,IAAI,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,4EAA4E;IAC5E,IAAI,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACzE,MAAM,aAAa,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,aAAa,UAAU,UAAU,CAAC;QAClD,MAAM,UAAU,GAAG,YAAY,QAAQ,CAAC,WAAW,YAAY,OAAO,IAAI,CAAC;QAC3E,MAAM,SAAS,GAAG,cAAc,QAAQ,CAAC,SAAS,MAAM,QAAQ,CAAC,WAAW,IAAI,CAAC;QAEjF,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,EAAE;gBAClC,eAAe,EAAE,UAAU;gBAC3B,cAAc,EAAE,SAAS;aAC5B,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAClB,aAAa,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACJ,aAAa,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACzD,CAAC;QACL,CAAC;aAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,aAAa,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,SAAS,IAAI,CAAC,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACJ,aAAa,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC;QACnE,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,cAAc,UAAU,SAAS,CAAC;YAClD,YAAY,CAAC,UAAU,EAAE;gBACrB,eAAe,EAAE,eAAe,WAAW,CAAC,UAAU,CAAC,gBAAgB,OAAO,IAAI;gBAClF,eAAe,EAAE,kBAAkB,OAAO,IAAI;aACjD,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,IAAI,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,MAAM,WAAW,GAAG,GAAG,CAAC,wBAAwB,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/F,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC;gBACD,QAAQ,CAAC,eAAe,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;oBAC1D,GAAG,EAAE,WAAW;oBAChB,KAAK,EAAE,MAAM;iBAChB,CAAC,CAAC;gBACH,WAAW,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACL,WAAW,CAAC,IAAI,CAAC,kDAAkD,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7G,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAE1F,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;QACzB,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QAC1E,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACxD,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACrB,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACrB,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,IAAI,CAAC,eAAe,UAAU,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAClH,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,uCAAuC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;AACnJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aerostack init [directory]`
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds a new Aerostack project with:
|
|
5
|
+
* - Hono framework (Cloudflare Workers)
|
|
6
|
+
* - Drizzle ORM (D1 Database)
|
|
7
|
+
* - Standard module structure (src/modules/, src/lib/, src/db/)
|
|
8
|
+
* - Injection markers so `aerostack add` can auto-wire modules
|
|
9
|
+
*/
|
|
10
|
+
export declare function initCommand(args: string[]): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA4BH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,iBAkG/C"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aerostack init [directory]`
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds a new Aerostack project with:
|
|
5
|
+
* - Hono framework (Cloudflare Workers)
|
|
6
|
+
* - Drizzle ORM (D1 Database)
|
|
7
|
+
* - Standard module structure (src/modules/, src/lib/, src/db/)
|
|
8
|
+
* - Injection markers so `aerostack add` can auto-wire modules
|
|
9
|
+
*/
|
|
10
|
+
import chalk from 'chalk';
|
|
11
|
+
import prompts from 'prompts';
|
|
12
|
+
import ora from 'ora';
|
|
13
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, statSync } from 'fs';
|
|
14
|
+
import { join, resolve, dirname } from 'path';
|
|
15
|
+
import { fileURLToPath } from 'url';
|
|
16
|
+
import { execSync } from 'child_process';
|
|
17
|
+
import { applyTokens } from '../lib/injector.js';
|
|
18
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
19
|
+
const TEMPLATES_DIR = resolve(__dirname, '../../templates');
|
|
20
|
+
function copyDir(src, dest, tokens) {
|
|
21
|
+
mkdirSync(dest, { recursive: true });
|
|
22
|
+
for (const entry of readdirSync(src)) {
|
|
23
|
+
const srcPath = join(src, entry);
|
|
24
|
+
const destPath = join(dest, entry);
|
|
25
|
+
if (statSync(srcPath).isDirectory()) {
|
|
26
|
+
copyDir(srcPath, destPath, tokens);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
const raw = readFileSync(srcPath, 'utf-8');
|
|
30
|
+
writeFileSync(destPath, applyTokens(raw, tokens), 'utf-8');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export async function initCommand(args) {
|
|
35
|
+
console.log(`\n${chalk.bold.blue(' ⚡ Aerostack Init')}\n`);
|
|
36
|
+
let targetDir = args[0] || '.';
|
|
37
|
+
// Prompt for project name
|
|
38
|
+
const { projectName } = await prompts({
|
|
39
|
+
type: 'text',
|
|
40
|
+
name: 'projectName',
|
|
41
|
+
message: 'Project name:',
|
|
42
|
+
initial: targetDir === '.' ? 'my-aerostack-project' : targetDir,
|
|
43
|
+
validate: (v) => v.trim().length > 0 || 'Name is required',
|
|
44
|
+
});
|
|
45
|
+
if (!projectName) {
|
|
46
|
+
console.log(chalk.yellow('\n Aborted.\n'));
|
|
47
|
+
process.exit(0);
|
|
48
|
+
}
|
|
49
|
+
const { confirmInstall } = await prompts({
|
|
50
|
+
type: 'confirm',
|
|
51
|
+
name: 'confirmInstall',
|
|
52
|
+
message: 'Install npm dependencies now?',
|
|
53
|
+
initial: true,
|
|
54
|
+
});
|
|
55
|
+
const resolvedDir = resolve(process.cwd(), targetDir === '.' ? '.' : projectName);
|
|
56
|
+
if (existsSync(resolvedDir) && targetDir !== '.') {
|
|
57
|
+
const { overwrite } = await prompts({
|
|
58
|
+
type: 'confirm',
|
|
59
|
+
name: 'overwrite',
|
|
60
|
+
message: `Directory "${projectName}" already exists. Continue?`,
|
|
61
|
+
initial: false,
|
|
62
|
+
});
|
|
63
|
+
if (!overwrite) {
|
|
64
|
+
console.log(chalk.yellow('\n Aborted.\n'));
|
|
65
|
+
process.exit(0);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const spinner = ora('Creating project files...').start();
|
|
69
|
+
try {
|
|
70
|
+
const tokens = {
|
|
71
|
+
PROJECT_NAME: projectName,
|
|
72
|
+
};
|
|
73
|
+
// Copy all template files with token substitution
|
|
74
|
+
copyDir(TEMPLATES_DIR, resolvedDir, tokens);
|
|
75
|
+
// Create empty module placeholder
|
|
76
|
+
mkdirSync(join(resolvedDir, 'src', 'modules'), { recursive: true });
|
|
77
|
+
mkdirSync(join(resolvedDir, 'src', 'lib'), { recursive: true });
|
|
78
|
+
mkdirSync(join(resolvedDir, 'drizzle'), { recursive: true });
|
|
79
|
+
// Create .env.example
|
|
80
|
+
writeFileSync(join(resolvedDir, '.env.example'), `CLOUDFLARE_ACCOUNT_ID=\nCLOUDFLARE_DATABASE_ID=\nCLOUDFLARE_D1_TOKEN=\n`);
|
|
81
|
+
// Create .gitignore
|
|
82
|
+
writeFileSync(join(resolvedDir, '.gitignore'), `node_modules/\ndist/\n.wrangler/\n.aerostack/\n.env\n`);
|
|
83
|
+
spinner.succeed('Project files created!');
|
|
84
|
+
if (confirmInstall) {
|
|
85
|
+
const installSpinner = ora('Installing dependencies...').start();
|
|
86
|
+
try {
|
|
87
|
+
execSync('npm install', { cwd: resolvedDir, stdio: 'pipe' });
|
|
88
|
+
installSpinner.succeed('Dependencies installed!');
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
installSpinner.warn('npm install failed — run it manually');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
console.log(`
|
|
95
|
+
${chalk.green(' ✓ Project created successfully!')}
|
|
96
|
+
|
|
97
|
+
${chalk.bold(' Next steps:')}
|
|
98
|
+
|
|
99
|
+
${chalk.gray('1.')} ${chalk.cyan(`cd ${targetDir === '.' ? '.' : projectName}`)}
|
|
100
|
+
${chalk.gray('2.')} Set up Cloudflare D1: ${chalk.cyan('npx wrangler d1 create my-db')}
|
|
101
|
+
${chalk.gray('3.')} Update ${chalk.bold('wrangler.toml')} with your database ID
|
|
102
|
+
${chalk.gray('4.')} Push schema: ${chalk.cyan('npx drizzle-kit push')}
|
|
103
|
+
${chalk.gray('5.')} Start dev: ${chalk.cyan('npx wrangler dev')}
|
|
104
|
+
${chalk.gray('6.')} Add functions: ${chalk.cyan('npx aerostack add <function-name>')}
|
|
105
|
+
|
|
106
|
+
${chalk.bold(' Registry:')} ${chalk.underline('https://hub.aerostack.dev')}
|
|
107
|
+
`);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
spinner.fail('Failed to create project');
|
|
111
|
+
throw err;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aerostack list`
|
|
3
|
+
*
|
|
4
|
+
* Browse the community function registry in your terminal.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx aerostack list
|
|
8
|
+
* npx aerostack list --category=payments
|
|
9
|
+
* npx aerostack list --search=stripe
|
|
10
|
+
* npx aerostack list --sort=stars
|
|
11
|
+
*/
|
|
12
|
+
export declare function listCommand(args: string[]): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsCH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,iBAwC/C"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aerostack list`
|
|
3
|
+
*
|
|
4
|
+
* Browse the community function registry in your terminal.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx aerostack list
|
|
8
|
+
* npx aerostack list --category=payments
|
|
9
|
+
* npx aerostack list --search=stripe
|
|
10
|
+
* npx aerostack list --sort=stars
|
|
11
|
+
*/
|
|
12
|
+
import chalk from 'chalk';
|
|
13
|
+
import ora from 'ora';
|
|
14
|
+
import { listFunctions, DEFAULT_REGISTRY } from '../lib/registry.js';
|
|
15
|
+
function parseArgs(args) {
|
|
16
|
+
const flags = {};
|
|
17
|
+
for (const arg of args) {
|
|
18
|
+
if (arg.startsWith('--')) {
|
|
19
|
+
const [key, val] = arg.slice(2).split('=');
|
|
20
|
+
flags[key] = val || 'true';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return flags;
|
|
24
|
+
}
|
|
25
|
+
function truncate(str, max) {
|
|
26
|
+
return str.length > max ? str.slice(0, max - 1) + '…' : str;
|
|
27
|
+
}
|
|
28
|
+
function renderFunction(fn, i) {
|
|
29
|
+
const stars = chalk.yellow(`★ ${fn.star_count}`);
|
|
30
|
+
const clones = chalk.gray(`⬇ ${fn.clone_count}`);
|
|
31
|
+
const category = chalk.blue(`[${fn.category}]`);
|
|
32
|
+
const name = chalk.bold.white(fn.name);
|
|
33
|
+
const author = chalk.gray(`@${fn.author_username}`);
|
|
34
|
+
const desc = chalk.gray(truncate(fn.description || '', 70));
|
|
35
|
+
const install = chalk.cyan(`npx aerostack add ${fn.author_username}/${fn.slug}`);
|
|
36
|
+
return [
|
|
37
|
+
` ${chalk.gray(String(i + 1).padStart(2, ' '))}. ${name} ${author}`,
|
|
38
|
+
` ${category} ${stars} ${clones}`,
|
|
39
|
+
` ${desc}`,
|
|
40
|
+
` ${install}`,
|
|
41
|
+
].join('\n');
|
|
42
|
+
}
|
|
43
|
+
export async function listCommand(args) {
|
|
44
|
+
const flags = parseArgs(args);
|
|
45
|
+
const registry = flags['registry'] || DEFAULT_REGISTRY;
|
|
46
|
+
const opts = {
|
|
47
|
+
category: flags['category'],
|
|
48
|
+
search: flags['search'],
|
|
49
|
+
sort: flags['sort'] || 'stars',
|
|
50
|
+
limit: flags['limit'] ? parseInt(flags['limit']) : 20,
|
|
51
|
+
};
|
|
52
|
+
console.log(`\n${chalk.bold.blue(' ⚡ Aerostack Registry')}`);
|
|
53
|
+
if (opts.search)
|
|
54
|
+
console.log(` ${chalk.gray(`Search: "${opts.search}"`)}`);
|
|
55
|
+
if (opts.category)
|
|
56
|
+
console.log(` ${chalk.gray(`Category: ${opts.category}`)}`);
|
|
57
|
+
console.log();
|
|
58
|
+
const spinner = ora('Fetching functions...').start();
|
|
59
|
+
let functions;
|
|
60
|
+
try {
|
|
61
|
+
functions = await listFunctions(registry, opts);
|
|
62
|
+
spinner.stop();
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
spinner.fail(err.message);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
if (functions.length === 0) {
|
|
69
|
+
console.log(chalk.yellow(' No functions found.\n'));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
console.log(` ${chalk.bold(`${functions.length} functions`)}\n`);
|
|
73
|
+
for (let i = 0; i < functions.length; i++) {
|
|
74
|
+
console.log(renderFunction(functions[i], i));
|
|
75
|
+
console.log();
|
|
76
|
+
}
|
|
77
|
+
console.log(chalk.gray(` Browse more: ${chalk.underline('https://hub.aerostack.dev/functions')}\n`));
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aerostack login`
|
|
3
|
+
*
|
|
4
|
+
* Authenticates with the Aerostack registry and stores the JWT
|
|
5
|
+
* in ~/.aerostack/config.json.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx aerostack login
|
|
9
|
+
* npx aerostack login --registry=https://api.mystack.dev/api
|
|
10
|
+
*/
|
|
11
|
+
export declare function loginCommand(args: string[]): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,iBA8ChD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aerostack login`
|
|
3
|
+
*
|
|
4
|
+
* Authenticates with the Aerostack registry and stores the JWT
|
|
5
|
+
* in ~/.aerostack/config.json.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx aerostack login
|
|
9
|
+
* npx aerostack login --registry=https://api.mystack.dev/api
|
|
10
|
+
*/
|
|
11
|
+
import chalk from 'chalk';
|
|
12
|
+
import prompts from 'prompts';
|
|
13
|
+
import ora from 'ora';
|
|
14
|
+
import { loginToRegistry, DEFAULT_REGISTRY } from '../lib/registry.js';
|
|
15
|
+
import { saveConfig, getConfig } from '../lib/config.js';
|
|
16
|
+
export async function loginCommand(args) {
|
|
17
|
+
const flags = {};
|
|
18
|
+
for (const arg of args) {
|
|
19
|
+
if (arg.startsWith('--')) {
|
|
20
|
+
const [key, val] = arg.slice(2).split('=');
|
|
21
|
+
flags[key] = val || 'true';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const registry = flags['registry'] || DEFAULT_REGISTRY;
|
|
25
|
+
console.log(`\n${chalk.bold.blue(' ⚡ Aerostack Login')}\n`);
|
|
26
|
+
console.log(` Connecting to ${chalk.cyan(registry)}\n`);
|
|
27
|
+
const { email, password } = await prompts([
|
|
28
|
+
{
|
|
29
|
+
type: 'text',
|
|
30
|
+
name: 'email',
|
|
31
|
+
message: 'Email:',
|
|
32
|
+
validate: (v) => v.includes('@') || 'Enter a valid email',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
type: 'password',
|
|
36
|
+
name: 'password',
|
|
37
|
+
message: 'Password:',
|
|
38
|
+
validate: (v) => v.length > 0 || 'Password required',
|
|
39
|
+
},
|
|
40
|
+
]);
|
|
41
|
+
if (!email || !password) {
|
|
42
|
+
console.log(chalk.yellow('\n Aborted.\n'));
|
|
43
|
+
process.exit(0);
|
|
44
|
+
}
|
|
45
|
+
const spinner = ora('Logging in...').start();
|
|
46
|
+
try {
|
|
47
|
+
const token = await loginToRegistry(registry, email, password);
|
|
48
|
+
const existingConfig = getConfig();
|
|
49
|
+
saveConfig({ ...existingConfig, token, email, registry });
|
|
50
|
+
spinner.succeed(`Logged in as ${chalk.cyan(email)}`);
|
|
51
|
+
console.log(chalk.gray(`\n Token saved to ~/.aerostack/config.json\n`));
|
|
52
|
+
console.log(` You can now publish functions: ${chalk.cyan('npx aerostack publish')}\n`);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
spinner.fail(err.message);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC7C,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3C,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC;QAC/B,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,gBAAgB,CAAC;IAEvD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEzD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,OAAO,CAAC;QACtC;YACI,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,qBAAqB;SACpE;QACD;YACI,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,mBAAmB;SAC/D;KACJ,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7C,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,SAAS,EAAE,CAAC;QACnC,UAAU,CAAC,EAAE,GAAG,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,OAAO,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,oCAAoC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC7F,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aerostack publish [module-path]`
|
|
3
|
+
*
|
|
4
|
+
* Reads a local function module and pushes it to the community registry.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx aerostack publish → uses current directory
|
|
8
|
+
* npx aerostack publish ./src/modules/my-fn → specific module
|
|
9
|
+
*/
|
|
10
|
+
export declare function publishCommand(args: string[]): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=publish.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA6EH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,iBAyKlD"}
|