@kywi-software/cli 0.1.0

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.
Files changed (36) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +44 -0
  3. package/bin/kywi.js +22 -0
  4. package/dist/__tests__/command-wiring.test.d.ts +2 -0
  5. package/dist/__tests__/command-wiring.test.d.ts.map +1 -0
  6. package/dist/__tests__/command-wiring.test.js +55 -0
  7. package/dist/__tests__/command-wiring.test.js.map +1 -0
  8. package/dist/__tests__/migrate-generate.test.d.ts +2 -0
  9. package/dist/__tests__/migrate-generate.test.d.ts.map +1 -0
  10. package/dist/__tests__/migrate-generate.test.js +53 -0
  11. package/dist/__tests__/migrate-generate.test.js.map +1 -0
  12. package/dist/commands/migrate-generate.d.ts +2 -0
  13. package/dist/commands/migrate-generate.d.ts.map +1 -0
  14. package/dist/commands/migrate-generate.js +64 -0
  15. package/dist/commands/migrate-generate.js.map +1 -0
  16. package/dist/commands/migrate-status.d.ts +2 -0
  17. package/dist/commands/migrate-status.d.ts.map +1 -0
  18. package/dist/commands/migrate-status.js +22 -0
  19. package/dist/commands/migrate-status.js.map +1 -0
  20. package/dist/commands/migrate.d.ts +2 -0
  21. package/dist/commands/migrate.d.ts.map +1 -0
  22. package/dist/commands/migrate.js +72 -0
  23. package/dist/commands/migrate.js.map +1 -0
  24. package/dist/commands/seed-demo.d.ts +2 -0
  25. package/dist/commands/seed-demo.d.ts.map +1 -0
  26. package/dist/commands/seed-demo.js +451 -0
  27. package/dist/commands/seed-demo.js.map +1 -0
  28. package/dist/commands/seed.d.ts +2 -0
  29. package/dist/commands/seed.d.ts.map +1 -0
  30. package/dist/commands/seed.js +163 -0
  31. package/dist/commands/seed.js.map +1 -0
  32. package/dist/index.d.ts +6 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +27 -0
  35. package/dist/index.js.map +1 -0
  36. package/package.json +52 -0
@@ -0,0 +1,163 @@
1
+ import { program } from 'commander';
2
+ import { resolve } from 'node:path';
3
+ program
4
+ .command('seed')
5
+ .description('Seed the database with a default site, superadmin user, and root content node.')
6
+ .option('-c, --config <path>', 'Path to kywi.config.ts', 'kywi.config.ts')
7
+ .action(async (options) => {
8
+ // Dynamic import so we only load DB deps when the command runs
9
+ const configPath = resolve(process.cwd(), options.config);
10
+ const configModule = await import(configPath);
11
+ const config = configModule.default;
12
+ const { createDb, kywiSites, kywiContent, kywiUsers, kywiGroups, kywiUserGroups, kywiSiteMemberships, hashPassword, resolveDatabaseUrl, explainDbError, } = await import('@kywi-software/core');
13
+ const { eq } = await import('drizzle-orm');
14
+ let dbUrl;
15
+ try {
16
+ dbUrl = resolveDatabaseUrl(config.db.url, 'postgres://localhost:5432/kywi_dev').url;
17
+ }
18
+ catch (err) {
19
+ console.error(`\n✖ ${err.message}\n`);
20
+ process.exit(1);
21
+ }
22
+ const db = createDb(dbUrl, config.db.provider);
23
+ try {
24
+ await seedAll();
25
+ }
26
+ catch (err) {
27
+ const friendly = explainDbError(err, dbUrl);
28
+ if (friendly) {
29
+ console.error(`\n✖ ${friendly}\n`);
30
+ process.exit(1);
31
+ }
32
+ throw err;
33
+ }
34
+ async function seedAll() {
35
+ // ── 1. Seed default site ────────────────────────────────────────────────
36
+ const siteDef = config.sites?.[0];
37
+ const siteSlug = siteDef?.id ?? 'default';
38
+ const siteName = siteDef?.name ?? 'Kywi Dev Site';
39
+ const siteDomain = siteDef?.domain ?? 'localhost';
40
+ const siteLocale = siteDef?.defaultLocale ?? 'en';
41
+ const siteTheme = siteDef?.theme ?? 'default';
42
+ const [existingSite] = await db
43
+ .select()
44
+ .from(kywiSites)
45
+ .where(eq(kywiSites.slug, siteSlug))
46
+ .limit(1);
47
+ let siteDbId;
48
+ if (existingSite) {
49
+ console.log(`Site "${siteName}" (slug: ${siteSlug}) already exists — skipping.`);
50
+ siteDbId = existingSite.id;
51
+ }
52
+ else {
53
+ const [site] = await db
54
+ .insert(kywiSites)
55
+ .values({
56
+ slug: siteSlug,
57
+ name: siteName,
58
+ domain: siteDomain,
59
+ defaultLocale: siteLocale,
60
+ theme: siteTheme,
61
+ })
62
+ .returning();
63
+ siteDbId = site.id;
64
+ console.log(`Created site "${siteName}" (slug: ${siteSlug}, id: ${siteDbId})`);
65
+ }
66
+ // ── 2. Seed superadmin user ─────────────────────────────────────────────
67
+ const adminEmail = process.env['KYWI_ADMIN_EMAIL'] ?? 'admin@kywi.dev';
68
+ const adminPassword = process.env['KYWI_ADMIN_PASSWORD'] ?? 'admin123';
69
+ const [existingUser] = await db
70
+ .select()
71
+ .from(kywiUsers)
72
+ .where(eq(kywiUsers.email, adminEmail))
73
+ .limit(1);
74
+ let adminId;
75
+ if (existingUser) {
76
+ console.log(`User "${adminEmail}" already exists — skipping.`);
77
+ adminId = existingUser.id;
78
+ }
79
+ else {
80
+ const passwordHash = await hashPassword(adminPassword);
81
+ const [user] = await db
82
+ .insert(kywiUsers)
83
+ .values({
84
+ email: adminEmail,
85
+ passwordHash,
86
+ firstName: 'Super',
87
+ lastName: 'Admin',
88
+ role: 'superAdmin',
89
+ })
90
+ .returning();
91
+ adminId = user.id;
92
+ console.log(`Created superadmin user:`);
93
+ console.log(` Email: ${adminEmail}`);
94
+ console.log(` Password: ${adminPassword}`);
95
+ console.log(` ID: ${adminId}`);
96
+ }
97
+ // ── 3. Seed Administrators group + membership ───────────────────────────
98
+ const [existingGroup] = await db
99
+ .select()
100
+ .from(kywiGroups)
101
+ .where(eq(kywiGroups.name, 'Administrators'))
102
+ .limit(1);
103
+ let groupId;
104
+ if (existingGroup) {
105
+ groupId = existingGroup.id;
106
+ }
107
+ else {
108
+ const [group] = await db
109
+ .insert(kywiGroups)
110
+ .values({ siteId: siteDbId, name: 'Administrators' })
111
+ .returning();
112
+ groupId = group.id;
113
+ console.log(`Created "Administrators" group (${groupId})`);
114
+ }
115
+ // Add admin to group (ignore if already member)
116
+ try {
117
+ await db.insert(kywiUserGroups).values({ userId: adminId, groupId });
118
+ }
119
+ catch {
120
+ // Already a member — ignore
121
+ }
122
+ // Site membership
123
+ try {
124
+ await db.insert(kywiSiteMemberships).values({ userId: adminId, siteId: siteDbId });
125
+ }
126
+ catch {
127
+ // Already a member — ignore
128
+ }
129
+ // ── 4. Seed root content node (Home page) ──────────────────────────────
130
+ const [existingHome] = await db
131
+ .select()
132
+ .from(kywiContent)
133
+ .where(eq(kywiContent.slug, 'home'))
134
+ .limit(1);
135
+ if (existingHome) {
136
+ console.log(`Root content "home" already exists — skipping.`);
137
+ }
138
+ else {
139
+ const [home] = await db
140
+ .insert(kywiContent)
141
+ .values({
142
+ siteId: siteDbId,
143
+ title: 'Home',
144
+ slug: 'home',
145
+ path: '/',
146
+ depth: 0,
147
+ sortOrder: 0,
148
+ status: 'published',
149
+ baseType: 'content',
150
+ contentTypeName: 'page',
151
+ publishedAt: new Date(),
152
+ createdBy: adminId,
153
+ body: '<h1>Welcome to Kywi CMS</h1><p>Your site is ready.</p>',
154
+ isNav: true,
155
+ })
156
+ .returning();
157
+ console.log(`Created root page "Home" (${home.id})`);
158
+ }
159
+ console.log('\nSeed complete.');
160
+ process.exit(0);
161
+ } // end seedAll
162
+ });
163
+ //# sourceMappingURL=seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import './commands/migrate-generate.js';
2
+ import './commands/migrate.js';
3
+ import './commands/migrate-status.js';
4
+ import './commands/seed.js';
5
+ import './commands/seed-demo.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,gCAAgC,CAAA;AACvC,OAAO,uBAAuB,CAAA;AAC9B,OAAO,8BAA8B,CAAA;AACrC,OAAO,oBAAoB,CAAA;AAC3B,OAAO,yBAAyB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ import { program } from 'commander';
2
+ import { existsSync } from 'node:fs';
3
+ import './commands/migrate-generate.js';
4
+ import './commands/migrate.js';
5
+ import './commands/migrate-status.js';
6
+ import './commands/seed.js';
7
+ import './commands/seed-demo.js';
8
+ // Load a project-root .env before commands run, so `kywi migrate` / `kywi seed`
9
+ // work with nothing but a .env present (no `export DATABASE_URL=…` needed). Uses
10
+ // Node 20.6+'s built-in loader (this package requires node >=20.6.0). Runs before
11
+ // program.parse(), so every command's action sees the values; a real process env
12
+ // var still wins (loadEnvFile does not overwrite existing keys).
13
+ if (typeof process.loadEnvFile === 'function' && existsSync('.env')) {
14
+ try {
15
+ process.loadEnvFile('.env');
16
+ }
17
+ catch {
18
+ // A malformed .env shouldn't crash the CLI — commands surface their own
19
+ // "DATABASE_URL missing" guidance if the value never got set.
20
+ }
21
+ }
22
+ program
23
+ .name('kywi')
24
+ .description('Kywi CMS CLI')
25
+ .version('0.1.0');
26
+ program.parse(process.argv);
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEpC,OAAO,gCAAgC,CAAA;AACvC,OAAO,uBAAuB,CAAA;AAC9B,OAAO,8BAA8B,CAAA;AACrC,OAAO,oBAAoB,CAAA;AAC3B,OAAO,yBAAyB,CAAA;AAEhC,gFAAgF;AAChF,iFAAiF;AACjF,kFAAkF;AAClF,iFAAiF;AACjF,iEAAiE;AACjE,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;IACpE,IAAI,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,8DAA8D;IAChE,CAAC;AACH,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,cAAc,CAAC;KAC3B,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@kywi-software/cli",
3
+ "version": "0.1.0",
4
+ "description": "Kywi CMS command-line tool — migrate, seed, and generate schema from a kywi.config.ts project.",
5
+ "type": "module",
6
+ "license": "AGPL-3.0-only",
7
+ "homepage": "https://github.com/Kywi-Software/kywi-cms#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/Kywi-Software/kywi-cms.git",
11
+ "directory": "packages/cli"
12
+ },
13
+ "keywords": [
14
+ "kywi",
15
+ "cms",
16
+ "cli",
17
+ "migrate",
18
+ "seed"
19
+ ],
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "files": [
24
+ "bin",
25
+ "dist",
26
+ "README.md",
27
+ "LICENSE"
28
+ ],
29
+ "engines": {
30
+ "node": ">=20.6.0"
31
+ },
32
+ "bin": {
33
+ "kywi": "./bin/kywi.js"
34
+ },
35
+ "dependencies": {
36
+ "commander": "^12.0.0",
37
+ "drizzle-orm": "^0.38.0",
38
+ "tsx": "^4.7.0",
39
+ "@kywi-software/core": "0.1.0"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^20.0.0",
43
+ "drizzle-kit": "^0.28.0",
44
+ "typescript": "^5.5.0",
45
+ "vitest": "^1.6.1"
46
+ },
47
+ "scripts": {
48
+ "build": "tsc",
49
+ "dev": "tsx src/index.ts",
50
+ "test": "vitest run"
51
+ }
52
+ }