mirror of
https://github.com/withastro/astro.git
synced 2024-12-16 21:46:22 -05:00
🐛 Fix isDbError()-guard does not work (#12416)
* isDbError() does not work Fixes #12400 * lint&format * Update packages/db/src/runtime/virtual.ts Co-authored-by: Bjorn Lu <bjornlu.dev@gmail.com> * use isDbError instead of "instanceof LibsqlError" * unused imports * mv isDbError to utils * Update .changeset/breezy-radios-grab.md --------- Co-authored-by: Bjorn Lu <bjornlu.dev@gmail.com> Co-authored-by: Emanuele Stoppa <my.burning@gmail.com>
This commit is contained in:
parent
929ce28325
commit
618de283f5
7 changed files with 20 additions and 17 deletions
5
.changeset/breezy-radios-grab.md
Normal file
5
.changeset/breezy-radios-grab.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'@astrojs/db': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Fixes `isDbError()` guard for `LibsqlError`
|
|
@ -1,5 +1,4 @@
|
||||||
import { existsSync } from 'node:fs';
|
import { existsSync } from 'node:fs';
|
||||||
import { LibsqlError } from '@libsql/client';
|
|
||||||
import type { AstroConfig } from 'astro';
|
import type { AstroConfig } from 'astro';
|
||||||
import { green } from 'kleur/colors';
|
import { green } from 'kleur/colors';
|
||||||
import type { Arguments } from 'yargs-parser';
|
import type { Arguments } from 'yargs-parser';
|
||||||
|
@ -16,6 +15,7 @@ import {
|
||||||
import { bundleFile, importBundledFile } from '../../../load-file.js';
|
import { bundleFile, importBundledFile } from '../../../load-file.js';
|
||||||
import type { DBConfig } from '../../../types.js';
|
import type { DBConfig } from '../../../types.js';
|
||||||
import { getManagedRemoteToken } from '../../../utils.js';
|
import { getManagedRemoteToken } from '../../../utils.js';
|
||||||
|
import { isDbError } from '../../../../runtime/utils.js';
|
||||||
|
|
||||||
export async function cmd({
|
export async function cmd({
|
||||||
astroConfig,
|
astroConfig,
|
||||||
|
@ -64,9 +64,7 @@ export async function cmd({
|
||||||
await mod.default();
|
await mod.default();
|
||||||
console.info(`${green('✔')} File run successfully.`);
|
console.info(`${green('✔')} File run successfully.`);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e instanceof LibsqlError) {
|
if (isDbError(e)) throw new Error(EXEC_ERROR(e.message));
|
||||||
throw new Error(EXEC_ERROR(e.message));
|
else throw e;
|
||||||
}
|
|
||||||
throw e;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import { stripVTControlCharacters } from 'node:util';
|
import { stripVTControlCharacters } from 'node:util';
|
||||||
import { LibsqlError } from '@libsql/client';
|
|
||||||
import deepDiff from 'deep-diff';
|
import deepDiff from 'deep-diff';
|
||||||
import { sql } from 'drizzle-orm';
|
import { sql } from 'drizzle-orm';
|
||||||
import { SQLiteAsyncDialect } from 'drizzle-orm/sqlite-core';
|
import { SQLiteAsyncDialect } from 'drizzle-orm/sqlite-core';
|
||||||
|
@ -8,7 +7,7 @@ import { customAlphabet } from 'nanoid';
|
||||||
import { hasPrimaryKey } from '../../runtime/index.js';
|
import { hasPrimaryKey } from '../../runtime/index.js';
|
||||||
import { createRemoteDatabaseClient } from '../../runtime/index.js';
|
import { createRemoteDatabaseClient } from '../../runtime/index.js';
|
||||||
import { isSerializedSQL } from '../../runtime/types.js';
|
import { isSerializedSQL } from '../../runtime/types.js';
|
||||||
import { safeFetch } from '../../runtime/utils.js';
|
import { isDbError, safeFetch } from '../../runtime/utils.js';
|
||||||
import { MIGRATION_VERSION } from '../consts.js';
|
import { MIGRATION_VERSION } from '../consts.js';
|
||||||
import { RENAME_COLUMN_ERROR, RENAME_TABLE_ERROR } from '../errors.js';
|
import { RENAME_COLUMN_ERROR, RENAME_TABLE_ERROR } from '../errors.js';
|
||||||
import {
|
import {
|
||||||
|
@ -454,7 +453,7 @@ async function getDbCurrentSnapshot(
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Don't handle errors that are not from libSQL
|
// Don't handle errors that are not from libSQL
|
||||||
if (
|
if (
|
||||||
error instanceof LibsqlError &&
|
isDbError(error) &&
|
||||||
// If the schema was never pushed to the database yet the table won't exist.
|
// If the schema was never pushed to the database yet the table won't exist.
|
||||||
// Treat a missing snapshot table as an empty table.
|
// Treat a missing snapshot table as an empty table.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@ import { mkdir, writeFile } from 'node:fs/promises';
|
||||||
import { dirname } from 'node:path';
|
import { dirname } from 'node:path';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
import type { ManagedAppToken } from '@astrojs/studio';
|
import type { ManagedAppToken } from '@astrojs/studio';
|
||||||
import { LibsqlError } from '@libsql/client';
|
|
||||||
import type { AstroIntegration } from 'astro';
|
import type { AstroIntegration } from 'astro';
|
||||||
import { blue, yellow } from 'kleur/colors';
|
import { blue, yellow } from 'kleur/colors';
|
||||||
import {
|
import {
|
||||||
|
@ -15,7 +14,7 @@ import {
|
||||||
mergeConfig,
|
mergeConfig,
|
||||||
} from 'vite';
|
} from 'vite';
|
||||||
import parseArgs from 'yargs-parser';
|
import parseArgs from 'yargs-parser';
|
||||||
import { AstroDbError } from '../../runtime/utils.js';
|
import { AstroDbError, isDbError } from '../../runtime/utils.js';
|
||||||
import { CONFIG_FILE_NAMES, DB_PATH, VIRTUAL_MODULE_ID } from '../consts.js';
|
import { CONFIG_FILE_NAMES, DB_PATH, VIRTUAL_MODULE_ID } from '../consts.js';
|
||||||
import { EXEC_DEFAULT_EXPORT_ERROR, EXEC_ERROR } from '../errors.js';
|
import { EXEC_DEFAULT_EXPORT_ERROR, EXEC_ERROR } from '../errors.js';
|
||||||
import { resolveDbConfig } from '../load-file.js';
|
import { resolveDbConfig } from '../load-file.js';
|
||||||
|
@ -206,7 +205,7 @@ async function executeSeedFile({
|
||||||
try {
|
try {
|
||||||
await mod.default();
|
await mod.default();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e instanceof LibsqlError) {
|
if (isDbError(e)) {
|
||||||
throw new AstroDbError(EXEC_ERROR(e.message));
|
throw new AstroDbError(EXEC_ERROR(e.message));
|
||||||
}
|
}
|
||||||
throw e;
|
throw e;
|
||||||
|
|
|
@ -42,6 +42,10 @@ export class DetailedLibsqlError extends LibsqlError {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isDbError(err: unknown): err is LibsqlError {
|
||||||
|
return err instanceof LibsqlError || (err instanceof Error && (err as any).libsqlError === true)
|
||||||
|
}
|
||||||
|
|
||||||
function slash(path: string) {
|
function slash(path: string) {
|
||||||
const isExtendedLengthPath = path.startsWith('\\\\?\\');
|
const isExtendedLengthPath = path.startsWith('\\\\?\\');
|
||||||
|
|
||||||
|
|
|
@ -21,10 +21,6 @@ function createColumn<S extends string, T extends Record<string, unknown>>(type:
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isDbError(err: unknown): err is LibsqlError {
|
|
||||||
return err instanceof LibsqlError;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const column = {
|
export const column = {
|
||||||
number: <T extends NumberColumnOpts>(opts: T = {} as T) => {
|
number: <T extends NumberColumnOpts>(opts: T = {} as T) => {
|
||||||
return createColumn('number', opts) satisfies { type: 'number' };
|
return createColumn('number', opts) satisfies { type: 'number' };
|
||||||
|
@ -90,3 +86,4 @@ export {
|
||||||
} from 'drizzle-orm';
|
} from 'drizzle-orm';
|
||||||
|
|
||||||
export { alias } from 'drizzle-orm/sqlite-core';
|
export { alias } from 'drizzle-orm/sqlite-core';
|
||||||
|
export { isDbError } from './utils.js';
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import { createServer } from 'node:http';
|
import { createServer } from 'node:http';
|
||||||
import { LibsqlError, createClient } from '@libsql/client';
|
import { createClient } from '@libsql/client';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
import { cli } from '../dist/core/cli/index.js';
|
import { cli } from '../dist/core/cli/index.js';
|
||||||
import { resolveDbConfig } from '../dist/core/load-file.js';
|
import { resolveDbConfig } from '../dist/core/load-file.js';
|
||||||
import { getCreateIndexQueries, getCreateTableQuery } from '../dist/core/queries.js';
|
import { getCreateIndexQueries, getCreateTableQuery } from '../dist/core/queries.js';
|
||||||
|
import { isDbError } from '../dist/runtime/utils.js';
|
||||||
|
|
||||||
const singleQuerySchema = z.object({
|
const singleQuerySchema = z.object({
|
||||||
sql: z.string(),
|
sql: z.string(),
|
||||||
|
@ -142,7 +143,7 @@ function createRemoteDbServer() {
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
success: false,
|
success: false,
|
||||||
error: {
|
error: {
|
||||||
code: e instanceof LibsqlError ? e.code : 'SQLITE_QUERY_FAILED',
|
code: isDbError(e) ? e.code : 'SQLITE_QUERY_FAILED',
|
||||||
details: e.message,
|
details: e.message,
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
|
|
Loading…
Reference in a new issue