@solution-lib/space 0.1.1 → 0.1.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.
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/app/mod/templateRegistry.ts","../src/app/mod/spaceManager.ts","../src/app/mod/jsonFormatter.ts","../src/app/mod/packageManager.ts","../src/app/mod/promptHelper.ts","../src/app/mod/loader.ts","../src/app/index.ts","../src/main.ts"],"names":["templateRegistry_exports","__export","TemplateRegistry","init_templateRegistry","__esmMin","type","includeUnready","templates","t","defaultTemplate","template","typeConfig","PACKAGE_JSON_KEY_ORDER","SPACE_FILE_KEY_ORDER","JsonFormatter","obj","options","indent","alignColons","sortKeys","tabWidth","keyOrder","globalMaxKeyLength","maxIndentWidth","filePath","content","D","formatted","currentDepth","maxDepth","item","depth","value","keys","sortAlphabetically","orderedKeys","unorderedKeys","key","a","b","maxLength","traverse","keyLength","arr","currentIndent","currentIndentWidth","jsonKey","indentDiff","keyDiff","padding","SpaceManager","basePath","config","spacePath","targetPath","createdDir","error","configPath","dirPath","repoUrl","execSync","gitPath","e","isOrgProject","hasGithubId","githubOwner","gitUrl","homepage","issuesUrl","packageTag","tagBadge","authorUrl","allFiles","packageJson","oldBinName","binPath","arrayOfFiles","file","fullPath","configWithDefaults","configContent","maxRetries","i","resolve","PackageManagerWrapper","packages","args","packageName","script","scriptCommand","command","loader","access","publishProc","versionMatch","stderr","proc","pkgPath","I","T","pkg","PromptHelper","params","name","description","author","input","orgRegex","simpleRegex","libReady","cliReady","serverReady","webReady","select","allTemplates","templateChoices","statusEmoji","statusText","packageManager","authorEmail","githubId","keywordsInput","keywords","k","license","spaceName","confirm","tag","shouldRemove","message","defaultValue","rl","defaultText","answer","currentPackages","packagesInput","isDev","p","dirName","nextSteps","step","Loader","successMessage","errorMessage","App","_App","cli","fullName","match","w","answers","org","currentDirName","E","kwString","installAnswers","updateAnswers","scriptName","silently","testPath","mainFile","result","spawnSync","possiblePaths","packageJsonPath","publishAnswers","app"],"mappings":"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","file":"main.js","sourcesContent":["// src/app/mod/templateRegistry.ts\r\n//\r\n// Developed with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import type { SpaceType, SpaceTypeConfig, TemplateVariant } from '../../types.d';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n export class TemplateRegistry {\r\n\r\n // ┌──────────────────────────────── INIT ──────────────────────────────┐\r\n\r\n private static readonly TEMPLATES: Record<SpaceType, SpaceTypeConfig> = {\r\n\r\n lib: {\r\n type : 'lib',\r\n defaultTemplate : 'clean',\r\n templates : [\r\n {\r\n name : 'clean',\r\n label : 'Clean Library',\r\n description : 'Zero dependencies - just TypeScript and build tools',\r\n repo : 'lib',\r\n requiresSetup : false,\r\n ready : true\r\n }\r\n ]\r\n },\r\n\r\n cli: {\r\n type : 'cli',\r\n defaultTemplate : 'clean',\r\n templates : [\r\n {\r\n name : 'clean',\r\n label : 'Clean CLI',\r\n description : 'Comes with @je-es/cli library for quick CLI development',\r\n repo : 'cli',\r\n deps : ['@je-es/cli'],\r\n requiresSetup : true,\r\n ready : true\r\n }\r\n ]\r\n },\r\n\r\n server: {\r\n type : 'server',\r\n defaultTemplate : 'clean',\r\n templates : [\r\n {\r\n name : 'clean',\r\n label : 'Clean Server',\r\n description : 'Comes with @je-es/server library for quick server development',\r\n repo : 'server',\r\n deps : ['@je-es/server'],\r\n requiresSetup : true,\r\n ready : true\r\n },\r\n ]\r\n },\r\n\r\n web: {\r\n type : 'web',\r\n defaultTemplate : 'clean',\r\n templates : [\r\n {\r\n name : 'clean',\r\n label : 'Clean Web App',\r\n description : 'Comes with @je-es/server and @je-es/client libs for quick web development',\r\n repo : 'web',\r\n deps : ['@je-es/server', '@je-es/client'],\r\n requiresSetup : true,\r\n ready : true\r\n },\r\n ]\r\n }\r\n\r\n };\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── MAIN ──────────────────────────────┐\r\n\r\n /**\r\n * Get all templates for a space type\r\n */\r\n static getTemplatesForType(type: SpaceType, includeUnready: boolean = false): SpaceTypeConfig['templates'] {\r\n const templates = this.TEMPLATES[type]?.templates || [];\r\n return includeUnready ? templates : templates.filter(t => t.ready);\r\n }\r\n\r\n /**\r\n * Get only ready templates for a space type\r\n */\r\n static getReadyTemplatesForType(type: SpaceType): SpaceTypeConfig['templates'] {\r\n return this.getTemplatesForType(type, false);\r\n }\r\n\r\n /**\r\n * Get default template for a space type\r\n */\r\n static getDefaultTemplate(type: SpaceType): TemplateVariant {\r\n const templates = this.TEMPLATES[type];\r\n if (!templates) return 'clean';\r\n\r\n // Try to find a ready template that matches the default\r\n const defaultTemplate = templates.templates.find(\r\n t => t.name === templates.defaultTemplate && t.ready\r\n );\r\n\r\n if (defaultTemplate) {\r\n return defaultTemplate.name;\r\n }\r\n\r\n // Fallback to first ready template\r\n const firstReady = templates.templates.find(t => t.ready);\r\n return firstReady?.name || templates.defaultTemplate;\r\n }\r\n\r\n /**\r\n * Get template configuration\r\n */\r\n static getTemplate(type: SpaceType, template: TemplateVariant) {\r\n const typeConfig = this.TEMPLATES[type];\r\n if (!typeConfig) return null;\r\n\r\n return typeConfig.templates.find(t => t.name === template);\r\n }\r\n\r\n /**\r\n * Check if template is ready for use\r\n */\r\n static isTemplateReady(type: SpaceType, template: TemplateVariant): boolean {\r\n const config = this.getTemplate(type, template);\r\n return config?.ready || false;\r\n }\r\n\r\n /**\r\n * Validate template variant for a space type\r\n */\r\n static isValidTemplate(type: SpaceType, template: TemplateVariant): boolean {\r\n const templates = this.getTemplatesForType(type);\r\n return templates.some(t => t.name === template);\r\n }\r\n\r\n /**\r\n * Get repository name for a template\r\n */\r\n static getRepoName(type: SpaceType, template: TemplateVariant): string {\r\n const config = this.getTemplate(type, template);\r\n return config?.repo || 'ready-lib';\r\n }\r\n\r\n /**\r\n * Get all space types\r\n */\r\n static getSpaceTypes(): SpaceType[] {\r\n return Object.keys(this.TEMPLATES) as SpaceType[];\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/app/mod/spaceManager.ts\r\n//\r\n// Developed with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import * as fs from 'fs';\r\n import * as path from 'path';\r\n import type { SpaceConfig, TemplateVariant } from '../../types.d';\r\n import { TemplateRegistry } from './templateRegistry';\r\n import { JsonFormatter, PACKAGE_JSON_KEY_ORDER, SPACE_FILE_KEY_ORDER } from './jsonFormatter';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n export class SpaceManager {\r\n\r\n // ┌──────────────────────────────── INIT ──────────────────────────────┐\r\n\r\n private basePath: string;\r\n\r\n constructor(basePath: string = process.cwd()) {\r\n this.basePath = basePath;\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── MAIN ──────────────────────────────┐\r\n\r\n // Create a new space by cloning from template\r\n async createSpace(config: SpaceConfig, spacePath?: string): Promise<void> {\r\n const targetPath = spacePath || path.join(this.basePath, config.repo.name);\r\n\r\n // Check if space already exists\r\n if (fs.existsSync(targetPath)) {\r\n throw new Error(`Space path \"${targetPath}\" already exists!`);\r\n }\r\n\r\n let createdDir = false;\r\n\r\n try {\r\n // Create directory if it doesn't exist\r\n if (!fs.existsSync(targetPath)) {\r\n fs.mkdirSync(targetPath, { recursive: true });\r\n createdDir = true;\r\n }\r\n\r\n // Clone template from @solution-dist\r\n await this.cloneTemplate(config.type, targetPath, config, config.template);\r\n\r\n // Create .space config file\r\n this.createSpaceConfig(targetPath, config);\r\n\r\n } catch (error) {\r\n // Cleanup on failure - only if we created the directory\r\n if (createdDir && fs.existsSync(targetPath)) {\r\n try {\r\n // Try to clean up, but don't fail if we can't\r\n await this.safeDeleteDirectory(targetPath);\r\n } catch {\r\n // Ignore cleanup errors\r\n console.warn(`Warning: Could not clean up directory at \"${targetPath}\"`);\r\n }\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n // Load space configuration from .space file\r\n loadSpaceConfig(spacePath?: string): SpaceConfig | null {\r\n const targetPath = spacePath || this.basePath;\r\n const configPath = path.join(targetPath, '.space');\r\n\r\n if (!fs.existsSync(configPath)) {\r\n return null;\r\n }\r\n\r\n const content = fs.readFileSync(configPath, 'utf-8');\r\n return JSON.parse(content);\r\n }\r\n\r\n // Check if current directory is a space\r\n isSpace(dirPath?: string): boolean {\r\n const targetPath = dirPath || this.basePath;\r\n return fs.existsSync(path.join(targetPath, '.space'));\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── HELP ──────────────────────────────┐\r\n\r\n // Clone template from @solution-dist repository\r\n private async cloneTemplate(\r\n type: 'lib' | 'cli' | 'server',\r\n targetPath: string,\r\n config: SpaceConfig,\r\n template: TemplateVariant\r\n ): Promise<void> {\r\n const repoName = TemplateRegistry.getRepoName(type, template);\r\n const repoUrl = `https://github.com/solution-dist/${repoName}.git`;\r\n\r\n try {\r\n const { execSync } = await import('child_process');\r\n\r\n // Clone silently (no output to terminal)\r\n execSync(\r\n `git clone --quiet --depth 1 ${repoUrl} \"${targetPath}\"`,\r\n { stdio: 'pipe' }\r\n );\r\n\r\n // Remove .git directory\r\n const gitPath = path.join(targetPath, '.git');\r\n if (fs.existsSync(gitPath)) {\r\n await this.safeDeleteDirectory(gitPath);\r\n }\r\n\r\n // Update files with project info\r\n await this.updateTemplateFiles(targetPath, config);\r\n\r\n } catch (e: unknown) {\r\n // Check if it's a \"repository not found\" error\r\n if(e instanceof Error) {\r\n if (e.message && e.message.includes('Repository not found')) {\r\n throw new Error(\r\n `Template repository not found: ${repoUrl}\\n` +\r\n `This template is not yet available. Please mark it as ready: false in templateRegistry.ts`\r\n );\r\n }\r\n\r\n throw new Error(`Failed to clone template from ${repoUrl}: ${e.message || e}`);\r\n } else {\r\n throw new Error(`Failed to clone template from ${repoUrl}: ${e}`);\r\n }\r\n }\r\n }\r\n\r\n // Update template files with project-specific information\r\n private async updateTemplateFiles(\r\n spacePath: string,\r\n config: SpaceConfig\r\n ): Promise<void> {\r\n\r\n // Generate context-aware URLs and values\r\n const isOrgProject = config.repo.org && config.repo.org.trim() !== '';\r\n const hasGithubId = config.author.id && config.author.id.trim() !== '';\r\n\r\n // Determine the GitHub owner (org or personal account)\r\n const githubOwner = isOrgProject ? config.repo.org : (hasGithubId ? config.author.id : '');\r\n\r\n // Generate URLs based on context\r\n const gitUrl = githubOwner\r\n ? `git+https://github.com/${githubOwner}/${config.repo.name}.git`\r\n : '';\r\n\r\n const homepage = githubOwner\r\n ? `https://github.com/${githubOwner}/${config.repo.name}#readme`\r\n : '';\r\n\r\n const issuesUrl = githubOwner\r\n ? `https://github.com/${githubOwner}/${config.repo.name}/issues`\r\n : '';\r\n\r\n // Prepare full package name (tag)\r\n const packageTag = isOrgProject\r\n ? `@${config.repo.org}/${config.repo.name}`\r\n : config.repo.name;\r\n\r\n // Prepare tag badge - format for shields.io badge\r\n let tagBadge = '🔥-';\r\n if (isOrgProject) {\r\n tagBadge += `@${(config.repo.org.replace(/-/g, '--') + '/' + config.repo.name.replace(/-/g, '--')).replace(/ /g, '_')}`;\r\n } else if (config.author.name) {\r\n tagBadge += (config.author.name.replace(/-/g, '--') + '/' + config.repo.name.replace(/-/g, '--')).replace(/ /g, '_');\r\n } else {\r\n tagBadge += (config.repo.name.replace(/-/g, '--')).replace(/ /g, '_');\r\n }\r\n\r\n // Prepare author URL\r\n const authorUrl = hasGithubId\r\n ? `https://github.com/${config.author.id}`\r\n : (config.author.url || '');\r\n\r\n // ✅ REMOVED: keywordsJson preparation - we'll handle keywords in package.json only\r\n\r\n // Recursively find all files\r\n const allFiles = this.getAllFiles(spacePath);\r\n\r\n for (const filePath of allFiles) {\r\n // Skip node_modules and .git\r\n if (filePath.includes('node_modules') || filePath.includes('.git')) {\r\n continue;\r\n }\r\n\r\n try {\r\n let content = fs.readFileSync(filePath, 'utf-8');\r\n // let hasChanges = false;\r\n\r\n // STEP 1: Replace template variables in the raw content first\r\n if (content.includes('{{')) {\r\n // hasChanges = true;\r\n\r\n // Replace all placeholders\r\n content = content\r\n // Package tag (full name with org if exists)\r\n .replace(/\\{\\{tag\\}\\}/g, packageTag)\r\n .replace(/\\{\\{tag-badge\\}\\}/g, tagBadge)\r\n\r\n // Repo info\r\n .replace(/\\{\\{name\\}\\}/g, config.repo.name)\r\n .replace(/\\{\\{repo\\}\\}/g, config.repo.name)\r\n .replace(/\\{\\{org\\}\\}/g, config.repo.org || '')\r\n .replace(/\\{\\{desc\\}\\}/g, config.repo.desc || `A ${config.type} space`)\r\n .replace(/\\{\\{description\\}\\}/g, config.repo.desc || `A ${config.type} space`)\r\n .replace(/\\{\\{version\\}\\}/g, config.repo.version)\r\n .replace(/\\{\\{license\\}\\}/g, config.repo.license || 'MIT')\r\n // ✅ REMOVED: keyword replacements here - handled in package.json section\r\n // .replace(/\\{\\{kw\\}\\}/g, keywordsJson)\r\n // .replace(/\\{\\{keywords\\}\\}/g, keywordsJson)\r\n\r\n // URLs\r\n .replace(/\\{\\{url\\}\\}/g, gitUrl)\r\n .replace(/\\{\\{repo_url\\}\\}/g, gitUrl)\r\n .replace(/\\{\\{git_url\\}\\}/g, gitUrl)\r\n .replace(/\\{\\{homepage\\}\\}/g, homepage)\r\n .replace(/\\{\\{issues\\}\\}/g, issuesUrl)\r\n\r\n // Space type, template, and PM\r\n .replace(/\\{\\{type\\}\\}/g, config.type)\r\n .replace(/\\{\\{template\\}\\}/g, config.template || 'clean')\r\n .replace(/\\{\\{pm\\}\\}/g, config.pm)\r\n\r\n // Author info\r\n .replace(/\\{\\{author\\}\\}/g, config.author.name || '')\r\n .replace(/\\{\\{author_name\\}\\}/g, config.author.name || '')\r\n .replace(/\\{\\{author_id\\}\\}/g, config.author.id || '')\r\n .replace(/\\{\\{author_email\\}\\}/g, config.author.email || '')\r\n .replace(/\\{\\{author_url\\}\\}/g, authorUrl);\r\n\r\n // Write the updated content\r\n fs.writeFileSync(filePath, content, 'utf-8');\r\n }\r\n\r\n // Special handling for package.json FIRST\r\n if (filePath.endsWith('package.json')) {\r\n // STEP 2: Parse and further update the JSON\r\n const packageJson = JSON.parse(content);\r\n\r\n // Set full package name (with org if exists)\r\n packageJson.name = packageTag;\r\n packageJson.version = config.repo.version;\r\n packageJson.description = config.repo.desc || `A ${config.type} space`;\r\n packageJson.license = config.repo.license || 'MIT';\r\n\r\n // ✅ Set keywords as array (this is correct and won't cause double-stringification)\r\n if (config.repo.kw && config.repo.kw.length > 0) {\r\n packageJson.keywords = config.repo.kw;\r\n } else {\r\n packageJson.keywords = [];\r\n }\r\n\r\n // Set homepage\r\n if (homepage) {\r\n packageJson.homepage = homepage;\r\n }\r\n\r\n // Set bugs/issues URL\r\n if (issuesUrl) {\r\n if (!packageJson.bugs) {\r\n packageJson.bugs = {};\r\n }\r\n packageJson.bugs.url = issuesUrl;\r\n }\r\n\r\n // Set author\r\n if (config.author.name) {\r\n if (config.author.email) {\r\n packageJson.author = {\r\n name: config.author.name,\r\n email: config.author.email,\r\n url: authorUrl || undefined\r\n };\r\n } else {\r\n packageJson.author = {\r\n name: config.author.name,\r\n url: authorUrl || undefined\r\n };\r\n }\r\n }\r\n\r\n // Set repository URL\r\n if (gitUrl) {\r\n packageJson.repository = {\r\n type: 'git',\r\n url: gitUrl\r\n };\r\n }\r\n\r\n // Update bin name for CLI projects\r\n if (config.type === 'cli' && packageJson.bin) {\r\n const oldBinName = Object.keys(packageJson.bin)[0];\r\n const binPath = packageJson.bin[oldBinName];\r\n delete packageJson.bin[oldBinName];\r\n packageJson.bin[config.repo.name] = binPath;\r\n }\r\n\r\n // Ensure bun engine exists\r\n if (!packageJson.engines) {\r\n packageJson.engines = {};\r\n }\r\n if (!packageJson.engines.bun) {\r\n packageJson.engines.bun = '>=1.0.0';\r\n }\r\n\r\n // STEP 3: Format and write package.json\r\n content = JsonFormatter.format(packageJson, { keyOrder: PACKAGE_JSON_KEY_ORDER });\r\n fs.writeFileSync(filePath, content + '\\n', 'utf-8');\r\n continue; // Skip the rest of the loop for package.json\r\n }\r\n\r\n } catch {\r\n // Silently skip files that can't be read/updated (like binaries)\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n // Recursively get all files in a directory\r\n private getAllFiles(dirPath: string, arrayOfFiles: string[] = []): string[] {\r\n const files = fs.readdirSync(dirPath);\r\n\r\n files.forEach((file) => {\r\n const fullPath = path.join(dirPath, file);\r\n\r\n if (fs.statSync(fullPath).isDirectory()) {\r\n arrayOfFiles = this.getAllFiles(fullPath, arrayOfFiles);\r\n } else {\r\n arrayOfFiles.push(fullPath);\r\n }\r\n });\r\n\r\n return arrayOfFiles;\r\n }\r\n\r\n // Create .space configuration file\r\n private createSpaceConfig(spacePath: string, config: SpaceConfig): void {\r\n const configPath = path.join(spacePath, '.space');\r\n\r\n // Generate URLs for .space file\r\n const isOrgProject = config.repo.org && config.repo.org.trim() !== '';\r\n const hasGithubId = config.author.id && config.author.id.trim() !== '';\r\n const githubOwner = isOrgProject ? config.repo.org : (hasGithubId ? config.author.id : '');\r\n\r\n const gitUrl = githubOwner\r\n ? `git+https://github.com/${githubOwner}/${config.repo.name}.git`\r\n : '';\r\n\r\n const homepage = githubOwner\r\n ? `https://github.com/${githubOwner}/${config.repo.name}#readme`\r\n : '';\r\n\r\n const issuesUrl = githubOwner\r\n ? `https://github.com/${githubOwner}/${config.repo.name}/issues`\r\n : '';\r\n\r\n const authorUrl = hasGithubId\r\n ? `https://github.com/${config.author.id}`\r\n : (config.author.url || '');\r\n\r\n const configWithDefaults = {\r\n type: config.type,\r\n template: config.template || 'clean',\r\n pm: config.pm,\r\n repo: {\r\n org: config.repo.org || '',\r\n name: config.repo.name,\r\n version: config.repo.version,\r\n desc: config.repo.desc || `A ${config.type} space`,\r\n kw: config.repo.kw || [],\r\n license: config.repo.license || 'MIT',\r\n issues: issuesUrl,\r\n homepage: homepage,\r\n git_url: gitUrl\r\n },\r\n author: {\r\n id: config.author.id || '',\r\n name: config.author.name || '',\r\n email: config.author.email || '',\r\n url: authorUrl\r\n },\r\n createdAt: new Date().toISOString()\r\n };\r\n\r\n const configContent = JsonFormatter.format(configWithDefaults, { keyOrder: SPACE_FILE_KEY_ORDER });\r\n\r\n fs.writeFileSync(configPath, configContent + '\\n', 'utf-8');\r\n }\r\n\r\n // Safely delete directory with retry logic\r\n private async safeDeleteDirectory(dirPath: string, maxRetries: number = 3): Promise<void> {\r\n for (let i = 0; i < maxRetries; i++) {\r\n try {\r\n fs.rmSync(dirPath, {\r\n recursive: true,\r\n force: true,\r\n maxRetries: 3,\r\n retryDelay: 100\r\n });\r\n\r\n // Verify deletion\r\n if (!fs.existsSync(dirPath)) {\r\n return;\r\n }\r\n } catch (error) {\r\n if (i === maxRetries - 1) {\r\n throw error;\r\n }\r\n // Wait before retry\r\n await new Promise(resolve => setTimeout(resolve, 300 * (i + 1)));\r\n }\r\n }\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/app/mod/jsonFormatter.ts\r\n//\r\n// Developed with ❤️ by Maysara.\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n import * as fs from 'fs';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n export interface FormatOptions {\r\n indent? : string; // default: '\\t'\r\n alignColons? : boolean; // default: true\r\n sortKeys? : boolean; // default: false\r\n tabWidth? : number; // default: 4 (visual width of a tab character)\r\n keyOrder? : string[]; // custom key order (keys not in list appear at end)\r\n }\r\n\r\n export const PACKAGE_JSON_KEY_ORDER = [\r\n 'name',\r\n 'version',\r\n 'description',\r\n 'keywords',\r\n 'license',\r\n 'homepage',\r\n 'bugs',\r\n 'author',\r\n 'repository',\r\n 'type',\r\n 'main',\r\n 'types',\r\n 'bin',\r\n 'files',\r\n 'exports',\r\n 'scripts',\r\n 'engines',\r\n 'peerDependencies',\r\n 'dependencies',\r\n 'devDependencies'\r\n ];\r\n\r\n export const SPACE_FILE_KEY_ORDER = [\r\n 'type',\r\n 'template',\r\n 'pm',\r\n 'repo',\r\n 'author',\r\n 'createdAt'\r\n ];\r\n\r\n // For nested objects in repo\r\n export const REPO_KEY_ORDER = [\r\n 'org',\r\n 'name',\r\n 'version',\r\n 'desc',\r\n 'kw',\r\n 'license',\r\n 'issues',\r\n 'homepage',\r\n 'git_url'\r\n ];\r\n\r\n // For nested objects in author\r\n export const AUTHOR_KEY_ORDER = [\r\n 'id',\r\n 'name',\r\n 'email',\r\n 'url'\r\n ];\r\n\r\n type JsonValue = string | number | boolean | null | JsonObject | JsonArray;\r\n interface JsonObject {\r\n [key: string]: JsonValue;\r\n }\r\n type JsonArray = JsonValue[];\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n export class JsonFormatter {\r\n\r\n // ┌──────────────────────────────── MAIN ──────────────────────────────┐\r\n\r\n // Format JSON with custom alignment and indentation\r\n static format(obj: JsonValue, options: FormatOptions = {}): string {\r\n const indent = options.indent || '\\t';\r\n const alignColons = options.alignColons !== false;\r\n const sortKeys = options.sortKeys || false;\r\n const tabWidth = options.tabWidth || 4;\r\n const keyOrder = options.keyOrder || [];\r\n\r\n // Calculate GLOBAL max key length across all nesting levels\r\n const globalMaxKeyLength = alignColons ? this.calculateGlobalMaxKeyLength(obj) : 0;\r\n\r\n // Calculate max indent depth (in visual characters)\r\n const maxDepth = this.calculateMaxDepth(obj);\r\n const maxIndentWidth = maxDepth * (indent === '\\t' ? tabWidth : indent.length);\r\n\r\n return this.formatValue(obj, 0, indent, alignColons, sortKeys, globalMaxKeyLength, maxIndentWidth, tabWidth, keyOrder);\r\n }\r\n\r\n // Format and write to file\r\n static formatFile(filePath: string, options: FormatOptions = {}): void {\r\n const content = fs.readFileSync(filePath, 'utf-8');\r\n const obj = JSON.parse(content) as JsonValue;\r\n const formatted = this.format(obj, options);\r\n fs.writeFileSync(filePath, formatted + '\\n', 'utf-8');\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── HELP ──────────────────────────────┐\r\n\r\n // Calculate the maximum nesting depth\r\n private static calculateMaxDepth(obj: JsonValue, currentDepth: number = 0): number {\r\n if (!obj || typeof obj !== 'object') {\r\n return currentDepth;\r\n }\r\n\r\n let maxDepth = currentDepth;\r\n\r\n if (Array.isArray(obj)) {\r\n obj.forEach(item => {\r\n const depth = this.calculateMaxDepth(item, currentDepth + 1);\r\n if (depth > maxDepth) maxDepth = depth;\r\n });\r\n } else {\r\n Object.values(obj).forEach(value => {\r\n const depth = this.calculateMaxDepth(value, currentDepth + 1);\r\n if (depth > maxDepth) maxDepth = depth;\r\n });\r\n }\r\n\r\n return maxDepth;\r\n }\r\n\r\n // Sort keys based on custom order or alphabetically\r\n private static sortKeys(keys: string[], keyOrder: string[], sortAlphabetically: boolean): string[] {\r\n if (keyOrder.length === 0) {\r\n return sortAlphabetically ? keys.sort() : keys;\r\n }\r\n\r\n // Separate keys into ordered and unordered\r\n const orderedKeys: string[] = [];\r\n const unorderedKeys: string[] = [];\r\n\r\n keys.forEach(key => {\r\n if (keyOrder.includes(key)) {\r\n orderedKeys.push(key);\r\n } else {\r\n unorderedKeys.push(key);\r\n }\r\n });\r\n\r\n // Sort ordered keys by their position in keyOrder\r\n orderedKeys.sort((a, b) => keyOrder.indexOf(a) - keyOrder.indexOf(b));\r\n\r\n // Sort unordered keys alphabetically if sortKeys is true\r\n if (sortAlphabetically) {\r\n unorderedKeys.sort();\r\n }\r\n\r\n // Return ordered keys first, then unordered\r\n return [...orderedKeys, ...unorderedKeys];\r\n }\r\n\r\n private static calculateGlobalMaxKeyLength(obj: JsonValue): number {\r\n let maxLength = 0;\r\n\r\n const traverse = (value: JsonValue): void => {\r\n if (!value || typeof value !== 'object') {\r\n return;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n value.forEach(item => traverse(item));\r\n return;\r\n }\r\n\r\n // It's an object\r\n const keys = Object.keys(value);\r\n keys.forEach(key => {\r\n const keyLength = JSON.stringify(key).length;\r\n if (keyLength > maxLength) {\r\n maxLength = keyLength;\r\n }\r\n traverse(value[key]);\r\n });\r\n };\r\n\r\n traverse(obj);\r\n return maxLength;\r\n }\r\n\r\n // Format any JSON value recursively\r\n private static formatValue(\r\n value: JsonValue,\r\n depth: number,\r\n indent: string,\r\n alignColons: boolean,\r\n sortKeys: boolean,\r\n globalMaxKeyLength: number,\r\n maxIndentWidth: number,\r\n tabWidth: number,\r\n keyOrder: string[]\r\n ): string {\r\n if (value === null) return 'null';\r\n if (value === undefined) return 'undefined';\r\n\r\n const type = typeof value;\r\n\r\n if (type === 'string') {\r\n return JSON.stringify(value);\r\n }\r\n\r\n if (type === 'number' || type === 'boolean') {\r\n return String(value);\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return this.formatArray(value, depth, indent, alignColons, sortKeys, globalMaxKeyLength, maxIndentWidth, tabWidth, keyOrder);\r\n }\r\n\r\n if (type === 'object') {\r\n return this.formatObject(value as JsonObject, depth, indent, alignColons, sortKeys, globalMaxKeyLength, maxIndentWidth, tabWidth, keyOrder);\r\n }\r\n\r\n return JSON.stringify(value);\r\n }\r\n\r\n // Format an array\r\n private static formatArray(\r\n arr: JsonArray,\r\n depth: number,\r\n indent: string,\r\n alignColons: boolean,\r\n sortKeys: boolean,\r\n globalMaxKeyLength: number,\r\n maxIndentWidth: number,\r\n tabWidth: number,\r\n keyOrder: string[]\r\n ): string {\r\n if (arr.length === 0) return '[]';\r\n\r\n // Check if array is simple (primitives only)\r\n const isSimple = arr.every(item =>\r\n typeof item === 'string' ||\r\n typeof item === 'number' ||\r\n typeof item === 'boolean' ||\r\n item === null\r\n );\r\n\r\n if (isSimple && arr.length <= 3) {\r\n // Inline simple short arrays\r\n return '[' + arr.map(item => this.formatValue(item, depth, indent, alignColons, sortKeys, globalMaxKeyLength, maxIndentWidth, tabWidth, keyOrder)).join(', ') + ']';\r\n }\r\n\r\n // Multi-line array\r\n const currentIndent = indent.repeat(depth + 1);\r\n const items = arr.map(item =>\r\n currentIndent + this.formatValue(item, depth + 1, indent, alignColons, sortKeys, globalMaxKeyLength, maxIndentWidth, tabWidth, keyOrder)\r\n );\r\n\r\n return '[\\n' + items.join(',\\n') + '\\n' + indent.repeat(depth) + ']';\r\n }\r\n\r\n // Format an object with GLOBAL alignment accounting for indentation\r\n private static formatObject(\r\n obj: JsonObject,\r\n depth: number,\r\n indent: string,\r\n alignColons: boolean,\r\n sortKeys: boolean,\r\n globalMaxKeyLength: number,\r\n maxIndentWidth: number,\r\n tabWidth: number,\r\n keyOrder: string[]\r\n ): string {\r\n if (Object.keys(obj).length === 0) return '{}';\r\n\r\n let keys = Object.keys(obj);\r\n\r\n // Apply custom ordering\r\n keys = this.sortKeys(keys, keyOrder, sortKeys);\r\n\r\n const currentIndent = indent.repeat(depth + 1);\r\n\r\n // Calculate visual width of current indentation\r\n const currentIndentWidth = (depth + 1) * (indent === '\\t' ? tabWidth : indent.length);\r\n\r\n // Format each key-value pair\r\n const lines = keys.map(key => {\r\n const jsonKey = JSON.stringify(key);\r\n const value = this.formatValue(obj[key], depth + 1, indent, alignColons, sortKeys, globalMaxKeyLength, maxIndentWidth, tabWidth, keyOrder);\r\n\r\n if (alignColons) {\r\n // Padding = (max indent width - current indent width) + (max key length - current key length)\r\n const indentDiff = maxIndentWidth - currentIndentWidth;\r\n const keyDiff = globalMaxKeyLength - jsonKey.length;\r\n const padding = ' '.repeat(indentDiff + keyDiff);\r\n return `${currentIndent}${jsonKey}${padding} : ${value}`;\r\n } else {\r\n return `${currentIndent}${jsonKey} : ${value}`;\r\n }\r\n });\r\n\r\n return '{\\n' + lines.join(',\\n') + '\\n' + indent.repeat(depth) + '}';\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/app/mod/packageManager.ts\r\n//\r\n// Developed with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { JsonFormatter, PACKAGE_JSON_KEY_ORDER } from './jsonFormatter';\r\n import { Loader } from './loader';\r\n import * as path from 'path';\r\n import * as fs from 'fs';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n export class PackageManagerWrapper {\r\n\r\n // ┌──────────────────────────────── INIT ──────────────────────────────┐\r\n\r\n // // Always use bun\r\n // private readonly pm = 'bun';\r\n\r\n // Default scripts\r\n private readonly DEFAULT_SCRIPTS = {\r\n build: 'tsup',\r\n test: 'test',\r\n lint: 'eslint src --ext .ts',\r\n };\r\n\r\n constructor() {\r\n // No need for pm parameter anymore\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── MAIN ──────────────────────────────┐\r\n\r\n // Install packages\r\n install(packages?: string[], options?: { dev?: boolean; global?: boolean }): void {\r\n const args: string[] = [];\r\n\r\n // Handle global installations differently\r\n if (options?.global) {\r\n args.push('install', '--global');\r\n\r\n if (packages && packages.length > 0) {\r\n args.push(...packages);\r\n } else {\r\n console.error('✘ Please specify packages to install globally');\r\n process.exit(1);\r\n }\r\n } else {\r\n args.push('install');\r\n\r\n if (packages && packages.length > 0) {\r\n args.push(...packages);\r\n }\r\n\r\n if (options?.dev) {\r\n args.push('--dev');\r\n }\r\n }\r\n\r\n console.log(`→ Installing${packages ? ` ${packages.join(', ')}` : ' dependencies'}${options?.global ? ' globally' : ''}...`);\r\n this.execute(args);\r\n\r\n // Format package.json after install (only for local installs)\r\n if (!options?.global) {\r\n this.format();\r\n }\r\n }\r\n\r\n /**\r\n * Remove packages\r\n */\r\n remove(packages: string[], options?: { global?: boolean }): void {\r\n const args = ['remove'];\r\n\r\n if (options?.global) {\r\n args.push('--global');\r\n }\r\n\r\n args.push(...packages);\r\n\r\n console.log(`🗑️ Removing ${packages.join(', ')}${options?.global ? ' globally' : ''}...`);\r\n this.execute(args);\r\n\r\n // Format package.json after remove (only for local removes)\r\n if (!options?.global) {\r\n this.format();\r\n }\r\n }\r\n\r\n /**\r\n * Link package globally or link global package to current project\r\n * - No args: Links current package globally (bun link)\r\n * - With package name: Links global package to current project (bun link <package>)\r\n */\r\n link(packageName?: string): void {\r\n if (packageName) {\r\n console.log(`🔗 Linking global package \"${packageName}\" to current project...`);\r\n this.execute(['link', packageName]);\r\n } else {\r\n console.log('🔗 Linking current package globally...');\r\n this.execute(['link']);\r\n }\r\n }\r\n\r\n /**\r\n * Unlink package globally or unlink global package from current project\r\n * - No args: Unlinks current package globally (bun unlink)\r\n * - With package name: Unlinks global package from current project (bun unlink <package>)\r\n */\r\n unlink(packageName?: string): void {\r\n if (packageName) {\r\n console.log(`🔓 Unlinking global package \"${packageName}\" from current project...`);\r\n this.execute(['unlink', packageName]);\r\n } else {\r\n console.log('🔓 Unlinking current package globally...');\r\n this.execute(['unlink']);\r\n }\r\n }\r\n\r\n /**\r\n * Run a script from package.json (with fallback to default)\r\n */\r\n run(script: string, args?: string[]): void {\r\n const scriptCommand = this.getScriptCommand(script);\r\n\r\n if (!scriptCommand) {\r\n console.error(`✘ Script \"${script}\" not found in package.json and no default available`);\r\n process.exit(1);\r\n }\r\n\r\n // If using default script, run it directly\r\n if (this.isUsingDefaultScript(script)) {\r\n const commandParts = scriptCommand.split(' ');\r\n const command = [...commandParts];\r\n\r\n if (args && args.length > 0) {\r\n command.push(...args);\r\n }\r\n\r\n this.execute(command);\r\n } else {\r\n // Use bun run for package.json scripts\r\n const command = ['run', script];\r\n if (args && args.length > 0) {\r\n command.push('--', ...args);\r\n }\r\n this.execute(command);\r\n }\r\n }\r\n\r\n /**\r\n * Run a script from package.json silently (with fallback to default)\r\n */\r\n runSilent(script: string, args?: string[]): void {\r\n const scriptCommand = this.getScriptCommand(script);\r\n\r\n if (!scriptCommand) {\r\n throw new Error(`Script \"${script}\" not found in package.json and no default available`);\r\n }\r\n\r\n // If using default script, run it directly\r\n if (this.isUsingDefaultScript(script)) {\r\n const commandParts = scriptCommand.split(' ');\r\n const command = [...commandParts];\r\n\r\n if (args && args.length > 0) {\r\n command.push(...args);\r\n }\r\n\r\n this.executeSilent(command);\r\n } else {\r\n // Use bun run for package.json scripts\r\n const command = ['run', script];\r\n if (args && args.length > 0) {\r\n command.push('--', ...args);\r\n }\r\n this.executeSilent(command);\r\n }\r\n }\r\n\r\n /**\r\n * Update packages\r\n */\r\n update(packages?: string[]): void {\r\n console.log(`🔄 Updating${packages ? ` ${packages.join(', ')}` : ' all packages'}...`);\r\n\r\n const args = ['update'];\r\n if (packages && packages.length > 0) {\r\n args.push(...packages);\r\n }\r\n this.execute(args);\r\n\r\n // Format package.json after update\r\n this.format();\r\n }\r\n\r\n /**\r\n * List installed packages\r\n */\r\n list(options?: { global?: boolean }): void {\r\n const args = ['pm', 'ls'];\r\n if (options?.global) {\r\n args.push('--global');\r\n }\r\n this.execute(args);\r\n }\r\n\r\n /**\r\n * Initialize a new package.json\r\n */\r\n init(): void {\r\n console.log('📝 Initializing package.json...');\r\n this.execute(['init', '-y']);\r\n\r\n // Format package.json after init\r\n this.format();\r\n }\r\n\r\n /**\r\n * Publish package (uses bun for publishing - simpler and more reliable)\r\n */\r\n publish(options?: { tag?: string; access?: 'public' | 'restricted' }, loader?: Loader): void {\r\n // Publish with bun (more reliable than npm)\r\n const args = ['publish'];\r\n if (options?.tag) {\r\n args.push('--tag', options.tag);\r\n }\r\n // Always set access flag for scoped packages, default to public\r\n const access = options?.access || 'public';\r\n args.push('--access', access);\r\n\r\n const publishProc = Bun.spawnSync(['bun', ...args], {\r\n stdout: 'pipe',\r\n stderr: 'pipe'\r\n });\r\n\r\n if (publishProc.exitCode === 0) {\r\n // Extract package name and version from output\r\n const stdout = new TextDecoder().decode(publishProc.stdout);\r\n const versionMatch = stdout.match(/\\+ (.+@[\\d.]+)/);\r\n\r\n if (loader) {\r\n if (versionMatch) {\r\n loader.stop(`✔ Published ${versionMatch[1]} successfully!`);\r\n } else {\r\n loader.stop('✔ Published successfully!');\r\n }\r\n } else {\r\n if (versionMatch) {\r\n console.log(`✔ Published ${versionMatch[1]} successfully!`);\r\n } else {\r\n console.log('✔ Published successfully!');\r\n }\r\n }\r\n } else {\r\n const stderr = new TextDecoder().decode(publishProc.stderr);\r\n if (loader) {\r\n loader.stopWithError('Publish failed!');\r\n } else {\r\n console.error('Publish failed!');\r\n }\r\n if (stderr) {\r\n console.error(stderr);\r\n }\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Execute bun command\r\n */\r\n execute(args: string[]): void {\r\n const proc = Bun.spawnSync(['bun', ...args], {\r\n stdout: 'inherit',\r\n stderr: 'inherit'\r\n });\r\n\r\n if (proc.exitCode !== 0) {\r\n console.error(`✘ Command failed: bun ${args.join(' ')}`);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Execute bun command silently\r\n */\r\n executeSilent(args: string[]): void {\r\n const proc = Bun.spawnSync(['bun', ...args], {\r\n stdout: 'pipe',\r\n stderr: 'pipe'\r\n });\r\n\r\n if (proc.exitCode !== 0) {\r\n // Only show errors if command failed\r\n const stderr = new TextDecoder().decode(proc.stderr);\r\n console.error(`✘ Command failed: bun ${args.join(' ')}`);\r\n if (stderr) {\r\n console.error(stderr);\r\n }\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Get package manager name\r\n */\r\n getName(): string {\r\n return 'bun';\r\n }\r\n\r\n /**\r\n * Get package manager emoji\r\n */\r\n getEmoji(): string {\r\n return '🥟';\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── HELP ──────────────────────────────┐\r\n\r\n /**\r\n * Format package.json after operations\r\n */\r\n private format(): void {\r\n try {\r\n const pkgPath = path.join(process.cwd(), 'package.json');\r\n if (fs.existsSync(pkgPath)) {\r\n JsonFormatter.formatFile(pkgPath, { keyOrder: PACKAGE_JSON_KEY_ORDER });\r\n }\r\n } catch {\r\n // Silently ignore formatting errors\r\n }\r\n }\r\n\r\n /**\r\n * Get script command (from package.json or default)\r\n */\r\n private getScriptCommand(script: string): string | null {\r\n const pkgPath = path.join(process.cwd(), 'package.json');\r\n\r\n // Try to read package.json\r\n if (fs.existsSync(pkgPath)) {\r\n try {\r\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\r\n\r\n // Check if script exists in package.json\r\n if (pkg.scripts && pkg.scripts[script]) {\r\n return pkg.scripts[script];\r\n }\r\n } catch {\r\n // If can't read package.json, fall through to defaults\r\n }\r\n }\r\n\r\n // Return default script if available\r\n if (script in this.DEFAULT_SCRIPTS) {\r\n return this.DEFAULT_SCRIPTS[script as keyof typeof this.DEFAULT_SCRIPTS];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Check if using default script (not from package.json)\r\n */\r\n private isUsingDefaultScript(script: string): boolean {\r\n const pkgPath = path.join(process.cwd(), 'package.json');\r\n\r\n if (fs.existsSync(pkgPath)) {\r\n try {\r\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\r\n\r\n // If script exists in package.json, not using default\r\n if (pkg.scripts && pkg.scripts[script]) {\r\n return false;\r\n }\r\n } catch {\r\n // If can't read, assume using default\r\n }\r\n }\r\n\r\n // Using default if script is in DEFAULT_SCRIPTS\r\n return script in this.DEFAULT_SCRIPTS;\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/app/mod/promptHelper.ts\r\n//\r\n// Developed with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { input, select, confirm } from '@inquirer/prompts';\r\n import { TemplateRegistry } from './templateRegistry';\r\n import type { SpaceType } from '../../types.d';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n export interface InitPromptAnswers {\r\n name : string;\r\n type : 'lib' | 'cli' | 'server';\r\n template : string;\r\n description : string;\r\n packageManager : 'bun' | 'npm';\r\n author : string;\r\n authorEmail : string;\r\n githubId : string;\r\n keywords : string[];\r\n license : string;\r\n }\r\n\r\n export interface PublishPromptAnswers {\r\n confirm : boolean;\r\n tag? : string;\r\n access? : 'public' | 'restricted';\r\n }\r\n\r\n export interface RemovePromptAnswers {\r\n packages : string[];\r\n confirm : boolean;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n export class PromptHelper {\r\n\r\n // ┌──────────────────────────────── MAIN ──────────────────────────────┐\r\n\r\n /**\r\n * Prompt for init command parameters\r\n */\r\n static async promptInit(params: {\r\n name? : string;\r\n org? : string;\r\n type? : string;\r\n template? : string;\r\n desc? : string;\r\n }): Promise<InitPromptAnswers> {\r\n\r\n let name = params.name;\r\n let type = params.type;\r\n let template = params.template;\r\n let description = params.desc;\r\n let author = '';\r\n\r\n // Name (supports @org/name format)\r\n if (!name || name === 'my-space') {\r\n name = await input({\r\n message: 'name:',\r\n default: 'my-space',\r\n validate: (value: string) => {\r\n if (!value || value.trim() === '') {\r\n return 'Space name is required';\r\n }\r\n // Check for @org/name format\r\n const orgRegex = /^@([a-z0-9-_]+)\\/([a-z0-9-_]+)$/;\r\n const simpleRegex = /^[a-z0-9-_]+$/;\r\n\r\n if (!orgRegex.test(value) && !simpleRegex.test(value)) {\r\n return 'Name must be either \"package-name\" or \"@org/package-name\" (lowercase, numbers, hyphens, underscores only)';\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n // Type\r\n if (!type) {\r\n // Check which space types have ready templates\r\n const libReady = TemplateRegistry.getTemplatesForType('lib', false).length > 0;\r\n const cliReady = TemplateRegistry.getTemplatesForType('cli', false).length > 0;\r\n const serverReady = TemplateRegistry.getTemplatesForType('server', false).length > 0;\r\n const webReady = TemplateRegistry.getTemplatesForType('web', false).length > 0;\r\n\r\n type = await select({\r\n message: 'type:',\r\n choices: [\r\n {\r\n name: `→ Library - TypeScript library for npm${!libReady ? ' (Coming Soon)' : ''}`,\r\n value: 'lib',\r\n disabled: !libReady ? 'No templates ready yet' : false\r\n },\r\n {\r\n name: `→ CLI - Command-line tool${!cliReady ? ' (Coming Soon)' : ''}`,\r\n value: 'cli',\r\n disabled: !cliReady ? 'No templates ready yet' : false\r\n },\r\n {\r\n name: `→ Server - Backend server application${!serverReady ? ' (Coming Soon)' : ''}`,\r\n value: 'server',\r\n disabled: !serverReady ? 'No templates ready yet' : false\r\n },\r\n {\r\n name: `→ Web App - Full-stack web application${!webReady ? ' (Coming Soon)' : ''}`,\r\n value: 'web',\r\n disabled: !webReady ? 'No templates ready yet' : false\r\n }\r\n ]\r\n });\r\n }\r\n\r\n // Template Variant (based on type) - show all templates with status\r\n if (!template) {\r\n const allTemplates = TemplateRegistry.getTemplatesForType(type as SpaceType, true);\r\n const readyTemplates = allTemplates.filter(t => t.ready);\r\n\r\n // Check if there are any ready templates\r\n if (readyTemplates.length === 0) {\r\n throw new Error(`No templates are ready yet for \"${type}\" spaces. This space type is coming soon!`);\r\n }\r\n\r\n const templateChoices = allTemplates.map(t => {\r\n const statusEmoji = t.ready ? '✔' : '🚧';\r\n const statusText = t.ready ? '' : ' (Coming Soon)';\r\n return {\r\n name: `${statusEmoji} ${t.label}${statusText} - ${t.description}`,\r\n value: t.name,\r\n short: t.label,\r\n disabled: !t.ready ? 'Not ready yet' : false\r\n };\r\n });\r\n\r\n template = await select({\r\n message: 'template:',\r\n choices: templateChoices,\r\n default: TemplateRegistry.getDefaultTemplate(type as SpaceType)\r\n });\r\n }\r\n\r\n // Description\r\n if (!description) {\r\n const defaultDesc = type === 'lib'\r\n ? `A TypeScript library`\r\n : type === 'cli'\r\n ? `A command-line tool`\r\n : `A backend server`;\r\n\r\n description = await input({\r\n message: 'desc:',\r\n default: defaultDesc\r\n });\r\n }\r\n\r\n // Package Manager - Always use bun (removed from prompt)\r\n const packageManager = 'bun';\r\n\r\n // Author name\r\n author = await input({\r\n message: 'author name:',\r\n default: ''\r\n });\r\n\r\n // Author email\r\n const authorEmail = await input({\r\n message: 'author email:',\r\n default: '',\r\n validate: (value: string) => {\r\n if (value && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\r\n return 'Please enter a valid email address or leave empty';\r\n }\r\n return true;\r\n }\r\n });\r\n\r\n // GitHub username\r\n const githubId = await input({\r\n message: 'github username:',\r\n default: '',\r\n validate: (value: string) => {\r\n if (value && !/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/i.test(value)) {\r\n return 'Please enter a valid GitHub username or leave empty';\r\n }\r\n return true;\r\n }\r\n });\r\n\r\n // Keywords\r\n const keywordsInput = await input({\r\n message: 'keywords (comma-separated):',\r\n default: '',\r\n });\r\n\r\n const keywords = keywordsInput\r\n ? keywordsInput.split(',').map(k => k.trim()).filter(k => k)\r\n : [];\r\n\r\n // License\r\n const license = await input({\r\n message: 'license:',\r\n default: 'MIT'\r\n });\r\n\r\n return {\r\n name,\r\n type: type as 'lib' | 'cli' | 'server',\r\n template,\r\n description,\r\n packageManager: packageManager as 'bun' | 'npm',\r\n author,\r\n authorEmail,\r\n githubId,\r\n keywords,\r\n license\r\n };\r\n }\r\n\r\n /**\r\n * Prompt for publish confirmation and options\r\n */\r\n static async promptPublish(spaceName: string): Promise<PublishPromptAnswers> {\r\n const shouldPublish = await confirm({\r\n message: `Are you sure you want to publish \"${spaceName}\" to npm?`,\r\n default: false\r\n });\r\n\r\n if (!shouldPublish) {\r\n return {\r\n confirm: false\r\n };\r\n }\r\n\r\n const tag = await input({\r\n message: 'Publish with a tag (e.g., beta, next) or leave empty for latest:',\r\n default: ''\r\n });\r\n\r\n const access = await select({\r\n message: '🔐 Access level:',\r\n choices: [\r\n { name: 'Public - Anyone can install', value: 'public' },\r\n { name: 'Restricted - Requires authentication', value: 'restricted' }\r\n ],\r\n default: 'public'\r\n });\r\n\r\n return {\r\n confirm: true,\r\n tag: tag || undefined,\r\n access: access as 'public' | 'restricted'\r\n };\r\n }\r\n\r\n /**\r\n * Prompt for package removal confirmation\r\n */\r\n static async promptRemove(packages: string[]): Promise<RemovePromptAnswers> {\r\n const shouldRemove = await confirm({\r\n message: `Remove ${packages.join(', ')}?`,\r\n default: true\r\n });\r\n\r\n return {\r\n packages,\r\n confirm: shouldRemove\r\n };\r\n }\r\n\r\n /**\r\n * Simple confirmation prompt helper\r\n */\r\n static async promptConfirm(message: string, defaultValue: boolean = false): Promise<boolean> {\r\n const readline = await import('readline');\r\n const rl = readline.createInterface({\r\n input : process.stdin,\r\n output : process.stdout\r\n });\r\n\r\n const defaultText = defaultValue ? ' (Y/n)' : ' (y/N)';\r\n\r\n return new Promise((resolve) => {\r\n rl.question(`${message}${defaultText} `, (answer: string) => {\r\n rl.close();\r\n\r\n if (answer.trim() === '') {\r\n resolve(defaultValue);\r\n } else {\r\n resolve(answer.trim().toLowerCase() === 'y' || answer.trim().toLowerCase() === 'yes');\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Prompt for package installation\r\n */\r\n static async promptInstall(currentPackages?: string): Promise<{\r\n packages: string[];\r\n isDev: boolean;\r\n }> {\r\n const packagesInput = await input({\r\n message: 'Enter package names (space-separated):',\r\n default: currentPackages || '',\r\n validate: (value: string) => {\r\n if (!value || value.trim() === '') {\r\n return 'Please enter at least one package name';\r\n }\r\n return true;\r\n }\r\n });\r\n\r\n const isDev = await confirm({\r\n message: '🛠️ Install as dev dependency?',\r\n default: false\r\n });\r\n\r\n return {\r\n packages: packagesInput.split(' ').filter((p: string) => p.trim()),\r\n isDev\r\n };\r\n }\r\n\r\n /**\r\n * Prompt for package update selection\r\n */\r\n static async promptUpdate(): Promise<{ updateAll: boolean; packages?: string[] }> {\r\n const updateType = await select({\r\n message: 'What do you want to update?',\r\n choices: [\r\n { name: 'All packages', value: 'all' },\r\n { name: 'Specific packages', value: 'specific' }\r\n ]\r\n });\r\n\r\n if (updateType === 'all') {\r\n return {\r\n updateAll: true\r\n };\r\n }\r\n\r\n const packagesInput = await input({\r\n message: '📦 Enter package names (space-separated):',\r\n validate: (value: string) => {\r\n if (!value || value.trim() === '') {\r\n return 'Please enter at least one package name';\r\n }\r\n return true;\r\n }\r\n });\r\n\r\n return {\r\n updateAll: false,\r\n packages: packagesInput.split(' ').filter((p: string) => p.trim())\r\n };\r\n }\r\n\r\n /**\r\n * Prompt user if they want to use current directory\r\n */\r\n static async promptUseCurrentDir(dirName: string): Promise<boolean> {\r\n const shouldUse = await confirm({\r\n message: `Use current directory \"${dirName}\" as the space root?`,\r\n default: true\r\n });\r\n\r\n return shouldUse;\r\n }\r\n\r\n /**\r\n * Prompt user if they want to delete existing directory\r\n */\r\n static async promptDeleteExistingDir(dirPath: string): Promise<boolean> {\r\n const shouldDelete = await confirm({\r\n message: `⚠️ Directory already exists at \"${dirPath}\". Delete and recreate?`,\r\n default: false\r\n });\r\n\r\n return shouldDelete;\r\n }\r\n\r\n /**\r\n * Show a success message with next steps\r\n */\r\n static showSuccess(spaceName: string, nextSteps: string[]) {\r\n console.log('');\r\n nextSteps.forEach((step) => {\r\n console.log(`→ ${step}`);\r\n });\r\n console.log('');\r\n }\r\n\r\n /**\r\n * Show an error message\r\n */\r\n static showError(message: string, error?: Error) {\r\n console.log('\\n✘ Error:', message);\r\n if (error && error.message) {\r\n console.log(` ${error.message}`);\r\n }\r\n console.log('');\r\n }\r\n\r\n /**\r\n * Show a warning message\r\n */\r\n static showWarning(message: string) {\r\n console.log('\\n⚠️ Warning:', message);\r\n console.log('');\r\n }\r\n\r\n /**\r\n * Show an info message\r\n */\r\n static showInfo(message: string) {\r\n console.log('\\nℹ️ ', message);\r\n console.log('');\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/app/mod/loader.ts\r\n//\r\n// Developed with ❤️ by Maysara.\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n export class Loader {\r\n\r\n // ┌──────────────────────────────── INIT ──────────────────────────────┐\r\n\r\n private frames: string[] = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\r\n private currentFrame: number = 0;\r\n private interval: NodeJS.Timeout | null = null;\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── MAIN ──────────────────────────────┐\r\n\r\n start(message: string): void {\r\n process.stdout.write(`\\n${message}`);\r\n this.interval = setInterval(() => {\r\n process.stdout.write(`\\r${this.frames[this.currentFrame]} ${message}`);\r\n this.currentFrame = (this.currentFrame + 1) % this.frames.length;\r\n }, 80);\r\n }\r\n\r\n stop(successMessage: string): void {\r\n if (this.interval) {\r\n clearInterval(this.interval);\r\n this.interval = null;\r\n }\r\n\r\n if (successMessage === '') {\r\n // Clear the current line and move cursor up to remove the loader completely\r\n process.stdout.write('\\r\\x1b[K\\x1b[1A\\x1b[K');\r\n } else {\r\n process.stdout.write(`\\r${successMessage} \\n\\n`);\r\n }\r\n }\r\n\r\n stopWithError(errorMessage: string): void {\r\n if (this.interval) {\r\n clearInterval(this.interval);\r\n this.interval = null;\r\n }\r\n process.stdout.write(`\\r✘ ${errorMessage} \\n\\n`);\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/app/index.ts\r\n//\r\n// Developed with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { cli } from '@je-es/cli';\r\n import * as types from \"../types.d\";\r\n import { SpaceManager } from './mod/spaceManager';\r\n import { PackageManagerWrapper } from './mod/packageManager';\r\n import { PromptHelper } from './mod/promptHelper';\r\n import { Loader } from './mod/loader';\r\n import { spawnSync } from 'child_process';\r\n import * as path from 'path';\r\n import * as fs from 'fs';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n export class App {\r\n\r\n // ┌──────────────────────────────── INIT ──────────────────────────────┐\r\n\r\n private spaceManager : SpaceManager;\r\n private pm : PackageManagerWrapper | null = null;\r\n\r\n constructor(\r\n public config : types.AppConfig\r\n ) {\r\n this.spaceManager = new SpaceManager();\r\n this.initPackageManager();\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── MAIN ──────────────────────────────┐\r\n\r\n static create(config: types.AppConfig): App {\r\n return new App(config);\r\n }\r\n\r\n run() {\r\n // CLI Setup\r\n cli(this.config.name, this.config.version).description(this.config.desc)\r\n\r\n // ═══════════════════════════ SPACE COMMANDS ═══════════════════════════\r\n\r\n // 'init' command - create new spaces\r\n .command({\r\n name : 'init',\r\n description : 'Create a new space (lib or cli)',\r\n\r\n args: [\r\n {\r\n name : 'name',\r\n required : false,\r\n default : 'my-space',\r\n description : 'Name of the space (supports @org/name format)'\r\n }\r\n ],\r\n\r\n options: [\r\n {\r\n name : 'type',\r\n flag : '-t',\r\n type : 'string',\r\n required : false,\r\n description : 'Type of space (lib or cli)'\r\n },\r\n {\r\n name : 'description',\r\n flag : '--desc',\r\n type : 'string',\r\n required : false,\r\n description : 'Description of the space'\r\n }\r\n ],\r\n\r\n action: (params: types.InitCommandParams) => this.createNewSpaceOnGroundViaCLI(params)\r\n })\r\n\r\n\r\n // 'lint' command - run linter\r\n .command({\r\n name : 'lint',\r\n description : 'Run linter for the current space',\r\n\r\n options: [\r\n {\r\n name : 'fix',\r\n flag : '--fix',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Automatically fix linting issues'\r\n }\r\n ],\r\n\r\n action: (params: types.LintParams) => this.runLint(params)\r\n })\r\n\r\n // 'info' command - show space information\r\n .command({\r\n name : 'info',\r\n description : 'Show current space information',\r\n action : () => this.showSpaceInfo()\r\n })\r\n\r\n // ═══════════════════════════ PACKAGE MANAGER COMMANDS ═══════════════════════════\r\n\r\n // 'install' or 'i' command - install packages\r\n .command({\r\n name : 'install',\r\n aliases : ['i'],\r\n description : 'Install packages',\r\n\r\n args: [\r\n {\r\n name : 'packages',\r\n required : false,\r\n description : 'Packages to install (space-separated)'\r\n }\r\n ],\r\n\r\n options: [\r\n {\r\n name : 'dev',\r\n flag : '--dev',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Install as dev dependency'\r\n },\r\n {\r\n name : 'global',\r\n flag : '--global',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Install globally'\r\n }\r\n ],\r\n\r\n action: (params: types.InstallParams) => this.installPackages(params)\r\n })\r\n\r\n // 'remove' or 'r' command - remove packages\r\n .command({\r\n name : 'remove',\r\n aliases : ['r'],\r\n description : 'Remove packages',\r\n\r\n args: [\r\n {\r\n name : 'packages',\r\n required : true,\r\n description : 'Packages to remove (space-separated)'\r\n }\r\n ],\r\n\r\n options: [\r\n {\r\n name : 'global',\r\n flag : '--global',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Remove globally'\r\n }\r\n ],\r\n\r\n action: (params: types.RemoveParams) => this.removePackages(params)\r\n })\r\n\r\n // 'update' or 'up' command - update packages\r\n .command({\r\n name : 'update',\r\n aliases : ['up'],\r\n description : 'Update packages',\r\n\r\n args: [\r\n {\r\n name : 'packages',\r\n required : false,\r\n description : 'Packages to update (space-separated, or all if empty)'\r\n }\r\n ],\r\n\r\n action: (params: types.UpdateParams) => this.updatePackages(params)\r\n })\r\n\r\n // 'link' command - link package globally OR link global package to project\r\n .command({\r\n name : 'link',\r\n description : 'Link package globally (no args) or link global package to project (with package name)',\r\n\r\n args: [\r\n {\r\n name : 'package',\r\n required : false,\r\n description : 'Package name to link from global (optional)'\r\n }\r\n ],\r\n\r\n action: (params: types.LinkParams) => this.linkPackage(params)\r\n })\r\n\r\n // 'unlink' command - unlink package globally OR unlink global package from project\r\n .command({\r\n name : 'unlink',\r\n description : 'Unlink package globally (no args) or unlink global package from project (with package name)',\r\n\r\n args: [\r\n {\r\n name : 'package',\r\n required : false,\r\n description : 'Package name to unlink from global (optional)'\r\n }\r\n ],\r\n\r\n action: (params: types.LinkParams) => this.unlinkPackage(params)\r\n })\r\n\r\n // 'list' or 'ls' command - list installed packages\r\n .command({\r\n name : 'list',\r\n aliases : ['ls'],\r\n description : 'List installed packages',\r\n\r\n options: [\r\n {\r\n name : 'global',\r\n flag : '--global',\r\n type : 'boolean',\r\n required : false,\r\n description : 'List global packages'\r\n }\r\n ],\r\n\r\n action: (params: types.ListParams) => this.listPackages(params)\r\n })\r\n\r\n // ═══════════════════════════ BUILD & TEST COMMANDS ═══════════════════════════\r\n\r\n // 'build' command - build the space\r\n .command({\r\n name : 'build',\r\n description : 'Build the current space',\r\n action : () => this.buildSpace()\r\n })\r\n\r\n // 'test' command - run tests\r\n .command({\r\n name : 'test',\r\n description : 'Run tests for the current space',\r\n\r\n args: [\r\n {\r\n name : 'path',\r\n required : false,\r\n description : 'Specific test file or folder (optional)'\r\n }\r\n ],\r\n\r\n options: [\r\n {\r\n name : 'coverage',\r\n flag : '--coverage',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Generate code coverage report'\r\n },\r\n {\r\n name : 'watch',\r\n flag : '--watch',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Run tests in watch mode'\r\n },\r\n {\r\n name : 'bail',\r\n flag : '--bail',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Exit on first test failure'\r\n },\r\n {\r\n name : 'timeout',\r\n flag : '--timeout',\r\n type : 'string',\r\n required : false,\r\n description : 'Set test timeout in milliseconds'\r\n },\r\n {\r\n name : 'rerun-each',\r\n flag : '--rerun-each',\r\n type : 'string',\r\n required : false,\r\n description : 'Re-run each test N times'\r\n },\r\n {\r\n name : 'concurrent',\r\n flag : '--concurrent',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Run tests concurrently'\r\n },\r\n {\r\n name : 'coverage-reporter',\r\n flag : '--coverage-reporter',\r\n type : 'string',\r\n required : false,\r\n description : 'Coverage reporter format (text, lcov, etc.)'\r\n },\r\n {\r\n name : 'test-name-pattern',\r\n flag : '-t',\r\n type : 'string',\r\n required : false,\r\n description : 'Filter tests by name pattern'\r\n }\r\n ],\r\n\r\n action: (params: types.TestParams) => this.runTests(params)\r\n })\r\n\r\n // 'run' command - run any script from package.json\r\n .command({\r\n name : 'run',\r\n description : 'Run any script from package.json',\r\n\r\n args: [\r\n {\r\n name : 'script',\r\n required : true,\r\n description : 'Script name from package.json'\r\n }\r\n ],\r\n\r\n allowDynamicArgs : true, // Allow additional arguments\r\n allowDynamicOptions : true, // Allow additional options\r\n\r\n action: (params: types.RunScriptParams) => this.runScript(params)\r\n })\r\n\r\n // 'clean' command - clean build artifacts\r\n .command({\r\n name : 'clean',\r\n description : 'Clean build artifacts',\r\n action : () => this.clean()\r\n })\r\n\r\n // 'start' command - start the main file\r\n .command({\r\n name : 'start',\r\n description : 'Start the main file',\r\n allowDynamicArgs : true, // Allow any arguments to pass through\r\n allowDynamicOptions : true, // Allow any options to pass through\r\n action : (params: types.StartParams) => this.startMain(params)\r\n })\r\n\r\n // ═══════════════════════════ PUBLISH COMMAND ═══════════════════════════\r\n\r\n // 'publish' command - publish to npm\r\n .command({\r\n name : 'publish',\r\n description : 'Publish space to npm registry',\r\n\r\n options: [\r\n {\r\n name : 'tag',\r\n flag : '--tag',\r\n type : 'string',\r\n required : false,\r\n description : 'Publish with tag (e.g., beta, next)'\r\n },\r\n {\r\n name : 'access',\r\n flag : '--access',\r\n type : 'string',\r\n required : false,\r\n description : 'Access level (public or restricted)'\r\n }\r\n ],\r\n\r\n action: (params: types.PublishParams) => this.publish(params)\r\n })\r\n\r\n // Build and run CLI\r\n .build().run();\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── HELP ──────────────────────────────┐\r\n\r\n static defaultConfig(): types.AppConfig {\r\n return {\r\n name : 'Space',\r\n version : '0.0.1',\r\n desc : 'Build flexible spaces for any platform',\r\n };\r\n }\r\n\r\n /**\r\n * Initialize package manager based on space config\r\n */\r\n private initPackageManager() {\r\n if (this.spaceManager.isSpace()) {\r\n // Always use bun - no need to check config\r\n this.pm = new PackageManagerWrapper();\r\n }\r\n }\r\n\r\n /**\r\n * Ensure we're in a space directory\r\n */\r\n private ensureSpace(): boolean {\r\n if (!this.spaceManager.isSpace()) {\r\n console.error('✘ Not a space directory. Run \"space init <name> -t lib|cli\" first.');\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Parse package name to extract org and name\r\n * Examples:\r\n * \"@je-es/ast\" -> { org: \"je-es\", name: \"ast\" }\r\n * \"my-package\" -> { org: \"\", name: \"my-package\" }\r\n */\r\n private parsePackageName(fullName: string): { org: string; name: string } {\r\n const orgRegex = /^@([a-z0-9-_]+)\\/([a-z0-9-_]+)$/i;\r\n const match = fullName.match(orgRegex);\r\n\r\n if (match) {\r\n return {\r\n org: match[1],\r\n name: match[2]\r\n };\r\n }\r\n\r\n return {\r\n org: '',\r\n name: fullName\r\n };\r\n }\r\n\r\n /**\r\n * Delete directory with retry logic for Windows file locking issues\r\n */\r\n private async deleteDirectoryWithRetry(dirPath: string, maxRetries: number = 3): Promise<void> {\r\n for (let i = 0; i < maxRetries; i++) {\r\n try {\r\n // Try to delete\r\n fs.rmSync(dirPath, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });\r\n\r\n // Verify deletion\r\n if (!fs.existsSync(dirPath)) {\r\n return; // Success!\r\n }\r\n } catch (error: unknown) {\r\n if (i === maxRetries - 1) {\r\n // Last attempt failed\r\n throw error;\r\n }\r\n\r\n // Wait before retry (increasing delay)\r\n await new Promise(resolve => setTimeout(resolve, 500 * (i + 1)));\r\n }\r\n }\r\n\r\n throw new Error('Failed to delete directory after multiple attempts');\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── SPACE ──────────────────────────────┐\r\n\r\n /**\r\n * Create a new space via CLI\r\n */\r\n private async createNewSpaceOnGroundViaCLI(params: types.InitCommandParams) {\r\n try {\r\n // Prompt for missing parameters\r\n const answers = await PromptHelper.promptInit({\r\n type : params.options.type,\r\n template : params.options.template,\r\n\r\n org : '',\r\n name : params.args.name,\r\n desc : params.options.desc,\r\n });\r\n\r\n // Parse package name to extract org and actual name\r\n const { org, name } = this.parsePackageName(answers.name);\r\n\r\n // Validate type\r\n if (!['lib', 'cli', 'server'].includes(answers.type)) {\r\n PromptHelper.showError('Invalid space type. Must be lib, cli or server.');\r\n process.exit(1);\r\n }\r\n\r\n // Validate template\r\n const { TemplateRegistry } = await import('./mod/templateRegistry');\r\n if (!TemplateRegistry.isValidTemplate(answers.type, answers.template as types.TemplateVariant)) {\r\n PromptHelper.showError('Invalid template for this space type.');\r\n process.exit(1);\r\n }\r\n\r\n // Check if template is ready\r\n if (!TemplateRegistry.isTemplateReady(answers.type, answers.template as types.TemplateVariant)) {\r\n PromptHelper.showError('This template is not ready yet. Please choose another template.');\r\n process.exit(1);\r\n }\r\n\r\n // Determine the target space path\r\n let spacePath: string | undefined;\r\n\r\n // Get current directory name\r\n const currentDirName = path.basename(process.cwd());\r\n\r\n // Check if name is empty and ask if user wants to use current directory\r\n if (!name || name.trim() === '') {\r\n const useCurrentDir = await PromptHelper.promptUseCurrentDir(currentDirName);\r\n\r\n if (useCurrentDir) {\r\n spacePath = process.cwd();\r\n } else {\r\n PromptHelper.showError('Space name is required when not using current directory');\r\n process.exit(1);\r\n }\r\n }\r\n // Check if folder name matches project name\r\n else if (currentDirName === name) {\r\n const useCurrentDir = await PromptHelper.promptUseCurrentDir(name);\r\n\r\n if (useCurrentDir) {\r\n spacePath = process.cwd();\r\n }\r\n }\r\n\r\n // If spacePath not set, use default (create subdirectory)\r\n if (!spacePath) {\r\n spacePath = path.join(process.cwd(), name);\r\n }\r\n\r\n // Check if space path already exists\r\n if (fs.existsSync(spacePath)) {\r\n const isDir = fs.statSync(spacePath).isDirectory();\r\n if (!isDir) {\r\n PromptHelper.showError(`Path \"${spacePath}\" exists but is not a directory`);\r\n process.exit(1);\r\n }\r\n\r\n // Directory exists, ask user what to do\r\n const shouldDelete = await PromptHelper.promptDeleteExistingDir(spacePath);\r\n\r\n if (!shouldDelete) {\r\n PromptHelper.showInfo('Space creation cancelled');\r\n process.exit(0);\r\n }\r\n\r\n // Delete the directory with retry logic\r\n try {\r\n await this.deleteDirectoryWithRetry(spacePath);\r\n } catch (error: unknown) {\r\n if (error instanceof Error) {\r\n const isLockError = error.message &&\r\n (error.message.includes('EBUSY') ||\r\n error.message.includes('EPERM') ||\r\n error.message.includes('resource busy'));\r\n\r\n if (isLockError) {\r\n PromptHelper.showError(\r\n `Cannot delete directory - it's being used by another program.\\n\\n` +\r\n `Please try:\\n` +\r\n ` 1. Close any terminals/editors with \"${spacePath}\" open\\n` +\r\n ` 2. Navigate out of the directory in all terminals\\n` +\r\n ` 3. Run PowerShell/Terminal as Administrator\\n` +\r\n ` 4. Wait a few seconds and try again`\r\n );\r\n } else {\r\n PromptHelper.showError(\r\n `Failed to delete existing directory.`,\r\n error\r\n );\r\n }\r\n } else {\r\n PromptHelper.showError(\r\n `Failed to delete existing directory.`,\r\n new Error('Unknown error')\r\n );\r\n }\r\n\r\n process.exit(1);\r\n }\r\n }\r\n\r\n // // Show info about org detection\r\n // if (org) {\r\n // console.log(`― Detected organization: @${org}`);\r\n // console.log(`― Package name: ${name}`);\r\n // }\r\n\r\n // // Show template info\r\n // const templateInfo = TemplateRegistry.getTemplate(answers.type, answers.template);\r\n // if (templateInfo?.deps) {\r\n // console.log(`― Includes: ${templateInfo.deps.join(', ')}`);\r\n // }\r\n\r\n await this.spaceManager.createSpace({\r\n type : answers.type,\r\n template : answers.template as types.TemplateVariant,\r\n pm : 'bun', // Always use bun\r\n\r\n repo : {\r\n org : org,\r\n name : name,\r\n version : '0.0.1',\r\n desc : answers.description,\r\n kw : answers.keywords.length > 0 ? answers.keywords : [],\r\n license : answers.license || 'MIT',\r\n },\r\n\r\n author : {\r\n id : answers.githubId,\r\n name : answers.author,\r\n email : answers.authorEmail,\r\n url : '', // Will be generated in spaceManager\r\n },\r\n\r\n createdAt : new Date().toISOString()\r\n }, spacePath);\r\n\r\n PromptHelper.showSuccess(name, [\r\n spacePath === process.cwd() ? 'space install' :\r\n `cd ${name}`,\r\n `space install`,\r\n 'space build'\r\n ]);\r\n } catch (error) {\r\n PromptHelper.showError('Failed to create space', error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Show information about current space\r\n * Safely handles template placeholders and unexpected data types\r\n */\r\n private showSpaceInfo() {\r\n if (!this.ensureSpace()) return;\r\n\r\n const config = this.spaceManager.loadSpaceConfig();\r\n if (!config) {\r\n console.error('✘ Could not load space configuration.');\r\n return;\r\n }\r\n\r\n console.log('');\r\n\r\n // Safe access to org - check if it exists and is not empty\r\n const hasOrg = config.repo?.org && config.repo.org.trim() !== '';\r\n const fullName = hasOrg\r\n ? `${config.repo.org}/${config.repo.name}`\r\n : config.repo.name;\r\n\r\n console.log(`Name: ${fullName}`);\r\n console.log(`Type: ${config.type}`);\r\n console.log(`Version: ${config.repo.version}`);\r\n\r\n // Safe description handling\r\n if (config.repo.desc && config.repo.desc !== '{{desc}}' && config.repo.desc !== '{{description}}') {\r\n console.log(`Description: ${config.repo.desc}`);\r\n }\r\n\r\n // Safe keywords handling - check if it's an array and not empty\r\n if (config.repo.kw) {\r\n // Normalize to array if it's a string\r\n let keywords: string[] = [];\r\n\r\n if (Array.isArray(config.repo.kw)) {\r\n keywords = config.repo.kw.filter((k: unknown) =>\r\n k &&\r\n typeof k === 'string' &&\r\n k.trim() !== '' &&\r\n k !== '{{kw}}' &&\r\n k !== '{{keywords}}'\r\n );\r\n } else if (typeof config.repo.kw === 'string') {\r\n const kwString = config.repo.kw as string;\r\n if (kwString !== '{{kw}}' &&\r\n kwString !== '{{keywords}}' &&\r\n kwString.trim() !== '') {\r\n // If it's a string, try to split by comma\r\n keywords = kwString\r\n .split(',')\r\n .map((k: string) => k.trim())\r\n .filter((k: string) => k !== '');\r\n }\r\n }\r\n\r\n if (keywords.length > 0) {\r\n console.log(`Keywords: ${keywords.join(', ')}`);\r\n }\r\n }\r\n\r\n // Safe license handling\r\n if (config.repo.license && config.repo.license !== '{{license}}') {\r\n console.log(`License: ${config.repo.license}`);\r\n }\r\n\r\n console.log(`PackageManager: bun`);\r\n\r\n // Safe author name handling\r\n if (config.author?.name &&\r\n config.author.name !== '{{author}}' &&\r\n config.author.name !== '{{author_name}}') {\r\n console.log(`Author: ${config.author.name}`);\r\n }\r\n\r\n console.log(`Created: ${new Date(config.createdAt).toLocaleDateString()}`);\r\n\r\n console.log('');\r\n }\r\n\r\n /**\r\n * Run linter\r\n */\r\n private runLint(params?: types.LintParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n const args: string[] = [];\r\n\r\n // Add --fix flag if specified\r\n if (params?.options?.fix) {\r\n args.push('--fix');\r\n }\r\n\r\n // Run lint with args\r\n if (args.length > 0) {\r\n this.pm!.run('lint', args);\r\n } else {\r\n this.pm!.run('lint');\r\n }\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── PKG MGR ────────────────────────────┐\r\n\r\n /**\r\n * Install packages\r\n */\r\n private async installPackages(params: types.InstallParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n try {\r\n let packages = params.args?.packages\r\n ? params.args.packages.split(' ').filter((p: string) => p.trim())\r\n : undefined;\r\n\r\n let isDev = params.options?.dev || false;\r\n\r\n // If no packages provided, prompt\r\n if (!packages || packages.length === 0) {\r\n const shouldInstallAll = await PromptHelper.promptConfirm(\r\n 'No packages specified. Install all dependencies from package.json?',\r\n true\r\n );\r\n\r\n if (!shouldInstallAll) {\r\n const installAnswers = await PromptHelper.promptInstall();\r\n packages = installAnswers.packages;\r\n isDev = installAnswers.isDev;\r\n }\r\n }\r\n\r\n this.pm!.install(packages, {\r\n dev: isDev,\r\n global: params.options?.global\r\n });\r\n } catch (error) {\r\n PromptHelper.showError('✘ Installation failed', error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Remove packages\r\n */\r\n private async removePackages(params: types.RemoveParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n try {\r\n const packages = params.args?.packages.split(' ').filter((p: string) => p.trim());\r\n\r\n if (!packages || packages.length === 0) {\r\n PromptHelper.showError('Please specify packages to remove');\r\n return;\r\n }\r\n\r\n // Confirm removal\r\n const removeAnswers = await PromptHelper.promptRemove(packages);\r\n\r\n if (!removeAnswers.confirm) {\r\n PromptHelper.showInfo('Removal cancelled');\r\n return;\r\n }\r\n\r\n this.pm!.remove(packages, {\r\n global: params.options?.global\r\n });\r\n } catch (error) {\r\n PromptHelper.showError('✘ Removal failed', error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Update packages\r\n */\r\n private async updatePackages(params: types.UpdateParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n try {\r\n let packages = params.args?.packages\r\n ? params.args.packages.split(' ').filter((p: string) => p.trim())\r\n : undefined;\r\n\r\n // If no packages specified, prompt\r\n if (!packages || packages.length === 0) {\r\n const updateAnswers = await PromptHelper.promptUpdate();\r\n packages = updateAnswers.updateAll ? undefined : updateAnswers.packages;\r\n }\r\n\r\n this.pm!.update(packages);\r\n } catch (error) {\r\n PromptHelper.showError('✘ Update failed', error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Link package globally or link global package to project\r\n */\r\n private linkPackage(params?: types.LinkParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n const packageName = params?.args?.package;\r\n this.pm!.link(packageName);\r\n }\r\n\r\n /**\r\n * Unlink package globally or unlink global package from project\r\n */\r\n private unlinkPackage(params?: types.LinkParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n const packageName = params?.args?.package;\r\n this.pm!.unlink(packageName);\r\n }\r\n\r\n /**\r\n * List packages\r\n */\r\n private listPackages(params: types.ListParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n this.pm!.list({\r\n global: params.options?.global ?? false\r\n });\r\n }\r\n\r\n /**\r\n * Run any script from package.json\r\n */\r\n private runScript(params: types.RunScriptParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n const scriptName = params?.args?.script;\r\n\r\n if (!scriptName) {\r\n PromptHelper.showError('Please specify a script name');\r\n return;\r\n }\r\n\r\n try {\r\n // Collect dynamic args and options\r\n const args: string[] = [];\r\n\r\n if (params?.dynamicArgs && Array.isArray(params.dynamicArgs)) {\r\n args.push(...params.dynamicArgs);\r\n }\r\n\r\n if (params?.dynamicOptions && typeof params.dynamicOptions === 'object') {\r\n for (const [key, value] of Object.entries(params.dynamicOptions)) {\r\n args.push(`--${key}`);\r\n if (value !== true && value !== false) {\r\n args.push(String(value));\r\n }\r\n }\r\n }\r\n\r\n // console.log(`🚀 Running script: ${scriptName}${args.length > 0 ? ' ' + args.join(' ') : ''}\\n`);\r\n this.pm!.run(scriptName, args.length > 0 ? args : undefined);\r\n } catch (error) {\r\n PromptHelper.showError(`Failed to run script \"${scriptName}\"`, error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── BUILD ──────────────────────────────┐\r\n\r\n /**\r\n * Build the current space\r\n */\r\n private buildSpace(silently?: boolean) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n const loader = new Loader();\r\n loader.start('Building space...');\r\n\r\n try {\r\n this.pm!.runSilent('build');\r\n loader.stop(silently ? '' : '✔ Build succeeded');\r\n } catch {\r\n loader.stopWithError('✘ Build failed');\r\n process.exit(1);\r\n }\r\n }\r\n\r\n private buildSpaceBool(silently?: boolean) : boolean{\r\n if (!this.ensureSpace()) return false;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n const loader = new Loader();\r\n loader.start('Building space...');\r\n\r\n try {\r\n this.pm!.runSilent('build');\r\n loader.stop(silently ? '' : '✔ Build succeeded');\r\n return true;\r\n } catch {\r\n loader.stopWithError('✘ Build failed!');\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Run tests\r\n */\r\n private runTests(params?: types.TestParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n // Build args array for bun test\r\n const args: string[] = [];\r\n\r\n // Add test path if specified\r\n const testPath = params?.args?.path;\r\n if (testPath) {\r\n args.push(testPath);\r\n }\r\n\r\n // Add coverage flag\r\n if (params?.options?.coverage) {\r\n args.push('--coverage');\r\n }\r\n\r\n // Add coverage reporter\r\n if (params?.options?.['coverage-reporter']) {\r\n args.push('--coverage-reporter', params.options['coverage-reporter']);\r\n }\r\n\r\n // Add watch flag\r\n if (params?.options?.watch) {\r\n args.push('--watch');\r\n }\r\n\r\n // Add bail flag\r\n if (params?.options?.bail) {\r\n args.push('--bail');\r\n }\r\n\r\n // Add timeout\r\n if (params?.options?.timeout) {\r\n args.push('--timeout', params.options.timeout);\r\n }\r\n\r\n // Add rerun-each\r\n if (params?.options?.['rerun-each']) {\r\n args.push('--rerun-each', params.options['rerun-each']);\r\n }\r\n\r\n // Add concurrent\r\n if (params?.options?.concurrent) {\r\n args.push('--concurrent');\r\n }\r\n\r\n // Add test name pattern\r\n if (params?.options?.['test-name-pattern']) {\r\n args.push('-t', params.options['test-name-pattern']);\r\n }\r\n\r\n // Run tests with args\r\n if (args.length > 0) {\r\n this.pm!.run('test', args);\r\n } else {\r\n this.pm!.run('test');\r\n }\r\n }\r\n\r\n /**\r\n * Clean build artifacts\r\n */\r\n private clean() {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n const loader = new Loader();\r\n loader.start('Cleaning build artifacts...');\r\n\r\n try {\r\n this.pm!.run('clean');\r\n loader.stop('✔ Clean complete!');\r\n } catch {\r\n loader.stopWithError('✘ Clean failed!');\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Start the main file - builds silently first, then runs\r\n */\r\n private startMain(params?: types.StartParams) {\r\n if (!this.buildSpaceBool(true)) return;\r\n\r\n try {\r\n // Step 1: Find the built main file\r\n const mainFile = this.findBuiltMainFile();\r\n\r\n if (!mainFile) {\r\n PromptHelper.showError(\r\n 'Could not find built entry point.\\n' +\r\n 'Expected to find dist/main.js or dist/index.js after build.'\r\n );\r\n process.exit(1);\r\n }\r\n\r\n // Step 2: Collect ALL arguments (dynamic args from CLI)\r\n const args: string[] = [];\r\n\r\n // Get dynamic args (all unnamed args passed after 'start')\r\n if (params?.dynamicArgs && Array.isArray(params.dynamicArgs)) {\r\n args.push(...params.dynamicArgs);\r\n }\r\n\r\n // Get dynamic options (all --flags passed)\r\n if (params?.dynamicOptions && typeof params.dynamicOptions === 'object') {\r\n for (const [key, value] of Object.entries(params.dynamicOptions)) {\r\n args.push(`--${key}`);\r\n if (value !== true && value !== false) {\r\n args.push(String(value));\r\n }\r\n }\r\n }\r\n\r\n // Step 3: Show what we're running\r\n if (args.length > 0) {\r\n // console.log(`🚀 Running: bun ${mainFile} ${args.join(' ')}\\n`);\r\n } else {\r\n // console.log(`🚀 Running: bun ${mainFile}\\n`);\r\n }\r\n\r\n // Step 4: Run the built file with bun\r\n const result = spawnSync('bun', [mainFile, ...args], {\r\n stdio: 'inherit',\r\n cwd: process.cwd()\r\n });\r\n\r\n if (result.error) {\r\n PromptHelper.showError('Failed to start process', result.error as Error);\r\n process.exit(1);\r\n }\r\n\r\n if (result.status !== 0 && result.status !== null) {\r\n console.error('\\n✘ Process exited with error');\r\n process.exit(result.status);\r\n }\r\n } catch (error) {\r\n PromptHelper.showError('Failed to start', error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Find the built main entry file (after build)\r\n */\r\n private findBuiltMainFile(): string | null {\r\n const possiblePaths = [\r\n 'dist/main.js',\r\n 'dist/index.js',\r\n 'dist/app.js'\r\n ];\r\n\r\n // Try built files first\r\n for (const filePath of possiblePaths) {\r\n if (fs.existsSync(path.join(process.cwd(), filePath))) {\r\n return filePath;\r\n }\r\n }\r\n\r\n // Fallback: Check package.json main field\r\n try {\r\n const packageJsonPath = path.join(process.cwd(), 'package.json');\r\n if (fs.existsSync(packageJsonPath)) {\r\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\r\n\r\n if (packageJson.main && fs.existsSync(packageJson.main)) {\r\n return packageJson.main;\r\n }\r\n }\r\n } catch {\r\n // Ignore package.json errors\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Publish to npm\r\n */\r\n private async publish(params: types.PublishParams) {\r\n if(!this.buildSpaceBool(true)) return;\r\n try {\r\n const config = this.spaceManager.loadSpaceConfig();\r\n if (!config) {\r\n PromptHelper.showError('Could not load space configuration');\r\n return;\r\n }\r\n\r\n const fullName = config.repo.org\r\n ? `@${config.repo.org}/${config.repo.name}`\r\n : config.repo.name;\r\n\r\n // Prompt for publish options if not provided\r\n let tag = params.options?.tag || undefined;\r\n let access = params.options?.access || undefined;\r\n\r\n if (!tag && !access) {\r\n const publishAnswers = await PromptHelper.promptPublish(fullName);\r\n\r\n if (!publishAnswers.confirm) {\r\n PromptHelper.showInfo('Publish cancelled');\r\n return;\r\n }\r\n\r\n tag = publishAnswers.tag;\r\n access = publishAnswers.access;\r\n }\r\n\r\n const loader = new Loader();\r\n loader.start('Publishing package...');\r\n\r\n this.pm!.publish({\r\n tag,\r\n access: access as types.PublishAccess\r\n }, loader);\r\n } catch (error) {\r\n PromptHelper.showError('Publish failed', error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// main.ts\n//\n// repo : https://github.com/space-lib/space\n// author : https://github.com/maysara-elshewehy\n//\n// Developed with ❤️ by Maysara.\n\n\n\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\n\n import { App } from './app';\n\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\n\n\n\n// ╔════════════════════════════════════════ INIT ════════════════════════════════════════╗\n\n const app = App.create({\n name : 'Space',\n version : '0.0.2',\n desc : 'Build flexible spaces for any platform',\n });\n\n app.run();\n\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝"]}
1
+ {"version":3,"sources":["../src/app/mod/templateRegistry.ts","../src/app/mod/spaceManager.ts","../src/app/mod/jsonFormatter.ts","../src/app/mod/packageManager.ts","../src/app/mod/promptHelper.ts","../src/app/mod/loader.ts","../src/app/index.ts","../src/main.ts"],"names":["templateRegistry_exports","__export","TemplateRegistry","init_templateRegistry","__esmMin","type","includeUnready","templates","t","defaultTemplate","template","typeConfig","PACKAGE_JSON_KEY_ORDER","SPACE_FILE_KEY_ORDER","JsonFormatter","obj","options","indent","alignColons","sortKeys","tabWidth","keyOrder","globalMaxKeyLength","maxIndentWidth","filePath","content","D","formatted","currentDepth","maxDepth","item","depth","value","keys","sortAlphabetically","orderedKeys","unorderedKeys","key","a","b","maxLength","traverse","keyLength","arr","currentIndent","currentIndentWidth","jsonKey","indentDiff","keyDiff","padding","SpaceManager","basePath","config","spacePath","targetPath","createdDir","error","configPath","dirPath","repoUrl","execSync","gitPath","e","isOrgProject","hasGithubId","githubOwner","gitUrl","homepage","issuesUrl","packageTag","tagBadge","authorUrl","allFiles","packageJson","oldBinName","binPath","arrayOfFiles","file","fullPath","configWithDefaults","configContent","maxRetries","i","resolve","PackageManagerWrapper","packages","args","packageName","script","scriptCommand","command","loader","access","publishProc","versionMatch","stderr","proc","pkgPath","I","T","pkg","PromptHelper","params","name","description","author","input","orgRegex","simpleRegex","libReady","cliReady","serverReady","webReady","select","allTemplates","templateChoices","statusEmoji","statusText","packageManager","authorEmail","githubId","keywordsInput","keywords","k","license","spaceName","confirm","tag","shouldRemove","message","defaultValue","rl","defaultText","answer","currentPackages","packagesInput","isDev","p","dirName","nextSteps","step","Loader","successMessage","errorMessage","App","_App","cli","fullName","match","w","answers","org","currentDirName","E","kwString","installAnswers","updateAnswers","scriptName","silently","testPath","mainFile","result","spawnSync","possiblePaths","packageJsonPath","publishAnswers","app"],"mappings":"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","file":"main.js","sourcesContent":["// src/app/mod/templateRegistry.ts\r\n//\r\n// Developed with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import type { SpaceType, SpaceTypeConfig, TemplateVariant } from '../../types.d';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n export class TemplateRegistry {\r\n\r\n // ┌──────────────────────────────── INIT ──────────────────────────────┐\r\n\r\n private static readonly TEMPLATES: Record<SpaceType, SpaceTypeConfig> = {\r\n\r\n lib: {\r\n type : 'lib',\r\n defaultTemplate : 'clean',\r\n templates : [\r\n {\r\n name : 'clean',\r\n label : 'Clean Library',\r\n description : 'Zero dependencies - just TypeScript and build tools',\r\n repo : 'lib',\r\n requiresSetup : false,\r\n ready : true\r\n }\r\n ]\r\n },\r\n\r\n cli: {\r\n type : 'cli',\r\n defaultTemplate : 'clean',\r\n templates : [\r\n {\r\n name : 'clean',\r\n label : 'Clean CLI',\r\n description : 'Comes with @je-es/cli library for quick CLI development',\r\n repo : 'cli',\r\n deps : ['@je-es/cli'],\r\n requiresSetup : true,\r\n ready : true\r\n }\r\n ]\r\n },\r\n\r\n server: {\r\n type : 'server',\r\n defaultTemplate : 'clean',\r\n templates : [\r\n {\r\n name : 'clean',\r\n label : 'Clean Server',\r\n description : 'Comes with @je-es/server library for quick server development',\r\n repo : 'server',\r\n deps : ['@je-es/server'],\r\n requiresSetup : true,\r\n ready : true\r\n },\r\n ]\r\n },\r\n\r\n web: {\r\n type : 'web',\r\n defaultTemplate : 'clean',\r\n templates : [\r\n {\r\n name : 'clean',\r\n label : 'Clean Web App',\r\n description : 'Comes with @je-es/server and @je-es/client libs for quick web development',\r\n repo : 'web',\r\n deps : ['@je-es/server', '@je-es/client'],\r\n requiresSetup : true,\r\n ready : true\r\n },\r\n ]\r\n }\r\n\r\n };\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── MAIN ──────────────────────────────┐\r\n\r\n /**\r\n * Get all templates for a space type\r\n */\r\n static getTemplatesForType(type: SpaceType, includeUnready: boolean = false): SpaceTypeConfig['templates'] {\r\n const templates = this.TEMPLATES[type]?.templates || [];\r\n return includeUnready ? templates : templates.filter(t => t.ready);\r\n }\r\n\r\n /**\r\n * Get only ready templates for a space type\r\n */\r\n static getReadyTemplatesForType(type: SpaceType): SpaceTypeConfig['templates'] {\r\n return this.getTemplatesForType(type, false);\r\n }\r\n\r\n /**\r\n * Get default template for a space type\r\n */\r\n static getDefaultTemplate(type: SpaceType): TemplateVariant {\r\n const templates = this.TEMPLATES[type];\r\n if (!templates) return 'clean';\r\n\r\n // Try to find a ready template that matches the default\r\n const defaultTemplate = templates.templates.find(\r\n t => t.name === templates.defaultTemplate && t.ready\r\n );\r\n\r\n if (defaultTemplate) {\r\n return defaultTemplate.name;\r\n }\r\n\r\n // Fallback to first ready template\r\n const firstReady = templates.templates.find(t => t.ready);\r\n return firstReady?.name || templates.defaultTemplate;\r\n }\r\n\r\n /**\r\n * Get template configuration\r\n */\r\n static getTemplate(type: SpaceType, template: TemplateVariant) {\r\n const typeConfig = this.TEMPLATES[type];\r\n if (!typeConfig) return null;\r\n\r\n return typeConfig.templates.find(t => t.name === template);\r\n }\r\n\r\n /**\r\n * Check if template is ready for use\r\n */\r\n static isTemplateReady(type: SpaceType, template: TemplateVariant): boolean {\r\n const config = this.getTemplate(type, template);\r\n return config?.ready || false;\r\n }\r\n\r\n /**\r\n * Validate template variant for a space type\r\n */\r\n static isValidTemplate(type: SpaceType, template: TemplateVariant): boolean {\r\n const templates = this.getTemplatesForType(type);\r\n return templates.some(t => t.name === template);\r\n }\r\n\r\n /**\r\n * Get repository name for a template\r\n */\r\n static getRepoName(type: SpaceType, template: TemplateVariant): string {\r\n const config = this.getTemplate(type, template);\r\n return config?.repo || 'ready-lib';\r\n }\r\n\r\n /**\r\n * Get all space types\r\n */\r\n static getSpaceTypes(): SpaceType[] {\r\n return Object.keys(this.TEMPLATES) as SpaceType[];\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/app/mod/spaceManager.ts\r\n//\r\n// Developed with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import * as fs from 'fs';\r\n import * as path from 'path';\r\n import type { SpaceConfig, TemplateVariant } from '../../types.d';\r\n import { TemplateRegistry } from './templateRegistry';\r\n import { JsonFormatter, PACKAGE_JSON_KEY_ORDER, SPACE_FILE_KEY_ORDER } from './jsonFormatter';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n export class SpaceManager {\r\n\r\n // ┌──────────────────────────────── INIT ──────────────────────────────┐\r\n\r\n private basePath: string;\r\n\r\n constructor(basePath: string = process.cwd()) {\r\n this.basePath = basePath;\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── MAIN ──────────────────────────────┐\r\n\r\n // Create a new space by cloning from template\r\n async createSpace(config: SpaceConfig, spacePath?: string): Promise<void> {\r\n const targetPath = spacePath || path.join(this.basePath, config.repo.name);\r\n\r\n // Check if space already exists\r\n if (fs.existsSync(targetPath)) {\r\n throw new Error(`Space path \"${targetPath}\" already exists!`);\r\n }\r\n\r\n let createdDir = false;\r\n\r\n try {\r\n // Create directory if it doesn't exist\r\n if (!fs.existsSync(targetPath)) {\r\n fs.mkdirSync(targetPath, { recursive: true });\r\n createdDir = true;\r\n }\r\n\r\n // Clone template from @solution-dist\r\n await this.cloneTemplate(config.type, targetPath, config, config.template);\r\n\r\n // Create .space config file\r\n this.createSpaceConfig(targetPath, config);\r\n\r\n } catch (error) {\r\n // Cleanup on failure - only if we created the directory\r\n if (createdDir && fs.existsSync(targetPath)) {\r\n try {\r\n // Try to clean up, but don't fail if we can't\r\n await this.safeDeleteDirectory(targetPath);\r\n } catch {\r\n // Ignore cleanup errors\r\n console.warn(`Warning: Could not clean up directory at \"${targetPath}\"`);\r\n }\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n // Load space configuration from .space file\r\n loadSpaceConfig(spacePath?: string): SpaceConfig | null {\r\n const targetPath = spacePath || this.basePath;\r\n const configPath = path.join(targetPath, '.space');\r\n\r\n if (!fs.existsSync(configPath)) {\r\n return null;\r\n }\r\n\r\n const content = fs.readFileSync(configPath, 'utf-8');\r\n return JSON.parse(content);\r\n }\r\n\r\n // Check if current directory is a space\r\n isSpace(dirPath?: string): boolean {\r\n const targetPath = dirPath || this.basePath;\r\n return fs.existsSync(path.join(targetPath, '.space'));\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── HELP ──────────────────────────────┐\r\n\r\n // Clone template from @solution-dist repository\r\n private async cloneTemplate(\r\n type: 'lib' | 'cli' | 'server',\r\n targetPath: string,\r\n config: SpaceConfig,\r\n template: TemplateVariant\r\n ): Promise<void> {\r\n const repoName = TemplateRegistry.getRepoName(type, template);\r\n const repoUrl = `https://github.com/solution-dist/${repoName}.git`;\r\n\r\n try {\r\n const { execSync } = await import('child_process');\r\n\r\n // Clone silently (no output to terminal)\r\n execSync(\r\n `git clone --quiet --depth 1 ${repoUrl} \"${targetPath}\"`,\r\n { stdio: 'pipe' }\r\n );\r\n\r\n // Remove .git directory\r\n const gitPath = path.join(targetPath, '.git');\r\n if (fs.existsSync(gitPath)) {\r\n await this.safeDeleteDirectory(gitPath);\r\n }\r\n\r\n // Update files with project info\r\n await this.updateTemplateFiles(targetPath, config);\r\n\r\n } catch (e: unknown) {\r\n // Check if it's a \"repository not found\" error\r\n if(e instanceof Error) {\r\n if (e.message && e.message.includes('Repository not found')) {\r\n throw new Error(\r\n `Template repository not found: ${repoUrl}\\n` +\r\n `This template is not yet available. Please mark it as ready: false in templateRegistry.ts`\r\n );\r\n }\r\n\r\n throw new Error(`Failed to clone template from ${repoUrl}: ${e.message || e}`);\r\n } else {\r\n throw new Error(`Failed to clone template from ${repoUrl}: ${e}`);\r\n }\r\n }\r\n }\r\n\r\n // Update template files with project-specific information\r\n private async updateTemplateFiles(\r\n spacePath: string,\r\n config: SpaceConfig\r\n ): Promise<void> {\r\n\r\n // Generate context-aware URLs and values\r\n const isOrgProject = config.repo.org && config.repo.org.trim() !== '';\r\n const hasGithubId = config.author.id && config.author.id.trim() !== '';\r\n\r\n // Determine the GitHub owner (org or personal account)\r\n const githubOwner = isOrgProject ? config.repo.org : (hasGithubId ? config.author.id : '');\r\n\r\n // Generate URLs based on context\r\n const gitUrl = githubOwner\r\n ? `git+https://github.com/${githubOwner}/${config.repo.name}.git`\r\n : '';\r\n\r\n const homepage = githubOwner\r\n ? `https://github.com/${githubOwner}/${config.repo.name}#readme`\r\n : '';\r\n\r\n const issuesUrl = githubOwner\r\n ? `https://github.com/${githubOwner}/${config.repo.name}/issues`\r\n : '';\r\n\r\n // Prepare full package name (tag)\r\n const packageTag = isOrgProject\r\n ? `@${config.repo.org}/${config.repo.name}`\r\n : config.repo.name;\r\n\r\n // Prepare tag badge - format for shields.io badge\r\n let tagBadge = '🔥-';\r\n if (isOrgProject) {\r\n tagBadge += `@${(config.repo.org.replace(/-/g, '--') + '/' + config.repo.name.replace(/-/g, '--')).replace(/ /g, '_')}`;\r\n } else if (config.author.name) {\r\n tagBadge += (config.author.name.replace(/-/g, '--') + '/' + config.repo.name.replace(/-/g, '--')).replace(/ /g, '_');\r\n } else {\r\n tagBadge += (config.repo.name.replace(/-/g, '--')).replace(/ /g, '_');\r\n }\r\n\r\n // Prepare author URL\r\n const authorUrl = hasGithubId\r\n ? `https://github.com/${config.author.id}`\r\n : (config.author.url || '');\r\n\r\n // ✅ REMOVED: keywordsJson preparation - we'll handle keywords in package.json only\r\n\r\n // Recursively find all files\r\n const allFiles = this.getAllFiles(spacePath);\r\n\r\n for (const filePath of allFiles) {\r\n // Skip node_modules and .git\r\n if (filePath.includes('node_modules') || filePath.includes('.git')) {\r\n continue;\r\n }\r\n\r\n try {\r\n let content = fs.readFileSync(filePath, 'utf-8');\r\n // let hasChanges = false;\r\n\r\n // STEP 1: Replace template variables in the raw content first\r\n if (content.includes('{{')) {\r\n // hasChanges = true;\r\n\r\n // Replace all placeholders\r\n content = content\r\n // Package tag (full name with org if exists)\r\n .replace(/\\{\\{tag\\}\\}/g, packageTag)\r\n .replace(/\\{\\{tag-badge\\}\\}/g, tagBadge)\r\n\r\n // Repo info\r\n .replace(/\\{\\{name\\}\\}/g, config.repo.name)\r\n .replace(/\\{\\{repo\\}\\}/g, config.repo.name)\r\n .replace(/\\{\\{org\\}\\}/g, config.repo.org || '')\r\n .replace(/\\{\\{desc\\}\\}/g, config.repo.desc || `A ${config.type} space`)\r\n .replace(/\\{\\{description\\}\\}/g, config.repo.desc || `A ${config.type} space`)\r\n .replace(/\\{\\{version\\}\\}/g, config.repo.version)\r\n .replace(/\\{\\{license\\}\\}/g, config.repo.license || 'MIT')\r\n // ✅ REMOVED: keyword replacements here - handled in package.json section\r\n // .replace(/\\{\\{kw\\}\\}/g, keywordsJson)\r\n // .replace(/\\{\\{keywords\\}\\}/g, keywordsJson)\r\n\r\n // URLs\r\n .replace(/\\{\\{url\\}\\}/g, gitUrl)\r\n .replace(/\\{\\{repo_url\\}\\}/g, gitUrl)\r\n .replace(/\\{\\{git_url\\}\\}/g, gitUrl)\r\n .replace(/\\{\\{homepage\\}\\}/g, homepage)\r\n .replace(/\\{\\{issues\\}\\}/g, issuesUrl)\r\n\r\n // Space type, template, and PM\r\n .replace(/\\{\\{type\\}\\}/g, config.type)\r\n .replace(/\\{\\{template\\}\\}/g, config.template || 'clean')\r\n .replace(/\\{\\{pm\\}\\}/g, config.pm)\r\n\r\n // Author info\r\n .replace(/\\{\\{author\\}\\}/g, config.author.name || '')\r\n .replace(/\\{\\{author_name\\}\\}/g, config.author.name || '')\r\n .replace(/\\{\\{author_id\\}\\}/g, config.author.id || '')\r\n .replace(/\\{\\{author_email\\}\\}/g, config.author.email || '')\r\n .replace(/\\{\\{author_url\\}\\}/g, authorUrl);\r\n\r\n // Write the updated content\r\n fs.writeFileSync(filePath, content, 'utf-8');\r\n }\r\n\r\n // Special handling for package.json FIRST\r\n if (filePath.endsWith('package.json')) {\r\n // STEP 2: Parse and further update the JSON\r\n const packageJson = JSON.parse(content);\r\n\r\n // Set full package name (with org if exists)\r\n packageJson.name = packageTag;\r\n packageJson.version = config.repo.version;\r\n packageJson.description = config.repo.desc || `A ${config.type} space`;\r\n packageJson.license = config.repo.license || 'MIT';\r\n\r\n // ✅ Set keywords as array (this is correct and won't cause double-stringification)\r\n if (config.repo.kw && config.repo.kw.length > 0) {\r\n packageJson.keywords = config.repo.kw;\r\n } else {\r\n packageJson.keywords = [];\r\n }\r\n\r\n // Set homepage\r\n if (homepage) {\r\n packageJson.homepage = homepage;\r\n }\r\n\r\n // Set bugs/issues URL\r\n if (issuesUrl) {\r\n if (!packageJson.bugs) {\r\n packageJson.bugs = {};\r\n }\r\n packageJson.bugs.url = issuesUrl;\r\n }\r\n\r\n // Set author\r\n if (config.author.name) {\r\n if (config.author.email) {\r\n packageJson.author = {\r\n name: config.author.name,\r\n email: config.author.email,\r\n url: authorUrl || undefined\r\n };\r\n } else {\r\n packageJson.author = {\r\n name: config.author.name,\r\n url: authorUrl || undefined\r\n };\r\n }\r\n }\r\n\r\n // Set repository URL\r\n if (gitUrl) {\r\n packageJson.repository = {\r\n type: 'git',\r\n url: gitUrl\r\n };\r\n }\r\n\r\n // Update bin name for CLI projects\r\n if (config.type === 'cli' && packageJson.bin) {\r\n const oldBinName = Object.keys(packageJson.bin)[0];\r\n const binPath = packageJson.bin[oldBinName];\r\n delete packageJson.bin[oldBinName];\r\n packageJson.bin[config.repo.name] = binPath;\r\n }\r\n\r\n // Ensure bun engine exists\r\n if (!packageJson.engines) {\r\n packageJson.engines = {};\r\n }\r\n if (!packageJson.engines.bun) {\r\n packageJson.engines.bun = '>=1.0.0';\r\n }\r\n\r\n // STEP 3: Format and write package.json\r\n content = JsonFormatter.format(packageJson, { keyOrder: PACKAGE_JSON_KEY_ORDER });\r\n fs.writeFileSync(filePath, content + '\\n', 'utf-8');\r\n continue; // Skip the rest of the loop for package.json\r\n }\r\n\r\n } catch {\r\n // Silently skip files that can't be read/updated (like binaries)\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n // Recursively get all files in a directory\r\n private getAllFiles(dirPath: string, arrayOfFiles: string[] = []): string[] {\r\n const files = fs.readdirSync(dirPath);\r\n\r\n files.forEach((file) => {\r\n const fullPath = path.join(dirPath, file);\r\n\r\n if (fs.statSync(fullPath).isDirectory()) {\r\n arrayOfFiles = this.getAllFiles(fullPath, arrayOfFiles);\r\n } else {\r\n arrayOfFiles.push(fullPath);\r\n }\r\n });\r\n\r\n return arrayOfFiles;\r\n }\r\n\r\n // Create .space configuration file\r\n private createSpaceConfig(spacePath: string, config: SpaceConfig): void {\r\n const configPath = path.join(spacePath, '.space');\r\n\r\n // Generate URLs for .space file\r\n const isOrgProject = config.repo.org && config.repo.org.trim() !== '';\r\n const hasGithubId = config.author.id && config.author.id.trim() !== '';\r\n const githubOwner = isOrgProject ? config.repo.org : (hasGithubId ? config.author.id : '');\r\n\r\n const gitUrl = githubOwner\r\n ? `git+https://github.com/${githubOwner}/${config.repo.name}.git`\r\n : '';\r\n\r\n const homepage = githubOwner\r\n ? `https://github.com/${githubOwner}/${config.repo.name}#readme`\r\n : '';\r\n\r\n const issuesUrl = githubOwner\r\n ? `https://github.com/${githubOwner}/${config.repo.name}/issues`\r\n : '';\r\n\r\n const authorUrl = hasGithubId\r\n ? `https://github.com/${config.author.id}`\r\n : (config.author.url || '');\r\n\r\n const configWithDefaults = {\r\n type: config.type,\r\n template: config.template || 'clean',\r\n pm: config.pm,\r\n repo: {\r\n org: config.repo.org || '',\r\n name: config.repo.name,\r\n version: config.repo.version,\r\n desc: config.repo.desc || `A ${config.type} space`,\r\n kw: config.repo.kw || [],\r\n license: config.repo.license || 'MIT',\r\n issues: issuesUrl,\r\n homepage: homepage,\r\n git_url: gitUrl\r\n },\r\n author: {\r\n id: config.author.id || '',\r\n name: config.author.name || '',\r\n email: config.author.email || '',\r\n url: authorUrl\r\n },\r\n createdAt: new Date().toISOString()\r\n };\r\n\r\n const configContent = JsonFormatter.format(configWithDefaults, { keyOrder: SPACE_FILE_KEY_ORDER });\r\n\r\n fs.writeFileSync(configPath, configContent + '\\n', 'utf-8');\r\n }\r\n\r\n // Safely delete directory with retry logic\r\n private async safeDeleteDirectory(dirPath: string, maxRetries: number = 3): Promise<void> {\r\n for (let i = 0; i < maxRetries; i++) {\r\n try {\r\n fs.rmSync(dirPath, {\r\n recursive: true,\r\n force: true,\r\n maxRetries: 3,\r\n retryDelay: 100\r\n });\r\n\r\n // Verify deletion\r\n if (!fs.existsSync(dirPath)) {\r\n return;\r\n }\r\n } catch (error) {\r\n if (i === maxRetries - 1) {\r\n throw error;\r\n }\r\n // Wait before retry\r\n await new Promise(resolve => setTimeout(resolve, 300 * (i + 1)));\r\n }\r\n }\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/app/mod/jsonFormatter.ts\r\n//\r\n// Developed with ❤️ by Maysara.\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n import * as fs from 'fs';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n export interface FormatOptions {\r\n indent? : string; // default: '\\t'\r\n alignColons? : boolean; // default: true\r\n sortKeys? : boolean; // default: false\r\n tabWidth? : number; // default: 4 (visual width of a tab character)\r\n keyOrder? : string[]; // custom key order (keys not in list appear at end)\r\n }\r\n\r\n export const PACKAGE_JSON_KEY_ORDER = [\r\n 'name',\r\n 'version',\r\n 'description',\r\n 'keywords',\r\n 'license',\r\n 'homepage',\r\n 'bugs',\r\n 'author',\r\n 'repository',\r\n 'type',\r\n 'main',\r\n 'types',\r\n 'bin',\r\n 'files',\r\n 'exports',\r\n 'scripts',\r\n 'engines',\r\n 'peerDependencies',\r\n 'dependencies',\r\n 'devDependencies'\r\n ];\r\n\r\n export const SPACE_FILE_KEY_ORDER = [\r\n 'type',\r\n 'template',\r\n 'pm',\r\n 'repo',\r\n 'author',\r\n 'createdAt'\r\n ];\r\n\r\n // For nested objects in repo\r\n export const REPO_KEY_ORDER = [\r\n 'org',\r\n 'name',\r\n 'version',\r\n 'desc',\r\n 'kw',\r\n 'license',\r\n 'issues',\r\n 'homepage',\r\n 'git_url'\r\n ];\r\n\r\n // For nested objects in author\r\n export const AUTHOR_KEY_ORDER = [\r\n 'id',\r\n 'name',\r\n 'email',\r\n 'url'\r\n ];\r\n\r\n type JsonValue = string | number | boolean | null | JsonObject | JsonArray;\r\n interface JsonObject {\r\n [key: string]: JsonValue;\r\n }\r\n type JsonArray = JsonValue[];\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n export class JsonFormatter {\r\n\r\n // ┌──────────────────────────────── MAIN ──────────────────────────────┐\r\n\r\n // Format JSON with custom alignment and indentation\r\n static format(obj: JsonValue, options: FormatOptions = {}): string {\r\n const indent = options.indent || '\\t';\r\n const alignColons = options.alignColons !== false;\r\n const sortKeys = options.sortKeys || false;\r\n const tabWidth = options.tabWidth || 4;\r\n const keyOrder = options.keyOrder || [];\r\n\r\n // Calculate GLOBAL max key length across all nesting levels\r\n const globalMaxKeyLength = alignColons ? this.calculateGlobalMaxKeyLength(obj) : 0;\r\n\r\n // Calculate max indent depth (in visual characters)\r\n const maxDepth = this.calculateMaxDepth(obj);\r\n const maxIndentWidth = maxDepth * (indent === '\\t' ? tabWidth : indent.length);\r\n\r\n return this.formatValue(obj, 0, indent, alignColons, sortKeys, globalMaxKeyLength, maxIndentWidth, tabWidth, keyOrder);\r\n }\r\n\r\n // Format and write to file\r\n static formatFile(filePath: string, options: FormatOptions = {}): void {\r\n const content = fs.readFileSync(filePath, 'utf-8');\r\n const obj = JSON.parse(content) as JsonValue;\r\n const formatted = this.format(obj, options);\r\n fs.writeFileSync(filePath, formatted + '\\n', 'utf-8');\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── HELP ──────────────────────────────┐\r\n\r\n // Calculate the maximum nesting depth\r\n private static calculateMaxDepth(obj: JsonValue, currentDepth: number = 0): number {\r\n if (!obj || typeof obj !== 'object') {\r\n return currentDepth;\r\n }\r\n\r\n let maxDepth = currentDepth;\r\n\r\n if (Array.isArray(obj)) {\r\n obj.forEach(item => {\r\n const depth = this.calculateMaxDepth(item, currentDepth + 1);\r\n if (depth > maxDepth) maxDepth = depth;\r\n });\r\n } else {\r\n Object.values(obj).forEach(value => {\r\n const depth = this.calculateMaxDepth(value, currentDepth + 1);\r\n if (depth > maxDepth) maxDepth = depth;\r\n });\r\n }\r\n\r\n return maxDepth;\r\n }\r\n\r\n // Sort keys based on custom order or alphabetically\r\n private static sortKeys(keys: string[], keyOrder: string[], sortAlphabetically: boolean): string[] {\r\n if (keyOrder.length === 0) {\r\n return sortAlphabetically ? keys.sort() : keys;\r\n }\r\n\r\n // Separate keys into ordered and unordered\r\n const orderedKeys: string[] = [];\r\n const unorderedKeys: string[] = [];\r\n\r\n keys.forEach(key => {\r\n if (keyOrder.includes(key)) {\r\n orderedKeys.push(key);\r\n } else {\r\n unorderedKeys.push(key);\r\n }\r\n });\r\n\r\n // Sort ordered keys by their position in keyOrder\r\n orderedKeys.sort((a, b) => keyOrder.indexOf(a) - keyOrder.indexOf(b));\r\n\r\n // Sort unordered keys alphabetically if sortKeys is true\r\n if (sortAlphabetically) {\r\n unorderedKeys.sort();\r\n }\r\n\r\n // Return ordered keys first, then unordered\r\n return [...orderedKeys, ...unorderedKeys];\r\n }\r\n\r\n private static calculateGlobalMaxKeyLength(obj: JsonValue): number {\r\n let maxLength = 0;\r\n\r\n const traverse = (value: JsonValue): void => {\r\n if (!value || typeof value !== 'object') {\r\n return;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n value.forEach(item => traverse(item));\r\n return;\r\n }\r\n\r\n // It's an object\r\n const keys = Object.keys(value);\r\n keys.forEach(key => {\r\n const keyLength = JSON.stringify(key).length;\r\n if (keyLength > maxLength) {\r\n maxLength = keyLength;\r\n }\r\n traverse(value[key]);\r\n });\r\n };\r\n\r\n traverse(obj);\r\n return maxLength;\r\n }\r\n\r\n // Format any JSON value recursively\r\n private static formatValue(\r\n value: JsonValue,\r\n depth: number,\r\n indent: string,\r\n alignColons: boolean,\r\n sortKeys: boolean,\r\n globalMaxKeyLength: number,\r\n maxIndentWidth: number,\r\n tabWidth: number,\r\n keyOrder: string[]\r\n ): string {\r\n if (value === null) return 'null';\r\n if (value === undefined) return 'undefined';\r\n\r\n const type = typeof value;\r\n\r\n if (type === 'string') {\r\n return JSON.stringify(value);\r\n }\r\n\r\n if (type === 'number' || type === 'boolean') {\r\n return String(value);\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return this.formatArray(value, depth, indent, alignColons, sortKeys, globalMaxKeyLength, maxIndentWidth, tabWidth, keyOrder);\r\n }\r\n\r\n if (type === 'object') {\r\n return this.formatObject(value as JsonObject, depth, indent, alignColons, sortKeys, globalMaxKeyLength, maxIndentWidth, tabWidth, keyOrder);\r\n }\r\n\r\n return JSON.stringify(value);\r\n }\r\n\r\n // Format an array\r\n private static formatArray(\r\n arr: JsonArray,\r\n depth: number,\r\n indent: string,\r\n alignColons: boolean,\r\n sortKeys: boolean,\r\n globalMaxKeyLength: number,\r\n maxIndentWidth: number,\r\n tabWidth: number,\r\n keyOrder: string[]\r\n ): string {\r\n if (arr.length === 0) return '[]';\r\n\r\n // Check if array is simple (primitives only)\r\n const isSimple = arr.every(item =>\r\n typeof item === 'string' ||\r\n typeof item === 'number' ||\r\n typeof item === 'boolean' ||\r\n item === null\r\n );\r\n\r\n if (isSimple && arr.length <= 3) {\r\n // Inline simple short arrays\r\n return '[' + arr.map(item => this.formatValue(item, depth, indent, alignColons, sortKeys, globalMaxKeyLength, maxIndentWidth, tabWidth, keyOrder)).join(', ') + ']';\r\n }\r\n\r\n // Multi-line array\r\n const currentIndent = indent.repeat(depth + 1);\r\n const items = arr.map(item =>\r\n currentIndent + this.formatValue(item, depth + 1, indent, alignColons, sortKeys, globalMaxKeyLength, maxIndentWidth, tabWidth, keyOrder)\r\n );\r\n\r\n return '[\\n' + items.join(',\\n') + '\\n' + indent.repeat(depth) + ']';\r\n }\r\n\r\n // Format an object with GLOBAL alignment accounting for indentation\r\n private static formatObject(\r\n obj: JsonObject,\r\n depth: number,\r\n indent: string,\r\n alignColons: boolean,\r\n sortKeys: boolean,\r\n globalMaxKeyLength: number,\r\n maxIndentWidth: number,\r\n tabWidth: number,\r\n keyOrder: string[]\r\n ): string {\r\n if (Object.keys(obj).length === 0) return '{}';\r\n\r\n let keys = Object.keys(obj);\r\n\r\n // Apply custom ordering\r\n keys = this.sortKeys(keys, keyOrder, sortKeys);\r\n\r\n const currentIndent = indent.repeat(depth + 1);\r\n\r\n // Calculate visual width of current indentation\r\n const currentIndentWidth = (depth + 1) * (indent === '\\t' ? tabWidth : indent.length);\r\n\r\n // Format each key-value pair\r\n const lines = keys.map(key => {\r\n const jsonKey = JSON.stringify(key);\r\n const value = this.formatValue(obj[key], depth + 1, indent, alignColons, sortKeys, globalMaxKeyLength, maxIndentWidth, tabWidth, keyOrder);\r\n\r\n if (alignColons) {\r\n // Padding = (max indent width - current indent width) + (max key length - current key length)\r\n const indentDiff = maxIndentWidth - currentIndentWidth;\r\n const keyDiff = globalMaxKeyLength - jsonKey.length;\r\n const padding = ' '.repeat(indentDiff + keyDiff);\r\n return `${currentIndent}${jsonKey}${padding} : ${value}`;\r\n } else {\r\n return `${currentIndent}${jsonKey} : ${value}`;\r\n }\r\n });\r\n\r\n return '{\\n' + lines.join(',\\n') + '\\n' + indent.repeat(depth) + '}';\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/app/mod/packageManager.ts\r\n//\r\n// Developed with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { JsonFormatter, PACKAGE_JSON_KEY_ORDER } from './jsonFormatter';\r\n import { Loader } from './loader';\r\n import * as path from 'path';\r\n import * as fs from 'fs';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n export class PackageManagerWrapper {\r\n\r\n // ┌──────────────────────────────── INIT ──────────────────────────────┐\r\n\r\n // // Always use bun\r\n // private readonly pm = 'bun';\r\n\r\n // Default scripts\r\n private readonly DEFAULT_SCRIPTS = {\r\n build: 'tsup',\r\n test: 'test',\r\n lint: 'eslint src --ext .ts',\r\n };\r\n\r\n constructor() {\r\n // No need for pm parameter anymore\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── MAIN ──────────────────────────────┐\r\n\r\n // Install packages\r\n install(packages?: string[], options?: { dev?: boolean; global?: boolean }): void {\r\n const args: string[] = [];\r\n\r\n // Handle global installations differently\r\n if (options?.global) {\r\n args.push('install', '--global');\r\n\r\n if (packages && packages.length > 0) {\r\n args.push(...packages);\r\n } else {\r\n console.error('✘ Please specify packages to install globally');\r\n process.exit(1);\r\n }\r\n } else {\r\n args.push('install');\r\n\r\n if (packages && packages.length > 0) {\r\n args.push(...packages);\r\n }\r\n\r\n if (options?.dev) {\r\n args.push('--dev');\r\n }\r\n }\r\n\r\n console.log(`→ Installing${packages ? ` ${packages.join(', ')}` : ' dependencies'}${options?.global ? ' globally' : ''}...`);\r\n this.execute(args);\r\n\r\n // Format package.json after install (only for local installs)\r\n if (!options?.global) {\r\n this.format();\r\n }\r\n }\r\n\r\n /**\r\n * Remove packages\r\n */\r\n remove(packages: string[], options?: { global?: boolean }): void {\r\n const args = ['remove'];\r\n\r\n if (options?.global) {\r\n args.push('--global');\r\n }\r\n\r\n args.push(...packages);\r\n\r\n console.log(`🗑️ Removing ${packages.join(', ')}${options?.global ? ' globally' : ''}...`);\r\n this.execute(args);\r\n\r\n // Format package.json after remove (only for local removes)\r\n if (!options?.global) {\r\n this.format();\r\n }\r\n }\r\n\r\n /**\r\n * Link package globally or link global package to current project\r\n * - No args: Links current package globally (bun link)\r\n * - With package name: Links global package to current project (bun link <package>)\r\n */\r\n link(packageName?: string): void {\r\n if (packageName) {\r\n console.log(`🔗 Linking global package \"${packageName}\" to current project...`);\r\n this.execute(['link', packageName]);\r\n } else {\r\n console.log('🔗 Linking current package globally...');\r\n this.execute(['link']);\r\n }\r\n }\r\n\r\n /**\r\n * Unlink package globally or unlink global package from current project\r\n * - No args: Unlinks current package globally (bun unlink)\r\n * - With package name: Unlinks global package from current project (bun unlink <package>)\r\n */\r\n unlink(packageName?: string): void {\r\n if (packageName) {\r\n console.log(`🔓 Unlinking global package \"${packageName}\" from current project...`);\r\n this.execute(['unlink', packageName]);\r\n } else {\r\n console.log('🔓 Unlinking current package globally...');\r\n this.execute(['unlink']);\r\n }\r\n }\r\n\r\n /**\r\n * Run a script from package.json (with fallback to default)\r\n */\r\n run(script: string, args?: string[]): void {\r\n const scriptCommand = this.getScriptCommand(script);\r\n\r\n if (!scriptCommand) {\r\n console.error(`✘ Script \"${script}\" not found in package.json and no default available`);\r\n process.exit(1);\r\n }\r\n\r\n // If using default script, run it directly\r\n if (this.isUsingDefaultScript(script)) {\r\n const commandParts = scriptCommand.split(' ');\r\n const command = [...commandParts];\r\n\r\n if (args && args.length > 0) {\r\n command.push(...args);\r\n }\r\n\r\n this.execute(command);\r\n } else {\r\n // Use bun run for package.json scripts\r\n const command = ['run', script];\r\n if (args && args.length > 0) {\r\n command.push('--', ...args);\r\n }\r\n this.execute(command);\r\n }\r\n }\r\n\r\n /**\r\n * Run a script from package.json silently (with fallback to default)\r\n */\r\n runSilent(script: string, args?: string[]): void {\r\n const scriptCommand = this.getScriptCommand(script);\r\n\r\n if (!scriptCommand) {\r\n throw new Error(`Script \"${script}\" not found in package.json and no default available`);\r\n }\r\n\r\n // If using default script, run it directly\r\n if (this.isUsingDefaultScript(script)) {\r\n const commandParts = scriptCommand.split(' ');\r\n const command = [...commandParts];\r\n\r\n if (args && args.length > 0) {\r\n command.push(...args);\r\n }\r\n\r\n this.executeSilent(command);\r\n } else {\r\n // Use bun run for package.json scripts\r\n const command = ['run', script];\r\n if (args && args.length > 0) {\r\n command.push('--', ...args);\r\n }\r\n this.executeSilent(command);\r\n }\r\n }\r\n\r\n /**\r\n * Update packages\r\n */\r\n update(packages?: string[]): void {\r\n console.log(`🔄 Updating${packages ? ` ${packages.join(', ')}` : ' all packages'}...`);\r\n\r\n const args = ['update'];\r\n if (packages && packages.length > 0) {\r\n args.push(...packages);\r\n }\r\n this.execute(args);\r\n\r\n // Format package.json after update\r\n this.format();\r\n }\r\n\r\n /**\r\n * List installed packages\r\n */\r\n list(options?: { global?: boolean }): void {\r\n const args = ['pm', 'ls'];\r\n if (options?.global) {\r\n args.push('--global');\r\n }\r\n this.execute(args);\r\n }\r\n\r\n /**\r\n * Initialize a new package.json\r\n */\r\n init(): void {\r\n console.log('📝 Initializing package.json...');\r\n this.execute(['init', '-y']);\r\n\r\n // Format package.json after init\r\n this.format();\r\n }\r\n\r\n /**\r\n * Publish package (uses bun for publishing - simpler and more reliable)\r\n */\r\n publish(options?: { tag?: string; access?: 'public' | 'restricted' }, loader?: Loader): void {\r\n // Publish with bun (more reliable than npm)\r\n const args = ['publish'];\r\n if (options?.tag) {\r\n args.push('--tag', options.tag);\r\n }\r\n // Always set access flag for scoped packages, default to public\r\n const access = options?.access || 'public';\r\n args.push('--access', access);\r\n\r\n const publishProc = Bun.spawnSync(['bun', ...args], {\r\n stdout: 'pipe',\r\n stderr: 'pipe'\r\n });\r\n\r\n if (publishProc.exitCode === 0) {\r\n // Extract package name and version from output\r\n const stdout = new TextDecoder().decode(publishProc.stdout);\r\n const versionMatch = stdout.match(/\\+ (.+@[\\d.]+)/);\r\n\r\n if (loader) {\r\n if (versionMatch) {\r\n loader.stop(`✔ Published ${versionMatch[1]} successfully!`);\r\n } else {\r\n loader.stop('✔ Published successfully!');\r\n }\r\n } else {\r\n if (versionMatch) {\r\n console.log(`✔ Published ${versionMatch[1]} successfully!`);\r\n } else {\r\n console.log('✔ Published successfully!');\r\n }\r\n }\r\n } else {\r\n const stderr = new TextDecoder().decode(publishProc.stderr);\r\n if (loader) {\r\n loader.stopWithError('Publish failed!');\r\n } else {\r\n console.error('Publish failed!');\r\n }\r\n if (stderr) {\r\n console.error(stderr);\r\n }\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Execute bun command\r\n */\r\n execute(args: string[]): void {\r\n const proc = Bun.spawnSync(['bun', ...args], {\r\n stdout: 'inherit',\r\n stderr: 'inherit'\r\n });\r\n\r\n if (proc.exitCode !== 0) {\r\n console.error(`✘ Command failed: bun ${args.join(' ')}`);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Execute bun command silently\r\n */\r\n executeSilent(args: string[]): void {\r\n const proc = Bun.spawnSync(['bun', ...args], {\r\n stdout: 'pipe',\r\n stderr: 'pipe'\r\n });\r\n\r\n if (proc.exitCode !== 0) {\r\n // Only show errors if command failed\r\n const stderr = new TextDecoder().decode(proc.stderr);\r\n console.error(`✘ Command failed: bun ${args.join(' ')}`);\r\n if (stderr) {\r\n console.error(stderr);\r\n }\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Get package manager name\r\n */\r\n getName(): string {\r\n return 'bun';\r\n }\r\n\r\n /**\r\n * Get package manager emoji\r\n */\r\n getEmoji(): string {\r\n return '🥟';\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── HELP ──────────────────────────────┐\r\n\r\n /**\r\n * Format package.json after operations\r\n */\r\n private format(): void {\r\n try {\r\n const pkgPath = path.join(process.cwd(), 'package.json');\r\n if (fs.existsSync(pkgPath)) {\r\n JsonFormatter.formatFile(pkgPath, { keyOrder: PACKAGE_JSON_KEY_ORDER });\r\n }\r\n } catch {\r\n // Silently ignore formatting errors\r\n }\r\n }\r\n\r\n /**\r\n * Get script command (from package.json or default)\r\n */\r\n private getScriptCommand(script: string): string | null {\r\n const pkgPath = path.join(process.cwd(), 'package.json');\r\n\r\n // Try to read package.json\r\n if (fs.existsSync(pkgPath)) {\r\n try {\r\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\r\n\r\n // Check if script exists in package.json\r\n if (pkg.scripts && pkg.scripts[script]) {\r\n return pkg.scripts[script];\r\n }\r\n } catch {\r\n // If can't read package.json, fall through to defaults\r\n }\r\n }\r\n\r\n // Return default script if available\r\n if (script in this.DEFAULT_SCRIPTS) {\r\n return this.DEFAULT_SCRIPTS[script as keyof typeof this.DEFAULT_SCRIPTS];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Check if using default script (not from package.json)\r\n */\r\n private isUsingDefaultScript(script: string): boolean {\r\n const pkgPath = path.join(process.cwd(), 'package.json');\r\n\r\n if (fs.existsSync(pkgPath)) {\r\n try {\r\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\r\n\r\n // If script exists in package.json, not using default\r\n if (pkg.scripts && pkg.scripts[script]) {\r\n return false;\r\n }\r\n } catch {\r\n // If can't read, assume using default\r\n }\r\n }\r\n\r\n // Using default if script is in DEFAULT_SCRIPTS\r\n return script in this.DEFAULT_SCRIPTS;\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/app/mod/promptHelper.ts\r\n//\r\n// Developed with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { input, select, confirm } from '@inquirer/prompts';\r\n import { TemplateRegistry } from './templateRegistry';\r\n import type { SpaceType } from '../../types.d';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n export interface InitPromptAnswers {\r\n name : string;\r\n type : 'lib' | 'cli' | 'server';\r\n template : string;\r\n description : string;\r\n packageManager : 'bun' | 'npm';\r\n author : string;\r\n authorEmail : string;\r\n githubId : string;\r\n keywords : string[];\r\n license : string;\r\n }\r\n\r\n export interface PublishPromptAnswers {\r\n confirm : boolean;\r\n tag? : string;\r\n access? : 'public' | 'restricted';\r\n }\r\n\r\n export interface RemovePromptAnswers {\r\n packages : string[];\r\n confirm : boolean;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n export class PromptHelper {\r\n\r\n // ┌──────────────────────────────── MAIN ──────────────────────────────┐\r\n\r\n /**\r\n * Prompt for init command parameters\r\n */\r\n static async promptInit(params: {\r\n name? : string;\r\n org? : string;\r\n type? : string;\r\n template? : string;\r\n desc? : string;\r\n }): Promise<InitPromptAnswers> {\r\n\r\n let name = params.name;\r\n let type = params.type;\r\n let template = params.template;\r\n let description = params.desc;\r\n let author = '';\r\n\r\n // Name (supports @org/name format)\r\n if (!name || name === 'my-space') {\r\n name = await input({\r\n message: 'name:',\r\n default: 'my-space',\r\n validate: (value: string) => {\r\n if (!value || value.trim() === '') {\r\n return 'Space name is required';\r\n }\r\n // Check for @org/name format\r\n const orgRegex = /^@([a-z0-9-_]+)\\/([a-z0-9-_]+)$/;\r\n const simpleRegex = /^[a-z0-9-_]+$/;\r\n\r\n if (!orgRegex.test(value) && !simpleRegex.test(value)) {\r\n return 'Name must be either \"package-name\" or \"@org/package-name\" (lowercase, numbers, hyphens, underscores only)';\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n // Type\r\n if (!type) {\r\n // Check which space types have ready templates\r\n const libReady = TemplateRegistry.getTemplatesForType('lib', false).length > 0;\r\n const cliReady = TemplateRegistry.getTemplatesForType('cli', false).length > 0;\r\n const serverReady = TemplateRegistry.getTemplatesForType('server', false).length > 0;\r\n const webReady = TemplateRegistry.getTemplatesForType('web', false).length > 0;\r\n\r\n type = await select({\r\n message: 'type:',\r\n choices: [\r\n {\r\n name: `→ Library - TypeScript library for npm${!libReady ? ' (Coming Soon)' : ''}`,\r\n value: 'lib',\r\n disabled: !libReady ? 'No templates ready yet' : false\r\n },\r\n {\r\n name: `→ CLI - Command-line tool${!cliReady ? ' (Coming Soon)' : ''}`,\r\n value: 'cli',\r\n disabled: !cliReady ? 'No templates ready yet' : false\r\n },\r\n {\r\n name: `→ Server - Backend server application${!serverReady ? ' (Coming Soon)' : ''}`,\r\n value: 'server',\r\n disabled: !serverReady ? 'No templates ready yet' : false\r\n },\r\n {\r\n name: `→ Web App - Full-stack web application${!webReady ? ' (Coming Soon)' : ''}`,\r\n value: 'web',\r\n disabled: !webReady ? 'No templates ready yet' : false\r\n }\r\n ]\r\n });\r\n }\r\n\r\n // Template Variant (based on type) - show all templates with status\r\n if (!template) {\r\n const allTemplates = TemplateRegistry.getTemplatesForType(type as SpaceType, true);\r\n const readyTemplates = allTemplates.filter(t => t.ready);\r\n\r\n // Check if there are any ready templates\r\n if (readyTemplates.length === 0) {\r\n throw new Error(`No templates are ready yet for \"${type}\" spaces. This space type is coming soon!`);\r\n }\r\n\r\n const templateChoices = allTemplates.map(t => {\r\n const statusEmoji = t.ready ? '✔' : '🚧';\r\n const statusText = t.ready ? '' : ' (Coming Soon)';\r\n return {\r\n name: `${statusEmoji} ${t.label}${statusText} - ${t.description}`,\r\n value: t.name,\r\n short: t.label,\r\n disabled: !t.ready ? 'Not ready yet' : false\r\n };\r\n });\r\n\r\n template = await select({\r\n message: 'template:',\r\n choices: templateChoices,\r\n default: TemplateRegistry.getDefaultTemplate(type as SpaceType)\r\n });\r\n }\r\n\r\n // Description\r\n if (!description) {\r\n const defaultDesc = type === 'lib'\r\n ? `A TypeScript library`\r\n : type === 'cli'\r\n ? `A command-line tool`\r\n : `A backend server`;\r\n\r\n description = await input({\r\n message: 'desc:',\r\n default: defaultDesc\r\n });\r\n }\r\n\r\n // Package Manager - Always use bun (removed from prompt)\r\n const packageManager = 'bun';\r\n\r\n // Author name\r\n author = await input({\r\n message: 'author name:',\r\n default: ''\r\n });\r\n\r\n // Author email\r\n const authorEmail = await input({\r\n message: 'author email:',\r\n default: '',\r\n validate: (value: string) => {\r\n if (value && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\r\n return 'Please enter a valid email address or leave empty';\r\n }\r\n return true;\r\n }\r\n });\r\n\r\n // GitHub username\r\n const githubId = await input({\r\n message: 'github username:',\r\n default: '',\r\n validate: (value: string) => {\r\n if (value && !/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/i.test(value)) {\r\n return 'Please enter a valid GitHub username or leave empty';\r\n }\r\n return true;\r\n }\r\n });\r\n\r\n // Keywords\r\n const keywordsInput = await input({\r\n message: 'keywords (comma-separated):',\r\n default: '',\r\n });\r\n\r\n const keywords = keywordsInput\r\n ? keywordsInput.split(',').map(k => k.trim()).filter(k => k)\r\n : [];\r\n\r\n // License\r\n const license = await input({\r\n message: 'license:',\r\n default: 'MIT'\r\n });\r\n\r\n return {\r\n name,\r\n type: type as 'lib' | 'cli' | 'server',\r\n template,\r\n description,\r\n packageManager: packageManager as 'bun' | 'npm',\r\n author,\r\n authorEmail,\r\n githubId,\r\n keywords,\r\n license\r\n };\r\n }\r\n\r\n /**\r\n * Prompt for publish confirmation and options\r\n */\r\n static async promptPublish(spaceName: string): Promise<PublishPromptAnswers> {\r\n const shouldPublish = await confirm({\r\n message: `Are you sure you want to publish \"${spaceName}\" to npm?`,\r\n default: false\r\n });\r\n\r\n if (!shouldPublish) {\r\n return {\r\n confirm: false\r\n };\r\n }\r\n\r\n const tag = await input({\r\n message: 'Publish with a tag (e.g., beta, next) or leave empty for latest:',\r\n default: ''\r\n });\r\n\r\n const access = await select({\r\n message: '🔐 Access level:',\r\n choices: [\r\n { name: 'Public - Anyone can install', value: 'public' },\r\n { name: 'Restricted - Requires authentication', value: 'restricted' }\r\n ],\r\n default: 'public'\r\n });\r\n\r\n return {\r\n confirm: true,\r\n tag: tag || undefined,\r\n access: access as 'public' | 'restricted'\r\n };\r\n }\r\n\r\n /**\r\n * Prompt for package removal confirmation\r\n */\r\n static async promptRemove(packages: string[]): Promise<RemovePromptAnswers> {\r\n const shouldRemove = await confirm({\r\n message: `Remove ${packages.join(', ')}?`,\r\n default: true\r\n });\r\n\r\n return {\r\n packages,\r\n confirm: shouldRemove\r\n };\r\n }\r\n\r\n /**\r\n * Simple confirmation prompt helper\r\n */\r\n static async promptConfirm(message: string, defaultValue: boolean = false): Promise<boolean> {\r\n const readline = await import('readline');\r\n const rl = readline.createInterface({\r\n input : process.stdin,\r\n output : process.stdout\r\n });\r\n\r\n const defaultText = defaultValue ? ' (Y/n)' : ' (y/N)';\r\n\r\n return new Promise((resolve) => {\r\n rl.question(`${message}${defaultText} `, (answer: string) => {\r\n rl.close();\r\n\r\n if (answer.trim() === '') {\r\n resolve(defaultValue);\r\n } else {\r\n resolve(answer.trim().toLowerCase() === 'y' || answer.trim().toLowerCase() === 'yes');\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Prompt for package installation\r\n */\r\n static async promptInstall(currentPackages?: string): Promise<{\r\n packages: string[];\r\n isDev: boolean;\r\n }> {\r\n const packagesInput = await input({\r\n message: 'Enter package names (space-separated):',\r\n default: currentPackages || '',\r\n validate: (value: string) => {\r\n if (!value || value.trim() === '') {\r\n return 'Please enter at least one package name';\r\n }\r\n return true;\r\n }\r\n });\r\n\r\n const isDev = await confirm({\r\n message: '🛠️ Install as dev dependency?',\r\n default: false\r\n });\r\n\r\n return {\r\n packages: packagesInput.split(' ').filter((p: string) => p.trim()),\r\n isDev\r\n };\r\n }\r\n\r\n /**\r\n * Prompt for package update selection\r\n */\r\n static async promptUpdate(): Promise<{ updateAll: boolean; packages?: string[] }> {\r\n const updateType = await select({\r\n message: 'What do you want to update?',\r\n choices: [\r\n { name: 'All packages', value: 'all' },\r\n { name: 'Specific packages', value: 'specific' }\r\n ]\r\n });\r\n\r\n if (updateType === 'all') {\r\n return {\r\n updateAll: true\r\n };\r\n }\r\n\r\n const packagesInput = await input({\r\n message: '📦 Enter package names (space-separated):',\r\n validate: (value: string) => {\r\n if (!value || value.trim() === '') {\r\n return 'Please enter at least one package name';\r\n }\r\n return true;\r\n }\r\n });\r\n\r\n return {\r\n updateAll: false,\r\n packages: packagesInput.split(' ').filter((p: string) => p.trim())\r\n };\r\n }\r\n\r\n /**\r\n * Prompt user if they want to use current directory\r\n */\r\n static async promptUseCurrentDir(dirName: string): Promise<boolean> {\r\n const shouldUse = await confirm({\r\n message: `Use current directory \"${dirName}\" as the space root?`,\r\n default: true\r\n });\r\n\r\n return shouldUse;\r\n }\r\n\r\n /**\r\n * Prompt user if they want to delete existing directory\r\n */\r\n static async promptDeleteExistingDir(dirPath: string): Promise<boolean> {\r\n const shouldDelete = await confirm({\r\n message: `⚠️ Directory already exists at \"${dirPath}\". Delete and recreate?`,\r\n default: false\r\n });\r\n\r\n return shouldDelete;\r\n }\r\n\r\n /**\r\n * Show a success message with next steps\r\n */\r\n static showSuccess(spaceName: string, nextSteps: string[]) {\r\n console.log('');\r\n nextSteps.forEach((step) => {\r\n console.log(`→ ${step}`);\r\n });\r\n console.log('');\r\n }\r\n\r\n /**\r\n * Show an error message\r\n */\r\n static showError(message: string, error?: Error) {\r\n console.log('\\n✘ Error:', message);\r\n if (error && error.message) {\r\n console.log(` ${error.message}`);\r\n }\r\n console.log('');\r\n }\r\n\r\n /**\r\n * Show a warning message\r\n */\r\n static showWarning(message: string) {\r\n console.log('\\n⚠️ Warning:', message);\r\n console.log('');\r\n }\r\n\r\n /**\r\n * Show an info message\r\n */\r\n static showInfo(message: string) {\r\n console.log('\\nℹ️ ', message);\r\n console.log('');\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/app/mod/loader.ts\r\n//\r\n// Developed with ❤️ by Maysara.\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n export class Loader {\r\n\r\n // ┌──────────────────────────────── INIT ──────────────────────────────┐\r\n\r\n private frames: string[] = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\r\n private currentFrame: number = 0;\r\n private interval: NodeJS.Timeout | null = null;\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── MAIN ──────────────────────────────┐\r\n\r\n start(message: string): void {\r\n process.stdout.write(`\\n${message}`);\r\n this.interval = setInterval(() => {\r\n process.stdout.write(`\\r${this.frames[this.currentFrame]} ${message}`);\r\n this.currentFrame = (this.currentFrame + 1) % this.frames.length;\r\n }, 80);\r\n }\r\n\r\n stop(successMessage: string): void {\r\n if (this.interval) {\r\n clearInterval(this.interval);\r\n this.interval = null;\r\n }\r\n\r\n if (successMessage === '') {\r\n // Clear the current line and move cursor up to remove the loader completely\r\n process.stdout.write('\\r\\x1b[K\\x1b[1A\\x1b[K');\r\n } else {\r\n process.stdout.write(`\\r${successMessage} \\n\\n`);\r\n }\r\n }\r\n\r\n stopWithError(errorMessage: string): void {\r\n if (this.interval) {\r\n clearInterval(this.interval);\r\n this.interval = null;\r\n }\r\n process.stdout.write(`\\r✘ ${errorMessage} \\n\\n`);\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/app/index.ts\r\n//\r\n// Developed with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { cli } from '@je-es/cli';\r\n import * as types from \"../types.d\";\r\n import { SpaceManager } from './mod/spaceManager';\r\n import { PackageManagerWrapper } from './mod/packageManager';\r\n import { PromptHelper } from './mod/promptHelper';\r\n import { Loader } from './mod/loader';\r\n import { spawnSync } from 'child_process';\r\n import * as path from 'path';\r\n import * as fs from 'fs';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n export class App {\r\n\r\n // ┌──────────────────────────────── INIT ──────────────────────────────┐\r\n\r\n private spaceManager : SpaceManager;\r\n private pm : PackageManagerWrapper | null = null;\r\n\r\n constructor(\r\n public config : types.AppConfig\r\n ) {\r\n this.spaceManager = new SpaceManager();\r\n this.initPackageManager();\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── MAIN ──────────────────────────────┐\r\n\r\n static create(config: types.AppConfig): App {\r\n return new App(config);\r\n }\r\n\r\n run() {\r\n // CLI Setup\r\n cli(this.config.name, this.config.version).description(this.config.desc)\r\n\r\n // ═══════════════════════════ SPACE COMMANDS ═══════════════════════════\r\n\r\n // 'init' command - create new spaces\r\n .command({\r\n name : 'init',\r\n description : 'Create a new space (lib or cli)',\r\n\r\n args: [\r\n {\r\n name : 'name',\r\n required : false,\r\n default : 'my-space',\r\n description : 'Name of the space (supports @org/name format)'\r\n }\r\n ],\r\n\r\n options: [\r\n {\r\n name : 'type',\r\n flag : '-t',\r\n type : 'string',\r\n required : false,\r\n description : 'Type of space (lib or cli)'\r\n },\r\n {\r\n name : 'description',\r\n flag : '--desc',\r\n type : 'string',\r\n required : false,\r\n description : 'Description of the space'\r\n }\r\n ],\r\n\r\n action: (params: types.InitCommandParams) => this.createNewSpaceOnGroundViaCLI(params)\r\n })\r\n\r\n\r\n // 'lint' command - run linter\r\n .command({\r\n name : 'lint',\r\n description : 'Run linter for the current space',\r\n\r\n options: [\r\n {\r\n name : 'fix',\r\n flag : '--fix',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Automatically fix linting issues'\r\n }\r\n ],\r\n\r\n action: (params: types.LintParams) => this.runLint(params)\r\n })\r\n\r\n // 'info' command - show space information\r\n .command({\r\n name : 'info',\r\n description : 'Show current space information',\r\n action : () => this.showSpaceInfo()\r\n })\r\n\r\n // ═══════════════════════════ PACKAGE MANAGER COMMANDS ═══════════════════════════\r\n\r\n // 'install' or 'i' command - install packages\r\n .command({\r\n name : 'install',\r\n aliases : ['i'],\r\n description : 'Install packages',\r\n\r\n args: [\r\n {\r\n name : 'packages',\r\n required : false,\r\n description : 'Packages to install (space-separated)'\r\n }\r\n ],\r\n\r\n options: [\r\n {\r\n name : 'dev',\r\n flag : '--dev',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Install as dev dependency'\r\n },\r\n {\r\n name : 'global',\r\n flag : '--global',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Install globally'\r\n }\r\n ],\r\n\r\n action: (params: types.InstallParams) => this.installPackages(params)\r\n })\r\n\r\n // 'remove' or 'r' command - remove packages\r\n .command({\r\n name : 'remove',\r\n aliases : ['r'],\r\n description : 'Remove packages',\r\n\r\n args: [\r\n {\r\n name : 'packages',\r\n required : true,\r\n description : 'Packages to remove (space-separated)'\r\n }\r\n ],\r\n\r\n options: [\r\n {\r\n name : 'global',\r\n flag : '--global',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Remove globally'\r\n }\r\n ],\r\n\r\n action: (params: types.RemoveParams) => this.removePackages(params)\r\n })\r\n\r\n // 'update' or 'up' command - update packages\r\n .command({\r\n name : 'update',\r\n aliases : ['up'],\r\n description : 'Update packages',\r\n\r\n args: [\r\n {\r\n name : 'packages',\r\n required : false,\r\n description : 'Packages to update (space-separated, or all if empty)'\r\n }\r\n ],\r\n\r\n action: (params: types.UpdateParams) => this.updatePackages(params)\r\n })\r\n\r\n // 'link' command - link package globally OR link global package to project\r\n .command({\r\n name : 'link',\r\n description : 'Link package globally (no args) or link global package to project (with package name)',\r\n\r\n args: [\r\n {\r\n name : 'package',\r\n required : false,\r\n description : 'Package name to link from global (optional)'\r\n }\r\n ],\r\n\r\n action: (params: types.LinkParams) => this.linkPackage(params)\r\n })\r\n\r\n // 'unlink' command - unlink package globally OR unlink global package from project\r\n .command({\r\n name : 'unlink',\r\n description : 'Unlink package globally (no args) or unlink global package from project (with package name)',\r\n\r\n args: [\r\n {\r\n name : 'package',\r\n required : false,\r\n description : 'Package name to unlink from global (optional)'\r\n }\r\n ],\r\n\r\n action: (params: types.LinkParams) => this.unlinkPackage(params)\r\n })\r\n\r\n // 'list' or 'ls' command - list installed packages\r\n .command({\r\n name : 'list',\r\n aliases : ['ls'],\r\n description : 'List installed packages',\r\n\r\n options: [\r\n {\r\n name : 'global',\r\n flag : '--global',\r\n type : 'boolean',\r\n required : false,\r\n description : 'List global packages'\r\n }\r\n ],\r\n\r\n action: (params: types.ListParams) => this.listPackages(params)\r\n })\r\n\r\n // ═══════════════════════════ BUILD & TEST COMMANDS ═══════════════════════════\r\n\r\n // 'build' command - build the space\r\n .command({\r\n name : 'build',\r\n description : 'Build the current space',\r\n action : () => this.buildSpace()\r\n })\r\n\r\n // 'test' command - run tests\r\n .command({\r\n name : 'test',\r\n description : 'Run tests for the current space',\r\n\r\n args: [\r\n {\r\n name : 'path',\r\n required : false,\r\n description : 'Specific test file or folder (optional)'\r\n }\r\n ],\r\n\r\n options: [\r\n {\r\n name : 'coverage',\r\n flag : '--coverage',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Generate code coverage report'\r\n },\r\n {\r\n name : 'watch',\r\n flag : '--watch',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Run tests in watch mode'\r\n },\r\n {\r\n name : 'bail',\r\n flag : '--bail',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Exit on first test failure'\r\n },\r\n {\r\n name : 'timeout',\r\n flag : '--timeout',\r\n type : 'string',\r\n required : false,\r\n description : 'Set test timeout in milliseconds'\r\n },\r\n {\r\n name : 'rerun-each',\r\n flag : '--rerun-each',\r\n type : 'string',\r\n required : false,\r\n description : 'Re-run each test N times'\r\n },\r\n {\r\n name : 'concurrent',\r\n flag : '--concurrent',\r\n type : 'boolean',\r\n required : false,\r\n description : 'Run tests concurrently'\r\n },\r\n {\r\n name : 'coverage-reporter',\r\n flag : '--coverage-reporter',\r\n type : 'string',\r\n required : false,\r\n description : 'Coverage reporter format (text, lcov, etc.)'\r\n },\r\n {\r\n name : 'test-name-pattern',\r\n flag : '-t',\r\n type : 'string',\r\n required : false,\r\n description : 'Filter tests by name pattern'\r\n }\r\n ],\r\n\r\n action: (params: types.TestParams) => this.runTests(params)\r\n })\r\n\r\n // 'run' command - run any script from package.json\r\n .command({\r\n name : 'run',\r\n description : 'Run any script from package.json',\r\n\r\n args: [\r\n {\r\n name : 'script',\r\n required : true,\r\n description : 'Script name from package.json'\r\n }\r\n ],\r\n\r\n allowDynamicArgs : true, // Allow additional arguments\r\n allowDynamicOptions : true, // Allow additional options\r\n\r\n action: (params: types.RunScriptParams) => this.runScript(params)\r\n })\r\n\r\n // 'clean' command - clean build artifacts\r\n .command({\r\n name : 'clean',\r\n description : 'Clean build artifacts',\r\n action : () => this.clean()\r\n })\r\n\r\n // 'start' command - start the main file\r\n .command({\r\n name : 'start',\r\n description : 'Start the main file',\r\n allowDynamicArgs : true, // Allow any arguments to pass through\r\n allowDynamicOptions : true, // Allow any options to pass through\r\n action : (params: types.StartParams) => this.startMain(params)\r\n })\r\n\r\n // ═══════════════════════════ PUBLISH COMMAND ═══════════════════════════\r\n\r\n // 'publish' command - publish to npm\r\n .command({\r\n name : 'publish',\r\n description : 'Publish space to npm registry',\r\n\r\n options: [\r\n {\r\n name : 'tag',\r\n flag : '--tag',\r\n type : 'string',\r\n required : false,\r\n description : 'Publish with tag (e.g., beta, next)'\r\n },\r\n {\r\n name : 'access',\r\n flag : '--access',\r\n type : 'string',\r\n required : false,\r\n description : 'Access level (public or restricted)'\r\n }\r\n ],\r\n\r\n action: (params: types.PublishParams) => this.publish(params)\r\n })\r\n\r\n // Build and run CLI\r\n .build().run();\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── HELP ──────────────────────────────┐\r\n\r\n static defaultConfig(): types.AppConfig {\r\n return {\r\n name : 'Space',\r\n version : '0.0.1',\r\n desc : 'Build flexible spaces for any platform',\r\n };\r\n }\r\n\r\n /**\r\n * Initialize package manager based on space config\r\n */\r\n private initPackageManager() {\r\n if (this.spaceManager.isSpace()) {\r\n // Always use bun - no need to check config\r\n this.pm = new PackageManagerWrapper();\r\n }\r\n }\r\n\r\n /**\r\n * Ensure we're in a space directory\r\n */\r\n private ensureSpace(): boolean {\r\n if (!this.spaceManager.isSpace()) {\r\n console.error('✘ Not a space directory. Run \"space init <name> -t lib|cli\" first.');\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Parse package name to extract org and name\r\n * Examples:\r\n * \"@je-es/ast\" -> { org: \"je-es\", name: \"ast\" }\r\n * \"my-package\" -> { org: \"\", name: \"my-package\" }\r\n */\r\n private parsePackageName(fullName: string): { org: string; name: string } {\r\n const orgRegex = /^@([a-z0-9-_]+)\\/([a-z0-9-_]+)$/i;\r\n const match = fullName.match(orgRegex);\r\n\r\n if (match) {\r\n return {\r\n org: match[1],\r\n name: match[2]\r\n };\r\n }\r\n\r\n return {\r\n org: '',\r\n name: fullName\r\n };\r\n }\r\n\r\n /**\r\n * Delete directory with retry logic for Windows file locking issues\r\n */\r\n private async deleteDirectoryWithRetry(dirPath: string, maxRetries: number = 3): Promise<void> {\r\n for (let i = 0; i < maxRetries; i++) {\r\n try {\r\n // Try to delete\r\n fs.rmSync(dirPath, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });\r\n\r\n // Verify deletion\r\n if (!fs.existsSync(dirPath)) {\r\n return; // Success!\r\n }\r\n } catch (error: unknown) {\r\n if (i === maxRetries - 1) {\r\n // Last attempt failed\r\n throw error;\r\n }\r\n\r\n // Wait before retry (increasing delay)\r\n await new Promise(resolve => setTimeout(resolve, 500 * (i + 1)));\r\n }\r\n }\r\n\r\n throw new Error('Failed to delete directory after multiple attempts');\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── SPACE ──────────────────────────────┐\r\n\r\n /**\r\n * Create a new space via CLI\r\n */\r\n private async createNewSpaceOnGroundViaCLI(params: types.InitCommandParams) {\r\n try {\r\n // Prompt for missing parameters\r\n const answers = await PromptHelper.promptInit({\r\n type : params.options.type,\r\n template : params.options.template,\r\n\r\n org : '',\r\n name : params.args.name,\r\n desc : params.options.desc,\r\n });\r\n\r\n // Parse package name to extract org and actual name\r\n const { org, name } = this.parsePackageName(answers.name);\r\n\r\n // Validate type\r\n if (!['lib', 'cli', 'server'].includes(answers.type)) {\r\n PromptHelper.showError('Invalid space type. Must be lib, cli or server.');\r\n process.exit(1);\r\n }\r\n\r\n // Validate template\r\n const { TemplateRegistry } = await import('./mod/templateRegistry');\r\n if (!TemplateRegistry.isValidTemplate(answers.type, answers.template as types.TemplateVariant)) {\r\n PromptHelper.showError('Invalid template for this space type.');\r\n process.exit(1);\r\n }\r\n\r\n // Check if template is ready\r\n if (!TemplateRegistry.isTemplateReady(answers.type, answers.template as types.TemplateVariant)) {\r\n PromptHelper.showError('This template is not ready yet. Please choose another template.');\r\n process.exit(1);\r\n }\r\n\r\n // Determine the target space path\r\n let spacePath: string | undefined;\r\n\r\n // Get current directory name\r\n const currentDirName = path.basename(process.cwd());\r\n\r\n // Check if name is empty and ask if user wants to use current directory\r\n if (!name || name.trim() === '') {\r\n const useCurrentDir = await PromptHelper.promptUseCurrentDir(currentDirName);\r\n\r\n if (useCurrentDir) {\r\n spacePath = process.cwd();\r\n } else {\r\n PromptHelper.showError('Space name is required when not using current directory');\r\n process.exit(1);\r\n }\r\n }\r\n // Check if folder name matches project name\r\n else if (currentDirName === name) {\r\n const useCurrentDir = await PromptHelper.promptUseCurrentDir(name);\r\n\r\n if (useCurrentDir) {\r\n spacePath = process.cwd();\r\n }\r\n }\r\n\r\n // If spacePath not set, use default (create subdirectory)\r\n if (!spacePath) {\r\n spacePath = path.join(process.cwd(), name);\r\n }\r\n\r\n // Check if space path already exists\r\n if (fs.existsSync(spacePath)) {\r\n const isDir = fs.statSync(spacePath).isDirectory();\r\n if (!isDir) {\r\n PromptHelper.showError(`Path \"${spacePath}\" exists but is not a directory`);\r\n process.exit(1);\r\n }\r\n\r\n // Directory exists, ask user what to do\r\n const shouldDelete = await PromptHelper.promptDeleteExistingDir(spacePath);\r\n\r\n if (!shouldDelete) {\r\n PromptHelper.showInfo('Space creation cancelled');\r\n process.exit(0);\r\n }\r\n\r\n // Delete the directory with retry logic\r\n try {\r\n await this.deleteDirectoryWithRetry(spacePath);\r\n } catch (error: unknown) {\r\n if (error instanceof Error) {\r\n const isLockError = error.message &&\r\n (error.message.includes('EBUSY') ||\r\n error.message.includes('EPERM') ||\r\n error.message.includes('resource busy'));\r\n\r\n if (isLockError) {\r\n PromptHelper.showError(\r\n `Cannot delete directory - it's being used by another program.\\n\\n` +\r\n `Please try:\\n` +\r\n ` 1. Close any terminals/editors with \"${spacePath}\" open\\n` +\r\n ` 2. Navigate out of the directory in all terminals\\n` +\r\n ` 3. Run PowerShell/Terminal as Administrator\\n` +\r\n ` 4. Wait a few seconds and try again`\r\n );\r\n } else {\r\n PromptHelper.showError(\r\n `Failed to delete existing directory.`,\r\n error\r\n );\r\n }\r\n } else {\r\n PromptHelper.showError(\r\n `Failed to delete existing directory.`,\r\n new Error('Unknown error')\r\n );\r\n }\r\n\r\n process.exit(1);\r\n }\r\n }\r\n\r\n // // Show info about org detection\r\n // if (org) {\r\n // console.log(`― Detected organization: @${org}`);\r\n // console.log(`― Package name: ${name}`);\r\n // }\r\n\r\n // // Show template info\r\n // const templateInfo = TemplateRegistry.getTemplate(answers.type, answers.template);\r\n // if (templateInfo?.deps) {\r\n // console.log(`― Includes: ${templateInfo.deps.join(', ')}`);\r\n // }\r\n\r\n await this.spaceManager.createSpace({\r\n type : answers.type,\r\n template : answers.template as types.TemplateVariant,\r\n pm : 'bun', // Always use bun\r\n\r\n repo : {\r\n org : org,\r\n name : name,\r\n version : '0.0.1',\r\n desc : answers.description,\r\n kw : answers.keywords.length > 0 ? answers.keywords : [],\r\n license : answers.license || 'MIT',\r\n },\r\n\r\n author : {\r\n id : answers.githubId,\r\n name : answers.author,\r\n email : answers.authorEmail,\r\n url : '', // Will be generated in spaceManager\r\n },\r\n\r\n createdAt : new Date().toISOString()\r\n }, spacePath);\r\n\r\n PromptHelper.showSuccess(name, [\r\n spacePath === process.cwd() ? 'space install' :\r\n `cd ${name}`,\r\n `space install`,\r\n 'space build'\r\n ]);\r\n } catch (error) {\r\n PromptHelper.showError('Failed to create space', error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Show information about current space\r\n * Safely handles template placeholders and unexpected data types\r\n */\r\n private showSpaceInfo() {\r\n if (!this.ensureSpace()) return;\r\n\r\n const config = this.spaceManager.loadSpaceConfig();\r\n if (!config) {\r\n console.error('✘ Could not load space configuration.');\r\n return;\r\n }\r\n\r\n console.log('');\r\n\r\n // Safe access to org - check if it exists and is not empty\r\n const hasOrg = config.repo?.org && config.repo.org.trim() !== '';\r\n const fullName = hasOrg\r\n ? `${config.repo.org}/${config.repo.name}`\r\n : config.repo.name;\r\n\r\n console.log(`Name: ${fullName}`);\r\n console.log(`Type: ${config.type}`);\r\n console.log(`Version: ${config.repo.version}`);\r\n\r\n // Safe description handling\r\n if (config.repo.desc && config.repo.desc !== '{{desc}}' && config.repo.desc !== '{{description}}') {\r\n console.log(`Description: ${config.repo.desc}`);\r\n }\r\n\r\n // Safe keywords handling - check if it's an array and not empty\r\n if (config.repo.kw) {\r\n // Normalize to array if it's a string\r\n let keywords: string[] = [];\r\n\r\n if (Array.isArray(config.repo.kw)) {\r\n keywords = config.repo.kw.filter((k: unknown) =>\r\n k &&\r\n typeof k === 'string' &&\r\n k.trim() !== '' &&\r\n k !== '{{kw}}' &&\r\n k !== '{{keywords}}'\r\n );\r\n } else if (typeof config.repo.kw === 'string') {\r\n const kwString = config.repo.kw as string;\r\n if (kwString !== '{{kw}}' &&\r\n kwString !== '{{keywords}}' &&\r\n kwString.trim() !== '') {\r\n // If it's a string, try to split by comma\r\n keywords = kwString\r\n .split(',')\r\n .map((k: string) => k.trim())\r\n .filter((k: string) => k !== '');\r\n }\r\n }\r\n\r\n if (keywords.length > 0) {\r\n console.log(`Keywords: ${keywords.join(', ')}`);\r\n }\r\n }\r\n\r\n // Safe license handling\r\n if (config.repo.license && config.repo.license !== '{{license}}') {\r\n console.log(`License: ${config.repo.license}`);\r\n }\r\n\r\n console.log(`PackageManager: bun`);\r\n\r\n // Safe author name handling\r\n if (config.author?.name &&\r\n config.author.name !== '{{author}}' &&\r\n config.author.name !== '{{author_name}}') {\r\n console.log(`Author: ${config.author.name}`);\r\n }\r\n\r\n console.log(`Created: ${new Date(config.createdAt).toLocaleDateString()}`);\r\n\r\n console.log('');\r\n }\r\n\r\n /**\r\n * Run linter\r\n */\r\n private runLint(params?: types.LintParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n const args: string[] = [];\r\n\r\n // Add --fix flag if specified\r\n if (params?.options?.fix) {\r\n args.push('--fix');\r\n }\r\n\r\n // Run lint with args\r\n if (args.length > 0) {\r\n this.pm!.run('lint', args);\r\n } else {\r\n this.pm!.run('lint');\r\n }\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── PKG MGR ────────────────────────────┐\r\n\r\n /**\r\n * Install packages\r\n */\r\n private async installPackages(params: types.InstallParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n try {\r\n let packages = params.args?.packages\r\n ? params.args.packages.split(' ').filter((p: string) => p.trim())\r\n : undefined;\r\n\r\n let isDev = params.options?.dev || false;\r\n\r\n // If no packages provided, prompt\r\n if (!packages || packages.length === 0) {\r\n const shouldInstallAll = await PromptHelper.promptConfirm(\r\n 'No packages specified. Install all dependencies from package.json?',\r\n true\r\n );\r\n\r\n if (!shouldInstallAll) {\r\n const installAnswers = await PromptHelper.promptInstall();\r\n packages = installAnswers.packages;\r\n isDev = installAnswers.isDev;\r\n }\r\n }\r\n\r\n this.pm!.install(packages, {\r\n dev: isDev,\r\n global: params.options?.global\r\n });\r\n } catch (error) {\r\n PromptHelper.showError('✘ Installation failed', error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Remove packages\r\n */\r\n private async removePackages(params: types.RemoveParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n try {\r\n const packages = params.args && params.args.packages ? params.args?.packages.split(' ').filter((p: string) => p.trim()) : undefined;\r\n\r\n if (!packages || packages.length === 0) {\r\n PromptHelper.showError('Please specify packages to remove');\r\n return;\r\n }\r\n\r\n // Confirm removal\r\n const removeAnswers = await PromptHelper.promptRemove(packages);\r\n\r\n if (!removeAnswers.confirm) {\r\n PromptHelper.showInfo('Removal cancelled');\r\n return;\r\n }\r\n\r\n this.pm!.remove(packages, {\r\n global: params.options?.global\r\n });\r\n } catch (error) {\r\n PromptHelper.showError('✘ Removal failed', error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Update packages\r\n */\r\n private async updatePackages(params: types.UpdateParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n try {\r\n let packages = params.args?.packages\r\n ? params.args.packages.split(' ').filter((p: string) => p.trim())\r\n : undefined;\r\n\r\n // If no packages specified, prompt\r\n if (!packages || packages.length === 0) {\r\n const updateAnswers = await PromptHelper.promptUpdate();\r\n packages = updateAnswers.updateAll ? undefined : updateAnswers.packages;\r\n }\r\n\r\n this.pm!.update(packages);\r\n } catch (error) {\r\n PromptHelper.showError('✘ Update failed', error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Link package globally or link global package to project\r\n */\r\n private linkPackage(params?: types.LinkParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n const packageName = params?.args?.package;\r\n this.pm!.link(packageName);\r\n }\r\n\r\n /**\r\n * Unlink package globally or unlink global package from project\r\n */\r\n private unlinkPackage(params?: types.LinkParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n const packageName = params?.args?.package;\r\n this.pm!.unlink(packageName);\r\n }\r\n\r\n /**\r\n * List packages\r\n */\r\n private listPackages(params: types.ListParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n this.pm!.list({\r\n global: params.options?.global ?? false\r\n });\r\n }\r\n\r\n /**\r\n * Run any script from package.json\r\n */\r\n private runScript(params: types.RunScriptParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n const scriptName = params?.args?.script;\r\n\r\n if (!scriptName) {\r\n PromptHelper.showError('Please specify a script name');\r\n return;\r\n }\r\n\r\n try {\r\n // Collect dynamic args and options\r\n const args: string[] = [];\r\n\r\n if (params?.dynamicArgs && Array.isArray(params.dynamicArgs)) {\r\n args.push(...params.dynamicArgs);\r\n }\r\n\r\n if (params?.dynamicOptions && typeof params.dynamicOptions === 'object') {\r\n for (const [key, value] of Object.entries(params.dynamicOptions)) {\r\n args.push(`--${key}`);\r\n if (value !== true && value !== false) {\r\n args.push(String(value));\r\n }\r\n }\r\n }\r\n\r\n // console.log(`🚀 Running script: ${scriptName}${args.length > 0 ? ' ' + args.join(' ') : ''}\\n`);\r\n this.pm!.run(scriptName, args.length > 0 ? args : undefined);\r\n } catch (error) {\r\n PromptHelper.showError(`Failed to run script \"${scriptName}\"`, error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n\r\n // ┌──────────────────────────────── BUILD ──────────────────────────────┐\r\n\r\n /**\r\n * Build the current space\r\n */\r\n private buildSpace(silently?: boolean) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n const loader = new Loader();\r\n loader.start('Building space...');\r\n\r\n try {\r\n this.pm!.runSilent('build');\r\n loader.stop(silently ? '' : '✔ Build succeeded');\r\n } catch {\r\n loader.stopWithError('✘ Build failed');\r\n process.exit(1);\r\n }\r\n }\r\n\r\n private buildSpaceBool(silently?: boolean) : boolean{\r\n if (!this.ensureSpace()) return false;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n const loader = new Loader();\r\n loader.start('Building space...');\r\n\r\n try {\r\n this.pm!.runSilent('build');\r\n loader.stop(silently ? '' : '✔ Build succeeded');\r\n return true;\r\n } catch {\r\n loader.stopWithError('✘ Build failed!');\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Run tests\r\n */\r\n private runTests(params?: types.TestParams) {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n // Build args array for bun test\r\n const args: string[] = [];\r\n\r\n // Add test path if specified\r\n const testPath = params?.args?.path;\r\n if (testPath) {\r\n args.push(testPath);\r\n }\r\n\r\n // Add coverage flag\r\n if (params?.options?.coverage) {\r\n args.push('--coverage');\r\n }\r\n\r\n // Add coverage reporter\r\n if (params?.options?.['coverage-reporter']) {\r\n args.push('--coverage-reporter', params.options['coverage-reporter']);\r\n }\r\n\r\n // Add watch flag\r\n if (params?.options?.watch) {\r\n args.push('--watch');\r\n }\r\n\r\n // Add bail flag\r\n if (params?.options?.bail) {\r\n args.push('--bail');\r\n }\r\n\r\n // Add timeout\r\n if (params?.options?.timeout) {\r\n args.push('--timeout', params.options.timeout);\r\n }\r\n\r\n // Add rerun-each\r\n if (params?.options?.['rerun-each']) {\r\n args.push('--rerun-each', params.options['rerun-each']);\r\n }\r\n\r\n // Add concurrent\r\n if (params?.options?.concurrent) {\r\n args.push('--concurrent');\r\n }\r\n\r\n // Add test name pattern\r\n if (params?.options?.['test-name-pattern']) {\r\n args.push('-t', params.options['test-name-pattern']);\r\n }\r\n\r\n // Run tests with args\r\n if (args.length > 0) {\r\n this.pm!.run('test', args);\r\n } else {\r\n this.pm!.run('test');\r\n }\r\n }\r\n\r\n /**\r\n * Clean build artifacts\r\n */\r\n private clean() {\r\n if (!this.ensureSpace()) return;\r\n if (!this.pm) this.initPackageManager();\r\n\r\n const loader = new Loader();\r\n loader.start('Cleaning build artifacts...');\r\n\r\n try {\r\n this.pm!.run('clean');\r\n loader.stop('✔ Clean complete!');\r\n } catch {\r\n loader.stopWithError('✘ Clean failed!');\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Start the main file - builds silently first, then runs\r\n */\r\n private startMain(params?: types.StartParams) {\r\n if (!this.buildSpaceBool(true)) return;\r\n\r\n try {\r\n // Step 1: Find the built main file\r\n const mainFile = this.findBuiltMainFile();\r\n\r\n if (!mainFile) {\r\n PromptHelper.showError(\r\n 'Could not find built entry point.\\n' +\r\n 'Expected to find dist/main.js or dist/index.js after build.'\r\n );\r\n process.exit(1);\r\n }\r\n\r\n // Step 2: Collect ALL arguments (dynamic args from CLI)\r\n const args: string[] = [];\r\n\r\n // Get dynamic args (all unnamed args passed after 'start')\r\n if (params?.dynamicArgs && Array.isArray(params.dynamicArgs)) {\r\n args.push(...params.dynamicArgs);\r\n }\r\n\r\n // Get dynamic options (all --flags passed)\r\n if (params?.dynamicOptions && typeof params.dynamicOptions === 'object') {\r\n for (const [key, value] of Object.entries(params.dynamicOptions)) {\r\n args.push(`--${key}`);\r\n if (value !== true && value !== false) {\r\n args.push(String(value));\r\n }\r\n }\r\n }\r\n\r\n // Step 3: Show what we're running\r\n if (args.length > 0) {\r\n // console.log(`🚀 Running: bun ${mainFile} ${args.join(' ')}\\n`);\r\n } else {\r\n // console.log(`🚀 Running: bun ${mainFile}\\n`);\r\n }\r\n\r\n // Step 4: Run the built file with bun\r\n const result = spawnSync('bun', [mainFile, ...args], {\r\n stdio: 'inherit',\r\n cwd: process.cwd()\r\n });\r\n\r\n if (result.error) {\r\n PromptHelper.showError('Failed to start process', result.error as Error);\r\n process.exit(1);\r\n }\r\n\r\n if (result.status !== 0 && result.status !== null) {\r\n console.error('\\n✘ Process exited with error');\r\n process.exit(result.status);\r\n }\r\n } catch (error) {\r\n PromptHelper.showError('Failed to start', error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n /**\r\n * Find the built main entry file (after build)\r\n */\r\n private findBuiltMainFile(): string | null {\r\n const possiblePaths = [\r\n 'dist/main.js',\r\n 'dist/index.js',\r\n 'dist/app.js'\r\n ];\r\n\r\n // Try built files first\r\n for (const filePath of possiblePaths) {\r\n if (fs.existsSync(path.join(process.cwd(), filePath))) {\r\n return filePath;\r\n }\r\n }\r\n\r\n // Fallback: Check package.json main field\r\n try {\r\n const packageJsonPath = path.join(process.cwd(), 'package.json');\r\n if (fs.existsSync(packageJsonPath)) {\r\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\r\n\r\n if (packageJson.main && fs.existsSync(packageJson.main)) {\r\n return packageJson.main;\r\n }\r\n }\r\n } catch {\r\n // Ignore package.json errors\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Publish to npm\r\n */\r\n private async publish(params: types.PublishParams) {\r\n if(!this.buildSpaceBool(true)) return;\r\n try {\r\n const config = this.spaceManager.loadSpaceConfig();\r\n if (!config) {\r\n PromptHelper.showError('Could not load space configuration');\r\n return;\r\n }\r\n\r\n const fullName = config.repo.org\r\n ? `@${config.repo.org}/${config.repo.name}`\r\n : config.repo.name;\r\n\r\n // Prompt for publish options if not provided\r\n let tag = params.options?.tag || undefined;\r\n let access = params.options?.access || undefined;\r\n\r\n if (!tag && !access) {\r\n const publishAnswers = await PromptHelper.promptPublish(fullName);\r\n\r\n if (!publishAnswers.confirm) {\r\n PromptHelper.showInfo('Publish cancelled');\r\n return;\r\n }\r\n\r\n tag = publishAnswers.tag;\r\n access = publishAnswers.access;\r\n }\r\n\r\n const loader = new Loader();\r\n loader.start('Publishing package...');\r\n\r\n this.pm!.publish({\r\n tag,\r\n access: access as types.PublishAccess\r\n }, loader);\r\n } catch (error) {\r\n PromptHelper.showError('Publish failed', error as Error);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n // └────────────────────────────────────────────────────────────────────┘\r\n\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// main.ts\n//\n// repo : https://github.com/space-lib/space\n// author : https://github.com/maysara-elshewehy\n//\n// Developed with ❤️ by Maysara.\n\n\n\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\n\n import { App } from './app';\n\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\n\n\n\n// ╔════════════════════════════════════════ INIT ════════════════════════════════════════╗\n\n const app = App.create({\n name : 'Space',\n version : '0.0.2',\n desc : 'Build flexible spaces for any platform',\n });\n\n app.run();\n\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝"]}