create-kide-app 0.0.12 → 0.0.14

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/index.js CHANGED
@@ -113,13 +113,8 @@ async function main() {
113
113
  if (target === "cloudflare") {
114
114
  delete pkg.dependencies["@astrojs/node"];
115
115
  pkg.dependencies["@astrojs/cloudflare"] = "^13.0.0";
116
-
117
- // Move better-sqlite3 to devDependencies — drizzle-kit needs it to push schema to local D1
118
- if (pkg.dependencies["better-sqlite3"]) {
119
- if (!pkg.devDependencies) pkg.devDependencies = {};
120
- pkg.devDependencies["better-sqlite3"] = pkg.dependencies["better-sqlite3"];
121
- delete pkg.dependencies["better-sqlite3"];
122
- }
116
+ // libsql is for local target only; Cloudflare uses D1 directly
117
+ delete pkg.dependencies["@libsql/client"];
123
118
  delete pkg.dependencies["sharp"];
124
119
 
125
120
  let wranglerContent = readFileSync(path.join(targetDir, "wrangler.toml"), "utf-8");
@@ -150,12 +145,6 @@ async function main() {
150
145
  s.start("Installing dependencies");
151
146
  try {
152
147
  execSync(pm.install, { cwd: projectDir, stdio: "pipe" });
153
- // Rebuild native deps that pnpm may have skipped (e.g. better-sqlite3 bindings)
154
- try {
155
- execSync("pnpm rebuild better-sqlite3", { cwd: projectDir, stdio: "pipe" });
156
- } catch {
157
- // Ignore — only matters for local target
158
- }
159
148
  s.stop("Dependencies installed");
160
149
  } catch {
161
150
  s.stop(`${pm.install} failed — run it manually`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-kide-app",
3
- "version": "0.0.12",
3
+ "version": "0.0.14",
4
4
  "description": "Scaffold a new Kide CMS project",
5
5
  "author": "Matti Hernesniemi",
6
6
  "license": "MIT",
@@ -18,10 +18,10 @@
18
18
  "@kidecms/core": "latest",
19
19
  "@astrojs/node": "^10.0.1",
20
20
  "@astrojs/react": "^5.0.0",
21
+ "@libsql/client": "^0.15.0",
21
22
  "@tailwindcss/typography": "^0.5.19",
22
23
  "@tailwindcss/vite": "^4.2.1",
23
24
  "astro": "^6.0.4",
24
- "better-sqlite3": "^12.6.2",
25
25
  "drizzle-orm": "^0.45.1",
26
26
  "react": "^19.2.4",
27
27
  "react-dom": "^19.2.4",
@@ -29,7 +29,6 @@
29
29
  },
30
30
  "devDependencies": {
31
31
  "@astrojs/check": "^0.9.7",
32
- "@types/better-sqlite3": "^7.6.13",
33
32
  "@types/react": "^19.2.14",
34
33
  "@types/react-dom": "^19.2.3",
35
34
  "drizzle-kit": "^0.31.9",
@@ -1,36 +1,32 @@
1
1
  import { mkdirSync } from "node:fs";
2
2
  import path from "node:path";
3
- import Database from "better-sqlite3";
4
- import { drizzle } from "drizzle-orm/better-sqlite3";
5
- import { migrate } from "drizzle-orm/better-sqlite3/migrator";
3
+ import { createClient, type Client } from "@libsql/client";
4
+ import { drizzle } from "drizzle-orm/libsql";
5
+ import { migrate } from "drizzle-orm/libsql/migrator";
6
6
 
7
7
  let dbInstance: ReturnType<typeof drizzle> | null = null;
8
- let sqliteInstance: InstanceType<typeof Database> | null = null;
8
+ let clientInstance: Client | null = null;
9
9
  let migrated = false;
10
10
 
11
- const getDbPath = () => {
11
+ const getDbUrl = () => {
12
12
  const url = process.env.CMS_DATABASE_URL;
13
13
  if (url) return url;
14
- return path.join(process.cwd(), "data", "cms.db");
14
+ const dbPath = path.join(process.cwd(), "data", "cms.db");
15
+ mkdirSync(path.dirname(dbPath), { recursive: true });
16
+ return `file:${dbPath}`;
15
17
  };
16
18
 
17
19
  export const getDb = async () => {
18
20
  if (dbInstance) return dbInstance;
19
21
 
20
- const dbPath = getDbPath();
21
- mkdirSync(path.dirname(dbPath), { recursive: true });
22
-
23
- sqliteInstance = new Database(dbPath);
24
- sqliteInstance.pragma("journal_mode = WAL");
25
- sqliteInstance.pragma("foreign_keys = ON");
26
-
27
- dbInstance = drizzle(sqliteInstance);
22
+ clientInstance = createClient({ url: getDbUrl() });
23
+ dbInstance = drizzle(clientInstance);
28
24
 
29
25
  // Auto-run pending migrations on first connection (production only — dev uses drizzle-kit push)
30
26
  if (!migrated) {
31
27
  const migrationsFolder = path.join(process.cwd(), "src/cms/migrations");
32
28
  try {
33
- migrate(dbInstance, { migrationsFolder });
29
+ await migrate(dbInstance, { migrationsFolder });
34
30
  } catch {
35
31
  // Ignore migration errors — tables may already exist via drizzle-kit push in dev
36
32
  }
@@ -41,9 +37,9 @@ export const getDb = async () => {
41
37
  };
42
38
 
43
39
  export const closeDb = () => {
44
- if (sqliteInstance) {
45
- sqliteInstance.close();
46
- sqliteInstance = null;
40
+ if (clientInstance) {
41
+ clientInstance.close();
42
+ clientInstance = null;
47
43
  dbInstance = null;
48
44
  migrated = false;
49
45
  }
@@ -4,7 +4,8 @@ export default defineConfig({
4
4
  schema: "./src/cms/.generated/schema.ts",
5
5
  out: "./src/cms/migrations",
6
6
  dialect: "sqlite",
7
+ driver: "libsql",
7
8
  dbCredentials: {
8
- url: process.env.CMS_DATABASE_URL ?? "./data/cms.db",
9
+ url: process.env.CMS_DATABASE_URL ?? "file:./data/cms.db",
9
10
  },
10
11
  });