@teamvelix/cli 5.3.2 → 5.3.3

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.
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  log,
3
3
  writeFile
4
- } from "./chunk-A7YBQRHF.js";
4
+ } from "./chunk-QVHVWNX3.js";
5
+ import "./chunk-7D4SUZUM.js";
5
6
 
6
7
  // commands/ui.ts
7
8
  import fs from "fs";
@@ -77,4 +78,4 @@ Button.displayName = "Button";
77
78
  export {
78
79
  handleUiCommand
79
80
  };
80
- //# sourceMappingURL=ui-575K5B5U.js.map
81
+ //# sourceMappingURL=ui-2KJQ4SG6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../commands/ui.ts"],"sourcesContent":["/**\n * `velix ui <add> <component>` — Install UI components\n */\nimport fs from 'fs';\nimport path from 'path';\nimport { log, writeFile } from './shared.js';\n\nexport async function handleUiCommand(args: string[]) {\n const [subCommand, componentName] = args;\n if (subCommand !== 'add' || !componentName) {\n log.error('Usage: velix ui add <component>');\n return;\n }\n\n const cwd = process.cwd();\n const uiDir = path.join(cwd, 'components', 'ui');\n const utilsDir = path.join(cwd, 'lib');\n\n if (componentName === 'button') {\n // Ensure utils.ts exists\n if (!fs.existsSync(utilsDir)) fs.mkdirSync(utilsDir, { recursive: true });\n const utilsPath = path.join(utilsDir, 'utils.ts');\n if (!fs.existsSync(utilsPath)) {\n writeFile(utilsPath, `import { clsx, type ClassValue } from \"clsx\";\\nimport { twMerge } from \"tailwind-merge\";\\n\\nexport function cn(...inputs: ClassValue[]) {\\n return twMerge(clsx(inputs));\\n}\\n`);\n log.info('Created lib/utils.ts (please run in project: npm i clsx tailwind-merge)');\n }\n\n // Ensure ui dir exists\n if (!fs.existsSync(uiDir)) fs.mkdirSync(uiDir, { recursive: true });\n const buttonPath = path.join(uiDir, 'button.tsx');\n if (fs.existsSync(buttonPath)) {\n log.warn('Button component already exists.');\n return;\n }\n\n writeFile(buttonPath, `import * as React from \"react\";\\nimport { cn } from \"../../lib/utils\";\\n\\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';\\n size?: 'default' | 'sm' | 'lg' | 'icon';\\n}\\n\\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\\n ({ className, variant = 'default', size = 'default', ...props }, ref) => {\\n const variants: Record<string, string> = {\\n default: 'bg-slate-900 text-slate-50 hover:bg-slate-900/90',\\n destructive: 'bg-red-500 text-slate-50 hover:bg-red-500/90',\\n outline: 'border border-slate-200 bg-white hover:bg-slate-100 hover:text-slate-900',\\n secondary: 'bg-slate-100 text-slate-900 hover:bg-slate-100/80',\\n ghost: 'hover:bg-slate-100 hover:text-slate-900',\\n link: 'text-slate-900 underline-offset-4 hover:underline',\\n };\\n const sizes: Record<string, string> = {\\n default: 'h-10 px-4 py-2',\\n sm: 'h-9 rounded-md px-3',\\n lg: 'h-11 rounded-md px-8',\\n icon: 'h-10 w-10',\\n };\\n const classes = cn(\\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\\n variants[variant],\\n sizes[size],\\n className\\n );\\n return <button className={classes} ref={ref} {...props} />;\\n }\\n);\\nButton.displayName = \"Button\";\\n`);\n log.success('Installed component: Button (components/ui/button.tsx)');\n } else {\n log.error(`Component \"${componentName}\" is not available yet in the mock registry.`);\n }\n}\n"],"mappings":";;;;;;AAGA,OAAO,QAAQ;AACf,OAAO,UAAU;AAGjB,eAAsB,gBAAgB,MAAgB;AACpD,QAAM,CAAC,YAAY,aAAa,IAAI;AACpC,MAAI,eAAe,SAAS,CAAC,eAAe;AAC1C,QAAI,MAAM,iCAAiC;AAC3C;AAAA,EACF;AAEA,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,QAAQ,KAAK,KAAK,KAAK,cAAc,IAAI;AAC/C,QAAM,WAAW,KAAK,KAAK,KAAK,KAAK;AAErC,MAAI,kBAAkB,UAAU;AAE9B,QAAI,CAAC,GAAG,WAAW,QAAQ,EAAG,IAAG,UAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AACxE,UAAM,YAAY,KAAK,KAAK,UAAU,UAAU;AAChD,QAAI,CAAC,GAAG,WAAW,SAAS,GAAG;AAC7B,gBAAU,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAiL;AACtM,UAAI,KAAK,yEAAyE;AAAA,IACpF;AAGA,QAAI,CAAC,GAAG,WAAW,KAAK,EAAG,IAAG,UAAU,OAAO,EAAE,WAAW,KAAK,CAAC;AAClE,UAAM,aAAa,KAAK,KAAK,OAAO,YAAY;AAChD,QAAI,GAAG,WAAW,UAAU,GAAG;AAC7B,UAAI,KAAK,kCAAkC;AAC3C;AAAA,IACF;AAEA,cAAU,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAmkD;AACzlD,QAAI,QAAQ,wDAAwD;AAAA,EACtE,OAAO;AACL,QAAI,MAAM,cAAc,aAAa,8CAA8C;AAAA,EACrF;AACF;","names":[]}
1
+ {"version":3,"sources":["../commands/ui.ts"],"sourcesContent":["/**\n * `velix ui <add> <component>` — Install UI components\n */\nimport fs from 'fs';\nimport path from 'path';\nimport { log, writeFile } from './shared.js';\n\nexport async function handleUiCommand(args: string[]) {\n const [subCommand, componentName] = args;\n if (subCommand !== 'add' || !componentName) {\n log.error('Usage: velix ui add <component>');\n return;\n }\n\n const cwd = process.cwd();\n const uiDir = path.join(cwd, 'components', 'ui');\n const utilsDir = path.join(cwd, 'lib');\n\n if (componentName === 'button') {\n // Ensure utils.ts exists\n if (!fs.existsSync(utilsDir)) fs.mkdirSync(utilsDir, { recursive: true });\n const utilsPath = path.join(utilsDir, 'utils.ts');\n if (!fs.existsSync(utilsPath)) {\n writeFile(utilsPath, `import { clsx, type ClassValue } from \"clsx\";\\nimport { twMerge } from \"tailwind-merge\";\\n\\nexport function cn(...inputs: ClassValue[]) {\\n return twMerge(clsx(inputs));\\n}\\n`);\n log.info('Created lib/utils.ts (please run in project: npm i clsx tailwind-merge)');\n }\n\n // Ensure ui dir exists\n if (!fs.existsSync(uiDir)) fs.mkdirSync(uiDir, { recursive: true });\n const buttonPath = path.join(uiDir, 'button.tsx');\n if (fs.existsSync(buttonPath)) {\n log.warn('Button component already exists.');\n return;\n }\n\n writeFile(buttonPath, `import * as React from \"react\";\\nimport { cn } from \"../../lib/utils\";\\n\\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';\\n size?: 'default' | 'sm' | 'lg' | 'icon';\\n}\\n\\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\\n ({ className, variant = 'default', size = 'default', ...props }, ref) => {\\n const variants: Record<string, string> = {\\n default: 'bg-slate-900 text-slate-50 hover:bg-slate-900/90',\\n destructive: 'bg-red-500 text-slate-50 hover:bg-red-500/90',\\n outline: 'border border-slate-200 bg-white hover:bg-slate-100 hover:text-slate-900',\\n secondary: 'bg-slate-100 text-slate-900 hover:bg-slate-100/80',\\n ghost: 'hover:bg-slate-100 hover:text-slate-900',\\n link: 'text-slate-900 underline-offset-4 hover:underline',\\n };\\n const sizes: Record<string, string> = {\\n default: 'h-10 px-4 py-2',\\n sm: 'h-9 rounded-md px-3',\\n lg: 'h-11 rounded-md px-8',\\n icon: 'h-10 w-10',\\n };\\n const classes = cn(\\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\\n variants[variant],\\n sizes[size],\\n className\\n );\\n return <button className={classes} ref={ref} {...props} />;\\n }\\n);\\nButton.displayName = \"Button\";\\n`);\n log.success('Installed component: Button (components/ui/button.tsx)');\n } else {\n log.error(`Component \"${componentName}\" is not available yet in the mock registry.`);\n }\n}\n"],"mappings":";;;;;;;AAGA,OAAO,QAAQ;AACf,OAAO,UAAU;AAGjB,eAAsB,gBAAgB,MAAgB;AACpD,QAAM,CAAC,YAAY,aAAa,IAAI;AACpC,MAAI,eAAe,SAAS,CAAC,eAAe;AAC1C,QAAI,MAAM,iCAAiC;AAC3C;AAAA,EACF;AAEA,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,QAAQ,KAAK,KAAK,KAAK,cAAc,IAAI;AAC/C,QAAM,WAAW,KAAK,KAAK,KAAK,KAAK;AAErC,MAAI,kBAAkB,UAAU;AAE9B,QAAI,CAAC,GAAG,WAAW,QAAQ,EAAG,IAAG,UAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AACxE,UAAM,YAAY,KAAK,KAAK,UAAU,UAAU;AAChD,QAAI,CAAC,GAAG,WAAW,SAAS,GAAG;AAC7B,gBAAU,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAiL;AACtM,UAAI,KAAK,yEAAyE;AAAA,IACpF;AAGA,QAAI,CAAC,GAAG,WAAW,KAAK,EAAG,IAAG,UAAU,OAAO,EAAE,WAAW,KAAK,CAAC;AAClE,UAAM,aAAa,KAAK,KAAK,OAAO,YAAY;AAChD,QAAI,GAAG,WAAW,UAAU,GAAG;AAC7B,UAAI,KAAK,kCAAkC;AAC3C;AAAA,IACF;AAEA,cAAU,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAmkD;AACzlD,QAAI,QAAQ,wDAAwD;AAAA,EACtE,OAAO;AACL,QAAI,MAAM,cAAc,aAAa,8CAA8C;AAAA,EACrF;AACF;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teamvelix/cli",
3
- "version": "5.3.2",
3
+ "version": "5.3.3",
4
4
  "description": "Velix v5 CLI — Create, develop, and build Velix applications",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -12,6 +12,10 @@
12
12
  "dist",
13
13
  "assets"
14
14
  ],
15
+ "scripts": {
16
+ "build": "tsup",
17
+ "dev": "tsup --watch"
18
+ },
15
19
  "dependencies": {
16
20
  "ora": "^8.1.1",
17
21
  "picocolors": "^1.1.1",
@@ -32,9 +36,5 @@
32
36
  },
33
37
  "publishConfig": {
34
38
  "access": "public"
35
- },
36
- "scripts": {
37
- "build": "tsup",
38
- "dev": "tsup --watch"
39
39
  }
40
- }
40
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Velix Team
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../commands/build.ts"],"sourcesContent":["/**\n * `velix build` — Build for production\n */\nimport fs from 'fs';\nimport path from 'path';\nimport { showBanner, log } from './shared.js';\n\nexport async function buildCommand() {\n showBanner();\n log.info('Building for production...');\n\n const { spawn } = await import('child_process');\n\n const cwd = process.cwd();\n const candidates = [\n path.join(cwd, 'node_modules', '@teamvelix', 'velix', 'dist', 'runtime', 'start-build.js'),\n path.join(cwd, 'packages', 'velix', 'dist', 'runtime', 'start-build.js'),\n path.join(cwd, 'packages', 'velix', 'runtime', 'start-build.ts'),\n ];\n\n const buildScript = candidates.find(c => fs.existsSync(c));\n if (!buildScript) {\n log.error('Could not find Velix runtime. Run `npm install` first.');\n process.exit(1);\n }\n\n const child = spawn(`npx tsx \"${buildScript}\"`, {\n stdio: 'inherit', cwd, shell: true,\n });\n\n child.on('error', (err) => {\n log.error(`Failed to build: ${err.message}`);\n process.exit(1);\n });\n}\n\n/**\n * `velix start` — Start production server\n */\nexport async function startCommand() {\n showBanner();\n log.info('Starting production server...');\n\n const { spawn } = await import('child_process');\n\n const cwd = process.cwd();\n const candidates = [\n path.join(cwd, 'node_modules', '@teamvelix', 'velix', 'dist', 'runtime', 'start-prod.js'),\n path.join(cwd, 'packages', 'velix', 'dist', 'runtime', 'start-prod.js'),\n path.join(cwd, 'packages', 'velix', 'runtime', 'start-prod.ts'),\n ];\n\n const prodScript = candidates.find(c => fs.existsSync(c));\n if (!prodScript) {\n log.error('Could not find Velix runtime. Run `npm install` first.');\n process.exit(1);\n }\n\n const child = spawn(`npx tsx \"${prodScript}\"`, {\n stdio: 'inherit', cwd, shell: true,\n });\n\n child.on('error', (err) => {\n log.error(`Failed to start production server: ${err.message}`);\n process.exit(1);\n });\n}\n"],"mappings":";;;;;;AAGA,OAAO,QAAQ;AACf,OAAO,UAAU;AAGjB,eAAsB,eAAe;AACnC,aAAW;AACX,MAAI,KAAK,4BAA4B;AAErC,QAAM,EAAE,MAAM,IAAI,MAAM,OAAO,eAAe;AAE9C,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,aAAa;AAAA,IACjB,KAAK,KAAK,KAAK,gBAAgB,cAAc,SAAS,QAAQ,WAAW,gBAAgB;AAAA,IACzF,KAAK,KAAK,KAAK,YAAY,SAAS,QAAQ,WAAW,gBAAgB;AAAA,IACvE,KAAK,KAAK,KAAK,YAAY,SAAS,WAAW,gBAAgB;AAAA,EACjE;AAEA,QAAM,cAAc,WAAW,KAAK,OAAK,GAAG,WAAW,CAAC,CAAC;AACzD,MAAI,CAAC,aAAa;AAChB,QAAI,MAAM,wDAAwD;AAClE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,QAAQ,MAAM,YAAY,WAAW,KAAK;AAAA,IAC9C,OAAO;AAAA,IAAW;AAAA,IAAK,OAAO;AAAA,EAChC,CAAC;AAED,QAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,QAAI,MAAM,oBAAoB,IAAI,OAAO,EAAE;AAC3C,YAAQ,KAAK,CAAC;AAAA,EAChB,CAAC;AACH;AAKA,eAAsB,eAAe;AACnC,aAAW;AACX,MAAI,KAAK,+BAA+B;AAExC,QAAM,EAAE,MAAM,IAAI,MAAM,OAAO,eAAe;AAE9C,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,aAAa;AAAA,IACjB,KAAK,KAAK,KAAK,gBAAgB,cAAc,SAAS,QAAQ,WAAW,eAAe;AAAA,IACxF,KAAK,KAAK,KAAK,YAAY,SAAS,QAAQ,WAAW,eAAe;AAAA,IACtE,KAAK,KAAK,KAAK,YAAY,SAAS,WAAW,eAAe;AAAA,EAChE;AAEA,QAAM,aAAa,WAAW,KAAK,OAAK,GAAG,WAAW,CAAC,CAAC;AACxD,MAAI,CAAC,YAAY;AACf,QAAI,MAAM,wDAAwD;AAClE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,QAAQ,MAAM,YAAY,UAAU,KAAK;AAAA,IAC7C,OAAO;AAAA,IAAW;AAAA,IAAK,OAAO;AAAA,EAChC,CAAC;AAED,QAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,QAAI,MAAM,sCAAsC,IAAI,OAAO,EAAE;AAC7D,YAAQ,KAAK,CAAC;AAAA,EAChB,CAAC;AACH;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../version.ts","../commands/shared.ts"],"sourcesContent":["/**\r\n * Velix CLI version — single source of truth.\r\n * Keep in sync with packages/velix/version.ts.\r\n */\r\nexport const VERSION = '5.3.0';\r\n","/**\n * Shared CLI utilities — logger, banner, helpers\n */\nimport pc from 'picocolors';\nimport fs from 'fs';\nimport path from 'path';\nimport { VERSION } from '../version.js';\n\nexport const log = {\n info: (msg: string) => console.log(` ${pc.cyan('ℹ')} ${msg}`),\n success: (msg: string) => console.log(` ${pc.green('✔')} ${msg}`),\n warn: (msg: string) => console.log(` ${pc.yellow('⚠')} ${pc.yellow(msg)}`),\n error: (msg: string) => console.log(` ${pc.red('✖')} ${pc.red(msg)}`),\n blank: () => console.log(''),\n};\n\nexport function showBanner() {\n console.log('');\n console.log(` ${pc.cyan('▲')} ${pc.bold('Velix')} ${pc.dim(`v${VERSION}`)}`);\n console.log(` ${pc.dim('──────────────────────────────────────────────')}`);\n console.log('');\n}\n\nexport function writeFile(filePath: string, content: string) {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n fs.writeFileSync(filePath, content);\n}\n\nexport function capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function pascalCase(str: string): string {\n return str.split(/[-_\\/]/).map(s => capitalize(s)).join('');\n}\n\nexport function camelCase(str: string): string {\n const pascal = pascalCase(str);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n"],"mappings":";AAIO,IAAM,UAAU;;;ACDvB,OAAO,QAAQ;AACf,OAAO,QAAQ;AACf,OAAO,UAAU;AAGV,IAAM,MAAM;AAAA,EACjB,MAAM,CAAC,QAAgB,QAAQ,IAAI,KAAK,GAAG,KAAK,QAAG,CAAC,IAAI,GAAG,EAAE;AAAA,EAC7D,SAAS,CAAC,QAAgB,QAAQ,IAAI,KAAK,GAAG,MAAM,QAAG,CAAC,IAAI,GAAG,EAAE;AAAA,EACjE,MAAM,CAAC,QAAgB,QAAQ,IAAI,KAAK,GAAG,OAAO,QAAG,CAAC,IAAI,GAAG,OAAO,GAAG,CAAC,EAAE;AAAA,EAC1E,OAAO,CAAC,QAAgB,QAAQ,IAAI,KAAK,GAAG,IAAI,QAAG,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE;AAAA,EACrE,OAAO,MAAM,QAAQ,IAAI,EAAE;AAC7B;AAEO,SAAS,aAAa;AAC3B,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,KAAK,GAAG,KAAK,QAAG,CAAC,IAAI,GAAG,KAAK,OAAO,CAAC,IAAI,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,EAAE;AAC5E,UAAQ,IAAI,KAAK,GAAG,IAAI,sRAAgD,CAAC,EAAE;AAC3E,UAAQ,IAAI,EAAE;AAChB;AAEO,SAAS,UAAU,UAAkB,SAAiB;AAC3D,KAAG,UAAU,KAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AACxD,KAAG,cAAc,UAAU,OAAO;AACpC;AAEO,SAAS,WAAW,KAAqB;AAC9C,SAAO,IAAI,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAClD;AAEO,SAAS,WAAW,KAAqB;AAC9C,SAAO,IAAI,MAAM,QAAQ,EAAE,IAAI,OAAK,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE;AAC5D;AAEO,SAAS,UAAU,KAAqB;AAC7C,QAAM,SAAS,WAAW,GAAG;AAC7B,SAAO,OAAO,OAAO,CAAC,EAAE,YAAY,IAAI,OAAO,MAAM,CAAC;AACxD;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../commands/create.ts"],"sourcesContent":["/**\n * `velix create <name>` — Create a new Velix project\n */\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport pc from 'picocolors';\nimport prompts from 'prompts';\nimport { VERSION } from '../version.js';\nimport { showBanner, log, writeFile } from './shared.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport async function createCommand(name?: string) {\n showBanner();\n\n if (!name) {\n const response = await prompts({\n type: 'text',\n name: 'name',\n message: 'Project name:',\n initial: 'my-velix-app',\n });\n name = response.name;\n if (!name) { log.error('Project name is required'); process.exit(1); }\n }\n\n const projectDir = path.resolve(process.cwd(), name);\n\n if (fs.existsSync(projectDir)) {\n log.error(`Directory ${name} already exists`);\n process.exit(1);\n }\n\n // Choose template\n const flags = process.argv.slice(3);\n const templateFlag = flags.find(a => a.startsWith('--template='))?.split('=')[1];\n const tailwindFlag = flags.includes('--tailwind');\n const noTailwindFlag = flags.includes('--no-tailwind');\n\n let template = templateFlag;\n let useTailwind: boolean | undefined = tailwindFlag ? true : (noTailwindFlag ? false : undefined);\n\n if (!template) {\n const response = await prompts({\n type: 'select',\n name: 'template',\n message: 'Select a template:',\n choices: [\n { title: '✨ Default - Full Velix app with examples', value: 'default' },\n { title: '⚡ Minimal', value: 'minimal' },\n ],\n });\n template = response.template;\n }\n\n if (!template) {\n log.error('No template selected');\n process.exit(1);\n }\n\n if (useTailwind === undefined) {\n const twResponse = await prompts({\n type: 'confirm',\n name: 'useTailwind',\n message: 'Use Tailwind CSS?',\n initial: true\n });\n useTailwind = twResponse.useTailwind;\n }\n\n let useShadcn: boolean | undefined = flags.includes('--shadcn') ? true : (flags.includes('--no-shadcn') ? false : undefined);\n\n if (useTailwind && useShadcn === undefined) {\n const shResponse = await prompts({\n type: 'confirm',\n name: 'useShadcn',\n message: 'Use Shadcn UI components?',\n initial: true\n });\n useShadcn = shResponse.useShadcn;\n }\n\n const { default: ora } = await import('ora');\n const spinner = ora('Creating project...').start();\n\n try {\n fs.mkdirSync(projectDir, { recursive: true });\n generateProjectFiles(projectDir, name, template, useTailwind, useShadcn);\n spinner.succeed(`Project ${pc.bold(name)} created!`);\n log.blank();\n console.log(` ${pc.bold('Next steps:')}`);\n console.log(` ${pc.dim('$')} cd ${name}`);\n console.log(` ${pc.dim('$')} npm install`);\n console.log(` ${pc.dim('$')} npm run dev`);\n log.blank();\n } catch (err: unknown) {\n spinner.fail('Failed to create project');\n log.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n}\n\ninterface PackageJson {\n name: string;\n version: string;\n private: boolean;\n type: string;\n scripts: Record<string, string>;\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n}\n\nfunction generateProjectFiles(dir: string, name: string, template: string, useTailwind: boolean = true, useShadcn: boolean = false) {\n const pkg: PackageJson = {\n name,\n version: '0.1.0',\n private: true,\n type: 'module',\n scripts: {\n dev: 'velix dev',\n build: 'velix build',\n start: 'velix start',\n },\n dependencies: {\n '@teamvelix/velix': `^${VERSION}`,\n react: '^19.0.0',\n 'react-dom': '^19.0.0',\n },\n devDependencies: {\n '@teamvelix/cli': `^${VERSION}`,\n typescript: '^5.7.0',\n '@types/react': '^19.0.0',\n '@types/react-dom': '^19.0.0',\n },\n };\n\n if (useTailwind) {\n pkg.devDependencies = {\n ...pkg.devDependencies,\n 'tailwindcss': '^4.0.0',\n '@tailwindcss/cli': '^4.0.0',\n };\n }\n\n if (useShadcn) {\n pkg.dependencies = {\n ...pkg.dependencies,\n 'clsx': '^2.1.0',\n 'tailwind-merge': '^2.2.1',\n 'lucide-react': '^0.359.0'\n };\n }\n\n writeFile(path.join(dir, 'package.json'), JSON.stringify(pkg, null, 2));\n\n writeFile(path.join(dir, 'velix.config.ts'), `import { defineConfig${useTailwind ? ', tailwindPlugin' : ''} } from \"@teamvelix/velix\";\n\nexport default defineConfig({\n app: {\n name: \"${name}\",\n },\n server: {\n port: 3000,\n host: \"localhost\",\n },\n seo: {\n sitemap: true,\n robots: true,\n openGraph: true,\n },\n favicon: \"/favicon.webp\",\n ${useTailwind ? `plugins: [\\n tailwindPlugin()\\n ],` : 'plugins: [],'}\n});\n`);\n\n writeFile(path.join(dir, 'tsconfig.json'), JSON.stringify({\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n jsx: 'react-jsx',\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n forceConsistentCasingInFileNames: true,\n },\n include: ['app/**/*.ts', 'app/**/*.tsx', 'server/**/*.ts'],\n exclude: ['node_modules', '.velix']\n }, null, 2));\n\n if (useTailwind) {\n writeFile(path.join(dir, 'tailwind.config.ts'), `import type { Config } from \"tailwindcss\";\\n\\nexport default {\\n content: [\\n \"./index.html\",\\n \"./app/**/*.{js,ts,jsx,tsx}\",\\n \"./components/**/*.{js,ts,jsx,tsx}\",\\n \"./lib/**/*.{js,ts,jsx,tsx}\",\\n \"./src/**/*.{js,ts,jsx,tsx}\",\\n ],\\n} satisfies Config;\\n`);\n }\n\n fs.mkdirSync(path.join(dir, 'app'), { recursive: true });\n writeFile(path.join(dir, 'app', 'globals.css'), useTailwind ? `@import \"tailwindcss\";\\n\\n@theme {\\n --color-velix-deep: #0B1120;\\n --color-velix-dark: #0F172A;\\n --color-velix-accent: #2563EB;\\n --color-velix-cyan: #22D3EE;\\n --color-velix-glow: #38BDF8;\\n}\\n` : `body { margin: 0; font-family: sans-serif; }\\n`);\n\n writeFile(path.join(dir, 'app', 'layout.tsx'), `import \"./globals.css\";\n\nexport const metadata = {\n title: \"${name}\",\n description: \"Built with Velix v5\",\n};\n\nexport default function RootLayout({ children }: { children: React.ReactNode }) {\n return (\n <html lang=\"en\">\n <body className=\"${useTailwind ? 'bg-velix-deep text-slate-100' : 'bg-slate-900 text-white'} min-h-screen font-sans antialiased\">{children}</body>\n </html>\n );\n}\n`);\n\n if (template === 'minimal') {\n writeFile(path.join(dir, 'app', 'page.tsx'), `export const metadata = {\\n title: \"${name}\",\\n};\\n\\nexport default function MinimalPage() {\\n return (\\n <main className=\"min-h-screen flex flex-col items-center justify-center bg-[#0F172A] text-slate-100 font-sans\">\\n <h1 className=\"text-4xl font-bold tracking-tight text-white mb-2\">Velix</h1>\\n <p className=\"text-slate-400\">Minimal starter.</p>\\n </main>\\n );\\n}\\n`);\n } else {\n // Full template with components...\n fs.mkdirSync(path.join(dir, 'components', 'ui'), { recursive: true });\n\n let buttonCode = `import React from 'react';\\n\\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\\n variant?: 'primary' | 'secondary';\\n}\\n\\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\\n ({ className = '', variant = 'primary', ...props }, ref) => {\\n const base = \"inline-flex flex-row gap-2 items-center justify-center font-medium transition-all duration-300 h-12 rounded-xl px-8 focus:outline-none focus:ring-2 focus:ring-velix-cyan/50\";\\n const variants = {\\n primary: \"bg-gradient-to-r from-velix-accent to-velix-cyan text-white shadow-[0_0_20px_rgba(34,211,238,0.25)] hover:shadow-[0_0_30px_rgba(34,211,238,0.45)]\",\\n secondary: \"bg-white/5 text-slate-200 border border-white/10 hover:bg-white/10 hover:border-velix-cyan/30\"\\n };\\n return <button ref={ref} className={\\`\\${base} \\${variants[variant]} \\${className}\\`} {...props} />;\\n }\\n);\\nButton.displayName = \"Button\";\\n`;\n\n if (useShadcn) {\n fs.mkdirSync(path.join(dir, 'lib'), { recursive: true });\n writeFile(path.join(dir, 'lib', 'utils.ts'), `import { clsx, type ClassValue } from \"clsx\";\\nimport { twMerge } from \"tailwind-merge\";\\n\\nexport function cn(...inputs: ClassValue[]) {\\n return twMerge(clsx(inputs));\\n}\\n`);\n buttonCode = `import * as React from \"react\";\\nimport { cn } from \"../../lib/utils\";\\n\\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\\n variant?: 'primary' | 'secondary';\\n}\\n\\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\\n ({ className, variant = 'primary', ...props }, ref) => {\\n const classes = cn(\\n \"inline-flex flex-row gap-2 items-center justify-center font-medium transition-all duration-300 h-12 rounded-xl px-8 focus:outline-none focus:ring-2 focus:ring-velix-cyan/50\",\\n variant === 'primary' ? \"bg-gradient-to-r from-velix-accent to-velix-cyan text-white shadow-[0_0_20px_rgba(34,211,238,0.25)] hover:shadow-[0_0_30px_rgba(34,211,238,0.45)]\" : \"bg-white/5 text-slate-200 border border-white/10 hover:bg-white/10 hover:border-velix-cyan/30\",\\n className\\n );\\n return <button className={classes} ref={ref} {...props} />;\\n }\\n);\\nButton.displayName = \"Button\";\\n`;\n }\n writeFile(path.join(dir, 'components', 'ui', 'button.tsx'), buttonCode);\n\n const cardClasses = \"group relative p-8 bg-velix-dark/60 border border-white/5 rounded-2xl hover:border-velix-cyan/20 transition-colors duration-300 overflow-hidden\";\n const cardGradient = \"absolute inset-0 bg-gradient-to-br from-velix-accent/0 to-velix-cyan/0 group-hover:from-velix-accent/5 group-hover:to-velix-cyan/5 transition-all duration-500\";\n const cardCode = useShadcn\n ? `import React from \"react\";\\nimport { cn } from \"../../lib/utils\";\\n\\nexport function Card({ title, description, className = '' }: { title: string; description: string; className?: string }) {\\n return (\\n <div className={cn(\"${cardClasses}\", className)}>\\n <div className=\"${cardGradient}\"></div>\\n <h3 className=\"text-xl font-semibold text-slate-100 mb-3 relative z-10\">{title}</h3>\\n <p className=\"text-sm text-slate-400 leading-relaxed relative z-10\">{description}</p>\\n </div>\\n );\\n}\\n`\n : `import React from \"react\";\\n\\nexport function Card({ title, description, className = '' }: { title: string; description: string; className?: string }) {\\n return (\\n <div className={\"${cardClasses} \" + className}>\\n <div className=\"${cardGradient}\"></div>\\n <h3 className=\"text-xl font-semibold text-slate-100 mb-3 relative z-10\">{title}</h3>\\n <p className=\"text-sm text-slate-400 leading-relaxed relative z-10\">{description}</p>\\n </div>\\n );\\n}\\n`;\n writeFile(path.join(dir, 'components', 'ui', 'card.tsx'), cardCode);\n\n writeFile(path.join(dir, 'app', 'page.tsx'), `import { Button } from \"../components/ui/button\";\nimport { Card } from \"../components/ui/card\";\n\nexport const metadata = {\n title: \"Welcome to Velix\",\n description: \"Build fast. Ship faster.\",\n};\n\nexport default function HomePage() {\n return (\n <main className=\"min-h-screen flex flex-col items-center justify-center p-8 bg-gradient-to-b from-[#0B1628] via-velix-dark to-velix-deep text-slate-100 font-sans relative overflow-hidden\">\n <div className=\"absolute top-1/4 left-1/3 w-[500px] h-[500px] bg-velix-accent/15 rounded-full blur-[140px] pointer-events-none\"></div>\n <div className=\"absolute bottom-1/4 right-1/4 w-[400px] h-[400px] bg-velix-cyan/10 rounded-full blur-[120px] pointer-events-none\"></div>\n <div className=\"z-10 flex flex-col items-center max-w-5xl w-full text-center mt-12 mb-auto\">\n <div className=\"mb-10 w-24 h-24 bg-gradient-to-br from-velix-accent to-velix-cyan rounded-2xl shadow-[0_0_50px_rgba(34,211,238,0.3)] flex items-center justify-center relative group\">\n <div className=\"absolute inset-0 bg-velix-cyan/20 rounded-2xl blur-xl group-hover:blur-2xl transition-all duration-500\"></div>\n <span className=\"text-5xl font-black text-white relative z-10 tracking-tighter\">V</span>\n </div>\n <h1 className=\"text-5xl md:text-7xl font-extrabold mb-6 tracking-tight\">\n <span className=\"bg-clip-text text-transparent bg-gradient-to-r from-white to-slate-400\">Welcome to</span>{\" \"}\n <span className=\"bg-clip-text text-transparent bg-gradient-to-r from-velix-cyan via-velix-glow to-velix-accent\">Velix</span>\n </h1>\n <p className=\"text-xl md:text-2xl text-slate-400 mb-12 tracking-wide font-light\">\n Build fast. Ship faster.\n </p>\n <div className=\"flex flex-col sm:flex-row gap-5 mb-24 w-full sm:w-auto\">\n <a href=\"https://github.com/Velixteam/velix\" target=\"_blank\" rel=\"noreferrer\" className=\"w-full sm:w-auto\">\n <Button variant=\"primary\" className=\"w-full\">Get Started</Button>\n </a>\n <a href=\"https://teamvelix.vercel.app\" target=\"_blank\" rel=\"noreferrer\" className=\"w-full sm:w-auto\">\n <Button variant=\"secondary\" className=\"w-full\">Documentation</Button>\n </a>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 w-full text-left\">\n <Card title=\"Routing\" description=\"File-system based routing that feels instantly familiar and snappy.\" />\n <Card title=\"Actions\" description=\"Type-safe server actions mapped seamlessly directly to your client.\" />\n <Card title=\"Plugins\" description=\"Extend the framework capabilities with a simple yet powerful API.\" />\n <Card title=\"Deployment\" description=\"Deploy to any cloud provider or serverless edge with zero config.\" />\n </div>\n </div>\n <div className=\"mt-16 pb-8 text-slate-600 text-sm tracking-widest uppercase font-mono\">\n Velix &copy; ${new Date().getFullYear()}\n </div>\n </main>\n );\n}\n`);\n }\n\n if (template !== 'minimal') {\n fs.mkdirSync(path.join(dir, 'server', 'api'), { recursive: true });\n writeFile(path.join(dir, 'server', 'api', 'hello.ts'), `export function GET() {\n return Response.json({ message: \"Hello from Velix API!\" });\n}\n\nexport function POST(_request: Request) {\n return Response.json({ received: true });\n}\n`);\n\n fs.mkdirSync(path.join(dir, 'public'), { recursive: true });\n }\n\n // Copy favicon\n const logoSrc = path.join(__dirname, '..', 'assets', 'logo.webp');\n if (fs.existsSync(logoSrc)) {\n fs.mkdirSync(path.join(dir, 'public'), { recursive: true });\n fs.copyFileSync(logoSrc, path.join(dir, 'public', 'favicon.webp'));\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../commands/dev.ts"],"sourcesContent":["/**\n * `velix dev` — Start development server\n */\nimport fs from 'fs';\nimport path from 'path';\nimport { showBanner, log } from './shared.js';\n\nexport async function devCommand() {\n showBanner();\n log.info('Starting development server...');\n\n const { spawn } = await import('child_process');\n\n const cwd = process.cwd();\n const candidates = [\n path.join(cwd, 'node_modules', '@teamvelix', 'velix', 'dist', 'runtime', 'start-dev.js'),\n path.join(cwd, 'packages', 'velix', 'dist', 'runtime', 'start-dev.js'),\n path.join(cwd, 'packages', 'velix', 'runtime', 'start-dev.ts'),\n ];\n\n const devScript = candidates.find(c => fs.existsSync(c));\n if (!devScript) {\n log.error('Could not find Velix runtime. Run `npm install` first.');\n process.exit(1);\n }\n\n const child = spawn(`npx tsx --no-cache \"${devScript}\"`, {\n stdio: 'inherit', cwd, shell: true,\n });\n\n child.on('error', (err) => {\n log.error(`Failed to start dev server: ${err.message}`);\n process.exit(1);\n });\n}\n"],"mappings":";;;;;;AAGA,OAAO,QAAQ;AACf,OAAO,UAAU;AAGjB,eAAsB,aAAa;AACjC,aAAW;AACX,MAAI,KAAK,gCAAgC;AAEzC,QAAM,EAAE,MAAM,IAAI,MAAM,OAAO,eAAe;AAE9C,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,aAAa;AAAA,IACjB,KAAK,KAAK,KAAK,gBAAgB,cAAc,SAAS,QAAQ,WAAW,cAAc;AAAA,IACvF,KAAK,KAAK,KAAK,YAAY,SAAS,QAAQ,WAAW,cAAc;AAAA,IACrE,KAAK,KAAK,KAAK,YAAY,SAAS,WAAW,cAAc;AAAA,EAC/D;AAEA,QAAM,YAAY,WAAW,KAAK,OAAK,GAAG,WAAW,CAAC,CAAC;AACvD,MAAI,CAAC,WAAW;AACd,QAAI,MAAM,wDAAwD;AAClE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,QAAQ,MAAM,uBAAuB,SAAS,KAAK;AAAA,IACvD,OAAO;AAAA,IAAW;AAAA,IAAK,OAAO;AAAA,EAChC,CAAC;AAED,QAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,QAAI,MAAM,+BAA+B,IAAI,OAAO,EAAE;AACtD,YAAQ,KAAK,CAAC;AAAA,EAChB,CAAC;AACH;","names":[]}