@xleddyl/nuxt-cms 0.1.14 → 0.1.17

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/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@xleddyl/nuxt-cms",
3
3
  "configKey": "cms",
4
- "version": "0.1.14",
4
+ "version": "0.1.17",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "unknown"
package/dist/module.mjs CHANGED
@@ -557,7 +557,7 @@ const module$1 = defineNuxtModule({
557
557
  ` dialect: '${dialect}',`,
558
558
  ` schema: '${toPosix(schemaTemplate.dst)}',`,
559
559
  ` out: '${toPosix(migrationsDir)}',`,
560
- driver === "postgres" ? ` dbCredentials: { url: process.env.NUXT_CMS_DATABASE_URL ?? '${databaseUrl}' },` : driver === "libsql" ? ` dbCredentials: { url: process.env.NUXT_CMS_DATABASE_URL ?? '${databaseUrl || `file:${toPosix(resolvedDbPath)}`}', authToken: process.env.NUXT_CMS_DATABASE_AUTH_TOKEN ?? '${databaseAuthToken}' || undefined },` : ` dbCredentials: { url: '${toPosix(resolvedDbPath)}' },`,
560
+ driver === "postgres" ? ` dbCredentials: { url: process.env.NUXT_CMS_DATABASE_URL ?? '${databaseUrl}' },` : driver === "libsql" ? ` dbCredentials: { url: process.env.NUXT_CMS_DATABASE_URL ?? '${databaseUrl || `file:${toPosix(resolvedDbPath)}`}', authToken: (process.env.NUXT_CMS_DATABASE_AUTH_TOKEN ?? '${databaseAuthToken}') || undefined },` : ` dbCredentials: { url: '${toPosix(resolvedDbPath)}' },`,
561
561
  `}`,
562
562
  ``
563
563
  ].join("\n")
@@ -0,0 +1,5 @@
1
+ export interface GenerateMigrationsOptions {
2
+ root?: string;
3
+ configPath?: string;
4
+ }
5
+ export declare function generateMigrations(opts?: GenerateMigrationsOptions): Promise<void>;
@@ -0,0 +1,22 @@
1
+ import { spawn } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { createRequire } from "node:module";
4
+ import { dirname, join } from "node:path";
5
+ export async function generateMigrations(opts = {}) {
6
+ const root = opts.root ?? process.cwd();
7
+ const configPath = opts.configPath ?? join(root, ".nuxt/cms/drizzle.config.ts");
8
+ if (!existsSync(configPath)) {
9
+ throw new Error(
10
+ `[nuxt-cms] drizzle config not found at ${configPath} \u2014 run \`nuxi prepare\` first.`
11
+ );
12
+ }
13
+ const require = createRequire(import.meta.url);
14
+ const bin = join(dirname(require.resolve("drizzle-kit")), "bin.cjs");
15
+ const code = await new Promise((done) => {
16
+ spawn(process.execPath, [bin, "generate", `--config=${configPath}`], {
17
+ cwd: root,
18
+ stdio: "inherit"
19
+ }).on("close", (c) => done(c ?? 1)).on("error", () => done(1));
20
+ });
21
+ if (code !== 0) throw new Error(`[nuxt-cms] drizzle-kit generate failed (exit ${code})`);
22
+ }
@@ -0,0 +1,27 @@
1
+ import { customId, ID_LENGTH } from './server/utils/custom-id.js';
2
+ export { customId, ID_LENGTH };
3
+ export type SeedDriver = 'sqlite' | 'libsql' | 'postgres';
4
+ export interface CmsSeederOptions {
5
+ driver?: SeedDriver;
6
+ url?: string;
7
+ authToken?: string;
8
+ dbPath?: string;
9
+ migrationsDir?: string;
10
+ root?: string;
11
+ }
12
+ export declare function createCmsSeeder(opts?: CmsSeederOptions): Promise<{
13
+ db: import("drizzle-orm/libsql").LibSQLDatabase<Record<string, never>> & {
14
+ $client: import("@libsql/client").Client;
15
+ };
16
+ migrate: () => Promise<void>;
17
+ } | {
18
+ db: import("drizzle-orm/node-postgres").NodePgDatabase<Record<string, never>> & {
19
+ $client: import("pg").Pool;
20
+ };
21
+ migrate: () => Promise<void>;
22
+ } | {
23
+ db: import("drizzle-orm/better-sqlite3").BetterSQLite3Database<Record<string, never>> & {
24
+ $client: import("better-sqlite3").Database;
25
+ };
26
+ migrate: () => void;
27
+ }>;
@@ -0,0 +1,51 @@
1
+ import { mkdirSync } from "node:fs";
2
+ import { dirname, isAbsolute, resolve } from "node:path";
3
+ import { customId, ID_LENGTH } from "./server/utils/custom-id.js";
4
+ export { customId, ID_LENGTH };
5
+ function inferDriver(url) {
6
+ if (/^(libsql|wss?|https?):\/\//.test(url)) return "libsql";
7
+ if (/^postgres(ql)?:\/\//.test(url)) return "postgres";
8
+ return "sqlite";
9
+ }
10
+ export async function createCmsSeeder(opts = {}) {
11
+ const root = opts.root ?? process.cwd();
12
+ const url = opts.url ?? process.env.NUXT_CMS_DATABASE_URL ?? "";
13
+ const authToken = opts.authToken ?? process.env.NUXT_CMS_DATABASE_AUTH_TOKEN ?? "";
14
+ const driver = opts.driver ?? process.env.NUXT_CMS_DATABASE_DRIVER ?? inferDriver(url);
15
+ const dbPath = opts.dbPath ?? process.env.NUXT_CMS_DATABASE_PATH ?? "data/cms.db";
16
+ const resolvedDbPath = isAbsolute(dbPath) ? dbPath : resolve(root, dbPath);
17
+ const migrationsFolder = opts.migrationsDir ?? resolve(root, `server/db/migrations/${driver}`);
18
+ if (driver === "libsql") {
19
+ const { migrate: migrate2 } = await import("drizzle-orm/libsql/migrator");
20
+ const dbUrl = url || `file:${resolvedDbPath}`;
21
+ let db2;
22
+ if (dbUrl.startsWith("file:")) {
23
+ mkdirSync(dirname(resolvedDbPath), { recursive: true });
24
+ const { createClient } = await import("@libsql/client");
25
+ const { drizzle: drizzle2 } = await import("drizzle-orm/libsql");
26
+ db2 = drizzle2(createClient({ url: dbUrl, authToken: authToken || void 0 }));
27
+ } else {
28
+ const { createClient } = await import("@libsql/client/web");
29
+ const { drizzle: drizzle2 } = await import("drizzle-orm/libsql/web");
30
+ db2 = drizzle2(createClient({ url: dbUrl, authToken: authToken || void 0 }));
31
+ }
32
+ return { db: db2, migrate: () => migrate2(db2, { migrationsFolder }) };
33
+ }
34
+ if (driver === "postgres") {
35
+ if (!url) throw new Error("[nuxt-cms] seed: Postgres needs a url (NUXT_CMS_DATABASE_URL)");
36
+ const { drizzle: drizzle2 } = await import("drizzle-orm/node-postgres");
37
+ const { migrate: migrate2 } = await import("drizzle-orm/node-postgres/migrator");
38
+ const pg = (await import("pg")).default;
39
+ const db2 = drizzle2(new pg.Pool({ connectionString: url }));
40
+ return { db: db2, migrate: () => migrate2(db2, { migrationsFolder }) };
41
+ }
42
+ const Database = (await import("better-sqlite3")).default;
43
+ const { drizzle } = await import("drizzle-orm/better-sqlite3");
44
+ const { migrate } = await import("drizzle-orm/better-sqlite3/migrator");
45
+ mkdirSync(dirname(resolvedDbPath), { recursive: true });
46
+ const sqlite = new Database(resolvedDbPath);
47
+ sqlite.pragma("journal_mode = WAL");
48
+ sqlite.pragma("foreign_keys = ON");
49
+ const db = drizzle(sqlite);
50
+ return { db, migrate: () => migrate(db, { migrationsFolder }) };
51
+ }
@@ -1,15 +1,23 @@
1
1
  import { mkdirSync } from "node:fs";
2
+ import { createRequire } from "node:module";
2
3
  import { dirname } from "node:path";
3
- import { createClient } from "@libsql/client";
4
- import { drizzle } from "drizzle-orm/libsql";
4
+ import { createClient } from "@libsql/client/web";
5
+ import { drizzle } from "drizzle-orm/libsql/web";
5
6
  import { useRuntimeConfig } from "#imports";
6
7
  let _db = null;
7
8
  export function useDb() {
8
9
  if (!_db) {
9
10
  const { databaseUrl, databaseAuthToken, dbPath } = useRuntimeConfig().cms;
10
11
  const url = databaseUrl || `file:${dbPath}`;
11
- if (url.startsWith("file:")) mkdirSync(dirname(dbPath), { recursive: true });
12
- _db = drizzle(createClient({ url, authToken: databaseAuthToken || void 0 }));
12
+ if (url.startsWith("file:")) {
13
+ mkdirSync(dirname(dbPath), { recursive: true });
14
+ const require = createRequire(import.meta.url);
15
+ const { createClient: createNativeClient } = require("@libsql/client");
16
+ const { drizzle: drizzleNative } = require("drizzle-orm/libsql");
17
+ _db = drizzleNative(createNativeClient({ url, authToken: databaseAuthToken || void 0 }));
18
+ } else {
19
+ _db = drizzle(createClient({ url, authToken: databaseAuthToken || void 0 }));
20
+ }
13
21
  }
14
22
  return _db;
15
23
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xleddyl/nuxt-cms",
3
- "version": "0.1.14",
3
+ "version": "0.1.17",
4
4
  "description": "Lightweight CMS that ships with your Nuxt app: runs on the Nitro server, content types defined in code, /cms admin panel, GraphQL API, SQLite or Postgres. No external CMS needed!",
5
5
  "license": "MIT",
6
6
  "author": "Edoardo Alberti (https://github.com/xleddyl)",
@@ -38,6 +38,14 @@
38
38
  ".": {
39
39
  "types": "./dist/types.d.mts",
40
40
  "import": "./dist/module.mjs"
41
+ },
42
+ "./seed": {
43
+ "types": "./dist/runtime/seed.d.ts",
44
+ "import": "./dist/runtime/seed.js"
45
+ },
46
+ "./generate": {
47
+ "types": "./dist/runtime/generate.d.ts",
48
+ "import": "./dist/runtime/generate.js"
41
49
  }
42
50
  },
43
51
  "main": "./dist/module.mjs",