mulink 1.1.7 → 1.1.9
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/README.md +2 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/lib/{chunk-SL4RMR26.js → chunk-2WVV6AOO.js} +455 -263
- package/dist/lib/chunk-2WVV6AOO.js.map +1 -0
- package/dist/lib/{chunk-RGFU7SMN.cjs → chunk-NC747MZJ.cjs} +455 -263
- package/dist/lib/chunk-NC747MZJ.cjs.map +1 -0
- package/dist/lib/cli.cjs +57 -29
- package/dist/lib/cli.cjs.map +1 -1
- package/dist/lib/cli.js +42 -14
- package/dist/lib/cli.js.map +1 -1
- package/dist/lib/client.cjs +20 -20
- package/dist/lib/client.cjs.map +1 -1
- package/dist/lib/client.d.cts +4 -4
- package/dist/lib/client.d.ts +4 -4
- package/dist/lib/client.js +4 -4
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/index.cjs +177 -15
- package/dist/lib/index.cjs.map +1 -1
- package/dist/lib/index.d.cts +211 -3
- package/dist/lib/index.d.ts +211 -3
- package/dist/lib/index.js +153 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/{version-checker-uF6o5ziX.d.cts → version-checker-DU88tpi8.d.cts} +152 -12
- package/dist/lib/{version-checker-uF6o5ziX.d.ts → version-checker-DU88tpi8.d.ts} +152 -12
- package/package.json +2 -2
- package/dist/lib/chunk-RGFU7SMN.cjs.map +0 -1
- package/dist/lib/chunk-SL4RMR26.js.map +0 -1
package/dist/lib/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/index.ts"],"names":["versionChecker"],"mappings":"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","file":"cli.js","sourcesContent":["#!/usr/bin/env node\r\nimport { Command } from 'commander';\r\nimport { BridgeCore } from '@/core/bridge-core';\r\nimport { ConfigurationLoader } from '@/config/configuration-loader';\r\nimport { BridgeLogger, LogLevel } from '@/utils/logger';\r\nimport { createBridgeVersionChecker } from '@/utils/version-checker';\r\n\r\n// ASCII Art Banner\r\nconst BANNER = (version: string) => `\r\n ███╗ ███╗██╗ ██╗██╗ ██╗███╗ ██╗██╗ ██╗\r\n ████╗ ████║██║ ██║██║ ██║████╗ ██║██║ ██╔╝\r\n ██╔████╔██║██║ ██║██║ ██║██╔██╗ ██║█████╔╝ \r\n ██║╚██╔╝██║██║ ██║██║ ██║██║╚██╗██║██╔═██╗ \r\n ██║ ╚═╝ ██║╚██████╔╝███████╗██║██║ ╚████║██║ ██╗\r\n ╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝\r\n\r\n 🔗 Mulink - Universal Type-Safe API Integration\r\n 🔗 Connect APIs • Generate Clients • Type Safety\r\n 📦 Version: ${version} • 🚀 Next.js 16+ • ⚡ OpenAPI 3.x\r\n`;\r\n\r\nconst logger = new BridgeLogger({ prefix: '🔗 Mulink CLI' });\r\n\r\n// Enhanced banner display with update notification integration\r\nfunction displayBanner(version: string, updateInfo?: { current: string; latest: string; updateAvailable: boolean; upgradeCommand?: string }) {\r\n let banner = BANNER(version);\r\n \r\n if (updateInfo && updateInfo.updateAvailable) {\r\n const upgradeCommand = updateInfo.upgradeCommand || 'npm update mulink';\r\n \r\n banner += `\r\n\r\n─────────────────── 🔄 UPDATE AVAILABLE ──────────────────\r\n\r\n Current Version: ${updateInfo.current}\r\n Latest Version: ${updateInfo.latest}\r\n\r\n Upgrade Command:\r\n ${upgradeCommand}\r\n\r\n Run 'mulink check-updates' for more information\r\n\r\n──────────────────────────────────────────────────────────\r\n`;\r\n }\r\n \r\n console.log(banner);\r\n}\r\n\r\n// Enhanced colored banner display with update notification integration\r\nfunction displayColoredBanner(version: string, updateInfo?: { current: string; latest: string; updateAvailable: boolean; upgradeCommand?: string }) {\r\n const colors = {\r\n reset: '\\x1b[0m',\r\n bright: '\\x1b[1m',\r\n red: '\\x1b[31m',\r\n green: '\\x1b[32m',\r\n yellow: '\\x1b[33m',\r\n blue: '\\x1b[34m',\r\n cyan: '\\x1b[36m',\r\n magenta: '\\x1b[35m',\r\n orange: '\\x1b[38;5;208m',\r\n };\r\n\r\n let banner = BANNER(version)\r\n .replace(/█/g, `${colors.cyan}█${colors.reset}`)\r\n .replace(/🌉/g, `${colors.yellow}🌉${colors.reset}`)\r\n .replace(/🔗/g, `${colors.cyan}🔗${colors.reset}`)\r\n .replace(/📦/g, `${colors.green}📦${colors.reset}`)\r\n .replace(/🚀/g, `${colors.magenta}🚀${colors.reset}`)\r\n .replace(/⚡/g, `${colors.yellow}⚡${colors.reset}`);\r\n\r\n if (updateInfo && updateInfo.updateAvailable) {\r\n const upgradeCommand = updateInfo.upgradeCommand || 'npm update mulink';\r\n \r\n const updateBox = `\r\n─────────────────── 🔄 UPDATE AVAILABLE ──────────────────\r\n\r\n Current Version: ${updateInfo.current}\r\n Latest Version: ${updateInfo.latest}\r\n\r\n Upgrade Command:\r\n ${upgradeCommand}\r\n\r\n Run 'mulink check-updates' for more information\r\n\r\n──────────────────────────────────────────────────────────\r\n`;\r\n\r\n banner += updateBox;\r\n }\r\n\r\n console.log(banner);\r\n}\r\n\r\nconst program = new Command();\r\nconst versionChecker = createBridgeVersionChecker(logger);\r\nprogram\r\n .name('mulink')\r\n .description('Universal type-safe API integration library for modern web applications')\r\n .version(versionChecker.getCurrentVersion())\r\n .option('-v, --verbose', 'Enable verbose logging')\r\n .option('-q, --quiet', 'Suppress non-error output')\r\n .option('--no-color', 'Disable colored output')\r\n .option('--no-banner', 'Disable banner display')\r\n .hook('preAction', async (thisCommand) => {\r\n const opts = thisCommand.opts();\r\n if (opts.verbose) {\r\n logger.options.level = LogLevel.DEBUG;\r\n } else if (opts.quiet) {\r\n logger.options.level = LogLevel.ERROR;\r\n }\r\n if (opts.noColor) {\r\n logger.options.colors = false;\r\n }\r\n\r\n // Check for updates first (synchronously for banner integration)\r\n let updateInfo = null;\r\n if (!opts.quiet) {\r\n try {\r\n const versionChecker = createBridgeVersionChecker(logger);\r\n const versionInfo = await versionChecker.checkForUpdates();\r\n \r\n if (versionInfo && versionInfo.updateAvailable) {\r\n const upgradeCommand = versionChecker.getUpgradeCommand(versionInfo);\r\n updateInfo = {\r\n current: versionInfo.current,\r\n latest: versionInfo.latest,\r\n updateAvailable: versionInfo.updateAvailable,\r\n upgradeCommand\r\n };\r\n }\r\n } catch (error) {\r\n // Silently fail - version check should not interrupt user workflow\r\n logger.debug('Version check failed:', error);\r\n }\r\n }\r\n\r\n // Display banner with integrated update notification\r\n if (!opts.noBanner && !opts.quiet) {\r\n const currentVersion = versionChecker.getCurrentVersion();\r\n if (opts.noColor) {\r\n displayBanner(currentVersion, updateInfo || undefined);\r\n } else {\r\n displayColoredBanner(currentVersion, updateInfo || undefined);\r\n }\r\n }\r\n });\r\n\r\nprogram\r\n .command('generate')\r\n .alias('gen')\r\n .description('Generate API client code from OpenAPI schema')\r\n .option('-c, --config <path>', 'Path to config file', 'link.config.json')\r\n .option('-w, --watch', 'Watch for schema changes and regenerate automatically')\r\n .option('--dry-run', 'Show what would be generated without writing files')\r\n .action(async options => {\r\n const spinner = logger.spinner('Initializing generation...');\r\n\r\n try {\r\n const configLoader = new ConfigurationLoader();\r\n const config = await configLoader.load(options.config);\r\n spinner.succeed('Configuration loaded');\r\n\r\n const bridge = new BridgeCore();\r\n\r\n if (options.dryRun) {\r\n logger.info('🔍 Dry run mode - validation only');\r\n const validationSpinner = logger.spinner('Validating schema...');\r\n\r\n try {\r\n const isValid = await bridge.validateSchema(config.schema);\r\n if (isValid) {\r\n validationSpinner.succeed('Schema is valid');\r\n const info = await bridge.getSchemaInfo(config.schema);\r\n logger.info(`Schema: ${info.title} v${info.version}`);\r\n if (info.description) {\r\n logger.info(`Description: ${info.description}`);\r\n }\r\n } else {\r\n validationSpinner.fail('Schema validation failed');\r\n process.exit(1);\r\n }\r\n } catch (error) {\r\n validationSpinner.fail('Schema validation failed');\r\n logger.error('Schema validation error:', error);\r\n process.exit(1);\r\n }\r\n } else if (options.watch) {\r\n logger.warn('👀 Watch mode is not yet implemented');\r\n logger.info('Falling back to single generation...');\r\n await bridge.generate(config);\r\n } else {\r\n const generationSpinner = logger.spinner('Generating API client...');\r\n try {\r\n await bridge.generate(config);\r\n generationSpinner.succeed('API client generated successfully');\r\n } catch (error) {\r\n generationSpinner.fail('Generation failed');\r\n throw error;\r\n }\r\n }\r\n } catch (error) {\r\n spinner.fail('Generation failed');\r\n if (error instanceof Error) {\r\n logger.error('Error:', error.message);\r\n if (logger.options.level === LogLevel.DEBUG) {\r\n logger.error('Stack trace:', error.stack);\r\n }\r\n } else {\r\n logger.error('Unknown error:', error);\r\n }\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('init')\r\n .description('Initialize a new Mulink project')\r\n .option('-f, --framework <type>', 'Framework type', 'nextjs')\r\n .option('--router <type>', 'Next.js router type', 'app')\r\n .option('-s, --schema <url>', 'OpenAPI schema URL')\r\n .option('-o, --output <dir>', 'Output directory', 'src/generated')\r\n .action(async options => {\r\n const spinner = logger.spinner('Initializing Mulink project...');\r\n\r\n try {\r\n const configLoader = new ConfigurationLoader();\r\n const config = await configLoader.createDefault(options.framework);\r\n\r\n // Override defaults with provided options\r\n if (options.schema) config.schema = options.schema;\r\n if (options.output) config.outputDir = options.output;\r\n if (options.router) config.framework.router = options.router;\r\n\r\n await configLoader.save(config);\r\n spinner.succeed('Mulink configuration created successfully!');\r\n\r\n logger.info('📋 Configuration Summary:');\r\n logger.info(` Framework: ${config.framework.type}`);\r\n logger.info(` Router: ${config.framework.router}`);\r\n logger.info(` Schema: ${config.schema}`);\r\n logger.info(` Output: ${config.outputDir}`);\r\n\r\n logger.info('\\n🚀 Next steps:');\r\n logger.info('1. Edit link.config.json to configure your API');\r\n logger.info('2. Run \"mulink generate\" to create your API client');\r\n logger.info('3. Run \"mulink validate\" to check your configuration');\r\n } catch (error) {\r\n spinner.fail('Initialization failed');\r\n if (error instanceof Error) {\r\n logger.error('Error:', error.message);\r\n if (logger.options.level === LogLevel.DEBUG) {\r\n logger.error('Stack trace:', error.stack);\r\n }\r\n } else {\r\n logger.error('Unknown error:', error);\r\n }\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('validate')\r\n .description('Validate OpenAPI schema and configuration')\r\n .option('-c, --config <path>', 'Path to config file', 'link.config.json')\r\n .option('--schema-only', 'Only validate the OpenAPI schema')\r\n .action(async options => {\r\n try {\r\n const configLoader = new ConfigurationLoader();\r\n const config = await configLoader.load(options.config);\r\n\r\n const bridge = new BridgeCore();\r\n\r\n if (options.schemaOnly) {\r\n const isValid = await bridge.validateSchema(config.schema);\r\n if (isValid) {\r\n logger.success('✅ Schema is valid');\r\n const info = await bridge.getSchemaInfo(config.schema);\r\n logger.info(`Title: ${info.title}`);\r\n logger.info(`Version: ${info.version}`);\r\n if (info.description) logger.info(`Description: ${info.description}`);\r\n } else {\r\n logger.error('❌ Schema validation failed');\r\n process.exit(1);\r\n }\r\n } else {\r\n logger.success('✅ Configuration is valid');\r\n const isValid = await bridge.validateSchema(config.schema);\r\n if (isValid) {\r\n logger.success('✅ Schema is valid');\r\n } else {\r\n logger.error('❌ Schema validation failed');\r\n process.exit(1);\r\n }\r\n }\r\n } catch (error) {\r\n logger.error('Validation failed:', error);\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('clean')\r\n .description('Clean generated files and cache')\r\n .option('-c, --config <path>', 'Path to config file', 'link.config.json')\r\n .option('--force', 'Force clean without confirmation')\r\n .action(async options => {\r\n const spinner = logger.spinner('Cleaning cache and generated files...');\r\n\r\n try {\r\n const configLoader = new ConfigurationLoader();\r\n const config = await configLoader.load(options.config);\r\n\r\n const bridge = new BridgeCore();\r\n bridge.clearCache();\r\n\r\n // TODO: Implement file cleanup\r\n spinner.succeed('Cache and generated files cleared successfully');\r\n\r\n logger.info('🧹 Cleaned:');\r\n logger.info(' - Schema cache');\r\n logger.info(' - Generated files');\r\n logger.info(' - Build artifacts');\r\n } catch (error) {\r\n spinner.fail('Clean failed');\r\n if (error instanceof Error) {\r\n logger.error('Error:', error.message);\r\n if (logger.options.level === LogLevel.DEBUG) {\r\n logger.error('Stack trace:', error.stack);\r\n }\r\n } else {\r\n logger.error('Unknown error:', error);\r\n }\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('info')\r\n .description('Show project information and status')\r\n .option('-c, --config <path>', 'Path to config file', 'link.config.json')\r\n .action(async options => {\r\n try {\r\n const configLoader = new ConfigurationLoader();\r\n const config = await configLoader.load(options.config);\r\n\r\n logger.info('📊 Mulink Project Information');\r\n logger.info('='.repeat(40));\r\n logger.info(`Framework: ${config.framework.type}`);\r\n logger.info(`Router: ${config.framework.router}`);\r\n logger.info(`Schema: ${config.schema}`);\r\n logger.info(`Output: ${config.outputDir}`);\r\n logger.info(`Features:`);\r\n logger.info(` - Server Actions: ${config.framework.features.serverActions ? '✅' : '❌'}`);\r\n logger.info(` - Middleware: ${config.framework.features.middleware ? '✅' : '❌'}`);\r\n logger.info(` - Streaming: ${config.framework.features.streaming ? '✅' : '❌'}`);\r\n logger.info(` - Revalidation: ${config.framework.features.revalidation ? '✅' : '❌'}`);\r\n\r\n if (config.auth?.enabled) {\r\n logger.info(`Auth: ${config.auth.provider}`);\r\n }\r\n\r\n if (config.cache) {\r\n logger.info(`Cache: ${config.cache.strategy} (TTL: ${config.cache.ttl}s)`);\r\n }\r\n } catch (error) {\r\n logger.error('Failed to load project info:', error);\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('check-updates')\r\n .alias('update-check')\r\n .description('Check for available updates')\r\n .option('--force', 'Force check even if recently checked')\r\n .option('--show-current', 'Show current version information')\r\n .action(async options => {\r\n const spinner = logger.spinner('Checking for updates...');\r\n \r\n try {\r\n const versionChecker = createBridgeVersionChecker(logger);\r\n const versionInfo = await versionChecker.checkForUpdates();\r\n const currentVersion = versionChecker.getCurrentVersion();\r\n \r\n if (versionInfo) {\r\n spinner.succeed('Version check completed');\r\n \r\n // Display the enhanced banner with update info\r\n if (versionInfo.updateAvailable) {\r\n const upgradeCommand = versionChecker.getUpgradeCommand(versionInfo);\r\n const updateInfo = {\r\n current: versionInfo.current,\r\n latest: versionInfo.latest,\r\n updateAvailable: versionInfo.updateAvailable,\r\n upgradeCommand\r\n };\r\n \r\n if (logger.options.colors) {\r\n displayColoredBanner(currentVersion,updateInfo);\r\n } else {\r\n displayBanner(currentVersion,updateInfo);\r\n }\r\n } else if (options.showCurrent) {\r\n logger.info(`Current version: ${versionInfo.current}`);\r\n logger.info(`Latest version: ${versionInfo.latest}`);\r\n logger.info('✅ You are using the latest version');\r\n }\r\n } else {\r\n spinner.fail('Could not check for updates');\r\n logger.warn('Unable to fetch version information. Please check your internet connection.');\r\n }\r\n } catch (error) {\r\n spinner.fail('Update check failed');\r\n logger.error('Failed to check for updates:', error);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n// Handle unknown commands\r\nprogram.on('command:*', () => {\r\n logger.error(`Unknown command: ${program.args.join(' ')}`);\r\n logger.info(\"Run 'mulink --help' for available commands\");\r\n process.exit(1);\r\n});\r\n\r\n// Handle errors gracefully\r\nprocess.on('uncaughtException', error => {\r\n logger.error('Uncaught exception:', error);\r\n process.exit(1);\r\n});\r\n\r\nprocess.on('unhandledRejection', reason => {\r\n logger.error('Unhandled rejection:', reason);\r\n process.exit(1);\r\n});\r\n\r\n// Show help if no command provided\r\nif (process.argv.length === 2) {\r\n // Check if colors are disabled\r\n const hasNoColor = process.argv.includes('--no-color');\r\n const currentVersion = versionChecker.getCurrentVersion();\r\n if (hasNoColor) {\r\n displayBanner(currentVersion);\r\n } else {\r\n displayColoredBanner(currentVersion);\r\n }\r\n program.help();\r\n}\r\n\r\nprogram.parse();\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/index.ts"],"names":["versionChecker"],"mappings":"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","file":"cli.js","sourcesContent":["#!/usr/bin/env node\r\nimport { Command } from 'commander';\r\nimport { existsSync } from 'fs';\r\nimport { resolve } from 'path';\r\nimport { BridgeCore } from '@/core/bridge-core';\r\nimport { ConfigurationLoader } from '@/config/configuration-loader';\r\nimport { BridgeLogger, LogLevel } from '@/utils/logger';\r\nimport { createBridgeVersionChecker } from '@/utils/version-checker';\r\n\r\n// ASCII Art Banner\r\nconst BANNER = (version: string): string => `\r\n ███╗ ███╗██╗ ██╗██╗ ██╗███╗ ██╗██╗ ██╗\r\n ████╗ ████║██║ ██║██║ ██║████╗ ██║██║ ██╔╝\r\n ██╔████╔██║██║ ██║██║ ██║██╔██╗ ██║█████╔╝ \r\n ██║╚██╔╝██║██║ ██║██║ ██║██║╚██╗██║██╔═██╗ \r\n ██║ ╚═╝ ██║╚██████╔╝███████╗██║██║ ╚████║██║ ██╗\r\n ╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝\r\n\r\n 🔗 Mulink - Universal Type-Safe API Integration\r\n 🔗 Connect APIs • Generate Clients • Type Safety\r\n 📦 Version: ${version} • 🚀 Next.js 16+ • ⚡ OpenAPI 3.x\r\n`;\r\n\r\nconst logger = new BridgeLogger({ prefix: '🔗 Mulink CLI' });\r\n\r\n// Enhanced banner display with update notification integration\r\nfunction displayBanner(version: string, updateInfo?: { current: string; latest: string; updateAvailable: boolean; upgradeCommand?: string }): void {\r\n let banner = BANNER(version);\r\n \r\n if (updateInfo && updateInfo.updateAvailable) {\r\n const upgradeCommand = updateInfo.upgradeCommand ?? 'npm update mulink';\r\n \r\n banner += `\r\n\r\n─────────────────── 🔄 UPDATE AVAILABLE ──────────────────\r\n\r\n Current Version: ${updateInfo.current}\r\n Latest Version: ${updateInfo.latest}\r\n\r\n Upgrade Command:\r\n ${upgradeCommand}\r\n\r\n Run 'mulink check-updates' for more information\r\n\r\n──────────────────────────────────────────────────────────\r\n`;\r\n }\r\n \r\n console.log(banner);\r\n}\r\n\r\n// Enhanced colored banner display with update notification integration\r\nfunction displayColoredBanner(version: string, updateInfo?: { current: string; latest: string; updateAvailable: boolean; upgradeCommand?: string }): void {\r\n const colors = {\r\n reset: '\\x1b[0m',\r\n bright: '\\x1b[1m',\r\n red: '\\x1b[31m',\r\n green: '\\x1b[32m',\r\n yellow: '\\x1b[33m',\r\n blue: '\\x1b[34m',\r\n cyan: '\\x1b[36m',\r\n magenta: '\\x1b[35m',\r\n orange: '\\x1b[38;5;208m',\r\n };\r\n\r\n let banner = BANNER(version)\r\n .replace(/█/g, `${colors.cyan}█${colors.reset}`)\r\n .replace(/🌉/g, `${colors.yellow}🌉${colors.reset}`)\r\n .replace(/🔗/g, `${colors.cyan}🔗${colors.reset}`)\r\n .replace(/📦/g, `${colors.green}📦${colors.reset}`)\r\n .replace(/🚀/g, `${colors.magenta}🚀${colors.reset}`)\r\n .replace(/⚡/g, `${colors.yellow}⚡${colors.reset}`);\r\n\r\n if (updateInfo && updateInfo.updateAvailable) {\r\n const upgradeCommand = updateInfo.upgradeCommand ?? 'npm update mulink';\r\n \r\n const updateBox = `\r\n─────────────────── 🔄 UPDATE AVAILABLE ──────────────────\r\n\r\n Current Version: ${updateInfo.current}\r\n Latest Version: ${updateInfo.latest}\r\n\r\n Upgrade Command:\r\n ${upgradeCommand}\r\n\r\n Run 'mulink check-updates' for more information\r\n\r\n──────────────────────────────────────────────────────────\r\n`;\r\n\r\n banner += updateBox;\r\n }\r\n\r\n console.log(banner);\r\n}\r\n\r\nconst program = new Command();\r\nconst versionChecker = createBridgeVersionChecker(logger);\r\nprogram\r\n .name('mulink')\r\n .description('Universal type-safe API integration library for modern web applications')\r\n .version(versionChecker.getCurrentVersion())\r\n .option('-v, --verbose', 'Enable verbose logging')\r\n .option('-q, --quiet', 'Suppress non-error output')\r\n .option('--no-color', 'Disable colored output')\r\n .option('--no-banner', 'Disable banner display')\r\n .hook('preAction', async (thisCommand) => {\r\n const opts = thisCommand.opts();\r\n if (opts.verbose) {\r\n logger.options.level = LogLevel.DEBUG;\r\n } else if (opts.quiet) {\r\n logger.options.level = LogLevel.ERROR;\r\n }\r\n if (opts.noColor) {\r\n logger.options.colors = false;\r\n }\r\n\r\n // Check for updates first (synchronously for banner integration)\r\n let updateInfo = null;\r\n if (!opts.quiet) {\r\n try {\r\n const versionChecker = createBridgeVersionChecker(logger);\r\n const versionInfo = await versionChecker.checkForUpdates();\r\n \r\n if (versionInfo && versionInfo.updateAvailable) {\r\n const upgradeCommand = versionChecker.getUpgradeCommand(versionInfo);\r\n updateInfo = {\r\n current: versionInfo.current,\r\n latest: versionInfo.latest,\r\n updateAvailable: versionInfo.updateAvailable,\r\n upgradeCommand\r\n };\r\n }\r\n } catch (error) {\r\n // Silently fail - version check should not interrupt user workflow\r\n logger.debug('Version check failed:', error);\r\n }\r\n }\r\n\r\n // Display banner with integrated update notification\r\n if (!opts.noBanner && !opts.quiet) {\r\n const currentVersion = versionChecker.getCurrentVersion();\r\n if (opts.noColor) {\r\n displayBanner(currentVersion, updateInfo ?? undefined);\r\n } else {\r\n displayColoredBanner(currentVersion, updateInfo ?? undefined);\r\n }\r\n }\r\n });\r\n\r\nprogram\r\n .command('generate')\r\n .alias('gen')\r\n .description('Generate API client code from OpenAPI schema')\r\n .option('-c, --config <path>', 'Path to config file', 'link.config.json')\r\n .option('-w, --watch', 'Watch for schema changes and regenerate automatically')\r\n .option('--dry-run', 'Show what would be generated without writing files')\r\n .action(async options => {\r\n const spinner = logger.spinner('Initializing generation...');\r\n\r\n try {\r\n const configLoader = new ConfigurationLoader();\r\n const config = await configLoader.load(options.config);\r\n spinner.succeed('Configuration loaded');\r\n\r\n const bridge = new BridgeCore();\r\n\r\n if (options.dryRun) {\r\n logger.info('🔍 Dry run mode - validation only');\r\n const validationSpinner = logger.spinner('Validating schema...');\r\n\r\n try {\r\n const isValid = await bridge.validateSchema(config.schema);\r\n if (isValid) {\r\n validationSpinner.succeed('Schema is valid');\r\n const info = await bridge.getSchemaInfo(config.schema);\r\n logger.info(`Schema: ${info.title} v${info.version}`);\r\n if (info.description) {\r\n logger.info(`Description: ${info.description}`);\r\n }\r\n } else {\r\n validationSpinner.fail('Schema validation failed');\r\n process.exit(1);\r\n }\r\n } catch (error) {\r\n validationSpinner.fail('Schema validation failed');\r\n logger.error('Schema validation error:', error);\r\n process.exit(1);\r\n }\r\n } else if (options.watch) {\r\n logger.warn('👀 Watch mode is not yet implemented');\r\n logger.info('Falling back to single generation...');\r\n await bridge.generate(config);\r\n } else {\r\n const generationSpinner = logger.spinner('Generating API client...');\r\n try {\r\n await bridge.generate(config);\r\n generationSpinner.succeed('API client generated successfully');\r\n } catch (error) {\r\n generationSpinner.fail('Generation failed');\r\n throw error;\r\n }\r\n }\r\n } catch (error) {\r\n spinner.fail('Generation failed');\r\n if (error instanceof Error) {\r\n logger.error('Error:', error.message);\r\n if (logger.options.level === LogLevel.DEBUG) {\r\n logger.error('Stack trace:', error.stack);\r\n }\r\n } else {\r\n logger.error('Unknown error:', error);\r\n }\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('init')\r\n .description('Initialize a new Mulink project')\r\n .option('-f, --framework <type>', 'Framework type', 'nextjs')\r\n .option('--router <type>', 'Next.js router type', 'app')\r\n .option('-s, --schema <url>', 'OpenAPI schema URL')\r\n .option('-o, --output <dir>', 'Output directory', 'src/generated')\r\n .action(async options => {\r\n const spinner = logger.spinner('Initializing Mulink project...');\r\n\r\n try {\r\n const configPath = 'link.config.json';\r\n const configFilePath = resolve(process.cwd(), configPath);\r\n\r\n // Check if config file already exists\r\n if (existsSync(configFilePath)) {\r\n spinner.fail('Configuration file already exists');\r\n logger.warn(`A configuration file already exists at: ${configPath}`);\r\n logger.info('If you want to overwrite it, delete the file first or use a different path.');\r\n process.exit(1);\r\n }\r\n\r\n const configLoader = new ConfigurationLoader();\r\n const config = configLoader.createDefault(options.framework);\r\n\r\n // Override defaults with provided options\r\n if (options.schema) {\r\n // Validate schema URL format\r\n try {\r\n new URL(options.schema);\r\n config.schema = options.schema;\r\n } catch {\r\n logger.warn(`Invalid schema URL format: ${options.schema}. Using default.`);\r\n }\r\n }\r\n if (options.output) {\r\n config.outputDir = options.output;\r\n }\r\n if (options.router) {\r\n if (options.router === 'app' || options.router === 'pages') {\r\n config.framework.router = options.router;\r\n } else {\r\n logger.warn(`Invalid router type: ${options.router}. Using default 'app'.`);\r\n }\r\n }\r\n\r\n // Save configuration file\r\n await configLoader.save(config, configPath);\r\n \r\n spinner.succeed('Mulink configuration created successfully!');\r\n\r\n logger.info('📋 Configuration Summary:');\r\n logger.info(` Framework: ${config.framework.type}`);\r\n logger.info(` Router: ${config.framework.router}`);\r\n logger.info(` Schema: ${config.schema}`);\r\n logger.info(` Output: ${config.outputDir}`);\r\n logger.info(` Config file: ${configPath}`);\r\n\r\n logger.info('\\n🚀 Next steps:');\r\n logger.info(`1. Edit ${configPath} to configure your API`);\r\n logger.info('2. Update the schema URL to point to your OpenAPI schema');\r\n logger.info('3. Update the API baseUrl if needed');\r\n logger.info('4. Run \"mulink generate\" to create your API client');\r\n logger.info('5. Run \"mulink validate\" to check your configuration');\r\n } catch (error) {\r\n spinner.fail('Initialization failed');\r\n if (error instanceof Error) {\r\n logger.error('Error:', error.message);\r\n if (logger.options.level === LogLevel.DEBUG) {\r\n logger.error('Stack trace:', error.stack);\r\n }\r\n } else {\r\n logger.error('Unknown error:', error);\r\n }\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('validate')\r\n .description('Validate OpenAPI schema and configuration')\r\n .option('-c, --config <path>', 'Path to config file', 'link.config.json')\r\n .option('--schema-only', 'Only validate the OpenAPI schema')\r\n .action(async options => {\r\n try {\r\n const configLoader = new ConfigurationLoader();\r\n const config = await configLoader.load(options.config);\r\n\r\n const bridge = new BridgeCore();\r\n\r\n if (options.schemaOnly) {\r\n const isValid = await bridge.validateSchema(config.schema);\r\n if (isValid) {\r\n logger.success('✅ Schema is valid');\r\n const info = await bridge.getSchemaInfo(config.schema);\r\n logger.info(`Title: ${info.title}`);\r\n logger.info(`Version: ${info.version}`);\r\n if (info.description) logger.info(`Description: ${info.description}`);\r\n } else {\r\n logger.error('❌ Schema validation failed');\r\n process.exit(1);\r\n }\r\n } else {\r\n logger.success('✅ Configuration is valid');\r\n const isValid = await bridge.validateSchema(config.schema);\r\n if (isValid) {\r\n logger.success('✅ Schema is valid');\r\n } else {\r\n logger.error('❌ Schema validation failed');\r\n process.exit(1);\r\n }\r\n }\r\n } catch (error) {\r\n logger.error('Validation failed:', error);\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('clean')\r\n .description('Clean generated files and cache')\r\n .option('-c, --config <path>', 'Path to config file', 'link.config.json')\r\n .option('--force', 'Force clean without confirmation')\r\n .action(async options => {\r\n const spinner = logger.spinner('Cleaning cache and generated files...');\r\n\r\n try {\r\n const configLoader = new ConfigurationLoader();\r\n const _config = await configLoader.load(options.config);\r\n\r\n const bridge = new BridgeCore();\r\n bridge.clearCache();\r\n\r\n // TODO: Implement file cleanup\r\n spinner.succeed('Cache and generated files cleared successfully');\r\n\r\n logger.info('🧹 Cleaned:');\r\n logger.info(' - Schema cache');\r\n logger.info(' - Generated files');\r\n logger.info(' - Build artifacts');\r\n } catch (error) {\r\n spinner.fail('Clean failed');\r\n if (error instanceof Error) {\r\n logger.error('Error:', error.message);\r\n if (logger.options.level === LogLevel.DEBUG) {\r\n logger.error('Stack trace:', error.stack);\r\n }\r\n } else {\r\n logger.error('Unknown error:', error);\r\n }\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('info')\r\n .description('Show project information and status')\r\n .option('-c, --config <path>', 'Path to config file', 'link.config.json')\r\n .action(async options => {\r\n try {\r\n const configLoader = new ConfigurationLoader();\r\n const config = await configLoader.load(options.config);\r\n\r\n logger.info('📊 Mulink Project Information');\r\n logger.info('='.repeat(40));\r\n logger.info(`Framework: ${config.framework.type}`);\r\n logger.info(`Router: ${config.framework.router}`);\r\n logger.info(`Schema: ${config.schema}`);\r\n logger.info(`Output: ${config.outputDir}`);\r\n logger.info(`Features:`);\r\n logger.info(` - Server Actions: ${config.framework.features.serverActions ? '✅' : '❌'}`);\r\n logger.info(` - Middleware: ${config.framework.features.middleware ? '✅' : '❌'}`);\r\n logger.info(` - Streaming: ${config.framework.features.streaming ? '✅' : '❌'}`);\r\n logger.info(` - Revalidation: ${config.framework.features.revalidation ? '✅' : '❌'}`);\r\n\r\n if (config.auth?.enabled) {\r\n logger.info(`Auth: ${config.auth.provider}`);\r\n }\r\n\r\n if (config.cache) {\r\n logger.info(`Cache: ${config.cache.strategy} (TTL: ${config.cache.ttl}s)`);\r\n }\r\n } catch (error) {\r\n logger.error('Failed to load project info:', error);\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('check-updates')\r\n .alias('update-check')\r\n .description('Check for available updates')\r\n .option('--force', 'Force check even if recently checked')\r\n .option('--show-current', 'Show current version information')\r\n .action(async options => {\r\n const spinner = logger.spinner('Checking for updates...');\r\n \r\n try {\r\n const versionChecker = createBridgeVersionChecker(logger);\r\n const versionInfo = await versionChecker.checkForUpdates();\r\n const currentVersion = versionChecker.getCurrentVersion();\r\n \r\n if (versionInfo) {\r\n spinner.succeed('Version check completed');\r\n \r\n // Display the enhanced banner with update info\r\n if (versionInfo.updateAvailable) {\r\n const upgradeCommand = versionChecker.getUpgradeCommand(versionInfo);\r\n const updateInfo = {\r\n current: versionInfo.current,\r\n latest: versionInfo.latest,\r\n updateAvailable: versionInfo.updateAvailable,\r\n upgradeCommand\r\n };\r\n \r\n if (logger.options.colors) {\r\n displayColoredBanner(currentVersion,updateInfo);\r\n } else {\r\n displayBanner(currentVersion,updateInfo);\r\n }\r\n } else if (options.showCurrent) {\r\n logger.info(`Current version: ${versionInfo.current}`);\r\n logger.info(`Latest version: ${versionInfo.latest}`);\r\n logger.info('✅ You are using the latest version');\r\n }\r\n } else {\r\n spinner.fail('Could not check for updates');\r\n logger.warn('Unable to fetch version information. Please check your internet connection.');\r\n }\r\n } catch (error) {\r\n spinner.fail('Update check failed');\r\n logger.error('Failed to check for updates:', error);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n// Handle unknown commands\r\nprogram.on('command:*', () => {\r\n logger.error(`Unknown command: ${program.args.join(' ')}`);\r\n logger.info(\"Run 'mulink --help' for available commands\");\r\n process.exit(1);\r\n});\r\n\r\n// Handle errors gracefully\r\nprocess.on('uncaughtException', error => {\r\n logger.error('Uncaught exception:', error);\r\n process.exit(1);\r\n});\r\n\r\nprocess.on('unhandledRejection', reason => {\r\n logger.error('Unhandled rejection:', reason);\r\n process.exit(1);\r\n});\r\n\r\n// Show help if no command provided\r\nif (process.argv.length === 2) {\r\n // Check if colors are disabled\r\n const hasNoColor = process.argv.includes('--no-color');\r\n const currentVersion = versionChecker.getCurrentVersion();\r\n if (hasNoColor) {\r\n displayBanner(currentVersion);\r\n } else {\r\n displayColoredBanner(currentVersion);\r\n }\r\n program.help();\r\n}\r\n\r\nprogram.parse();\r\n"]}
|
package/dist/lib/client.cjs
CHANGED
|
@@ -1,68 +1,68 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkNC747MZJ_cjs = require('./chunk-NC747MZJ.cjs');
|
|
4
4
|
|
|
5
5
|
// src/client/index.ts
|
|
6
|
-
function createBridgeClient(
|
|
7
|
-
return new
|
|
6
|
+
function createBridgeClient(_config) {
|
|
7
|
+
return new chunkNC747MZJ_cjs.BridgeCore();
|
|
8
8
|
}
|
|
9
|
-
|
|
10
|
-
function createTypedClient(
|
|
11
|
-
return new
|
|
9
|
+
chunkNC747MZJ_cjs.__name(createBridgeClient, "createBridgeClient");
|
|
10
|
+
function createTypedClient(_config) {
|
|
11
|
+
return new chunkNC747MZJ_cjs.BridgeCore();
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
chunkNC747MZJ_cjs.__name(createTypedClient, "createTypedClient");
|
|
14
14
|
|
|
15
15
|
Object.defineProperty(exports, "BridgeCore", {
|
|
16
16
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
17
|
+
get: function () { return chunkNC747MZJ_cjs.BridgeCore; }
|
|
18
18
|
});
|
|
19
19
|
Object.defineProperty(exports, "BridgeError", {
|
|
20
20
|
enumerable: true,
|
|
21
|
-
get: function () { return
|
|
21
|
+
get: function () { return chunkNC747MZJ_cjs.BridgeError; }
|
|
22
22
|
});
|
|
23
23
|
Object.defineProperty(exports, "BridgeLogger", {
|
|
24
24
|
enumerable: true,
|
|
25
|
-
get: function () { return
|
|
25
|
+
get: function () { return chunkNC747MZJ_cjs.BridgeLogger; }
|
|
26
26
|
});
|
|
27
27
|
Object.defineProperty(exports, "ConfigurationLoader", {
|
|
28
28
|
enumerable: true,
|
|
29
|
-
get: function () { return
|
|
29
|
+
get: function () { return chunkNC747MZJ_cjs.ConfigurationLoader; }
|
|
30
30
|
});
|
|
31
31
|
Object.defineProperty(exports, "FileSystemManager", {
|
|
32
32
|
enumerable: true,
|
|
33
|
-
get: function () { return
|
|
33
|
+
get: function () { return chunkNC747MZJ_cjs.FileSystemManager; }
|
|
34
34
|
});
|
|
35
35
|
Object.defineProperty(exports, "GenerationError", {
|
|
36
36
|
enumerable: true,
|
|
37
|
-
get: function () { return
|
|
37
|
+
get: function () { return chunkNC747MZJ_cjs.GenerationError; }
|
|
38
38
|
});
|
|
39
39
|
Object.defineProperty(exports, "LogLevel", {
|
|
40
40
|
enumerable: true,
|
|
41
|
-
get: function () { return
|
|
41
|
+
get: function () { return chunkNC747MZJ_cjs.LogLevel; }
|
|
42
42
|
});
|
|
43
43
|
Object.defineProperty(exports, "OpenApiSchemaParser", {
|
|
44
44
|
enumerable: true,
|
|
45
|
-
get: function () { return
|
|
45
|
+
get: function () { return chunkNC747MZJ_cjs.OpenApiSchemaParser; }
|
|
46
46
|
});
|
|
47
47
|
Object.defineProperty(exports, "SchemaParseError", {
|
|
48
48
|
enumerable: true,
|
|
49
|
-
get: function () { return
|
|
49
|
+
get: function () { return chunkNC747MZJ_cjs.SchemaParseError; }
|
|
50
50
|
});
|
|
51
51
|
Object.defineProperty(exports, "ValidationError", {
|
|
52
52
|
enumerable: true,
|
|
53
|
-
get: function () { return
|
|
53
|
+
get: function () { return chunkNC747MZJ_cjs.ValidationError; }
|
|
54
54
|
});
|
|
55
55
|
Object.defineProperty(exports, "VersionChecker", {
|
|
56
56
|
enumerable: true,
|
|
57
|
-
get: function () { return
|
|
57
|
+
get: function () { return chunkNC747MZJ_cjs.VersionChecker; }
|
|
58
58
|
});
|
|
59
59
|
Object.defineProperty(exports, "checkAndNotifyUpdates", {
|
|
60
60
|
enumerable: true,
|
|
61
|
-
get: function () { return
|
|
61
|
+
get: function () { return chunkNC747MZJ_cjs.checkAndNotifyUpdates; }
|
|
62
62
|
});
|
|
63
63
|
Object.defineProperty(exports, "createBridgeVersionChecker", {
|
|
64
64
|
enumerable: true,
|
|
65
|
-
get: function () { return
|
|
65
|
+
get: function () { return chunkNC747MZJ_cjs.createBridgeVersionChecker; }
|
|
66
66
|
});
|
|
67
67
|
exports.createBridgeClient = createBridgeClient;
|
|
68
68
|
exports.createTypedClient = createTypedClient;
|
package/dist/lib/client.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client/index.ts"],"names":["BridgeCore","__name"],"mappings":";;;;;AAsDO,SAAS,mBAAmB,
|
|
1
|
+
{"version":3,"sources":["../../src/client/index.ts"],"names":["BridgeCore","__name"],"mappings":";;;;;AAsDO,SAAS,mBAAmB,OAAA,EAA0C;AAC3E,EAAA,OAAO,IAAIA,4BAAA,EAAW;AACxB;AAFgBC,wBAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAIT,SAAS,kBAAsB,OAAA,EAA0C;AAE9E,EAAA,OAAO,IAAID,4BAAA,EAAW;AACxB;AAHgBC,wBAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA","file":"client.cjs","sourcesContent":["// Client exports for the Mulink library\r\nexport { BridgeCore } from '@/core/bridge-core';\r\nexport { OpenApiSchemaParser } from '@/core/schema-parser';\r\nexport { ConfigurationLoader } from '@/config/configuration-loader';\r\nexport { FileSystemManager } from '@/utils/file-manager';\r\nexport { BridgeLogger, LogLevel } from '@/utils/logger';\r\nexport { VersionChecker, createBridgeVersionChecker, checkAndNotifyUpdates } from '@/utils/version-checker';\r\n\r\n// Import types for internal use\r\nimport type { BridgeConfiguration } from '@/core/types';\r\nimport { BridgeCore } from '@/core/bridge-core';\r\n\r\n// Client-specific types and utilities\r\nexport type {\r\n BridgeConfiguration,\r\n FrameworkConfiguration,\r\n ApiConfiguration,\r\n AuthConfiguration,\r\n CacheConfiguration,\r\n DevelopmentConfiguration,\r\n PluginConfiguration,\r\n GenerationConfiguration,\r\n OpenApiDocument,\r\n ParsedApiSchema,\r\n ApiEndpointDefinition,\r\n ParameterDefinition,\r\n RequestBodyDefinition,\r\n ApiResponseDefinition,\r\n SchemaDefinition,\r\n SecuritySchemeDefinition,\r\n ServerDefinition,\r\n SchemaMetadata,\r\n EndpointMetadata,\r\n SecurityRequirement,\r\n HttpMethod,\r\n CacheStrategy,\r\n RateLimit,\r\n GenerationContext,\r\n GeneratedFile,\r\n FileMetadata,\r\n BridgePlugin,\r\n ClientConfiguration,\r\n RequestConfiguration,\r\n ClientResponse,\r\n StreamingResponse,\r\n} from '@/core/types';\r\n\r\n// Error exports\r\nexport { BridgeError, ValidationError, SchemaParseError, GenerationError } from '@/core/types';\r\n\r\n// Version checker exports\r\nexport type { VersionInfo } from '@/utils/version-checker';\r\n\r\n// Client factory functions\r\nexport function createBridgeClient(_config: BridgeConfiguration): BridgeCore {\r\n return new BridgeCore();\r\n}\r\n\r\nexport function createTypedClient<_T>(_config: BridgeConfiguration): BridgeCore {\r\n // Implementation for typed client creation\r\n return new BridgeCore();\r\n}\r\n"]}
|
package/dist/lib/client.d.cts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { B as BridgeConfiguration,
|
|
2
|
-
export { A as ApiConfiguration,
|
|
1
|
+
import { B as BridgeConfiguration, a as BridgeCore } from './version-checker-DU88tpi8.cjs';
|
|
2
|
+
export { A as ApiConfiguration, j as ApiEndpointDefinition, l as ApiResponseDefinition, f as AuthConfiguration, I as BridgeError, b as BridgeLogger, v as BridgePlugin, g as CacheConfiguration, q as CacheStrategy, w as ClientConfiguration, y as ClientResponse, C as ConfigurationLoader, D as DevelopmentConfiguration, E as EndpointMetadata, u as FileMetadata, F as FileSystemManager, e as FrameworkConfiguration, t as GeneratedFile, G as GenerationConfiguration, s as GenerationContext, M as GenerationError, H as HttpMethod, L as LogLevel, h as OpenApiDocument, O as OpenApiSchemaParser, k as ParameterDefinition, i as ParsedApiSchema, P as PluginConfiguration, r as RateLimit, R as RequestBodyDefinition, x as RequestConfiguration, S as SchemaDefinition, o as SchemaMetadata, K as SchemaParseError, p as SecurityRequirement, m as SecuritySchemeDefinition, n as ServerDefinition, z as StreamingResponse, J as ValidationError, V as VersionChecker, N as VersionInfo, d as checkAndNotifyUpdates, c as createBridgeVersionChecker } from './version-checker-DU88tpi8.cjs';
|
|
3
3
|
import 'openapi-types';
|
|
4
4
|
import 'zod';
|
|
5
5
|
|
|
6
|
-
declare function createBridgeClient(
|
|
7
|
-
declare function createTypedClient<
|
|
6
|
+
declare function createBridgeClient(_config: BridgeConfiguration): BridgeCore;
|
|
7
|
+
declare function createTypedClient<_T>(_config: BridgeConfiguration): BridgeCore;
|
|
8
8
|
|
|
9
9
|
export { BridgeConfiguration, BridgeCore, createBridgeClient, createTypedClient };
|
package/dist/lib/client.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { B as BridgeConfiguration,
|
|
2
|
-
export { A as ApiConfiguration,
|
|
1
|
+
import { B as BridgeConfiguration, a as BridgeCore } from './version-checker-DU88tpi8.js';
|
|
2
|
+
export { A as ApiConfiguration, j as ApiEndpointDefinition, l as ApiResponseDefinition, f as AuthConfiguration, I as BridgeError, b as BridgeLogger, v as BridgePlugin, g as CacheConfiguration, q as CacheStrategy, w as ClientConfiguration, y as ClientResponse, C as ConfigurationLoader, D as DevelopmentConfiguration, E as EndpointMetadata, u as FileMetadata, F as FileSystemManager, e as FrameworkConfiguration, t as GeneratedFile, G as GenerationConfiguration, s as GenerationContext, M as GenerationError, H as HttpMethod, L as LogLevel, h as OpenApiDocument, O as OpenApiSchemaParser, k as ParameterDefinition, i as ParsedApiSchema, P as PluginConfiguration, r as RateLimit, R as RequestBodyDefinition, x as RequestConfiguration, S as SchemaDefinition, o as SchemaMetadata, K as SchemaParseError, p as SecurityRequirement, m as SecuritySchemeDefinition, n as ServerDefinition, z as StreamingResponse, J as ValidationError, V as VersionChecker, N as VersionInfo, d as checkAndNotifyUpdates, c as createBridgeVersionChecker } from './version-checker-DU88tpi8.js';
|
|
3
3
|
import 'openapi-types';
|
|
4
4
|
import 'zod';
|
|
5
5
|
|
|
6
|
-
declare function createBridgeClient(
|
|
7
|
-
declare function createTypedClient<
|
|
6
|
+
declare function createBridgeClient(_config: BridgeConfiguration): BridgeCore;
|
|
7
|
+
declare function createTypedClient<_T>(_config: BridgeConfiguration): BridgeCore;
|
|
8
8
|
|
|
9
9
|
export { BridgeConfiguration, BridgeCore, createBridgeClient, createTypedClient };
|
package/dist/lib/client.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { __name, BridgeCore } from './chunk-
|
|
2
|
-
export { BridgeCore, BridgeError, BridgeLogger, ConfigurationLoader, FileSystemManager, GenerationError, LogLevel, OpenApiSchemaParser, SchemaParseError, ValidationError, VersionChecker, checkAndNotifyUpdates, createBridgeVersionChecker } from './chunk-
|
|
1
|
+
import { __name, BridgeCore } from './chunk-2WVV6AOO.js';
|
|
2
|
+
export { BridgeCore, BridgeError, BridgeLogger, ConfigurationLoader, FileSystemManager, GenerationError, LogLevel, OpenApiSchemaParser, SchemaParseError, ValidationError, VersionChecker, checkAndNotifyUpdates, createBridgeVersionChecker } from './chunk-2WVV6AOO.js';
|
|
3
3
|
|
|
4
4
|
// src/client/index.ts
|
|
5
|
-
function createBridgeClient(
|
|
5
|
+
function createBridgeClient(_config) {
|
|
6
6
|
return new BridgeCore();
|
|
7
7
|
}
|
|
8
8
|
__name(createBridgeClient, "createBridgeClient");
|
|
9
|
-
function createTypedClient(
|
|
9
|
+
function createTypedClient(_config) {
|
|
10
10
|
return new BridgeCore();
|
|
11
11
|
}
|
|
12
12
|
__name(createTypedClient, "createTypedClient");
|
package/dist/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client/index.ts"],"names":[],"mappings":";;;;AAsDO,SAAS,mBAAmB,
|
|
1
|
+
{"version":3,"sources":["../../src/client/index.ts"],"names":[],"mappings":";;;;AAsDO,SAAS,mBAAmB,OAAA,EAA0C;AAC3E,EAAA,OAAO,IAAI,UAAA,EAAW;AACxB;AAFgB,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAIT,SAAS,kBAAsB,OAAA,EAA0C;AAE9E,EAAA,OAAO,IAAI,UAAA,EAAW;AACxB;AAHgB,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA","file":"client.js","sourcesContent":["// Client exports for the Mulink library\r\nexport { BridgeCore } from '@/core/bridge-core';\r\nexport { OpenApiSchemaParser } from '@/core/schema-parser';\r\nexport { ConfigurationLoader } from '@/config/configuration-loader';\r\nexport { FileSystemManager } from '@/utils/file-manager';\r\nexport { BridgeLogger, LogLevel } from '@/utils/logger';\r\nexport { VersionChecker, createBridgeVersionChecker, checkAndNotifyUpdates } from '@/utils/version-checker';\r\n\r\n// Import types for internal use\r\nimport type { BridgeConfiguration } from '@/core/types';\r\nimport { BridgeCore } from '@/core/bridge-core';\r\n\r\n// Client-specific types and utilities\r\nexport type {\r\n BridgeConfiguration,\r\n FrameworkConfiguration,\r\n ApiConfiguration,\r\n AuthConfiguration,\r\n CacheConfiguration,\r\n DevelopmentConfiguration,\r\n PluginConfiguration,\r\n GenerationConfiguration,\r\n OpenApiDocument,\r\n ParsedApiSchema,\r\n ApiEndpointDefinition,\r\n ParameterDefinition,\r\n RequestBodyDefinition,\r\n ApiResponseDefinition,\r\n SchemaDefinition,\r\n SecuritySchemeDefinition,\r\n ServerDefinition,\r\n SchemaMetadata,\r\n EndpointMetadata,\r\n SecurityRequirement,\r\n HttpMethod,\r\n CacheStrategy,\r\n RateLimit,\r\n GenerationContext,\r\n GeneratedFile,\r\n FileMetadata,\r\n BridgePlugin,\r\n ClientConfiguration,\r\n RequestConfiguration,\r\n ClientResponse,\r\n StreamingResponse,\r\n} from '@/core/types';\r\n\r\n// Error exports\r\nexport { BridgeError, ValidationError, SchemaParseError, GenerationError } from '@/core/types';\r\n\r\n// Version checker exports\r\nexport type { VersionInfo } from '@/utils/version-checker';\r\n\r\n// Client factory functions\r\nexport function createBridgeClient(_config: BridgeConfiguration): BridgeCore {\r\n return new BridgeCore();\r\n}\r\n\r\nexport function createTypedClient<_T>(_config: BridgeConfiguration): BridgeCore {\r\n // Implementation for typed client creation\r\n return new BridgeCore();\r\n}\r\n"]}
|
package/dist/lib/index.cjs
CHANGED
|
@@ -1,64 +1,226 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkNC747MZJ_cjs = require('./chunk-NC747MZJ.cjs');
|
|
4
4
|
|
|
5
|
+
// src/utils/type-guards.ts
|
|
6
|
+
function isDefined(value) {
|
|
7
|
+
return value !== null && value !== void 0;
|
|
8
|
+
}
|
|
9
|
+
chunkNC747MZJ_cjs.__name(isDefined, "isDefined");
|
|
10
|
+
function isString(value) {
|
|
11
|
+
return typeof value === "string";
|
|
12
|
+
}
|
|
13
|
+
chunkNC747MZJ_cjs.__name(isString, "isString");
|
|
14
|
+
function isNumber(value) {
|
|
15
|
+
return typeof value === "number" && !Number.isNaN(value);
|
|
16
|
+
}
|
|
17
|
+
chunkNC747MZJ_cjs.__name(isNumber, "isNumber");
|
|
18
|
+
function isObject(value) {
|
|
19
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
20
|
+
}
|
|
21
|
+
chunkNC747MZJ_cjs.__name(isObject, "isObject");
|
|
22
|
+
function isArray(value) {
|
|
23
|
+
return Array.isArray(value);
|
|
24
|
+
}
|
|
25
|
+
chunkNC747MZJ_cjs.__name(isArray, "isArray");
|
|
26
|
+
function isFunction(value) {
|
|
27
|
+
return typeof value === "function";
|
|
28
|
+
}
|
|
29
|
+
chunkNC747MZJ_cjs.__name(isFunction, "isFunction");
|
|
30
|
+
function isError(error) {
|
|
31
|
+
return error instanceof Error;
|
|
32
|
+
}
|
|
33
|
+
chunkNC747MZJ_cjs.__name(isError, "isError");
|
|
34
|
+
function isPromise(value) {
|
|
35
|
+
return value instanceof Promise;
|
|
36
|
+
}
|
|
37
|
+
chunkNC747MZJ_cjs.__name(isPromise, "isPromise");
|
|
38
|
+
function isNonEmptyString(value) {
|
|
39
|
+
return isString(value) && value.trim().length > 0;
|
|
40
|
+
}
|
|
41
|
+
chunkNC747MZJ_cjs.__name(isNonEmptyString, "isNonEmptyString");
|
|
42
|
+
function isValidUrl(value) {
|
|
43
|
+
if (!isString(value)) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
new URL(value);
|
|
48
|
+
return true;
|
|
49
|
+
} catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
chunkNC747MZJ_cjs.__name(isValidUrl, "isValidUrl");
|
|
54
|
+
function isValidFilePath(value) {
|
|
55
|
+
if (!isString(value)) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
return value.length > 0 && !value.includes("\0");
|
|
59
|
+
}
|
|
60
|
+
chunkNC747MZJ_cjs.__name(isValidFilePath, "isValidFilePath");
|
|
5
61
|
|
|
62
|
+
// src/utils/memoize.ts
|
|
63
|
+
function memoize(fn, options = {}) {
|
|
64
|
+
const cache = /* @__PURE__ */ new Map();
|
|
65
|
+
const { ttl, maxSize = 100, keyGenerator } = options;
|
|
66
|
+
const memoized = /* @__PURE__ */ chunkNC747MZJ_cjs.__name((...args) => {
|
|
67
|
+
const key = keyGenerator ? keyGenerator(...args) : JSON.stringify(args);
|
|
68
|
+
const entry = cache.get(key);
|
|
69
|
+
const now = Date.now();
|
|
70
|
+
if (entry) {
|
|
71
|
+
if (ttl && entry.expiresAt <= now) {
|
|
72
|
+
cache.delete(key);
|
|
73
|
+
} else {
|
|
74
|
+
return entry.value;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const value = fn(...args);
|
|
78
|
+
if (cache.size >= maxSize) {
|
|
79
|
+
const firstKey = cache.keys().next().value;
|
|
80
|
+
if (firstKey) {
|
|
81
|
+
cache.delete(firstKey);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
cache.set(key, {
|
|
85
|
+
value,
|
|
86
|
+
expiresAt: ttl ? now + ttl : Number.MAX_SAFE_INTEGER
|
|
87
|
+
});
|
|
88
|
+
return value;
|
|
89
|
+
}, "memoized");
|
|
90
|
+
memoized.clearCache = () => {
|
|
91
|
+
cache.clear();
|
|
92
|
+
};
|
|
93
|
+
memoized.getCacheSize = () => {
|
|
94
|
+
return cache.size;
|
|
95
|
+
};
|
|
96
|
+
return memoized;
|
|
97
|
+
}
|
|
98
|
+
chunkNC747MZJ_cjs.__name(memoize, "memoize");
|
|
99
|
+
function weakMemoize(fn) {
|
|
100
|
+
const cache = /* @__PURE__ */ new WeakMap();
|
|
101
|
+
return (arg) => {
|
|
102
|
+
if (cache.has(arg)) {
|
|
103
|
+
return cache.get(arg);
|
|
104
|
+
}
|
|
105
|
+
const value = fn(arg);
|
|
106
|
+
cache.set(arg, value);
|
|
107
|
+
return value;
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
chunkNC747MZJ_cjs.__name(weakMemoize, "weakMemoize");
|
|
111
|
+
function debounce(fn, delay) {
|
|
112
|
+
let timeoutId = null;
|
|
113
|
+
const debounced = /* @__PURE__ */ chunkNC747MZJ_cjs.__name((...args) => {
|
|
114
|
+
if (timeoutId) {
|
|
115
|
+
clearTimeout(timeoutId);
|
|
116
|
+
}
|
|
117
|
+
timeoutId = setTimeout(() => {
|
|
118
|
+
fn(...args);
|
|
119
|
+
timeoutId = null;
|
|
120
|
+
}, delay);
|
|
121
|
+
}, "debounced");
|
|
122
|
+
debounced.cancel = () => {
|
|
123
|
+
if (timeoutId) {
|
|
124
|
+
clearTimeout(timeoutId);
|
|
125
|
+
timeoutId = null;
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
return debounced;
|
|
129
|
+
}
|
|
130
|
+
chunkNC747MZJ_cjs.__name(debounce, "debounce");
|
|
131
|
+
function throttle(fn, interval) {
|
|
132
|
+
let lastCall = 0;
|
|
133
|
+
let timeoutId = null;
|
|
134
|
+
return (...args) => {
|
|
135
|
+
const now = Date.now();
|
|
136
|
+
const timeSinceLastCall = now - lastCall;
|
|
137
|
+
if (timeSinceLastCall >= interval) {
|
|
138
|
+
lastCall = now;
|
|
139
|
+
fn(...args);
|
|
140
|
+
} else {
|
|
141
|
+
if (timeoutId) {
|
|
142
|
+
clearTimeout(timeoutId);
|
|
143
|
+
}
|
|
144
|
+
timeoutId = setTimeout(() => {
|
|
145
|
+
lastCall = Date.now();
|
|
146
|
+
fn(...args);
|
|
147
|
+
timeoutId = null;
|
|
148
|
+
}, interval - timeSinceLastCall);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
chunkNC747MZJ_cjs.__name(throttle, "throttle");
|
|
6
153
|
|
|
7
154
|
Object.defineProperty(exports, "BridgeCore", {
|
|
8
155
|
enumerable: true,
|
|
9
|
-
get: function () { return
|
|
156
|
+
get: function () { return chunkNC747MZJ_cjs.BridgeCore; }
|
|
10
157
|
});
|
|
11
158
|
Object.defineProperty(exports, "BridgeError", {
|
|
12
159
|
enumerable: true,
|
|
13
|
-
get: function () { return
|
|
160
|
+
get: function () { return chunkNC747MZJ_cjs.BridgeError; }
|
|
14
161
|
});
|
|
15
162
|
Object.defineProperty(exports, "BridgeLogger", {
|
|
16
163
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
164
|
+
get: function () { return chunkNC747MZJ_cjs.BridgeLogger; }
|
|
18
165
|
});
|
|
19
166
|
Object.defineProperty(exports, "ConfigurationLoader", {
|
|
20
167
|
enumerable: true,
|
|
21
|
-
get: function () { return
|
|
168
|
+
get: function () { return chunkNC747MZJ_cjs.ConfigurationLoader; }
|
|
22
169
|
});
|
|
23
170
|
Object.defineProperty(exports, "FileSystemManager", {
|
|
24
171
|
enumerable: true,
|
|
25
|
-
get: function () { return
|
|
172
|
+
get: function () { return chunkNC747MZJ_cjs.FileSystemManager; }
|
|
26
173
|
});
|
|
27
174
|
Object.defineProperty(exports, "GenerationError", {
|
|
28
175
|
enumerable: true,
|
|
29
|
-
get: function () { return
|
|
176
|
+
get: function () { return chunkNC747MZJ_cjs.GenerationError; }
|
|
30
177
|
});
|
|
31
178
|
Object.defineProperty(exports, "LogLevel", {
|
|
32
179
|
enumerable: true,
|
|
33
|
-
get: function () { return
|
|
180
|
+
get: function () { return chunkNC747MZJ_cjs.LogLevel; }
|
|
34
181
|
});
|
|
35
182
|
Object.defineProperty(exports, "NextJsCodeGenerator", {
|
|
36
183
|
enumerable: true,
|
|
37
|
-
get: function () { return
|
|
184
|
+
get: function () { return chunkNC747MZJ_cjs.NextJsCodeGenerator; }
|
|
38
185
|
});
|
|
39
186
|
Object.defineProperty(exports, "OpenApiSchemaParser", {
|
|
40
187
|
enumerable: true,
|
|
41
|
-
get: function () { return
|
|
188
|
+
get: function () { return chunkNC747MZJ_cjs.OpenApiSchemaParser; }
|
|
42
189
|
});
|
|
43
190
|
Object.defineProperty(exports, "SchemaParseError", {
|
|
44
191
|
enumerable: true,
|
|
45
|
-
get: function () { return
|
|
192
|
+
get: function () { return chunkNC747MZJ_cjs.SchemaParseError; }
|
|
46
193
|
});
|
|
47
194
|
Object.defineProperty(exports, "ValidationError", {
|
|
48
195
|
enumerable: true,
|
|
49
|
-
get: function () { return
|
|
196
|
+
get: function () { return chunkNC747MZJ_cjs.ValidationError; }
|
|
50
197
|
});
|
|
51
198
|
Object.defineProperty(exports, "VersionChecker", {
|
|
52
199
|
enumerable: true,
|
|
53
|
-
get: function () { return
|
|
200
|
+
get: function () { return chunkNC747MZJ_cjs.VersionChecker; }
|
|
54
201
|
});
|
|
55
202
|
Object.defineProperty(exports, "checkAndNotifyUpdates", {
|
|
56
203
|
enumerable: true,
|
|
57
|
-
get: function () { return
|
|
204
|
+
get: function () { return chunkNC747MZJ_cjs.checkAndNotifyUpdates; }
|
|
58
205
|
});
|
|
59
206
|
Object.defineProperty(exports, "createBridgeVersionChecker", {
|
|
60
207
|
enumerable: true,
|
|
61
|
-
get: function () { return
|
|
208
|
+
get: function () { return chunkNC747MZJ_cjs.createBridgeVersionChecker; }
|
|
62
209
|
});
|
|
210
|
+
exports.debounce = debounce;
|
|
211
|
+
exports.isArray = isArray;
|
|
212
|
+
exports.isDefined = isDefined;
|
|
213
|
+
exports.isError = isError;
|
|
214
|
+
exports.isFunction = isFunction;
|
|
215
|
+
exports.isNonEmptyString = isNonEmptyString;
|
|
216
|
+
exports.isNumber = isNumber;
|
|
217
|
+
exports.isObject = isObject;
|
|
218
|
+
exports.isPromise = isPromise;
|
|
219
|
+
exports.isString = isString;
|
|
220
|
+
exports.isValidFilePath = isValidFilePath;
|
|
221
|
+
exports.isValidUrl = isValidUrl;
|
|
222
|
+
exports.memoize = memoize;
|
|
223
|
+
exports.throttle = throttle;
|
|
224
|
+
exports.weakMemoize = weakMemoize;
|
|
63
225
|
//# sourceMappingURL=index.cjs.map
|
|
64
226
|
//# sourceMappingURL=index.cjs.map
|
package/dist/lib/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/type-guards.ts","../../src/utils/memoize.ts"],"names":["__name"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\r\n * Type guard utilities for runtime type checking\r\n * \r\n * These utilities provide type-safe runtime checks similar to libraries like Apollo Client.\r\n * They ensure type safety at runtime and improve developer experience.\r\n */\r\n\r\n/**\r\n * Type guard to check if a value is defined (not null or undefined)\r\n * \r\n * @param value - Value to check\r\n * @returns True if value is defined\r\n * \r\n * @example\r\n * ```typescript\r\n * const value: string | undefined = getValue();\r\n * if (isDefined(value)) {\r\n * // value is now string\r\n * console.log(value.toUpperCase());\r\n * }\r\n * ```\r\n */\r\nexport function isDefined<T>(value: T | null | undefined): value is T {\r\n return value !== null && value !== undefined;\r\n}\r\n\r\n/**\r\n * Type guard to check if a value is a string\r\n * \r\n * @param value - Value to check\r\n * @returns True if value is a string\r\n */\r\nexport function isString(value: unknown): value is string {\r\n return typeof value === 'string';\r\n}\r\n\r\n/**\r\n * Type guard to check if a value is a number\r\n * \r\n * @param value - Value to check\r\n * @returns True if value is a number\r\n */\r\nexport function isNumber(value: unknown): value is number {\r\n return typeof value === 'number' && !Number.isNaN(value);\r\n}\r\n\r\n/**\r\n * Type guard to check if a value is an object (and not null)\r\n * \r\n * @param value - Value to check\r\n * @returns True if value is an object\r\n */\r\nexport function isObject(value: unknown): value is Record<string, unknown> {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value);\r\n}\r\n\r\n/**\r\n * Type guard to check if a value is an array\r\n * \r\n * @param value - Value to check\r\n * @returns True if value is an array\r\n */\r\nexport function isArray<T>(value: unknown): value is T[] {\r\n return Array.isArray(value);\r\n}\r\n\r\n/**\r\n * Type guard to check if a value is a function\r\n * \r\n * @param value - Value to check\r\n * @returns True if value is a function\r\n */\r\nexport function isFunction(value: unknown): value is (...args: unknown[]) => unknown {\r\n return typeof value === 'function';\r\n}\r\n\r\n/**\r\n * Type guard to check if an error is an Error instance\r\n * \r\n * @param error - Error to check\r\n * @returns True if error is an Error instance\r\n */\r\nexport function isError(error: unknown): error is Error {\r\n return error instanceof Error;\r\n}\r\n\r\n/**\r\n * Type guard to check if a value is a Promise\r\n * \r\n * @param value - Value to check\r\n * @returns True if value is a Promise\r\n */\r\nexport function isPromise<T>(value: unknown): value is Promise<T> {\r\n return value instanceof Promise;\r\n}\r\n\r\n/**\r\n * Type guard to check if a value is a non-empty string\r\n * \r\n * @param value - Value to check\r\n * @returns True if value is a non-empty string\r\n */\r\nexport function isNonEmptyString(value: unknown): value is string {\r\n return isString(value) && value.trim().length > 0;\r\n}\r\n\r\n/**\r\n * Type guard to check if a value is a valid URL string\r\n * \r\n * @param value - Value to check\r\n * @returns True if value is a valid URL\r\n */\r\nexport function isValidUrl(value: unknown): value is string {\r\n if (!isString(value)) {\r\n return false;\r\n }\r\n \r\n try {\r\n new URL(value);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Type guard to check if a value is a valid file path\r\n * \r\n * @param value - Value to check\r\n * @returns True if value appears to be a valid file path\r\n */\r\nexport function isValidFilePath(value: unknown): value is string {\r\n if (!isString(value)) {\r\n return false;\r\n }\r\n \r\n // Basic validation - can be enhanced based on OS\r\n return value.length > 0 && !value.includes('\\0');\r\n}\r\n\r\n","/**\r\n * Memoization utilities for performance optimization\r\n * \r\n * Similar to Apollo Client's caching strategies, these utilities provide\r\n * efficient memoization for expensive computations.\r\n */\r\n\r\n/**\r\n * Cache entry with expiration support\r\n */\r\ninterface CacheEntry<T> {\r\n value: T;\r\n expiresAt: number;\r\n}\r\n\r\n/**\r\n * Memoization options\r\n */\r\ninterface MemoizeOptions {\r\n /**\r\n * Time to live in milliseconds\r\n * If not provided, cache never expires\r\n */\r\n ttl?: number;\r\n \r\n /**\r\n * Maximum cache size\r\n * If exceeded, oldest entries are removed\r\n */\r\n maxSize?: number;\r\n \r\n /**\r\n * Custom key generator function\r\n */\r\n keyGenerator?: (...args: unknown[]) => string;\r\n}\r\n\r\n/**\r\n * Creates a memoized version of a function\r\n * \r\n * Caches function results based on arguments. Similar to Apollo Client's\r\n * caching mechanism but for general-purpose functions.\r\n * \r\n * @param fn - Function to memoize\r\n * @param options - Memoization options\r\n * @returns Memoized function\r\n * \r\n * @example\r\n * ```typescript\r\n * const expensiveFunction = (x: number, y: number) => {\r\n * // Expensive computation\r\n * return x * y;\r\n * };\r\n * \r\n * const memoized = memoize(expensiveFunction, { ttl: 5000 });\r\n * const result1 = memoized(2, 3); // Computes\r\n * const result2 = memoized(2, 3); // Returns cached result\r\n * ```\r\n */\r\nexport function memoize<T extends (...args: unknown[]) => unknown>(\r\n fn: T,\r\n options: MemoizeOptions = {}\r\n): T {\r\n const cache = new Map<string, CacheEntry<ReturnType<T>>>();\r\n const { ttl, maxSize = 100, keyGenerator } = options;\r\n\r\n const memoized = ((...args: Parameters<T>): ReturnType<T> => {\r\n // Generate cache key\r\n const key = keyGenerator \r\n ? keyGenerator(...args)\r\n : JSON.stringify(args);\r\n\r\n // Check cache\r\n const entry = cache.get(key);\r\n const now = Date.now();\r\n\r\n if (entry) {\r\n // Check if expired\r\n if (ttl && entry.expiresAt <= now) {\r\n cache.delete(key);\r\n } else {\r\n return entry.value;\r\n }\r\n }\r\n\r\n // Compute value\r\n const value = fn(...args) as ReturnType<T>;\r\n\r\n // Store in cache\r\n if (cache.size >= maxSize) {\r\n // Remove oldest entry (first in Map)\r\n const firstKey = cache.keys().next().value;\r\n if (firstKey) {\r\n cache.delete(firstKey);\r\n }\r\n }\r\n\r\n cache.set(key, {\r\n value,\r\n expiresAt: ttl ? now + ttl : Number.MAX_SAFE_INTEGER,\r\n });\r\n\r\n return value;\r\n }) as T;\r\n\r\n // Add cache management methods\r\n (memoized as T & { clearCache: () => void }).clearCache = () => {\r\n cache.clear();\r\n };\r\n\r\n (memoized as T & { getCacheSize: () => number }).getCacheSize = () => {\r\n return cache.size;\r\n };\r\n\r\n return memoized;\r\n}\r\n\r\n/**\r\n * Creates a weak memoized version of a function\r\n * \r\n * Uses WeakMap for automatic garbage collection. Useful when cache keys\r\n * are objects that may be garbage collected.\r\n * \r\n * @param fn - Function to memoize\r\n * @returns Memoized function\r\n * \r\n * @example\r\n * ```typescript\r\n * const processObject = (obj: { id: number }) => {\r\n * return obj.id * 2;\r\n * };\r\n * \r\n * const memoized = weakMemoize(processObject);\r\n * const result = memoized({ id: 5 });\r\n * ```\r\n */\r\nexport function weakMemoize<T extends (arg: object) => unknown>(\r\n fn: T\r\n): T {\r\n const cache = new WeakMap<object, ReturnType<T>>();\r\n\r\n return ((arg: Parameters<T>[0]): ReturnType<T> => {\r\n if (cache.has(arg)) {\r\n return cache.get(arg)!;\r\n }\r\n\r\n const value = fn(arg) as ReturnType<T>;\r\n cache.set(arg, value);\r\n return value;\r\n }) as T;\r\n}\r\n\r\n/**\r\n * Debounce utility for rate limiting function calls\r\n * \r\n * Ensures a function is only called after a specified delay since\r\n * the last invocation. Useful for API calls and user input handling.\r\n * \r\n * @param fn - Function to debounce\r\n * @param delay - Delay in milliseconds\r\n * @returns Debounced function\r\n * \r\n * @example\r\n * ```typescript\r\n * const search = (query: string) => {\r\n * console.log(`Searching for: ${query}`);\r\n * };\r\n * \r\n * const debouncedSearch = debounce(search, 300);\r\n * debouncedSearch('a'); // Not called\r\n * debouncedSearch('ab'); // Not called\r\n * debouncedSearch('abc'); // Called after 300ms\r\n * ```\r\n */\r\nexport function debounce<T extends (...args: unknown[]) => unknown>(\r\n fn: T,\r\n delay: number\r\n): T & { cancel: () => void } {\r\n let timeoutId: NodeJS.Timeout | null = null;\r\n\r\n const debounced = ((...args: Parameters<T>) => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n\r\n timeoutId = setTimeout(() => {\r\n fn(...args);\r\n timeoutId = null;\r\n }, delay);\r\n }) as T & { cancel: () => void };\r\n\r\n debounced.cancel = () => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n timeoutId = null;\r\n }\r\n };\r\n\r\n return debounced;\r\n}\r\n\r\n/**\r\n * Throttle utility for rate limiting function calls\r\n * \r\n * Ensures a function is called at most once per specified interval.\r\n * Unlike debounce, throttle guarantees execution at regular intervals.\r\n * \r\n * @param fn - Function to throttle\r\n * @param interval - Interval in milliseconds\r\n * @returns Throttled function\r\n * \r\n * @example\r\n * ```typescript\r\n * const onScroll = () => {\r\n * console.log('Scrolled');\r\n * };\r\n * \r\n * const throttledScroll = throttle(onScroll, 100);\r\n * // Will be called at most once every 100ms\r\n * ```\r\n */\r\nexport function throttle<T extends (...args: unknown[]) => unknown>(\r\n fn: T,\r\n interval: number\r\n): T {\r\n let lastCall = 0;\r\n let timeoutId: NodeJS.Timeout | null = null;\r\n\r\n return ((...args: Parameters<T>) => {\r\n const now = Date.now();\r\n const timeSinceLastCall = now - lastCall;\r\n\r\n if (timeSinceLastCall >= interval) {\r\n lastCall = now;\r\n fn(...args);\r\n } else {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n\r\n timeoutId = setTimeout(() => {\r\n lastCall = Date.now();\r\n fn(...args);\r\n timeoutId = null;\r\n }, interval - timeSinceLastCall);\r\n }\r\n }) as T;\r\n}\r\n\r\n"]}
|