@pyreon/zero-cli 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/package.json +5 -5
package/lib/index.js
CHANGED
|
@@ -150,8 +150,8 @@ async function dev(root, options) {
|
|
|
150
150
|
root: projectRoot,
|
|
151
151
|
server: {
|
|
152
152
|
port: options.port ?? 3e3,
|
|
153
|
-
host: options.host === true ? "0.0.0.0" : options.host,
|
|
154
|
-
open: options.open
|
|
153
|
+
host: options.host === true ? "0.0.0.0" : options.host || false,
|
|
154
|
+
...options.open != null ? { open: options.open } : {}
|
|
155
155
|
}
|
|
156
156
|
});
|
|
157
157
|
await server.listen();
|
|
@@ -216,7 +216,7 @@ async function preview$1(root, options) {
|
|
|
216
216
|
root: resolve(root ?? "."),
|
|
217
217
|
preview: {
|
|
218
218
|
port: options.port ?? 3e3,
|
|
219
|
-
host: options.host === true ? "0.0.0.0" : options.host
|
|
219
|
+
host: options.host === true ? "0.0.0.0" : options.host || false
|
|
220
220
|
}
|
|
221
221
|
})).printUrls();
|
|
222
222
|
} catch (error) {
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["build","viteBuild","preview","vitePreview","build","preview"],"sources":["../src/commands/build.ts","../src/commands/context.ts","../src/commands/create.ts","../src/commands/dev.ts","../src/commands/doctor.ts","../src/commands/preview.ts","../src/index.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { join, resolve } from 'node:path'\nimport { build as viteBuild } from 'vite'\n\nexport interface BuildOptions {\n mode?: string\n}\n\n/** Extract zero plugin config from a Vite config file. */\nasync function loadZeroConfig(\n configPath: string,\n): Promise<Record<string, unknown> | undefined> {\n try {\n const { loadConfigFromFile } = await import('vite')\n const loaded = await loadConfigFromFile(\n { command: 'build', mode: 'production' },\n configPath,\n )\n if (!loaded) return undefined\n\n const plugins = (loaded.config.plugins ?? []) as Array<{\n name?: string\n _zeroConfig?: Record<string, unknown>\n }>\n const zeroPlugin = plugins.find(\n (p) =>\n p && typeof p === 'object' && 'name' in p && p.name === 'pyreon-zero',\n )\n if (zeroPlugin && '_zeroConfig' in zeroPlugin) {\n return zeroPlugin._zeroConfig as Record<string, unknown>\n }\n } catch {\n // Config loading is optional — fall back to defaults\n }\n return undefined\n}\n\n/** Run SSG prerendering pass if configured. */\nasync function prerenderIfNeeded(\n projectRoot: string,\n zeroConfig: Record<string, unknown> | undefined,\n) {\n const serverEntry = join(projectRoot, 'dist/server/entry-server.js')\n if (!existsSync(serverEntry)) return\n\n try {\n const { prerender } = await import('@pyreon/server')\n const serverModule = await import(serverEntry)\n\n const paths = await resolveSsgPaths(zeroConfig)\n const result = await prerender({\n handler: serverModule.default,\n paths,\n outDir: join(projectRoot, 'dist/client'),\n })\n\n for (const err of result.errors) {\n console.warn('Prerender error:', err)\n }\n } catch {\n // Prerender is best-effort — build continues without it\n }\n}\n\n/** Resolve SSG paths from config (static array or async function). */\nasync function resolveSsgPaths(\n zeroConfig: Record<string, unknown> | undefined,\n): Promise<string[]> {\n const ssgConfig = zeroConfig?.ssg as\n | { paths?: string[] | (() => string[] | Promise<string[]>) }\n | undefined\n if (!ssgConfig?.paths) return ['/']\n return typeof ssgConfig.paths === 'function'\n ? await ssgConfig.paths()\n : ssgConfig.paths\n}\n\n/** Run the deploy adapter build step. */\nasync function runAdapter(\n projectRoot: string,\n zeroConfig: Record<string, unknown>,\n) {\n try {\n const { resolveAdapter } = await import('@pyreon/zero')\n const adapter = resolveAdapter(zeroConfig)\n await adapter.build({\n serverEntry: join(projectRoot, 'dist/server/entry-server.js'),\n clientOutDir: join(projectRoot, 'dist/client'),\n outDir: join(projectRoot, 'dist/output'),\n config: zeroConfig,\n })\n } catch {\n // Adapter build is optional — output may not need it\n }\n}\n\nexport async function build(root: string | undefined, options: BuildOptions) {\n try {\n await runBuild(root, options)\n } catch (error) {\n console.error('Build failed:', (error as Error).message)\n process.exit(1)\n }\n}\n\nasync function runBuild(root: string | undefined, options: BuildOptions) {\n const projectRoot = resolve(root ?? '.')\n const start = performance.now()\n\n // Client build\n await viteBuild({\n root: projectRoot,\n build: { outDir: 'dist/client', ssrManifest: true },\n })\n\n // Server build\n await viteBuild({\n root: projectRoot,\n build: {\n outDir: 'dist/server',\n ssr: 'src/entry-server.ts',\n rollupOptions: { input: 'src/entry-server.ts' },\n },\n })\n\n const configPath = join(projectRoot, 'vite.config.ts')\n const zeroConfig = await loadZeroConfig(configPath)\n const renderMode = (zeroConfig?.mode as string) ?? options.mode ?? 'ssr'\n\n if (renderMode === 'ssg' || renderMode === 'isr') {\n await prerenderIfNeeded(projectRoot, zeroConfig)\n }\n\n await runAdapter(projectRoot, zeroConfig ?? {})\n\n const elapsed = Math.round(performance.now() - start)\n console.log(`Build completed in ${elapsed}ms`)\n}\n","import { resolve } from 'node:path'\n\nexport interface ContextOptions {\n out?: string\n}\n\nexport async function context(\n root: string | undefined,\n options: ContextOptions,\n) {\n try {\n const { generateContext } = await import('@pyreon/cli')\n const cwd = resolve(root ?? '.')\n await generateContext({\n cwd,\n outPath: options.out,\n })\n } catch (error) {\n console.error('Context generation failed:', (error as Error).message)\n process.exit(1)\n }\n}\n","import { existsSync } from 'node:fs'\nimport { cp, readFile, writeFile } from 'node:fs/promises'\nimport { basename, join, resolve } from 'node:path'\n\nexport async function create(name: string | undefined) {\n if (!name) {\n console.error('Usage: zero create <project-name>')\n process.exit(1)\n }\n\n const targetDir = resolve(process.cwd(), name)\n\n if (existsSync(targetDir)) {\n console.error(`Directory \"${name}\" already exists.`)\n process.exit(1)\n }\n\n try {\n // Resolve template directory relative to this package\n const templateDir = resolve(\n import.meta.dirname,\n '../../node_modules/@pyreon/create-zero/templates/default',\n )\n\n // Fallback: try workspace resolution\n let sourceDir = templateDir\n if (!existsSync(sourceDir)) {\n const altDir = resolve(\n import.meta.dirname,\n '../../../create-zero/templates/default',\n )\n if (existsSync(altDir)) {\n sourceDir = altDir\n } else {\n console.error(\n 'Template not found. Install @pyreon/create-zero or use: bun create @pyreon/zero',\n )\n process.exit(1)\n }\n }\n\n // Copy template\n await cp(sourceDir, targetDir, { recursive: true })\n\n // Update package.json with project name\n const pkgPath = join(targetDir, 'package.json')\n const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'))\n pkg.name = basename(name)\n await writeFile(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`)\n\n // Create .gitignore (npm strips .gitignore from packages)\n await writeFile(\n join(targetDir, '.gitignore'),\n 'node_modules\\ndist\\n.DS_Store\\n*.local\\n',\n )\n\n console.log(`\\nCreated \"${name}\"!\\n`)\n console.log('Next steps:')\n console.log(` cd ${name}`)\n console.log(' bun install')\n console.log(' bun run dev')\n console.log('')\n } catch (error) {\n console.error('Failed to create project:', (error as Error).message)\n process.exit(1)\n }\n}\n","import { existsSync } from 'node:fs'\nimport { join, resolve } from 'node:path'\nimport { createServer } from 'vite'\n\nexport interface DevOptions {\n port?: number\n host?: string | boolean\n open?: boolean\n}\n\nexport async function dev(root: string | undefined, options: DevOptions) {\n try {\n const projectRoot = resolve(root ?? '.')\n\n const server = await createServer({\n root: projectRoot,\n server: {\n port: options.port ?? 3000,\n host: options.host === true ? '0.0.0.0' : options.host,\n open: options.open,\n },\n })\n\n await server.listen()\n server.printUrls()\n\n // Print route table after server starts\n await printRouteTable(projectRoot)\n } catch (error) {\n console.error('Failed to start dev server:', (error as Error).message)\n process.exit(1)\n }\n}\n\nasync function printRouteTable(projectRoot: string) {\n try {\n const routesDir = join(projectRoot, 'src/routes')\n if (!existsSync(routesDir)) return\n\n const { scanRouteFiles, parseFileRoutes } = await import('@pyreon/zero')\n const { isApiRoute, apiFilePathToPattern } = await import(\n '@pyreon/zero/api-routes'\n )\n\n const files = await scanRouteFiles(routesDir)\n const pageRoutes = parseFileRoutes(files).filter(\n (r) => !r.isLayout && !r.isError && !r.isLoading && !isApiRoute(r.filePath),\n )\n const apiFiles = files.filter(isApiRoute)\n\n if (pageRoutes.length === 0 && apiFiles.length === 0) return\n\n console.log('')\n console.log(' \\x1b[36m Routes\\x1b[0m')\n console.log('')\n\n for (const route of pageRoutes) {\n const mode = route.renderMode.toUpperCase()\n console.log(\n ` \\x1b[2m${mode.padEnd(4)}\\x1b[0m ${route.urlPath}`,\n )\n }\n\n if (apiFiles.length > 0) {\n console.log('')\n console.log(' \\x1b[33m API Routes\\x1b[0m')\n console.log('')\n for (const file of apiFiles) {\n console.log(` \\x1b[2mAPI \\x1b[0m ${apiFilePathToPattern(file)}`)\n }\n }\n\n console.log('')\n } catch {\n // Route table is informational — don't fail dev server\n }\n}\n","import { resolve } from 'node:path'\n\nexport interface DoctorOptions {\n fix?: boolean\n json?: boolean\n ci?: boolean\n}\n\nexport async function doctor(\n root: string | undefined,\n options: DoctorOptions,\n) {\n try {\n const { doctor: runDoctor } = await import('@pyreon/cli')\n const cwd = resolve(root ?? '.')\n const errorCount = await runDoctor({\n fix: options.fix ?? false,\n json: options.json ?? false,\n ci: options.ci ?? false,\n cwd,\n })\n if (options.ci && errorCount > 0) {\n process.exit(1)\n }\n } catch (error) {\n console.error('Doctor failed:', (error as Error).message)\n process.exit(1)\n }\n}\n","import { resolve } from 'node:path'\nimport { preview as vitePreview } from 'vite'\n\nexport interface PreviewOptions {\n port?: number\n host?: string | boolean\n}\n\nexport async function preview(\n root: string | undefined,\n options: PreviewOptions,\n) {\n try {\n const projectRoot = resolve(root ?? '.')\n\n const server = await vitePreview({\n root: projectRoot,\n preview: {\n port: options.port ?? 3000,\n host: options.host === true ? '0.0.0.0' : options.host,\n },\n })\n\n server.printUrls()\n } catch (error) {\n console.error('Failed to start preview server:', (error as Error).message)\n process.exit(1)\n }\n}\n","import cac from 'cac'\nimport { build } from './commands/build'\nimport { context } from './commands/context'\nimport { create } from './commands/create'\nimport { dev } from './commands/dev'\nimport { doctor } from './commands/doctor'\nimport { preview } from './commands/preview'\n\nconst cli = cac('zero')\n\ncli\n .command('[root]', 'Start dev server')\n .alias('dev')\n .option('--port <port>', 'Server port', { default: 3000 })\n .option('--host [host]', 'Server host')\n .option('--open', 'Open browser on start')\n .action(dev)\n\ncli\n .command('build [root]', 'Build for production')\n .option('--mode <mode>', 'Rendering mode override')\n .action(build)\n\ncli\n .command('preview [root]', 'Preview production build')\n .option('--port <port>', 'Server port', { default: 3000 })\n .option('--host [host]', 'Server host')\n .action(preview)\n\ncli\n .command('doctor [root]', 'Check for React patterns and framework issues')\n .option('--fix', 'Auto-fix fixable issues')\n .option('--json', 'Output as JSON')\n .option('--ci', 'CI mode — exit with code 1 on errors')\n .action(doctor)\n\ncli\n .command('context [root]', 'Generate project context for AI tools')\n .option('--out <path>', 'Output path (default: .pyreon/context.json)')\n .action(context)\n\ncli\n .command('create <name>', 'Scaffold a new Pyreon Zero project')\n .action(create)\n\ncli.help()\ncli.version('0.0.1')\ncli.parse()\n"],"mappings":";;;;;;;;AASA,eAAe,eACb,YAC8C;AAC9C,KAAI;EACF,MAAM,EAAE,uBAAuB,MAAM,OAAO;EAC5C,MAAM,SAAS,MAAM,mBACnB;GAAE,SAAS;GAAS,MAAM;GAAc,EACxC,WACD;AACD,MAAI,CAAC,OAAQ,QAAO;EAMpB,MAAM,cAJW,OAAO,OAAO,WAAW,EAAE,EAIjB,MACxB,MACC,KAAK,OAAO,MAAM,YAAY,UAAU,KAAK,EAAE,SAAS,cAC3D;AACD,MAAI,cAAc,iBAAiB,WACjC,QAAO,WAAW;SAEd;;;AAOV,eAAe,kBACb,aACA,YACA;CACA,MAAM,cAAc,KAAK,aAAa,8BAA8B;AACpE,KAAI,CAAC,WAAW,YAAY,CAAE;AAE9B,KAAI;EACF,MAAM,EAAE,cAAc,MAAM,OAAO;EACnC,MAAM,eAAe,MAAM,OAAO;EAElC,MAAM,QAAQ,MAAM,gBAAgB,WAAW;EAC/C,MAAM,SAAS,MAAM,UAAU;GAC7B,SAAS,aAAa;GACtB;GACA,QAAQ,KAAK,aAAa,cAAc;GACzC,CAAC;AAEF,OAAK,MAAM,OAAO,OAAO,OACvB,SAAQ,KAAK,oBAAoB,IAAI;SAEjC;;;AAMV,eAAe,gBACb,YACmB;CACnB,MAAM,YAAY,YAAY;AAG9B,KAAI,CAAC,WAAW,MAAO,QAAO,CAAC,IAAI;AACnC,QAAO,OAAO,UAAU,UAAU,aAC9B,MAAM,UAAU,OAAO,GACvB,UAAU;;;AAIhB,eAAe,WACb,aACA,YACA;AACA,KAAI;EACF,MAAM,EAAE,mBAAmB,MAAM,OAAO;AAExC,QADgB,eAAe,WAAW,CAC5B,MAAM;GAClB,aAAa,KAAK,aAAa,8BAA8B;GAC7D,cAAc,KAAK,aAAa,cAAc;GAC9C,QAAQ,KAAK,aAAa,cAAc;GACxC,QAAQ;GACT,CAAC;SACI;;AAKV,eAAsBA,QAAM,MAA0B,SAAuB;AAC3E,KAAI;AACF,QAAM,SAAS,MAAM,QAAQ;UACtB,OAAO;AACd,UAAQ,MAAM,iBAAkB,MAAgB,QAAQ;AACxD,UAAQ,KAAK,EAAE;;;AAInB,eAAe,SAAS,MAA0B,SAAuB;CACvE,MAAM,cAAc,QAAQ,QAAQ,IAAI;CACxC,MAAM,QAAQ,YAAY,KAAK;AAG/B,OAAMC,MAAU;EACd,MAAM;EACN,OAAO;GAAE,QAAQ;GAAe,aAAa;GAAM;EACpD,CAAC;AAGF,OAAMA,MAAU;EACd,MAAM;EACN,OAAO;GACL,QAAQ;GACR,KAAK;GACL,eAAe,EAAE,OAAO,uBAAuB;GAChD;EACF,CAAC;CAGF,MAAM,aAAa,MAAM,eADN,KAAK,aAAa,iBAAiB,CACH;CACnD,MAAM,aAAc,YAAY,QAAmB,QAAQ,QAAQ;AAEnE,KAAI,eAAe,SAAS,eAAe,MACzC,OAAM,kBAAkB,aAAa,WAAW;AAGlD,OAAM,WAAW,aAAa,cAAc,EAAE,CAAC;CAE/C,MAAM,UAAU,KAAK,MAAM,YAAY,KAAK,GAAG,MAAM;AACrD,SAAQ,IAAI,sBAAsB,QAAQ,IAAI;;;;;AClIhD,eAAsB,QACpB,MACA,SACA;AACA,KAAI;EACF,MAAM,EAAE,oBAAoB,MAAM,OAAO;AAEzC,QAAM,gBAAgB;GACpB,KAFU,QAAQ,QAAQ,IAAI;GAG9B,SAAS,QAAQ;GAClB,CAAC;UACK,OAAO;AACd,UAAQ,MAAM,8BAA+B,MAAgB,QAAQ;AACrE,UAAQ,KAAK,EAAE;;;;;;ACfnB,eAAsB,OAAO,MAA0B;AACrD,KAAI,CAAC,MAAM;AACT,UAAQ,MAAM,oCAAoC;AAClD,UAAQ,KAAK,EAAE;;CAGjB,MAAM,YAAY,QAAQ,QAAQ,KAAK,EAAE,KAAK;AAE9C,KAAI,WAAW,UAAU,EAAE;AACzB,UAAQ,MAAM,cAAc,KAAK,mBAAmB;AACpD,UAAQ,KAAK,EAAE;;AAGjB,KAAI;EAQF,IAAI,YANgB,QAClB,OAAO,KAAK,SACZ,2DACD;AAID,MAAI,CAAC,WAAW,UAAU,EAAE;GAC1B,MAAM,SAAS,QACb,OAAO,KAAK,SACZ,yCACD;AACD,OAAI,WAAW,OAAO,CACpB,aAAY;QACP;AACL,YAAQ,MACN,kFACD;AACD,YAAQ,KAAK,EAAE;;;AAKnB,QAAM,GAAG,WAAW,WAAW,EAAE,WAAW,MAAM,CAAC;EAGnD,MAAM,UAAU,KAAK,WAAW,eAAe;EAC/C,MAAM,MAAM,KAAK,MAAM,MAAM,SAAS,SAAS,QAAQ,CAAC;AACxD,MAAI,OAAO,SAAS,KAAK;AACzB,QAAM,UAAU,SAAS,GAAG,KAAK,UAAU,KAAK,MAAM,EAAE,CAAC,IAAI;AAG7D,QAAM,UACJ,KAAK,WAAW,aAAa,EAC7B,2CACD;AAED,UAAQ,IAAI,cAAc,KAAK,MAAM;AACrC,UAAQ,IAAI,cAAc;AAC1B,UAAQ,IAAI,QAAQ,OAAO;AAC3B,UAAQ,IAAI,gBAAgB;AAC5B,UAAQ,IAAI,gBAAgB;AAC5B,UAAQ,IAAI,GAAG;UACR,OAAO;AACd,UAAQ,MAAM,6BAA8B,MAAgB,QAAQ;AACpE,UAAQ,KAAK,EAAE;;;;;;ACtDnB,eAAsB,IAAI,MAA0B,SAAqB;AACvE,KAAI;EACF,MAAM,cAAc,QAAQ,QAAQ,IAAI;EAExC,MAAM,SAAS,MAAM,aAAa;GAChC,MAAM;GACN,QAAQ;IACN,MAAM,QAAQ,QAAQ;IACtB,MAAM,QAAQ,SAAS,OAAO,YAAY,QAAQ;IAClD,MAAM,QAAQ;IACf;GACF,CAAC;AAEF,QAAM,OAAO,QAAQ;AACrB,SAAO,WAAW;AAGlB,QAAM,gBAAgB,YAAY;UAC3B,OAAO;AACd,UAAQ,MAAM,+BAAgC,MAAgB,QAAQ;AACtE,UAAQ,KAAK,EAAE;;;AAInB,eAAe,gBAAgB,aAAqB;AAClD,KAAI;EACF,MAAM,YAAY,KAAK,aAAa,aAAa;AACjD,MAAI,CAAC,WAAW,UAAU,CAAE;EAE5B,MAAM,EAAE,gBAAgB,oBAAoB,MAAM,OAAO;EACzD,MAAM,EAAE,YAAY,yBAAyB,MAAM,OACjD;EAGF,MAAM,QAAQ,MAAM,eAAe,UAAU;EAC7C,MAAM,aAAa,gBAAgB,MAAM,CAAC,QACvC,MAAM,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,aAAa,CAAC,WAAW,EAAE,SAAS,CAC5E;EACD,MAAM,WAAW,MAAM,OAAO,WAAW;AAEzC,MAAI,WAAW,WAAW,KAAK,SAAS,WAAW,EAAG;AAEtD,UAAQ,IAAI,GAAG;AACf,UAAQ,IAAI,2BAA2B;AACvC,UAAQ,IAAI,GAAG;AAEf,OAAK,MAAM,SAAS,YAAY;GAC9B,MAAM,OAAO,MAAM,WAAW,aAAa;AAC3C,WAAQ,IACN,YAAY,KAAK,OAAO,EAAE,CAAC,UAAU,MAAM,UAC5C;;AAGH,MAAI,SAAS,SAAS,GAAG;AACvB,WAAQ,IAAI,GAAG;AACf,WAAQ,IAAI,+BAA+B;AAC3C,WAAQ,IAAI,GAAG;AACf,QAAK,MAAM,QAAQ,SACjB,SAAQ,IAAI,wBAAwB,qBAAqB,KAAK,GAAG;;AAIrE,UAAQ,IAAI,GAAG;SACT;;;;;ACjEV,eAAsB,OACpB,MACA,SACA;AACA,KAAI;EACF,MAAM,EAAE,QAAQ,cAAc,MAAM,OAAO;EAC3C,MAAM,MAAM,QAAQ,QAAQ,IAAI;EAChC,MAAM,aAAa,MAAM,UAAU;GACjC,KAAK,QAAQ,OAAO;GACpB,MAAM,QAAQ,QAAQ;GACtB,IAAI,QAAQ,MAAM;GAClB;GACD,CAAC;AACF,MAAI,QAAQ,MAAM,aAAa,EAC7B,SAAQ,KAAK,EAAE;UAEV,OAAO;AACd,UAAQ,MAAM,kBAAmB,MAAgB,QAAQ;AACzD,UAAQ,KAAK,EAAE;;;;;;AClBnB,eAAsBC,UACpB,MACA,SACA;AACA,KAAI;AAWF,GARe,MAAMC,QAAY;GAC/B,MAHkB,QAAQ,QAAQ,IAAI;GAItC,SAAS;IACP,MAAM,QAAQ,QAAQ;IACtB,MAAM,QAAQ,SAAS,OAAO,YAAY,QAAQ;IACnD;GACF,CAAC,EAEK,WAAW;UACX,OAAO;AACd,UAAQ,MAAM,mCAAoC,MAAgB,QAAQ;AAC1E,UAAQ,KAAK,EAAE;;;;;;AClBnB,MAAM,MAAM,IAAI,OAAO;AAEvB,IACG,QAAQ,UAAU,mBAAmB,CACrC,MAAM,MAAM,CACZ,OAAO,iBAAiB,eAAe,EAAE,SAAS,KAAM,CAAC,CACzD,OAAO,iBAAiB,cAAc,CACtC,OAAO,UAAU,wBAAwB,CACzC,OAAO,IAAI;AAEd,IACG,QAAQ,gBAAgB,uBAAuB,CAC/C,OAAO,iBAAiB,0BAA0B,CAClD,OAAOC,QAAM;AAEhB,IACG,QAAQ,kBAAkB,2BAA2B,CACrD,OAAO,iBAAiB,eAAe,EAAE,SAAS,KAAM,CAAC,CACzD,OAAO,iBAAiB,cAAc,CACtC,OAAOC,UAAQ;AAElB,IACG,QAAQ,iBAAiB,gDAAgD,CACzE,OAAO,SAAS,0BAA0B,CAC1C,OAAO,UAAU,iBAAiB,CAClC,OAAO,QAAQ,uCAAuC,CACtD,OAAO,OAAO;AAEjB,IACG,QAAQ,kBAAkB,wCAAwC,CAClE,OAAO,gBAAgB,8CAA8C,CACrE,OAAO,QAAQ;AAElB,IACG,QAAQ,iBAAiB,qCAAqC,CAC9D,OAAO,OAAO;AAEjB,IAAI,MAAM;AACV,IAAI,QAAQ,QAAQ;AACpB,IAAI,OAAO"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["build","viteBuild","preview","vitePreview","build","preview"],"sources":["../src/commands/build.ts","../src/commands/context.ts","../src/commands/create.ts","../src/commands/dev.ts","../src/commands/doctor.ts","../src/commands/preview.ts","../src/index.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { join, resolve } from 'node:path'\nimport { build as viteBuild } from 'vite'\n\nexport interface BuildOptions {\n mode?: string\n}\n\n/** Extract zero plugin config from a Vite config file. */\nasync function loadZeroConfig(\n configPath: string,\n): Promise<Record<string, unknown> | undefined> {\n try {\n const { loadConfigFromFile } = await import('vite')\n const loaded = await loadConfigFromFile(\n { command: 'build', mode: 'production' },\n configPath,\n )\n if (!loaded) return undefined\n\n const plugins = (loaded.config.plugins ?? []) as Array<{\n name?: string\n _zeroConfig?: Record<string, unknown>\n }>\n const zeroPlugin = plugins.find(\n (p) =>\n p && typeof p === 'object' && 'name' in p && p.name === 'pyreon-zero',\n )\n if (zeroPlugin && '_zeroConfig' in zeroPlugin) {\n return zeroPlugin._zeroConfig as Record<string, unknown>\n }\n } catch {\n // Config loading is optional — fall back to defaults\n }\n return undefined\n}\n\n/** Run SSG prerendering pass if configured. */\nasync function prerenderIfNeeded(\n projectRoot: string,\n zeroConfig: Record<string, unknown> | undefined,\n) {\n const serverEntry = join(projectRoot, 'dist/server/entry-server.js')\n if (!existsSync(serverEntry)) return\n\n try {\n const { prerender } = await import('@pyreon/server')\n const serverModule = await import(serverEntry)\n\n const paths = await resolveSsgPaths(zeroConfig)\n const result = await prerender({\n handler: serverModule.default,\n paths,\n outDir: join(projectRoot, 'dist/client'),\n })\n\n for (const err of result.errors) {\n console.warn('Prerender error:', err)\n }\n } catch {\n // Prerender is best-effort — build continues without it\n }\n}\n\n/** Resolve SSG paths from config (static array or async function). */\nasync function resolveSsgPaths(\n zeroConfig: Record<string, unknown> | undefined,\n): Promise<string[]> {\n const ssgConfig = zeroConfig?.ssg as\n | { paths?: string[] | (() => string[] | Promise<string[]>) }\n | undefined\n if (!ssgConfig?.paths) return ['/']\n return typeof ssgConfig.paths === 'function'\n ? await ssgConfig.paths()\n : ssgConfig.paths\n}\n\n/** Run the deploy adapter build step. */\nasync function runAdapter(\n projectRoot: string,\n zeroConfig: Record<string, unknown>,\n) {\n try {\n const { resolveAdapter } = await import('@pyreon/zero')\n const adapter = resolveAdapter(zeroConfig)\n await adapter.build({\n serverEntry: join(projectRoot, 'dist/server/entry-server.js'),\n clientOutDir: join(projectRoot, 'dist/client'),\n outDir: join(projectRoot, 'dist/output'),\n config: zeroConfig,\n })\n } catch {\n // Adapter build is optional — output may not need it\n }\n}\n\nexport async function build(root: string | undefined, options: BuildOptions) {\n try {\n await runBuild(root, options)\n } catch (error) {\n console.error('Build failed:', (error as Error).message)\n process.exit(1)\n }\n}\n\nasync function runBuild(root: string | undefined, options: BuildOptions) {\n const projectRoot = resolve(root ?? '.')\n const start = performance.now()\n\n // Client build\n await viteBuild({\n root: projectRoot,\n build: { outDir: 'dist/client', ssrManifest: true },\n })\n\n // Server build\n await viteBuild({\n root: projectRoot,\n build: {\n outDir: 'dist/server',\n ssr: 'src/entry-server.ts',\n rollupOptions: { input: 'src/entry-server.ts' },\n },\n })\n\n const configPath = join(projectRoot, 'vite.config.ts')\n const zeroConfig = await loadZeroConfig(configPath)\n const renderMode = (zeroConfig?.mode as string) ?? options.mode ?? 'ssr'\n\n if (renderMode === 'ssg' || renderMode === 'isr') {\n await prerenderIfNeeded(projectRoot, zeroConfig)\n }\n\n await runAdapter(projectRoot, zeroConfig ?? {})\n\n const elapsed = Math.round(performance.now() - start)\n console.log(`Build completed in ${elapsed}ms`)\n}\n","import { resolve } from 'node:path'\n\nexport interface ContextOptions {\n out?: string\n}\n\nexport async function context(\n root: string | undefined,\n options: ContextOptions,\n) {\n try {\n const { generateContext } = await import('@pyreon/cli')\n const cwd = resolve(root ?? '.')\n await generateContext({\n cwd,\n outPath: options.out,\n })\n } catch (error) {\n console.error('Context generation failed:', (error as Error).message)\n process.exit(1)\n }\n}\n","import { existsSync } from 'node:fs'\nimport { cp, readFile, writeFile } from 'node:fs/promises'\nimport { basename, join, resolve } from 'node:path'\n\nexport async function create(name: string | undefined) {\n if (!name) {\n console.error('Usage: zero create <project-name>')\n process.exit(1)\n }\n\n const targetDir = resolve(process.cwd(), name)\n\n if (existsSync(targetDir)) {\n console.error(`Directory \"${name}\" already exists.`)\n process.exit(1)\n }\n\n try {\n // Resolve template directory relative to this package\n const templateDir = resolve(\n import.meta.dirname,\n '../../node_modules/@pyreon/create-zero/templates/default',\n )\n\n // Fallback: try workspace resolution\n let sourceDir = templateDir\n if (!existsSync(sourceDir)) {\n const altDir = resolve(\n import.meta.dirname,\n '../../../create-zero/templates/default',\n )\n if (existsSync(altDir)) {\n sourceDir = altDir\n } else {\n console.error(\n 'Template not found. Install @pyreon/create-zero or use: bun create @pyreon/zero',\n )\n process.exit(1)\n }\n }\n\n // Copy template\n await cp(sourceDir, targetDir, { recursive: true })\n\n // Update package.json with project name\n const pkgPath = join(targetDir, 'package.json')\n const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'))\n pkg.name = basename(name)\n await writeFile(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`)\n\n // Create .gitignore (npm strips .gitignore from packages)\n await writeFile(\n join(targetDir, '.gitignore'),\n 'node_modules\\ndist\\n.DS_Store\\n*.local\\n',\n )\n\n console.log(`\\nCreated \"${name}\"!\\n`)\n console.log('Next steps:')\n console.log(` cd ${name}`)\n console.log(' bun install')\n console.log(' bun run dev')\n console.log('')\n } catch (error) {\n console.error('Failed to create project:', (error as Error).message)\n process.exit(1)\n }\n}\n","import { existsSync } from 'node:fs'\nimport { join, resolve } from 'node:path'\nimport { createServer } from 'vite'\n\nexport interface DevOptions {\n port?: number\n host?: string | boolean\n open?: boolean\n}\n\nexport async function dev(root: string | undefined, options: DevOptions) {\n try {\n const projectRoot = resolve(root ?? '.')\n\n const server = await createServer({\n root: projectRoot,\n server: {\n port: options.port ?? 3000,\n host: options.host === true ? '0.0.0.0' : (options.host || false),\n ...(options.open != null ? { open: options.open } : {}),\n },\n })\n\n await server.listen()\n server.printUrls()\n\n // Print route table after server starts\n await printRouteTable(projectRoot)\n } catch (error) {\n console.error('Failed to start dev server:', (error as Error).message)\n process.exit(1)\n }\n}\n\nasync function printRouteTable(projectRoot: string) {\n try {\n const routesDir = join(projectRoot, 'src/routes')\n if (!existsSync(routesDir)) return\n\n const { scanRouteFiles, parseFileRoutes } = await import('@pyreon/zero')\n const { isApiRoute, apiFilePathToPattern } = await import(\n '@pyreon/zero/api-routes'\n )\n\n const files = await scanRouteFiles(routesDir)\n const pageRoutes = parseFileRoutes(files).filter(\n (r) => !r.isLayout && !r.isError && !r.isLoading && !isApiRoute(r.filePath),\n )\n const apiFiles = files.filter(isApiRoute)\n\n if (pageRoutes.length === 0 && apiFiles.length === 0) return\n\n console.log('')\n console.log(' \\x1b[36m Routes\\x1b[0m')\n console.log('')\n\n for (const route of pageRoutes) {\n const mode = route.renderMode.toUpperCase()\n console.log(\n ` \\x1b[2m${mode.padEnd(4)}\\x1b[0m ${route.urlPath}`,\n )\n }\n\n if (apiFiles.length > 0) {\n console.log('')\n console.log(' \\x1b[33m API Routes\\x1b[0m')\n console.log('')\n for (const file of apiFiles) {\n console.log(` \\x1b[2mAPI \\x1b[0m ${apiFilePathToPattern(file)}`)\n }\n }\n\n console.log('')\n } catch {\n // Route table is informational — don't fail dev server\n }\n}\n","import { resolve } from 'node:path'\n\nexport interface DoctorOptions {\n fix?: boolean\n json?: boolean\n ci?: boolean\n}\n\nexport async function doctor(\n root: string | undefined,\n options: DoctorOptions,\n) {\n try {\n const { doctor: runDoctor } = await import('@pyreon/cli')\n const cwd = resolve(root ?? '.')\n const errorCount = await runDoctor({\n fix: options.fix ?? false,\n json: options.json ?? false,\n ci: options.ci ?? false,\n cwd,\n })\n if (options.ci && errorCount > 0) {\n process.exit(1)\n }\n } catch (error) {\n console.error('Doctor failed:', (error as Error).message)\n process.exit(1)\n }\n}\n","import { resolve } from 'node:path'\nimport { preview as vitePreview } from 'vite'\n\nexport interface PreviewOptions {\n port?: number\n host?: string | boolean\n}\n\nexport async function preview(\n root: string | undefined,\n options: PreviewOptions,\n) {\n try {\n const projectRoot = resolve(root ?? '.')\n\n const server = await vitePreview({\n root: projectRoot,\n preview: {\n port: options.port ?? 3000,\n host: options.host === true ? '0.0.0.0' : (options.host || false),\n },\n })\n\n server.printUrls()\n } catch (error) {\n console.error('Failed to start preview server:', (error as Error).message)\n process.exit(1)\n }\n}\n","import cac from 'cac'\nimport { build } from './commands/build'\nimport { context } from './commands/context'\nimport { create } from './commands/create'\nimport { dev } from './commands/dev'\nimport { doctor } from './commands/doctor'\nimport { preview } from './commands/preview'\n\nconst cli = cac('zero')\n\ncli\n .command('[root]', 'Start dev server')\n .alias('dev')\n .option('--port <port>', 'Server port', { default: 3000 })\n .option('--host [host]', 'Server host')\n .option('--open', 'Open browser on start')\n .action(dev)\n\ncli\n .command('build [root]', 'Build for production')\n .option('--mode <mode>', 'Rendering mode override')\n .action(build)\n\ncli\n .command('preview [root]', 'Preview production build')\n .option('--port <port>', 'Server port', { default: 3000 })\n .option('--host [host]', 'Server host')\n .action(preview)\n\ncli\n .command('doctor [root]', 'Check for React patterns and framework issues')\n .option('--fix', 'Auto-fix fixable issues')\n .option('--json', 'Output as JSON')\n .option('--ci', 'CI mode — exit with code 1 on errors')\n .action(doctor)\n\ncli\n .command('context [root]', 'Generate project context for AI tools')\n .option('--out <path>', 'Output path (default: .pyreon/context.json)')\n .action(context)\n\ncli\n .command('create <name>', 'Scaffold a new Pyreon Zero project')\n .action(create)\n\ncli.help()\ncli.version('0.0.1')\ncli.parse()\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pyreon/zero-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "CLI for Pyreon Zero — dev, build, preview",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Vit Bokisch",
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
"typecheck": "tsc --noEmit"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@pyreon/cli": "^0.7.
|
|
31
|
-
"@pyreon/create-zero": "^0.
|
|
32
|
-
"@pyreon/server": "^0.7.
|
|
33
|
-
"@pyreon/zero": "^0.
|
|
30
|
+
"@pyreon/cli": "^0.7.5",
|
|
31
|
+
"@pyreon/create-zero": "^0.4.0",
|
|
32
|
+
"@pyreon/server": "^0.7.5",
|
|
33
|
+
"@pyreon/zero": "^0.4.0",
|
|
34
34
|
"cac": "^7.0.0",
|
|
35
35
|
"vite": "^8.0.0"
|
|
36
36
|
}
|