@astrojs/db 0.14.1 → 0.14.2

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.
@@ -1,9 +1,10 @@
1
+ import { stripVTControlCharacters } from "node:util";
2
+ import { LibsqlError } from "@libsql/client";
1
3
  import deepDiff from "deep-diff";
2
4
  import { sql } from "drizzle-orm";
3
5
  import { SQLiteAsyncDialect } from "drizzle-orm/sqlite-core";
4
6
  import * as color from "kleur/colors";
5
7
  import { customAlphabet } from "nanoid";
6
- import stripAnsi from "strip-ansi";
7
8
  import { hasPrimaryKey } from "../../runtime/index.js";
8
9
  import { createRemoteDatabaseClient } from "../../runtime/index.js";
9
10
  import { isSerializedSQL } from "../../runtime/types.js";
@@ -319,7 +320,13 @@ async function getDbCurrentSnapshot(appToken, remoteUrl) {
319
320
  );
320
321
  return JSON.parse(res.snapshot);
321
322
  } catch (error) {
322
- if (error.code === "SQLITE_UNKNOWN") {
323
+ if (error instanceof LibsqlError && // If the schema was never pushed to the database yet the table won't exist.
324
+ // Treat a missing snapshot table as an empty table.
325
+ // When connecting to a remote database in that condition
326
+ // the query will fail with the following error code and message.
327
+ (error.code === "SQLITE_UNKNOWN" && error.message === "SQLITE_UNKNOWN: SQLite error: no such table: _astro_db_snapshot" || // When connecting to a local or in-memory database that does not have a snapshot table yet
328
+ // the query will fail with the following error code and message.
329
+ error.code === "SQLITE_ERROR" && error.message === "SQLITE_ERROR: no such table: _astro_db_snapshot")) {
323
330
  return;
324
331
  }
325
332
  throw error;
@@ -376,7 +383,7 @@ function formatDataLossMessage(confirmations, isColor = true) {
376
383
  );
377
384
  let finalMessage = messages.join("\n");
378
385
  if (!isColor) {
379
- finalMessage = stripAnsi(finalMessage);
386
+ finalMessage = stripVTControlCharacters(finalMessage);
380
387
  }
381
388
  return finalMessage;
382
389
  }
@@ -27,7 +27,7 @@ function printHelp({
27
27
  message.push(
28
28
  linebreak(),
29
29
  ` ${bgGreen(black(` ${commandName} `))} ${green(
30
- `v${"0.14.1"}`
30
+ `v${"0.14.2"}`
31
31
  )} ${headline}`
32
32
  );
33
33
  }
@@ -107,7 +107,11 @@ function getStudioVirtualModContents({
107
107
  }
108
108
  function dbUrlArg() {
109
109
  const dbStr = JSON.stringify(dbInfo.url);
110
- return dbInfo.type === "studio" ? `import.meta.env.ASTRO_STUDIO_REMOTE_DB_URL ?? ${dbStr}` : `import.meta.env.ASTRO_DB_REMOTE_URL ?? ${dbStr}`;
110
+ if (isBuild) {
111
+ return dbInfo.type === "studio" ? `import.meta.env.ASTRO_STUDIO_REMOTE_DB_URL ?? ${dbStr}` : `import.meta.env.ASTRO_DB_REMOTE_URL ?? ${dbStr}`;
112
+ } else {
113
+ return dbStr;
114
+ }
111
115
  }
112
116
  return `
113
117
  import {asDrizzleTable, createRemoteDatabaseClient} from ${RUNTIME_IMPORT};
@@ -31,15 +31,21 @@ const remoteResultSchema = z.object({
31
31
  });
32
32
  function createRemoteDatabaseClient(options) {
33
33
  const remoteUrl = new URL(options.remoteUrl);
34
- return options.dbType === "studio" ? createStudioDatabaseClient(options.appToken, remoteUrl) : createRemoteLibSQLClient(options.appToken, remoteUrl);
34
+ return options.dbType === "studio" ? createStudioDatabaseClient(options.appToken, remoteUrl) : createRemoteLibSQLClient(options.appToken, remoteUrl, options.remoteUrl.toString());
35
35
  }
36
- function createRemoteLibSQLClient(appToken, remoteDbURL) {
36
+ function createRemoteLibSQLClient(appToken, remoteDbURL, rawUrl) {
37
37
  const options = Object.fromEntries(remoteDbURL.searchParams.entries());
38
38
  remoteDbURL.search = "";
39
+ let url = remoteDbURL.toString();
40
+ if (remoteDbURL.protocol === "memory:") {
41
+ url = ":memory:";
42
+ } else if (remoteDbURL.protocol === "file:" && remoteDbURL.pathname.startsWith("/") && !rawUrl.startsWith("file:/")) {
43
+ url = "file:" + remoteDbURL.pathname.substring(1);
44
+ }
39
45
  const client = createClient({
40
46
  ...options,
41
47
  authToken: appToken,
42
- url: remoteDbURL.protocol === "memory:" ? ":memory:" : remoteDbURL.toString()
48
+ url
43
49
  });
44
50
  return drizzleLibsql(client);
45
51
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astrojs/db",
3
- "version": "0.14.1",
3
+ "version": "0.14.2",
4
4
  "description": "Add libSQL and Astro Studio support to your Astro site",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -62,7 +62,7 @@
62
62
  "astro-integration"
63
63
  ],
64
64
  "dependencies": {
65
- "@libsql/client": "^0.10.0",
65
+ "@libsql/client": "^0.14.0",
66
66
  "async-listen": "^3.0.1",
67
67
  "deep-diff": "^1.0.2",
68
68
  "drizzle-orm": "^0.31.2",
@@ -72,7 +72,6 @@
72
72
  "open": "^10.1.0",
73
73
  "ora": "^8.1.0",
74
74
  "prompts": "^2.4.2",
75
- "strip-ansi": "^7.1.0",
76
75
  "yargs-parser": "^21.1.1",
77
76
  "zod": "^3.23.8",
78
77
  "@astrojs/studio": "0.1.1"
@@ -82,9 +81,9 @@
82
81
  "@types/prompts": "^2.4.9",
83
82
  "@types/yargs-parser": "^21.0.3",
84
83
  "cheerio": "1.0.0",
85
- "typescript": "^5.5.4",
86
- "vite": "^5.4.2",
87
- "astro": "4.15.3",
84
+ "typescript": "^5.6.2",
85
+ "vite": "^5.4.8",
86
+ "astro": "4.15.12",
88
87
  "astro-scripts": "0.0.14"
89
88
  },
90
89
  "scripts": {