@donkeylabs/cli 2.0.14 → 2.0.16

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 (85) hide show
  1. package/package.json +1 -1
  2. package/src/commands/config.ts +610 -0
  3. package/src/commands/deploy-enhanced.ts +354 -0
  4. package/src/commands/deploy.ts +204 -0
  5. package/src/commands/generate.ts +11 -13
  6. package/src/commands/init-enhanced.ts +1994 -0
  7. package/src/deployment/manager.ts +356 -0
  8. package/src/index.ts +47 -19
  9. package/templates/starter/.env.example +0 -44
  10. package/templates/starter/.gitignore.template +0 -4
  11. package/templates/starter/donkeylabs.config.ts +0 -6
  12. package/templates/starter/package.json +0 -21
  13. package/templates/starter/src/index.ts +0 -54
  14. package/templates/starter/src/plugins/stats/index.ts +0 -105
  15. package/templates/starter/src/routes/health/handlers/ping.ts +0 -22
  16. package/templates/starter/src/routes/health/index.ts +0 -19
  17. package/templates/starter/tsconfig.json +0 -27
  18. package/templates/sveltekit-app/.env.example +0 -59
  19. package/templates/sveltekit-app/README.md +0 -103
  20. package/templates/sveltekit-app/bun.lock +0 -683
  21. package/templates/sveltekit-app/donkeylabs.config.ts +0 -12
  22. package/templates/sveltekit-app/package.json +0 -38
  23. package/templates/sveltekit-app/src/app.css +0 -40
  24. package/templates/sveltekit-app/src/app.html +0 -12
  25. package/templates/sveltekit-app/src/hooks.server.ts +0 -4
  26. package/templates/sveltekit-app/src/lib/components/ui/badge/badge.svelte +0 -30
  27. package/templates/sveltekit-app/src/lib/components/ui/badge/index.ts +0 -3
  28. package/templates/sveltekit-app/src/lib/components/ui/button/button.svelte +0 -48
  29. package/templates/sveltekit-app/src/lib/components/ui/button/index.ts +0 -9
  30. package/templates/sveltekit-app/src/lib/components/ui/card/card-content.svelte +0 -18
  31. package/templates/sveltekit-app/src/lib/components/ui/card/card-description.svelte +0 -18
  32. package/templates/sveltekit-app/src/lib/components/ui/card/card-footer.svelte +0 -18
  33. package/templates/sveltekit-app/src/lib/components/ui/card/card-header.svelte +0 -18
  34. package/templates/sveltekit-app/src/lib/components/ui/card/card-title.svelte +0 -18
  35. package/templates/sveltekit-app/src/lib/components/ui/card/card.svelte +0 -21
  36. package/templates/sveltekit-app/src/lib/components/ui/card/index.ts +0 -21
  37. package/templates/sveltekit-app/src/lib/components/ui/index.ts +0 -4
  38. package/templates/sveltekit-app/src/lib/components/ui/input/index.ts +0 -2
  39. package/templates/sveltekit-app/src/lib/components/ui/input/input.svelte +0 -20
  40. package/templates/sveltekit-app/src/lib/permissions.ts +0 -213
  41. package/templates/sveltekit-app/src/lib/utils/index.ts +0 -6
  42. package/templates/sveltekit-app/src/routes/+layout.svelte +0 -8
  43. package/templates/sveltekit-app/src/routes/+page.server.ts +0 -25
  44. package/templates/sveltekit-app/src/routes/+page.svelte +0 -680
  45. package/templates/sveltekit-app/src/routes/workflows/+page.server.ts +0 -23
  46. package/templates/sveltekit-app/src/routes/workflows/+page.svelte +0 -522
  47. package/templates/sveltekit-app/src/server/events.ts +0 -28
  48. package/templates/sveltekit-app/src/server/index.ts +0 -124
  49. package/templates/sveltekit-app/src/server/plugins/auth/auth.test.ts +0 -377
  50. package/templates/sveltekit-app/src/server/plugins/auth/index.ts +0 -815
  51. package/templates/sveltekit-app/src/server/plugins/auth/migrations/001_create_users.ts +0 -25
  52. package/templates/sveltekit-app/src/server/plugins/auth/migrations/002_create_sessions.ts +0 -32
  53. package/templates/sveltekit-app/src/server/plugins/auth/migrations/003_create_refresh_tokens.ts +0 -33
  54. package/templates/sveltekit-app/src/server/plugins/auth/migrations/004_create_passkeys.ts +0 -60
  55. package/templates/sveltekit-app/src/server/plugins/auth/schema.ts +0 -65
  56. package/templates/sveltekit-app/src/server/plugins/demo/index.ts +0 -262
  57. package/templates/sveltekit-app/src/server/plugins/email/email.test.ts +0 -369
  58. package/templates/sveltekit-app/src/server/plugins/email/index.ts +0 -411
  59. package/templates/sveltekit-app/src/server/plugins/email/migrations/001_create_email_tokens.ts +0 -33
  60. package/templates/sveltekit-app/src/server/plugins/email/schema.ts +0 -24
  61. package/templates/sveltekit-app/src/server/plugins/permissions/index.ts +0 -1048
  62. package/templates/sveltekit-app/src/server/plugins/permissions/migrations/001_create_tenants.ts +0 -63
  63. package/templates/sveltekit-app/src/server/plugins/permissions/migrations/002_create_roles.ts +0 -90
  64. package/templates/sveltekit-app/src/server/plugins/permissions/migrations/003_create_resource_grants.ts +0 -50
  65. package/templates/sveltekit-app/src/server/plugins/permissions/permissions.test.ts +0 -566
  66. package/templates/sveltekit-app/src/server/plugins/permissions/schema.ts +0 -67
  67. package/templates/sveltekit-app/src/server/plugins/workflow-demo/index.ts +0 -198
  68. package/templates/sveltekit-app/src/server/routes/auth/auth.schemas.ts +0 -66
  69. package/templates/sveltekit-app/src/server/routes/auth/handlers/login.handler.ts +0 -18
  70. package/templates/sveltekit-app/src/server/routes/auth/handlers/logout.handler.ts +0 -16
  71. package/templates/sveltekit-app/src/server/routes/auth/handlers/me.handler.ts +0 -20
  72. package/templates/sveltekit-app/src/server/routes/auth/handlers/refresh.handler.ts +0 -17
  73. package/templates/sveltekit-app/src/server/routes/auth/handlers/register.handler.ts +0 -19
  74. package/templates/sveltekit-app/src/server/routes/auth/handlers/update-profile.handler.ts +0 -21
  75. package/templates/sveltekit-app/src/server/routes/auth/index.ts +0 -73
  76. package/templates/sveltekit-app/src/server/routes/demo.ts +0 -464
  77. package/templates/sveltekit-app/src/server/routes/example/example.schemas.ts +0 -22
  78. package/templates/sveltekit-app/src/server/routes/example/handlers/greet.handler.ts +0 -21
  79. package/templates/sveltekit-app/src/server/routes/example/index.ts +0 -28
  80. package/templates/sveltekit-app/src/server/routes/permissions/index.ts +0 -248
  81. package/templates/sveltekit-app/src/server/routes/tenants/index.ts +0 -339
  82. package/templates/sveltekit-app/static/robots.txt +0 -3
  83. package/templates/sveltekit-app/svelte.config.ts +0 -17
  84. package/templates/sveltekit-app/tsconfig.json +0 -20
  85. package/templates/sveltekit-app/vite.config.ts +0 -12
@@ -1,63 +0,0 @@
1
- import type { Kysely } from "kysely";
2
-
3
- export async function up(db: Kysely<any>): Promise<void> {
4
- // Tenants table
5
- await db.schema
6
- .createTable("tenants")
7
- .ifNotExists()
8
- .addColumn("id", "text", (col) => col.primaryKey())
9
- .addColumn("name", "text", (col) => col.notNull())
10
- .addColumn("slug", "text", (col) => col.notNull().unique())
11
- .addColumn("settings", "text") // JSON
12
- .addColumn("created_at", "text", (col) => col.notNull().defaultTo("CURRENT_TIMESTAMP"))
13
- .addColumn("updated_at", "text", (col) => col.notNull())
14
- .execute();
15
-
16
- await db.schema
17
- .createIndex("idx_tenants_slug")
18
- .ifNotExists()
19
- .on("tenants")
20
- .column("slug")
21
- .execute();
22
-
23
- // Tenant members table
24
- await db.schema
25
- .createTable("tenant_members")
26
- .ifNotExists()
27
- .addColumn("id", "text", (col) => col.primaryKey())
28
- .addColumn("tenant_id", "text", (col) =>
29
- col.notNull().references("tenants.id").onDelete("cascade")
30
- )
31
- .addColumn("user_id", "text", (col) =>
32
- col.notNull().references("users.id").onDelete("cascade")
33
- )
34
- .addColumn("created_at", "text", (col) => col.notNull().defaultTo("CURRENT_TIMESTAMP"))
35
- .execute();
36
-
37
- await db.schema
38
- .createIndex("idx_tenant_members_tenant_id")
39
- .ifNotExists()
40
- .on("tenant_members")
41
- .column("tenant_id")
42
- .execute();
43
-
44
- await db.schema
45
- .createIndex("idx_tenant_members_user_id")
46
- .ifNotExists()
47
- .on("tenant_members")
48
- .column("user_id")
49
- .execute();
50
-
51
- await db.schema
52
- .createIndex("idx_tenant_members_unique")
53
- .ifNotExists()
54
- .on("tenant_members")
55
- .columns(["tenant_id", "user_id"])
56
- .unique()
57
- .execute();
58
- }
59
-
60
- export async function down(db: Kysely<any>): Promise<void> {
61
- await db.schema.dropTable("tenant_members").ifExists().execute();
62
- await db.schema.dropTable("tenants").ifExists().execute();
63
- }
@@ -1,90 +0,0 @@
1
- import type { Kysely } from "kysely";
2
-
3
- export async function up(db: Kysely<any>): Promise<void> {
4
- // Roles table
5
- await db.schema
6
- .createTable("roles")
7
- .ifNotExists()
8
- .addColumn("id", "text", (col) => col.primaryKey())
9
- .addColumn("tenant_id", "text", (col) =>
10
- col.references("tenants.id").onDelete("cascade")
11
- ) // null = global role
12
- .addColumn("name", "text", (col) => col.notNull())
13
- .addColumn("description", "text")
14
- .addColumn("permissions", "text", (col) => col.notNull().defaultTo("[]")) // JSON array
15
- .addColumn("inherits_from", "text", (col) =>
16
- col.references("roles.id").onDelete("set null")
17
- )
18
- .addColumn("is_default", "integer", (col) => col.notNull().defaultTo(0))
19
- .addColumn("created_at", "text", (col) => col.notNull().defaultTo("CURRENT_TIMESTAMP"))
20
- .addColumn("updated_at", "text", (col) => col.notNull())
21
- .execute();
22
-
23
- await db.schema
24
- .createIndex("idx_roles_tenant_id")
25
- .ifNotExists()
26
- .on("roles")
27
- .column("tenant_id")
28
- .execute();
29
-
30
- await db.schema
31
- .createIndex("idx_roles_name_tenant")
32
- .ifNotExists()
33
- .on("roles")
34
- .columns(["tenant_id", "name"])
35
- .execute();
36
-
37
- // User roles table
38
- await db.schema
39
- .createTable("user_roles")
40
- .ifNotExists()
41
- .addColumn("id", "text", (col) => col.primaryKey())
42
- .addColumn("user_id", "text", (col) =>
43
- col.notNull().references("users.id").onDelete("cascade")
44
- )
45
- .addColumn("role_id", "text", (col) =>
46
- col.notNull().references("roles.id").onDelete("cascade")
47
- )
48
- .addColumn("tenant_id", "text", (col) =>
49
- col.notNull().references("tenants.id").onDelete("cascade")
50
- )
51
- .addColumn("assigned_by", "text", (col) =>
52
- col.references("users.id").onDelete("set null")
53
- )
54
- .addColumn("created_at", "text", (col) => col.notNull().defaultTo("CURRENT_TIMESTAMP"))
55
- .execute();
56
-
57
- await db.schema
58
- .createIndex("idx_user_roles_user_id")
59
- .ifNotExists()
60
- .on("user_roles")
61
- .column("user_id")
62
- .execute();
63
-
64
- await db.schema
65
- .createIndex("idx_user_roles_role_id")
66
- .ifNotExists()
67
- .on("user_roles")
68
- .column("role_id")
69
- .execute();
70
-
71
- await db.schema
72
- .createIndex("idx_user_roles_tenant_id")
73
- .ifNotExists()
74
- .on("user_roles")
75
- .column("tenant_id")
76
- .execute();
77
-
78
- await db.schema
79
- .createIndex("idx_user_roles_unique")
80
- .ifNotExists()
81
- .on("user_roles")
82
- .columns(["user_id", "role_id", "tenant_id"])
83
- .unique()
84
- .execute();
85
- }
86
-
87
- export async function down(db: Kysely<any>): Promise<void> {
88
- await db.schema.dropTable("user_roles").ifExists().execute();
89
- await db.schema.dropTable("roles").ifExists().execute();
90
- }
@@ -1,50 +0,0 @@
1
- import type { Kysely } from "kysely";
2
-
3
- export async function up(db: Kysely<any>): Promise<void> {
4
- await db.schema
5
- .createTable("resource_grants")
6
- .ifNotExists()
7
- .addColumn("id", "text", (col) => col.primaryKey())
8
- .addColumn("tenant_id", "text", (col) =>
9
- col.notNull().references("tenants.id").onDelete("cascade")
10
- )
11
- .addColumn("resource_type", "text", (col) => col.notNull())
12
- .addColumn("resource_id", "text", (col) => col.notNull())
13
- .addColumn("grantee_type", "text", (col) => col.notNull()) // "user" | "role"
14
- .addColumn("grantee_id", "text", (col) => col.notNull())
15
- .addColumn("permissions", "text", (col) => col.notNull().defaultTo("[]")) // JSON array
16
- .addColumn("granted_by", "text", (col) =>
17
- col.references("users.id").onDelete("set null")
18
- )
19
- .addColumn("created_at", "text", (col) => col.notNull().defaultTo("CURRENT_TIMESTAMP"))
20
- .execute();
21
-
22
- // Index for looking up grants by resource
23
- await db.schema
24
- .createIndex("idx_resource_grants_resource")
25
- .ifNotExists()
26
- .on("resource_grants")
27
- .columns(["tenant_id", "resource_type", "resource_id"])
28
- .execute();
29
-
30
- // Index for looking up grants by grantee
31
- await db.schema
32
- .createIndex("idx_resource_grants_grantee")
33
- .ifNotExists()
34
- .on("resource_grants")
35
- .columns(["tenant_id", "grantee_type", "grantee_id"])
36
- .execute();
37
-
38
- // Unique constraint: one grant per resource+grantee combination
39
- await db.schema
40
- .createIndex("idx_resource_grants_unique")
41
- .ifNotExists()
42
- .on("resource_grants")
43
- .columns(["tenant_id", "resource_type", "resource_id", "grantee_type", "grantee_id"])
44
- .unique()
45
- .execute();
46
- }
47
-
48
- export async function down(db: Kysely<any>): Promise<void> {
49
- await db.schema.dropTable("resource_grants").ifExists().execute();
50
- }