@eventcatalog/cli 0.2.0 → 0.2.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.
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
@@ -0,0 +1,171 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
18
+ // If the importer is in node compatibility mode or this is not an ESM
19
+ // file that has been converted to a CommonJS file using a Babel-
20
+ // compatible transform (i.e. "__esModule" has not been set), then set
21
+ // "default" to the CommonJS "module.exports" for node compatibility.
22
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
23
+ mod
24
+ ));
25
+
26
+ // src/cli/index.ts
27
+ var import_commander = require("commander");
28
+ var import_node_fs2 = require("fs");
29
+ var import_node_path = require("path");
30
+
31
+ // src/cli/executor.ts
32
+ var import_node_fs = require("fs");
33
+
34
+ // src/cli/parser.ts
35
+ function parseArguments(rawArgs) {
36
+ return rawArgs.map((arg, index) => {
37
+ if (arg.startsWith("{") && arg.endsWith("}") || arg.startsWith("[") && arg.endsWith("]")) {
38
+ try {
39
+ return JSON.parse(arg);
40
+ } catch (error) {
41
+ if (arg.includes(":") || arg.includes(",")) {
42
+ throw new Error(`Invalid JSON in argument ${index + 1}: ${error instanceof Error ? error.message : String(error)}`);
43
+ }
44
+ return arg;
45
+ }
46
+ }
47
+ if (arg === "true") return true;
48
+ if (arg === "false") return false;
49
+ if (/^-?\d+(\.\d+)?$/.test(arg)) {
50
+ return Number(arg);
51
+ }
52
+ return arg;
53
+ });
54
+ }
55
+
56
+ // src/cli/executor.ts
57
+ var import_sdk = __toESM(require("@eventcatalog/sdk"));
58
+ async function executeFunction(catalogDir, functionName, rawArgs) {
59
+ if (!(0, import_node_fs.existsSync)(catalogDir)) {
60
+ throw new Error(`Catalog directory not found: ${catalogDir}`);
61
+ }
62
+ const sdk = (0, import_sdk.default)(catalogDir);
63
+ if (!(functionName in sdk)) {
64
+ throw new Error(`Function '${functionName}' not found. Use 'eventcatalog list' to see available functions.`);
65
+ }
66
+ const fn = sdk[functionName];
67
+ if (typeof fn !== "function") {
68
+ throw new Error(`'${functionName}' is not a callable function.`);
69
+ }
70
+ const parsedArgs = parseArguments(rawArgs);
71
+ try {
72
+ return await fn(...parsedArgs);
73
+ } catch (error) {
74
+ throw new Error(`Error executing '${functionName}': ${error instanceof Error ? error.message : String(error)}`);
75
+ }
76
+ }
77
+
78
+ // src/cli/list.ts
79
+ var import_sdk2 = __toESM(require("@eventcatalog/sdk"));
80
+ function listFunctions(catalogDir = ".") {
81
+ const sdk = (0, import_sdk2.default)(catalogDir);
82
+ const functionNames = Object.keys(sdk).filter((key) => typeof sdk[key] === "function");
83
+ const categories = {
84
+ Events: [],
85
+ Commands: [],
86
+ Queries: [],
87
+ Channels: [],
88
+ Services: [],
89
+ Domains: [],
90
+ Entities: [],
91
+ DataStores: [],
92
+ DataProducts: [],
93
+ Teams: [],
94
+ Users: [],
95
+ "Custom Docs": [],
96
+ Messages: [],
97
+ Utilities: []
98
+ };
99
+ functionNames.forEach((name) => {
100
+ if (name.includes("Event")) categories["Events"].push(name);
101
+ else if (name.includes("Command")) categories["Commands"].push(name);
102
+ else if (name.includes("Query")) categories["Queries"].push(name);
103
+ else if (name.includes("Channel")) categories["Channels"].push(name);
104
+ else if (name.includes("Service")) categories["Services"].push(name);
105
+ else if (name.includes("Domain")) categories["Domains"].push(name);
106
+ else if (name.includes("Entity")) categories["Entities"].push(name);
107
+ else if (name.includes("DataStore")) categories["DataStores"].push(name);
108
+ else if (name.includes("DataProduct")) categories["DataProducts"].push(name);
109
+ else if (name.includes("Team")) categories["Teams"].push(name);
110
+ else if (name.includes("User")) categories["Users"].push(name);
111
+ else if (name.includes("CustomDoc")) categories["Custom Docs"].push(name);
112
+ else if (name.includes("Message") || name.includes("Producers") || name.includes("Consumers"))
113
+ categories["Messages"].push(name);
114
+ else categories["Utilities"].push(name);
115
+ });
116
+ Object.keys(categories).forEach((key) => {
117
+ if (categories[key].length === 0) {
118
+ delete categories[key];
119
+ }
120
+ });
121
+ return categories;
122
+ }
123
+ function formatListOutput(functions) {
124
+ let output = "Available EventCatalog SDK Functions:\n\n";
125
+ Object.entries(functions).forEach(([category, names]) => {
126
+ output += `${category}:
127
+ `;
128
+ names.sort().forEach((name) => {
129
+ output += ` - ${name}
130
+ `;
131
+ });
132
+ output += "\n";
133
+ });
134
+ return output;
135
+ }
136
+
137
+ // src/cli/index.ts
138
+ var version = "1.0.0";
139
+ try {
140
+ const packageJsonPath = (0, import_node_path.resolve)(__dirname, "../../package.json");
141
+ const packageJson = JSON.parse((0, import_node_fs2.readFileSync)(packageJsonPath, "utf-8"));
142
+ version = packageJson.version;
143
+ } catch {
144
+ }
145
+ import_commander.program.name("eventcatalog").description("EventCatalog Command-Line Interface").version(version).option("-d, --dir <path>", "Path to the EventCatalog directory (default: current directory)", ".");
146
+ import_commander.program.command("list").description("List all available SDK functions").action(() => {
147
+ try {
148
+ const functions = listFunctions(".");
149
+ const output = formatListOutput(functions);
150
+ console.log(output);
151
+ } catch (error) {
152
+ console.error("Error listing functions:", error instanceof Error ? error.message : String(error));
153
+ process.exit(1);
154
+ }
155
+ });
156
+ import_commander.program.arguments("<function> [args...]").action(async (functionName, args) => {
157
+ try {
158
+ const options = import_commander.program.opts();
159
+ const dir = options.dir || ".";
160
+ const result = await executeFunction(dir, functionName, args);
161
+ console.log(JSON.stringify(result, null, 0));
162
+ } catch (error) {
163
+ console.error(error instanceof Error ? error.message : String(error));
164
+ process.exit(1);
165
+ }
166
+ });
167
+ import_commander.program.parse(process.argv);
168
+ if (process.argv.length < 3) {
169
+ import_commander.program.outputHelp();
170
+ }
171
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cli/index.ts","../../src/cli/executor.ts","../../src/cli/parser.ts","../../src/cli/list.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';\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// 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"],"mappings":"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","names":["import_node_fs","createSDK","import_sdk","createSDK"]}
@@ -0,0 +1,155 @@
1
+ #!/usr/bin/env node
2
+
3
+ // ../../node_modules/.pnpm/tsup@8.5.0_jiti@1.21.7_postcss@8.5.6_typescript@5.9.3_yaml@2.8.1/node_modules/tsup/assets/esm_shims.js
4
+ import path from "path";
5
+ import { fileURLToPath } from "url";
6
+ var getFilename = () => fileURLToPath(import.meta.url);
7
+ var getDirname = () => path.dirname(getFilename());
8
+ var __dirname = /* @__PURE__ */ getDirname();
9
+
10
+ // src/cli/index.ts
11
+ import { program } from "commander";
12
+ import { readFileSync } from "fs";
13
+ import { resolve } from "path";
14
+
15
+ // src/cli/executor.ts
16
+ import { existsSync } from "fs";
17
+
18
+ // src/cli/parser.ts
19
+ function parseArguments(rawArgs) {
20
+ return rawArgs.map((arg, index) => {
21
+ if (arg.startsWith("{") && arg.endsWith("}") || arg.startsWith("[") && arg.endsWith("]")) {
22
+ try {
23
+ return JSON.parse(arg);
24
+ } catch (error) {
25
+ if (arg.includes(":") || arg.includes(",")) {
26
+ throw new Error(`Invalid JSON in argument ${index + 1}: ${error instanceof Error ? error.message : String(error)}`);
27
+ }
28
+ return arg;
29
+ }
30
+ }
31
+ if (arg === "true") return true;
32
+ if (arg === "false") return false;
33
+ if (/^-?\d+(\.\d+)?$/.test(arg)) {
34
+ return Number(arg);
35
+ }
36
+ return arg;
37
+ });
38
+ }
39
+
40
+ // src/cli/executor.ts
41
+ import createSDK from "@eventcatalog/sdk";
42
+ async function executeFunction(catalogDir, functionName, rawArgs) {
43
+ if (!existsSync(catalogDir)) {
44
+ throw new Error(`Catalog directory not found: ${catalogDir}`);
45
+ }
46
+ const sdk = createSDK(catalogDir);
47
+ if (!(functionName in sdk)) {
48
+ throw new Error(`Function '${functionName}' not found. Use 'eventcatalog list' to see available functions.`);
49
+ }
50
+ const fn = sdk[functionName];
51
+ if (typeof fn !== "function") {
52
+ throw new Error(`'${functionName}' is not a callable function.`);
53
+ }
54
+ const parsedArgs = parseArguments(rawArgs);
55
+ try {
56
+ return await fn(...parsedArgs);
57
+ } catch (error) {
58
+ throw new Error(`Error executing '${functionName}': ${error instanceof Error ? error.message : String(error)}`);
59
+ }
60
+ }
61
+
62
+ // src/cli/list.ts
63
+ import createSDK2 from "@eventcatalog/sdk";
64
+ function listFunctions(catalogDir = ".") {
65
+ const sdk = createSDK2(catalogDir);
66
+ const functionNames = Object.keys(sdk).filter((key) => typeof sdk[key] === "function");
67
+ const categories = {
68
+ Events: [],
69
+ Commands: [],
70
+ Queries: [],
71
+ Channels: [],
72
+ Services: [],
73
+ Domains: [],
74
+ Entities: [],
75
+ DataStores: [],
76
+ DataProducts: [],
77
+ Teams: [],
78
+ Users: [],
79
+ "Custom Docs": [],
80
+ Messages: [],
81
+ Utilities: []
82
+ };
83
+ functionNames.forEach((name) => {
84
+ if (name.includes("Event")) categories["Events"].push(name);
85
+ else if (name.includes("Command")) categories["Commands"].push(name);
86
+ else if (name.includes("Query")) categories["Queries"].push(name);
87
+ else if (name.includes("Channel")) categories["Channels"].push(name);
88
+ else if (name.includes("Service")) categories["Services"].push(name);
89
+ else if (name.includes("Domain")) categories["Domains"].push(name);
90
+ else if (name.includes("Entity")) categories["Entities"].push(name);
91
+ else if (name.includes("DataStore")) categories["DataStores"].push(name);
92
+ else if (name.includes("DataProduct")) categories["DataProducts"].push(name);
93
+ else if (name.includes("Team")) categories["Teams"].push(name);
94
+ else if (name.includes("User")) categories["Users"].push(name);
95
+ else if (name.includes("CustomDoc")) categories["Custom Docs"].push(name);
96
+ else if (name.includes("Message") || name.includes("Producers") || name.includes("Consumers"))
97
+ categories["Messages"].push(name);
98
+ else categories["Utilities"].push(name);
99
+ });
100
+ Object.keys(categories).forEach((key) => {
101
+ if (categories[key].length === 0) {
102
+ delete categories[key];
103
+ }
104
+ });
105
+ return categories;
106
+ }
107
+ function formatListOutput(functions) {
108
+ let output = "Available EventCatalog SDK Functions:\n\n";
109
+ Object.entries(functions).forEach(([category, names]) => {
110
+ output += `${category}:
111
+ `;
112
+ names.sort().forEach((name) => {
113
+ output += ` - ${name}
114
+ `;
115
+ });
116
+ output += "\n";
117
+ });
118
+ return output;
119
+ }
120
+
121
+ // src/cli/index.ts
122
+ var version = "1.0.0";
123
+ try {
124
+ const packageJsonPath = resolve(__dirname, "../../package.json");
125
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
126
+ version = packageJson.version;
127
+ } catch {
128
+ }
129
+ program.name("eventcatalog").description("EventCatalog Command-Line Interface").version(version).option("-d, --dir <path>", "Path to the EventCatalog directory (default: current directory)", ".");
130
+ program.command("list").description("List all available SDK functions").action(() => {
131
+ try {
132
+ const functions = listFunctions(".");
133
+ const output = formatListOutput(functions);
134
+ console.log(output);
135
+ } catch (error) {
136
+ console.error("Error listing functions:", error instanceof Error ? error.message : String(error));
137
+ process.exit(1);
138
+ }
139
+ });
140
+ program.arguments("<function> [args...]").action(async (functionName, args) => {
141
+ try {
142
+ const options = program.opts();
143
+ const dir = options.dir || ".";
144
+ const result = await executeFunction(dir, functionName, args);
145
+ console.log(JSON.stringify(result, null, 0));
146
+ } catch (error) {
147
+ console.error(error instanceof Error ? error.message : String(error));
148
+ process.exit(1);
149
+ }
150
+ });
151
+ program.parse(process.argv);
152
+ if (process.argv.length < 3) {
153
+ program.outputHelp();
154
+ }
155
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../node_modules/.pnpm/tsup@8.5.0_jiti@1.21.7_postcss@8.5.6_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"],"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';\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// 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"],"mappings":"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","names":["createSDK"]}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * CLI Documentation Registry
3
+ *
4
+ * This file contains metadata for all SDK functions that can be called via the CLI.
5
+ * It is used to generate documentation for the EventCatalog website.
6
+ *
7
+ * @module cli-docs
8
+ */
9
+ interface CLIFunctionArg {
10
+ name: string;
11
+ type: 'string' | 'json' | 'boolean' | 'number';
12
+ required: boolean;
13
+ description: string;
14
+ }
15
+ interface CLIFunctionExample {
16
+ description: string;
17
+ command: string;
18
+ }
19
+ interface CLIFunctionDoc {
20
+ name: string;
21
+ description: string;
22
+ category: string;
23
+ args: CLIFunctionArg[];
24
+ examples: CLIFunctionExample[];
25
+ }
26
+ /**
27
+ * All CLI-callable functions with their documentation
28
+ */
29
+ declare const cliFunctions: CLIFunctionDoc[];
30
+ /**
31
+ * Get all unique categories
32
+ */
33
+ declare function getCategories(): string[];
34
+ /**
35
+ * Get functions by category
36
+ */
37
+ declare function getFunctionsByCategory(category: string): CLIFunctionDoc[];
38
+ /**
39
+ * Get a function by name
40
+ */
41
+ declare function getFunction(name: string): CLIFunctionDoc | undefined;
42
+
43
+ export { type CLIFunctionArg, type CLIFunctionDoc, type CLIFunctionExample, cliFunctions, getCategories, getFunction, getFunctionsByCategory };
@@ -0,0 +1,43 @@
1
+ /**
2
+ * CLI Documentation Registry
3
+ *
4
+ * This file contains metadata for all SDK functions that can be called via the CLI.
5
+ * It is used to generate documentation for the EventCatalog website.
6
+ *
7
+ * @module cli-docs
8
+ */
9
+ interface CLIFunctionArg {
10
+ name: string;
11
+ type: 'string' | 'json' | 'boolean' | 'number';
12
+ required: boolean;
13
+ description: string;
14
+ }
15
+ interface CLIFunctionExample {
16
+ description: string;
17
+ command: string;
18
+ }
19
+ interface CLIFunctionDoc {
20
+ name: string;
21
+ description: string;
22
+ category: string;
23
+ args: CLIFunctionArg[];
24
+ examples: CLIFunctionExample[];
25
+ }
26
+ /**
27
+ * All CLI-callable functions with their documentation
28
+ */
29
+ declare const cliFunctions: CLIFunctionDoc[];
30
+ /**
31
+ * Get all unique categories
32
+ */
33
+ declare function getCategories(): string[];
34
+ /**
35
+ * Get functions by category
36
+ */
37
+ declare function getFunctionsByCategory(category: string): CLIFunctionDoc[];
38
+ /**
39
+ * Get a function by name
40
+ */
41
+ declare function getFunction(name: string): CLIFunctionDoc | undefined;
42
+
43
+ export { type CLIFunctionArg, type CLIFunctionDoc, type CLIFunctionExample, cliFunctions, getCategories, getFunction, getFunctionsByCategory };