@datachonk/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.md +200 -0
  2. package/dist/__tests__/cache.test.d.ts +2 -0
  3. package/dist/__tests__/cache.test.d.ts.map +1 -0
  4. package/dist/__tests__/cache.test.js +40 -0
  5. package/dist/__tests__/cache.test.js.map +1 -0
  6. package/dist/__tests__/config.test.d.ts +2 -0
  7. package/dist/__tests__/config.test.d.ts.map +1 -0
  8. package/dist/__tests__/config.test.js +113 -0
  9. package/dist/__tests__/config.test.js.map +1 -0
  10. package/dist/__tests__/templates.test.d.ts +2 -0
  11. package/dist/__tests__/templates.test.d.ts.map +1 -0
  12. package/dist/__tests__/templates.test.js +51 -0
  13. package/dist/__tests__/templates.test.js.map +1 -0
  14. package/dist/commands/analyze.d.ts +10 -0
  15. package/dist/commands/analyze.d.ts.map +1 -0
  16. package/dist/commands/analyze.js +156 -0
  17. package/dist/commands/analyze.js.map +1 -0
  18. package/dist/commands/chat.d.ts +3 -0
  19. package/dist/commands/chat.d.ts.map +1 -0
  20. package/dist/commands/chat.js +121 -0
  21. package/dist/commands/chat.js.map +1 -0
  22. package/dist/commands/config.d.ts +2 -0
  23. package/dist/commands/config.d.ts.map +1 -0
  24. package/dist/commands/config.js +287 -0
  25. package/dist/commands/config.js.map +1 -0
  26. package/dist/commands/docs.d.ts +7 -0
  27. package/dist/commands/docs.d.ts.map +1 -0
  28. package/dist/commands/docs.js +208 -0
  29. package/dist/commands/docs.js.map +1 -0
  30. package/dist/commands/generate.d.ts +9 -0
  31. package/dist/commands/generate.d.ts.map +1 -0
  32. package/dist/commands/generate.js +130 -0
  33. package/dist/commands/generate.js.map +1 -0
  34. package/dist/commands/init.d.ts +7 -0
  35. package/dist/commands/init.d.ts.map +1 -0
  36. package/dist/commands/init.js +149 -0
  37. package/dist/commands/init.js.map +1 -0
  38. package/dist/commands/lineage.d.ts +9 -0
  39. package/dist/commands/lineage.d.ts.map +1 -0
  40. package/dist/commands/lineage.js +186 -0
  41. package/dist/commands/lineage.js.map +1 -0
  42. package/dist/commands/migrate.d.ts +3 -0
  43. package/dist/commands/migrate.d.ts.map +1 -0
  44. package/dist/commands/migrate.js +213 -0
  45. package/dist/commands/migrate.js.map +1 -0
  46. package/dist/commands/review.d.ts +8 -0
  47. package/dist/commands/review.d.ts.map +1 -0
  48. package/dist/commands/review.js +215 -0
  49. package/dist/commands/review.js.map +1 -0
  50. package/dist/commands/scan.d.ts +18 -0
  51. package/dist/commands/scan.d.ts.map +1 -0
  52. package/dist/commands/scan.js +335 -0
  53. package/dist/commands/scan.js.map +1 -0
  54. package/dist/commands/test.d.ts +3 -0
  55. package/dist/commands/test.d.ts.map +1 -0
  56. package/dist/commands/test.js +244 -0
  57. package/dist/commands/test.js.map +1 -0
  58. package/dist/index.d.ts +3 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +232 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/utils/analyzer.d.ts +39 -0
  63. package/dist/utils/analyzer.d.ts.map +1 -0
  64. package/dist/utils/analyzer.js +310 -0
  65. package/dist/utils/analyzer.js.map +1 -0
  66. package/dist/utils/cache.d.ts +98 -0
  67. package/dist/utils/cache.d.ts.map +1 -0
  68. package/dist/utils/cache.js +253 -0
  69. package/dist/utils/cache.js.map +1 -0
  70. package/dist/utils/config.d.ts +56 -0
  71. package/dist/utils/config.d.ts.map +1 -0
  72. package/dist/utils/config.js +108 -0
  73. package/dist/utils/config.js.map +1 -0
  74. package/dist/utils/generators.d.ts +8 -0
  75. package/dist/utils/generators.d.ts.map +1 -0
  76. package/dist/utils/generators.js +265 -0
  77. package/dist/utils/generators.js.map +1 -0
  78. package/dist/utils/plugins.d.ts +94 -0
  79. package/dist/utils/plugins.d.ts.map +1 -0
  80. package/dist/utils/plugins.js +164 -0
  81. package/dist/utils/plugins.js.map +1 -0
  82. package/dist/utils/templates.d.ts +57 -0
  83. package/dist/utils/templates.d.ts.map +1 -0
  84. package/dist/utils/templates.js +458 -0
  85. package/dist/utils/templates.js.map +1 -0
  86. package/package.json +69 -0
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Caching Layer for DataChonk CLI
3
+ *
4
+ * Caches expensive operations like:
5
+ * - Database discovery scans
6
+ * - Knowledge graph computations
7
+ * - AI model responses
8
+ * - Parsed SQL results
9
+ */
10
+ export interface CacheEntry<T> {
11
+ key: string;
12
+ data: T;
13
+ timestamp: number;
14
+ expiresAt: number;
15
+ tags: string[];
16
+ metadata?: Record<string, unknown>;
17
+ }
18
+ export interface CacheConfig {
19
+ enabled: boolean;
20
+ directory: string;
21
+ defaultTTL: number;
22
+ maxSize: number;
23
+ maxEntries: number;
24
+ }
25
+ /**
26
+ * Initialize the cache with custom configuration
27
+ */
28
+ export declare function initCache(customConfig?: Partial<CacheConfig>): void;
29
+ /**
30
+ * Generate a cache key from input data
31
+ */
32
+ export declare function generateCacheKey(namespace: string, ...args: unknown[]): string;
33
+ /**
34
+ * Get a value from cache
35
+ */
36
+ export declare function get<T>(key: string): T | null;
37
+ /**
38
+ * Set a value in cache
39
+ */
40
+ export declare function set<T>(key: string, data: T, options?: {
41
+ ttl?: number;
42
+ tags?: string[];
43
+ metadata?: Record<string, unknown>;
44
+ }): void;
45
+ /**
46
+ * Delete a cache entry
47
+ */
48
+ export declare function del(key: string): boolean;
49
+ /**
50
+ * Clear cache entries by tag
51
+ */
52
+ export declare function clearByTag(tag: string): number;
53
+ /**
54
+ * Clear all expired entries
55
+ */
56
+ export declare function clearExpired(): number;
57
+ /**
58
+ * Clear all cache entries
59
+ */
60
+ export declare function clearAll(): number;
61
+ /**
62
+ * Get cache statistics
63
+ */
64
+ export declare function getStats(): {
65
+ entries: number;
66
+ size: number;
67
+ oldestEntry: number | null;
68
+ newestEntry: number | null;
69
+ };
70
+ /**
71
+ * Decorator-style cache wrapper for async functions
72
+ */
73
+ export declare function cached<T extends (...args: unknown[]) => Promise<unknown>>(fn: T, options: {
74
+ namespace: string;
75
+ ttl?: number;
76
+ tags?: string[];
77
+ }): T;
78
+ /**
79
+ * Cache wrapper for scan results
80
+ */
81
+ export declare function cacheScanResult(connectionId: string, schemas: string[], result: unknown): void;
82
+ /**
83
+ * Get cached scan result
84
+ */
85
+ export declare function getCachedScanResult(connectionId: string, schemas: string[]): unknown | null;
86
+ /**
87
+ * Cache wrapper for knowledge graph
88
+ */
89
+ export declare function cacheKnowledgeGraph(projectPath: string, graph: unknown): void;
90
+ /**
91
+ * Get cached knowledge graph
92
+ */
93
+ export declare function getCachedKnowledgeGraph(projectPath: string): unknown | null;
94
+ /**
95
+ * Print cache status to console
96
+ */
97
+ export declare function printCacheStatus(): void;
98
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AAEH,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAYD;;GAEG;AACH,wBAAgB,SAAS,CAAC,YAAY,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,IAAI,CAMvE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAG9E;AASD;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAoB5C;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,EACnB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAO,GAClF,IAAI,CAcN;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOxC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAsB9C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAuBrC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAcjC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CA+BA;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,EACvE,EAAE,EAAE,CAAC,EACL,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC5D,CAAC,CAgBH;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,OAAO,GACd,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,GAAG,IAAI,CAGhB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,GACb,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAG3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAgBvC"}
@@ -0,0 +1,253 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, statSync, unlinkSync } from "fs";
2
+ import { join } from "path";
3
+ import { createHash } from "crypto";
4
+ import chalk from "chalk";
5
+ const DEFAULT_CONFIG = {
6
+ enabled: true,
7
+ directory: join(process.cwd(), ".datachonk", "cache"),
8
+ defaultTTL: 3600, // 1 hour
9
+ maxSize: 100 * 1024 * 1024, // 100MB
10
+ maxEntries: 1000,
11
+ };
12
+ let config = { ...DEFAULT_CONFIG };
13
+ /**
14
+ * Initialize the cache with custom configuration
15
+ */
16
+ export function initCache(customConfig = {}) {
17
+ config = { ...DEFAULT_CONFIG, ...customConfig };
18
+ if (config.enabled && !existsSync(config.directory)) {
19
+ mkdirSync(config.directory, { recursive: true });
20
+ }
21
+ }
22
+ /**
23
+ * Generate a cache key from input data
24
+ */
25
+ export function generateCacheKey(namespace, ...args) {
26
+ const input = JSON.stringify({ namespace, args });
27
+ return createHash("sha256").update(input).digest("hex").slice(0, 32);
28
+ }
29
+ /**
30
+ * Get cache file path for a key
31
+ */
32
+ function getCachePath(key) {
33
+ return join(config.directory, `${key}.json`);
34
+ }
35
+ /**
36
+ * Get a value from cache
37
+ */
38
+ export function get(key) {
39
+ if (!config.enabled)
40
+ return null;
41
+ const path = getCachePath(key);
42
+ if (!existsSync(path))
43
+ return null;
44
+ try {
45
+ const content = readFileSync(path, "utf-8");
46
+ const entry = JSON.parse(content);
47
+ // Check expiration
48
+ if (Date.now() > entry.expiresAt) {
49
+ unlinkSync(path);
50
+ return null;
51
+ }
52
+ return entry.data;
53
+ }
54
+ catch {
55
+ return null;
56
+ }
57
+ }
58
+ /**
59
+ * Set a value in cache
60
+ */
61
+ export function set(key, data, options = {}) {
62
+ if (!config.enabled)
63
+ return;
64
+ const entry = {
65
+ key,
66
+ data,
67
+ timestamp: Date.now(),
68
+ expiresAt: Date.now() + (options.ttl || config.defaultTTL) * 1000,
69
+ tags: options.tags || [],
70
+ metadata: options.metadata,
71
+ };
72
+ const path = getCachePath(key);
73
+ writeFileSync(path, JSON.stringify(entry, null, 2));
74
+ }
75
+ /**
76
+ * Delete a cache entry
77
+ */
78
+ export function del(key) {
79
+ const path = getCachePath(key);
80
+ if (existsSync(path)) {
81
+ unlinkSync(path);
82
+ return true;
83
+ }
84
+ return false;
85
+ }
86
+ /**
87
+ * Clear cache entries by tag
88
+ */
89
+ export function clearByTag(tag) {
90
+ if (!existsSync(config.directory))
91
+ return 0;
92
+ let cleared = 0;
93
+ const files = readdirSync(config.directory).filter((f) => f.endsWith(".json"));
94
+ for (const file of files) {
95
+ try {
96
+ const path = join(config.directory, file);
97
+ const content = readFileSync(path, "utf-8");
98
+ const entry = JSON.parse(content);
99
+ if (entry.tags.includes(tag)) {
100
+ unlinkSync(path);
101
+ cleared++;
102
+ }
103
+ }
104
+ catch {
105
+ // Skip invalid entries
106
+ }
107
+ }
108
+ return cleared;
109
+ }
110
+ /**
111
+ * Clear all expired entries
112
+ */
113
+ export function clearExpired() {
114
+ if (!existsSync(config.directory))
115
+ return 0;
116
+ let cleared = 0;
117
+ const files = readdirSync(config.directory).filter((f) => f.endsWith(".json"));
118
+ const now = Date.now();
119
+ for (const file of files) {
120
+ try {
121
+ const path = join(config.directory, file);
122
+ const content = readFileSync(path, "utf-8");
123
+ const entry = JSON.parse(content);
124
+ if (now > entry.expiresAt) {
125
+ unlinkSync(path);
126
+ cleared++;
127
+ }
128
+ }
129
+ catch {
130
+ // Skip invalid entries
131
+ }
132
+ }
133
+ return cleared;
134
+ }
135
+ /**
136
+ * Clear all cache entries
137
+ */
138
+ export function clearAll() {
139
+ if (!existsSync(config.directory))
140
+ return 0;
141
+ const files = readdirSync(config.directory).filter((f) => f.endsWith(".json"));
142
+ for (const file of files) {
143
+ try {
144
+ unlinkSync(join(config.directory, file));
145
+ }
146
+ catch {
147
+ // Skip errors
148
+ }
149
+ }
150
+ return files.length;
151
+ }
152
+ /**
153
+ * Get cache statistics
154
+ */
155
+ export function getStats() {
156
+ if (!existsSync(config.directory)) {
157
+ return { entries: 0, size: 0, oldestEntry: null, newestEntry: null };
158
+ }
159
+ const files = readdirSync(config.directory).filter((f) => f.endsWith(".json"));
160
+ let size = 0;
161
+ let oldest = null;
162
+ let newest = null;
163
+ for (const file of files) {
164
+ try {
165
+ const path = join(config.directory, file);
166
+ const stat = statSync(path);
167
+ size += stat.size;
168
+ const content = readFileSync(path, "utf-8");
169
+ const entry = JSON.parse(content);
170
+ if (oldest === null || entry.timestamp < oldest) {
171
+ oldest = entry.timestamp;
172
+ }
173
+ if (newest === null || entry.timestamp > newest) {
174
+ newest = entry.timestamp;
175
+ }
176
+ }
177
+ catch {
178
+ // Skip invalid entries
179
+ }
180
+ }
181
+ return { entries: files.length, size, oldestEntry: oldest, newestEntry: newest };
182
+ }
183
+ /**
184
+ * Decorator-style cache wrapper for async functions
185
+ */
186
+ export function cached(fn, options) {
187
+ return (async (...args) => {
188
+ const key = generateCacheKey(options.namespace, ...args);
189
+ // Try to get from cache
190
+ const cached = get(key);
191
+ if (cached !== null) {
192
+ return cached;
193
+ }
194
+ // Execute function and cache result
195
+ const result = await fn(...args);
196
+ set(key, result, { ttl: options.ttl, tags: options.tags });
197
+ return result;
198
+ });
199
+ }
200
+ /**
201
+ * Cache wrapper for scan results
202
+ */
203
+ export function cacheScanResult(connectionId, schemas, result) {
204
+ const key = generateCacheKey("scan", connectionId, schemas.sort().join(","));
205
+ set(key, result, {
206
+ ttl: 24 * 3600, // 24 hours
207
+ tags: ["scan", `connection:${connectionId}`],
208
+ metadata: { connectionId, schemas, scannedAt: new Date().toISOString() },
209
+ });
210
+ }
211
+ /**
212
+ * Get cached scan result
213
+ */
214
+ export function getCachedScanResult(connectionId, schemas) {
215
+ const key = generateCacheKey("scan", connectionId, schemas.sort().join(","));
216
+ return get(key);
217
+ }
218
+ /**
219
+ * Cache wrapper for knowledge graph
220
+ */
221
+ export function cacheKnowledgeGraph(projectPath, graph) {
222
+ const key = generateCacheKey("knowledge-graph", projectPath);
223
+ set(key, graph, {
224
+ ttl: 3600, // 1 hour
225
+ tags: ["knowledge-graph", `project:${projectPath}`],
226
+ });
227
+ }
228
+ /**
229
+ * Get cached knowledge graph
230
+ */
231
+ export function getCachedKnowledgeGraph(projectPath) {
232
+ const key = generateCacheKey("knowledge-graph", projectPath);
233
+ return get(key);
234
+ }
235
+ /**
236
+ * Print cache status to console
237
+ */
238
+ export function printCacheStatus() {
239
+ const stats = getStats();
240
+ console.log(chalk.bold("\nCache Status"));
241
+ console.log(chalk.gray("─".repeat(40)));
242
+ console.log(` Entries: ${stats.entries}`);
243
+ console.log(` Size: ${(stats.size / 1024 / 1024).toFixed(2)} MB`);
244
+ if (stats.oldestEntry) {
245
+ const oldestAge = Math.round((Date.now() - stats.oldestEntry) / 1000 / 60);
246
+ console.log(` Oldest: ${oldestAge} minutes ago`);
247
+ }
248
+ if (stats.newestEntry) {
249
+ const newestAge = Math.round((Date.now() - stats.newestEntry) / 1000 / 60);
250
+ console.log(` Newest: ${newestAge} minutes ago`);
251
+ }
252
+ }
253
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ export type DatabaseType = "snowflake" | "bigquery" | "redshift" | "databricks" | "postgres" | "mysql" | "duckdb";
2
+ export type ModelingApproach = "kimball" | "data_vault" | "obt" | "activity_schema" | "mixed";
3
+ export interface DatabaseConnection {
4
+ type: DatabaseType;
5
+ name: string;
6
+ host?: string;
7
+ port?: string | number;
8
+ database?: string;
9
+ username?: string;
10
+ account?: string;
11
+ warehouse?: string;
12
+ role?: string;
13
+ project?: string;
14
+ keyFile?: string;
15
+ dataset?: string;
16
+ lastUsed?: string;
17
+ }
18
+ export interface DataChonkConfig {
19
+ version: number;
20
+ warehouse: DatabaseType;
21
+ apiUrl?: string;
22
+ modeling: {
23
+ approach: ModelingApproach;
24
+ conventions: string[];
25
+ };
26
+ ai: {
27
+ enabled: boolean;
28
+ apiKey: string | null;
29
+ };
30
+ analysis: {
31
+ ignorePaths: string[];
32
+ ignoreRules: string[];
33
+ };
34
+ generation: {
35
+ defaultMaterialization: "view" | "table" | "incremental" | "ephemeral";
36
+ addDescriptions: boolean;
37
+ addTests: boolean;
38
+ };
39
+ connections?: Record<string, DatabaseConnection>;
40
+ }
41
+ export declare const DEFAULT_API_URL = "https://datachonk.dev";
42
+ export declare function getApiUrl(): string;
43
+ export declare function getConfigPath(projectPath?: string): string;
44
+ export declare function loadConfig(projectPath?: string): DataChonkConfig;
45
+ export declare function saveConfig(config: DataChonkConfig, projectPath?: string): void;
46
+ export declare function getApiKey(): string | null;
47
+ export declare function setApiKey(apiKey: string): void;
48
+ export declare function getConnections(): Record<string, DatabaseConnection>;
49
+ export declare function getConnection(name: string): DatabaseConnection | null;
50
+ export declare function saveConnection(name: string, connection: DatabaseConnection): void;
51
+ export declare function deleteConnection(name: string): boolean;
52
+ export declare function listConnections(): Array<{
53
+ name: string;
54
+ connection: DatabaseConnection;
55
+ }>;
56
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAClH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,YAAY,GAAG,KAAK,GAAG,iBAAiB,GAAG,OAAO,CAAC;AAE9F,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,YAAY,CAAC;IAExB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,QAAQ,EAAE,gBAAgB,CAAC;QAC3B,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,EAAE,EAAE;QACF,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE;QACR,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,UAAU,EAAE;QACV,sBAAsB,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,WAAW,CAAC;QACvE,eAAe,EAAE,OAAO,CAAC;QACzB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;IAEF,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAClD;AAGD,eAAO,MAAM,eAAe,0BAA0B,CAAC;AAEvD,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAyBD,wBAAgB,aAAa,CAAC,WAAW,GAAE,MAAY,GAAG,MAAM,CAE/D;AAED,wBAAgB,UAAU,CAAC,WAAW,GAAE,MAAY,GAAG,eAAe,CAwBrE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,GAAE,MAAY,GAAG,IAAI,CAGnF;AAED,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAGzC;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAK9C;AAGD,wBAAgB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAGnE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAGrE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAUjF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQtD;AAED,wBAAgB,eAAe,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAA;CAAE,CAAC,CAMzF"}
@@ -0,0 +1,108 @@
1
+ import { existsSync, readFileSync, writeFileSync } from "fs";
2
+ import { join } from "path";
3
+ import yaml from "js-yaml";
4
+ // Default API URL - can be overridden via config or environment variable
5
+ export const DEFAULT_API_URL = "https://datachonk.dev";
6
+ export function getApiUrl() {
7
+ const config = loadConfig(".");
8
+ return config.apiUrl || process.env.DATACHONK_API_URL || DEFAULT_API_URL;
9
+ }
10
+ const DEFAULT_CONFIG = {
11
+ version: 1,
12
+ warehouse: "snowflake",
13
+ modeling: {
14
+ approach: "kimball",
15
+ conventions: ["stg_prefix", "int_prefix", "fct_prefix", "dim_prefix", "snake_case"],
16
+ },
17
+ ai: {
18
+ enabled: false,
19
+ apiKey: null,
20
+ },
21
+ analysis: {
22
+ ignorePaths: ["target/**", "dbt_packages/**", "logs/**"],
23
+ ignoreRules: [],
24
+ },
25
+ generation: {
26
+ defaultMaterialization: "view",
27
+ addDescriptions: true,
28
+ addTests: true,
29
+ },
30
+ connections: {},
31
+ };
32
+ export function getConfigPath(projectPath = ".") {
33
+ return join(projectPath, ".datachonk.yml");
34
+ }
35
+ export function loadConfig(projectPath = ".") {
36
+ const configPath = getConfigPath(projectPath);
37
+ if (!existsSync(configPath)) {
38
+ return DEFAULT_CONFIG;
39
+ }
40
+ try {
41
+ const content = readFileSync(configPath, "utf-8");
42
+ const config = yaml.load(content);
43
+ // Deep merge with defaults
44
+ return {
45
+ ...DEFAULT_CONFIG,
46
+ ...config,
47
+ modeling: { ...DEFAULT_CONFIG.modeling, ...config.modeling },
48
+ ai: { ...DEFAULT_CONFIG.ai, ...config.ai },
49
+ analysis: { ...DEFAULT_CONFIG.analysis, ...config.analysis },
50
+ generation: { ...DEFAULT_CONFIG.generation, ...config.generation },
51
+ connections: { ...DEFAULT_CONFIG.connections, ...config.connections },
52
+ };
53
+ }
54
+ catch {
55
+ return DEFAULT_CONFIG;
56
+ }
57
+ }
58
+ export function saveConfig(config, projectPath = ".") {
59
+ const configPath = getConfigPath(projectPath);
60
+ writeFileSync(configPath, yaml.dump(config, { indent: 2 }));
61
+ }
62
+ export function getApiKey() {
63
+ const config = loadConfig(".");
64
+ return config.ai.apiKey || process.env.DATACHONK_API_KEY || null;
65
+ }
66
+ export function setApiKey(apiKey) {
67
+ const config = loadConfig(".");
68
+ config.ai.apiKey = apiKey;
69
+ config.ai.enabled = true;
70
+ saveConfig(config);
71
+ }
72
+ // Connection management
73
+ export function getConnections() {
74
+ const config = loadConfig(".");
75
+ return config.connections || {};
76
+ }
77
+ export function getConnection(name) {
78
+ const connections = getConnections();
79
+ return connections[name] || null;
80
+ }
81
+ export function saveConnection(name, connection) {
82
+ const config = loadConfig(".");
83
+ if (!config.connections) {
84
+ config.connections = {};
85
+ }
86
+ config.connections[name] = {
87
+ ...connection,
88
+ lastUsed: new Date().toISOString(),
89
+ };
90
+ saveConfig(config);
91
+ }
92
+ export function deleteConnection(name) {
93
+ const config = loadConfig(".");
94
+ if (config.connections && config.connections[name]) {
95
+ delete config.connections[name];
96
+ saveConfig(config);
97
+ return true;
98
+ }
99
+ return false;
100
+ }
101
+ export function listConnections() {
102
+ const connections = getConnections();
103
+ return Object.entries(connections).map(([name, connection]) => ({
104
+ name,
105
+ connection,
106
+ }));
107
+ }
108
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function generateStagingModel(name: string, source: string, warehouse: string): string;
2
+ export declare function generateIntermediateModel(name: string, source: string, warehouse: string): string;
3
+ export declare function generateMartModel(name: string, source: string, type: "fact" | "dimension", warehouse: string): string;
4
+ export declare function generateSnapshot(name: string, source: string, warehouse: string): string;
5
+ export declare function generateSourceYaml(name: string, source: string): string;
6
+ export declare function generateTests(name: string, source: string): string;
7
+ export declare function generateDocs(name: string, type: string, source?: string): string;
8
+ //# sourceMappingURL=generators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../src/utils/generators.ts"],"names":[],"mappings":"AAAA,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,MAAM,CAwCR;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,MAAM,CAgCR;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GAAG,WAAW,EAC1B,SAAS,EAAE,MAAM,GAChB,MAAM,CAoFR;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,MAAM,CAmBR;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA8BvE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAqBlE;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAsBR"}