package-installer-cli 1.3.2 → 1.4.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 (98) hide show
  1. checksums.yaml +4 -4
  2. data/dist/commands/email.js +1140 -0
  3. data/dist/email-templates/bugReport.js +108 -0
  4. data/dist/email-templates/collectors/bugReport.js +41 -0
  5. data/dist/email-templates/collectors/common.js +56 -0
  6. data/dist/email-templates/collectors/docs.js +41 -0
  7. data/dist/email-templates/collectors/featureRequest.js +47 -0
  8. data/dist/email-templates/collectors/improvement.js +52 -0
  9. data/dist/email-templates/collectors/index.js +8 -0
  10. data/dist/email-templates/collectors/question.js +31 -0
  11. data/dist/email-templates/collectors/templateRequest.js +53 -0
  12. data/dist/email-templates/docs.js +111 -0
  13. data/dist/email-templates/featureRequest.js +111 -0
  14. data/dist/email-templates/generator.js +62 -0
  15. data/dist/email-templates/improvement.js +121 -0
  16. data/dist/email-templates/index.js +14 -0
  17. data/dist/email-templates/question.js +101 -0
  18. data/dist/email-templates/styles.js +168 -0
  19. data/dist/email-templates/templateRequest.js +120 -0
  20. data/dist/email-templates/testEmail.js +56 -0
  21. data/dist/email-templates/types.js +1 -0
  22. data/dist/index.js +29 -1
  23. data/dist/utils/featureInstaller.js +4 -11
  24. data/features/ai/ai.json +547 -0
  25. data/features/analytics/analytics.json +4 -0
  26. data/features/auth/auth.json +473 -0
  27. data/features/auth/auth0/django/backend/apiexample/urls.py +10 -0
  28. data/features/auth/auth0/django/backend/apiexample/validator.py +21 -0
  29. data/features/auth/auth0/django/backend/apiexample/views.py +30 -0
  30. data/features/auth/auth0/django/backend/requirements.txt +4 -0
  31. data/features/auth/auth0/django/web-app/requirements.txt +4 -0
  32. data/features/auth/auth0/django/web-app/webappexample/settings.py +28 -0
  33. data/features/auth/auth0/django/web-app/webappexample/templates/index.html +16 -0
  34. data/features/auth/auth0/django/web-app/webappexample/urls.py +10 -0
  35. data/features/auth/auth0/django/web-app/webappexample/views.py +52 -0
  36. data/features/auth/auth0/go/backend/go.mod +8 -0
  37. data/features/auth/auth0/go/backend/main.go +60 -0
  38. data/features/auth/auth0/go/backend/middleware/jwt.go +81 -0
  39. data/features/auth/auth0/go/web-app/auth.go +56 -0
  40. data/features/auth/auth0/go/web-app/callback.go +52 -0
  41. data/features/auth/auth0/go/web-app/go.mod +11 -0
  42. data/features/auth/auth0/go/web-app/isAuthenticated.go +20 -0
  43. data/features/auth/auth0/go/web-app/login.go +47 -0
  44. data/features/auth/auth0/go/web-app/logout.go +38 -0
  45. data/features/auth/auth0/go/web-app/main.go +31 -0
  46. data/features/auth/auth0/go/web-app/router.go +44 -0
  47. data/features/auth/auth0/go/web-app/user.go +18 -0
  48. data/features/auth/auth0/ruby-on-rails/backend/Gemfile +1 -0
  49. data/features/auth/auth0/ruby-on-rails/backend/app/controllers/application_controller.rb +5 -0
  50. data/features/auth/auth0/ruby-on-rails/backend/app/controllers/concern/secured.rb +60 -0
  51. data/features/auth/auth0/ruby-on-rails/backend/app/controllers/private_controller.rb +6 -0
  52. data/features/auth/auth0/ruby-on-rails/backend/app/controllers/public-controller.rb +6 -0
  53. data/features/auth/auth0/ruby-on-rails/backend/app/lib/auth0_client.rb +59 -0
  54. data/features/auth/auth0/ruby-on-rails/web-app/Gemfile +2 -0
  55. data/features/auth/auth0/ruby-on-rails/web-app/auth0_controller.rb +41 -0
  56. data/features/auth/auth0/ruby-on-rails/web-app/config/auth0.yml +4 -0
  57. data/features/auth/auth0/ruby-on-rails/web-app/config/initializers/auth0.rb +14 -0
  58. data/features/auth/auth0/ruby-on-rails/web-app/config/routes.rb +6 -0
  59. data/features/auth/auth0/ruby-on-rails/web-app/config/secured.rb +11 -0
  60. data/features/auth/clerk/go/clerk_client.go +28 -0
  61. data/features/auth/clerk/go/go.mod +5 -0
  62. data/features/auth/clerk/go/main.go +82 -0
  63. data/features/auth/clerk/nextjs/typescript/app/layout.tsx +2 -2
  64. data/features/auth/clerk/ruby-on-rails/Gemfile +1 -0
  65. data/features/auth/clerk/ruby-on-rails/app.rb +50 -0
  66. data/features/auth/clerk/ruby-on-rails/config/initializers/clerk.rb +4 -0
  67. data/features/aws/aws.json +5207 -0
  68. data/features/database/database.json +246 -0
  69. data/features/docker/docker.json +108 -0
  70. data/features/features.json +44 -7321
  71. data/features/gitignore/gitignore.json +61 -0
  72. data/features/monitoring/monitoring.json +5 -0
  73. data/features/payment/payment.json +347 -0
  74. data/features/storage/storage.json +371 -0
  75. data/features/testing/jest/angularjs/typescript/tests/angularjs.test.ts +12 -0
  76. data/features/testing/jest/expressjs/javascript/tests/expressjs.test.js +10 -0
  77. data/features/testing/jest/expressjs/typescript/tests/expressjs.test.ts +10 -0
  78. data/features/testing/jest/nestjs/typescript/tests/nestjs.test.ts +10 -0
  79. data/features/testing/jest/nextjs/javascript/tests/nextjs.test.js +10 -0
  80. data/features/testing/jest/nextjs/typescript/tests/nextjs.test.ts +10 -0
  81. data/features/testing/jest/nuxtjs/typescript/tests/nuxtjs.test.ts +9 -0
  82. data/features/testing/jest/reactjs/javascript/tests/reactjs.test.js +10 -0
  83. data/features/testing/jest/reactjs/typescript/tests/reactjs.test.ts +10 -0
  84. data/features/testing/jest/reactjs-expressjs-shadcn/javascript/tests/reactjs.expressjs.shadcn.test.js +16 -0
  85. data/features/testing/jest/reactjs-expressjs-shadcn/typescript/tests/reactjs.expressjs.shadcn.test.ts +16 -0
  86. data/features/testing/jest/reactjs-nestjs-shadcn/typescript/tests/reactjs.nestjs.shadcn.test.ts +14 -0
  87. data/features/testing/jest/remixjs/typescript/tests/remixjs.test.ts +9 -0
  88. data/features/testing/jest/vuejs/javascript/tests/vuejs.test.ts +9 -0
  89. data/features/testing/jest/vuejs/typescript/tests/vuejs.test.ts +9 -0
  90. data/features/testing/testing.json +102 -0
  91. data/features/ui/ui.json +91 -0
  92. metadata +88 -8
  93. data/features/testing/jest/angularjs/tests/angularjs.test.js +0 -12
  94. data/features/testing/jest/expressjs/tests/javascript/expressjs.test.js +0 -12
  95. data/features/testing/jest/expressjs/tests/typescript/expressjs.test.ts +0 -12
  96. data/features/testing/jest/go/tests/go.test.js +0 -12
  97. data/features/testing/jest/nextjs/tests/javascript/nextjs.test.js +0 -12
  98. data/features/testing/jest/nextjs/tests/typescript/nextjs.test.ts +0 -12
data/dist/index.js CHANGED
@@ -19,6 +19,7 @@ import { cleanCommand, showCleanHelp } from './commands/clean.js';
19
19
  import { cacheCommand, showCacheHelp } from './commands/cache.js';
20
20
  import { environmentCommand, showEnvironmentHelp } from './commands/env.js';
21
21
  import { doctorCommand, showDoctorHelp } from './commands/doctor.js';
22
+ import { emailCommand, showEmailHelp } from './commands/email.js';
22
23
  // Import utilities
23
24
  import { initializeCache } from './utils/cacheManager.js';
24
25
  import { displayBanner, displayCommandBanner } from './utils/banner.js';
@@ -324,6 +325,31 @@ program
324
325
  handleCommandError('cache', error);
325
326
  }
326
327
  });
328
+ // EMAIL COMMAND - Contact developer with feedback
329
+ program
330
+ .command('email')
331
+ .description(chalk.hex('#00d2d3')('📧 ') + chalk.hex('#4facfe')('Contact developer with feedback, bug reports, and feature requests'))
332
+ .argument('[category]', chalk.hex('#95afc0')('Feedback category (bug, feature, template, question, improvement, docs)'))
333
+ .option('-h, --help', chalk.hex('#95afc0')('Display help for this command'))
334
+ .option('-l, --list', chalk.hex('#95afc0')('List all available email categories'))
335
+ .option('--install', chalk.hex('#95afc0')('Show Email MCP Server installation instructions'))
336
+ .option('--setup', chalk.hex('#95afc0')('Show email configuration setup guide'))
337
+ .option('--status', chalk.hex('#95afc0')('Check email system status and availability'))
338
+ .option('--test', chalk.hex('#95afc0')('Send a test email to verify functionality'))
339
+ .option('--commands', chalk.hex('#95afc0')('Show all available Email MCP Server commands'))
340
+ .option('--dev', chalk.hex('#95afc0')('Show development setup information and troubleshooting'))
341
+ .option('--quick', chalk.hex('#95afc0')('Quick feedback mode with minimal prompts'))
342
+ .on('--help', () => {
343
+ showEmailHelp();
344
+ })
345
+ .action(async (category, options) => {
346
+ try {
347
+ await emailCommand(category, options);
348
+ }
349
+ catch (error) {
350
+ handleCommandError('email', error);
351
+ }
352
+ });
327
353
  // DEPLOY COMMAND - Future deployment features
328
354
  program
329
355
  .command('deploy')
@@ -360,6 +386,7 @@ program.on('--help', () => {
360
386
  chalk.hex('#95afc0')(' ') + piGradient('pi') + ' ' + addGradient('add') + chalk.hex('#95afc0')(' docker # Add Docker configuration') + '\n' +
361
387
  chalk.hex('#95afc0')(' ') + piGradient('pi') + ' ' + commandGradient('check') + chalk.hex('#95afc0')(' # Check package versions') + '\n' +
362
388
  chalk.hex('#95afc0')(' ') + piGradient('pi') + ' ' + commandGradient('check') + chalk.hex('#95afc0')(' react # Check specific package') + '\n' +
389
+ chalk.hex('#95afc0')(' ') + piGradient('pi') + ' ' + commandGradient('email') + chalk.hex('#95afc0')(' # Contact developer with feedback') + '\n' +
363
390
  chalk.hex('#ff6b6b')('🌍 REPOSITORY & DEPLOYMENT') + '\n' +
364
391
  chalk.hex('#95afc0')(' ') + piGradient('pi') + ' ' + commandGradient('clone') + chalk.hex('#95afc0')(' # Clone repositories interactively') + '\n' +
365
392
  chalk.hex('#95afc0')(' ') + piGradient('pi') + ' ' + commandGradient('clone') + chalk.hex('#95afc0')(' facebook/react # Clone popular repositories') + '\n' +
@@ -395,7 +422,8 @@ if (process.argv.length === 2) {
395
422
  chalk.hex('#10ac84')(' ') + piGradient('pi') + ' ' + gradient(['#10ac84', '#00d2d3'])('create') + chalk.hex('#95afc0')(' # Create new project (React, Next.js, Vue, etc.)') + '\n' +
396
423
  chalk.hex('#9c88ff')(' ') + piGradient('pi') + ' ' + gradient(['#9c88ff', '#667eea'])('analyze') + chalk.hex('#95afc0')(' # Show project analytics dashboard') + '\n' +
397
424
  chalk.hex('#ff6b6b')(' ') + piGradient('pi') + ' ' + gradient(['#ff6b6b', '#ff9a9e'])('update') + chalk.hex('#95afc0')(' # Update packages to latest versions') + '\n' +
398
- chalk.hex('#00d2d3')(' ') + piGradient('pi') + ' ' + gradient(['#00d2d3', '#0084ff'])('clone') + chalk.hex('#95afc0')(' user/repo # Clone and setup GitHub repositories') + '\n\n' +
425
+ chalk.hex('#00d2d3')(' ') + piGradient('pi') + ' ' + gradient(['#00d2d3', '#0084ff'])('clone') + chalk.hex('#95afc0')(' user/repo # Clone and setup GitHub repositories') + '\n' +
426
+ chalk.hex('#00d2d3')(' ') + piGradient('pi') + ' ' + gradient(['#00d2d3', '#4facfe'])('email') + chalk.hex('#95afc0')(' # Contact developer with feedback') + '\n\n' +
399
427
  chalk.hex('#ffa502')('Need help? Try these:') + '\n\n' +
400
428
  chalk.hex('#ff6b6b')(' ') + piGradient('pi') + ' ' + chalk.hex('#ff6b6b')('--help') + chalk.hex('#95afc0')(' # See all available commands') + '\n' +
401
429
  chalk.hex('#95afc0')(' ') + piGradient('pi') + ' ' + chalk.hex('#95afc0')('command --help') + chalk.hex('#95afc0')(' # Get detailed help for any command') + '\n\n' +
@@ -155,7 +155,8 @@ function adjustNextjsSrcFilePath(filePath, hasSrcFolder, projectPath) {
155
155
  '.env', '.env.local', '.env.example', '.env.development', '.env.production',
156
156
  'package.json', 'next.config.js', 'next.config.mjs', 'next.config.ts',
157
157
  'tailwind.config.js', 'tailwind.config.ts', 'postcss.config.js', 'postcss.config.ts',
158
- 'middleware.ts', 'middleware.js', 'tsconfig.json', 'jsconfig.json'
158
+ 'tsconfig.json', 'jsconfig.json', 'README.md', '.gitignore',
159
+ 'docker-compose.yml', 'Dockerfile', 'yarn.lock', 'pnpm-lock.yaml', 'package-lock.json'
159
160
  ];
160
161
  const fileName = path.basename(filePath);
161
162
  // Always put public/ files in root public/
@@ -170,16 +171,8 @@ function adjustNextjsSrcFilePath(filePath, hasSrcFolder, projectPath) {
170
171
  if (filePath.startsWith('src/')) {
171
172
  return path.join(projectPath, filePath);
172
173
  }
173
- // For app/pages/components/lib/utils/hooks/styles/types, put in src/
174
- const srcDirs = ['app', 'pages', 'components', 'lib', 'utils', 'styles', 'hooks', 'types'];
175
- if (srcDirs.some(dir => filePath.startsWith(dir + '/'))) {
176
- return path.join(projectPath, 'src', filePath);
177
- }
178
- // For .ts/.tsx/.js/.jsx files not in config, put in src/
179
- if (fileName.match(/\.(ts|tsx|js|jsx)$/) && !fileName.includes('config')) {
180
- return path.join(projectPath, 'src', filePath);
181
- }
182
- // Default: put in src/
174
+ // Everything else goes in src/ folder for Next.js projects with src structure
175
+ // This includes: app/, pages/, components/, lib/, utils/, styles/, hooks/, types/, middleware.ts, etc.
183
176
  return path.join(projectPath, 'src', filePath);
184
177
  }
185
178
  /**
@@ -0,0 +1,547 @@
1
+ {
2
+ "claude": {
3
+ "expressjs": {
4
+ "javascript": {
5
+ ".env": {
6
+ "action": "append"
7
+ },
8
+ "controllers/claudeController.js": {
9
+ "action": "create"
10
+ },
11
+ "index.js": {
12
+ "action": "prepend"
13
+ },
14
+ "package.json": {
15
+ "action": "install"
16
+ },
17
+ "routes/claudeRoutes.js": {
18
+ "action": "create"
19
+ },
20
+ "utils/claude.js": {
21
+ "action": "create"
22
+ }
23
+ },
24
+ "typescript": {
25
+ ".env": {
26
+ "action": "append"
27
+ },
28
+ "controllers/claudeController.ts": {
29
+ "action": "create"
30
+ },
31
+ "index.ts": {
32
+ "action": "prepend"
33
+ },
34
+ "package.json": {
35
+ "action": "install"
36
+ },
37
+ "routes/claudeRoutes.ts": {
38
+ "action": "create"
39
+ },
40
+ "utils/claude.ts": {
41
+ "action": "create"
42
+ }
43
+ }
44
+ },
45
+ "nestjs": {
46
+ "typescript": {
47
+ ".env": {
48
+ "action": "append"
49
+ },
50
+ "package.json": {
51
+ "action": "install"
52
+ },
53
+ "src/claude/claude.controller.ts": {
54
+ "action": "create"
55
+ },
56
+ "src/claude/claude.module.ts": {
57
+ "action": "create"
58
+ },
59
+ "src/claude/claude.service.ts": {
60
+ "action": "create"
61
+ }
62
+ }
63
+ },
64
+ "nextjs": {
65
+ "javascript": {
66
+ ".env": {
67
+ "action": "append"
68
+ },
69
+ "app/api/claude/route.js": {
70
+ "action": "create"
71
+ },
72
+ "lib/claude.js": {
73
+ "action": "create"
74
+ },
75
+ "package.json": {
76
+ "action": "install"
77
+ }
78
+ },
79
+ "typescript": {
80
+ ".env": {
81
+ "action": "append"
82
+ },
83
+ "app/api/claude/route.ts": {
84
+ "action": "create"
85
+ },
86
+ "lib/claude.ts": {
87
+ "action": "create"
88
+ },
89
+ "package.json": {
90
+ "action": "install"
91
+ }
92
+ }
93
+ },
94
+ "remixjs": {
95
+ "typescript": {
96
+ ".env": {
97
+ "action": "append"
98
+ },
99
+ "app/routes/api/claude.ts": {
100
+ "action": "create"
101
+ },
102
+ "app/utils/claude.ts": {
103
+ "action": "create"
104
+ },
105
+ "package.json": {
106
+ "action": "install"
107
+ }
108
+ }
109
+ }
110
+ },
111
+ "gemini": {
112
+ "expressjs": {
113
+ "javascript": {
114
+ ".env": {
115
+ "action": "append"
116
+ },
117
+ "controllers/geminiController.js": {
118
+ "action": "create"
119
+ },
120
+ "index.js": {
121
+ "action": "prepend"
122
+ },
123
+ "package.json": {
124
+ "action": "install"
125
+ },
126
+ "routes/geminiRoutes.js": {
127
+ "action": "create"
128
+ },
129
+ "utils/gemini.js": {
130
+ "action": "create"
131
+ }
132
+ },
133
+ "typescript": {
134
+ ".env": {
135
+ "action": "append"
136
+ },
137
+ "controllers/geminiController.ts": {
138
+ "action": "create"
139
+ },
140
+ "index.ts": {
141
+ "action": "prepend"
142
+ },
143
+ "package.json": {
144
+ "action": "install"
145
+ },
146
+ "routes/geminiRoutes.ts": {
147
+ "action": "create"
148
+ },
149
+ "utils/gemini.ts": {
150
+ "action": "create"
151
+ }
152
+ }
153
+ },
154
+ "nestjs": {
155
+ "typescript": {
156
+ ".env": {
157
+ "action": "append"
158
+ },
159
+ "package.json": {
160
+ "action": "install"
161
+ },
162
+ "src/gemini/gemini.controller.ts": {
163
+ "action": "create"
164
+ },
165
+ "src/gemini/gemini.module.ts": {
166
+ "action": "create"
167
+ },
168
+ "src/gemini/gemini.service.ts": {
169
+ "action": "create"
170
+ }
171
+ }
172
+ },
173
+ "nextjs": {
174
+ "javascript": {
175
+ ".env": {
176
+ "action": "append"
177
+ },
178
+ "app/api/generate/route.js": {
179
+ "action": "create"
180
+ },
181
+ "lib/gemini.js": {
182
+ "action": "create"
183
+ },
184
+ "package.json": {
185
+ "action": "install"
186
+ }
187
+ },
188
+ "typescript": {
189
+ ".env": {
190
+ "action": "append"
191
+ },
192
+ "app/api/generate/route.ts": {
193
+ "action": "create"
194
+ },
195
+ "lib/gemini.ts": {
196
+ "action": "create"
197
+ },
198
+ "package.json": {
199
+ "action": "install"
200
+ }
201
+ }
202
+ },
203
+ "remixjs": {
204
+ "typescript": {
205
+ ".env": {
206
+ "action": "append"
207
+ },
208
+ "app/routes/api/gemini.ts": {
209
+ "action": "create"
210
+ },
211
+ "app/utils/gemini.ts": {
212
+ "action": "create"
213
+ },
214
+ "package.json": {
215
+ "action": "install"
216
+ }
217
+ }
218
+ }
219
+ },
220
+ "grok": {
221
+ "expressjs": {
222
+ "javascript": {
223
+ ".env": {
224
+ "action": "append"
225
+ },
226
+ "controllers/grokController.js": {
227
+ "action": "create"
228
+ },
229
+ "index.js": {
230
+ "action": "prepend"
231
+ },
232
+ "package.json": {
233
+ "action": "install"
234
+ },
235
+ "routes/grokRoutes.js": {
236
+ "action": "create"
237
+ },
238
+ "utils/grok.js": {
239
+ "action": "create"
240
+ }
241
+ },
242
+ "typescript": {
243
+ ".env": {
244
+ "action": "append"
245
+ },
246
+ "controllers/grokController.ts": {
247
+ "action": "create"
248
+ },
249
+ "index.ts": {
250
+ "action": "prepend"
251
+ },
252
+ "package.json": {
253
+ "action": "install"
254
+ },
255
+ "routes/grokRoutes.ts": {
256
+ "action": "create"
257
+ },
258
+ "utils/grok.ts": {
259
+ "action": "create"
260
+ }
261
+ }
262
+ },
263
+ "nestjs": {
264
+ "typescript": {
265
+ ".env": {
266
+ "action": "append"
267
+ },
268
+ "package.json": {
269
+ "action": "install"
270
+ },
271
+ "src/grok/grok.controller.ts": {
272
+ "action": "create"
273
+ },
274
+ "src/grok/grok.module.ts": {
275
+ "action": "create"
276
+ },
277
+ "src/grok/grok.service.ts": {
278
+ "action": "create"
279
+ }
280
+ }
281
+ },
282
+ "nextjs": {
283
+ "javascript": {
284
+ ".env": {
285
+ "action": "append"
286
+ },
287
+ "app/api/grok/route.js": {
288
+ "action": "create"
289
+ },
290
+ "lib/grok.js": {
291
+ "action": "create"
292
+ },
293
+ "package.json": {
294
+ "action": "install"
295
+ }
296
+ },
297
+ "typescript": {
298
+ ".env": {
299
+ "action": "append"
300
+ },
301
+ "app/api/grok/route.ts": {
302
+ "action": "create"
303
+ },
304
+ "lib/grok.ts": {
305
+ "action": "create"
306
+ },
307
+ "package.json": {
308
+ "action": "install"
309
+ }
310
+ }
311
+ },
312
+ "remixjs": {
313
+ "typescript": {
314
+ ".env": {
315
+ "action": "append"
316
+ },
317
+ "app/routes/api/grok.ts": {
318
+ "action": "create"
319
+ },
320
+ "app/utils/grok.ts": {
321
+ "action": "create"
322
+ },
323
+ "package.json": {
324
+ "action": "install"
325
+ }
326
+ }
327
+ }
328
+ },
329
+ "open-router": {
330
+ "expressjs": {
331
+ "javascript": {
332
+ ".env": {
333
+ "action": "append"
334
+ },
335
+ "controllers/openrouterController.js": {
336
+ "action": "create"
337
+ },
338
+ "index.js": {
339
+ "action": "prepend"
340
+ },
341
+ "package.json": {
342
+ "action": "install"
343
+ },
344
+ "routes/openRouterRoutes.js": {
345
+ "action": "create"
346
+ },
347
+ "utils/openrouter.js": {
348
+ "action": "create"
349
+ }
350
+ },
351
+ "typescript": {
352
+ ".env": {
353
+ "action": "append"
354
+ },
355
+ "controllers/openrouterController.ts": {
356
+ "action": "create"
357
+ },
358
+ "index.ts": {
359
+ "action": "prepend"
360
+ },
361
+ "package.json": {
362
+ "action": "install"
363
+ },
364
+ "routes/openRouterRoutes.ts": {
365
+ "action": "create"
366
+ },
367
+ "utils/openrouter.ts": {
368
+ "action": "create"
369
+ }
370
+ }
371
+ },
372
+ "nestjs": {
373
+ "typescript": {
374
+ ".env": {
375
+ "action": "append"
376
+ },
377
+ "package.json": {
378
+ "action": "install"
379
+ },
380
+ "src/openrouter/openrouter.controller.ts": {
381
+ "action": "create"
382
+ },
383
+ "src/openrouter/openrouter.module.ts": {
384
+ "action": "create"
385
+ },
386
+ "src/openrouter/openrouter.service.ts": {
387
+ "action": "create"
388
+ }
389
+ }
390
+ },
391
+ "nextjs": {
392
+ "javascript": {
393
+ ".env": {
394
+ "action": "append"
395
+ },
396
+ "app/api/openrouter/route.js": {
397
+ "action": "create"
398
+ },
399
+ "lib/openrouter.js": {
400
+ "action": "create"
401
+ },
402
+ "package.json": {
403
+ "action": "install"
404
+ }
405
+ },
406
+ "typescript": {
407
+ ".env": {
408
+ "action": "append"
409
+ },
410
+ "app/api/openrouter/route.ts": {
411
+ "action": "create"
412
+ },
413
+ "lib/openrouter.ts": {
414
+ "action": "create"
415
+ },
416
+ "package.json": {
417
+ "action": "install"
418
+ }
419
+ }
420
+ },
421
+ "remixjs": {
422
+ "typescript": {
423
+ ".env": {
424
+ "action": "append"
425
+ },
426
+ "app/routes/api/openrouter.ts": {
427
+ "action": "create"
428
+ },
429
+ "app/utils/openrouter.ts": {
430
+ "action": "create"
431
+ },
432
+ "package.json": {
433
+ "action": "install"
434
+ }
435
+ }
436
+ }
437
+ },
438
+ "openai": {
439
+ "expressjs": {
440
+ "javascript": {
441
+ ".env": {
442
+ "action": "append"
443
+ },
444
+ "controllers/openaiController.js": {
445
+ "action": "create"
446
+ },
447
+ "index.js": {
448
+ "action": "prepend"
449
+ },
450
+ "package.json": {
451
+ "action": "install"
452
+ },
453
+ "routes/openAiRoutes.js": {
454
+ "action": "create"
455
+ },
456
+ "utils/openai.js": {
457
+ "action": "create"
458
+ }
459
+ },
460
+ "typescript": {
461
+ ".env": {
462
+ "action": "append"
463
+ },
464
+ "controllers/openaiController.ts": {
465
+ "action": "create"
466
+ },
467
+ "index.ts": {
468
+ "action": "prepend"
469
+ },
470
+ "package.json": {
471
+ "action": "install"
472
+ },
473
+ "routes/openAiRoutes.ts": {
474
+ "action": "create"
475
+ },
476
+ "utils/openai.ts": {
477
+ "action": "create"
478
+ }
479
+ }
480
+ },
481
+ "nestjs": {
482
+ "typescript": {
483
+ ".env": {
484
+ "action": "append"
485
+ },
486
+ "package.json": {
487
+ "action": "install"
488
+ },
489
+ "src/openai/openai.controller.ts": {
490
+ "action": "create"
491
+ },
492
+ "src/openai/openai.module.ts": {
493
+ "action": "create"
494
+ },
495
+ "src/openai/openai.service.ts": {
496
+ "action": "create"
497
+ }
498
+ }
499
+ },
500
+ "nextjs": {
501
+ "javascript": {
502
+ ".env": {
503
+ "action": "append"
504
+ },
505
+ "app/api/openai/route.js": {
506
+ "action": "create"
507
+ },
508
+ "lib/openai.js": {
509
+ "action": "create"
510
+ },
511
+ "package.json": {
512
+ "action": "install"
513
+ }
514
+ },
515
+ "typescript": {
516
+ ".env": {
517
+ "action": "append"
518
+ },
519
+ "app/api/openai/route.ts": {
520
+ "action": "create"
521
+ },
522
+ "lib/openai.ts": {
523
+ "action": "create"
524
+ },
525
+ "package.json": {
526
+ "action": "install"
527
+ }
528
+ }
529
+ },
530
+ "remixjs": {
531
+ "typescript": {
532
+ ".env": {
533
+ "action": "append"
534
+ },
535
+ "app/routes/api/openai.ts": {
536
+ "action": "create"
537
+ },
538
+ "app/utils/openai.ts": {
539
+ "action": "create"
540
+ },
541
+ "package.json": {
542
+ "action": "install"
543
+ }
544
+ }
545
+ }
546
+ }
547
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "plausible": {},
3
+ "posthog": {}
4
+ }