@wix/web50-cli 0.1.1 → 0.1.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/web5.js +1 -2
- package/dist/cjs/auth/deviceFlow.js +90 -17
- package/dist/cjs/auth/deviceFlow.js.map +1 -1
- package/dist/cjs/auth/index.js +40 -10
- package/dist/cjs/auth/index.js.map +1 -1
- package/dist/cjs/cli.js +3 -3
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/commands/bundle.js +12 -4
- package/dist/cjs/commands/bundle.js.map +1 -1
- package/dist/cjs/commands/conversation.js.map +1 -1
- package/dist/cjs/commands/conversationWizard.js +3 -1
- package/dist/cjs/commands/conversationWizard.js.map +1 -1
- package/dist/cjs/commands/deploy.js +55 -10
- package/dist/cjs/commands/deploy.js.map +1 -1
- package/dist/cjs/commands/ecom.js +239 -0
- package/dist/cjs/commands/ecom.js.map +1 -0
- package/dist/cjs/commands/embed.js.map +1 -1
- package/dist/cjs/commands/init.js +34 -3
- package/dist/cjs/commands/init.js.map +1 -1
- package/dist/cjs/commands/instructions.js +147 -51
- package/dist/cjs/commands/instructions.js.map +1 -1
- package/dist/cjs/commands/login.js +8 -4
- package/dist/cjs/commands/login.js.map +1 -1
- package/dist/cjs/commands/serve.js.map +1 -1
- package/dist/cjs/commands/validate.js +368 -16
- package/dist/cjs/commands/validate.js.map +1 -1
- package/dist/cjs/commands/whoami.js.map +1 -1
- package/dist/cjs/templates/aiInstructionsSchema.js +5 -1
- package/dist/cjs/templates/aiInstructionsSchema.js.map +1 -1
- package/dist/cjs/templates/cmsMappingSchema.js +132 -0
- package/dist/cjs/templates/cmsMappingSchema.js.map +1 -0
- package/dist/cjs/utils/project.js +13 -0
- package/dist/cjs/utils/project.js.map +1 -1
- package/dist/cjs/utils/wixApi.js +3 -1
- package/dist/cjs/utils/wixApi.js.map +1 -1
- package/dist/esm/auth/deviceFlow.js +89 -17
- package/dist/esm/auth/deviceFlow.js.map +1 -1
- package/dist/esm/auth/index.js +40 -11
- package/dist/esm/auth/index.js.map +1 -1
- package/dist/esm/cli.js +3 -3
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/commands/bundle.js +12 -4
- package/dist/esm/commands/bundle.js.map +1 -1
- package/dist/esm/commands/conversation.js.map +1 -1
- package/dist/esm/commands/conversationWizard.js +3 -1
- package/dist/esm/commands/conversationWizard.js.map +1 -1
- package/dist/esm/commands/deploy.js +55 -10
- package/dist/esm/commands/deploy.js.map +1 -1
- package/dist/esm/commands/ecom.js +234 -0
- package/dist/esm/commands/ecom.js.map +1 -0
- package/dist/esm/commands/embed.js.map +1 -1
- package/dist/esm/commands/init.js +34 -3
- package/dist/esm/commands/init.js.map +1 -1
- package/dist/esm/commands/instructions.js +152 -53
- package/dist/esm/commands/instructions.js.map +1 -1
- package/dist/esm/commands/login.js +8 -4
- package/dist/esm/commands/login.js.map +1 -1
- package/dist/esm/commands/serve.js.map +1 -1
- package/dist/esm/commands/validate.js +373 -19
- package/dist/esm/commands/validate.js.map +1 -1
- package/dist/esm/commands/whoami.js.map +1 -1
- package/dist/esm/templates/aiInstructionsSchema.js +5 -1
- package/dist/esm/templates/aiInstructionsSchema.js.map +1 -1
- package/dist/esm/templates/cmsMappingSchema.js +128 -0
- package/dist/esm/templates/cmsMappingSchema.js.map +1 -0
- package/dist/esm/utils/project.js +15 -0
- package/dist/esm/utils/project.js.map +1 -1
- package/dist/esm/utils/wixApi.js +4 -2
- package/dist/esm/utils/wixApi.js.map +1 -1
- package/dist/types/auth/deviceFlow.d.ts +1 -1
- package/dist/types/auth/deviceFlow.d.ts.map +1 -1
- package/dist/types/auth/index.d.ts +2 -1
- package/dist/types/auth/index.d.ts.map +1 -1
- package/dist/types/commands/bundle.d.ts.map +1 -1
- package/dist/types/commands/conversation.d.ts.map +1 -1
- package/dist/types/commands/conversationWizard.d.ts.map +1 -1
- package/dist/types/commands/deploy.d.ts.map +1 -1
- package/dist/types/commands/ecom.d.ts +3 -0
- package/dist/types/commands/ecom.d.ts.map +1 -0
- package/dist/types/commands/embed.d.ts.map +1 -1
- package/dist/types/commands/init.d.ts.map +1 -1
- package/dist/types/commands/instructions.d.ts.map +1 -1
- package/dist/types/commands/login.d.ts.map +1 -1
- package/dist/types/commands/serve.d.ts.map +1 -1
- package/dist/types/commands/validate.d.ts +4 -2
- package/dist/types/commands/validate.d.ts.map +1 -1
- package/dist/types/commands/whoami.d.ts.map +1 -1
- package/dist/types/templates/aiInstructionsSchema.d.ts.map +1 -1
- package/dist/types/templates/cmsMappingSchema.d.ts +2 -0
- package/dist/types/templates/cmsMappingSchema.d.ts.map +1 -0
- package/dist/types/utils/project.d.ts +2 -0
- package/dist/types/utils/project.d.ts.map +1 -1
- package/dist/types/utils/wixApi.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/cjs/commands/getClientId.js +0 -60
- package/dist/cjs/commands/getClientId.js.map +0 -1
- package/dist/esm/commands/getClientId.js +0 -56
- package/dist/esm/commands/getClientId.js.map +0 -1
- package/dist/types/commands/getClientId.d.ts +0 -3
- package/dist/types/commands/getClientId.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Command","fs","path","inquirer","chalk","ora","wixRequest","success","error","spinner","BASE","BOX_W","printHeader","title","pad","repeat","Math","max","length","console","log","cyan","bold","printDivider","hints","dim","truncate","text","clean","replace","trim","slice","showInstructionDetail","version","instructions","inst","find","i","clear","activeLabel","active","green","content","choices","name","value","red","action","prompt","type","message","sp","start","method","stop","err_","fail","runInstructionsWizard","process","on","exit","data","body","query","yellow","running","map","activeTag","label","white","Separator","pageSize","result","diffContent","a","b","v1","v2","aLines","split","bLines","out","maxLen","aLine","bLine","push","join","getActiveCmd","description","instruction","listCmd","option","opts","items","filter","format","view","_ref","JSON","stringify","header","padEnd","ver","activateCmd","argument","getCmd","diffCmd","d1","d2","Promise","all","exportCmd","requiredOption","outPath","resolve","output","writeFileSync","rollbackCmd","previous","Number","sort","sp2","wizardCmd","msg","includes","instructionsCommand","outputHelp","addCommand"],"sources":["../../../src/commands/instructions.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { wixRequest } from '../utils/wixApi';\nimport { success, error, spinner } from '../utils/print';\n\nconst BASE = '/web5/instructions/cli';\n\ninterface Instruction {\n id: string;\n revision: string;\n version: string;\n active?: boolean;\n content: string;\n createdDate?: string;\n updatedDate?: string;\n}\n\n// ── Wizard ────────────────────────────────────────────────────────────────\n\nconst BOX_W = 66;\n\nfunction printHeader(title: string): void {\n const pad = ' '.repeat(Math.max(0, BOX_W - title.length - 1));\n console.log(chalk.cyan('╔' + '═'.repeat(BOX_W) + '╗'));\n console.log(`${chalk.cyan('║')} ${chalk.bold(title)}${pad}${chalk.cyan('║')}`);\n console.log(chalk.cyan('╚' + '═'.repeat(BOX_W) + '╝'));\n console.log();\n}\n\nfunction printDivider(hints: string): void {\n console.log(chalk.dim('─'.repeat(BOX_W + 2)));\n console.log(chalk.dim(` ${hints}`));\n console.log();\n}\n\nfunction truncate(text: string, max = 48): string {\n const clean = text.replace(/\\n/g, ' ').trim();\n return clean.length > max ? `${clean.slice(0, max - 1)}…` : clean;\n}\n\n\nasync function showInstructionDetail(\n version: string,\n instructions: Instruction[],\n): Promise<'back' | 'exit' | 'refetch'> {\n const inst = instructions.find((i) => i.version === version);\n if (!inst) return 'back';\n\n console.clear();\n const activeLabel = inst.active ? chalk.green(' (active)') : '';\n printHeader(`📋 AI Instructions ❯ Version ${version}${activeLabel}`);\n\n console.log(chalk.dim(' Content:'));\n console.log(`\\n${inst.content}\\n`);\n\n const choices = [\n { name: ` ${chalk.dim('← Back')}`, value: 'back' },\n ...(!inst.active\n ? [{ name: ` ${chalk.cyan('⚡ Activate this version')}`, value: 'activate' }]\n : []),\n { name: ` ${chalk.red('✕ Exit')}`, value: 'exit' },\n ];\n\n const { action } = await inquirer.prompt<{ action: string }>([\n {\n type: 'list',\n name: 'action',\n message: chalk.bold('What would you like to do?'),\n choices,\n },\n ]);\n\n if (action === 'activate') {\n const sp = ora(`Activating version ${version}…`).start();\n try {\n await wixRequest({ path: `${BASE}/activate/${version}`, method: 'POST' });\n sp.stop();\n console.log(chalk.green(`✔ Version ${version} is now active\\n`));\n } catch (err_) {\n sp.fail('Activation failed');\n console.error(chalk.red((err_ as Error).message));\n }\n return 'refetch';\n }\n\n return action as 'back' | 'exit';\n}\n\nasync function runInstructionsWizard(): Promise<void> {\n process.on('SIGINT', () => {\n console.log(chalk.dim('\\nBye.\\n'));\n process.exit(0);\n });\n\n // Fetch once, keep local copy so activation updates in-memory\n const sp = ora('Fetching instructions…').start();\n let instructions: Instruction[] = [];\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n sp.stop();\n instructions = data.instructions ?? [];\n } catch (err_) {\n sp.fail('Failed to fetch instructions');\n console.error(chalk.red((err_ as Error).message));\n process.exit(1);\n }\n\n if (instructions.length === 0) {\n console.log(chalk.yellow('No instructions found.'));\n process.exit(0);\n }\n\n let running = true;\n while (running) {\n console.clear();\n printHeader(`📋 AI Instructions ${chalk.dim(`${instructions.length} versions`)}`);\n printDivider('[↑↓] Navigate [Enter] Select [Ctrl+C] Quit');\n\n const choices = [\n ...instructions.map((inst) => {\n const activeTag = inst.active\n ? chalk.green(' ✓ active')\n : chalk.dim(' ');\n const label = ` v${inst.version}${activeTag} ${chalk.white(truncate(inst.content))}`;\n return { name: label, value: inst.version };\n }),\n new inquirer.Separator('─'.repeat(BOX_W)),\n { name: ` ${chalk.red('✕ Exit')}`, value: '__exit__' },\n ];\n\n const { version } = await inquirer.prompt<{ version: string }>([\n {\n type: 'list',\n name: 'version',\n message: chalk.bold('Select a version'),\n choices,\n pageSize: 12,\n },\n ]);\n\n if (version === '__exit__') break;\n\n const result = await showInstructionDetail(version, instructions);\n if (result === 'exit') break;\n if (result === 'refetch') {\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n instructions = data.instructions ?? instructions;\n } catch {\n // keep existing data if re-fetch fails\n }\n }\n }\n\n console.clear();\n console.log(chalk.dim('Bye.\\n'));\n process.exit(0);\n}\n\n// ── Diff helper ───────────────────────────────────────────────────────────\n\nfunction diffContent(a: string, b: string, v1: string, v2: string): string {\n const aLines = a.split('\\n');\n const bLines = b.split('\\n');\n const out: string[] = [\n chalk.dim(`--- v${v1}`),\n chalk.dim(`+++ v${v2}`),\n '',\n ];\n\n const maxLen = Math.max(aLines.length, bLines.length);\n for (let i = 0; i < maxLen; i++) {\n const aLine = i < aLines.length ? aLines[i] : null;\n const bLine = i < bLines.length ? bLines[i] : null;\n if (aLine === bLine) {\n out.push(` ${aLine ?? ''}`);\n } else {\n if (aLine !== null) out.push(chalk.red(`- ${aLine}`));\n if (bLine !== null) out.push(chalk.green(`+ ${bLine}`));\n }\n }\n\n return out.join('\\n');\n}\n\n// ── Subcommands ───────────────────────────────────────────────────────────\n\nconst getActiveCmd = new Command('get-active')\n .description('Get the currently active instruction')\n .action(async () => {\n const sp = spinner('Fetching active instruction...');\n try {\n const data = await wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/active`,\n });\n sp.stop();\n const { version, content } = data.instruction;\n console.log(chalk.bold(`Version ${version}`));\n console.log();\n console.log(content);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst listCmd = new Command('list')\n .description('List all instructions')\n .option('--active', 'Show only the currently active instruction')\n .option('--format <format>', 'Output format: table (default) or json', 'table')\n .action(async (opts: { active?: boolean; format?: string }) => {\n const sp = spinner('Fetching instructions...');\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n sp.stop();\n\n let items = data.instructions ?? [];\n if (opts.active) {\n items = items.filter((i) => i.active);\n }\n\n if (opts.format === 'json') {\n const view = items.map(({ version, active, content }) => ({ version, active: active ?? false, content }));\n console.log(JSON.stringify(view, null, 2));\n } else {\n const header = `${'Version'.padEnd(10)}${'Active'.padEnd(10)}Content`;\n console.log(chalk.bold(header));\n console.log('─'.repeat(60));\n for (const i of items) {\n const ver = `v${i.version}`.padEnd(10);\n const active = (i.active ? '✓' : '').padEnd(10);\n const content = truncate(i.content, 40);\n console.log(`${chalk.cyan(ver)}${chalk.green(active)}${content}`);\n }\n }\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst activateCmd = new Command('set-active')\n .description('Set an instruction as active by version number')\n .argument('<version>', 'Version number to activate')\n .action(async (version: string) => {\n const sp = spinner(`Activating instruction version ${version}...`);\n try {\n await wixRequest<{\n instruction: Instruction;\n previousInstruction?: Instruction;\n }>({\n path: `${BASE}/activate/${version}`,\n method: 'POST',\n });\n sp.stop();\n success(`Activated version ${version}`);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst getCmd = new Command('get')\n .description('Get an instruction by version number')\n .argument('<version>', 'Version number')\n .action(async (version: string) => {\n const sp = spinner(`Fetching instruction version ${version}...`);\n try {\n const data = await wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/by-version/${version}`,\n });\n sp.stop();\n const { version: ver, content } = data.instruction;\n console.log(chalk.bold(`Version ${ver}`));\n console.log();\n console.log(content);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst diffCmd = new Command('diff')\n .description('Show line-by-line diff between two instruction versions')\n .argument('<v1>', 'First version number')\n .argument('<v2>', 'Second version number')\n .action(async (v1: string, v2: string) => {\n const sp = spinner(`Fetching versions ${v1} and ${v2}...`);\n try {\n const [d1, d2] = await Promise.all([\n wixRequest<{ instruction: Instruction }>({ path: `${BASE}/by-version/${v1}` }),\n wixRequest<{ instruction: Instruction }>({ path: `${BASE}/by-version/${v2}` }),\n ]);\n sp.stop();\n console.log(diffContent(d1.instruction.content, d2.instruction.content, v1, v2));\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst exportCmd = new Command('export')\n .description('Export an instruction version to a local file')\n .requiredOption('--version <v>', 'Version number to export')\n .requiredOption('--output <file>', 'Output file path')\n .action(async (opts: { version: string; output: string }) => {\n const sp = spinner(`Fetching instruction version ${opts.version}...`);\n try {\n const data = await wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/by-version/${opts.version}`,\n });\n sp.stop();\n const outPath = path.resolve(opts.output);\n fs.writeFileSync(outPath, data.instruction.content, 'utf8');\n success(`Exported version ${opts.version} to ${outPath}`);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst rollbackCmd = new Command('rollback')\n .description('Re-activate the version that was active before the current one')\n .action(async () => {\n const sp = spinner('Fetching instructions...');\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n sp.stop();\n\n const instructions = data.instructions ?? [];\n const active = instructions.find((i) => i.active);\n if (!active) {\n error('No active instruction found — nothing to roll back from.');\n process.exit(1);\n }\n\n const previous = instructions\n .filter((i) => !i.active && Number(i.version) < Number(active!.version))\n .sort((a, b) => Number(b.version) - Number(a.version))[0];\n\n if (!previous) {\n error(`No previous version found before v${active!.version}.`);\n process.exit(1);\n }\n\n const sp2 = spinner(`Rolling back to version ${previous.version}...`);\n await wixRequest({\n path: `${BASE}/activate/${previous.version}`,\n method: 'POST',\n });\n sp2.stop();\n success(`Rolled back to v${previous.version} (was v${active.version})`);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\n// ── Command export ────────────────────────────────────────────────────────\n\nconst wizardCmd = new Command('wizard')\n .description('Open the interactive TUI to browse and activate instruction versions')\n .action(async () => {\n try {\n await runInstructionsWizard();\n } catch (err_) {\n const msg = (err_ as Error).message ?? '';\n if (msg.includes('force closed') || msg.includes('User force')) {\n console.log(chalk.dim('\\nBye.'));\n process.exit(0);\n }\n console.error(chalk.red('Unexpected error: ' + msg));\n process.exit(1);\n }\n });\n\nexport const instructionsCommand = new Command('instructions')\n .description('Manage AI instructions')\n .action(function (this: Command) {\n this.outputHelp();\n })\n .addCommand(wizardCmd)\n .addCommand(getActiveCmd)\n .addCommand(listCmd)\n .addCommand(activateCmd)\n .addCommand(getCmd)\n .addCommand(diffCmd)\n .addCommand(exportCmd)\n .addCommand(rollbackCmd);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Command","fs","path","inquirer","chalk","ora","wixRequest","success","error","spinner","BASE","BOX_W","printHeader","title","pad","repeat","Math","max","length","console","log","cyan","bold","printDivider","hints","dim","truncate","text","clean","replace","trim","slice","printInstructionContent","inst","intents","Object","keys","k","v","entries","semantics","actions","action","desc","description","name","p","params","preview","values","join","optTag","optional","param","content","diffLines","aStr","bStr","aLines","split","bLines","out","maxLen","i","aLine","bLine","push","red","green","formatKV","obj","map","_ref","formatActions","a","header","diffInstructions","b","v1","v2","sections","label","showInstructionDetail","version","instructions","find","clear","activeLabel","active","choices","value","prompt","type","message","sp","start","method","stop","err_","fail","runInstructionsWizard","process","on","exit","data","body","query","yellow","running","activeTag","white","Separator","pageSize","result","getActiveCmd","instruction","listCmd","option","opts","items","filter","format","view","_ref2","JSON","stringify","padEnd","ver","activateCmd","argument","getCmd","diffCmd","d1","d2","Promise","all","exportCmd","requiredOption","outContent","outPath","resolve","output","writeFileSync","rollbackCmd","previous","Number","sort","sp2","wizardCmd","msg","includes","instructionsCommand","outputHelp","addCommand"],"sources":["../../../src/commands/instructions.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { wixRequest } from '../utils/wixApi';\nimport { success, error, spinner } from '../utils/print';\n\nconst BASE = '/web5/instructions/cli';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\ninterface ActionParam {\n param: string;\n values: string[];\n optional?: boolean;\n description?: string;\n}\n\ninterface ActionItem {\n name: string;\n description?: string;\n params: ActionParam[];\n}\n\ninterface Instruction {\n id: string;\n revision: string;\n version: string;\n active?: boolean;\n intents: Record<string, string>;\n semantics: Record<string, string>;\n actions: ActionItem[];\n content: string;\n created_date?: string;\n updated_date?: string;\n}\n\n// ── Display helpers ───────────────────────────────────────────────────────────\n\nconst BOX_W = 66;\n\nfunction printHeader(title: string): void {\n const pad = ' '.repeat(Math.max(0, BOX_W - title.length - 1));\n console.log(chalk.cyan('╔' + '═'.repeat(BOX_W) + '╗'));\n console.log(\n `${chalk.cyan('║')} ${chalk.bold(title)}${pad}${chalk.cyan('║')}`,\n );\n console.log(chalk.cyan('╚' + '═'.repeat(BOX_W) + '╝'));\n console.log();\n}\n\nfunction printDivider(hints: string): void {\n console.log(chalk.dim('─'.repeat(BOX_W + 2)));\n console.log(chalk.dim(` ${hints}`));\n console.log();\n}\n\nfunction truncate(text: string, max = 48): string {\n const clean = (text ?? '').replace(/\\n/g, ' ').trim();\n return clean.length > max ? `${clean.slice(0, max - 1)}…` : clean;\n}\n\nfunction printInstructionContent(inst: Instruction): void {\n // Intents\n console.log(chalk.bold(' Intents'));\n console.log(chalk.dim(' ' + '─'.repeat(40)));\n const intents = inst.intents ?? {};\n if (Object.keys(intents).length === 0) {\n console.log(chalk.dim(' (none)'));\n } else {\n for (const [k, v] of Object.entries(intents)) {\n console.log(` ${chalk.cyan(k)}: ${v}`);\n }\n }\n console.log();\n\n // Semantics\n console.log(chalk.bold(' Semantics'));\n console.log(chalk.dim(' ' + '─'.repeat(40)));\n const semantics = inst.semantics ?? {};\n if (Object.keys(semantics).length === 0) {\n console.log(chalk.dim(' (none)'));\n } else {\n for (const [k, v] of Object.entries(semantics)) {\n console.log(` ${chalk.cyan(k)}: ${v}`);\n }\n }\n console.log();\n\n // Actions\n console.log(chalk.bold(' Actions'));\n console.log(chalk.dim(' ' + '─'.repeat(40)));\n const actions = inst.actions ?? [];\n if (actions.length === 0) {\n console.log(chalk.dim(' (none)'));\n } else {\n for (const action of actions) {\n const desc = action.description\n ? chalk.dim(` — ${action.description}`)\n : '';\n console.log(` ${chalk.cyan('• ' + action.name)}${desc}`);\n for (const p of action.params ?? []) {\n const preview =\n p.values.length > 0\n ? chalk.dim(\n ` [${p.values.slice(0, 3).join(', ')}${\n p.values.length > 3 ? ', …' : ''\n }]`,\n )\n : '';\n const optTag = p.optional ? chalk.dim(' (optional)') : '';\n console.log(` ${p.param}${preview}${optTag}`);\n }\n }\n }\n console.log();\n\n // Free-text instruction\n console.log(chalk.bold(' Instruction'));\n console.log(chalk.dim(' ' + '─'.repeat(40)));\n console.log(` ${inst.content ?? ''}`);\n console.log();\n}\n\n// ── Diff helper ───────────────────────────────────────────────────────────────\n\nfunction diffLines(aStr: string, bStr: string): string {\n const aLines = aStr.split('\\n');\n const bLines = bStr.split('\\n');\n const out: string[] = [];\n const maxLen = Math.max(aLines.length, bLines.length);\n for (let i = 0; i < maxLen; i++) {\n const aLine = i < aLines.length ? aLines[i] : null;\n const bLine = i < bLines.length ? bLines[i] : null;\n if (aLine === bLine) {\n out.push(` ${aLine ?? ''}`);\n } else {\n if (aLine !== null) {\n out.push(chalk.red(`- ${aLine}`));\n }\n if (bLine !== null) {\n out.push(chalk.green(`+ ${bLine}`));\n }\n }\n }\n return out.join('\\n');\n}\n\nfunction formatKV(obj: Record<string, string>): string {\n return Object.entries(obj ?? {})\n .map(([k, v]) => `${k}: ${v}`)\n .join('\\n');\n}\n\nfunction formatActions(actions: ActionItem[]): string {\n return (actions ?? [])\n .map((a) => {\n const params = (a.params ?? [])\n .map((p) => ` ${p.param}: [${p.values.join(', ')}]`)\n .join('\\n');\n const header = a.description ? `${a.name} — ${a.description}` : a.name;\n return params ? `${header}\\n${params}` : header;\n })\n .join('\\n\\n');\n}\n\nfunction diffInstructions(\n a: Instruction,\n b: Instruction,\n v1: string,\n v2: string,\n): string {\n const out: string[] = [chalk.dim(`--- v${v1}`), chalk.dim(`+++ v${v2}`), ''];\n\n const sections: [string, string, string][] = [\n ['Intents', formatKV(a.intents), formatKV(b.intents)],\n ['Semantics', formatKV(a.semantics), formatKV(b.semantics)],\n ['Actions', formatActions(a.actions), formatActions(b.actions)],\n ['Instruction', a.content ?? '', b.content ?? ''],\n ];\n\n for (const [label, aStr, bStr] of sections) {\n out.push(chalk.bold(`── ${label} ──`));\n if (aStr === bStr) {\n out.push(chalk.dim(' (no changes)'));\n } else {\n out.push(diffLines(aStr, bStr));\n }\n out.push('');\n }\n\n return out.join('\\n');\n}\n\n// ── Wizard ────────────────────────────────────────────────────────────────────\n\nasync function showInstructionDetail(\n version: string,\n instructions: Instruction[],\n): Promise<'back' | 'exit' | 'refetch'> {\n const inst = instructions.find((i) => i.version === version);\n if (!inst) {\n return 'back';\n }\n\n console.clear();\n const activeLabel = inst.active ? chalk.green(' (active)') : '';\n printHeader(`📋 AI Instructions ❯ Version ${version}${activeLabel}`);\n\n printInstructionContent(inst);\n\n const choices = [\n { name: ` ${chalk.dim('← Back')}`, value: 'back' },\n ...(!inst.active\n ? [\n {\n name: ` ${chalk.cyan('⚡ Activate this version')}`,\n value: 'activate',\n },\n ]\n : []),\n { name: ` ${chalk.red('✕ Exit')}`, value: 'exit' },\n ];\n\n const { action } = await inquirer.prompt<{ action: string }>([\n {\n type: 'list',\n name: 'action',\n message: chalk.bold('What would you like to do?'),\n choices,\n },\n ]);\n\n if (action === 'activate') {\n const sp = ora(`Activating version ${version}…`).start();\n try {\n await wixRequest({ path: `${BASE}/activate/${version}`, method: 'POST' });\n sp.stop();\n console.log(chalk.green(`✔ Version ${version} is now active\\n`));\n } catch (err_) {\n sp.fail('Activation failed');\n console.error(chalk.red((err_ as Error).message));\n }\n return 'refetch';\n }\n\n return action as 'back' | 'exit';\n}\n\nasync function runInstructionsWizard(): Promise<void> {\n process.on('SIGINT', () => {\n console.log(chalk.dim('\\nBye.\\n'));\n process.exit(0);\n });\n\n const sp = ora('Fetching instructions…').start();\n let instructions: Instruction[] = [];\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n sp.stop();\n instructions = data.instructions ?? [];\n } catch (err_) {\n sp.fail('Failed to fetch instructions');\n console.error(chalk.red((err_ as Error).message));\n process.exit(1);\n }\n\n if (instructions.length === 0) {\n console.log(chalk.yellow('No instructions found.'));\n process.exit(0);\n }\n\n const running = true;\n while (running) {\n console.clear();\n printHeader(\n `📋 AI Instructions ${chalk.dim(`${instructions.length} versions`)}`,\n );\n printDivider('[↑↓] Navigate [Enter] Select [Ctrl+C] Quit');\n\n const choices = [\n ...instructions.map((inst) => {\n const activeTag = inst.active\n ? chalk.green(' ✓ active')\n : chalk.dim(' ');\n const label = ` v${inst.version}${activeTag} ${chalk.white(\n truncate(inst.content),\n )}`;\n return { name: label, value: inst.version };\n }),\n new inquirer.Separator('─'.repeat(BOX_W)),\n { name: ` ${chalk.red('✕ Exit')}`, value: '__exit__' },\n ];\n\n const { version } = await inquirer.prompt<{ version: string }>([\n {\n type: 'list',\n name: 'version',\n message: chalk.bold('Select a version'),\n choices,\n pageSize: 12,\n },\n ]);\n\n if (version === '__exit__') {\n break;\n }\n\n const result = await showInstructionDetail(version, instructions);\n if (result === 'exit') {\n break;\n }\n if (result === 'refetch') {\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n instructions = data.instructions ?? instructions;\n } catch {\n // keep existing data if re-fetch fails\n }\n }\n }\n\n console.clear();\n console.log(chalk.dim('Bye.\\n'));\n process.exit(0);\n}\n\n// ── Subcommands ───────────────────────────────────────────────────────────────\n\nconst getActiveCmd = new Command('get-active')\n .description('Get the currently active instruction')\n .action(async () => {\n const sp = spinner('Fetching active instruction...');\n try {\n const data = await wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/active`,\n });\n sp.stop();\n const inst = data.instruction;\n console.log(chalk.bold(`Version ${inst.version}`));\n console.log();\n printInstructionContent(inst);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst listCmd = new Command('list')\n .description('List all instructions')\n .option('--active', 'Show only the currently active instruction')\n .option(\n '--format <format>',\n 'Output format: table (default) or json',\n 'table',\n )\n .action(async (opts: { active?: boolean; format?: string }) => {\n const sp = spinner('Fetching instructions...');\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n sp.stop();\n\n let items = data.instructions ?? [];\n if (opts.active) {\n items = items.filter((i) => i.active);\n }\n\n if (opts.format === 'json') {\n const view = items.map(\n ({ version, active, intents, semantics, actions, content }) => ({\n version,\n active: active ?? false,\n intents,\n semantics,\n actions,\n content,\n }),\n );\n console.log(JSON.stringify(view, null, 2));\n } else {\n const header = `${'Version'.padEnd(10)}${'Active'.padEnd(\n 10,\n )}Instruction`;\n console.log(chalk.bold(header));\n console.log('─'.repeat(60));\n for (const i of items) {\n const ver = `v${i.version}`.padEnd(10);\n const active = (i.active ? '✓' : '').padEnd(10);\n const preview = truncate(i.content, 40);\n console.log(`${chalk.cyan(ver)}${chalk.green(active)}${preview}`);\n }\n }\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst activateCmd = new Command('set-active')\n .description('Set an instruction as active by version number')\n .argument('<version>', 'Version number to activate')\n .action(async (version: string) => {\n const sp = spinner(`Activating instruction version ${version}...`);\n try {\n await wixRequest<{\n instruction: Instruction;\n previousInstruction?: Instruction;\n }>({\n path: `${BASE}/activate/${version}`,\n method: 'POST',\n });\n sp.stop();\n success(`Activated version ${version}`);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst getCmd = new Command('get')\n .description('Get an instruction by version number')\n .argument('<version>', 'Version number')\n .action(async (version: string) => {\n const sp = spinner(`Fetching instruction version ${version}...`);\n try {\n const data = await wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/by-version/${version}`,\n });\n sp.stop();\n const inst = data.instruction;\n console.log(chalk.bold(`Version ${inst.version}`));\n console.log();\n printInstructionContent(inst);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst diffCmd = new Command('diff')\n .description('Show diff between two instruction versions across all sections')\n .argument('<v1>', 'First version number')\n .argument('<v2>', 'Second version number')\n .action(async (v1: string, v2: string) => {\n const sp = spinner(`Fetching versions ${v1} and ${v2}...`);\n try {\n const [d1, d2] = await Promise.all([\n wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/by-version/${v1}`,\n }),\n wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/by-version/${v2}`,\n }),\n ]);\n sp.stop();\n console.log(diffInstructions(d1.instruction, d2.instruction, v1, v2));\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst exportCmd = new Command('export')\n .description('Export an instruction version to a local file')\n .requiredOption('--version <v>', 'Version number to export')\n .requiredOption('--output <file>', 'Output file path (.json)')\n .action(async (opts: { version: string; output: string }) => {\n const sp = spinner(`Fetching instruction version ${opts.version}...`);\n try {\n const data = await wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/by-version/${opts.version}`,\n });\n sp.stop();\n const inst = data.instruction;\n const outContent = JSON.stringify(\n {\n intents: inst.intents,\n semantics: inst.semantics,\n actions: inst.actions,\n content: inst.content,\n },\n null,\n 2,\n );\n const outPath = path.resolve(opts.output);\n fs.writeFileSync(outPath, outContent, 'utf8');\n success(`Exported version ${opts.version} to ${outPath}`);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst rollbackCmd = new Command('rollback')\n .description('Re-activate the version that was active before the current one')\n .action(async () => {\n const sp = spinner('Fetching instructions...');\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n sp.stop();\n\n const instructions = data.instructions ?? [];\n const active = instructions.find((i) => i.active);\n if (!active) {\n error('No active instruction found — nothing to roll back from.');\n process.exit(1);\n }\n\n const previous = instructions\n .filter((i) => !i.active && Number(i.version) < Number(active!.version))\n .sort((a, b) => Number(b.version) - Number(a.version))[0];\n\n if (!previous) {\n error(`No previous version found before v${active!.version}.`);\n process.exit(1);\n }\n\n const sp2 = spinner(`Rolling back to version ${previous.version}...`);\n await wixRequest({\n path: `${BASE}/activate/${previous.version}`,\n method: 'POST',\n });\n sp2.stop();\n success(`Rolled back to v${previous.version} (was v${active.version})`);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\n// ── Command export ────────────────────────────────────────────────────────────\n\nconst wizardCmd = new Command('wizard')\n .description(\n 'Open the interactive TUI to browse and activate instruction versions',\n )\n .action(async () => {\n try {\n await runInstructionsWizard();\n } catch (err_) {\n const msg = (err_ as Error).message ?? '';\n if (msg.includes('force closed') || msg.includes('User force')) {\n console.log(chalk.dim('\\nBye.'));\n process.exit(0);\n }\n console.error(chalk.red('Unexpected error: ' + msg));\n process.exit(1);\n }\n });\n\nexport const instructionsCommand = new Command('instructions')\n .description('Manage AI instructions')\n .action(function (this: Command) {\n this.outputHelp();\n })\n .addCommand(wizardCmd)\n .addCommand(getActiveCmd)\n .addCommand(listCmd)\n .addCommand(activateCmd)\n .addCommand(getCmd)\n .addCommand(diffCmd)\n .addCommand(exportCmd)\n .addCommand(rollbackCmd);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -34,8 +34,12 @@ const statusCmd = new Command('status').description('Show current authentication
|
|
|
34
34
|
}
|
|
35
35
|
success('Authenticated');
|
|
36
36
|
info(`Method: ${authMethod}`);
|
|
37
|
-
if (siteId)
|
|
38
|
-
|
|
37
|
+
if (siteId) {
|
|
38
|
+
info(`Site ID: ${siteId}`);
|
|
39
|
+
}
|
|
40
|
+
if (expiresAt) {
|
|
41
|
+
info(`Expires: ${expiresAt}${expired ? ' (expired)' : ''}`);
|
|
42
|
+
}
|
|
39
43
|
} catch (err_) {
|
|
40
44
|
error(err_ instanceof Error ? err_.message : String(err_));
|
|
41
45
|
process.exit(1);
|
|
@@ -44,9 +48,9 @@ const statusCmd = new Command('status').description('Show current authentication
|
|
|
44
48
|
|
|
45
49
|
// ── login switch-site ─────────────────────────────────────────────────────────
|
|
46
50
|
|
|
47
|
-
const switchSiteCmd = new Command('switch-site').description('
|
|
51
|
+
const switchSiteCmd = new Command('switch-site').description('Switch to a different web5 site (interactive picker)').action(async () => {
|
|
48
52
|
try {
|
|
49
|
-
await switchSite(
|
|
53
|
+
await switchSite();
|
|
50
54
|
} catch (err_) {
|
|
51
55
|
error(err_ instanceof Error ? err_.message : String(err_));
|
|
52
56
|
process.exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Command","login","switchSite","readCredentials","error","success","info","isJsonMode","statusCmd","description","action","creds","console","log","JSON","stringify","authenticated","authMethod","api_key","siteId","site_id","expiresAt","expires_at","Date","toISOString","expired","now","err_","Error","message","String","process","exit","switchSiteCmd","
|
|
1
|
+
{"version":3,"names":["Command","login","switchSite","readCredentials","error","success","info","isJsonMode","statusCmd","description","action","creds","console","log","JSON","stringify","authenticated","authMethod","api_key","siteId","site_id","expiresAt","expires_at","Date","toISOString","expired","now","err_","Error","message","String","process","exit","switchSiteCmd","loginCommand","option","opts","apiKey","env","WEB5_API_KEY","logs","noBrowser","browser","addCommand"],"sources":["../../../src/commands/login.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { login, switchSite } from '../auth';\nimport { readCredentials } from '../auth/secretStore';\nimport { error, success, info, isJsonMode } from '../utils/print';\n\n// ── login status ──────────────────────────────────────────────────────────────\n\nconst statusCmd = new Command('status')\n .description('Show current authentication status')\n .action(async () => {\n try {\n const creds = await readCredentials();\n if (!creds) {\n if (isJsonMode()) {\n console.log(JSON.stringify({ authenticated: false }));\n } else {\n info('Not authenticated. Run `web5 login` to sign in.');\n }\n return;\n }\n\n const authMethod = creds.api_key ? 'api-key' : 'device-flow';\n const siteId = creds.site_id ?? null;\n const expiresAt = creds.expires_at\n ? new Date(creds.expires_at).toISOString()\n : null;\n const expired = creds.expires_at ? creds.expires_at < Date.now() : false;\n\n if (isJsonMode()) {\n console.log(\n JSON.stringify({\n authenticated: true,\n authMethod,\n siteId,\n expiresAt,\n expired,\n }),\n );\n return;\n }\n\n success('Authenticated');\n info(`Method: ${authMethod}`);\n if (siteId) {\n info(`Site ID: ${siteId}`);\n }\n if (expiresAt) {\n info(`Expires: ${expiresAt}${expired ? ' (expired)' : ''}`);\n }\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n });\n\n// ── login switch-site ─────────────────────────────────────────────────────────\n\nconst switchSiteCmd = new Command('switch-site')\n .description('Switch to a different web5 site (interactive picker)')\n .action(async () => {\n try {\n await switchSite();\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n });\n\n// ── login (root) ──────────────────────────────────────────────────────────────\n\nexport const loginCommand = new Command('login')\n .description('Authenticate with the Web5 platform')\n .option(\n '--api-key <key>',\n 'Authenticate using an API key instead of browser flow',\n )\n .option('--logs', 'Enable verbose debug logging for the auth flow')\n .option(\n '--site-id <msid>',\n 'Site ID (msid) to scope the session to (skips interactive prompt)',\n )\n .option(\n '--no-browser',\n 'Skip opening the browser — print the verification URL instead',\n )\n .action(\n async (opts: {\n apiKey?: string;\n logs?: boolean;\n siteId?: string;\n browser: boolean;\n }) => {\n try {\n const apiKey = process.env.WEB5_API_KEY ?? opts.apiKey;\n await login(apiKey, opts.logs ?? false, {\n siteId: opts.siteId,\n noBrowser: !opts.browser,\n });\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n },\n )\n .addCommand(statusCmd)\n .addCommand(switchSiteCmd);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Command","path","fs","http","spawn","success","error","info","isJsonMode","findProjectRoot","runBundle","DEFAULT_PORT","MIME_TYPES","startServer","distDir","corsOrigin","server","createServer","req","res","setHeader","method","writeHead","end","urlPath","url","filePath","join","startsWith","existsSync","statSync","isDirectory","ext","extname","contentType","createReadStream","pipe","serveCommand","description","option","String","action","opts","projectRoot","process","cwd","exit","port","parseInt","isNaN","bundle","watch","viteBin","watcher","shell","stdio","on","err_","message","listen","files","readdirSync","console","log","JSON","stringify","map","f","file","open","openPkg","default","Error"],"sources":["../../../src/commands/serve.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as http from 'http';\nimport { spawn } from 'child_process';\nimport { success, error, info, isJsonMode } from '../utils/print';\nimport { findProjectRoot } from '../utils/project';\nimport { runBundle } from './bundle';\n\nconst DEFAULT_PORT = 4001;\n\nconst MIME_TYPES: Record<string, string> = {\n '.js': 'application/javascript',\n '.css': 'text/css',\n '.json': 'application/json',\n '.map': 'application/json',\n};\n\nfunction startServer(\n distDir: string,\n corsOrigin: string,\n): http.Server {\n const server = http.createServer((req, res) => {\n res.setHeader('Access-Control-Allow-Origin', corsOrigin);\n res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', '*');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n const urlPath = req.url === '/' ? '' : req.url ?? '';\n const filePath = path.join(distDir, urlPath);\n\n // Prevent path traversal outside distDir\n if (!filePath.startsWith(distDir)) {\n res.writeHead(403);\n res.end('Forbidden');\n return;\n }\n\n if (!fs.existsSync(filePath) || fs.statSync(filePath).isDirectory()) {\n res.writeHead(404);\n res.end('Not found');\n return;\n }\n\n const ext = path.extname(filePath);\n const contentType = MIME_TYPES[ext] ?? 'application/octet-stream';\n res.setHeader('Content-Type', contentType);\n res.writeHead(200);\n fs.createReadStream(filePath).pipe(res);\n });\n\n return server;\n}\n\nexport const serveCommand = new Command('serve')\n .description('Bundle components and serve them on http://localhost:<port> with CORS enabled')\n .option('--port <n>', 'Port to listen on', String(DEFAULT_PORT))\n .option('--no-bundle', 'Serve existing dist/cdn/ without rebuilding')\n .option('--watch', 'Re-bundle on source changes (starts vite --watch alongside server)')\n .option('--open', 'Open the served URL in your browser after start')\n .option('--cors-origin <origin>', 'Restrict CORS Allow-Origin header', '*')\n .action(async (opts: {\n port: string;\n bundle: boolean;\n watch?: boolean;\n open?: boolean;\n corsOrigin: string;\n }) => {\n try {\n const projectRoot = findProjectRoot(process.cwd());\n if (!projectRoot) {\n error(\n 'No web5.config.json found. Run this command from within a Web5 project.',\n );\n process.exit(1);\n }\n\n const port = parseInt(opts.port, 10);\n if (isNaN(port) || port < 1 || port > 65535) {\n error(`Invalid port: ${opts.port}`);\n process.exit(1);\n }\n\n const distDir = path.join(projectRoot, 'dist', 'cdn');\n\n // ── Bundle (unless --no-bundle) ─────────────────────────────────────────\n if (opts.bundle !== false) {\n await runBundle(projectRoot);\n }\n\n if (!fs.existsSync(distDir)) {\n error(\n `Bundle output not found at ${distDir}. Run \\`web5 bundle\\` first or remove --no-bundle.`,\n );\n process.exit(1);\n }\n\n // ── Watch mode: spawn vite --watch in background ────────────────────────\n if (opts.watch) {\n const viteBin = path.join(projectRoot, 'node_modules', '.bin', 'vite');\n if (!fs.existsSync(viteBin)) {\n error('vite not found. Run `npm install` in your project first.');\n process.exit(1);\n }\n const watcher = spawn(\n `\"${viteBin}\"`,\n ['build', '--config', 'src/vite.cdn.config.ts', '--watch'],\n { cwd: projectRoot, shell: true, stdio: 'inherit' },\n );\n watcher.on('error', (err_) => error(`Watch process error: ${err_.message}`));\n }\n\n // ── Start HTTP server ───────────────────────────────────────────────────\n const server = startServer(distDir, opts.corsOrigin);\n const url = `http://localhost:${port}`;\n\n server.listen(port, async () => {\n const files = fs.readdirSync(distDir);\n\n if (isJsonMode()) {\n console.log(JSON.stringify({ url, port, files: files.map((f) => `${url}/${f}`) }));\n } else {\n success(`Serving on ${url}`);\n for (const file of files) {\n info(` ${url}/${file}`);\n }\n if (opts.watch) {\n info('Watch mode active — rebuilds automatically on file changes.');\n }\n info('Press Ctrl+C to stop.');\n }\n\n if (opts.open) {\n const openPkg = (await import('open')).default;\n await openPkg(url);\n }\n });\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n });\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Command","path","fs","http","spawn","success","error","info","isJsonMode","findProjectRoot","runBundle","DEFAULT_PORT","MIME_TYPES","startServer","distDir","corsOrigin","server","createServer","req","res","setHeader","method","writeHead","end","urlPath","url","filePath","join","startsWith","existsSync","statSync","isDirectory","ext","extname","contentType","createReadStream","pipe","serveCommand","description","option","String","action","opts","projectRoot","process","cwd","exit","port","parseInt","isNaN","bundle","watch","viteBin","watcher","shell","stdio","on","err_","message","listen","files","readdirSync","console","log","JSON","stringify","map","f","file","open","openPkg","default","Error"],"sources":["../../../src/commands/serve.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as http from 'http';\nimport { spawn } from 'child_process';\nimport { success, error, info, isJsonMode } from '../utils/print';\nimport { findProjectRoot } from '../utils/project';\nimport { runBundle } from './bundle';\n\nconst DEFAULT_PORT = 4001;\n\nconst MIME_TYPES: Record<string, string> = {\n '.js': 'application/javascript',\n '.css': 'text/css',\n '.json': 'application/json',\n '.map': 'application/json',\n};\n\nfunction startServer(distDir: string, corsOrigin: string): http.Server {\n const server = http.createServer((req, res) => {\n res.setHeader('Access-Control-Allow-Origin', corsOrigin);\n res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', '*');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n const urlPath = req.url === '/' ? '' : req.url ?? '';\n const filePath = path.join(distDir, urlPath);\n\n // Prevent path traversal outside distDir\n if (!filePath.startsWith(distDir)) {\n res.writeHead(403);\n res.end('Forbidden');\n return;\n }\n\n if (!fs.existsSync(filePath) || fs.statSync(filePath).isDirectory()) {\n res.writeHead(404);\n res.end('Not found');\n return;\n }\n\n const ext = path.extname(filePath);\n const contentType = MIME_TYPES[ext] ?? 'application/octet-stream';\n res.setHeader('Content-Type', contentType);\n res.writeHead(200);\n fs.createReadStream(filePath).pipe(res);\n });\n\n return server;\n}\n\nexport const serveCommand = new Command('serve')\n .description(\n 'Bundle components and serve them on http://localhost:<port> with CORS enabled',\n )\n .option('--port <n>', 'Port to listen on', String(DEFAULT_PORT))\n .option('--no-bundle', 'Serve existing dist/cdn/ without rebuilding')\n .option(\n '--watch',\n 'Re-bundle on source changes (starts vite --watch alongside server)',\n )\n .option('--open', 'Open the served URL in your browser after start')\n .option('--cors-origin <origin>', 'Restrict CORS Allow-Origin header', '*')\n .action(\n async (opts: {\n port: string;\n bundle: boolean;\n watch?: boolean;\n open?: boolean;\n corsOrigin: string;\n }) => {\n try {\n const projectRoot = findProjectRoot(process.cwd());\n if (!projectRoot) {\n error(\n 'No web5.config.json found. Run this command from within a Web5 project.',\n );\n process.exit(1);\n }\n\n const port = parseInt(opts.port, 10);\n if (isNaN(port) || port < 1 || port > 65535) {\n error(`Invalid port: ${opts.port}`);\n process.exit(1);\n }\n\n const distDir = path.join(projectRoot, 'dist', 'cdn');\n\n // ── Bundle (unless --no-bundle) ─────────────────────────────────────────\n if (opts.bundle !== false) {\n await runBundle(projectRoot);\n }\n\n if (!fs.existsSync(distDir)) {\n error(\n `Bundle output not found at ${distDir}. Run \\`web5 bundle\\` first or remove --no-bundle.`,\n );\n process.exit(1);\n }\n\n // ── Watch mode: spawn vite --watch in background ────────────────────────\n if (opts.watch) {\n const viteBin = path.join(\n projectRoot,\n 'node_modules',\n '.bin',\n 'vite',\n );\n if (!fs.existsSync(viteBin)) {\n error('vite not found. Run `npm install` in your project first.');\n process.exit(1);\n }\n const watcher = spawn(\n `\"${viteBin}\"`,\n ['build', '--config', 'src/vite.cdn.config.ts', '--watch'],\n { cwd: projectRoot, shell: true, stdio: 'inherit' },\n );\n watcher.on('error', (err_) =>\n error(`Watch process error: ${err_.message}`),\n );\n }\n\n // ── Start HTTP server ───────────────────────────────────────────────────\n const server = startServer(distDir, opts.corsOrigin);\n const url = `http://localhost:${port}`;\n\n server.listen(port, async () => {\n const files = fs.readdirSync(distDir);\n\n if (isJsonMode()) {\n console.log(\n JSON.stringify({\n url,\n port,\n files: files.map((f) => `${url}/${f}`),\n }),\n );\n } else {\n success(`Serving on ${url}`);\n for (const file of files) {\n info(` ${url}/${file}`);\n }\n if (opts.watch) {\n info(\n 'Watch mode active — rebuilds automatically on file changes.',\n );\n }\n info('Press Ctrl+C to stop.');\n }\n\n if (opts.open) {\n const openPkg = (await import('open')).default;\n await openPkg(url);\n }\n });\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n },\n );\n"],"mappings":"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","ignoreList":[]}
|