@codemarc/blt 1.0.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 (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +184 -0
  3. package/dist/commands/bucket.d.ts +3 -0
  4. package/dist/commands/bucket.d.ts.map +1 -0
  5. package/dist/commands/bucket.js +399 -0
  6. package/dist/commands/bucket.js.map +1 -0
  7. package/dist/commands/check.d.ts +3 -0
  8. package/dist/commands/check.d.ts.map +1 -0
  9. package/dist/commands/check.js +43 -0
  10. package/dist/commands/check.js.map +1 -0
  11. package/dist/commands/cleanup.d.ts +6 -0
  12. package/dist/commands/cleanup.d.ts.map +1 -0
  13. package/dist/commands/cleanup.js +65 -0
  14. package/dist/commands/cleanup.js.map +1 -0
  15. package/dist/commands/data.d.ts +8 -0
  16. package/dist/commands/data.d.ts.map +1 -0
  17. package/dist/commands/data.js +222 -0
  18. package/dist/commands/data.js.map +1 -0
  19. package/dist/commands/env.d.ts +6 -0
  20. package/dist/commands/env.d.ts.map +1 -0
  21. package/dist/commands/env.js +29 -0
  22. package/dist/commands/env.js.map +1 -0
  23. package/dist/commands/image/color.d.ts +12 -0
  24. package/dist/commands/image/color.d.ts.map +1 -0
  25. package/dist/commands/image/color.js +274 -0
  26. package/dist/commands/image/color.js.map +1 -0
  27. package/dist/commands/image/convert.d.ts +11 -0
  28. package/dist/commands/image/convert.d.ts.map +1 -0
  29. package/dist/commands/image/convert.js +230 -0
  30. package/dist/commands/image/convert.js.map +1 -0
  31. package/dist/commands/image/enhance.d.ts +10 -0
  32. package/dist/commands/image/enhance.d.ts.map +1 -0
  33. package/dist/commands/image/enhance.js +174 -0
  34. package/dist/commands/image/enhance.js.map +1 -0
  35. package/dist/commands/image/sharpen.d.ts +13 -0
  36. package/dist/commands/image/sharpen.d.ts.map +1 -0
  37. package/dist/commands/image/sharpen.js +205 -0
  38. package/dist/commands/image/sharpen.js.map +1 -0
  39. package/dist/commands/image.d.ts +3 -0
  40. package/dist/commands/image.d.ts.map +1 -0
  41. package/dist/commands/image.js +125 -0
  42. package/dist/commands/image.js.map +1 -0
  43. package/dist/commands/repo.d.ts +6 -0
  44. package/dist/commands/repo.d.ts.map +1 -0
  45. package/dist/commands/repo.js +75 -0
  46. package/dist/commands/repo.js.map +1 -0
  47. package/dist/config/config.d.ts +16 -0
  48. package/dist/config/config.d.ts.map +1 -0
  49. package/dist/config/config.js +57 -0
  50. package/dist/config/config.js.map +1 -0
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +27 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/lib/constants.d.ts +23 -0
  56. package/dist/lib/constants.d.ts.map +1 -0
  57. package/dist/lib/constants.js +22 -0
  58. package/dist/lib/constants.js.map +1 -0
  59. package/dist/lib/data-generator.d.ts +11 -0
  60. package/dist/lib/data-generator.d.ts.map +1 -0
  61. package/dist/lib/data-generator.js +78 -0
  62. package/dist/lib/data-generator.js.map +1 -0
  63. package/dist/lib/database-runner.d.ts +14 -0
  64. package/dist/lib/database-runner.d.ts.map +1 -0
  65. package/dist/lib/database-runner.js +186 -0
  66. package/dist/lib/database-runner.js.map +1 -0
  67. package/dist/lib/instance-discovery.d.ts +13 -0
  68. package/dist/lib/instance-discovery.d.ts.map +1 -0
  69. package/dist/lib/instance-discovery.js +48 -0
  70. package/dist/lib/instance-discovery.js.map +1 -0
  71. package/dist/lib/schema-discovery.d.ts +30 -0
  72. package/dist/lib/schema-discovery.d.ts.map +1 -0
  73. package/dist/lib/schema-discovery.js +85 -0
  74. package/dist/lib/schema-discovery.js.map +1 -0
  75. package/dist/lib/sql-builder.d.ts +25 -0
  76. package/dist/lib/sql-builder.d.ts.map +1 -0
  77. package/dist/lib/sql-builder.js +108 -0
  78. package/dist/lib/sql-builder.js.map +1 -0
  79. package/dist/lib/yaml-converter.d.ts +26 -0
  80. package/dist/lib/yaml-converter.d.ts.map +1 -0
  81. package/dist/lib/yaml-converter.js +350 -0
  82. package/dist/lib/yaml-converter.js.map +1 -0
  83. package/dist/utils/supabase.d.ts +3 -0
  84. package/dist/utils/supabase.d.ts.map +1 -0
  85. package/dist/utils/supabase.js +19 -0
  86. package/dist/utils/supabase.js.map +1 -0
  87. package/package.json +61 -0
@@ -0,0 +1,16 @@
1
+ export interface BltConfig {
2
+ schemaBase: string;
3
+ distPath: string;
4
+ instancesPath?: string;
5
+ }
6
+ /**
7
+ * Load configuration from multiple sources (priority order):
8
+ * 1. blt.config.json in current directory
9
+ * 2. .bltrc in current directory
10
+ * 3. ~/.blt/config.json in home directory
11
+ * 4. Environment variables (BLT_SCHEMA_BASE, BLT_DIST_PATH)
12
+ * 5. Default values
13
+ */
14
+ export declare function loadConfig(): BltConfig;
15
+ export declare function getConfig(): BltConfig;
16
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAOD;;;;;;;GAOG;AACH,wBAAgB,UAAU,IAAI,SAAS,CAgCtC;AAID,wBAAgB,SAAS,IAAI,SAAS,CAKrC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadConfig = loadConfig;
4
+ exports.getConfig = getConfig;
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const os_1 = require("os");
8
+ const DEFAULT_CONFIG = {
9
+ schemaBase: './schema',
10
+ distPath: './dist',
11
+ };
12
+ /**
13
+ * Load configuration from multiple sources (priority order):
14
+ * 1. blt.config.json in current directory
15
+ * 2. .bltrc in current directory
16
+ * 3. ~/.blt/config.json in home directory
17
+ * 4. Environment variables (BLT_SCHEMA_BASE, BLT_DIST_PATH)
18
+ * 5. Default values
19
+ */
20
+ function loadConfig() {
21
+ let config = { ...DEFAULT_CONFIG };
22
+ // Try loading from files
23
+ const configPaths = [
24
+ (0, path_1.join)(process.cwd(), 'blt.config.json'),
25
+ (0, path_1.join)(process.cwd(), '.bltrc'),
26
+ (0, path_1.join)((0, os_1.homedir)(), '.blt', 'config.json'),
27
+ ];
28
+ for (const configPath of configPaths) {
29
+ if ((0, fs_1.existsSync)(configPath)) {
30
+ try {
31
+ const fileConfig = JSON.parse((0, fs_1.readFileSync)(configPath, 'utf8'));
32
+ config = { ...config, ...fileConfig };
33
+ console.log(`Loaded config from: ${configPath}`);
34
+ break;
35
+ }
36
+ catch (error) {
37
+ console.warn(`Failed to parse config file: ${configPath}`);
38
+ }
39
+ }
40
+ }
41
+ // Override with environment variables
42
+ if (process.env.BLT_SCHEMA_BASE) {
43
+ config.schemaBase = process.env.BLT_SCHEMA_BASE;
44
+ }
45
+ if (process.env.BLT_DIST_PATH) {
46
+ config.distPath = process.env.BLT_DIST_PATH;
47
+ }
48
+ return config;
49
+ }
50
+ let cachedConfig = null;
51
+ function getConfig() {
52
+ if (!cachedConfig) {
53
+ cachedConfig = loadConfig();
54
+ }
55
+ return cachedConfig;
56
+ }
57
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":";;AAuBA,gCAgCC;AAID,8BAKC;AAhED,2BAA8C;AAC9C,+BAA4B;AAC5B,2BAA6B;AAQ7B,MAAM,cAAc,GAAc;IAChC,UAAU,EAAE,UAAU;IACtB,QAAQ,EAAE,QAAQ;CACnB,CAAC;AAEF;;;;;;;GAOG;AACH,SAAgB,UAAU;IACxB,IAAI,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,CAAC;IAEnC,yBAAyB;IACzB,MAAM,WAAW,GAAG;QAClB,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC;QACtC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC;QAC7B,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,MAAM,EAAE,aAAa,CAAC;KACvC,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChE,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;gBACjD,MAAM;YACR,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAChC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC9B,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAC9C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,IAAI,YAAY,GAAqB,IAAI,CAAC;AAE1C,SAAgB,SAAS;IACvB,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,UAAU,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const core_1 = require("@caporal/core");
8
+ const check_1 = __importDefault(require("./commands/check"));
9
+ const image_1 = __importDefault(require("./commands/image"));
10
+ core_1.program
11
+ .name("blt")
12
+ .version("1.0.0")
13
+ .description("BLT Core Cli");
14
+ (0, check_1.default)(core_1.program);
15
+ (0, image_1.default)(core_1.program);
16
+ // envCommand(program);
17
+ // dataCommand(program);
18
+ // cleanupCommand(program);
19
+ // bucketCommand(program);
20
+ // repoCommand(program);
21
+ // If no command is provided, show help
22
+ const args = process.argv.slice(2);
23
+ if (args.length === 0) {
24
+ process.argv.push('--help');
25
+ }
26
+ core_1.program.run();
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AACA,wCAAwC;AACxC,6DAA4C;AAC5C,6DAA4C;AAS5C,cAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,cAAc,CAAC,CAAC;AAE7B,IAAA,eAAY,EAAC,cAAO,CAAC,CAAC;AACtB,IAAA,eAAY,EAAC,cAAO,CAAC,CAAC;AAGtB,uBAAuB;AACvB,wBAAwB;AACxB,2BAA2B;AAC3B,0BAA0B;AAC1B,wBAAwB;AAE1B,uCAAuC;AACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,cAAO,CAAC,GAAG,EAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ export declare const PATTERNS: {
2
+ SQL_FILE: RegExp;
3
+ TABLE_NAME: RegExp;
4
+ FUNCTION_NAME: RegExp;
5
+ PROCEDURE_NAME: RegExp;
6
+ FILE_NUMBER: RegExp;
7
+ };
8
+ export declare function getPaths(): {
9
+ DIST: string;
10
+ SCHEMA_BASE: string;
11
+ INSTANCES_BASE: string;
12
+ };
13
+ export interface YamlFile {
14
+ name: string;
15
+ path: string;
16
+ source: string;
17
+ }
18
+ export interface SqlFile {
19
+ name: string;
20
+ version: string;
21
+ path: string;
22
+ }
23
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,QAAQ;;;;;;CAMpB,CAAC;AAEF,wBAAgB,QAAQ;;;;EAOvB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PATTERNS = void 0;
4
+ exports.getPaths = getPaths;
5
+ // Shared constants and types for schema operations
6
+ const config_1 = require("../config/config");
7
+ exports.PATTERNS = {
8
+ SQL_FILE: /bltcore-v(\d+\.\d+\.\d+)\.sql/,
9
+ TABLE_NAME: /^table:\s*(.+)$/m,
10
+ FUNCTION_NAME: /^function:\s*(.+)$/m,
11
+ PROCEDURE_NAME: /^procedure:\s*(.+)$/m,
12
+ FILE_NUMBER: /\d+/,
13
+ };
14
+ function getPaths() {
15
+ const config = (0, config_1.getConfig)();
16
+ return {
17
+ DIST: config.distPath,
18
+ SCHEMA_BASE: config.schemaBase,
19
+ INSTANCES_BASE: config.instancesPath || `${config.schemaBase}/instances`,
20
+ };
21
+ }
22
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":";;;AAWA,4BAOC;AAlBD,mDAAmD;AACnD,6CAA6C;AAEhC,QAAA,QAAQ,GAAG;IACtB,QAAQ,EAAE,+BAA+B;IACzC,UAAU,EAAE,kBAAkB;IAC9B,aAAa,EAAE,qBAAqB;IACpC,cAAc,EAAE,sBAAsB;IACtC,WAAW,EAAE,KAAK;CACnB,CAAC;AAEF,SAAgB,QAAQ;IACtB,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IAC3B,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,QAAQ;QACrB,WAAW,EAAE,MAAM,CAAC,UAAU;QAC9B,cAAc,EAAE,MAAM,CAAC,aAAa,IAAI,GAAG,MAAM,CAAC,UAAU,YAAY;KACzE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Build data file from instance directory
3
+ * Handles both direct SQL files and YAML files that need conversion
4
+ * Instance directory structure: instances/<instance>/{sql/, yaml/}
5
+ */
6
+ export declare function buildDataFile(instanceName: string, version: string): string;
7
+ /**
8
+ * Write data file to dist directory
9
+ */
10
+ export declare function writeDataFile(content: string, instanceName: string): void;
11
+ //# sourceMappingURL=data-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-generator.d.ts","sourceRoot":"","sources":["../../src/lib/data-generator.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAuD3E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAYzE"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ // Data generation utilities for instance-specific data
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.buildDataFile = buildDataFile;
5
+ exports.writeDataFile = writeDataFile;
6
+ const fs_1 = require("fs");
7
+ const path_1 = require("path");
8
+ const constants_1 = require("./constants");
9
+ const yaml_converter_1 = require("./yaml-converter");
10
+ const instance_discovery_1 = require("./instance-discovery");
11
+ /**
12
+ * Build data file from instance directory
13
+ * Handles both direct SQL files and YAML files that need conversion
14
+ * Instance directory structure: instances/<instance>/{sql/, yaml/}
15
+ */
16
+ function buildDataFile(instanceName, version) {
17
+ const instanceDir = (0, instance_discovery_1.getInstanceDir)(instanceName);
18
+ if (!(0, fs_1.existsSync)(instanceDir)) {
19
+ throw new Error(`Instance directory does not exist: ${instanceDir}`);
20
+ }
21
+ const sqlDir = (0, path_1.join)(instanceDir, "sql");
22
+ const yamlDir = (0, path_1.join)(instanceDir, "yaml");
23
+ let dataContent = `-- =============================================
24
+ -- Instance Data: ${instanceName}
25
+ -- v${version} ፨ ${new Date().toLocaleString()}
26
+ -- =============================================
27
+ SET search_path = public, auth, extensions;
28
+ `;
29
+ // Check for YAML files and convert them first
30
+ // processYamlFiles expects sqlDir and looks for yaml files in sqlDir/../yaml
31
+ if ((0, fs_1.existsSync)(yamlDir)) {
32
+ // Process YAML files to SQL (creates .sql files in the sql directory)
33
+ if ((0, fs_1.existsSync)(sqlDir)) {
34
+ (0, yaml_converter_1.processYamlFiles)(sqlDir);
35
+ }
36
+ else {
37
+ // Create sql directory if it doesn't exist
38
+ (0, fs_1.mkdirSync)(sqlDir, { recursive: true });
39
+ (0, yaml_converter_1.processYamlFiles)(sqlDir);
40
+ }
41
+ }
42
+ // Get all SQL files from the sql subdirectory
43
+ if (!(0, fs_1.existsSync)(sqlDir)) {
44
+ console.warn(`No SQL directory found in instance: ${instanceDir}`);
45
+ return dataContent;
46
+ }
47
+ const sqlFiles = (0, fs_1.readdirSync)(sqlDir)
48
+ .filter((file) => file.toLowerCase().endsWith(".sql") && constants_1.PATTERNS.FILE_NUMBER.test(file))
49
+ .sort();
50
+ if (sqlFiles.length === 0) {
51
+ console.warn(`No SQL files found in instance sql directory: ${sqlDir}`);
52
+ return dataContent;
53
+ }
54
+ // Append each SQL file
55
+ for (const file of sqlFiles) {
56
+ console.log(`Processing data file: ${file}`);
57
+ const filePath = (0, path_1.join)(sqlDir, file);
58
+ const content = (0, fs_1.readFileSync)(filePath, "utf8");
59
+ dataContent += `\n\n-- ${file}\nSET search_path = public, auth, extensions;\n\n`;
60
+ dataContent += `${content}`;
61
+ }
62
+ return dataContent;
63
+ }
64
+ /**
65
+ * Write data file to dist directory
66
+ */
67
+ function writeDataFile(content, instanceName) {
68
+ const paths = (0, constants_1.getPaths)();
69
+ const distPath = (0, path_1.join)(process.cwd(), paths.DIST);
70
+ const datafile = (0, path_1.join)(distPath, 'data.sql');
71
+ console.log(`Writing data file to ${datafile}`);
72
+ // Ensure dist directory exists
73
+ if (!(0, fs_1.existsSync)(distPath)) {
74
+ (0, fs_1.mkdirSync)(distPath, { recursive: true });
75
+ }
76
+ (0, fs_1.writeFileSync)(datafile, content);
77
+ }
78
+ //# sourceMappingURL=data-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-generator.js","sourceRoot":"","sources":["../../src/lib/data-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { SqlFile } from "./constants";
2
+ /**
3
+ * Get the latest SQL file from the dist directory
4
+ */
5
+ export declare function getLatestSqlFile(): SqlFile;
6
+ /**
7
+ * Execute a SQL file against the database
8
+ */
9
+ export declare function runSqlFile(filePath?: string): Promise<void>;
10
+ /**
11
+ * Execute a SQL query and return results
12
+ */
13
+ export declare function executeQuery<T = any>(query: string): Promise<T[]>;
14
+ //# sourceMappingURL=database-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-runner.d.ts","sourceRoot":"","sources":["../../src/lib/database-runner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsB,OAAO,EAAE,MAAM,aAAa,CAAC;AAE1D;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAqC1C;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8GjE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAgCvE"}
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ // Database execution utilities
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getLatestSqlFile = getLatestSqlFile;
8
+ exports.runSqlFile = runSqlFile;
9
+ exports.executeQuery = executeQuery;
10
+ const fs_1 = require("fs");
11
+ const path_1 = require("path");
12
+ const pg_1 = __importDefault(require("pg"));
13
+ const constants_1 = require("./constants");
14
+ /**
15
+ * Get the latest SQL file from the dist directory
16
+ */
17
+ function getLatestSqlFile() {
18
+ const paths = (0, constants_1.getPaths)();
19
+ const distPath = (0, path_1.join)(process.cwd(), paths.DIST);
20
+ if (!(0, fs_1.existsSync)(distPath)) {
21
+ console.error(`Dist directory does not exist: ${distPath}`);
22
+ process.exit(1);
23
+ }
24
+ const sqlFiles = (0, fs_1.readdirSync)(distPath)
25
+ .filter((file) => file.startsWith("bltcore-v") && file.endsWith(".sql"))
26
+ .map((file) => {
27
+ const versionMatch = file.match(constants_1.PATTERNS.SQL_FILE);
28
+ if (!versionMatch)
29
+ return null;
30
+ return {
31
+ name: file,
32
+ version: versionMatch[1],
33
+ path: (0, path_1.join)(distPath, file),
34
+ };
35
+ })
36
+ .filter((f) => f !== null)
37
+ .sort((a, b) => {
38
+ // Sort by semantic version (major.minor.patch)
39
+ const [aMajor, aMinor, aPatch] = a.version.split(".").map(Number);
40
+ const [bMajor, bMinor, bPatch] = b.version.split(".").map(Number);
41
+ if (aMajor !== bMajor)
42
+ return bMajor - aMajor;
43
+ if (aMinor !== bMinor)
44
+ return bMinor - aMinor;
45
+ return bPatch - aPatch;
46
+ });
47
+ if (sqlFiles.length === 0) {
48
+ console.error("No SQL files found in dist directory");
49
+ process.exit(1);
50
+ }
51
+ return sqlFiles[0];
52
+ }
53
+ /**
54
+ * Execute a SQL file against the database
55
+ */
56
+ async function runSqlFile(filePath) {
57
+ let targetFile;
58
+ let sqlContent;
59
+ if (filePath) {
60
+ // Use specified file
61
+ const fileName = filePath.split("/").pop() || filePath;
62
+ sqlContent = (0, fs_1.readFileSync)(filePath, "utf8");
63
+ targetFile = {
64
+ name: fileName,
65
+ version: "unknown",
66
+ path: filePath,
67
+ };
68
+ console.log(`\n🚀 Running SQL file: ${fileName}`);
69
+ }
70
+ else {
71
+ // Use latest file (backward compatibility)
72
+ targetFile = getLatestSqlFile();
73
+ sqlContent = (0, fs_1.readFileSync)(targetFile.path, "utf8");
74
+ console.log(`\n🚀 Running latest SQL file: ${targetFile.name} (v${targetFile.version})`);
75
+ }
76
+ // Read database connection from environment variables
77
+ const connectionString = process.env.DATABASE_URL || process.env.SUPABASE_DB_URL;
78
+ if (!connectionString) {
79
+ console.error(`\n❌ Error: No database connection string found.`);
80
+ console.error("Please set DATABASE_URL or SUPABASE_DB_URL environment variable.");
81
+ console.error("\nExample:");
82
+ console.error(' export DATABASE_URL="postgresql://user:password@localhost:5432/dbname"');
83
+ process.exit(1);
84
+ }
85
+ // Create PostgreSQL client
86
+ const client = new pg_1.default.Client({ connectionString });
87
+ try {
88
+ console.log("📡 Connecting to database...");
89
+ await client.connect();
90
+ console.log("✅ Connected successfully");
91
+ console.log("\n⏳ Executing SQL script...");
92
+ console.log(" This may take a few moments...\n");
93
+ // Execute the SQL
94
+ await client.query(sqlContent);
95
+ console.log("✅ SQL script executed successfully!");
96
+ if (targetFile.version !== "unknown") {
97
+ console.log(`\n📊 Database updated with schema v${targetFile.version}`);
98
+ }
99
+ }
100
+ catch (error) {
101
+ console.error("\n❌ Error executing SQL:");
102
+ console.error("━".repeat(60));
103
+ // Show the main error message
104
+ console.error(`\n${error.message}`);
105
+ // Show line number if available
106
+ if (error.position) {
107
+ const lines = sqlContent.substring(0, error.position).split("\n");
108
+ const lineNumber = lines.length;
109
+ const columnNumber = lines[lines.length - 1].length + 1;
110
+ console.error(`\n📍 Location: Line ${lineNumber}, Column ${columnNumber}`);
111
+ console.error(` Position: ${error.position} characters into file`);
112
+ // Show context around the error (3 lines before and after)
113
+ const allLines = sqlContent.split("\n");
114
+ const startLine = Math.max(0, lineNumber - 4);
115
+ const endLine = Math.min(allLines.length, lineNumber + 2);
116
+ console.error("\n📄 Context:");
117
+ console.error("━".repeat(60));
118
+ for (let i = startLine; i < endLine; i++) {
119
+ const marker = i + 1 === lineNumber ? "➤" : " ";
120
+ const lineNum = String(i + 1).padStart(5, " ");
121
+ console.error(`${marker} ${lineNum} | ${allLines[i]}`);
122
+ }
123
+ console.error("━".repeat(60));
124
+ }
125
+ // Show additional PostgreSQL error details
126
+ if (error.detail) {
127
+ console.error(`\n📝 Detail: ${error.detail}`);
128
+ }
129
+ if (error.hint) {
130
+ console.error(`\n💡 Hint: ${error.hint}`);
131
+ }
132
+ if (error.where) {
133
+ console.error(`\n🔍 Where: ${error.where}`);
134
+ }
135
+ if (error.code) {
136
+ console.error(`\n🏷️ SQL Error Code: ${error.code}`);
137
+ }
138
+ // Show the SQL file being executed
139
+ console.error(`\n📂 File: ${targetFile.path}`);
140
+ if (targetFile.version !== "unknown") {
141
+ console.error(` Version: ${targetFile.version}`);
142
+ }
143
+ console.error("\n" + "━".repeat(60));
144
+ process.exit(1);
145
+ }
146
+ finally {
147
+ await client.end();
148
+ console.log("\n👋 Database connection closed");
149
+ }
150
+ }
151
+ /**
152
+ * Execute a SQL query and return results
153
+ */
154
+ async function executeQuery(query) {
155
+ // Read database connection from environment variables
156
+ const connectionString = process.env.DATABASE_URL || process.env.SUPABASE_DB_URL;
157
+ if (!connectionString) {
158
+ console.error(`\n❌ Error: No database connection string found.`);
159
+ console.error("Please set DATABASE_URL or SUPABASE_DB_URL environment variable.");
160
+ console.error("\nExample:");
161
+ console.error(' export DATABASE_URL="postgresql://user:password@localhost:5432/dbname"');
162
+ process.exit(1);
163
+ }
164
+ // Create PostgreSQL client
165
+ const client = new pg_1.default.Client({ connectionString });
166
+ try {
167
+ await client.connect();
168
+ const result = await client.query(query);
169
+ return result.rows;
170
+ }
171
+ catch (error) {
172
+ console.error("\n❌ Error executing query:");
173
+ console.error(`\n${error.message}`);
174
+ if (error.detail) {
175
+ console.error(`\n📝 Detail: ${error.detail}`);
176
+ }
177
+ if (error.hint) {
178
+ console.error(`\n💡 Hint: ${error.hint}`);
179
+ }
180
+ process.exit(1);
181
+ }
182
+ finally {
183
+ await client.end();
184
+ }
185
+ }
186
+ //# sourceMappingURL=database-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-runner.js","sourceRoot":"","sources":["../../src/lib/database-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Get all available instance names from the instances directory
3
+ */
4
+ export declare function getAvailableInstances(): string[];
5
+ /**
6
+ * Get the default instance name (prefers "default" if it exists)
7
+ */
8
+ export declare function getDefaultInstanceName(): string;
9
+ /**
10
+ * Get instance directory path
11
+ */
12
+ export declare function getInstanceDir(instanceName: string): string;
13
+ //# sourceMappingURL=instance-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-discovery.d.ts","sourceRoot":"","sources":["../../src/lib/instance-discovery.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAYhD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAW/C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAG3D"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ // Instance discovery and file listing utilities
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.getAvailableInstances = getAvailableInstances;
5
+ exports.getDefaultInstanceName = getDefaultInstanceName;
6
+ exports.getInstanceDir = getInstanceDir;
7
+ const fs_1 = require("fs");
8
+ const path_1 = require("path");
9
+ const constants_1 = require("./constants");
10
+ /**
11
+ * Get all available instance names from the instances directory
12
+ */
13
+ function getAvailableInstances() {
14
+ const paths = (0, constants_1.getPaths)();
15
+ const instancesBase = (0, path_1.join)(process.cwd(), paths.INSTANCES_BASE);
16
+ if (!(0, fs_1.existsSync)(instancesBase)) {
17
+ return [];
18
+ }
19
+ return (0, fs_1.readdirSync)(instancesBase)
20
+ .filter((item) => {
21
+ const itemPath = (0, path_1.join)(instancesBase, item);
22
+ return (0, fs_1.statSync)(itemPath).isDirectory();
23
+ })
24
+ .sort();
25
+ }
26
+ /**
27
+ * Get the default instance name (prefers "default" if it exists)
28
+ */
29
+ function getDefaultInstanceName() {
30
+ const instances = getAvailableInstances();
31
+ // Prefer "default" if it exists, otherwise use the first available instance
32
+ if (instances.includes("default")) {
33
+ return "default";
34
+ }
35
+ if (instances.length > 0) {
36
+ return instances[0];
37
+ }
38
+ // Fallback if no instances found
39
+ return "default";
40
+ }
41
+ /**
42
+ * Get instance directory path
43
+ */
44
+ function getInstanceDir(instanceName) {
45
+ const paths = (0, constants_1.getPaths)();
46
+ return (0, path_1.join)(process.cwd(), paths.INSTANCES_BASE, instanceName);
47
+ }
48
+ //# sourceMappingURL=instance-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-discovery.js","sourceRoot":"","sources":["../../src/lib/instance-discovery.ts"],"names":[],"mappings":";AAAA,gDAAgD;;AAShD,sDAYC;AAKD,wDAWC;AAKD,wCAGC;AA3CD,2BAAuD;AACvD,+BAA4B;AAC5B,2CAAuC;AAEvC;;GAEG;AACH,SAAgB,qBAAqB;IACnC,MAAM,KAAK,GAAG,IAAA,oBAAQ,GAAE,CAAC;IACzB,MAAM,aAAa,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAChE,IAAI,CAAC,IAAA,eAAU,EAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,IAAA,gBAAW,EAAC,aAAa,CAAC;SAC9B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC3C,OAAO,IAAA,aAAQ,EAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1C,CAAC,CAAC;SACD,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB;IACpC,MAAM,SAAS,GAAG,qBAAqB,EAAE,CAAC;IAC1C,4EAA4E;IAC5E,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IACD,iCAAiC;IACjC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,YAAoB;IACjD,MAAM,KAAK,GAAG,IAAA,oBAAQ,GAAE,CAAC;IACzB,OAAO,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Get all available schema names from the schema directory
3
+ */
4
+ export declare function getAvailableSchemas(): string[];
5
+ /**
6
+ * Get the default schema name (prefers "public" if it exists)
7
+ */
8
+ export declare function getDefaultSchemaName(): string;
9
+ /**
10
+ * Get detailed file information for all files in a schema's sql directory
11
+ * Only includes files ending in .sql (case-insensitive)
12
+ */
13
+ export declare function getSchemaFileList(schemaName?: string): {
14
+ name: string;
15
+ size: number;
16
+ lastModified: string;
17
+ createdAt: string;
18
+ updatedAt: string;
19
+ }[];
20
+ /**
21
+ * Get simplified file information for table display
22
+ */
23
+ export declare function getSchemaTableRows(schemaName?: string): {
24
+ name: string;
25
+ size: number;
26
+ createdAt: string;
27
+ lastModified: string;
28
+ updatedAt: string;
29
+ }[];
30
+ //# sourceMappingURL=schema-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-discovery.d.ts","sourceRoot":"","sources":["../../src/lib/schema-discovery.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAY9C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAW7C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM;;;;;;IAwBpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM;;;;;;IAUrD"}