@eventcatalog/cli 0.3.0 → 0.3.1

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/cli/index.js CHANGED
@@ -267,7 +267,7 @@ ${vizBlock}` : grouped;
267
267
  const lines = ["", ` Exported full catalog to ${filepath}`];
268
268
  if (playground) {
269
269
  const encoded = Buffer.from(dsl).toString("base64");
270
- const playgroundUrl = `http://localhost:5173/?code=${encoded}`;
270
+ const playgroundUrl = `https://playground.eventcatalog.dev/?code=${encoded}`;
271
271
  await (0, import_open.default)(playgroundUrl);
272
272
  lines.push("", ` Opening in playground...`);
273
273
  } else {
@@ -285,8 +285,8 @@ async function exportAll(options) {
285
285
  const plural = pluralize(type);
286
286
  const sdk = (0, import_sdk3.default)(dir);
287
287
  const fetcher = getCollectionFetcher(sdk, type);
288
- const allResources = await fetcher({ latestOnly: true });
289
- if (!allResources || allResources.length === 0) {
288
+ const allResources = await fetcher({ latestOnly: true }) || [];
289
+ if (allResources.length === 0) {
290
290
  throw new Error(`No ${plural} found in catalog at '${dir}'`);
291
291
  }
292
292
  const rawDsl = await sdk.toDSL(allResources, { type, hydrate });
@@ -303,7 +303,7 @@ ${vizBlock}` : grouped;
303
303
  const lines = ["", ` Exported ${allResources.length} ${plural} to ${filepath}`];
304
304
  if (playground) {
305
305
  const encoded = Buffer.from(dsl).toString("base64");
306
- const playgroundUrl = `http://localhost:5173/?code=${encoded}`;
306
+ const playgroundUrl = `https://playground.eventcatalog.dev/?code=${encoded}`;
307
307
  await (0, import_open.default)(playgroundUrl);
308
308
  lines.push("", ` Opening in playground...`);
309
309
  } else {
@@ -342,7 +342,7 @@ ${vizBlock}` : grouped;
342
342
  const lines = ["", ` Exported ${type} '${id}' to ${filepath}`];
343
343
  if (playground) {
344
344
  const encoded = Buffer.from(dsl).toString("base64");
345
- const playgroundUrl = `http://localhost:5173/?code=${encoded}`;
345
+ const playgroundUrl = `https://playground.eventcatalog.dev/?code=${encoded}`;
346
346
  await (0, import_open.default)(playgroundUrl);
347
347
  lines.push("", ` Opening in playground...`);
348
348
  } else {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/index.ts","../../src/cli/executor.ts","../../src/cli/parser.ts","../../src/cli/list.ts","../../src/cli/export.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { program } from 'commander';\nimport { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { executeFunction } from './executor';\nimport { listFunctions, formatListOutput } from './list';\nimport { exportResource, exportCatalog } from './export';\n\n// Read package.json to get version\nlet version = '1.0.0';\ntry {\n const packageJsonPath = resolve(__dirname, '../../package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n version = packageJson.version;\n} catch {\n // Fall back to default version if package.json not found\n}\n\nprogram\n .name('eventcatalog')\n .description('EventCatalog Command-Line Interface')\n .version(version)\n .option('-d, --dir <path>', 'Path to the EventCatalog directory (default: current directory)', '.');\n\n// List command - show all available functions\nprogram\n .command('list')\n .description('List all available SDK functions')\n .action(() => {\n try {\n const functions = listFunctions('.');\n const output = formatListOutput(functions);\n console.log(output);\n } catch (error) {\n console.error('Error listing functions:', error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n// Export command - export a resource to .ec DSL format\nprogram\n .command('export')\n .description('Export a catalog resource to EventCatalog DSL (.ec) format')\n .option('-a, --all', 'Export the entire catalog (all resource types)', false)\n .option('-r, --resource <type>', 'Resource type (event, command, query, service, domain)')\n .option('--id <id>', 'Resource ID (omit to export all resources of the given type)')\n .option('-v, --version <version>', 'Resource version (defaults to latest)')\n .option('--hydrate', 'Include referenced resources (messages, channels, owners)', false)\n .option('--stdout', 'Print to stdout instead of writing a file', false)\n .option('--playground', 'Open the exported DSL in the playground', false)\n .option('-o, --output <path>', 'Output file path (defaults to <id>.ec or catalog.ec)')\n .action(async (opts) => {\n try {\n const globalOpts = program.opts() as any;\n const dir = globalOpts.dir || '.';\n\n if (opts.all) {\n const result = await exportCatalog({\n hydrate: opts.hydrate,\n stdout: opts.stdout,\n playground: opts.playground,\n output: opts.output,\n dir,\n });\n console.log(result);\n return;\n }\n\n if (!opts.resource) {\n console.error('Either --all or --resource is required');\n process.exit(1);\n }\n\n const result = await exportResource({\n resource: opts.resource,\n id: opts.id,\n version: opts.version,\n hydrate: opts.hydrate,\n stdout: opts.stdout,\n playground: opts.playground,\n output: opts.output,\n dir,\n });\n console.log(result);\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n// Catch-all for any other command - execute as SDK function\nprogram.arguments('<function> [args...]').action(async (functionName: string, args: string[]) => {\n try {\n const options = program.opts() as any;\n const dir = options.dir || '.';\n const result = await executeFunction(dir, functionName, args);\n console.log(JSON.stringify(result, null, 0));\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n});\n\nprogram.parse(process.argv);\n\n// Show help if no command provided\nif (process.argv.length < 3) {\n program.outputHelp();\n}\n","import { existsSync } from 'node:fs';\nimport { parseArguments } from './parser';\nimport createSDK from '@eventcatalog/sdk';\n\n/**\n * Execute a SDK function with the given arguments\n */\nexport async function executeFunction(catalogDir: string, functionName: string, rawArgs: string[]): Promise<any> {\n // Validate catalog directory exists\n if (!existsSync(catalogDir)) {\n throw new Error(`Catalog directory not found: ${catalogDir}`);\n }\n\n // Initialize the SDK\n const sdk = createSDK(catalogDir);\n\n // Validate function exists\n if (!(functionName in sdk)) {\n throw new Error(`Function '${functionName}' not found. Use 'eventcatalog list' to see available functions.`);\n }\n\n const fn = (sdk as any)[functionName];\n\n // Validate it's callable\n if (typeof fn !== 'function') {\n throw new Error(`'${functionName}' is not a callable function.`);\n }\n\n // Parse arguments\n const parsedArgs = parseArguments(rawArgs);\n\n // Execute function\n try {\n return await fn(...parsedArgs);\n } catch (error) {\n throw new Error(`Error executing '${functionName}': ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n","/**\n * Parse command-line arguments into typed values\n * Supports JSON objects/arrays, booleans, numbers, and strings\n */\nexport function parseArguments(rawArgs: string[]): any[] {\n return rawArgs.map((arg, index) => {\n // Try to parse as JSON object or array if it looks like JSON\n if ((arg.startsWith('{') && arg.endsWith('}')) || (arg.startsWith('[') && arg.endsWith(']'))) {\n try {\n return JSON.parse(arg);\n } catch (error) {\n // If it fails to parse as JSON, treat it as a string\n // Only throw error if it looks like valid JSON syntax was intended\n if (arg.includes(':') || arg.includes(',')) {\n throw new Error(`Invalid JSON in argument ${index + 1}: ${error instanceof Error ? error.message : String(error)}`);\n }\n // Otherwise, return as string\n return arg;\n }\n }\n\n // Parse booleans\n if (arg === 'true') return true;\n if (arg === 'false') return false;\n\n // Parse numbers\n if (/^-?\\d+(\\.\\d+)?$/.test(arg)) {\n return Number(arg);\n }\n\n // Return as string\n return arg;\n });\n}\n","import createSDK from '@eventcatalog/sdk';\n\ninterface CategorizedFunctions {\n [category: string]: string[];\n}\n\n/**\n * Get all available SDK functions organized by category\n */\nexport function listFunctions(catalogDir: string = '.'): CategorizedFunctions {\n // Initialize SDK to get all functions\n const sdk = createSDK(catalogDir);\n\n // Get all function names from SDK\n const functionNames = Object.keys(sdk).filter((key) => typeof (sdk as any)[key] === 'function');\n\n // Categorize functions based on naming patterns\n const categories: CategorizedFunctions = {\n Events: [],\n Commands: [],\n Queries: [],\n Channels: [],\n Services: [],\n Domains: [],\n Entities: [],\n DataStores: [],\n DataProducts: [],\n Teams: [],\n Users: [],\n 'Custom Docs': [],\n Messages: [],\n Utilities: [],\n };\n\n functionNames.forEach((name) => {\n if (name.includes('Event')) categories['Events'].push(name);\n else if (name.includes('Command')) categories['Commands'].push(name);\n else if (name.includes('Query')) categories['Queries'].push(name);\n else if (name.includes('Channel')) categories['Channels'].push(name);\n else if (name.includes('Service')) categories['Services'].push(name);\n else if (name.includes('Domain')) categories['Domains'].push(name);\n else if (name.includes('Entity')) categories['Entities'].push(name);\n else if (name.includes('DataStore')) categories['DataStores'].push(name);\n else if (name.includes('DataProduct')) categories['DataProducts'].push(name);\n else if (name.includes('Team')) categories['Teams'].push(name);\n else if (name.includes('User')) categories['Users'].push(name);\n else if (name.includes('CustomDoc')) categories['Custom Docs'].push(name);\n else if (name.includes('Message') || name.includes('Producers') || name.includes('Consumers'))\n categories['Messages'].push(name);\n else categories['Utilities'].push(name);\n });\n\n // Remove empty categories\n Object.keys(categories).forEach((key) => {\n if (categories[key].length === 0) {\n delete categories[key];\n }\n });\n\n return categories;\n}\n\n/**\n * Format and print categorized functions\n */\nexport function formatListOutput(functions: CategorizedFunctions): string {\n let output = 'Available EventCatalog SDK Functions:\\n\\n';\n\n Object.entries(functions).forEach(([category, names]) => {\n output += `${category}:\\n`;\n names.sort().forEach((name) => {\n output += ` - ${name}\\n`;\n });\n output += '\\n';\n });\n\n return output;\n}\n","import { writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport open from 'open';\nimport createSDK from '@eventcatalog/sdk';\n\nconst RESOURCE_TYPES = ['event', 'command', 'query', 'service', 'domain'] as const;\ntype ResourceType = (typeof RESOURCE_TYPES)[number];\n\nconst PLURAL_MAP: Record<string, ResourceType> = {\n events: 'event',\n commands: 'command',\n queries: 'query',\n services: 'service',\n domains: 'domain',\n};\n\ninterface ExportOptions {\n resource: string;\n id?: string;\n version?: string;\n hydrate?: boolean;\n stdout?: boolean;\n playground?: boolean;\n output?: string;\n dir: string;\n}\n\nfunction normalizeResourceType(resource: string): ResourceType {\n const lower = resource.toLowerCase();\n if (PLURAL_MAP[lower]) return PLURAL_MAP[lower];\n return lower as ResourceType;\n}\n\nfunction getResourceFetcher(sdk: ReturnType<typeof createSDK>, type: ResourceType) {\n switch (type) {\n case 'event':\n return sdk.getEvent;\n case 'command':\n return sdk.getCommand;\n case 'query':\n return sdk.getQuery;\n case 'service':\n return sdk.getService;\n case 'domain':\n return sdk.getDomain;\n }\n}\n\nfunction getCollectionFetcher(sdk: ReturnType<typeof createSDK>, type: ResourceType) {\n switch (type) {\n case 'event':\n return sdk.getEvents;\n case 'command':\n return sdk.getCommands;\n case 'query':\n return sdk.getQueries;\n case 'service':\n return sdk.getServices;\n case 'domain':\n return sdk.getDomains;\n }\n}\n\nfunction pluralize(type: ResourceType): string {\n if (type === 'query') return 'queries';\n return `${type}s`;\n}\n\nconst SECTION_ORDER = ['team', 'user', 'channel', 'event', 'command', 'query', 'service', 'domain'] as const;\n\nconst SECTION_LABELS: Record<string, string> = {\n team: 'TEAMS',\n user: 'USERS',\n channel: 'CHANNELS',\n event: 'EVENTS',\n command: 'COMMANDS',\n query: 'QUERIES',\n service: 'SERVICES',\n domain: 'DOMAINS',\n};\n\nfunction groupDSLBlocks(dsl: string): string {\n const blocks = dsl.split(/\\n\\n/).filter((b) => b.trim());\n const buckets: Record<string, string[]> = {};\n\n for (const block of blocks) {\n const firstWord = block.trimStart().split(/\\s/)[0];\n const key = firstWord === 'subdomain' ? 'domain' : firstWord;\n if (!buckets[key]) buckets[key] = [];\n buckets[key].push(block);\n }\n\n const sections: string[] = [];\n for (const type of SECTION_ORDER) {\n if (!buckets[type] || buckets[type].length === 0) continue;\n const label = SECTION_LABELS[type] || type.toUpperCase();\n sections.push(`// ${label}\\n${buckets[type].join('\\n\\n')}`);\n delete buckets[type];\n }\n\n // Any remaining types not in SECTION_ORDER\n for (const [type, items] of Object.entries(buckets)) {\n if (items.length === 0) continue;\n const label = type.toUpperCase();\n sections.push(`// ${label}\\n${items.join('\\n\\n')}`);\n }\n\n return sections.join('\\n\\n');\n}\n\nconst VISUALIZER_TYPES = ['event', 'command', 'query', 'service', 'domain'] as const;\n\nfunction buildVisualizerBlock(dsl: string, name: string, filterTypes: ResourceType | ResourceType[]): string {\n const types = Array.isArray(filterTypes) ? filterTypes : [filterTypes];\n const entries: string[] = [];\n\n for (const line of dsl.split('\\n')) {\n const trimmed = line.trimStart();\n const parts = trimmed.split(/\\s/);\n const keyword = parts[0];\n const id = parts[1];\n if (!types.includes(keyword as ResourceType)) continue;\n if (!id || !trimmed.endsWith('{')) continue;\n entries.push(` ${keyword} ${id}`);\n }\n\n if (entries.length === 0) return '';\n return `\\nvisualizer main {\\n name \"${name}\"\\n${entries.join('\\n')}\\n}`;\n}\n\nexport async function exportCatalog(options: Omit<ExportOptions, 'resource'>): Promise<string> {\n const { hydrate = false, stdout = false, playground = false, output, dir } = options;\n\n const sdk = createSDK(dir);\n const dslParts: string[] = [];\n\n for (const type of RESOURCE_TYPES) {\n const fetcher = getCollectionFetcher(sdk, type);\n const resources = await fetcher({ latestOnly: true });\n if (!resources || resources.length === 0) continue;\n const rawDsl = await sdk.toDSL(resources, { type, hydrate });\n dslParts.push(rawDsl);\n }\n\n if (dslParts.length === 0) {\n throw new Error(`No resources found in catalog at '${dir}'`);\n }\n\n const combined = dslParts.join('\\n\\n');\n const grouped = groupDSLBlocks(combined);\n const vizBlock = buildVisualizerBlock(grouped, 'Full Catalog', [...RESOURCE_TYPES]);\n const dsl = vizBlock ? `${grouped}\\n${vizBlock}` : grouped;\n\n if (stdout) {\n return dsl;\n }\n\n const filename = output || 'catalog.ec';\n const filepath = resolve(filename);\n writeFileSync(filepath, dsl + '\\n', 'utf-8');\n\n const lines = ['', ` Exported full catalog to ${filepath}`];\n\n if (playground) {\n const encoded = Buffer.from(dsl).toString('base64');\n const playgroundUrl = `http://localhost:5173/?code=${encoded}`;\n await open(playgroundUrl);\n lines.push('', ` Opening in playground...`);\n } else {\n lines.push('', ` Tip: Use --playground to open in the playground`);\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\nexport async function exportAll(options: ExportOptions): Promise<string> {\n const { resource, hydrate = false, stdout = false, playground = false, output, dir } = options;\n\n const type = normalizeResourceType(resource);\n if (!RESOURCE_TYPES.includes(type)) {\n throw new Error(`Invalid resource type '${resource}'. Must be one of: ${RESOURCE_TYPES.join(', ')}`);\n }\n\n const plural = pluralize(type);\n const sdk = createSDK(dir);\n const fetcher = getCollectionFetcher(sdk, type);\n const allResources = await fetcher({ latestOnly: true });\n\n if (!allResources || allResources.length === 0) {\n throw new Error(`No ${plural} found in catalog at '${dir}'`);\n }\n\n const rawDsl = await sdk.toDSL(allResources, { type, hydrate });\n const grouped = groupDSLBlocks(rawDsl);\n const vizBlock = buildVisualizerBlock(grouped, `All ${plural}`, type);\n const dsl = vizBlock ? `${grouped}\\n${vizBlock}` : grouped;\n\n if (stdout) {\n return dsl;\n }\n\n const filename = output || `${plural}.ec`;\n const filepath = resolve(filename);\n writeFileSync(filepath, dsl + '\\n', 'utf-8');\n\n const lines = ['', ` Exported ${allResources.length} ${plural} to ${filepath}`];\n\n if (playground) {\n const encoded = Buffer.from(dsl).toString('base64');\n const playgroundUrl = `http://localhost:5173/?code=${encoded}`;\n await open(playgroundUrl);\n lines.push('', ` Opening in playground...`);\n } else {\n lines.push('', ` Tip: Use --playground to open in the playground`);\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\nexport async function exportResource(options: ExportOptions): Promise<string> {\n const { resource, id, version, hydrate = false, stdout = false, playground = false, output, dir } = options;\n\n if (!id) {\n return exportAll(options);\n }\n\n const type = normalizeResourceType(resource);\n if (!RESOURCE_TYPES.includes(type)) {\n throw new Error(`Invalid resource type '${resource}'. Must be one of: ${RESOURCE_TYPES.join(', ')}`);\n }\n\n const sdk = createSDK(dir);\n const fetcher = getResourceFetcher(sdk, type);\n const data = await fetcher(id, version);\n\n if (!data) {\n const versionStr = version ? `@${version}` : ' (latest)';\n throw new Error(`${resource} '${id}${versionStr}' not found in catalog at '${dir}'`);\n }\n\n const rawDsl = await sdk.toDSL(data, { type, hydrate });\n const grouped = hydrate ? groupDSLBlocks(rawDsl) : rawDsl;\n const vizBlock = buildVisualizerBlock(grouped, `View of ${id}`, type);\n const dsl = vizBlock ? `${grouped}\\n${vizBlock}` : grouped;\n\n if (stdout) {\n return dsl;\n }\n\n const filename = output || `${id}.ec`;\n const filepath = resolve(filename);\n writeFileSync(filepath, dsl + '\\n', 'utf-8');\n\n const lines = ['', ` Exported ${type} '${id}' to ${filepath}`];\n\n if (playground) {\n const encoded = Buffer.from(dsl).toString('base64');\n const playgroundUrl = `http://localhost:5173/?code=${encoded}`;\n await open(playgroundUrl);\n lines.push('', ` Opening in playground...`);\n } else {\n lines.push('', ` Tip: Use --playground to open in the playground`);\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n"],"mappings":"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","names":["import_node_fs","import_node_path","createSDK","import_sdk","createSDK","import_node_fs","import_sdk","createSDK","open","version","result"]}
1
+ {"version":3,"sources":["../../src/cli/index.ts","../../src/cli/executor.ts","../../src/cli/parser.ts","../../src/cli/list.ts","../../src/cli/export.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { program } from 'commander';\nimport { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { executeFunction } from './executor';\nimport { listFunctions, formatListOutput } from './list';\nimport { exportResource, exportCatalog } from './export';\n\n// Read package.json to get version\nlet version = '1.0.0';\ntry {\n const packageJsonPath = resolve(__dirname, '../../package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n version = packageJson.version;\n} catch {\n // Fall back to default version if package.json not found\n}\n\nprogram\n .name('eventcatalog')\n .description('EventCatalog Command-Line Interface')\n .version(version)\n .option('-d, --dir <path>', 'Path to the EventCatalog directory (default: current directory)', '.');\n\n// List command - show all available functions\nprogram\n .command('list')\n .description('List all available SDK functions')\n .action(() => {\n try {\n const functions = listFunctions('.');\n const output = formatListOutput(functions);\n console.log(output);\n } catch (error) {\n console.error('Error listing functions:', error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n// Export command - export a resource to .ec DSL format\nprogram\n .command('export')\n .description('Export a catalog resource to EventCatalog DSL (.ec) format')\n .option('-a, --all', 'Export the entire catalog (all resource types)', false)\n .option('-r, --resource <type>', 'Resource type (event, command, query, service, domain)')\n .option('--id <id>', 'Resource ID (omit to export all resources of the given type)')\n .option('-v, --version <version>', 'Resource version (defaults to latest)')\n .option('--hydrate', 'Include referenced resources (messages, channels, owners)', false)\n .option('--stdout', 'Print to stdout instead of writing a file', false)\n .option('--playground', 'Open the exported DSL in the playground', false)\n .option('-o, --output <path>', 'Output file path (defaults to <id>.ec or catalog.ec)')\n .action(async (opts) => {\n try {\n const globalOpts = program.opts() as any;\n const dir = globalOpts.dir || '.';\n\n if (opts.all) {\n const result = await exportCatalog({\n hydrate: opts.hydrate,\n stdout: opts.stdout,\n playground: opts.playground,\n output: opts.output,\n dir,\n });\n console.log(result);\n return;\n }\n\n if (!opts.resource) {\n console.error('Either --all or --resource is required');\n process.exit(1);\n }\n\n const result = await exportResource({\n resource: opts.resource,\n id: opts.id,\n version: opts.version,\n hydrate: opts.hydrate,\n stdout: opts.stdout,\n playground: opts.playground,\n output: opts.output,\n dir,\n });\n console.log(result);\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n// Catch-all for any other command - execute as SDK function\nprogram.arguments('<function> [args...]').action(async (functionName: string, args: string[]) => {\n try {\n const options = program.opts() as any;\n const dir = options.dir || '.';\n const result = await executeFunction(dir, functionName, args);\n console.log(JSON.stringify(result, null, 0));\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n});\n\nprogram.parse(process.argv);\n\n// Show help if no command provided\nif (process.argv.length < 3) {\n program.outputHelp();\n}\n","import { existsSync } from 'node:fs';\nimport { parseArguments } from './parser';\nimport createSDK from '@eventcatalog/sdk';\n\n/**\n * Execute a SDK function with the given arguments\n */\nexport async function executeFunction(catalogDir: string, functionName: string, rawArgs: string[]): Promise<any> {\n // Validate catalog directory exists\n if (!existsSync(catalogDir)) {\n throw new Error(`Catalog directory not found: ${catalogDir}`);\n }\n\n // Initialize the SDK\n const sdk = createSDK(catalogDir);\n\n // Validate function exists\n if (!(functionName in sdk)) {\n throw new Error(`Function '${functionName}' not found. Use 'eventcatalog list' to see available functions.`);\n }\n\n const fn = (sdk as any)[functionName];\n\n // Validate it's callable\n if (typeof fn !== 'function') {\n throw new Error(`'${functionName}' is not a callable function.`);\n }\n\n // Parse arguments\n const parsedArgs = parseArguments(rawArgs);\n\n // Execute function\n try {\n return await fn(...parsedArgs);\n } catch (error) {\n throw new Error(`Error executing '${functionName}': ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n","/**\n * Parse command-line arguments into typed values\n * Supports JSON objects/arrays, booleans, numbers, and strings\n */\nexport function parseArguments(rawArgs: string[]): any[] {\n return rawArgs.map((arg, index) => {\n // Try to parse as JSON object or array if it looks like JSON\n if ((arg.startsWith('{') && arg.endsWith('}')) || (arg.startsWith('[') && arg.endsWith(']'))) {\n try {\n return JSON.parse(arg);\n } catch (error) {\n // If it fails to parse as JSON, treat it as a string\n // Only throw error if it looks like valid JSON syntax was intended\n if (arg.includes(':') || arg.includes(',')) {\n throw new Error(`Invalid JSON in argument ${index + 1}: ${error instanceof Error ? error.message : String(error)}`);\n }\n // Otherwise, return as string\n return arg;\n }\n }\n\n // Parse booleans\n if (arg === 'true') return true;\n if (arg === 'false') return false;\n\n // Parse numbers\n if (/^-?\\d+(\\.\\d+)?$/.test(arg)) {\n return Number(arg);\n }\n\n // Return as string\n return arg;\n });\n}\n","import createSDK from '@eventcatalog/sdk';\n\ninterface CategorizedFunctions {\n [category: string]: string[];\n}\n\n/**\n * Get all available SDK functions organized by category\n */\nexport function listFunctions(catalogDir: string = '.'): CategorizedFunctions {\n // Initialize SDK to get all functions\n const sdk = createSDK(catalogDir);\n\n // Get all function names from SDK\n const functionNames = Object.keys(sdk).filter((key) => typeof (sdk as any)[key] === 'function');\n\n // Categorize functions based on naming patterns\n const categories: CategorizedFunctions = {\n Events: [],\n Commands: [],\n Queries: [],\n Channels: [],\n Services: [],\n Domains: [],\n Entities: [],\n DataStores: [],\n DataProducts: [],\n Teams: [],\n Users: [],\n 'Custom Docs': [],\n Messages: [],\n Utilities: [],\n };\n\n functionNames.forEach((name) => {\n if (name.includes('Event')) categories['Events'].push(name);\n else if (name.includes('Command')) categories['Commands'].push(name);\n else if (name.includes('Query')) categories['Queries'].push(name);\n else if (name.includes('Channel')) categories['Channels'].push(name);\n else if (name.includes('Service')) categories['Services'].push(name);\n else if (name.includes('Domain')) categories['Domains'].push(name);\n else if (name.includes('Entity')) categories['Entities'].push(name);\n else if (name.includes('DataStore')) categories['DataStores'].push(name);\n else if (name.includes('DataProduct')) categories['DataProducts'].push(name);\n else if (name.includes('Team')) categories['Teams'].push(name);\n else if (name.includes('User')) categories['Users'].push(name);\n else if (name.includes('CustomDoc')) categories['Custom Docs'].push(name);\n else if (name.includes('Message') || name.includes('Producers') || name.includes('Consumers'))\n categories['Messages'].push(name);\n else categories['Utilities'].push(name);\n });\n\n // Remove empty categories\n Object.keys(categories).forEach((key) => {\n if (categories[key].length === 0) {\n delete categories[key];\n }\n });\n\n return categories;\n}\n\n/**\n * Format and print categorized functions\n */\nexport function formatListOutput(functions: CategorizedFunctions): string {\n let output = 'Available EventCatalog SDK Functions:\\n\\n';\n\n Object.entries(functions).forEach(([category, names]) => {\n output += `${category}:\\n`;\n names.sort().forEach((name) => {\n output += ` - ${name}\\n`;\n });\n output += '\\n';\n });\n\n return output;\n}\n","import { writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport open from 'open';\nimport createSDK from '@eventcatalog/sdk';\n\nconst RESOURCE_TYPES = ['event', 'command', 'query', 'service', 'domain'] as const;\ntype ResourceType = (typeof RESOURCE_TYPES)[number];\n\nconst PLURAL_MAP: Record<string, ResourceType> = {\n events: 'event',\n commands: 'command',\n queries: 'query',\n services: 'service',\n domains: 'domain',\n};\n\ninterface ExportOptions {\n resource: string;\n id?: string;\n version?: string;\n hydrate?: boolean;\n stdout?: boolean;\n playground?: boolean;\n output?: string;\n dir: string;\n}\n\nfunction normalizeResourceType(resource: string): ResourceType {\n const lower = resource.toLowerCase();\n if (PLURAL_MAP[lower]) return PLURAL_MAP[lower];\n return lower as ResourceType;\n}\n\nfunction getResourceFetcher(sdk: ReturnType<typeof createSDK>, type: ResourceType) {\n switch (type) {\n case 'event':\n return sdk.getEvent;\n case 'command':\n return sdk.getCommand;\n case 'query':\n return sdk.getQuery;\n case 'service':\n return sdk.getService;\n case 'domain':\n return sdk.getDomain;\n }\n}\n\nfunction getCollectionFetcher(sdk: ReturnType<typeof createSDK>, type: ResourceType) {\n switch (type) {\n case 'event':\n return sdk.getEvents;\n case 'command':\n return sdk.getCommands;\n case 'query':\n return sdk.getQueries;\n case 'service':\n return sdk.getServices;\n case 'domain':\n return sdk.getDomains;\n }\n}\n\nfunction pluralize(type: ResourceType): string {\n if (type === 'query') return 'queries';\n return `${type}s`;\n}\n\nconst SECTION_ORDER = ['team', 'user', 'channel', 'event', 'command', 'query', 'service', 'domain'] as const;\n\nconst SECTION_LABELS: Record<string, string> = {\n team: 'TEAMS',\n user: 'USERS',\n channel: 'CHANNELS',\n event: 'EVENTS',\n command: 'COMMANDS',\n query: 'QUERIES',\n service: 'SERVICES',\n domain: 'DOMAINS',\n};\n\nfunction groupDSLBlocks(dsl: string): string {\n const blocks = dsl.split(/\\n\\n/).filter((b) => b.trim());\n const buckets: Record<string, string[]> = {};\n\n for (const block of blocks) {\n const firstWord = block.trimStart().split(/\\s/)[0];\n const key = firstWord === 'subdomain' ? 'domain' : firstWord;\n if (!buckets[key]) buckets[key] = [];\n buckets[key].push(block);\n }\n\n const sections: string[] = [];\n for (const type of SECTION_ORDER) {\n if (!buckets[type] || buckets[type].length === 0) continue;\n const label = SECTION_LABELS[type] || type.toUpperCase();\n sections.push(`// ${label}\\n${buckets[type].join('\\n\\n')}`);\n delete buckets[type];\n }\n\n // Any remaining types not in SECTION_ORDER\n for (const [type, items] of Object.entries(buckets)) {\n if (items.length === 0) continue;\n const label = type.toUpperCase();\n sections.push(`// ${label}\\n${items.join('\\n\\n')}`);\n }\n\n return sections.join('\\n\\n');\n}\n\nconst VISUALIZER_TYPES = ['event', 'command', 'query', 'service', 'domain'] as const;\n\nfunction buildVisualizerBlock(dsl: string, name: string, filterTypes: ResourceType | ResourceType[]): string {\n const types = Array.isArray(filterTypes) ? filterTypes : [filterTypes];\n const entries: string[] = [];\n\n for (const line of dsl.split('\\n')) {\n const trimmed = line.trimStart();\n const parts = trimmed.split(/\\s/);\n const keyword = parts[0];\n const id = parts[1];\n if (!types.includes(keyword as ResourceType)) continue;\n if (!id || !trimmed.endsWith('{')) continue;\n entries.push(` ${keyword} ${id}`);\n }\n\n if (entries.length === 0) return '';\n return `\\nvisualizer main {\\n name \"${name}\"\\n${entries.join('\\n')}\\n}`;\n}\n\nexport async function exportCatalog(options: Omit<ExportOptions, 'resource'>): Promise<string> {\n const { hydrate = false, stdout = false, playground = false, output, dir } = options;\n\n const sdk = createSDK(dir);\n const dslParts: string[] = [];\n\n for (const type of RESOURCE_TYPES) {\n const fetcher = getCollectionFetcher(sdk, type);\n const resources = await fetcher({ latestOnly: true });\n if (!resources || resources.length === 0) continue;\n const rawDsl = await sdk.toDSL(resources, { type, hydrate });\n dslParts.push(rawDsl);\n }\n\n if (dslParts.length === 0) {\n throw new Error(`No resources found in catalog at '${dir}'`);\n }\n\n const combined = dslParts.join('\\n\\n');\n const grouped = groupDSLBlocks(combined);\n const vizBlock = buildVisualizerBlock(grouped, 'Full Catalog', [...RESOURCE_TYPES]);\n const dsl = vizBlock ? `${grouped}\\n${vizBlock}` : grouped;\n\n if (stdout) {\n return dsl;\n }\n\n const filename = output || 'catalog.ec';\n const filepath = resolve(filename);\n writeFileSync(filepath, dsl + '\\n', 'utf-8');\n\n const lines = ['', ` Exported full catalog to ${filepath}`];\n\n if (playground) {\n const encoded = Buffer.from(dsl).toString('base64');\n const playgroundUrl = `https://playground.eventcatalog.dev/?code=${encoded}`;\n await open(playgroundUrl);\n lines.push('', ` Opening in playground...`);\n } else {\n lines.push('', ` Tip: Use --playground to open in the playground`);\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\nexport async function exportAll(options: ExportOptions): Promise<string> {\n const { resource, hydrate = false, stdout = false, playground = false, output, dir } = options;\n\n const type = normalizeResourceType(resource);\n if (!RESOURCE_TYPES.includes(type)) {\n throw new Error(`Invalid resource type '${resource}'. Must be one of: ${RESOURCE_TYPES.join(', ')}`);\n }\n\n const plural = pluralize(type);\n const sdk = createSDK(dir);\n\n const fetcher = getCollectionFetcher(sdk, type);\n const allResources = (await fetcher({ latestOnly: true })) || [];\n\n if (allResources.length === 0) {\n throw new Error(`No ${plural} found in catalog at '${dir}'`);\n }\n\n const rawDsl = await sdk.toDSL(allResources, { type, hydrate });\n const grouped = groupDSLBlocks(rawDsl);\n const vizBlock = buildVisualizerBlock(grouped, `All ${plural}`, type);\n const dsl = vizBlock ? `${grouped}\\n${vizBlock}` : grouped;\n\n if (stdout) {\n return dsl;\n }\n\n const filename = output || `${plural}.ec`;\n const filepath = resolve(filename);\n writeFileSync(filepath, dsl + '\\n', 'utf-8');\n\n const lines = ['', ` Exported ${allResources.length} ${plural} to ${filepath}`];\n\n if (playground) {\n const encoded = Buffer.from(dsl).toString('base64');\n const playgroundUrl = `https://playground.eventcatalog.dev/?code=${encoded}`;\n await open(playgroundUrl);\n lines.push('', ` Opening in playground...`);\n } else {\n lines.push('', ` Tip: Use --playground to open in the playground`);\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\nexport async function exportResource(options: ExportOptions): Promise<string> {\n const { resource, id, version, hydrate = false, stdout = false, playground = false, output, dir } = options;\n\n if (!id) {\n return exportAll(options);\n }\n\n const type = normalizeResourceType(resource);\n if (!RESOURCE_TYPES.includes(type)) {\n throw new Error(`Invalid resource type '${resource}'. Must be one of: ${RESOURCE_TYPES.join(', ')}`);\n }\n\n const sdk = createSDK(dir);\n\n const fetcher = getResourceFetcher(sdk, type);\n const data = await fetcher(id, version);\n\n if (!data) {\n const versionStr = version ? `@${version}` : ' (latest)';\n throw new Error(`${resource} '${id}${versionStr}' not found in catalog at '${dir}'`);\n }\n\n const rawDsl = await sdk.toDSL(data, { type, hydrate });\n const grouped = hydrate ? groupDSLBlocks(rawDsl) : rawDsl;\n const vizBlock = buildVisualizerBlock(grouped, `View of ${id}`, type);\n const dsl = vizBlock ? `${grouped}\\n${vizBlock}` : grouped;\n\n if (stdout) {\n return dsl;\n }\n\n const filename = output || `${id}.ec`;\n const filepath = resolve(filename);\n writeFileSync(filepath, dsl + '\\n', 'utf-8');\n\n const lines = ['', ` Exported ${type} '${id}' to ${filepath}`];\n\n if (playground) {\n const encoded = Buffer.from(dsl).toString('base64');\n const playgroundUrl = `https://playground.eventcatalog.dev/?code=${encoded}`;\n await open(playgroundUrl);\n lines.push('', ` Opening in playground...`);\n } else {\n lines.push('', ` Tip: Use --playground to open in the playground`);\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n"],"mappings":"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","names":["import_node_fs","import_node_path","createSDK","import_sdk","createSDK","import_node_fs","import_sdk","createSDK","open","version","result"]}
@@ -251,7 +251,7 @@ ${vizBlock}` : grouped;
251
251
  const lines = ["", ` Exported full catalog to ${filepath}`];
252
252
  if (playground) {
253
253
  const encoded = Buffer.from(dsl).toString("base64");
254
- const playgroundUrl = `http://localhost:5173/?code=${encoded}`;
254
+ const playgroundUrl = `https://playground.eventcatalog.dev/?code=${encoded}`;
255
255
  await open(playgroundUrl);
256
256
  lines.push("", ` Opening in playground...`);
257
257
  } else {
@@ -269,8 +269,8 @@ async function exportAll(options) {
269
269
  const plural = pluralize(type);
270
270
  const sdk = createSDK3(dir);
271
271
  const fetcher = getCollectionFetcher(sdk, type);
272
- const allResources = await fetcher({ latestOnly: true });
273
- if (!allResources || allResources.length === 0) {
272
+ const allResources = await fetcher({ latestOnly: true }) || [];
273
+ if (allResources.length === 0) {
274
274
  throw new Error(`No ${plural} found in catalog at '${dir}'`);
275
275
  }
276
276
  const rawDsl = await sdk.toDSL(allResources, { type, hydrate });
@@ -287,7 +287,7 @@ ${vizBlock}` : grouped;
287
287
  const lines = ["", ` Exported ${allResources.length} ${plural} to ${filepath}`];
288
288
  if (playground) {
289
289
  const encoded = Buffer.from(dsl).toString("base64");
290
- const playgroundUrl = `http://localhost:5173/?code=${encoded}`;
290
+ const playgroundUrl = `https://playground.eventcatalog.dev/?code=${encoded}`;
291
291
  await open(playgroundUrl);
292
292
  lines.push("", ` Opening in playground...`);
293
293
  } else {
@@ -326,7 +326,7 @@ ${vizBlock}` : grouped;
326
326
  const lines = ["", ` Exported ${type} '${id}' to ${filepath}`];
327
327
  if (playground) {
328
328
  const encoded = Buffer.from(dsl).toString("base64");
329
- const playgroundUrl = `http://localhost:5173/?code=${encoded}`;
329
+ const playgroundUrl = `https://playground.eventcatalog.dev/?code=${encoded}`;
330
330
  await open(playgroundUrl);
331
331
  lines.push("", ` Opening in playground...`);
332
332
  } else {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../node_modules/.pnpm/tsup@8.5.0_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3_yaml@2.8.1/node_modules/tsup/assets/esm_shims.js","../../src/cli/index.ts","../../src/cli/executor.ts","../../src/cli/parser.ts","../../src/cli/list.ts","../../src/cli/export.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","#!/usr/bin/env node\n\nimport { program } from 'commander';\nimport { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { executeFunction } from './executor';\nimport { listFunctions, formatListOutput } from './list';\nimport { exportResource, exportCatalog } from './export';\n\n// Read package.json to get version\nlet version = '1.0.0';\ntry {\n const packageJsonPath = resolve(__dirname, '../../package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n version = packageJson.version;\n} catch {\n // Fall back to default version if package.json not found\n}\n\nprogram\n .name('eventcatalog')\n .description('EventCatalog Command-Line Interface')\n .version(version)\n .option('-d, --dir <path>', 'Path to the EventCatalog directory (default: current directory)', '.');\n\n// List command - show all available functions\nprogram\n .command('list')\n .description('List all available SDK functions')\n .action(() => {\n try {\n const functions = listFunctions('.');\n const output = formatListOutput(functions);\n console.log(output);\n } catch (error) {\n console.error('Error listing functions:', error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n// Export command - export a resource to .ec DSL format\nprogram\n .command('export')\n .description('Export a catalog resource to EventCatalog DSL (.ec) format')\n .option('-a, --all', 'Export the entire catalog (all resource types)', false)\n .option('-r, --resource <type>', 'Resource type (event, command, query, service, domain)')\n .option('--id <id>', 'Resource ID (omit to export all resources of the given type)')\n .option('-v, --version <version>', 'Resource version (defaults to latest)')\n .option('--hydrate', 'Include referenced resources (messages, channels, owners)', false)\n .option('--stdout', 'Print to stdout instead of writing a file', false)\n .option('--playground', 'Open the exported DSL in the playground', false)\n .option('-o, --output <path>', 'Output file path (defaults to <id>.ec or catalog.ec)')\n .action(async (opts) => {\n try {\n const globalOpts = program.opts() as any;\n const dir = globalOpts.dir || '.';\n\n if (opts.all) {\n const result = await exportCatalog({\n hydrate: opts.hydrate,\n stdout: opts.stdout,\n playground: opts.playground,\n output: opts.output,\n dir,\n });\n console.log(result);\n return;\n }\n\n if (!opts.resource) {\n console.error('Either --all or --resource is required');\n process.exit(1);\n }\n\n const result = await exportResource({\n resource: opts.resource,\n id: opts.id,\n version: opts.version,\n hydrate: opts.hydrate,\n stdout: opts.stdout,\n playground: opts.playground,\n output: opts.output,\n dir,\n });\n console.log(result);\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n// Catch-all for any other command - execute as SDK function\nprogram.arguments('<function> [args...]').action(async (functionName: string, args: string[]) => {\n try {\n const options = program.opts() as any;\n const dir = options.dir || '.';\n const result = await executeFunction(dir, functionName, args);\n console.log(JSON.stringify(result, null, 0));\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n});\n\nprogram.parse(process.argv);\n\n// Show help if no command provided\nif (process.argv.length < 3) {\n program.outputHelp();\n}\n","import { existsSync } from 'node:fs';\nimport { parseArguments } from './parser';\nimport createSDK from '@eventcatalog/sdk';\n\n/**\n * Execute a SDK function with the given arguments\n */\nexport async function executeFunction(catalogDir: string, functionName: string, rawArgs: string[]): Promise<any> {\n // Validate catalog directory exists\n if (!existsSync(catalogDir)) {\n throw new Error(`Catalog directory not found: ${catalogDir}`);\n }\n\n // Initialize the SDK\n const sdk = createSDK(catalogDir);\n\n // Validate function exists\n if (!(functionName in sdk)) {\n throw new Error(`Function '${functionName}' not found. Use 'eventcatalog list' to see available functions.`);\n }\n\n const fn = (sdk as any)[functionName];\n\n // Validate it's callable\n if (typeof fn !== 'function') {\n throw new Error(`'${functionName}' is not a callable function.`);\n }\n\n // Parse arguments\n const parsedArgs = parseArguments(rawArgs);\n\n // Execute function\n try {\n return await fn(...parsedArgs);\n } catch (error) {\n throw new Error(`Error executing '${functionName}': ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n","/**\n * Parse command-line arguments into typed values\n * Supports JSON objects/arrays, booleans, numbers, and strings\n */\nexport function parseArguments(rawArgs: string[]): any[] {\n return rawArgs.map((arg, index) => {\n // Try to parse as JSON object or array if it looks like JSON\n if ((arg.startsWith('{') && arg.endsWith('}')) || (arg.startsWith('[') && arg.endsWith(']'))) {\n try {\n return JSON.parse(arg);\n } catch (error) {\n // If it fails to parse as JSON, treat it as a string\n // Only throw error if it looks like valid JSON syntax was intended\n if (arg.includes(':') || arg.includes(',')) {\n throw new Error(`Invalid JSON in argument ${index + 1}: ${error instanceof Error ? error.message : String(error)}`);\n }\n // Otherwise, return as string\n return arg;\n }\n }\n\n // Parse booleans\n if (arg === 'true') return true;\n if (arg === 'false') return false;\n\n // Parse numbers\n if (/^-?\\d+(\\.\\d+)?$/.test(arg)) {\n return Number(arg);\n }\n\n // Return as string\n return arg;\n });\n}\n","import createSDK from '@eventcatalog/sdk';\n\ninterface CategorizedFunctions {\n [category: string]: string[];\n}\n\n/**\n * Get all available SDK functions organized by category\n */\nexport function listFunctions(catalogDir: string = '.'): CategorizedFunctions {\n // Initialize SDK to get all functions\n const sdk = createSDK(catalogDir);\n\n // Get all function names from SDK\n const functionNames = Object.keys(sdk).filter((key) => typeof (sdk as any)[key] === 'function');\n\n // Categorize functions based on naming patterns\n const categories: CategorizedFunctions = {\n Events: [],\n Commands: [],\n Queries: [],\n Channels: [],\n Services: [],\n Domains: [],\n Entities: [],\n DataStores: [],\n DataProducts: [],\n Teams: [],\n Users: [],\n 'Custom Docs': [],\n Messages: [],\n Utilities: [],\n };\n\n functionNames.forEach((name) => {\n if (name.includes('Event')) categories['Events'].push(name);\n else if (name.includes('Command')) categories['Commands'].push(name);\n else if (name.includes('Query')) categories['Queries'].push(name);\n else if (name.includes('Channel')) categories['Channels'].push(name);\n else if (name.includes('Service')) categories['Services'].push(name);\n else if (name.includes('Domain')) categories['Domains'].push(name);\n else if (name.includes('Entity')) categories['Entities'].push(name);\n else if (name.includes('DataStore')) categories['DataStores'].push(name);\n else if (name.includes('DataProduct')) categories['DataProducts'].push(name);\n else if (name.includes('Team')) categories['Teams'].push(name);\n else if (name.includes('User')) categories['Users'].push(name);\n else if (name.includes('CustomDoc')) categories['Custom Docs'].push(name);\n else if (name.includes('Message') || name.includes('Producers') || name.includes('Consumers'))\n categories['Messages'].push(name);\n else categories['Utilities'].push(name);\n });\n\n // Remove empty categories\n Object.keys(categories).forEach((key) => {\n if (categories[key].length === 0) {\n delete categories[key];\n }\n });\n\n return categories;\n}\n\n/**\n * Format and print categorized functions\n */\nexport function formatListOutput(functions: CategorizedFunctions): string {\n let output = 'Available EventCatalog SDK Functions:\\n\\n';\n\n Object.entries(functions).forEach(([category, names]) => {\n output += `${category}:\\n`;\n names.sort().forEach((name) => {\n output += ` - ${name}\\n`;\n });\n output += '\\n';\n });\n\n return output;\n}\n","import { writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport open from 'open';\nimport createSDK from '@eventcatalog/sdk';\n\nconst RESOURCE_TYPES = ['event', 'command', 'query', 'service', 'domain'] as const;\ntype ResourceType = (typeof RESOURCE_TYPES)[number];\n\nconst PLURAL_MAP: Record<string, ResourceType> = {\n events: 'event',\n commands: 'command',\n queries: 'query',\n services: 'service',\n domains: 'domain',\n};\n\ninterface ExportOptions {\n resource: string;\n id?: string;\n version?: string;\n hydrate?: boolean;\n stdout?: boolean;\n playground?: boolean;\n output?: string;\n dir: string;\n}\n\nfunction normalizeResourceType(resource: string): ResourceType {\n const lower = resource.toLowerCase();\n if (PLURAL_MAP[lower]) return PLURAL_MAP[lower];\n return lower as ResourceType;\n}\n\nfunction getResourceFetcher(sdk: ReturnType<typeof createSDK>, type: ResourceType) {\n switch (type) {\n case 'event':\n return sdk.getEvent;\n case 'command':\n return sdk.getCommand;\n case 'query':\n return sdk.getQuery;\n case 'service':\n return sdk.getService;\n case 'domain':\n return sdk.getDomain;\n }\n}\n\nfunction getCollectionFetcher(sdk: ReturnType<typeof createSDK>, type: ResourceType) {\n switch (type) {\n case 'event':\n return sdk.getEvents;\n case 'command':\n return sdk.getCommands;\n case 'query':\n return sdk.getQueries;\n case 'service':\n return sdk.getServices;\n case 'domain':\n return sdk.getDomains;\n }\n}\n\nfunction pluralize(type: ResourceType): string {\n if (type === 'query') return 'queries';\n return `${type}s`;\n}\n\nconst SECTION_ORDER = ['team', 'user', 'channel', 'event', 'command', 'query', 'service', 'domain'] as const;\n\nconst SECTION_LABELS: Record<string, string> = {\n team: 'TEAMS',\n user: 'USERS',\n channel: 'CHANNELS',\n event: 'EVENTS',\n command: 'COMMANDS',\n query: 'QUERIES',\n service: 'SERVICES',\n domain: 'DOMAINS',\n};\n\nfunction groupDSLBlocks(dsl: string): string {\n const blocks = dsl.split(/\\n\\n/).filter((b) => b.trim());\n const buckets: Record<string, string[]> = {};\n\n for (const block of blocks) {\n const firstWord = block.trimStart().split(/\\s/)[0];\n const key = firstWord === 'subdomain' ? 'domain' : firstWord;\n if (!buckets[key]) buckets[key] = [];\n buckets[key].push(block);\n }\n\n const sections: string[] = [];\n for (const type of SECTION_ORDER) {\n if (!buckets[type] || buckets[type].length === 0) continue;\n const label = SECTION_LABELS[type] || type.toUpperCase();\n sections.push(`// ${label}\\n${buckets[type].join('\\n\\n')}`);\n delete buckets[type];\n }\n\n // Any remaining types not in SECTION_ORDER\n for (const [type, items] of Object.entries(buckets)) {\n if (items.length === 0) continue;\n const label = type.toUpperCase();\n sections.push(`// ${label}\\n${items.join('\\n\\n')}`);\n }\n\n return sections.join('\\n\\n');\n}\n\nconst VISUALIZER_TYPES = ['event', 'command', 'query', 'service', 'domain'] as const;\n\nfunction buildVisualizerBlock(dsl: string, name: string, filterTypes: ResourceType | ResourceType[]): string {\n const types = Array.isArray(filterTypes) ? filterTypes : [filterTypes];\n const entries: string[] = [];\n\n for (const line of dsl.split('\\n')) {\n const trimmed = line.trimStart();\n const parts = trimmed.split(/\\s/);\n const keyword = parts[0];\n const id = parts[1];\n if (!types.includes(keyword as ResourceType)) continue;\n if (!id || !trimmed.endsWith('{')) continue;\n entries.push(` ${keyword} ${id}`);\n }\n\n if (entries.length === 0) return '';\n return `\\nvisualizer main {\\n name \"${name}\"\\n${entries.join('\\n')}\\n}`;\n}\n\nexport async function exportCatalog(options: Omit<ExportOptions, 'resource'>): Promise<string> {\n const { hydrate = false, stdout = false, playground = false, output, dir } = options;\n\n const sdk = createSDK(dir);\n const dslParts: string[] = [];\n\n for (const type of RESOURCE_TYPES) {\n const fetcher = getCollectionFetcher(sdk, type);\n const resources = await fetcher({ latestOnly: true });\n if (!resources || resources.length === 0) continue;\n const rawDsl = await sdk.toDSL(resources, { type, hydrate });\n dslParts.push(rawDsl);\n }\n\n if (dslParts.length === 0) {\n throw new Error(`No resources found in catalog at '${dir}'`);\n }\n\n const combined = dslParts.join('\\n\\n');\n const grouped = groupDSLBlocks(combined);\n const vizBlock = buildVisualizerBlock(grouped, 'Full Catalog', [...RESOURCE_TYPES]);\n const dsl = vizBlock ? `${grouped}\\n${vizBlock}` : grouped;\n\n if (stdout) {\n return dsl;\n }\n\n const filename = output || 'catalog.ec';\n const filepath = resolve(filename);\n writeFileSync(filepath, dsl + '\\n', 'utf-8');\n\n const lines = ['', ` Exported full catalog to ${filepath}`];\n\n if (playground) {\n const encoded = Buffer.from(dsl).toString('base64');\n const playgroundUrl = `http://localhost:5173/?code=${encoded}`;\n await open(playgroundUrl);\n lines.push('', ` Opening in playground...`);\n } else {\n lines.push('', ` Tip: Use --playground to open in the playground`);\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\nexport async function exportAll(options: ExportOptions): Promise<string> {\n const { resource, hydrate = false, stdout = false, playground = false, output, dir } = options;\n\n const type = normalizeResourceType(resource);\n if (!RESOURCE_TYPES.includes(type)) {\n throw new Error(`Invalid resource type '${resource}'. Must be one of: ${RESOURCE_TYPES.join(', ')}`);\n }\n\n const plural = pluralize(type);\n const sdk = createSDK(dir);\n const fetcher = getCollectionFetcher(sdk, type);\n const allResources = await fetcher({ latestOnly: true });\n\n if (!allResources || allResources.length === 0) {\n throw new Error(`No ${plural} found in catalog at '${dir}'`);\n }\n\n const rawDsl = await sdk.toDSL(allResources, { type, hydrate });\n const grouped = groupDSLBlocks(rawDsl);\n const vizBlock = buildVisualizerBlock(grouped, `All ${plural}`, type);\n const dsl = vizBlock ? `${grouped}\\n${vizBlock}` : grouped;\n\n if (stdout) {\n return dsl;\n }\n\n const filename = output || `${plural}.ec`;\n const filepath = resolve(filename);\n writeFileSync(filepath, dsl + '\\n', 'utf-8');\n\n const lines = ['', ` Exported ${allResources.length} ${plural} to ${filepath}`];\n\n if (playground) {\n const encoded = Buffer.from(dsl).toString('base64');\n const playgroundUrl = `http://localhost:5173/?code=${encoded}`;\n await open(playgroundUrl);\n lines.push('', ` Opening in playground...`);\n } else {\n lines.push('', ` Tip: Use --playground to open in the playground`);\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\nexport async function exportResource(options: ExportOptions): Promise<string> {\n const { resource, id, version, hydrate = false, stdout = false, playground = false, output, dir } = options;\n\n if (!id) {\n return exportAll(options);\n }\n\n const type = normalizeResourceType(resource);\n if (!RESOURCE_TYPES.includes(type)) {\n throw new Error(`Invalid resource type '${resource}'. Must be one of: ${RESOURCE_TYPES.join(', ')}`);\n }\n\n const sdk = createSDK(dir);\n const fetcher = getResourceFetcher(sdk, type);\n const data = await fetcher(id, version);\n\n if (!data) {\n const versionStr = version ? `@${version}` : ' (latest)';\n throw new Error(`${resource} '${id}${versionStr}' not found in catalog at '${dir}'`);\n }\n\n const rawDsl = await sdk.toDSL(data, { type, hydrate });\n const grouped = hydrate ? groupDSLBlocks(rawDsl) : rawDsl;\n const vizBlock = buildVisualizerBlock(grouped, `View of ${id}`, type);\n const dsl = vizBlock ? `${grouped}\\n${vizBlock}` : grouped;\n\n if (stdout) {\n return dsl;\n }\n\n const filename = output || `${id}.ec`;\n const filepath = resolve(filename);\n writeFileSync(filepath, dsl + '\\n', 'utf-8');\n\n const lines = ['', ` Exported ${type} '${id}' to ${filepath}`];\n\n if (playground) {\n const encoded = Buffer.from(dsl).toString('base64');\n const playgroundUrl = `http://localhost:5173/?code=${encoded}`;\n await open(playgroundUrl);\n lines.push('', ` Opening in playground...`);\n } else {\n lines.push('', ` Tip: Use --playground to open in the playground`);\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n"],"mappings":"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","names":["resolve","createSDK","createSDK","createSDK","version","resolve","result"]}
1
+ {"version":3,"sources":["../../../../node_modules/.pnpm/tsup@8.5.0_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3_yaml@2.8.1/node_modules/tsup/assets/esm_shims.js","../../src/cli/index.ts","../../src/cli/executor.ts","../../src/cli/parser.ts","../../src/cli/list.ts","../../src/cli/export.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","#!/usr/bin/env node\n\nimport { program } from 'commander';\nimport { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { executeFunction } from './executor';\nimport { listFunctions, formatListOutput } from './list';\nimport { exportResource, exportCatalog } from './export';\n\n// Read package.json to get version\nlet version = '1.0.0';\ntry {\n const packageJsonPath = resolve(__dirname, '../../package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n version = packageJson.version;\n} catch {\n // Fall back to default version if package.json not found\n}\n\nprogram\n .name('eventcatalog')\n .description('EventCatalog Command-Line Interface')\n .version(version)\n .option('-d, --dir <path>', 'Path to the EventCatalog directory (default: current directory)', '.');\n\n// List command - show all available functions\nprogram\n .command('list')\n .description('List all available SDK functions')\n .action(() => {\n try {\n const functions = listFunctions('.');\n const output = formatListOutput(functions);\n console.log(output);\n } catch (error) {\n console.error('Error listing functions:', error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n// Export command - export a resource to .ec DSL format\nprogram\n .command('export')\n .description('Export a catalog resource to EventCatalog DSL (.ec) format')\n .option('-a, --all', 'Export the entire catalog (all resource types)', false)\n .option('-r, --resource <type>', 'Resource type (event, command, query, service, domain)')\n .option('--id <id>', 'Resource ID (omit to export all resources of the given type)')\n .option('-v, --version <version>', 'Resource version (defaults to latest)')\n .option('--hydrate', 'Include referenced resources (messages, channels, owners)', false)\n .option('--stdout', 'Print to stdout instead of writing a file', false)\n .option('--playground', 'Open the exported DSL in the playground', false)\n .option('-o, --output <path>', 'Output file path (defaults to <id>.ec or catalog.ec)')\n .action(async (opts) => {\n try {\n const globalOpts = program.opts() as any;\n const dir = globalOpts.dir || '.';\n\n if (opts.all) {\n const result = await exportCatalog({\n hydrate: opts.hydrate,\n stdout: opts.stdout,\n playground: opts.playground,\n output: opts.output,\n dir,\n });\n console.log(result);\n return;\n }\n\n if (!opts.resource) {\n console.error('Either --all or --resource is required');\n process.exit(1);\n }\n\n const result = await exportResource({\n resource: opts.resource,\n id: opts.id,\n version: opts.version,\n hydrate: opts.hydrate,\n stdout: opts.stdout,\n playground: opts.playground,\n output: opts.output,\n dir,\n });\n console.log(result);\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n// Catch-all for any other command - execute as SDK function\nprogram.arguments('<function> [args...]').action(async (functionName: string, args: string[]) => {\n try {\n const options = program.opts() as any;\n const dir = options.dir || '.';\n const result = await executeFunction(dir, functionName, args);\n console.log(JSON.stringify(result, null, 0));\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n});\n\nprogram.parse(process.argv);\n\n// Show help if no command provided\nif (process.argv.length < 3) {\n program.outputHelp();\n}\n","import { existsSync } from 'node:fs';\nimport { parseArguments } from './parser';\nimport createSDK from '@eventcatalog/sdk';\n\n/**\n * Execute a SDK function with the given arguments\n */\nexport async function executeFunction(catalogDir: string, functionName: string, rawArgs: string[]): Promise<any> {\n // Validate catalog directory exists\n if (!existsSync(catalogDir)) {\n throw new Error(`Catalog directory not found: ${catalogDir}`);\n }\n\n // Initialize the SDK\n const sdk = createSDK(catalogDir);\n\n // Validate function exists\n if (!(functionName in sdk)) {\n throw new Error(`Function '${functionName}' not found. Use 'eventcatalog list' to see available functions.`);\n }\n\n const fn = (sdk as any)[functionName];\n\n // Validate it's callable\n if (typeof fn !== 'function') {\n throw new Error(`'${functionName}' is not a callable function.`);\n }\n\n // Parse arguments\n const parsedArgs = parseArguments(rawArgs);\n\n // Execute function\n try {\n return await fn(...parsedArgs);\n } catch (error) {\n throw new Error(`Error executing '${functionName}': ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n","/**\n * Parse command-line arguments into typed values\n * Supports JSON objects/arrays, booleans, numbers, and strings\n */\nexport function parseArguments(rawArgs: string[]): any[] {\n return rawArgs.map((arg, index) => {\n // Try to parse as JSON object or array if it looks like JSON\n if ((arg.startsWith('{') && arg.endsWith('}')) || (arg.startsWith('[') && arg.endsWith(']'))) {\n try {\n return JSON.parse(arg);\n } catch (error) {\n // If it fails to parse as JSON, treat it as a string\n // Only throw error if it looks like valid JSON syntax was intended\n if (arg.includes(':') || arg.includes(',')) {\n throw new Error(`Invalid JSON in argument ${index + 1}: ${error instanceof Error ? error.message : String(error)}`);\n }\n // Otherwise, return as string\n return arg;\n }\n }\n\n // Parse booleans\n if (arg === 'true') return true;\n if (arg === 'false') return false;\n\n // Parse numbers\n if (/^-?\\d+(\\.\\d+)?$/.test(arg)) {\n return Number(arg);\n }\n\n // Return as string\n return arg;\n });\n}\n","import createSDK from '@eventcatalog/sdk';\n\ninterface CategorizedFunctions {\n [category: string]: string[];\n}\n\n/**\n * Get all available SDK functions organized by category\n */\nexport function listFunctions(catalogDir: string = '.'): CategorizedFunctions {\n // Initialize SDK to get all functions\n const sdk = createSDK(catalogDir);\n\n // Get all function names from SDK\n const functionNames = Object.keys(sdk).filter((key) => typeof (sdk as any)[key] === 'function');\n\n // Categorize functions based on naming patterns\n const categories: CategorizedFunctions = {\n Events: [],\n Commands: [],\n Queries: [],\n Channels: [],\n Services: [],\n Domains: [],\n Entities: [],\n DataStores: [],\n DataProducts: [],\n Teams: [],\n Users: [],\n 'Custom Docs': [],\n Messages: [],\n Utilities: [],\n };\n\n functionNames.forEach((name) => {\n if (name.includes('Event')) categories['Events'].push(name);\n else if (name.includes('Command')) categories['Commands'].push(name);\n else if (name.includes('Query')) categories['Queries'].push(name);\n else if (name.includes('Channel')) categories['Channels'].push(name);\n else if (name.includes('Service')) categories['Services'].push(name);\n else if (name.includes('Domain')) categories['Domains'].push(name);\n else if (name.includes('Entity')) categories['Entities'].push(name);\n else if (name.includes('DataStore')) categories['DataStores'].push(name);\n else if (name.includes('DataProduct')) categories['DataProducts'].push(name);\n else if (name.includes('Team')) categories['Teams'].push(name);\n else if (name.includes('User')) categories['Users'].push(name);\n else if (name.includes('CustomDoc')) categories['Custom Docs'].push(name);\n else if (name.includes('Message') || name.includes('Producers') || name.includes('Consumers'))\n categories['Messages'].push(name);\n else categories['Utilities'].push(name);\n });\n\n // Remove empty categories\n Object.keys(categories).forEach((key) => {\n if (categories[key].length === 0) {\n delete categories[key];\n }\n });\n\n return categories;\n}\n\n/**\n * Format and print categorized functions\n */\nexport function formatListOutput(functions: CategorizedFunctions): string {\n let output = 'Available EventCatalog SDK Functions:\\n\\n';\n\n Object.entries(functions).forEach(([category, names]) => {\n output += `${category}:\\n`;\n names.sort().forEach((name) => {\n output += ` - ${name}\\n`;\n });\n output += '\\n';\n });\n\n return output;\n}\n","import { writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport open from 'open';\nimport createSDK from '@eventcatalog/sdk';\n\nconst RESOURCE_TYPES = ['event', 'command', 'query', 'service', 'domain'] as const;\ntype ResourceType = (typeof RESOURCE_TYPES)[number];\n\nconst PLURAL_MAP: Record<string, ResourceType> = {\n events: 'event',\n commands: 'command',\n queries: 'query',\n services: 'service',\n domains: 'domain',\n};\n\ninterface ExportOptions {\n resource: string;\n id?: string;\n version?: string;\n hydrate?: boolean;\n stdout?: boolean;\n playground?: boolean;\n output?: string;\n dir: string;\n}\n\nfunction normalizeResourceType(resource: string): ResourceType {\n const lower = resource.toLowerCase();\n if (PLURAL_MAP[lower]) return PLURAL_MAP[lower];\n return lower as ResourceType;\n}\n\nfunction getResourceFetcher(sdk: ReturnType<typeof createSDK>, type: ResourceType) {\n switch (type) {\n case 'event':\n return sdk.getEvent;\n case 'command':\n return sdk.getCommand;\n case 'query':\n return sdk.getQuery;\n case 'service':\n return sdk.getService;\n case 'domain':\n return sdk.getDomain;\n }\n}\n\nfunction getCollectionFetcher(sdk: ReturnType<typeof createSDK>, type: ResourceType) {\n switch (type) {\n case 'event':\n return sdk.getEvents;\n case 'command':\n return sdk.getCommands;\n case 'query':\n return sdk.getQueries;\n case 'service':\n return sdk.getServices;\n case 'domain':\n return sdk.getDomains;\n }\n}\n\nfunction pluralize(type: ResourceType): string {\n if (type === 'query') return 'queries';\n return `${type}s`;\n}\n\nconst SECTION_ORDER = ['team', 'user', 'channel', 'event', 'command', 'query', 'service', 'domain'] as const;\n\nconst SECTION_LABELS: Record<string, string> = {\n team: 'TEAMS',\n user: 'USERS',\n channel: 'CHANNELS',\n event: 'EVENTS',\n command: 'COMMANDS',\n query: 'QUERIES',\n service: 'SERVICES',\n domain: 'DOMAINS',\n};\n\nfunction groupDSLBlocks(dsl: string): string {\n const blocks = dsl.split(/\\n\\n/).filter((b) => b.trim());\n const buckets: Record<string, string[]> = {};\n\n for (const block of blocks) {\n const firstWord = block.trimStart().split(/\\s/)[0];\n const key = firstWord === 'subdomain' ? 'domain' : firstWord;\n if (!buckets[key]) buckets[key] = [];\n buckets[key].push(block);\n }\n\n const sections: string[] = [];\n for (const type of SECTION_ORDER) {\n if (!buckets[type] || buckets[type].length === 0) continue;\n const label = SECTION_LABELS[type] || type.toUpperCase();\n sections.push(`// ${label}\\n${buckets[type].join('\\n\\n')}`);\n delete buckets[type];\n }\n\n // Any remaining types not in SECTION_ORDER\n for (const [type, items] of Object.entries(buckets)) {\n if (items.length === 0) continue;\n const label = type.toUpperCase();\n sections.push(`// ${label}\\n${items.join('\\n\\n')}`);\n }\n\n return sections.join('\\n\\n');\n}\n\nconst VISUALIZER_TYPES = ['event', 'command', 'query', 'service', 'domain'] as const;\n\nfunction buildVisualizerBlock(dsl: string, name: string, filterTypes: ResourceType | ResourceType[]): string {\n const types = Array.isArray(filterTypes) ? filterTypes : [filterTypes];\n const entries: string[] = [];\n\n for (const line of dsl.split('\\n')) {\n const trimmed = line.trimStart();\n const parts = trimmed.split(/\\s/);\n const keyword = parts[0];\n const id = parts[1];\n if (!types.includes(keyword as ResourceType)) continue;\n if (!id || !trimmed.endsWith('{')) continue;\n entries.push(` ${keyword} ${id}`);\n }\n\n if (entries.length === 0) return '';\n return `\\nvisualizer main {\\n name \"${name}\"\\n${entries.join('\\n')}\\n}`;\n}\n\nexport async function exportCatalog(options: Omit<ExportOptions, 'resource'>): Promise<string> {\n const { hydrate = false, stdout = false, playground = false, output, dir } = options;\n\n const sdk = createSDK(dir);\n const dslParts: string[] = [];\n\n for (const type of RESOURCE_TYPES) {\n const fetcher = getCollectionFetcher(sdk, type);\n const resources = await fetcher({ latestOnly: true });\n if (!resources || resources.length === 0) continue;\n const rawDsl = await sdk.toDSL(resources, { type, hydrate });\n dslParts.push(rawDsl);\n }\n\n if (dslParts.length === 0) {\n throw new Error(`No resources found in catalog at '${dir}'`);\n }\n\n const combined = dslParts.join('\\n\\n');\n const grouped = groupDSLBlocks(combined);\n const vizBlock = buildVisualizerBlock(grouped, 'Full Catalog', [...RESOURCE_TYPES]);\n const dsl = vizBlock ? `${grouped}\\n${vizBlock}` : grouped;\n\n if (stdout) {\n return dsl;\n }\n\n const filename = output || 'catalog.ec';\n const filepath = resolve(filename);\n writeFileSync(filepath, dsl + '\\n', 'utf-8');\n\n const lines = ['', ` Exported full catalog to ${filepath}`];\n\n if (playground) {\n const encoded = Buffer.from(dsl).toString('base64');\n const playgroundUrl = `https://playground.eventcatalog.dev/?code=${encoded}`;\n await open(playgroundUrl);\n lines.push('', ` Opening in playground...`);\n } else {\n lines.push('', ` Tip: Use --playground to open in the playground`);\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\nexport async function exportAll(options: ExportOptions): Promise<string> {\n const { resource, hydrate = false, stdout = false, playground = false, output, dir } = options;\n\n const type = normalizeResourceType(resource);\n if (!RESOURCE_TYPES.includes(type)) {\n throw new Error(`Invalid resource type '${resource}'. Must be one of: ${RESOURCE_TYPES.join(', ')}`);\n }\n\n const plural = pluralize(type);\n const sdk = createSDK(dir);\n\n const fetcher = getCollectionFetcher(sdk, type);\n const allResources = (await fetcher({ latestOnly: true })) || [];\n\n if (allResources.length === 0) {\n throw new Error(`No ${plural} found in catalog at '${dir}'`);\n }\n\n const rawDsl = await sdk.toDSL(allResources, { type, hydrate });\n const grouped = groupDSLBlocks(rawDsl);\n const vizBlock = buildVisualizerBlock(grouped, `All ${plural}`, type);\n const dsl = vizBlock ? `${grouped}\\n${vizBlock}` : grouped;\n\n if (stdout) {\n return dsl;\n }\n\n const filename = output || `${plural}.ec`;\n const filepath = resolve(filename);\n writeFileSync(filepath, dsl + '\\n', 'utf-8');\n\n const lines = ['', ` Exported ${allResources.length} ${plural} to ${filepath}`];\n\n if (playground) {\n const encoded = Buffer.from(dsl).toString('base64');\n const playgroundUrl = `https://playground.eventcatalog.dev/?code=${encoded}`;\n await open(playgroundUrl);\n lines.push('', ` Opening in playground...`);\n } else {\n lines.push('', ` Tip: Use --playground to open in the playground`);\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\nexport async function exportResource(options: ExportOptions): Promise<string> {\n const { resource, id, version, hydrate = false, stdout = false, playground = false, output, dir } = options;\n\n if (!id) {\n return exportAll(options);\n }\n\n const type = normalizeResourceType(resource);\n if (!RESOURCE_TYPES.includes(type)) {\n throw new Error(`Invalid resource type '${resource}'. Must be one of: ${RESOURCE_TYPES.join(', ')}`);\n }\n\n const sdk = createSDK(dir);\n\n const fetcher = getResourceFetcher(sdk, type);\n const data = await fetcher(id, version);\n\n if (!data) {\n const versionStr = version ? `@${version}` : ' (latest)';\n throw new Error(`${resource} '${id}${versionStr}' not found in catalog at '${dir}'`);\n }\n\n const rawDsl = await sdk.toDSL(data, { type, hydrate });\n const grouped = hydrate ? groupDSLBlocks(rawDsl) : rawDsl;\n const vizBlock = buildVisualizerBlock(grouped, `View of ${id}`, type);\n const dsl = vizBlock ? `${grouped}\\n${vizBlock}` : grouped;\n\n if (stdout) {\n return dsl;\n }\n\n const filename = output || `${id}.ec`;\n const filepath = resolve(filename);\n writeFileSync(filepath, dsl + '\\n', 'utf-8');\n\n const lines = ['', ` Exported ${type} '${id}' to ${filepath}`];\n\n if (playground) {\n const encoded = Buffer.from(dsl).toString('base64');\n const playgroundUrl = `https://playground.eventcatalog.dev/?code=${encoded}`;\n await open(playgroundUrl);\n lines.push('', ` Opening in playground...`);\n } else {\n lines.push('', ` Tip: Use --playground to open in the playground`);\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n"],"mappings":"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","names":["resolve","createSDK","createSDK","createSDK","version","resolve","result"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eventcatalog/cli",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "CLI for EventCatalog",
5
5
  "bin": {
6
6
  "eventcatalog": "./dist/cli/index.js"
@@ -25,7 +25,7 @@
25
25
  "dependencies": {
26
26
  "commander": "^12.0.0",
27
27
  "open": "^11.0.0",
28
- "@eventcatalog/sdk": "2.14.0"
28
+ "@eventcatalog/sdk": "2.14.1"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/node": "^20.14.10",