@schemalens/cli 0.3.0 → 0.4.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.
package/README.md CHANGED
@@ -89,7 +89,7 @@ environments:
89
89
  prod:
90
90
  # Omit connection_string to use linked mode (see below)
91
91
 
92
- # SchemeLens SaaS integration (optional)
92
+ # SchemaLens SaaS integration (optional)
93
93
  project_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
94
94
  api_key: env(SCHEMALENS_API_KEY)
95
95
  ```
@@ -106,7 +106,7 @@ The CLI resolves `env(DATABASE_URL)` to the value of `$DATABASE_URL` at runtime.
106
106
 
107
107
  ### Linked mode (no local DATABASE_URL needed)
108
108
 
109
- When `project_id` and `api_key` are both set, you can omit `connection_string` from any environment. The CLI will fetch the connection details from SchemeLens SaaS using your API key.
109
+ When `project_id` and `api_key` are both set, you can omit `connection_string` from any environment. The CLI will fetch the connection details from SchemaLens SaaS using your API key.
110
110
 
111
111
  ```yaml
112
112
  environments:
@@ -0,0 +1,6 @@
1
+ export interface BuildOptions {
2
+ migrations: string;
3
+ env: string;
4
+ db?: string;
5
+ }
6
+ export declare function buildCommand(opts: BuildOptions): Promise<void>;
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildCommand = buildCommand;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const ora_1 = __importDefault(require("ora"));
11
+ const pg_1 = require("pg");
12
+ const introspector_1 = require("../lib/introspector");
13
+ const writer_1 = require("../lib/writer");
14
+ const META_DIR = path_1.default.join('schema', '_meta');
15
+ const MIGRATIONS_LOCK_FILE = path_1.default.join(META_DIR, 'migrations.lock.json');
16
+ function loadMigrationState() {
17
+ if (fs_1.default.existsSync(MIGRATIONS_LOCK_FILE)) {
18
+ const raw = fs_1.default.readFileSync(MIGRATIONS_LOCK_FILE, 'utf-8');
19
+ return JSON.parse(raw);
20
+ }
21
+ return { applied: [] };
22
+ }
23
+ function saveMigrationState(state) {
24
+ if (!fs_1.default.existsSync(META_DIR)) {
25
+ fs_1.default.mkdirSync(META_DIR, { recursive: true });
26
+ }
27
+ fs_1.default.writeFileSync(MIGRATIONS_LOCK_FILE, JSON.stringify(state, null, 2) + '\n', 'utf-8');
28
+ }
29
+ function getMigrationFiles(migrationsDir) {
30
+ const absDir = path_1.default.resolve(migrationsDir);
31
+ if (!fs_1.default.existsSync(absDir)) {
32
+ throw new Error(`Migrations directory not found: ${absDir}`);
33
+ }
34
+ const files = fs_1.default.readdirSync(absDir)
35
+ .filter(f => f.endsWith('.sql'))
36
+ .sort(); // lexicographic order: 001_init.sql, 002_add_users.sql, etc.
37
+ if (files.length === 0) {
38
+ throw new Error(`No .sql files found in ${absDir}`);
39
+ }
40
+ return files;
41
+ }
42
+ function resolveConnectionString(opts) {
43
+ if (opts.db)
44
+ return opts.db;
45
+ if (process.env.DATABASE_URL)
46
+ return process.env.DATABASE_URL;
47
+ throw new Error('No database connection provided.\n\n' +
48
+ 'Provide one of:\n' +
49
+ ' --db postgresql://user:pass@localhost:5432/mydb\n' +
50
+ ' DATABASE_URL=postgresql://... schemalens build ...\n\n' +
51
+ 'The target database should be empty (or a dedicated scratch/dev database).\n' +
52
+ 'SchemaLens will apply your migrations to it, then introspect the result.\n\n' +
53
+ 'Tip: create a blank local database with:\n' +
54
+ ' createdb myapp_schema_scratch');
55
+ }
56
+ async function buildCommand(opts) {
57
+ console.log(chalk_1.default.bold(`\nSchemaLens Build — env: ${chalk_1.default.cyan(opts.env)}\n`));
58
+ const connectionString = resolveConnectionString(opts);
59
+ const migrationsDir = path_1.default.resolve(opts.migrations);
60
+ console.log(chalk_1.default.dim(` migrations: ${migrationsDir}`));
61
+ // 1. Discover migration files
62
+ const allFiles = getMigrationFiles(migrationsDir);
63
+ // 2. Load existing migration state and find unapplied migrations
64
+ const state = loadMigrationState();
65
+ const unapplied = allFiles.filter(f => !state.applied.includes(f));
66
+ if (unapplied.length === 0) {
67
+ console.log(chalk_1.default.dim(`\n All ${allFiles.length} migration(s) already applied — schema files are up to date.\n`));
68
+ return;
69
+ }
70
+ console.log(chalk_1.default.dim(` ${allFiles.length} migration(s) total, ${unapplied.length} to apply\n`));
71
+ // 3. Connect and apply unapplied migrations
72
+ const isLocal = connectionString.includes('localhost') ||
73
+ connectionString.includes('127.0.0.1');
74
+ const pool = new pg_1.Pool({
75
+ connectionString,
76
+ connectionTimeoutMillis: 15_000,
77
+ ssl: isLocal ? undefined : { rejectUnauthorized: false },
78
+ });
79
+ try {
80
+ const applySpinner = (0, ora_1.default)(`Applying ${unapplied.length} migration(s)...`).start();
81
+ for (const filename of unapplied) {
82
+ const filePath = path_1.default.join(migrationsDir, filename);
83
+ const sql = fs_1.default.readFileSync(filePath, 'utf-8');
84
+ try {
85
+ await pool.query('BEGIN');
86
+ await pool.query(sql);
87
+ await pool.query('COMMIT');
88
+ state.applied.push(filename);
89
+ state.lastApplied = filename;
90
+ }
91
+ catch (err) {
92
+ await pool.query('ROLLBACK').catch(() => { });
93
+ applySpinner.fail(chalk_1.default.red(`Failed on migration: ${filename}`));
94
+ throw new Error(`Migration failed: ${filename}\n${err.message}`);
95
+ }
96
+ }
97
+ applySpinner.succeed(chalk_1.default.green(`Applied ${unapplied.length} migration(s)`));
98
+ for (const f of unapplied) {
99
+ console.log(chalk_1.default.green(` + ${f}`));
100
+ }
101
+ // 4. Persist migration state before introspecting
102
+ saveMigrationState(state);
103
+ // 5. Introspect the resulting schema
104
+ const introspectSpinner = (0, ora_1.default)('Introspecting schema...').start();
105
+ let snapshot;
106
+ try {
107
+ snapshot = await (0, introspector_1.introspectSchema)(connectionString);
108
+ introspectSpinner.succeed(chalk_1.default.green('Schema introspected'));
109
+ }
110
+ catch (err) {
111
+ introspectSpinner.fail(chalk_1.default.red('Failed to introspect schema'));
112
+ throw err;
113
+ }
114
+ console.log(chalk_1.default.dim(` ${snapshot.tables.length} tables, ` +
115
+ `${snapshot.views.length} views, ` +
116
+ `${snapshot.functions.length} functions, ` +
117
+ `${snapshot.enums.length} enums, ` +
118
+ `${snapshot.extensions.length} extensions`));
119
+ // 6. Write schema files
120
+ const writeSpinner = (0, ora_1.default)('Writing schema files...').start();
121
+ const result = (0, writer_1.writeSchemaFiles)(snapshot, opts.env);
122
+ writeSpinner.succeed(chalk_1.default.green('Schema files written'));
123
+ // 7. Summary
124
+ console.log('');
125
+ if (result.created.length > 0) {
126
+ console.log(chalk_1.default.green.bold(` + ${result.created.length} created`));
127
+ for (const f of result.created) {
128
+ console.log(chalk_1.default.green(` + ${f}`));
129
+ }
130
+ }
131
+ if (result.updated.length > 0) {
132
+ console.log(chalk_1.default.yellow.bold(` ~ ${result.updated.length} updated`));
133
+ for (const f of result.updated) {
134
+ console.log(chalk_1.default.yellow(` ~ ${f}`));
135
+ }
136
+ }
137
+ if (result.unchanged.length > 0) {
138
+ console.log(chalk_1.default.dim(` = ${result.unchanged.length} unchanged`));
139
+ }
140
+ const total = result.created.length + result.updated.length + result.unchanged.length;
141
+ console.log(chalk_1.default.bold(`\n Total: ${total} schema file(s)\n`));
142
+ console.log(chalk_1.default.dim(` Migration state saved → ${MIGRATIONS_LOCK_FILE}\n`));
143
+ }
144
+ finally {
145
+ await pool.end();
146
+ }
147
+ }
148
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -50,7 +50,7 @@ async function ciCommand(opts) {
50
50
  const projectId = config.project_id;
51
51
  const apiKey = (0, config_1.resolveEnvVar)(config.api_key);
52
52
  if (projectId && apiKey) {
53
- const syncSpinner = (0, ora_1.default)('Syncing to SchemeLens cloud...').start();
53
+ const syncSpinner = (0, ora_1.default)('Syncing to SchemaLens cloud...').start();
54
54
  const result = await (0, sync_1.syncToCloud)(projectId, apiKey, 'pull', env, gitContext);
55
55
  if (result) {
56
56
  syncSpinner.succeed(chalk_1.default.green(`Synced — ${result.object_count} objects, ${result.changed_count} changed`));
@@ -193,17 +193,17 @@ async function deployCommand(opts) {
193
193
  await client.query('COMMIT');
194
194
  writeDeployLog(env, applied, 'success');
195
195
  console.log(chalk_1.default.green.bold(`\n Deploy successful! ${applied} changes applied.\n`));
196
- // Auto-sync to SchemeLens cloud if configured
196
+ // Auto-sync to SchemaLens cloud if configured
197
197
  const projectId = config.project_id;
198
198
  const apiKey = (0, config_1.resolveEnvVar)(config.api_key);
199
199
  if (projectId && apiKey) {
200
- const syncSpinner = (0, ora_1.default)('Syncing snapshot to SchemeLens...').start();
200
+ const syncSpinner = (0, ora_1.default)('Syncing snapshot to SchemaLens...').start();
201
201
  const syncResult = await (0, sync_1.syncToCloud)(projectId, apiKey, 'deploy', env, gitContext);
202
202
  if (syncResult) {
203
- syncSpinner.succeed(chalk_1.default.green(`Snapshot synced to SchemeLens cloud (${syncResult.object_count} objects, ${syncResult.changed_count} changed)`));
203
+ syncSpinner.succeed(chalk_1.default.green(`Snapshot synced to SchemaLens cloud (${syncResult.object_count} objects, ${syncResult.changed_count} changed)`));
204
204
  }
205
205
  else {
206
- syncSpinner.warn(chalk_1.default.yellow('SchemeLens sync skipped (see warning above)'));
206
+ syncSpinner.warn(chalk_1.default.yellow('SchemaLens sync skipped (see warning above)'));
207
207
  }
208
208
  }
209
209
  }
@@ -22,7 +22,7 @@ async function initActionCommand() {
22
22
  return;
23
23
  }
24
24
  }
25
- console.log(chalk_1.default.bold('\n SchemeLens — GitHub Action Setup\n'));
25
+ console.log(chalk_1.default.bold('\n SchemaLens — GitHub Action Setup\n'));
26
26
  // Try to read existing config for environment defaults
27
27
  let envNames = [];
28
28
  try {
@@ -70,7 +70,7 @@ async function initActionCommand() {
70
70
  const blockLine = blockDestructive
71
71
  ? ` block-destructive: 'true'`
72
72
  : ` # block-destructive: 'true'`;
73
- const workflowYaml = `name: SchemeLens Schema Check
73
+ const workflowYaml = `name: SchemaLens Schema Check
74
74
 
75
75
  on:
76
76
  ${onBlock}
@@ -81,7 +81,7 @@ jobs:
81
81
  steps:
82
82
  - uses: actions/checkout@v4
83
83
 
84
- - name: SchemeLens Check
84
+ - name: SchemaLens Check
85
85
  uses: schemalens/schemalens-check@v1
86
86
  with:
87
87
  api-key: \${{ secrets.SCHEMALENS_API_KEY }}
@@ -19,12 +19,12 @@ async function initCommand() {
19
19
  console.error(chalk_1.default.red(`\nConfig already exists at ${fullPath}\n`));
20
20
  process.exit(1);
21
21
  }
22
- console.log(chalk_1.default.bold('\n SchemeLens — Project Setup\n'));
22
+ console.log(chalk_1.default.bold('\n SchemaLens — Project Setup\n'));
23
23
  console.log(chalk_1.default.dim(' This creates schema/_meta/.schemalens.yml in your repo.\n'));
24
24
  // --- Phase A: SaaS Linking (asked first) ---
25
- console.log(chalk_1.default.dim(' Optional: link to SchemeLens SaaS for dashboard sync.\n'));
25
+ console.log(chalk_1.default.dim(' Optional: link to SchemaLens SaaS for dashboard sync.\n'));
26
26
  const linkToSaas = await (0, prompts_1.confirm)({
27
- message: 'Link to SchemeLens SaaS project?',
27
+ message: 'Link to SchemaLens SaaS project?',
28
28
  default: true,
29
29
  });
30
30
  let projectId;
@@ -155,7 +155,7 @@ async function initCommand() {
155
155
  // --- Success ---
156
156
  console.log(chalk_1.default.green(`\n ✓ Created ${CONFIG_PATH}\n`));
157
157
  if (useLinkedMode) {
158
- console.log(chalk_1.default.dim(' Connection credentials will be fetched from SchemeLens SaaS.\n'));
158
+ console.log(chalk_1.default.dim(' Connection credentials will be fetched from SchemaLens SaaS.\n'));
159
159
  console.log(chalk_1.default.dim(' Make sure your API key is set:\n') +
160
160
  chalk_1.default.cyan(` export ${apiKeyVarName}=slk_...\n`));
161
161
  }
@@ -166,6 +166,9 @@ async function initCommand() {
166
166
  console.log(chalk_1.default.bold(' Next steps:\n'));
167
167
  console.log(` ${chalk_1.default.cyan(`schemalens pull --env ${firstEnv}`)} # snapshot your live database`);
168
168
  console.log(` ${chalk_1.default.cyan(`schemalens status --env ${firstEnv}`)} # see what changed\n`);
169
+ console.log(chalk_1.default.bold(' AI Integration:\n'));
170
+ console.log(` Add the SchemaLens skill to your AI coding agent:`);
171
+ console.log(` ${chalk_1.default.cyan('https://www.schemalens.dev/skills/claude-code.md')}\n`);
169
172
  }
170
173
  /** Collects environments manually via interactive prompts. */
171
174
  async function collectManualEnvironments(environments) {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ function isLegacyLayout() {
20
20
  return false;
21
21
  }
22
22
  async function migrateCommand() {
23
- console.log(chalk_1.default.bold('\n SchemeLens Migrate — Schema Directory Layout\n'));
23
+ console.log(chalk_1.default.bold('\n SchemaLens Migrate — Schema Directory Layout\n'));
24
24
  if (!isLegacyLayout()) {
25
25
  console.log(chalk_1.default.green(' Already using environment-scoped layout. Nothing to do.\n'));
26
26
  return;
@@ -63,17 +63,17 @@ async function pullCommand(env) {
63
63
  }
64
64
  const total = result.created.length + result.updated.length + result.unchanged.length;
65
65
  console.log(chalk_1.default.bold(`\n Total: ${total} files\n`));
66
- // Auto-sync to SchemeLens cloud if configured
66
+ // Auto-sync to SchemaLens cloud if configured
67
67
  const projectId = config.project_id;
68
68
  const apiKey = (0, config_1.resolveEnvVar)(config.api_key);
69
69
  if (projectId && apiKey) {
70
- const syncSpinner = (0, ora_1.default)('Syncing snapshot to SchemeLens...').start();
70
+ const syncSpinner = (0, ora_1.default)('Syncing snapshot to SchemaLens...').start();
71
71
  const syncResult = await (0, sync_1.syncToCloud)(projectId, apiKey, 'pull', env, gitContext);
72
72
  if (syncResult) {
73
- syncSpinner.succeed(chalk_1.default.green(`Snapshot synced to SchemeLens cloud (${syncResult.object_count} objects, ${syncResult.changed_count} changed)`));
73
+ syncSpinner.succeed(chalk_1.default.green(`Snapshot synced to SchemaLens cloud (${syncResult.object_count} objects, ${syncResult.changed_count} changed)`));
74
74
  }
75
75
  else {
76
- syncSpinner.warn(chalk_1.default.yellow('SchemeLens sync skipped (see warning above)'));
76
+ syncSpinner.warn(chalk_1.default.yellow('SchemaLens sync skipped (see warning above)'));
77
77
  }
78
78
  }
79
79
  }
package/dist/index.js CHANGED
@@ -15,15 +15,19 @@ const deploy_1 = require("./commands/deploy");
15
15
  const migrate_1 = require("./commands/migrate");
16
16
  const ci_1 = require("./commands/ci");
17
17
  const init_action_1 = require("./commands/init-action");
18
+ const build_1 = require("./commands/build");
19
+ const fs_1 = require("fs");
20
+ const path_1 = require("path");
21
+ const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '..', 'package.json'), 'utf-8'));
18
22
  const program = new commander_1.Command();
19
23
  program
20
24
  .name('schemalens')
21
25
  .description('Schema version control for PostgreSQL / Supabase')
22
- .version('0.1.0')
26
+ .version(pkg.version)
23
27
  .option('--verbose', 'Show detailed output including skip reasons', false);
24
28
  program
25
29
  .command('init')
26
- .description('Set up SchemeLens in this repository (creates schema/_meta/.schemalens.yml)')
30
+ .description('Set up SchemaLens in this repository (creates schema/_meta/.schemalens.yml)')
27
31
  .action(async () => {
28
32
  try {
29
33
  await (0, init_1.initCommand)();
@@ -119,7 +123,7 @@ program
119
123
  });
120
124
  program
121
125
  .command('init-action')
122
- .description('Generate a GitHub Actions workflow for SchemeLens CI checks')
126
+ .description('Generate a GitHub Actions workflow for SchemaLens CI checks')
123
127
  .action(async () => {
124
128
  try {
125
129
  await (0, init_action_1.initActionCommand)();
@@ -149,5 +153,20 @@ program
149
153
  process.exit(1);
150
154
  }
151
155
  });
156
+ program
157
+ .command('build')
158
+ .description('Apply migration files to a local database and snapshot the resulting schema')
159
+ .requiredOption('--migrations <path>', 'Directory containing .sql migration files (applied in lexicographic order)')
160
+ .option('--env <env>', 'Environment name for output schema files (default: local)', 'local')
161
+ .option('--db <connection-string>', 'Blank local database to apply migrations to (defaults to DATABASE_URL)')
162
+ .action(async (opts) => {
163
+ try {
164
+ await (0, build_1.buildCommand)({ migrations: opts.migrations, env: opts.env, db: opts.db });
165
+ }
166
+ catch (err) {
167
+ console.error(chalk_1.default.red(`\nError: ${err.message}\n`));
168
+ process.exit(1);
169
+ }
170
+ });
152
171
  program.parse();
153
172
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -79,7 +79,7 @@ async function resolveConnectionString(config, env) {
79
79
  }
80
80
  // 3. Nothing configured
81
81
  throw new Error(`No connection_string configured for environment "${env}".\n` +
82
- `Either add a connection_string to .schemalens.yml, or link to SchemeLens SaaS:\n` +
82
+ `Either add a connection_string to .schemalens.yml, or link to SchemaLens SaaS:\n` +
83
83
  ` - Set project_id and api_key in .schemalens.yml\n` +
84
84
  ` - Run 'schemalens init' to reconfigure`);
85
85
  }
@@ -92,7 +92,7 @@ async function fetchEnvironmentsFromSaaS(projectId, apiKey) {
92
92
  });
93
93
  }
94
94
  catch (err) {
95
- throw new Error(`Could not reach SchemeLens SaaS: ${err.message}`);
95
+ throw new Error(`Could not reach SchemaLens SaaS: ${err.message}`);
96
96
  }
97
97
  if (!response.ok) {
98
98
  if (response.status === 401) {
@@ -102,7 +102,7 @@ async function fetchEnvironmentsFromSaaS(projectId, apiKey) {
102
102
  throw new Error(`Project ${projectId} not found.`);
103
103
  }
104
104
  const body = await response.text().catch(() => '');
105
- throw new Error(`SchemeLens returned ${response.status}: ${body}`);
105
+ throw new Error(`SchemaLens returned ${response.status}: ${body}`);
106
106
  }
107
107
  const data = await response.json();
108
108
  return Array.isArray(data) ? data : [];
@@ -116,22 +116,22 @@ async function fetchConnectionFromSaaS(projectId, apiKey, env) {
116
116
  });
117
117
  }
118
118
  catch (err) {
119
- throw new Error(`Could not reach SchemeLens SaaS to fetch connection details: ${err.message}`);
119
+ throw new Error(`Could not reach SchemaLens SaaS to fetch connection details: ${err.message}`);
120
120
  }
121
121
  if (!response.ok) {
122
122
  const body = await response.text().catch(() => '');
123
123
  if (response.status === 401) {
124
- throw new Error(`SchemeLens API key is invalid or expired. Regenerate it in Project Settings.`);
124
+ throw new Error(`SchemaLens API key is invalid or expired. Regenerate it in Project Settings.`);
125
125
  }
126
126
  if (response.status === 404) {
127
- throw new Error(`Project ${projectId} not found in SchemeLens. Check your project_id in .schemalens.yml.`);
127
+ throw new Error(`Project ${projectId} not found in SchemaLens. Check your project_id in .schemalens.yml.`);
128
128
  }
129
- throw new Error(`SchemeLens returned ${response.status}: ${body}`);
129
+ throw new Error(`SchemaLens returned ${response.status}: ${body}`);
130
130
  }
131
131
  const data = await response.json();
132
132
  if (!data.connection_string) {
133
- throw new Error(`SchemeLens project has no database credentials stored. ` +
134
- `Add your database host and password in the SchemeLens dashboard → Project Settings.`);
133
+ throw new Error(`SchemaLens project has no database credentials stored. ` +
134
+ `Add your database host and password in the SchemaLens dashboard → Project Settings.`);
135
135
  }
136
136
  return data.connection_string;
137
137
  }
@@ -6,7 +6,7 @@ export interface SyncResult {
6
6
  changed_count: number;
7
7
  }
8
8
  /**
9
- * Notify the SchemeLens SaaS to take a snapshot after a CLI operation.
9
+ * Notify the SchemaLens SaaS to take a snapshot after a CLI operation.
10
10
  * Silently skips if projectId or apiKey are missing.
11
11
  * Never throws — errors are returned as warnings so the CLI command still succeeds.
12
12
  */
package/dist/lib/sync.js CHANGED
@@ -7,7 +7,7 @@ const BASE_URL = process.env.SCHEMALENS_BASE_URL ??
7
7
  : 'https://www.schemalens.dev');
8
8
  const SYNC_URL = `${BASE_URL}/api/cli/sync`;
9
9
  /**
10
- * Notify the SchemeLens SaaS to take a snapshot after a CLI operation.
10
+ * Notify the SchemaLens SaaS to take a snapshot after a CLI operation.
11
11
  * Silently skips if projectId or apiKey are missing.
12
12
  * Never throws — errors are returned as warnings so the CLI command still succeeds.
13
13
  */
@@ -33,13 +33,13 @@ async function syncToCloud(projectId, apiKey, trigger, environment, gitContext)
33
33
  });
34
34
  if (!response.ok) {
35
35
  const body = await response.text();
36
- process.stderr.write(` ⚠ SchemeLens sync warning: ${response.status} ${body}\n`);
36
+ process.stderr.write(` ⚠ SchemaLens sync warning: ${response.status} ${body}\n`);
37
37
  return null;
38
38
  }
39
39
  return await response.json();
40
40
  }
41
41
  catch (err) {
42
- process.stderr.write(` ⚠ SchemeLens sync warning: ${err.message}\n`);
42
+ process.stderr.write(` ⚠ SchemaLens sync warning: ${err.message}\n`);
43
43
  return null;
44
44
  }
45
45
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schemalens/cli",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "SchemaLens CLI — pull, diff, and deploy PostgreSQL schemas",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -13,16 +13,18 @@
13
13
  },
14
14
  "dependencies": {
15
15
  "@inquirer/prompts": "^8.3.2",
16
- "@schemalens/introspector": "^0.3.0",
16
+ "@schemalens/introspector": "^0.4.0",
17
17
  "chalk": "^4.1.2",
18
18
  "commander": "^12.1.0",
19
19
  "dotenv": "^16.4.7",
20
20
  "js-yaml": "^4.1.0",
21
- "ora": "^5.4.1"
21
+ "ora": "^5.4.1",
22
+ "pg": "^8.13.1"
22
23
  },
23
24
  "devDependencies": {
24
25
  "@types/js-yaml": "^4.0.9",
25
26
  "@types/node": "^22.0.0",
27
+ "@types/pg": "^8.11.10",
26
28
  "tsx": "^4.19.0",
27
29
  "typescript": "^5.7.0"
28
30
  },