@deessejs/cli 0.6.25 → 0.6.27
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/commands/admin/create.d.ts +14 -0
- package/dist/commands/admin.d.ts +29 -0
- package/dist/commands/admin.d.ts.map +1 -0
- package/dist/commands/admin.js +22 -0
- package/dist/commands/admin.js.map +1 -0
- package/dist/commands/db/generate.d.ts +11 -0
- package/dist/commands/db/generate.d.ts.map +1 -0
- package/dist/commands/db/generate.js +45 -0
- package/dist/commands/db/generate.js.map +1 -0
- package/dist/commands/db/index.d.ts +15 -0
- package/dist/commands/db/index.d.ts.map +1 -0
- package/dist/commands/db/index.js +100 -0
- package/dist/commands/db/index.js.map +1 -0
- package/dist/commands/db/migrate.d.ts +16 -0
- package/dist/commands/db/migrate.d.ts.map +1 -0
- package/dist/commands/db/migrate.js +75 -0
- package/dist/commands/db/migrate.js.map +1 -0
- package/dist/commands/db/push.d.ts +12 -0
- package/dist/commands/db/push.d.ts.map +1 -0
- package/dist/commands/db/push.js +39 -0
- package/dist/commands/db/push.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +167 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/admin/create.d.ts +33 -0
- package/dist/lib/admin/create.d.ts.map +1 -0
- package/dist/lib/admin/create.js +46 -0
- package/dist/lib/admin/create.js.map +1 -0
- package/dist/lib/config/loader.d.ts +99 -0
- package/dist/lib/config/loader.d.ts.map +1 -0
- package/dist/lib/config/loader.js +242 -0
- package/dist/lib/config/loader.js.map +1 -0
- package/dist/lib/db/auth-schema.d.ts +39 -0
- package/dist/lib/db/auth-schema.d.ts.map +1 -0
- package/dist/lib/db/auth-schema.js +115 -0
- package/dist/lib/db/auth-schema.js.map +1 -0
- package/dist/lib/db/schema.d.ts +43 -0
- package/dist/lib/db/schema.d.ts.map +1 -0
- package/dist/lib/db/schema.js +144 -0
- package/dist/lib/db/schema.js.map +1 -0
- package/dist/lib/index.d.ts +5 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +6 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/utils/schema-loader.d.ts +16 -0
- package/dist/utils/schema-loader.d.ts.map +1 -0
- package/dist/utils/schema-loader.js +46 -0
- package/dist/utils/schema-loader.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin create command - CLI interface
|
|
3
|
+
*
|
|
4
|
+
* Handles user interaction and delegates to backend logic.
|
|
5
|
+
*/
|
|
6
|
+
import 'dotenv/config';
|
|
7
|
+
export interface AdminCreateOptions {
|
|
8
|
+
email?: string;
|
|
9
|
+
password?: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
cwd?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function adminCreate(options: AdminCreateOptions): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin command for managing admin users
|
|
3
|
+
*
|
|
4
|
+
* Usage: deesse admin create [options]
|
|
5
|
+
*/
|
|
6
|
+
export interface AdminCreateOptions {
|
|
7
|
+
email?: string;
|
|
8
|
+
password?: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
cwd?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const adminCommand: {
|
|
13
|
+
name: "admin";
|
|
14
|
+
description: string;
|
|
15
|
+
subcommands: {
|
|
16
|
+
name: "create";
|
|
17
|
+
description: string;
|
|
18
|
+
options: ({
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
default?: undefined;
|
|
22
|
+
} | {
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
default: string;
|
|
26
|
+
})[];
|
|
27
|
+
}[];
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/commands/admin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;CAexB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin command for managing admin users
|
|
3
|
+
*
|
|
4
|
+
* Usage: deesse admin create [options]
|
|
5
|
+
*/
|
|
6
|
+
export const adminCommand = {
|
|
7
|
+
name: 'admin',
|
|
8
|
+
description: 'Manage admin users',
|
|
9
|
+
subcommands: [
|
|
10
|
+
{
|
|
11
|
+
name: 'create',
|
|
12
|
+
description: 'Create an admin user',
|
|
13
|
+
options: [
|
|
14
|
+
{ name: '--email <email>', description: 'Admin email address' },
|
|
15
|
+
{ name: '--password <password>', description: 'Admin password (min 8 characters)' },
|
|
16
|
+
{ name: '--name <name>', description: 'Admin display name', default: 'Admin' },
|
|
17
|
+
{ name: '--cwd <path>', description: 'Working directory', default: process.cwd() },
|
|
18
|
+
],
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/commands/admin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,OAAgB;IACtB,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE;QACX;YACE,IAAI,EAAE,QAAiB;YACvB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,qBAAqB,EAAE;gBAC/D,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,mCAAmC,EAAE;gBACnF,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,OAAO,EAAE,OAAO,EAAE;gBAC9E,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE;aACnF;SACF;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db:generate command
|
|
3
|
+
*
|
|
4
|
+
* Generates auth schema and user migrations with drizzle-kit.
|
|
5
|
+
* Always recreates drizzle config to ensure correct schema path.
|
|
6
|
+
*/
|
|
7
|
+
export interface DbGenerateOptions {
|
|
8
|
+
cwd?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function dbGenerate(options?: DbGenerateOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/commands/db/generate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC/E"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db:generate command
|
|
3
|
+
*
|
|
4
|
+
* Generates auth schema and user migrations with drizzle-kit.
|
|
5
|
+
* Always recreates drizzle config to ensure correct schema path.
|
|
6
|
+
*/
|
|
7
|
+
import { execSync } from 'node:child_process';
|
|
8
|
+
import { createDrizzleConfig } from '../../lib/db/schema.js';
|
|
9
|
+
import { generateAuthSchema } from '../../lib/db/auth-schema.js';
|
|
10
|
+
import { loadMinimalConfigWithPlugins } from '../../lib/config/loader.js';
|
|
11
|
+
export async function dbGenerate(options = {}) {
|
|
12
|
+
const cwd = options.cwd ?? process.cwd();
|
|
13
|
+
// Load plugins from config for schema generation
|
|
14
|
+
// This ensures plugin-injected fields (e.g., admin plugin adds role, banned, etc.)
|
|
15
|
+
// are included in the generated schema
|
|
16
|
+
let plugins = [];
|
|
17
|
+
try {
|
|
18
|
+
const { plugins: loadedPlugins } = await loadMinimalConfigWithPlugins(cwd);
|
|
19
|
+
plugins = loadedPlugins;
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
// If we fail to load plugins, continue with empty plugins array
|
|
23
|
+
// The schema will still be generated but without plugin fields
|
|
24
|
+
console.warn(`Warning: Could not load plugins from config: ${error instanceof Error ? error.message : String(error)}`);
|
|
25
|
+
}
|
|
26
|
+
// Generate auth schema (mandatory in DeesseJS) with plugins for proper field generation
|
|
27
|
+
await generateAuthSchema(cwd, plugins);
|
|
28
|
+
// Always recreate drizzle config to ensure correct schema path
|
|
29
|
+
console.warn('Setting up drizzle.config.ts...');
|
|
30
|
+
await createDrizzleConfig(cwd);
|
|
31
|
+
console.warn('Generating migrations with drizzle-kit...');
|
|
32
|
+
try {
|
|
33
|
+
execSync('npx drizzle-kit generate', {
|
|
34
|
+
cwd,
|
|
35
|
+
stdio: 'inherit',
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
if (error.code === 'ENOENT') {
|
|
40
|
+
throw new Error('drizzle-kit not found. Please install it: npm install drizzle-kit');
|
|
41
|
+
}
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/db/generate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAM1E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAA6B,EAAE;IAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEzC,iDAAiD;IACjD,mFAAmF;IACnF,uCAAuC;IACvC,IAAI,OAAO,GAAc,EAAE,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,4BAA4B,CAAC,GAAG,CAAC,CAAC;QAC3E,OAAO,GAAG,aAAa,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gEAAgE;QAChE,+DAA+D;QAC/D,OAAO,CAAC,IAAI,CAAC,gDAAgD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzH,CAAC;IAED,wFAAwF;IACxF,MAAM,kBAAkB,CAAC,GAAG,EAAE,OAAmD,CAAC,CAAC;IAEnF,+DAA+D;IAC/D,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAChD,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAE/B,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAE1D,IAAI,CAAC;QACH,QAAQ,CAAC,0BAA0B,EAAE;YACnC,GAAG;YACH,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db command dispatcher
|
|
3
|
+
*
|
|
4
|
+
* Handles all db:* subcommands:
|
|
5
|
+
* - db:generate Generate migrations from schema changes
|
|
6
|
+
* - db:push Push schema changes directly (dev only)
|
|
7
|
+
* - db:migrate Apply pending migrations to database
|
|
8
|
+
*/
|
|
9
|
+
export interface DbCommandOptions {
|
|
10
|
+
subcommand: string;
|
|
11
|
+
args: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare function runDbCommand(options: DbCommandOptions): Promise<void>;
|
|
14
|
+
export declare function showDbHelp(): void;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/db/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B3E;AA0CD,wBAAgB,UAAU,IAAI,IAAI,CA+BjC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db command dispatcher
|
|
3
|
+
*
|
|
4
|
+
* Handles all db:* subcommands:
|
|
5
|
+
* - db:generate Generate migrations from schema changes
|
|
6
|
+
* - db:push Push schema changes directly (dev only)
|
|
7
|
+
* - db:migrate Apply pending migrations to database
|
|
8
|
+
*/
|
|
9
|
+
import { dbGenerate } from './generate.js';
|
|
10
|
+
import { dbPush } from './push.js';
|
|
11
|
+
import { dbMigrate } from './migrate.js';
|
|
12
|
+
export async function runDbCommand(options) {
|
|
13
|
+
const { subcommand, args } = options;
|
|
14
|
+
switch (subcommand) {
|
|
15
|
+
case 'generate': {
|
|
16
|
+
const opts = parseDbGenerateArgs(args);
|
|
17
|
+
await dbGenerate(opts);
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
case 'push': {
|
|
21
|
+
const opts = parseDbPushArgs(args);
|
|
22
|
+
await dbPush(opts);
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
case 'migrate': {
|
|
26
|
+
const opts = parseDbMigrateArgs(args);
|
|
27
|
+
await dbMigrate(opts);
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
default:
|
|
31
|
+
throw new Error(`Unknown db command: ${subcommand}\n` +
|
|
32
|
+
`Valid commands: generate, push, migrate`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function parseDbGenerateArgs(args) {
|
|
36
|
+
const opts = {};
|
|
37
|
+
for (let i = 0; i < args.length; i++) {
|
|
38
|
+
if (args[i] === '--cwd' && i + 1 < args.length) {
|
|
39
|
+
opts.cwd = args[++i];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return opts;
|
|
43
|
+
}
|
|
44
|
+
function parseDbPushArgs(args) {
|
|
45
|
+
const opts = {};
|
|
46
|
+
for (let i = 0; i < args.length; i++) {
|
|
47
|
+
if (args[i] === '--cwd' && i + 1 < args.length) {
|
|
48
|
+
opts.cwd = args[++i];
|
|
49
|
+
}
|
|
50
|
+
else if (args[i] === '--force' || args[i] === '-f') {
|
|
51
|
+
opts.force = true;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return opts;
|
|
55
|
+
}
|
|
56
|
+
function parseDbMigrateArgs(args) {
|
|
57
|
+
const opts = {};
|
|
58
|
+
for (let i = 0; i < args.length; i++) {
|
|
59
|
+
if (args[i] === '--cwd' && i + 1 < args.length) {
|
|
60
|
+
opts.cwd = args[++i];
|
|
61
|
+
}
|
|
62
|
+
else if (args[i] === '--dry-run') {
|
|
63
|
+
opts.dryRun = true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return opts;
|
|
67
|
+
}
|
|
68
|
+
export function showDbHelp() {
|
|
69
|
+
console.warn(`
|
|
70
|
+
Deesse DB Commands
|
|
71
|
+
|
|
72
|
+
Usage: npx deesse db:<command> [options]
|
|
73
|
+
|
|
74
|
+
Commands:
|
|
75
|
+
db:generate Generate migrations from schema changes
|
|
76
|
+
db:push Push schema changes directly to database
|
|
77
|
+
db:migrate Apply pending migrations to database
|
|
78
|
+
|
|
79
|
+
Options:
|
|
80
|
+
|
|
81
|
+
db:generate
|
|
82
|
+
--cwd <path> Set working directory
|
|
83
|
+
|
|
84
|
+
db:push
|
|
85
|
+
--cwd <path> Set working directory
|
|
86
|
+
--force, -f Force push without confirmation
|
|
87
|
+
|
|
88
|
+
db:migrate
|
|
89
|
+
--cwd <path> Set working directory
|
|
90
|
+
--dry-run Show what would be migrated without executing
|
|
91
|
+
|
|
92
|
+
Examples:
|
|
93
|
+
npx deesse db:generate
|
|
94
|
+
npx deesse db:push
|
|
95
|
+
npx deesse db:push --force
|
|
96
|
+
npx deesse db:migrate
|
|
97
|
+
npx deesse db:migrate --dry-run
|
|
98
|
+
`);
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/db/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db:migrate command
|
|
3
|
+
*
|
|
4
|
+
* Verifies schema and config exist, then delegates to drizzle-kit CLI.
|
|
5
|
+
*
|
|
6
|
+
* Requirements:
|
|
7
|
+
* - src/db/schema.ts: Your Drizzle tables
|
|
8
|
+
* - drizzle.config.ts: Standard drizzle-kit config with schema and dbCredentials
|
|
9
|
+
* - .env: Should contain DATABASE_URL
|
|
10
|
+
*/
|
|
11
|
+
export interface DbMigrateOptions {
|
|
12
|
+
cwd?: string;
|
|
13
|
+
dryRun?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function dbMigrate(options?: DbMigrateOptions): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/commands/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiE7E"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db:migrate command
|
|
3
|
+
*
|
|
4
|
+
* Verifies schema and config exist, then delegates to drizzle-kit CLI.
|
|
5
|
+
*
|
|
6
|
+
* Requirements:
|
|
7
|
+
* - src/db/schema.ts: Your Drizzle tables
|
|
8
|
+
* - drizzle.config.ts: Standard drizzle-kit config with schema and dbCredentials
|
|
9
|
+
* - .env: Should contain DATABASE_URL
|
|
10
|
+
*/
|
|
11
|
+
import { spawn } from 'node:child_process';
|
|
12
|
+
import { verifySchemaPath, DEFAULT_SCHEMA_PATH } from '../../lib/db/schema.js';
|
|
13
|
+
import * as fs from 'node:fs/promises';
|
|
14
|
+
import * as path from 'node:path';
|
|
15
|
+
import * as dotenv from 'dotenv';
|
|
16
|
+
const DRIZZLE_CONFIG_PATH = './drizzle.config.ts';
|
|
17
|
+
const SCHEMA_PATH = DEFAULT_SCHEMA_PATH;
|
|
18
|
+
export async function dbMigrate(options = {}) {
|
|
19
|
+
const { cwd = process.cwd(), dryRun = false } = options;
|
|
20
|
+
// Verify schema file exists
|
|
21
|
+
try {
|
|
22
|
+
await verifySchemaPath(cwd);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
throw new Error(`db:migrate requires ${SCHEMA_PATH} to exist.\n` +
|
|
26
|
+
`Please create this file and export your Drizzle tables.`);
|
|
27
|
+
}
|
|
28
|
+
// Verify drizzle.config.ts exists
|
|
29
|
+
const drizzleConfigPath = path.join(cwd, DRIZZLE_CONFIG_PATH);
|
|
30
|
+
try {
|
|
31
|
+
await fs.access(drizzleConfigPath);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
throw new Error(`db:migrate requires ${DRIZZLE_CONFIG_PATH} to exist.\n` +
|
|
35
|
+
`Please create this file with your drizzle-kit configuration.\n\n` +
|
|
36
|
+
`Example:\n` +
|
|
37
|
+
`import { defineConfig } from 'drizzle-kit';\n` +
|
|
38
|
+
`export default defineConfig({\n` +
|
|
39
|
+
` schema: './src/db/schema.ts',\n` +
|
|
40
|
+
` out: './src/db/migrations',\n` +
|
|
41
|
+
` dialect: 'postgresql',\n` +
|
|
42
|
+
` dbCredentials: {\n` +
|
|
43
|
+
` url: process.env.DATABASE_URL!,\n` +
|
|
44
|
+
` },\n` +
|
|
45
|
+
`});`);
|
|
46
|
+
}
|
|
47
|
+
console.warn('Applying migrations with drizzle-kit...');
|
|
48
|
+
// Load .env file
|
|
49
|
+
dotenv.config();
|
|
50
|
+
// Build command
|
|
51
|
+
const cmd = dryRun ? 'npx drizzle-kit migrate --dry' : 'npx drizzle-kit migrate';
|
|
52
|
+
// Use spawn with shell:true so .env is inherited
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
const child = spawn(cmd, {
|
|
55
|
+
cwd,
|
|
56
|
+
stdio: 'inherit',
|
|
57
|
+
shell: true,
|
|
58
|
+
});
|
|
59
|
+
child.on('close', (code) => {
|
|
60
|
+
if (code === 0) {
|
|
61
|
+
resolve();
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
reject(new Error(`Command failed: npx drizzle-kit migrate${dryRun ? ' --dry' : ''}`));
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
child.on('error', (error) => {
|
|
68
|
+
if (error.code === 'ENOENT') {
|
|
69
|
+
reject(new Error('drizzle-kit not found. Please install it: npm install drizzle-kit'));
|
|
70
|
+
}
|
|
71
|
+
reject(error);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/commands/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAClD,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAOxC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAA4B,EAAE;IAC5D,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAExD,4BAA4B;IAC5B,IAAI,CAAC;QACH,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,uBAAuB,WAAW,cAAc;YAChD,yDAAyD,CAC1D,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,uBAAuB,mBAAmB,cAAc;YACxD,kEAAkE;YAClE,YAAY;YACZ,+CAA+C;YAC/C,iCAAiC;YACjC,mCAAmC;YACnC,iCAAiC;YACjC,4BAA4B;YAC5B,sBAAsB;YACtB,uCAAuC;YACvC,QAAQ;YACR,KAAK,CACN,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAExD,iBAAiB;IACjB,MAAM,CAAC,MAAM,EAAE,CAAC;IAEhB,gBAAgB;IAChB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,yBAAyB,CAAC;IAEjF,iDAAiD;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE;YACvB,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,0CAA0C,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACxF,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,CAAC,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC,CAAC;YACzF,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db:push command
|
|
3
|
+
*
|
|
4
|
+
* Generates auth schema and pushes to database with drizzle-kit.
|
|
5
|
+
* Always recreates drizzle config to ensure correct schema path.
|
|
6
|
+
*/
|
|
7
|
+
export interface DbPushOptions {
|
|
8
|
+
force?: boolean;
|
|
9
|
+
cwd?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function dbPush(options?: DbPushOptions): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=push.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/commands/db/push.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCvE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db:push command
|
|
3
|
+
*
|
|
4
|
+
* Generates auth schema and pushes to database with drizzle-kit.
|
|
5
|
+
* Always recreates drizzle config to ensure correct schema path.
|
|
6
|
+
*/
|
|
7
|
+
import { execSync } from 'node:child_process';
|
|
8
|
+
import { createDrizzleConfig } from '../../lib/db/schema.js';
|
|
9
|
+
import { generateAuthSchema } from '../../lib/db/auth-schema.js';
|
|
10
|
+
import * as dotenv from 'dotenv';
|
|
11
|
+
export async function dbPush(options = {}) {
|
|
12
|
+
const { force = false, cwd = process.cwd() } = options;
|
|
13
|
+
// Generate auth schema (mandatory in DeesseJS)
|
|
14
|
+
await generateAuthSchema(cwd);
|
|
15
|
+
// Always recreate drizzle config to ensure correct schema path
|
|
16
|
+
console.warn('Setting up drizzle.config.ts...');
|
|
17
|
+
await createDrizzleConfig(cwd);
|
|
18
|
+
console.warn('Pushing schema to database with drizzle-kit...');
|
|
19
|
+
// Load .env file if it exists
|
|
20
|
+
dotenv.config();
|
|
21
|
+
const args = ['npx drizzle-kit', 'push'];
|
|
22
|
+
if (force) {
|
|
23
|
+
args.push('--force');
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
execSync(args.join(' '), {
|
|
27
|
+
cwd,
|
|
28
|
+
stdio: 'inherit',
|
|
29
|
+
env: process.env,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (error.code === 'ENOENT') {
|
|
34
|
+
throw new Error('drizzle-kit not found. Please install it: npm install drizzle-kit');
|
|
35
|
+
}
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/commands/db/push.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAOjC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAAyB,EAAE;IACtD,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAEvD,+CAA+C;IAC/C,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAE9B,+DAA+D;IAC/D,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAChD,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAE/B,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAE/D,8BAA8B;IAC9B,MAAM,CAAC,MAAM,EAAE,CAAC;IAEhB,MAAM,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACzC,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACvB,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import * as p from '@clack/prompts';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { execSync } from 'node:child_process';
|
|
5
|
+
import { runDbCommand, showDbHelp } from './commands/db/index.js';
|
|
6
|
+
import { adminCreate } from './commands/admin/create.js';
|
|
7
|
+
const getVersion = () => {
|
|
8
|
+
try {
|
|
9
|
+
const packageJson = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8'));
|
|
10
|
+
return packageJson.version;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return '0.0.1';
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const showHelp = () => {
|
|
17
|
+
console.warn(`
|
|
18
|
+
DeesseJS CLI v${getVersion()}
|
|
19
|
+
|
|
20
|
+
Usage: npx deesse <command>
|
|
21
|
+
|
|
22
|
+
Commands:
|
|
23
|
+
help Show this help message
|
|
24
|
+
init Initialize a new DeesseJS project in current directory
|
|
25
|
+
db Database management commands (db:generate, db:push, etc.)
|
|
26
|
+
admin Admin user management (admin create)
|
|
27
|
+
|
|
28
|
+
Examples:
|
|
29
|
+
npx deesse help
|
|
30
|
+
npx deesse init
|
|
31
|
+
npx deesse db:generate
|
|
32
|
+
npx deesse db:push --force
|
|
33
|
+
npx deesse admin create
|
|
34
|
+
|
|
35
|
+
For more information, visit: https://github.com/nesalia-inc/deessejs
|
|
36
|
+
`);
|
|
37
|
+
};
|
|
38
|
+
const runInit = async () => {
|
|
39
|
+
try {
|
|
40
|
+
p.intro(`DeesseJS CLI v${getVersion()}`);
|
|
41
|
+
const confirm = await p.confirm({
|
|
42
|
+
message: 'Initialize a new DeesseJS project in the current directory?',
|
|
43
|
+
});
|
|
44
|
+
if (p.isCancel(confirm) || !confirm) {
|
|
45
|
+
p.cancel('Initialization cancelled.');
|
|
46
|
+
process.exit(0);
|
|
47
|
+
}
|
|
48
|
+
// Use create-deesse-app with current directory
|
|
49
|
+
p.log.info('Running create-deesse-app in current directory...');
|
|
50
|
+
execSync('npx create-deesse-app@latest .', { stdio: 'inherit' });
|
|
51
|
+
p.outro('Project initialized successfully!');
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
p.cancel('Failed to initialize project');
|
|
55
|
+
if (error instanceof Error) {
|
|
56
|
+
console.error(error.message);
|
|
57
|
+
}
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
function parseAdminCreateArgs(args) {
|
|
62
|
+
const opts = {};
|
|
63
|
+
for (let i = 0; i < args.length; i++) {
|
|
64
|
+
if (args[i] === '--email' && i + 1 < args.length) {
|
|
65
|
+
opts.email = args[++i];
|
|
66
|
+
}
|
|
67
|
+
else if (args[i] === '--password' && i + 1 < args.length) {
|
|
68
|
+
opts.password = args[++i];
|
|
69
|
+
}
|
|
70
|
+
else if (args[i] === '--name' && i + 1 < args.length) {
|
|
71
|
+
opts.name = args[++i];
|
|
72
|
+
}
|
|
73
|
+
else if (args[i] === '--cwd' && i + 1 < args.length) {
|
|
74
|
+
opts.cwd = args[++i];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return opts;
|
|
78
|
+
}
|
|
79
|
+
async function main() {
|
|
80
|
+
const args = process.argv.slice(2);
|
|
81
|
+
const command = args[0] || 'help';
|
|
82
|
+
// Handle db:* commands
|
|
83
|
+
if (command.startsWith('db:')) {
|
|
84
|
+
const subcommand = command.slice(3); // Remove 'db:' prefix
|
|
85
|
+
if (!subcommand) {
|
|
86
|
+
showDbHelp();
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Special case: 'db help' or 'db --help'
|
|
90
|
+
if (subcommand === 'help' || subcommand === '--help' || subcommand === '-h') {
|
|
91
|
+
showDbHelp();
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
await runDbCommand({
|
|
96
|
+
subcommand,
|
|
97
|
+
args: args.slice(1), // Pass all args including the subcommand
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
console.error(`Error: ${error.message}`);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
// Handle admin commands
|
|
107
|
+
if (command === 'admin') {
|
|
108
|
+
const subcommand = args[1];
|
|
109
|
+
const subArgs = args.slice(2);
|
|
110
|
+
if (!subcommand || subcommand === 'help' || subcommand === '--help' || subcommand === '-h') {
|
|
111
|
+
console.warn(`
|
|
112
|
+
DeesseJS Admin Commands
|
|
113
|
+
|
|
114
|
+
Usage: npx deesse admin <command>
|
|
115
|
+
|
|
116
|
+
Commands:
|
|
117
|
+
admin create Create an admin user
|
|
118
|
+
|
|
119
|
+
Options:
|
|
120
|
+
--email <email> Admin email address
|
|
121
|
+
--password <password> Admin password (min 8 characters)
|
|
122
|
+
--name <name> Admin display name (default: Admin)
|
|
123
|
+
--cwd <path> Working directory
|
|
124
|
+
|
|
125
|
+
Examples:
|
|
126
|
+
npx deesse admin create
|
|
127
|
+
npx deesse admin create --email admin@example.com --password Secur3P@ss!
|
|
128
|
+
`);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (subcommand === 'create') {
|
|
132
|
+
const opts = parseAdminCreateArgs(subArgs);
|
|
133
|
+
try {
|
|
134
|
+
await adminCreate(opts);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
console.error(`Error: ${error.message}`);
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
console.error(`Unknown admin command: ${subcommand}`);
|
|
143
|
+
console.error('Run "npx deesse admin help" for usage information.');
|
|
144
|
+
process.exit(1);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
switch (command) {
|
|
148
|
+
case 'help':
|
|
149
|
+
case '--help':
|
|
150
|
+
case '-h':
|
|
151
|
+
showHelp();
|
|
152
|
+
break;
|
|
153
|
+
case 'init':
|
|
154
|
+
await runInit();
|
|
155
|
+
break;
|
|
156
|
+
default:
|
|
157
|
+
console.error(`Unknown command: ${command}`);
|
|
158
|
+
console.error('Run "npx deesse help" for usage information.');
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
main().catch((error) => {
|
|
163
|
+
console.error('An error occurred:');
|
|
164
|
+
console.error(error);
|
|
165
|
+
process.exit(1);
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,MAAM,UAAU,GAAG,GAAG,EAAE;IACtB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CACnE,CAAC;QACF,OAAO,WAAW,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,GAAG,EAAE;IACpB,OAAO,CAAC,IAAI,CAAC;gBACC,UAAU,EAAE;;;;;;;;;;;;;;;;;;GAkBzB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;IACzB,IAAI,CAAC;QACH,CAAC,CAAC,KAAK,CAAC,iBAAiB,UAAU,EAAE,EAAE,CAAC,CAAC;QAEzC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;YAC9B,OAAO,EAAE,6DAA6D;SACvE,CAAC,CAAC;QAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,CAAC,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,+CAA+C;QAC/C,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAChE,QAAQ,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAEjE,CAAC,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;QACzC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC;AAEF,SAAS,oBAAoB,CAAC,IAAc;IAM1C,MAAM,IAAI,GAAuE,EAAE,CAAC;IAEpF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACvD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACtD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;IAElC,uBAAuB;IACvB,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB;QAE3D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,UAAU,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,yCAAyC;QACzC,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YAC5E,UAAU,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,CAAC;gBACjB,UAAU;gBACV,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,yCAAyC;aAC/D,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,UAAW,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE9B,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YAC3F,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;CAiBlB,CAAC,CAAC;YACG,OAAO;QACT,CAAC;QAED,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,UAAW,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,QAAQ,EAAE,CAAC;YACX,MAAM;QAER,KAAK,MAAM;YACT,MAAM,OAAO,EAAE,CAAC;YAChB,MAAM;QAER;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend logic for creating admin users
|
|
3
|
+
*
|
|
4
|
+
* This module contains the pure business logic for creating an admin user
|
|
5
|
+
* via better-auth. It has no CLI dependencies (@clack/prompts, etc.).
|
|
6
|
+
*/
|
|
7
|
+
import type { BetterAuthPlugin } from "better-auth";
|
|
8
|
+
import type { PostgresJsDatabase } from "drizzle-orm/postgres-js";
|
|
9
|
+
export type AuthSchema = Record<string, any>;
|
|
10
|
+
export interface CreateAdminOptions {
|
|
11
|
+
email: string;
|
|
12
|
+
password: string;
|
|
13
|
+
name: string;
|
|
14
|
+
database: PostgresJsDatabase;
|
|
15
|
+
secret: string;
|
|
16
|
+
baseURL?: string;
|
|
17
|
+
plugins?: BetterAuthPlugin[];
|
|
18
|
+
schema?: AuthSchema;
|
|
19
|
+
}
|
|
20
|
+
export interface CreateAdminResult {
|
|
21
|
+
user: {
|
|
22
|
+
id: string;
|
|
23
|
+
email: string;
|
|
24
|
+
name: string;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export declare class AdminCreationError extends Error {
|
|
28
|
+
readonly code?: string | undefined;
|
|
29
|
+
readonly suggestion?: string | undefined;
|
|
30
|
+
constructor(message: string, code?: string | undefined, suggestion?: string | undefined);
|
|
31
|
+
}
|
|
32
|
+
export declare function createAdminUser(options: CreateAdminOptions): Promise<CreateAdminResult>;
|
|
33
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/lib/admin/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAOlE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,qBAAa,kBAAmB,SAAQ,KAAK;aAGzB,IAAI,CAAC,EAAE,MAAM;aACb,UAAU,CAAC,EAAE,MAAM;gBAFnC,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,UAAU,CAAC,EAAE,MAAM,YAAA;CAKtC;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA+B7F"}
|