openkitt 0.1.2

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 (234) hide show
  1. package/README.md +236 -0
  2. package/dist/ast/engine.d.ts +26 -0
  3. package/dist/ast/engine.js +130 -0
  4. package/dist/ast/engine.js.map +1 -0
  5. package/dist/ast/operations.d.ts +13 -0
  6. package/dist/ast/operations.js +329 -0
  7. package/dist/ast/operations.js.map +1 -0
  8. package/dist/ast/validator.d.ts +19 -0
  9. package/dist/ast/validator.js +281 -0
  10. package/dist/ast/validator.js.map +1 -0
  11. package/dist/audit/logger.d.ts +14 -0
  12. package/dist/audit/logger.js +102 -0
  13. package/dist/audit/logger.js.map +1 -0
  14. package/dist/cli.d.ts +4 -0
  15. package/dist/cli.js +401 -0
  16. package/dist/cli.js.map +1 -0
  17. package/dist/commands/create-confirm.d.ts +13 -0
  18. package/dist/commands/create-confirm.js +38 -0
  19. package/dist/commands/create-confirm.js.map +1 -0
  20. package/dist/commands/create-infra.d.ts +20 -0
  21. package/dist/commands/create-infra.js +63 -0
  22. package/dist/commands/create-infra.js.map +1 -0
  23. package/dist/commands/create-manifest.d.ts +10 -0
  24. package/dist/commands/create-manifest.js +21 -0
  25. package/dist/commands/create-manifest.js.map +1 -0
  26. package/dist/commands/create-packages.d.ts +17 -0
  27. package/dist/commands/create-packages.js +69 -0
  28. package/dist/commands/create-packages.js.map +1 -0
  29. package/dist/commands/create-pipeline.d.ts +15 -0
  30. package/dist/commands/create-pipeline.js +57 -0
  31. package/dist/commands/create-pipeline.js.map +1 -0
  32. package/dist/commands/create-scaffolding.d.ts +12 -0
  33. package/dist/commands/create-scaffolding.js +137 -0
  34. package/dist/commands/create-scaffolding.js.map +1 -0
  35. package/dist/commands/create-staging.d.ts +13 -0
  36. package/dist/commands/create-staging.js +17 -0
  37. package/dist/commands/create-staging.js.map +1 -0
  38. package/dist/commands/create-transforms.d.ts +10 -0
  39. package/dist/commands/create-transforms.js +33 -0
  40. package/dist/commands/create-transforms.js.map +1 -0
  41. package/dist/commands/create.d.ts +2 -0
  42. package/dist/commands/create.js +155 -0
  43. package/dist/commands/create.js.map +1 -0
  44. package/dist/commands/delete.d.ts +2 -0
  45. package/dist/commands/delete.js +83 -0
  46. package/dist/commands/delete.js.map +1 -0
  47. package/dist/commands/deploy.d.ts +5 -0
  48. package/dist/commands/deploy.js +371 -0
  49. package/dist/commands/deploy.js.map +1 -0
  50. package/dist/commands/domain.d.ts +2 -0
  51. package/dist/commands/domain.js +90 -0
  52. package/dist/commands/domain.js.map +1 -0
  53. package/dist/commands/env.d.ts +2 -0
  54. package/dist/commands/env.js +153 -0
  55. package/dist/commands/env.js.map +1 -0
  56. package/dist/commands/help.d.ts +3 -0
  57. package/dist/commands/help.js +107 -0
  58. package/dist/commands/help.js.map +1 -0
  59. package/dist/commands/init.d.ts +2 -0
  60. package/dist/commands/init.js +217 -0
  61. package/dist/commands/init.js.map +1 -0
  62. package/dist/commands/list.d.ts +2 -0
  63. package/dist/commands/list.js +142 -0
  64. package/dist/commands/list.js.map +1 -0
  65. package/dist/commands/login.d.ts +2 -0
  66. package/dist/commands/login.js +235 -0
  67. package/dist/commands/login.js.map +1 -0
  68. package/dist/commands/logs.d.ts +2 -0
  69. package/dist/commands/logs.js +90 -0
  70. package/dist/commands/logs.js.map +1 -0
  71. package/dist/commands/publish.d.ts +2 -0
  72. package/dist/commands/publish.js +113 -0
  73. package/dist/commands/publish.js.map +1 -0
  74. package/dist/commands/run.d.ts +14 -0
  75. package/dist/commands/run.js +196 -0
  76. package/dist/commands/run.js.map +1 -0
  77. package/dist/commands/settings.d.ts +3 -0
  78. package/dist/commands/settings.js +278 -0
  79. package/dist/commands/settings.js.map +1 -0
  80. package/dist/commands/status.d.ts +2 -0
  81. package/dist/commands/status.js +88 -0
  82. package/dist/commands/status.js.map +1 -0
  83. package/dist/commands/versions.d.ts +2 -0
  84. package/dist/commands/versions.js +242 -0
  85. package/dist/commands/versions.js.map +1 -0
  86. package/dist/credentials/config.d.ts +12 -0
  87. package/dist/credentials/config.js +196 -0
  88. package/dist/credentials/config.js.map +1 -0
  89. package/dist/credentials/encryption.d.ts +9 -0
  90. package/dist/credentials/encryption.js +100 -0
  91. package/dist/credentials/encryption.js.map +1 -0
  92. package/dist/credentials/keychain.d.ts +8 -0
  93. package/dist/credentials/keychain.js +236 -0
  94. package/dist/credentials/keychain.js.map +1 -0
  95. package/dist/credentials/railway.d.ts +9 -0
  96. package/dist/credentials/railway.js +69 -0
  97. package/dist/credentials/railway.js.map +1 -0
  98. package/dist/llm/client.d.ts +59 -0
  99. package/dist/llm/client.js +530 -0
  100. package/dist/llm/client.js.map +1 -0
  101. package/dist/llm/operations.d.ts +39 -0
  102. package/dist/llm/operations.js +131 -0
  103. package/dist/llm/operations.js.map +1 -0
  104. package/dist/llm/rate-limiter.d.ts +20 -0
  105. package/dist/llm/rate-limiter.js +57 -0
  106. package/dist/llm/rate-limiter.js.map +1 -0
  107. package/dist/llm/scaffolding.d.ts +51 -0
  108. package/dist/llm/scaffolding.js +118 -0
  109. package/dist/llm/scaffolding.js.map +1 -0
  110. package/dist/manifest/drift.d.ts +6 -0
  111. package/dist/manifest/drift.js +45 -0
  112. package/dist/manifest/drift.js.map +1 -0
  113. package/dist/manifest/reader.d.ts +12 -0
  114. package/dist/manifest/reader.js +99 -0
  115. package/dist/manifest/reader.js.map +1 -0
  116. package/dist/manifest/types.d.ts +31 -0
  117. package/dist/manifest/types.js +2 -0
  118. package/dist/manifest/types.js.map +1 -0
  119. package/dist/manifest/writer.d.ts +9 -0
  120. package/dist/manifest/writer.js +142 -0
  121. package/dist/manifest/writer.js.map +1 -0
  122. package/dist/mcp/client.d.ts +21 -0
  123. package/dist/mcp/client.js +213 -0
  124. package/dist/mcp/client.js.map +1 -0
  125. package/dist/mcp/lifecycle.d.ts +12 -0
  126. package/dist/mcp/lifecycle.js +149 -0
  127. package/dist/mcp/lifecycle.js.map +1 -0
  128. package/dist/mcp/project-guard.d.ts +14 -0
  129. package/dist/mcp/project-guard.js +27 -0
  130. package/dist/mcp/project-guard.js.map +1 -0
  131. package/dist/prompts/operations.d.ts +1 -0
  132. package/dist/prompts/operations.js +160 -0
  133. package/dist/prompts/operations.js.map +1 -0
  134. package/dist/prompts/scaffolding.d.ts +1 -0
  135. package/dist/prompts/scaffolding.js +331 -0
  136. package/dist/prompts/scaffolding.js.map +1 -0
  137. package/dist/prompts/version.d.ts +2 -0
  138. package/dist/prompts/version.js +3 -0
  139. package/dist/prompts/version.js.map +1 -0
  140. package/dist/sandbox/command-allowlist.d.ts +6 -0
  141. package/dist/sandbox/command-allowlist.js +103 -0
  142. package/dist/sandbox/command-allowlist.js.map +1 -0
  143. package/dist/sandbox/package-allowlist.d.ts +6 -0
  144. package/dist/sandbox/package-allowlist.js +49 -0
  145. package/dist/sandbox/package-allowlist.js.map +1 -0
  146. package/dist/sandbox/scanner.d.ts +25 -0
  147. package/dist/sandbox/scanner.js +196 -0
  148. package/dist/sandbox/scanner.js.map +1 -0
  149. package/dist/sandbox/staging.d.ts +12 -0
  150. package/dist/sandbox/staging.js +107 -0
  151. package/dist/sandbox/staging.js.map +1 -0
  152. package/dist/scaffold/frameworks/express.d.ts +3 -0
  153. package/dist/scaffold/frameworks/express.js +242 -0
  154. package/dist/scaffold/frameworks/express.js.map +1 -0
  155. package/dist/scaffold/frameworks/hono.d.ts +3 -0
  156. package/dist/scaffold/frameworks/hono.js +238 -0
  157. package/dist/scaffold/frameworks/hono.js.map +1 -0
  158. package/dist/scaffold/frameworks/nextjs.d.ts +3 -0
  159. package/dist/scaffold/frameworks/nextjs.js +447 -0
  160. package/dist/scaffold/frameworks/nextjs.js.map +1 -0
  161. package/dist/scaffold/frameworks/tanstack-start.d.ts +3 -0
  162. package/dist/scaffold/frameworks/tanstack-start.js +280 -0
  163. package/dist/scaffold/frameworks/tanstack-start.js.map +1 -0
  164. package/dist/scaffold/index.d.ts +4 -0
  165. package/dist/scaffold/index.js +138 -0
  166. package/dist/scaffold/index.js.map +1 -0
  167. package/dist/scaffold/integrations/backend.d.ts +3 -0
  168. package/dist/scaffold/integrations/backend.js +403 -0
  169. package/dist/scaffold/integrations/backend.js.map +1 -0
  170. package/dist/scaffold/integrations/posthog.d.ts +2 -0
  171. package/dist/scaffold/integrations/posthog.js +21 -0
  172. package/dist/scaffold/integrations/posthog.js.map +1 -0
  173. package/dist/scaffold/integrations/sentry.d.ts +2 -0
  174. package/dist/scaffold/integrations/sentry.js +16 -0
  175. package/dist/scaffold/integrations/sentry.js.map +1 -0
  176. package/dist/scaffold/integrations/storybook.d.ts +2 -0
  177. package/dist/scaffold/integrations/storybook.js +79 -0
  178. package/dist/scaffold/integrations/storybook.js.map +1 -0
  179. package/dist/scaffold/integrations/vitest.d.ts +2 -0
  180. package/dist/scaffold/integrations/vitest.js +37 -0
  181. package/dist/scaffold/integrations/vitest.js.map +1 -0
  182. package/dist/scaffold/package-builder.d.ts +3 -0
  183. package/dist/scaffold/package-builder.js +136 -0
  184. package/dist/scaffold/package-builder.js.map +1 -0
  185. package/dist/scaffold/packages.d.ts +4 -0
  186. package/dist/scaffold/packages.js +144 -0
  187. package/dist/scaffold/packages.js.map +1 -0
  188. package/dist/scaffold/types.d.ts +20 -0
  189. package/dist/scaffold/types.js +2 -0
  190. package/dist/scaffold/types.js.map +1 -0
  191. package/dist/types.d.ts +11 -0
  192. package/dist/types.js +2 -0
  193. package/dist/types.js.map +1 -0
  194. package/dist/utils/auth-guard.d.ts +5 -0
  195. package/dist/utils/auth-guard.js +52 -0
  196. package/dist/utils/auth-guard.js.map +1 -0
  197. package/dist/utils/cleanup.d.ts +2 -0
  198. package/dist/utils/cleanup.js +37 -0
  199. package/dist/utils/cleanup.js.map +1 -0
  200. package/dist/utils/constraints.d.ts +11 -0
  201. package/dist/utils/constraints.js +162 -0
  202. package/dist/utils/constraints.js.map +1 -0
  203. package/dist/utils/display.d.ts +32 -0
  204. package/dist/utils/display.js +103 -0
  205. package/dist/utils/display.js.map +1 -0
  206. package/dist/utils/global-config.d.ts +8 -0
  207. package/dist/utils/global-config.js +39 -0
  208. package/dist/utils/global-config.js.map +1 -0
  209. package/dist/utils/pm.d.ts +4 -0
  210. package/dist/utils/pm.js +40 -0
  211. package/dist/utils/pm.js.map +1 -0
  212. package/dist/utils/prerequisites.d.ts +9 -0
  213. package/dist/utils/prerequisites.js +96 -0
  214. package/dist/utils/prerequisites.js.map +1 -0
  215. package/dist/utils/prompts.d.ts +25 -0
  216. package/dist/utils/prompts.js +148 -0
  217. package/dist/utils/prompts.js.map +1 -0
  218. package/dist/utils/validation.d.ts +9 -0
  219. package/dist/utils/validation.js +38 -0
  220. package/dist/utils/validation.js.map +1 -0
  221. package/dist/versions/compat.d.ts +13 -0
  222. package/dist/versions/compat.js +127 -0
  223. package/dist/versions/compat.js.map +1 -0
  224. package/dist/versions/integrity.d.ts +9 -0
  225. package/dist/versions/integrity.js +60 -0
  226. package/dist/versions/integrity.js.map +1 -0
  227. package/dist/versions/parser.d.ts +13 -0
  228. package/dist/versions/parser.js +106 -0
  229. package/dist/versions/parser.js.map +1 -0
  230. package/dist/versions/registry.d.ts +30 -0
  231. package/dist/versions/registry.js +165 -0
  232. package/dist/versions/registry.js.map +1 -0
  233. package/package.json +58 -0
  234. package/scripts/publish.sh +254 -0
@@ -0,0 +1,403 @@
1
+ function isBackend(framework) {
2
+ return framework === 'hono' || framework === 'express';
3
+ }
4
+ export function buildSharedIntegrationFiles(opts) {
5
+ const { appName, integrations, workspaceName, framework, appType } = opts;
6
+ const base = `apps/${appName}`;
7
+ const files = [];
8
+ const backend = isBackend(framework);
9
+ const isFrontend = appType === 'frontend';
10
+ const orm = integrations.includes('drizzle') ? 'drizzle' : integrations.includes('prisma') ? 'prisma' : null;
11
+ const db = integrations.includes('postgresql') ? 'postgresql'
12
+ : integrations.includes('mysql') ? 'mysql'
13
+ : integrations.includes('sqlite') ? 'sqlite'
14
+ : null;
15
+ if (orm === 'drizzle' && db) {
16
+ files.push(...buildDrizzleFiles(base, db, workspaceName));
17
+ files.push(...buildDbPackage(workspaceName, orm, db));
18
+ }
19
+ else if (orm === 'prisma' && db) {
20
+ files.push(...buildPrismaFiles(base, db, workspaceName));
21
+ files.push(...buildDbPackage(workspaceName, orm, db));
22
+ }
23
+ if (integrations.includes('better-auth')) {
24
+ files.push(...buildAuthFiles(base, workspaceName, backend));
25
+ }
26
+ if (integrations.includes('stripe')) {
27
+ files.push(buildStripeLib(base));
28
+ }
29
+ if (integrations.includes('polar')) {
30
+ files.push(buildPolarLib(base));
31
+ }
32
+ if (integrations.includes('resend')) {
33
+ files.push(buildResendLib(base));
34
+ }
35
+ if (integrations.includes('bullmq')) {
36
+ files.push(...buildBullMQPackage(workspaceName));
37
+ files.push(buildJobsConsumerLib(base, 'bullmq', workspaceName));
38
+ }
39
+ else if (integrations.includes('trigger-dev')) {
40
+ files.push(...buildTriggerDevPackage(workspaceName));
41
+ files.push(buildJobsConsumerLib(base, 'trigger-dev', workspaceName));
42
+ }
43
+ if (integrations.includes('playwright')) {
44
+ files.push(buildPlaywrightConfig(base));
45
+ }
46
+ if (isFrontend) {
47
+ files.push(...buildUiPackage(workspaceName));
48
+ files.push(...buildComponentsPackage(workspaceName));
49
+ if (integrations.includes('tailwindcss')) {
50
+ files.push(...buildTailwindConfigPackage(workspaceName));
51
+ }
52
+ if (framework === 'tanstack-start') {
53
+ files.push(...buildTanstackQueryPackage(workspaceName));
54
+ }
55
+ }
56
+ return files;
57
+ }
58
+ function buildDrizzleFiles(base, db, workspaceName) {
59
+ const clientKey = `drizzle-${db}`;
60
+ const pkgPath = `packages/db/clients/${clientKey}`;
61
+ const dialect = db === 'postgresql' ? 'postgresql' : db === 'mysql' ? 'mysql2' : 'sqlite';
62
+ const drizzleImport = db === 'postgresql'
63
+ ? `import { drizzle } from 'drizzle-orm/node-postgres';\nimport { Pool } from 'pg';`
64
+ : db === 'mysql'
65
+ ? `import { drizzle } from 'drizzle-orm/mysql2';\nimport mysql from 'mysql2/promise';`
66
+ : `import { drizzle } from 'drizzle-orm/better-sqlite3';\nimport Database from 'better-sqlite3';`;
67
+ const clientInit = db === 'postgresql'
68
+ ? `const pool = new Pool({ connectionString: process.env.DATABASE_URL });\nexport const db = drizzle({ client: pool });`
69
+ : db === 'mysql'
70
+ ? `const connection = await mysql.createConnection(process.env.DATABASE_URL!);\nexport const db = drizzle({ client: connection });`
71
+ : `const sqlite = new Database(process.env.DATABASE_URL ?? './dev.db');\nexport const db = drizzle({ client: sqlite });`;
72
+ const schema = db === 'postgresql'
73
+ ? `import { pgTable, serial, text, timestamp } from 'drizzle-orm/pg-core';\n\nexport const users = pgTable('users', {\n id: serial('id').primaryKey(),\n email: text('email').notNull().unique(),\n createdAt: timestamp('created_at').defaultNow(),\n});\n`
74
+ : db === 'mysql'
75
+ ? `import { mysqlTable, serial, text, timestamp } from 'drizzle-orm/mysql-core';\n\nexport const users = mysqlTable('users', {\n id: serial('id').primaryKey(),\n email: text('email').notNull().unique(),\n createdAt: timestamp('created_at').defaultNow(),\n});\n`
76
+ : `import { sqliteTable, integer, text } from 'drizzle-orm/sqlite-core';\n\nexport const users = sqliteTable('users', {\n id: integer('id').primaryKey({ autoIncrement: true }),\n email: text('email').notNull().unique(),\n});\n`;
77
+ const migratorImport = db === 'postgresql'
78
+ ? `drizzle-orm/node-postgres/migrator`
79
+ : db === 'mysql'
80
+ ? `drizzle-orm/mysql2/migrator`
81
+ : `drizzle-orm/better-sqlite3/migrator`;
82
+ const migrateCall = db === 'sqlite'
83
+ ? `migrate(db, { migrationsFolder: './drizzle' });`
84
+ : `await migrate(db, { migrationsFolder: './drizzle' });`;
85
+ return [
86
+ {
87
+ path: `${pkgPath}/index.ts`,
88
+ content: `${drizzleImport}\nimport * as schema from './schema.js';\n\n${clientInit}\n\nexport * from './schema.js';\n`,
89
+ },
90
+ {
91
+ path: `${pkgPath}/schema.ts`,
92
+ content: schema,
93
+ },
94
+ {
95
+ path: `${pkgPath}/migrate.ts`,
96
+ content: `import { migrate } from '${migratorImport}';\nimport { db } from './index.js';\n\n${migrateCall}\nconsole.log('Migrations complete');\nprocess.exit(0);\n`,
97
+ },
98
+ {
99
+ path: `${pkgPath}/package.json`,
100
+ content: JSON.stringify({
101
+ name: `@${workspaceName}/db-${db}`,
102
+ version: '0.0.1',
103
+ private: true,
104
+ type: 'module',
105
+ main: './index.ts',
106
+ types: './index.ts',
107
+ }, null, 2) + '\n',
108
+ },
109
+ {
110
+ path: `${base}/src/lib/db.ts`,
111
+ content: `export { db } from '@${workspaceName}/db-${db}/index.js';\n`,
112
+ },
113
+ {
114
+ path: `${base}/drizzle.config.ts`,
115
+ content: `import { defineConfig } from 'drizzle-kit';\n\nexport default defineConfig({\n dialect: '${dialect}',\n schema: '../../packages/db/clients/drizzle-${db}/schema.ts',\n out: './drizzle',\n dbCredentials: {\n url: process.env.DATABASE_URL!,\n },\n});\n`,
116
+ },
117
+ ];
118
+ }
119
+ function buildPrismaFiles(base, db, workspaceName) {
120
+ const provider = db === 'postgresql' ? 'postgresql' : db === 'mysql' ? 'mysql' : 'sqlite';
121
+ const clientKey = `prisma-${db}`;
122
+ const pkgPath = `packages/db/clients/${clientKey}`;
123
+ return [
124
+ {
125
+ path: `${pkgPath}/schema.prisma`,
126
+ content: `generator client {\n provider = "prisma-client-js"\n}\n\ndatasource db {\n provider = "${provider}"\n url = env("DATABASE_URL")\n}\n\nmodel User {\n id Int @id @default(autoincrement())\n email String @unique\n createdAt DateTime @default(now())\n}\n`,
127
+ },
128
+ {
129
+ path: `${pkgPath}/index.ts`,
130
+ content: `import { PrismaClient } from '@prisma/client';\n\nconst globalForPrisma = globalThis as unknown as { prisma: PrismaClient };\n\nexport const prisma = globalForPrisma.prisma ?? new PrismaClient();\n\nif (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;\n`,
131
+ },
132
+ {
133
+ path: `${pkgPath}/package.json`,
134
+ content: JSON.stringify({
135
+ name: `@${workspaceName}/db-${db}`,
136
+ version: '0.0.1',
137
+ private: true,
138
+ type: 'module',
139
+ main: './index.ts',
140
+ types: './index.ts',
141
+ }, null, 2) + '\n',
142
+ },
143
+ {
144
+ path: `${base}/src/lib/db.ts`,
145
+ content: `export { prisma } from '@${workspaceName}/db-${db}/index.js';\n`,
146
+ },
147
+ ];
148
+ }
149
+ function buildAuthFiles(base, workspaceName, backend) {
150
+ const appLibShim = backend
151
+ ? `export { auth } from '@${workspaceName}/auth/index.js';\n`
152
+ : `export { authClient } from '@${workspaceName}/auth/index.js';\n`;
153
+ return [
154
+ {
155
+ path: `packages/auth/package.json`,
156
+ content: JSON.stringify({
157
+ name: `@${workspaceName}/auth`,
158
+ version: '0.0.1',
159
+ private: true,
160
+ type: 'module',
161
+ main: './src/index.ts',
162
+ types: './src/index.ts',
163
+ }, null, 2) + '\n',
164
+ },
165
+ {
166
+ path: `packages/auth/src/server.ts`,
167
+ content: `import { betterAuth } from 'better-auth';\n\nexport const auth = betterAuth({\n secret: process.env.BETTER_AUTH_SECRET!,\n baseURL: process.env.BETTER_AUTH_URL ?? 'http://localhost:3000',\n emailAndPassword: {\n enabled: true,\n },\n});\n`,
168
+ },
169
+ {
170
+ path: `packages/auth/src/client.ts`,
171
+ content: `import { createAuthClient } from 'better-auth/client';\n\nexport const authClient = createAuthClient({\n baseURL: process.env.BETTER_AUTH_URL ?? 'http://localhost:3000',\n});\n`,
172
+ },
173
+ {
174
+ path: `packages/auth/src/index.ts`,
175
+ content: `export * from './server.js';\nexport * from './client.js';\n`,
176
+ },
177
+ {
178
+ path: `${base}/src/lib/auth.ts`,
179
+ content: appLibShim,
180
+ },
181
+ ];
182
+ }
183
+ function buildStripeLib(base) {
184
+ return {
185
+ path: `${base}/src/lib/stripe.ts`,
186
+ content: `import Stripe from 'stripe';\n\nexport const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, {\n apiVersion: '2025-02-24.acacia',\n});\n`,
187
+ };
188
+ }
189
+ function buildPolarLib(base) {
190
+ return {
191
+ path: `${base}/src/lib/polar.ts`,
192
+ content: `import { Polar } from '@polar-sh/sdk';\n\nexport const polar = new Polar({\n accessToken: process.env.POLAR_ACCESS_TOKEN!,\n});\n`,
193
+ };
194
+ }
195
+ function buildResendLib(base) {
196
+ return {
197
+ path: `${base}/src/lib/resend.ts`,
198
+ content: `import { Resend } from 'resend';\n\nexport const resend = new Resend(process.env.RESEND_API_KEY!);\n`,
199
+ };
200
+ }
201
+ function buildBullMQPackage(workspaceName) {
202
+ return [
203
+ {
204
+ path: `packages/jobs/src/queues.ts`,
205
+ content: `import { Queue } from 'bullmq';\nimport { connection } from './connection.js';\n\nexport const defaultQueue = new Queue('default', { connection });\n`,
206
+ },
207
+ {
208
+ path: `packages/jobs/src/connection.ts`,
209
+ content: `import IORedis from 'ioredis';\n\nexport const connection = new IORedis(process.env.REDIS_URL!, {\n maxRetriesPerRequest: null,\n});\n`,
210
+ },
211
+ {
212
+ path: `packages/jobs/src/workers.ts`,
213
+ content: `import { Worker } from 'bullmq';\nimport { connection } from './connection.js';\n\nexport const defaultWorker = new Worker(\n 'default',\n async (job) => {\n console.log('Processing job', job.id, job.data);\n },\n { connection },\n);\n`,
214
+ },
215
+ {
216
+ path: `packages/jobs/src/index.ts`,
217
+ content: `export * from './queues.js';\nexport * from './workers.js';\nexport * from './connection.js';\n`,
218
+ },
219
+ {
220
+ path: `packages/jobs/package.json`,
221
+ content: JSON.stringify({
222
+ name: `@${workspaceName}/jobs`,
223
+ version: '0.0.1',
224
+ private: true,
225
+ type: 'module',
226
+ main: './src/index.ts',
227
+ types: './src/index.ts',
228
+ }, null, 2) + '\n',
229
+ },
230
+ ];
231
+ }
232
+ function buildTriggerDevPackage(workspaceName) {
233
+ return [
234
+ {
235
+ path: `packages/jobs/src/example-task.ts`,
236
+ content: `import { task } from '@trigger.dev/sdk';\n\nexport const exampleTask = task({\n id: 'example-task',\n run: async (payload: { message: string }) => {\n console.log(payload.message);\n },\n});\n`,
237
+ },
238
+ {
239
+ path: `packages/jobs/src/index.ts`,
240
+ content: `export * from './example-task.js';\n`,
241
+ },
242
+ {
243
+ path: `packages/jobs/package.json`,
244
+ content: JSON.stringify({
245
+ name: `@${workspaceName}/jobs`,
246
+ version: '0.0.1',
247
+ private: true,
248
+ type: 'module',
249
+ main: './src/index.ts',
250
+ types: './src/index.ts',
251
+ }, null, 2) + '\n',
252
+ },
253
+ ];
254
+ }
255
+ function buildJobsConsumerLib(base, provider, workspaceName) {
256
+ const content = provider === 'bullmq'
257
+ ? `export { defaultQueue } from '@${workspaceName}/jobs/index.js';\n`
258
+ : `export { exampleTask } from '@${workspaceName}/jobs/index.js';\n`;
259
+ return { path: `${base}/src/lib/jobs.ts`, content };
260
+ }
261
+ function buildPlaywrightConfig(base) {
262
+ return {
263
+ path: `${base}/playwright.config.ts`,
264
+ content: `import { defineConfig } from '@playwright/test';\n\nexport default defineConfig({\n testDir: './e2e',\n use: {\n baseURL: 'http://localhost:3000',\n },\n webServer: {\n command: 'bun run dev',\n url: 'http://localhost:3000',\n reuseExistingServer: !process.env.CI,\n },\n});\n`,
265
+ };
266
+ }
267
+ function buildUiPackage(workspaceName) {
268
+ return [
269
+ {
270
+ path: `packages/ui/package.json`,
271
+ content: JSON.stringify({
272
+ name: `@${workspaceName}/ui`,
273
+ version: '0.0.1',
274
+ private: true,
275
+ type: 'module',
276
+ main: './src/index.ts',
277
+ types: './src/index.ts',
278
+ }, null, 2) + '\n',
279
+ },
280
+ {
281
+ path: `packages/ui/src/index.ts`,
282
+ content: `export {};
283
+ `,
284
+ },
285
+ ];
286
+ }
287
+ function buildComponentsPackage(workspaceName) {
288
+ return [
289
+ {
290
+ path: `packages/components/package.json`,
291
+ content: JSON.stringify({
292
+ name: `@${workspaceName}/components`,
293
+ version: '0.0.1',
294
+ private: true,
295
+ type: 'module',
296
+ main: './src/index.ts',
297
+ types: './src/index.ts',
298
+ }, null, 2) + '\n',
299
+ },
300
+ {
301
+ path: `packages/components/src/index.ts`,
302
+ content: `export {};
303
+ `,
304
+ },
305
+ ];
306
+ }
307
+ function buildTailwindConfigPackage(workspaceName) {
308
+ return [
309
+ {
310
+ path: `packages/tailwind-config/package.json`,
311
+ content: JSON.stringify({
312
+ name: `@${workspaceName}/tailwind-config`,
313
+ version: '0.0.1',
314
+ private: true,
315
+ type: 'module',
316
+ exports: {
317
+ './preset.css': './preset.css',
318
+ },
319
+ }, null, 2) + '\n',
320
+ },
321
+ {
322
+ path: `packages/tailwind-config/preset.css`,
323
+ content: `@import 'tailwindcss';
324
+
325
+ @theme {
326
+ --font-sans: 'Inter', sans-serif;
327
+ }
328
+ `,
329
+ },
330
+ ];
331
+ }
332
+ function buildTanstackQueryPackage(workspaceName) {
333
+ return [
334
+ {
335
+ path: `packages/tanstack-query/package.json`,
336
+ content: JSON.stringify({
337
+ name: `@${workspaceName}/tanstack-query`,
338
+ version: '0.0.1',
339
+ private: true,
340
+ type: 'module',
341
+ main: './src/index.ts',
342
+ types: './src/index.ts',
343
+ }, null, 2) + '\n',
344
+ },
345
+ {
346
+ path: `packages/tanstack-query/src/client.tsx`,
347
+ content: `import { QueryClient } from '@tanstack/react-query';
348
+
349
+ export function createQueryClient() {
350
+ return new QueryClient({
351
+ defaultOptions: {
352
+ queries: {
353
+ staleTime: 60 * 1000,
354
+ },
355
+ },
356
+ });
357
+ }
358
+ `,
359
+ },
360
+ {
361
+ path: `packages/tanstack-query/src/provider.tsx`,
362
+ content: `import { QueryClientProvider } from '@tanstack/react-query';
363
+ import { useState } from 'react';
364
+ import { createQueryClient } from './client.js';
365
+
366
+ export function TanstackQueryProvider({ children }: { children: React.ReactNode }) {
367
+ const [queryClient] = useState(() => createQueryClient());
368
+ return <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>;
369
+ }
370
+ `,
371
+ },
372
+ {
373
+ path: `packages/tanstack-query/src/index.ts`,
374
+ content: `export * from './client.js';
375
+ export * from './provider.js';
376
+ export * from '@tanstack/react-query';
377
+ `,
378
+ },
379
+ ];
380
+ }
381
+ function buildDbPackage(workspaceName, orm, db) {
382
+ const clientKey = `${orm}-${db}`;
383
+ return [
384
+ {
385
+ path: `packages/db/package.json`,
386
+ content: JSON.stringify({
387
+ name: `@${workspaceName}/db`,
388
+ version: '0.0.1',
389
+ private: true,
390
+ type: 'module',
391
+ main: './src/index.ts',
392
+ types: './src/index.ts',
393
+ }, null, 2) + '\n',
394
+ },
395
+ {
396
+ path: `packages/db/src/index.ts`,
397
+ content: `export * from '../clients/${clientKey}/index.js';
398
+ `,
399
+ },
400
+ ];
401
+ }
402
+ export { buildSharedIntegrationFiles as buildBackendIntegrationFiles };
403
+ //# sourceMappingURL=backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../../src/scaffold/integrations/backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ScaffoldFile, StaticScaffoldOptions } from '../types.js';
2
+ export declare function buildPosthogFiles(opts: StaticScaffoldOptions): ScaffoldFile[];
@@ -0,0 +1,21 @@
1
+ export function buildPosthogFiles(opts) {
2
+ const { appName } = opts;
3
+ const base = `apps/${appName}`;
4
+ const provider = {
5
+ path: `${base}/src/analytics/posthog.ts`,
6
+ content: `import posthog from 'posthog-js';
7
+
8
+ export function initPosthog() {
9
+ if (typeof window === 'undefined') return;
10
+ const key = import.meta.env.VITE_POSTHOG_KEY;
11
+ const host = import.meta.env.VITE_POSTHOG_HOST ?? 'https://us.i.posthog.com';
12
+ if (!key) return;
13
+ posthog.init(key, { api_host: host, person_profiles: 'identified_only' });
14
+ }
15
+
16
+ export { posthog };
17
+ `,
18
+ };
19
+ return [provider];
20
+ }
21
+ //# sourceMappingURL=posthog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posthog.js","sourceRoot":"","sources":["../../../src/scaffold/integrations/posthog.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,IAA2B;IAC3D,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,IAAI,GAAG,QAAQ,OAAO,EAAE,CAAC;IAE/B,MAAM,QAAQ,GAAiB;QAC7B,IAAI,EAAE,GAAG,IAAI,2BAA2B;QACxC,OAAO,EAAE;;;;;;;;;;;CAWZ;KACE,CAAC;IAEF,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ScaffoldFile, StaticScaffoldOptions } from '../types.js';
2
+ export declare function buildSentryFiles(opts: StaticScaffoldOptions): ScaffoldFile[];
@@ -0,0 +1,16 @@
1
+ export function buildSentryFiles(opts) {
2
+ const { appName } = opts;
3
+ const base = `apps/${appName}`;
4
+ const serverInstrument = {
5
+ path: `${base}/instrument.server.mjs`,
6
+ content: `import * as Sentry from '@sentry/tanstackstart-react';
7
+
8
+ Sentry.init({
9
+ dsn: process.env.SENTRY_DSN,
10
+ tracesSampleRate: 1.0,
11
+ });
12
+ `,
13
+ };
14
+ return [serverInstrument];
15
+ }
16
+ //# sourceMappingURL=sentry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../../src/scaffold/integrations/sentry.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,IAA2B;IAC1D,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,IAAI,GAAG,QAAQ,OAAO,EAAE,CAAC;IAE/B,MAAM,gBAAgB,GAAiB;QACrC,IAAI,EAAE,GAAG,IAAI,wBAAwB;QACrC,OAAO,EAAE;;;;;;CAMZ;KACE,CAAC;IAEF,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ScaffoldFile, StaticScaffoldOptions } from '../types.js';
2
+ export declare function buildStorybookFiles(opts: StaticScaffoldOptions): ScaffoldFile[];
@@ -0,0 +1,79 @@
1
+ export function buildStorybookFiles(opts) {
2
+ const { appName, framework } = opts;
3
+ const base = `apps/${appName}`;
4
+ const isTanstack = framework === 'tanstack-start';
5
+ const mainConfig = {
6
+ path: `${base}/.storybook/main.ts`,
7
+ content: `import type { StorybookConfig } from '@storybook/react-vite';
8
+
9
+ const config: StorybookConfig = {
10
+ stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
11
+ addons: [
12
+ '@storybook/addon-essentials',
13
+ '@storybook/addon-interactions',
14
+ ],
15
+ framework: {
16
+ name: '@storybook/react-vite',
17
+ options: {},
18
+ },
19
+ };
20
+
21
+ export default config;
22
+ `,
23
+ };
24
+ const previewConfig = {
25
+ path: `${base}/.storybook/preview.ts`,
26
+ content: `import type { Preview } from '@storybook/react';
27
+
28
+ const preview: Preview = {
29
+ parameters: {
30
+ controls: {
31
+ matchers: {
32
+ color: /(background|color)$/i,
33
+ date: /Date$/i,
34
+ },
35
+ },
36
+ },
37
+ };
38
+
39
+ export default preview;
40
+ `,
41
+ };
42
+ const exampleStory = {
43
+ path: `${base}/src/stories/Button.stories.tsx`,
44
+ content: `import type { Meta, StoryObj } from '@storybook/react';
45
+
46
+ function Button({ label, onClick }: { label: string; onClick?: () => void }) {
47
+ return (
48
+ <button
49
+ onClick={onClick}
50
+ style={{ padding: '0.5rem 1rem', cursor: 'pointer' }}
51
+ >
52
+ {label}
53
+ </button>
54
+ );
55
+ }
56
+
57
+ const meta: Meta<typeof Button> = {
58
+ title: 'Example/Button',
59
+ component: Button,
60
+ };
61
+
62
+ export default meta;
63
+ type Story = StoryObj<typeof Button>;
64
+
65
+ export const Primary: Story = {
66
+ args: { label: 'Button' },
67
+ };
68
+ `,
69
+ };
70
+ const files = [mainConfig, previewConfig, exampleStory];
71
+ if (isTanstack) {
72
+ files.push({
73
+ path: `${base}/.storybook/vitest.setup.ts`,
74
+ content: `import '@testing-library/jest-dom';\n`,
75
+ });
76
+ }
77
+ return files;
78
+ }
79
+ //# sourceMappingURL=storybook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storybook.js","sourceRoot":"","sources":["../../../src/scaffold/integrations/storybook.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,IAA2B;IAC7D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACpC,MAAM,IAAI,GAAG,QAAQ,OAAO,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,SAAS,KAAK,gBAAgB,CAAC;IAElD,MAAM,UAAU,GAAiB;QAC/B,IAAI,EAAE,GAAG,IAAI,qBAAqB;QAClC,OAAO,EAAE;;;;;;;;;;;;;;;CAeZ;KACE,CAAC;IAEF,MAAM,aAAa,GAAiB;QAClC,IAAI,EAAE,GAAG,IAAI,wBAAwB;QACrC,OAAO,EAAE;;;;;;;;;;;;;;CAcZ;KACE,CAAC;IAEF,MAAM,YAAY,GAAiB;QACjC,IAAI,EAAE,GAAG,IAAI,iCAAiC;QAC9C,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;CAwBZ;KACE,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;IAExD,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,GAAG,IAAI,6BAA6B;YAC1C,OAAO,EAAE,uCAAuC;SACjD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ScaffoldFile, StaticScaffoldOptions } from '../types.js';
2
+ export declare function buildVitestFiles(opts: StaticScaffoldOptions): ScaffoldFile[];
@@ -0,0 +1,37 @@
1
+ export function buildVitestFiles(opts) {
2
+ const { appName, versions } = opts;
3
+ const base = `apps/${appName}`;
4
+ const vitestVersion = versions['vitest'] ?? '4.0.18';
5
+ const config = {
6
+ path: `${base}/vitest.config.ts`,
7
+ content: `import { defineConfig } from 'vitest/config';
8
+
9
+ export default defineConfig({
10
+ test: {
11
+ environment: 'jsdom',
12
+ globals: true,
13
+ setupFiles: ['./src/test/setup.ts'],
14
+ },
15
+ });
16
+ `,
17
+ };
18
+ const setup = {
19
+ path: `${base}/src/test/setup.ts`,
20
+ content: `import '@testing-library/jest-dom';
21
+ `,
22
+ };
23
+ const exampleTest = {
24
+ path: `${base}/src/test/example.test.ts`,
25
+ content: `import { describe, expect, it } from 'vitest';
26
+
27
+ describe('example', () => {
28
+ it('should pass', () => {
29
+ expect(true).toBe(true);
30
+ });
31
+ });
32
+ `,
33
+ };
34
+ void vitestVersion;
35
+ return [config, setup, exampleTest];
36
+ }
37
+ //# sourceMappingURL=vitest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../../src/scaffold/integrations/vitest.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,IAA2B;IAC1D,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IACnC,MAAM,IAAI,GAAG,QAAQ,OAAO,EAAE,CAAC;IAE/B,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;IAErD,MAAM,MAAM,GAAiB;QAC3B,IAAI,EAAE,GAAG,IAAI,mBAAmB;QAChC,OAAO,EAAE;;;;;;;;;CASZ;KACE,CAAC;IAEF,MAAM,KAAK,GAAiB;QAC1B,IAAI,EAAE,GAAG,IAAI,oBAAoB;QACjC,OAAO,EAAE;CACZ;KACE,CAAC;IAEF,MAAM,WAAW,GAAiB;QAChC,IAAI,EAAE,GAAG,IAAI,2BAA2B;QACxC,OAAO,EAAE;;;;;;;CAOZ;KACE,CAAC;IAEF,KAAK,aAAa,CAAC;IACnB,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { StaticScaffoldOptions } from './types.js';
2
+ export declare function buildTanstackStartPackageJson(opts: StaticScaffoldOptions): string;
3
+ export declare function buildPackageJson(opts: StaticScaffoldOptions): string;