speexjs 0.2.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.
Files changed (67) hide show
  1. package/README.md +555 -0
  2. package/dist/cli/index.d.ts +1 -0
  3. package/dist/cli/index.js +1017 -0
  4. package/dist/cli/index.js.map +1 -0
  5. package/dist/client/index.d.ts +73 -0
  6. package/dist/client/index.js +927 -0
  7. package/dist/client/index.js.map +1 -0
  8. package/dist/client/signals/index.d.ts +62 -0
  9. package/dist/client/signals/index.js +248 -0
  10. package/dist/client/signals/index.js.map +1 -0
  11. package/dist/client/vdom/index.d.ts +50 -0
  12. package/dist/client/vdom/index.js +540 -0
  13. package/dist/client/vdom/index.js.map +1 -0
  14. package/dist/client/vdom/jsx-runtime.d.ts +9 -0
  15. package/dist/client/vdom/jsx-runtime.js +203 -0
  16. package/dist/client/vdom/jsx-runtime.js.map +1 -0
  17. package/dist/index-CMkhSDh7.d.ts +97 -0
  18. package/dist/index.d.ts +18 -0
  19. package/dist/index.js +6402 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/jsx-DGrnv8QB.d.ts +8 -0
  22. package/dist/response-Ca8KWK5_.d.ts +173 -0
  23. package/dist/rpc/index.d.ts +70 -0
  24. package/dist/rpc/index.js +136 -0
  25. package/dist/rpc/index.js.map +1 -0
  26. package/dist/schema/index.d.ts +231 -0
  27. package/dist/schema/index.js +1160 -0
  28. package/dist/schema/index.js.map +1 -0
  29. package/dist/server/auth/index.d.ts +61 -0
  30. package/dist/server/auth/index.js +462 -0
  31. package/dist/server/auth/index.js.map +1 -0
  32. package/dist/server/cache/index.d.ts +45 -0
  33. package/dist/server/cache/index.js +238 -0
  34. package/dist/server/cache/index.js.map +1 -0
  35. package/dist/server/container/index.d.ts +20 -0
  36. package/dist/server/container/index.js +62 -0
  37. package/dist/server/container/index.js.map +1 -0
  38. package/dist/server/controller/index.d.ts +37 -0
  39. package/dist/server/controller/index.js +139 -0
  40. package/dist/server/controller/index.js.map +1 -0
  41. package/dist/server/database/index.d.ts +461 -0
  42. package/dist/server/database/index.js +1977 -0
  43. package/dist/server/database/index.js.map +1 -0
  44. package/dist/server/events/index.d.ts +29 -0
  45. package/dist/server/events/index.js +159 -0
  46. package/dist/server/events/index.js.map +1 -0
  47. package/dist/server/gate/index.d.ts +36 -0
  48. package/dist/server/gate/index.js +169 -0
  49. package/dist/server/gate/index.js.map +1 -0
  50. package/dist/server/http/index.d.ts +45 -0
  51. package/dist/server/http/index.js +871 -0
  52. package/dist/server/http/index.js.map +1 -0
  53. package/dist/server/index.d.ts +79 -0
  54. package/dist/server/index.js +4185 -0
  55. package/dist/server/index.js.map +1 -0
  56. package/dist/server/middleware/index.d.ts +5 -0
  57. package/dist/server/middleware/index.js +416 -0
  58. package/dist/server/middleware/index.js.map +1 -0
  59. package/dist/server/router/index.d.ts +5 -0
  60. package/dist/server/router/index.js +231 -0
  61. package/dist/server/router/index.js.map +1 -0
  62. package/dist/server/storage/index.d.ts +66 -0
  63. package/dist/server/storage/index.js +244 -0
  64. package/dist/server/storage/index.js.map +1 -0
  65. package/dist/session-guard-CZeN87L9.d.ts +48 -0
  66. package/dist/types-CXH8hPei.d.ts +38 -0
  67. package/package.json +138 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/native/args.ts","../../src/native/colors.ts","../../src/cli/commands/init.ts","../../src/cli/commands/make-controller.ts","../../src/cli/commands/make-middleware.ts","../../src/cli/commands/make-schema.ts","../../src/cli/commands/list-routes.ts","../../src/cli/commands/serve.ts","../../src/native/logger.ts","../../src/cli/index.ts"],"sourcesContent":["export interface ParsedArgs {\n command: string\n subcommand?: string\n args: string[]\n options: Record<string, string | boolean | string[]>\n}\n\nexport function parseArgs(argv: string[]): ParsedArgs {\n const args = argv.slice(2)\n const result: ParsedArgs = {\n command: '',\n args: [],\n options: {},\n }\n\n if (args.length === 0) return result\n\n const first = args[0]!\n\n if (first.includes(':')) {\n result.command = first\n parseOptions(args.slice(1), result)\n return result\n }\n\n result.command = first\n\n if (args.length > 1) {\n const second = args[1]!\n if (!second.startsWith('-')) {\n result.subcommand = second\n result.args.push(second)\n parseOptions(args.slice(2), result)\n return result\n }\n }\n\n parseOptions(args.slice(1), result)\n return result\n}\n\nfunction parseOptions(argv: string[], result: ParsedArgs): void {\n let i = 0\n while (i < argv.length) {\n const arg = argv[i]!\n\n if (arg === '--') {\n for (let j = i + 1; j < argv.length; j++) {\n result.args.push(argv[j]!)\n }\n break\n }\n\n if (arg.startsWith('--no-')) {\n const key = arg.slice(5)\n if (key) {\n result.options[key] = false\n }\n i++\n continue\n }\n\n if (arg.startsWith('--')) {\n const key = arg.slice(2)\n if (i + 1 < argv.length && !argv[i + 1]!.startsWith('-')) {\n const val = argv[i + 1]!\n const existing = result.options[key]\n if (existing !== undefined) {\n result.options[key] = Array.isArray(existing)\n ? ([...existing, val] as string[])\n : [existing as string, val]\n } else {\n result.options[key] = val\n }\n i += 2\n } else {\n result.options[key] = true\n i++\n }\n continue\n }\n\n if (arg.startsWith('-') && arg.length === 2) {\n const key = arg.slice(1)\n if (i + 1 < argv.length && !argv[i + 1]!.startsWith('-')) {\n const val = argv[i + 1]!\n result.options[key] = val\n i += 2\n } else {\n result.options[key] = true\n i++\n }\n continue\n }\n\n result.args.push(arg)\n i++\n }\n}\n\nexport function toCommandName(argv: string[]): string {\n const args = argv.slice(2)\n if (args.length === 0) return ''\n\n const first = args[0]!\n\n if (first.includes(':')) return first\n\n if (args.length > 1 && !args[1]!.startsWith('-')) {\n return `${first}:${args[1]}`\n }\n\n return first\n}\n","const RESET = '\\x1b[0m'\n\nconst codes: Record<string, string> = {\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n gray: '\\x1b[90m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n italic: '\\x1b[3m',\n underline: '\\x1b[4m',\n}\n\nexport const colors = {\n red: (s: string): string => `${codes.red}${s}${RESET}`,\n green: (s: string): string => `${codes.green}${s}${RESET}`,\n yellow: (s: string): string => `${codes.yellow}${s}${RESET}`,\n blue: (s: string): string => `${codes.blue}${s}${RESET}`,\n magenta: (s: string): string => `${codes.magenta}${s}${RESET}`,\n cyan: (s: string): string => `${codes.cyan}${s}${RESET}`,\n gray: (s: string): string => `${codes.gray}${s}${RESET}`,\n white: (s: string): string => `${codes.white}${s}${RESET}`,\n bold: (s: string): string => `${codes.bold}${s}${RESET}`,\n dim: (s: string): string => `${codes.dim}${s}${RESET}`,\n italic: (s: string): string => `${codes.italic}${s}${RESET}`,\n underline: (s: string): string => `${codes.underline}${s}${RESET}`,\n}\n\nexport function stripColors(s: string): string {\n const ansi = String.fromCharCode(27)\n const re = new RegExp(`${ansi}\\\\[\\\\d+m`, 'g')\n return s.replace(re, '')\n}\n\nexport function isColorSupported(): boolean {\n if (typeof process === 'undefined') return false\n if (process.env.NO_COLOR) return false\n if (process.env.FORCE_COLOR) return true\n if (!process.stdout) return false\n if (!process.stdout.isTTY) return false\n return true\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\n\ninterface TemplateContent {\n dirs: string[]\n files: Record<string, string | ((name: string) => string)>\n}\n\nconst TEMPLATES: Record<string, TemplateContent> = {\n blank: {\n dirs: ['src'],\n files: {\n 'package.json': (name: string) =>\n JSON.stringify(\n {\n name,\n version: '0.1.0',\n type: 'module',\n private: true,\n scripts: {\n dev: 'SpeedX serve',\n build: 'SpeedX build',\n start: 'node dist/index.js',\n },\n dependencies: {\n SpeedX: 'latest',\n },\n devDependencies: {\n '@types/node': '^26.0.1',\n typescript: '^5.7.0',\n },\n },\n null,\n 2,\n ),\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n strict: true,\n declaration: true,\n sourceMap: true,\n esModuleInterop: true,\n isolatedModules: true,\n resolveJsonModule: true,\n outDir: './dist',\n rootDir: './src',\n },\n include: ['src/**/*.ts'],\n exclude: ['node_modules', 'dist'],\n },\n null,\n 2,\n ),\n 'src/index.ts': `import { SpeedX } from 'speedx/server'\n\nconst app = SpeedX()\n\nconst PORT = Number(process.env.PORT) || 3000\n\napp.get('/', async ({ response }) => {\n return response.html('<h1>SpeedX 🚀</h1>')\n})\n\napp.listen(PORT, () => {\n console.log(\\`SpeedX running on http://localhost:\\${PORT}\\`)\n})\n`,\n 'src/app.ts': `import { SpeedX } from 'speedx/server'\n\nexport function createApp() {\n const app = SpeedX()\n return app\n}\n`,\n '.env.example': `PORT=3000\nNODE_ENV=development\n`,\n '.gitignore': `node_modules/\ndist/\n.env\n*.log\n`,\n },\n },\n\n fullstack: {\n dirs: [\n 'src/server',\n 'src/server/controllers',\n 'src/server/middleware',\n 'src/client',\n 'src/client/components',\n 'src/client/pages',\n 'src/shared',\n 'public',\n ],\n files: {\n 'package.json': (name: string) =>\n JSON.stringify(\n {\n name,\n version: '0.1.0',\n type: 'module',\n private: true,\n scripts: {\n dev: 'SpeedX serve',\n build: 'tsc',\n start: 'node dist/server/index.js',\n },\n dependencies: {\n SpeedX: 'latest',\n },\n devDependencies: {\n '@types/node': '^26.0.1',\n typescript: '^5.7.0',\n },\n },\n null,\n 2,\n ),\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n strict: true,\n declaration: true,\n sourceMap: true,\n esModuleInterop: true,\n isolatedModules: true,\n resolveJsonModule: true,\n jsx: 'react-jsx',\n jsxImportSource: '@SpeedX/vdom',\n outDir: './dist',\n rootDir: './src',\n },\n include: ['src/**/*.ts', 'src/**/*.tsx'],\n exclude: ['node_modules', 'dist'],\n },\n null,\n 2,\n ),\n 'src/server/index.ts': `import { SpeedX } from 'speedx/server'\nimport { UserController } from './controllers/user.controller.js'\n\nconst PORT = Number(process.env.PORT) || 3000\n\nconst app = SpeedX()\n\napp.controller(UserController)\n\napp.get('/', async ({ response }) => {\n return response.html(\\`\n <!DOCTYPE html>\n <html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>SpeedX Fullstack</title>\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"/client/index.js\"></script>\n </body>\n </html>\n \\`)\n})\n\napp.listen(PORT, () => {\n console.log(\\`SpeedX running on http://localhost:\\${PORT}\\`)\n})\n`,\n 'src/server/controllers/user.controller.ts': `import { Controller, get, post } from 'speedx/server'\n\nexport class UserController extends Controller {\n @get('/users')\n async index({ response }) {\n return response.json({ data: [] })\n }\n\n @post('/users')\n async store({ request, response }) {\n const body = await request.body()\n return response.json({ data: body }, 201)\n }\n}\n`,\n 'src/client/index.ts': `import { createApp } from './app.js'\n\ndocument.addEventListener('DOMContentLoaded', () => {\n createApp().mount('#root')\n})\n`,\n 'src/client/app.ts': `export function createApp() {\n function mount(selector: string) {\n const root = document.querySelector(selector)\n if (!root) {\n console.error('Root element not found:', selector)\n return\n }\n root.innerHTML = \\`\n <div style=\"text-align:center;padding:2rem\">\n <h1>SpeedX Fullstack</h1>\n <p>Welcome to SpeedX!</p>\n </div>\n \\`\n }\n\n return { mount }\n}\n`,\n 'public/style.css': `* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n background: #0f172a;\n color: #e2e8f0;\n min-height: 100vh;\n}\n\n#root {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n}\n`,\n 'src/shared/types.ts': `export interface ApiResponse<T = unknown> {\n success: boolean\n data: T\n message?: string\n}\n`,\n '.env.example': `PORT=3000\nNODE_ENV=development\n`,\n '.gitignore': `node_modules/\ndist/\n.env\n*.log\n`,\n },\n },\n\n 'api-only': {\n dirs: ['src', 'src/controllers', 'src/middleware'],\n files: {\n 'package.json': (name: string) =>\n JSON.stringify(\n {\n name,\n version: '0.1.0',\n type: 'module',\n private: true,\n scripts: {\n dev: 'SpeedX serve',\n build: 'tsc',\n start: 'node dist/index.js',\n },\n dependencies: {\n SpeedX: 'latest',\n },\n devDependencies: {\n '@types/node': '^26.0.1',\n typescript: '^5.7.0',\n },\n },\n null,\n 2,\n ),\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n strict: true,\n declaration: true,\n sourceMap: true,\n esModuleInterop: true,\n isolatedModules: true,\n resolveJsonModule: true,\n outDir: './dist',\n rootDir: './src',\n },\n include: ['src/**/*.ts'],\n exclude: ['node_modules', 'dist'],\n },\n null,\n 2,\n ),\n 'src/index.ts': `import { SpeedX } from 'speedx/server'\n\nconst PORT = Number(process.env.PORT) || 3000\n\nconst app = SpeedX()\n\napp.get('/api/health', async ({ response }) => {\n return response.json({ status: 'ok', timestamp: new Date().toISOString() })\n})\n\napp.listen(PORT, () => {\n console.log(\\`SpeedX API running on http://localhost:\\${PORT}\\`)\n})\n`,\n 'src/controllers/health.controller.ts': `import { Controller, get } from 'speedx/server'\n\nexport class HealthController extends Controller {\n @get('/health')\n async check({ response }) {\n return response.json({\n status: 'ok',\n uptime: process.uptime(),\n })\n }\n}\n`,\n 'src/middleware/auth.ts': `import type { RouteContext } from 'speedx/server/router'\n\nexport function auth() {\n return async (ctx: RouteContext, next: () => Promise<void>) => {\n const token = ctx.request.headers.get('authorization')\n\n if (!token) {\n ctx.response.status(401).json({\n error: 'Unauthorized',\n message: 'Missing authorization header',\n })\n return\n }\n\n await next()\n }\n}\n`,\n '.env.example': `PORT=3000\nNODE_ENV=development\n`,\n '.gitignore': `node_modules/\ndist/\n.env\n*.log\n`,\n },\n },\n}\n\nconst TEMPLATE_ALIASES: Record<string, string> = {\n api: 'api-only',\n full: 'fullstack',\n}\n\nfunction getTemplate(name: string): string {\n return TEMPLATE_ALIASES[name] ?? name\n}\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toUpperCase())\n}\n\nexport async function initProject(\n name: string,\n options: Record<string, any>,\n): Promise<void> {\n const targetDir = resolve(process.cwd(), name)\n\n if (existsSync(targetDir)) {\n console.error(colors.red(`Directory '${name}' sudah ada!`))\n process.exit(1)\n }\n\n const templateName = getTemplate(String(options.template || 'blank'))\n const template = TEMPLATES[templateName]\n\n if (!template) {\n console.error(\n colors.red(\n `Template '${options.template}' tidak dikenal. Gunakan: blank, fullstack, api-only`,\n ),\n )\n process.exit(1)\n }\n\n mkdirSync(targetDir, { recursive: true })\n\n for (const dir of template.dirs) {\n mkdirSync(resolve(targetDir, dir), { recursive: true })\n }\n\n for (const [filePath, content] of Object.entries(template.files)) {\n const fullPath = resolve(targetDir, filePath)\n mkdirSync(dirname(fullPath), { recursive: true })\n\n const resolvedContent =\n typeof content === 'function' ? content(name) : content\n\n writeFileSync(fullPath, resolvedContent, 'utf-8')\n }\n\n if (options.git !== false) {\n try {\n const { execSync } = await import('child_process')\n execSync('git init', { cwd: targetDir, stdio: 'ignore' })\n } catch {\n // git not available\n }\n }\n\n if (options.install !== false) {\n const pm = String(options['package-manager'] || options.packageManager || 'npm')\n try {\n const { execSync } = await import('child_process')\n console.log(` ${colors.cyan('→')} Installing dependencies with ${pm}...`)\n execSync(`${pm} install`, { cwd: targetDir, stdio: 'inherit' })\n } catch {\n console.log(\n ` ${colors.yellow('!')} Dependency install skipped. Run '${pm} install' manually.`,\n )\n }\n }\n\n const packageManager = String(options['package-manager'] || options.packageManager || 'npm')\n\n console.log()\n console.log(`${colors.bold('╔════════════════════════════════════╗')}`)\n console.log(`${colors.bold('║')} ${colors.green('SpeedX 🚀 Project Created')}${colors.bold(' ║')}`)\n console.log(`${colors.bold('╚════════════════════════════════════╝')}`)\n console.log()\n console.log(` ${colors.bold('Name:')} ${toPascalCase(name)}`)\n console.log(` ${colors.bold('Template:')} ${templateName}`)\n console.log(` ${colors.bold('Dir:')} ${targetDir}`)\n console.log()\n console.log(` ${colors.cyan('$')} cd ${name}`)\n console.log(` ${colors.cyan('$')} ${packageManager} run dev`)\n console.log()\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toUpperCase())\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .toLowerCase()\n}\n\nfunction toCamelCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toLowerCase())\n}\n\nexport function makeController(name: string): void {\n const className = `${toPascalCase(name)}Controller`\n const fileName = `${toKebabCase(name)}.controller.ts`\n const targetDir = resolve(process.cwd(), 'src/server/controllers')\n const fullPath = resolve(targetDir, fileName)\n const varName = toCamelCase(name)\n\n if (existsSync(fullPath)) {\n console.error(colors.red(`File ${fileName} sudah ada!`))\n process.exit(1)\n }\n\n mkdirSync(targetDir, { recursive: true })\n\n const content = `import { Controller, get, post, put, del } from 'speedx/server'\nimport type { RouteContext } from 'speedx/server/router'\n\nexport class ${className} extends Controller {\n @get('/')\n async index({ response }: RouteContext) {\n return response.json({ data: [] })\n }\n\n @get('/:id')\n async show({ response, params }: RouteContext) {\n return response.json({ data: { id: params.id } })\n }\n\n @post('/')\n async store({ request, response }: RouteContext) {\n const body = await request.body()\n return response.json({ data: body }, 201)\n }\n\n @put('/:id')\n async update({ request, response, params }: RouteContext) {\n const body = await request.body()\n return response.json({ data: { id: params.id, ...body } })\n }\n\n @del('/:id')\n async destroy({ response, params }: RouteContext) {\n return response.json({ message: \\`${className} deleted \\${params.id}\\` })\n }\n}\n\nexport const ${varName}Controller = ${className}\n`\n\n writeFileSync(fullPath, content, 'utf-8')\n console.log(\n `${colors.green('✅')} Controller ${colors.bold(className)} dibuat di ${colors.cyan(fileName)}`,\n )\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toUpperCase())\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .toLowerCase()\n}\n\nfunction toCamelCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toLowerCase())\n}\n\nexport function makeMiddleware(name: string): void {\n const functionName = toCamelCase(name)\n const className = toPascalCase(name)\n const fileName = `${toKebabCase(name)}.middleware.ts`\n const targetDir = resolve(process.cwd(), 'src/server/middleware')\n const fullPath = resolve(targetDir, fileName)\n\n if (existsSync(fullPath)) {\n console.error(colors.red(`File ${fileName} sudah ada!`))\n process.exit(1)\n }\n\n mkdirSync(targetDir, { recursive: true })\n\n const content = `import type { RouteContext } from 'speedx/server/router'\n\nexport function ${functionName}(options?: Record<string, unknown>) {\n return async (ctx: RouteContext, next: () => Promise<void>) => {\n const start = Date.now()\n\n await next()\n\n const duration = Date.now() - start\n console.log(\\`[${className}Middleware] \\${ctx.request.method} \\${ctx.request.url} \\${duration}ms\\`)\n }\n}\n`\n\n writeFileSync(fullPath, content, 'utf-8')\n console.log(\n `${colors.green('✅')} Middleware ${colors.bold(functionName)} dibuat di ${colors.cyan(fileName)}`,\n )\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toUpperCase())\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .toLowerCase()\n}\n\nexport function makeSchema(name: string): void {\n const schemaName = `${toPascalCase(name)}Schema`\n const typeName = toPascalCase(name)\n const fileName = `${toKebabCase(name)}.schema.ts`\n const targetDir = resolve(process.cwd(), 'src/schemas')\n const fullPath = resolve(targetDir, fileName)\n\n if (existsSync(fullPath)) {\n console.error(colors.red(`File ${fileName} sudah ada!`))\n process.exit(1)\n }\n\n mkdirSync(targetDir, { recursive: true })\n\n const content = `import { s, type Infer } from 'speedx/schema'\n\nexport const ${schemaName} = s.object({\n id: s.string().uuid(),\n name: s.string().min(1).max(255),\n createdAt: s.string().datetime(),\n updatedAt: s.string().datetime().optional(),\n})\n\nexport type ${typeName} = Infer<typeof ${schemaName}>\n\nexport const create${typeName}Schema = s.object({\n name: s.string().min(1).max(255),\n})\n\nexport type Create${typeName} = Infer<typeof create${typeName}Schema>\n`\n\n writeFileSync(fullPath, content, 'utf-8')\n console.log(\n `${colors.green('✅')} Schema ${colors.bold(schemaName)} dibuat di ${colors.cyan(fileName)}`,\n )\n}\n","import { existsSync, readdirSync, readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\n\ninterface RouteInfo {\n method: string\n path: string\n}\n\nfunction extractDecorators(content: string): RouteInfo[] {\n const pattern = /@(get|post|put|patch|del|delete)\\s*\\(\\s*'([^']+)'\\s*\\)/g\n const results: RouteInfo[] = []\n\n let match: RegExpExecArray | null = pattern.exec(content)\n while (match !== null) {\n const method =\n match[1] === 'del' ? 'DELETE' : (match[1] as string).toUpperCase()\n const path = match[2] as string\n results.push({ method, path })\n match = pattern.exec(content)\n }\n\n return results\n}\n\nexport function listRoutes(): void {\n const routesDir = resolve(process.cwd(), 'src/server/controllers')\n\n if (!existsSync(routesDir)) {\n console.log(\n ` ${colors.yellow('!')} Tidak ada route terdaftar. Buat controller dulu:`,\n )\n console.log(` ${colors.cyan('speedx make:controller <name>')}`)\n return\n }\n\n const files = readdirSync(routesDir).filter(f => f.endsWith('.ts'))\n\n if (files.length === 0) {\n console.log(\n ` ${colors.yellow('!')} Tidak ada route terdaftar. Buat controller dulu:`,\n )\n console.log(` ${colors.cyan('speedx make:controller <name>')}`)\n return\n }\n\n let total = 0\n\n console.log()\n console.log(` ${colors.bold('📋 Daftar Route:')}`)\n console.log()\n\n for (const file of files) {\n const content = readFileSync(resolve(routesDir, file), 'utf-8')\n const routes = extractDecorators(content)\n\n if (routes.length > 0) {\n console.log(` ${colors.cyan('──')} ${colors.bold(file.replace('.controller.ts', ''))} ${colors.cyan('──')}`)\n\n for (const { method, path } of routes) {\n const coloredMethod = method === 'GET'\n ? colors.green(method.padEnd(8))\n : method === 'POST'\n ? colors.blue(method.padEnd(8))\n : method === 'PUT' || method === 'PATCH'\n ? colors.yellow(method.padEnd(8))\n : colors.red(method.padEnd(8))\n\n console.log(` ${coloredMethod} ${path}`)\n total++\n }\n\n console.log()\n }\n }\n\n console.log(` ${colors.dim(`${total} route${total !== 1 ? 's' : ''} ditemukan`)}`)\n console.log()\n}\n","import { existsSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\nimport { logger } from '../../native/logger.js'\n\ninterface ServeOptions {\n port?: string | number\n host?: string\n dev?: string | boolean\n}\n\nexport async function serve(options: Record<string, any>): Promise<void> {\n const opts: ServeOptions = {\n port: options.port || options.p || 3000,\n host: options.host || options.H || 'localhost',\n dev: options.dev !== false,\n }\n\n const port = parseInt(String(opts.port), 10)\n const host = String(opts.host)\n\n const serverEntry = resolve(process.cwd(), 'src/app.ts')\n const serverEntryAlt = resolve(process.cwd(), 'src/server/index.ts')\n const serverEntryIndex = resolve(process.cwd(), 'src/index.ts')\n\n let entryPath: string | null = null\n if (existsSync(serverEntry)) entryPath = serverEntry\n else if (existsSync(serverEntryAlt)) entryPath = serverEntryAlt\n else if (existsSync(serverEntryIndex)) entryPath = serverEntryIndex\n\n if (!entryPath) {\n console.error(\n colors.red(\n 'Tidak ditemukan file entry point. Buat src/app.ts atau src/index.ts',\n ),\n )\n process.exit(1)\n }\n\n if (opts.dev) {\n logger.info(\n `Development server starting at ${colors.cyan(`http://${host}:${port}`)}`,\n )\n\n try {\n const { app } = await import(entryPath)\n\n if (!app || typeof app.listen !== 'function') {\n console.error(\n colors.red(\n 'Entry point harus export { app } dengan method .listen()',\n ),\n )\n process.exit(1)\n }\n\n app.listen(port, host, () => {\n console.log()\n console.log(` ${colors.bold('SpeedX')} ${colors.green('running')}`)\n console.log(` ${colors.dim('→')} ${colors.cyan(`http://${host}:${port}`)}`)\n console.log()\n })\n } catch (err: any) {\n console.error(colors.red(`Gagal menjalankan server: ${err.message}`))\n process.exit(1)\n }\n } else {\n try {\n const { app } = await import(entryPath)\n\n if (!app || typeof app.listen !== 'function') {\n console.error(\n colors.red(\n 'Entry point harus export { app } dengan method .listen()',\n ),\n )\n process.exit(1)\n }\n\n app.listen(port, host, () => {\n console.log()\n console.log(` ${colors.bold('SpeedX')} ${colors.green('running')}`)\n console.log(` ${colors.dim('→')} ${colors.cyan(`http://${host}:${port}`)}`)\n console.log()\n })\n } catch (err: any) {\n console.error(colors.red(`Gagal menjalankan server: ${err.message}`))\n process.exit(1)\n }\n }\n}\n","import { colors, isColorSupported } from './colors.js'\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error'\n\nexport interface LoggerOptions {\n level?: LogLevel\n name?: string\n colors?: boolean\n timestamps?: boolean\n timezone?: 'WIB' | 'WITA' | 'WIT' | 'UTC'\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n}\n\nconst TIMEZONE_OFFSETS: Record<string, number> = {\n WIB: 7,\n WITA: 8,\n WIT: 9,\n UTC: 0,\n}\n\nfunction pad(n: number): string {\n return n.toString().padStart(2, '0')\n}\n\nexport function formatTimestamp(tz?: string): string {\n const offset = TIMEZONE_OFFSETS[tz ?? ''] ?? 7\n const now = new Date()\n const utc = now.getTime() + now.getTimezoneOffset() * 60000\n const local = new Date(utc + offset * 3600000)\n\n const y = local.getFullYear()\n const M = pad(local.getMonth() + 1)\n const d = pad(local.getDate())\n const h = pad(local.getHours())\n const m = pad(local.getMinutes())\n const s = pad(local.getSeconds())\n\n return `${y}-${M}-${d} ${h}:${m}:${s} ${tz ?? 'WIB'}`\n}\n\nconst LEVEL_PREFIX: Record<LogLevel, string> = {\n debug: 'DEBUG',\n info: 'INFO',\n warn: 'WARN',\n error: 'ERROR',\n}\n\nconst LEVEL_COLOR: Record<LogLevel, (s: string) => string> = {\n debug: colors.gray,\n info: colors.cyan,\n warn: colors.yellow,\n error: colors.red,\n}\n\nexport class Logger {\n private _level: LogLevel\n private _name: string\n private _useColors: boolean\n private _useTimestamps: boolean\n private _timezone: string\n\n constructor(options?: LoggerOptions) {\n this._level = options?.level ?? 'info'\n this._name = options?.name ?? ''\n this._useColors = options?.colors ?? isColorSupported()\n this._useTimestamps = options?.timestamps ?? true\n this._timezone = options?.timezone ?? 'WIB'\n }\n\n private _format(level: LogLevel, msg: string, meta?: Record<string, unknown>): string {\n const parts: string[] = []\n\n if (this._useTimestamps) {\n parts.push(formatTimestamp(this._timezone))\n }\n\n if (this._useColors) {\n parts.push(LEVEL_COLOR[level](LEVEL_PREFIX[level]))\n } else {\n parts.push(LEVEL_PREFIX[level])\n }\n\n if (this._name) {\n parts.push(this._useColors ? colors.dim(`[${this._name}]`) : `[${this._name}]`)\n }\n\n if (this._useColors) {\n parts.push(LEVEL_COLOR[level](msg))\n } else {\n parts.push(msg)\n }\n\n if (meta && Object.keys(meta).length > 0) {\n parts.push(JSON.stringify(meta))\n }\n\n return parts.join(' ')\n }\n\n debug(msg: string, meta?: Record<string, unknown>): void {\n if (LOG_LEVELS[this._level] > LOG_LEVELS.debug) return\n console.debug(this._format('debug', msg, meta))\n }\n\n info(msg: string, meta?: Record<string, unknown>): void {\n if (LOG_LEVELS[this._level] > LOG_LEVELS.info) return\n console.info(this._format('info', msg, meta))\n }\n\n warn(msg: string, meta?: Record<string, unknown>): void {\n if (LOG_LEVELS[this._level] > LOG_LEVELS.warn) return\n console.warn(this._format('warn', msg, meta))\n }\n\n error(msg: string, meta?: Record<string, unknown>): void {\n if (LOG_LEVELS[this._level] > LOG_LEVELS.error) return\n console.error(this._format('error', msg, meta))\n }\n\n child(name: string): Logger {\n const childName = this._name ? `${this._name}:${name}` : name\n return new Logger({\n level: this._level,\n name: childName,\n colors: this._useColors,\n timestamps: this._useTimestamps,\n timezone: this._timezone as LoggerOptions['timezone'],\n })\n }\n\n setLevel(level: LogLevel): void {\n this._level = level\n }\n}\n\nexport const logger = new Logger()\n","#!/usr/bin/env node\nimport { parseArgs } from '../native/args.js'\nimport { colors } from '../native/colors.js'\nimport { initProject } from './commands/init.js'\nimport { makeController } from './commands/make-controller.js'\nimport { makeMiddleware } from './commands/make-middleware.js'\nimport { makeSchema } from './commands/make-schema.js'\nimport { listRoutes } from './commands/list-routes.js'\nimport { serve } from './commands/serve.js'\n\nfunction showHelp(): void {\n console.log(`${colors.bold('SpeedX')} ${colors.cyan('v0.2.0')}`)\n console.log('Fullstack JavaScript/TypeScript Framework')\n console.log()\n console.log(`${colors.bold('Usage:')}`)\n console.log(' SpeedX init [name] [options] Buat project baru')\n console.log(' SpeedX make:controller <name> Generate controller')\n console.log(' SpeedX make:middleware <name> Generate middleware')\n console.log(' SpeedX make:schema <name> Generate schema')\n console.log(' SpeedX list-routes Lihat semua route')\n console.log(' SpeedX serve [options] Jalankan server')\n console.log(' SpeedX --help Bantuan ini')\n console.log()\n console.log(`${colors.bold('Aliases:')}`)\n console.log(' SpeedX -v, --version Lihat versi')\n console.log()\n console.log(`${colors.bold('Options:')}`)\n console.log(' --template <type> blank, fullstack, api-only')\n console.log(' --frontend <fe> super, react, vue')\n console.log(' --port <number> Port server (default: 3000)')\n console.log(' --host <string> Host address (default: localhost)')\n}\n\nasync function main(): Promise<void> {\n const parsed = parseArgs(process.argv)\n const command = parsed.command\n\n switch (command) {\n case 'init': {\n await initProject(parsed.args[0] || 'my-app', parsed.options)\n break\n }\n case 'make:controller': {\n if (!parsed.args[0]) {\n console.error(colors.red('Nama controller diperlukan'))\n console.log(` ${colors.cyan('SpeedX make:controller <name>')}`)\n process.exit(1)\n }\n await makeController(parsed.args[0])\n break\n }\n case 'make:middleware': {\n if (!parsed.args[0]) {\n console.error(colors.red('Nama middleware diperlukan'))\n console.log(` ${colors.cyan('SpeedX make:middleware <name>')}`)\n process.exit(1)\n }\n await makeMiddleware(parsed.args[0])\n break\n }\n case 'make:schema': {\n if (!parsed.args[0]) {\n console.error(colors.red('Nama schema diperlukan'))\n console.log(` ${colors.cyan('SpeedX make:schema <name>')}`)\n process.exit(1)\n }\n await makeSchema(parsed.args[0])\n break\n }\n case 'list-routes':\n case 'routes':\n case 'lr': {\n await listRoutes()\n break\n }\n case 'serve':\n case 'dev': {\n await serve(parsed.options)\n break\n }\n case 'help':\n case '--help':\n case '-h': {\n showHelp()\n break\n }\n case 'version':\n case '--version':\n case '-v': {\n console.log('SpeedX v0.2.0')\n break\n }\n default: {\n if (command) {\n console.error(`${colors.red(`Command '${command}' tidak dikenal`)}`)\n console.log()\n }\n showHelp()\n if (command) process.exit(1)\n }\n }\n}\n\nmain().catch(err => {\n console.error(colors.red(`Error: ${err.message}`))\n process.exit(1)\n})\n"],"mappings":"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","names":["existsSync","mkdirSync","writeFileSync","resolve","toPascalCase","resolve","existsSync","mkdirSync","writeFileSync","existsSync","mkdirSync","writeFileSync","resolve","toPascalCase","toKebabCase","toCamelCase","resolve","existsSync","mkdirSync","writeFileSync","existsSync","mkdirSync","writeFileSync","resolve","toPascalCase","toKebabCase","resolve","existsSync","mkdirSync","writeFileSync","existsSync","resolve","resolve","existsSync","existsSync","resolve","resolve","existsSync"]}
@@ -0,0 +1,73 @@
1
+ import { Signal } from './signals/index.js';
2
+ export { Computed, Effect, Subscribable, batch, computed, effect, isComputed, isSignal, mergeSignals, signal, toSignal, untracked } from './signals/index.js';
3
+ import { Component, VNode } from './vdom/index.js';
4
+ export { ComponentContext, VComponent, VElement, VFragment, VSignalNode, VText, createComponent, fragment, h, hydrate, normalizeChild, patch, render, renderToStream, renderToString, text } from './vdom/index.js';
5
+ export { F as Fragment, c as createElement } from '../jsx-DGrnv8QB.js';
6
+
7
+ declare class ServerRenderer {
8
+ render(component: Component, props?: any): Promise<string>;
9
+ renderToStream(component: Component, props?: any): ReadableStream<string>;
10
+ renderStatic(component: Component, props?: any): string;
11
+ renderServerComponent(path: string, props?: any): Promise<string>;
12
+ }
13
+ declare function generateHydrationScript(): string;
14
+
15
+ interface FrameworkAdapter {
16
+ name: string;
17
+ render(component: any, container: HTMLElement): void;
18
+ hydrate(component: any, container: HTMLElement): void;
19
+ renderToString(component: any): string;
20
+ }
21
+ declare function defineAdapter(adapter: FrameworkAdapter): FrameworkAdapter;
22
+
23
+ interface RouteDefinition {
24
+ path: string;
25
+ component: Component;
26
+ layout?: Component;
27
+ loading?: Component;
28
+ error?: Component;
29
+ guards?: RouteGuard[];
30
+ }
31
+ type RouteGuard = (to: string, from: string) => boolean | Promise<boolean>;
32
+ interface RouterOptions {
33
+ basePath?: string;
34
+ mode?: 'history' | 'hash';
35
+ scrollRestoration?: boolean;
36
+ }
37
+ interface RouteMatch {
38
+ path: string;
39
+ pattern: string;
40
+ component: Component;
41
+ layout?: Component;
42
+ loading?: Component;
43
+ error?: Component;
44
+ params: Record<string, string>;
45
+ query: Record<string, string>;
46
+ }
47
+ declare class ClientRouter {
48
+ private _current;
49
+ private _params;
50
+ private _query;
51
+ private _history;
52
+ private _historyIndex;
53
+ private _routes;
54
+ private _options;
55
+ constructor(routes: RouteDefinition[], options?: RouterOptions);
56
+ get current(): Signal<RouteMatch | null>;
57
+ get params(): Signal<Record<string, string>>;
58
+ get query(): Signal<Record<string, string>>;
59
+ private _getCurrentPath;
60
+ private _resolveRoute;
61
+ navigate(path: string): Promise<void>;
62
+ back(): void;
63
+ forward(): void;
64
+ link(props: {
65
+ to: string;
66
+ children: any;
67
+ class?: string;
68
+ activeClass?: string;
69
+ onClick?: (e: MouseEvent) => void;
70
+ }): VNode;
71
+ }
72
+
73
+ export { ClientRouter, Component, type FrameworkAdapter, type RouteDefinition, type RouteGuard, type RouterOptions, ServerRenderer, Signal, VNode, defineAdapter, generateHydrationScript };