@makerkit/cli 1.3.9 → 1.3.10
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/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -151,6 +151,8 @@ var KitsModel = {
|
|
|
151
151
|
plugins: [
|
|
152
152
|
PluginsModel.Waitlist.id,
|
|
153
153
|
PluginsModel.Testimonial.id,
|
|
154
|
+
PluginsModel.Roadmap.id,
|
|
155
|
+
PluginsModel.Kanban.id,
|
|
154
156
|
PluginsModel.AiChatBotTurbo.id,
|
|
155
157
|
PluginsModel.FeedbackPopupTurbo.id,
|
|
156
158
|
PluginsModel.AiTextEditorTurbo.id,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/blog/generate/generate-blog.command.ts","../src/plugins-model.ts","../src/kits-model.ts","../src/utils/openai-client.ts","../src/utils/workspace.ts","../src/commands/blog/blog.command.ts","../src/commands/i18n/i18n-service.ts","../src/commands/i18n/translate/translate.command.ts","../src/commands/i18n/verify/verify.command.ts","../src/commands/i18n/i18n.command.ts","../src/commands/license/activate/activate-license.command.ts","../src/commands/license/license.command.ts","../src/commands/new/new.command.ts","../src/commands/plugins/plugins-service.ts","../src/commands/plugins/install/install-plugin.command.ts","../src/commands/plugins/list/list-plugins.command.ts","../src/commands/plugins/update/update-plugin.command.ts","../src/commands/plugins/plugins.command.ts","../src/index.ts"],"sourcesContent":["import { join } from 'path';\nimport { KitsModel } from '@/src/kits-model';\nimport getOpenAIClient from '@/src/utils/openai-client';\nimport { Workspace } from '@/src/utils/workspace';\nimport chalk from 'chalk';\nimport { Command } from 'commander';\nimport fs from 'fs-extra';\nimport ora from 'ora';\nimport prompts from 'prompts';\nimport { z } from 'zod';\n\nconst schema = z.object({\n title: z.string().min(1).max(70),\n category: z.string().min(1).max(70),\n wordCount: z.number().min(250).max(2500),\n prompt: z\n .string()\n .optional()\n .transform((value) => value || ''),\n});\n\nexport function generateBlogCommand(parentCommand: Command) {\n return parentCommand\n .command('generate')\n .description('Generate your blog posts with AI')\n .action(async () => {\n const { title, prompt, category, wordCount } = schema.parse(\n await getPrompts()\n );\n\n const content = await generateBlogPost({ title, prompt, wordCount });\n const mdx = await getMdxPostTemplate({ title, category, content });\n\n return writeMdxPostTemplate(mdx, title);\n });\n}\n\nexport function getPrompts() {\n return prompts([\n {\n type: 'text',\n name: 'title',\n message: `Enter your ${chalk.cyan('title')}.`,\n },\n {\n type: 'text',\n name: 'category',\n message: `Enter your ${chalk.cyan(\n 'category'\n )}. If it doesn't exist yet, you will need to add it manually to your blog.`,\n },\n {\n type: 'number',\n name: 'wordCount',\n message: `Enter your target ${chalk.cyan(\n 'word count'\n )} (from 250 words, up to 2500).`,\n },\n {\n type: 'text',\n name: 'prompt',\n message: `Would you like to add your own instructions to the AI? (optional)`,\n },\n ]);\n}\n\nasync function generateBlogPost(params: {\n title: string;\n prompt: string;\n wordCount: number;\n}) {\n const client = getOpenAIClient();\n const prompt = getPostPrompt(params);\n const spinner = ora(`Generating blog post...`).start();\n\n try {\n const response = await client.chat.completions.create({\n model: `gpt-3.5-turbo`,\n messages: [\n {\n role: 'user' as const,\n content: prompt,\n },\n ],\n max_tokens: params.wordCount,\n temperature: 0.7,\n });\n\n const content = response.choices[0].message.content ?? '';\n\n spinner.succeed(`Blog post generated successfully`);\n console.log(`Used ${response.usage?.total_tokens} tokens`);\n\n return content;\n } catch (e) {\n console.error(e);\n spinner.fail(`Failed to generate blog post`);\n process.exit(1);\n }\n}\n\nasync function getMdxPostTemplate(params: {\n title: string;\n category: string;\n content: string;\n}) {\n const kit = await Workspace.getKitMeta();\n const isFirebaseKit = kit.id === KitsModel.NextJsFirebase.id;\n\n // we use different properties for firebase and supabase kits\n const categoryProp = isFirebaseKit ? 'collection' : 'category';\n const descriptionProp = isFirebaseKit ? 'excerpt' : 'description';\n const imageProp = isFirebaseKit ? 'coverImage' : 'image';\n\n return `\n---\ntitle: \"${params.title}\"\n${categoryProp}: \"${params.category}\"\ndate: \"${new Date().toISOString()}\"\n${descriptionProp}: \"\"\nlive: false\n${imageProp}: \"\"\n---\n\n${params.content}\n`.trim();\n}\n\nasync function writeMdxPostTemplate(template: string, title: string) {\n const kit = await Workspace.getKitMeta();\n const spinner = ora(`Storing blog post...`).start();\n\n try {\n let blogPath = kit.blogPath;\n\n // when the kit does not have a blog path, we ask the user to provide one\n // this is the case for the Remix kits\n if (!blogPath) {\n blogPath = await prompts({\n type: 'text',\n name: 'blogPath',\n message: `This kit does not support blog posts yet. You can still generate a blog post, but you'll need to manually add it to your blog. Please enter your blog path (e.g. src/content/posts). The path needs to exist.`,\n }).then((response) => response.blogPath as string);\n }\n\n const slug = slugify(title);\n const path = join(process.cwd(), blogPath, `${slug}.mdx`);\n\n await fs.writeFile(path, template);\n\n spinner.succeed(`Blog post stored successfully`);\n } catch (e) {\n console.error(e);\n\n spinner.fail(`Failed to store blog post`);\n }\n}\n\nfunction getPostPrompt(params: {\n title: string;\n prompt: string;\n wordCount: number;\n}) {\n return `\n Generate a professional blog post with title \"${params.title}\".\n Rules:\n \n- The post must be below ${params.wordCount} words\n- Output text using valid Markdown\n- Write professional text while balancing simplicity and complexity in your language and sentence structures.\n- Be an extremely smart, interesting, funny, witty, and confident writer. Readers admire you! \n- Use several paragraphs and an accurate level 2 and 3 headings before each paragraph to maximize readability.\n- Do include level 4 headings (h4) to break complex paragraphs\n- Ensure that headings do not include decimals or numbers with periods. Ensure they're formatted using Markdown.\n- Repeat the main keywords and phrases often for SEO\n \n ${params.prompt ?? ''}\n`.trim();\n}\n\nfunction slugify(text: string) {\n return (text ?? '')\n .toString()\n .normalize('NFKD')\n .toLowerCase()\n .trim()\n .replace(/\\_/g, '-')\n .replace(/\\s+/g, '-')\n .replace(/\\-\\-+/g, '--')\n .replace(/\\_$/g, '');\n}\n","import invariant from 'tiny-invariant';\n\nexport const PluginsModel = {\n CookieBanner: {\n name: `Cookie Banner`,\n id: `cookie-banner`,\n branch: `cookie-banner`,\n description: `Add a cookie banner to your site.`,\n folder: `plugins/cookie-banner`,\n },\n AiChatBot: {\n name: `AI Chatbot`,\n id: `chatbot-v1`,\n branch: `chatbot`,\n description: `Add an AI Chatbot to your site.`,\n folder: `plugins/chatbot`,\n },\n FeedbackPopup: {\n name: `Feedback Popup`,\n id: `feedback-popup-v1`,\n branch: `feedback-popup`,\n description: `Add a feedback popup to your site.`,\n folder: `plugins/feedback-popup`,\n },\n AiTextEditor: {\n name: `AI Text Editor`,\n id: `text-editor-v1`,\n branch: `text-editor`,\n description: `Add an AI Text Editor to your site.`,\n folder: `plugins/text-editor`,\n },\n AiTextEditorTurbo: {\n name: `AI Text Editor`,\n id: `text-editor`,\n branch: `text-editor`,\n description: `Add an AI Text Editor to your site.`,\n folder: `packages/plugins/text-editor`,\n },\n Waitlist: {\n name: `Waitlist`,\n id: `waitlist`,\n branch: `waitlist`,\n description: `Add a waitlist to your site.`,\n folder: `packages/plugins/waitlist`,\n },\n FeedbackPopupTurbo: {\n name: `Feedback Popup`,\n id: `feedback`,\n branch: `feedback`,\n description: `Add a feedback popup to your site.`,\n folder: `packages/plugins/feedback`,\n },\n AiChatBotTurbo: {\n name: `AI Chatbot`,\n id: `chatbot`,\n branch: `chatbot`,\n description: `Add an AI Chatbot to your site.`,\n folder: `packages/plugins/chatbot`,\n },\n Testimonial: {\n name: `Testimonial`,\n id: `testimonial`,\n branch: `testimonial`,\n description: `Add a testimonial to your site.`,\n folder: `packages/plugins/testimonial`,\n },\n Roadmap: {\n name: `Roadmap`,\n id: `roadmap`,\n branch: `roadmap`,\n description: `Add a Roadmap to your site.`,\n folder: `packages/plugins/roadmap`,\n },\n Kanban: {\n name: `Kanban`,\n id: `kanban`,\n branch: `kanban`,\n description: `Add a Kanban component to your site.`,\n folder: `packages/plugins/kanban`,\n },\n GoogleAnalytics: {\n name: `Google Analytics`,\n id: `google-analytics`,\n branch: `google-analytics`,\n description: `Add Google Analytics to your site.`,\n folder: `packages/plugins/analytics/google-analytics`,\n },\n Posthog: {\n name: `Posthog`,\n id: `posthog`,\n branch: `posthog`,\n description: `Add Posthog Analytics to your site.`,\n folder: `packages/plugins/analytics/posthog`,\n },\n Umami: {\n name: `Umami`,\n id: `umami`,\n branch: `umami`,\n description: `Add Umami Analytics to your site.`,\n folder: `packages/plugins/analytics/umami`,\n },\n};\n\nexport function getPluginById(id: string) {\n return Object.values(PluginsModel).find((plugin) => plugin.id === id);\n}\n\nexport function validatePlugin(pluginId: string) {\n const plugin = getPluginById(pluginId);\n\n invariant(plugin, `Plugin ${pluginId} not found`);\n\n return plugin;\n}\n","import { PluginsModel } from '@/src/plugins-model';\nimport invariant from 'tiny-invariant';\n\nexport const KitsModel = {\n NextJsFirebase: {\n name: `Next.js Firebase`,\n id: `next-firebase`,\n repository: `git@github.com:makerkit/next-firebase-saas-kit`,\n blogPath: `_posts`,\n localePath: `public/locales`,\n plugins: [\n PluginsModel.CookieBanner.id,\n PluginsModel.AiChatBot.id,\n PluginsModel.FeedbackPopup.id,\n ],\n },\n NextJsSupabase: {\n name: `Next.js Supabase`,\n id: `next-supabase`,\n localePath: `public/locales`,\n blogPath: `src/content/posts`,\n repository: `git@github.com:makerkit/next-supabase-saas-kit`,\n plugins: [\n PluginsModel.AiChatBot.id,\n PluginsModel.FeedbackPopup.id,\n PluginsModel.CookieBanner.id,\n PluginsModel.AiTextEditor.id,\n ],\n },\n NextJsSupabaseTurbo: {\n name: `Next.js Supabase Turbo`,\n id: `next-supabase-turbo`,\n localePath: `apps/web/public/locales`,\n blogPath: `apps/web/content/posts`,\n repository: `git@github.com:makerkit/next-supabase-saas-kit-turbo`,\n plugins: [\n PluginsModel.Waitlist.id,\n PluginsModel.Testimonial.id,\n PluginsModel.AiChatBotTurbo.id,\n PluginsModel.FeedbackPopupTurbo.id,\n PluginsModel.AiTextEditorTurbo.id,\n PluginsModel.GoogleAnalytics.id,\n PluginsModel.Posthog.id,\n PluginsModel.Umami.id,\n ],\n },\n RemixSupabaseTurbo: {\n name: `Remix Supabase Turbo`,\n id: `remix-supabase-turbo`,\n localePath: `apps/web/public/locales`,\n blogPath: `apps/web/content/posts`,\n repository: `git@github.com:makerkit/remix-supabase-saas-kit-turbo`,\n plugins: [\n PluginsModel.Waitlist.id,\n PluginsModel.Testimonial.id,\n PluginsModel.AiChatBotTurbo.id,\n PluginsModel.FeedbackPopupTurbo.id,\n PluginsModel.AiTextEditorTurbo.id,\n ],\n },\n NextJsSupabaseLite: {\n name: `Next.js Supabase Lite`,\n id: `next-supabase-lite`,\n localePath: `public/locales`,\n blogPath: `src/content/posts`,\n repository: `git@github.com:makerkit/next-supabase-saas-kit-lite`,\n plugins: [],\n },\n RemixFirebase: {\n name: `Remix Firebase`,\n id: `remix-firebase`,\n localePath: `public/locales`,\n blogPath: '',\n repository: `git@github.com:makerkit/remix-firebase-saas-kit`,\n plugins: [],\n },\n RemixSupabase: {\n name: `Remix Supabase`,\n id: `remix-supabase`,\n localePath: `public/locales`,\n blogPath: `app/content/posts`,\n repository: `git@github.com:makerkit/remix-supabase-saas-kit`,\n plugins: [\n PluginsModel.AiChatBot.id,\n PluginsModel.FeedbackPopup.id,\n PluginsModel.CookieBanner.id,\n PluginsModel.AiTextEditor.id,\n ],\n },\n};\n\nexport function getKitById(id: string) {\n return Object.values(KitsModel).find((kit) => kit.id === id);\n}\n\nexport function validateKit(kitId: string) {\n const kit = getKitById(kitId);\n\n invariant(kit, `Kit ${kitId} not found`);\n\n return kit;\n}\n","import OpenAI from 'openai';\n\nfunction getOpenAIClient() {\n const apiKey = process.env.OPENAI_API_KEY;\n\n if (!apiKey) {\n throw new Error(\n 'OPENAI_API_KEY env variable is not set. Please set it in' +\n ' your .env.local file of your Makerkit workspace.'\n );\n }\n\n return new OpenAI({ apiKey });\n}\n\nexport default getOpenAIClient;\n","import { join } from 'path';\nimport { KitsModel } from '@/src/kits-model';\nimport chalk from 'chalk';\nimport fs from 'fs-extra';\n\nexport class Workspace {\n static async getKitMeta() {\n const packageJson = await getPackageJson();\n const kit = await detectKitVersion();\n\n return {\n ...kit,\n version: packageJson.version ?? 'unknown',\n };\n }\n\n static async logWorkspaceInfo() {\n const meta = await Workspace.getKitMeta();\n\n console.log(\n `Makerkit version: ${chalk.cyan(meta.name)} - ${chalk.cyan(\n meta.version ?? 'unknown'\n )}.\\n`\n );\n }\n}\n\nasync function detectKitVersion() {\n let packageJson = await getPackageJson();\n\n if (!packageJson) {\n throw new Error(\n 'No package.json found. Please run this command in a Makerkit workspace.'\n );\n }\n\n let deps = Object.keys(packageJson.dependencies ?? []);\n\n if (deps.includes('turbo')) {\n // locate apps/web\n packageJson = await fs.readJSON(\n join(process.cwd(), 'apps/web/package.json')\n );\n\n deps = Object.keys(packageJson.dependencies ?? []);\n\n if (deps.includes('next')) {\n return KitsModel.NextJsSupabaseTurbo;\n }\n\n if (deps.includes('@remix-run/react')) {\n return KitsModel.RemixSupabaseTurbo;\n }\n }\n\n if (deps.includes('next') && deps.includes('firebase')) {\n return KitsModel.NextJsFirebase;\n }\n\n if (deps.includes('next') && deps.includes('@supabase/supabase-js')) {\n return KitsModel.NextJsSupabase;\n }\n\n if (\n deps.includes('@remix-run/react') &&\n deps.includes('@supabase/supabase-js')\n ) {\n return KitsModel.RemixSupabase;\n }\n\n throw new Error(\n 'Could not detect Makerkit workspace. Please run this command in a Makerkit workspace.'\n );\n}\n\nasync function getPackageJson(): Promise<Record<string, unknown>> {\n return fs\n .readJSON(join(process.cwd(), 'package.json'))\n .catch(() => undefined);\n}\n","import { generateBlogCommand } from '@/src/commands/blog/generate/generate-blog.command';\nimport { Workspace } from '@/src/utils/workspace';\nimport { Command } from 'commander';\n\nexport const blogCommand = new Command()\n .name('blog')\n .description('Manage and generate your blog posts')\n .hook('preAction', () => {\n return Workspace.logWorkspaceInfo();\n });\n\n// set children commands\ngenerateBlogCommand(blogCommand);\n","import { join } from 'path';\nimport getOpenAIClient from '@/src/utils/openai-client';\nimport { Workspace } from '@/src/utils/workspace';\nimport chalk from 'chalk';\nimport fs from 'fs-extra';\nimport OpenAI from 'openai';\n\ntype NestedKey = Record<string, string | Record<string, string>>;\n\nexport class I18nService {\n /**\n * @name verify\n * @description Verifies if the locale files are in sync\n */\n static async verify(base = 'en') {\n const kit = await Workspace.getKitMeta();\n\n const allLocales = fs.readdirSync(kit.localePath).filter((locale) => {\n return locale !== base;\n });\n\n const baseLocaleFolderPath = `${kit.localePath}/${base}`;\n\n const localeFiles = fs.readdirSync(baseLocaleFolderPath).filter((file) => {\n return file.endsWith('.json');\n });\n\n for (const localeFile of localeFiles) {\n for (const locale of allLocales) {\n const baseLocaleFilePath = `${baseLocaleFolderPath}/${localeFile}`;\n const targetLocaleFilePath = `${kit.localePath}/${locale}/${localeFile}`;\n\n const baseLocaleFile = fs.readJSONSync(baseLocaleFilePath);\n const file = fs.readJSONSync(targetLocaleFilePath);\n\n const missingKeys = collectMissingKeys([baseLocaleFile, file]);\n\n if (!missingKeys.length) {\n console.log(\n chalk.green(`Locale ${locale}/${localeFile} is in sync!`)\n );\n\n continue;\n }\n\n console.log(\n chalk.yellow(\n `Locale ${locale}/${localeFile} is missing the following keys: ${missingKeys.join(\n ', '\n )}`\n )\n );\n }\n }\n }\n\n /**\n * @name translate\n * @description Translates the locale files from source to target\n * @param source\n * @param target\n */\n static async translate(source: string, target: string) {\n const kit = await Workspace.getKitMeta();\n const client = getOpenAIClient();\n\n const targetJsonPath = `${kit.localePath}/${target}`;\n const sourceLocalePath = `${kit.localePath}/${source}`;\n\n const sourceLocale = await fs.exists(sourceLocalePath);\n\n if (!sourceLocale) {\n throw new Error(`Source locale at ${sourceLocalePath} not found`);\n }\n\n const files = fs.readdirSync(sourceLocalePath).filter((file) => {\n return file.endsWith('.json');\n });\n\n console.log(`Found the following files: ${files.join(', ')}`);\n\n for (const file of files) {\n const data: Record<string, string | Record<string, string | NestedKey>> =\n {};\n\n const localeFile = fs.readJSONSync(join(sourceLocalePath, file));\n\n console.log(\n chalk.cyan(`Translating \"${file}\". This can take a while...`)\n );\n\n for (const key in localeFile) {\n data[key] = await translateKey(source, target, localeFile[key], client);\n }\n\n console.log(chalk.green(`File \"${file}\" successfully translated!`));\n console.log(chalk.cyan(`Writing file \"${file}\" to ${targetJsonPath}`));\n\n // check if targetJsonPath exists, if not, create it\n (await fs.exists(targetJsonPath)) || (await fs.mkdir(targetJsonPath));\n\n // write file to targetJsonPath\n await fs.writeJSON(join(targetJsonPath, file), data, {});\n\n console.log(chalk.green(`File \"${file}\" successfully written!`));\n }\n }\n}\n\nasync function translateKey(\n source: string,\n target: string,\n key: string | NestedKey,\n client: OpenAI\n) {\n if (typeof key === 'string') {\n return translateString(source, target, key, client);\n }\n\n const data: Record<string, string | NestedKey> = {};\n\n for (const k in key) {\n data[k] = (await translateKey(source, target, key[k], client)) as NestedKey;\n }\n\n return data;\n}\n\nasync function translateString(\n source: string,\n target: string,\n key: string,\n client: OpenAI\n) {\n // skip empty or short keys\n if (!key.trim() || key.length <= 1) {\n return '';\n }\n\n const response = await client.chat.completions.create({\n model: 'gpt-3.5-turbo',\n max_tokens: target.split(' ').length + 50,\n temperature: 0.3,\n messages: [\n {\n role: 'user',\n content: `Translate the text from locale ${source} to ${target}. Text: ${key}. Translation:`,\n },\n ],\n });\n\n return response.choices[0].message.content ?? '';\n}\n\ntype JSONObject = { [key: string]: any };\n\nfunction collectMissingKeys(objects: JSONObject[]): string[] {\n const allKeys: string[] = [];\n\n objects.forEach((obj) => {\n Object.keys(obj).forEach((key) => {\n if (!allKeys.includes(key)) {\n allKeys.push(key);\n }\n });\n });\n\n const missingKeys: string[] = [];\n\n objects.forEach((obj) => {\n allKeys.forEach((key) => {\n if (!Object.keys(obj).includes(key)) {\n missingKeys.push(key);\n }\n });\n });\n\n return missingKeys;\n}\n","import { I18nService } from '@/src/commands/i18n/i18n-service';\nimport chalk from 'chalk';\nimport { Command } from 'commander';\nimport prompts from 'prompts';\n\nexport function createTranslateI18nCommand(parentCommand: Command) {\n return parentCommand\n .command('translate')\n .argument('[source-locale]', 'Source Locale')\n .argument('[target-locale]', 'Target Locale')\n .description('Translate i18n files from source locale to target locale')\n .action(async (sourceLocale, targetLocale) => {\n const locales = await promptLocales(sourceLocale, targetLocale);\n\n await I18nService.translate(locales.sourceLocale, locales.targetLocale);\n });\n}\n\nasync function promptLocales(maybeSource?: string, maybeTarget?: string) {\n const hint = 'e.g. en, fr, es, etc.';\n\n const sourceLocale =\n maybeSource ||\n (\n await prompts([\n {\n type: 'text',\n name: 'locale',\n message: `Enter your ${chalk.cyan('Source Locale')}. ${hint}`,\n hint,\n },\n ])\n ).locale;\n\n const targetLocale =\n maybeTarget ||\n (\n await prompts([\n {\n type: 'text',\n name: 'locale',\n message: `Enter your ${chalk.cyan('Target Locale')}. ${hint}`,\n hint,\n },\n ])\n ).locale;\n\n return {\n sourceLocale,\n targetLocale,\n };\n}\n","import { I18nService } from '@/src/commands/i18n/i18n-service';\nimport { Command } from 'commander';\n\nexport function createVerifyI18nCommand(parentCommand: Command) {\n return parentCommand\n .command('verify')\n .argument('[base-locale]', 'Base Locale')\n .description(\n 'Verify i18n files have no missing keys compared to base locale'\n )\n .action(async (baseLocale = 'en') => {\n await I18nService.verify(baseLocale);\n });\n}\n","import { createTranslateI18nCommand } from '@/src/commands/i18n/translate/translate.command';\nimport { createVerifyI18nCommand } from '@/src/commands/i18n/verify/verify.command';\nimport { Workspace } from '@/src/utils/workspace';\nimport { Command } from 'commander';\n\nexport const i18nCommand = new Command()\n .name('i18n')\n .description('Manage and translate your i18n files')\n .hook('preAction', () => {\n return Workspace.logWorkspaceInfo();\n });\n\n// set children commands\ncreateTranslateI18nCommand(i18nCommand);\ncreateVerifyI18nCommand(i18nCommand);\n","import chalk from 'chalk';\nimport { Command } from 'commander';\nimport ora from 'ora';\nimport prompts from 'prompts';\nimport { z } from 'zod';\n\nconst schema = z.object({\n licenseKey: z.string().min(1).max(32),\n githubUsername: z.string().min(1).max(64),\n});\n\nexport function createActivateLicenseCommand(parentCommand: Command) {\n return parentCommand\n .command('activate')\n .description('Activate your license key for MakerKit')\n .action(async () => {\n const params = await prompts([\n {\n type: 'text',\n name: 'licenseKey',\n message: `Enter your ${chalk.cyan('License Key')}.`,\n validate: (value) => {\n if (value.length < 1) {\n return `Please enter a valid license key`;\n }\n\n return true;\n },\n },\n {\n type: 'text',\n name: 'githubUsername',\n message: `Enter your ${chalk.cyan('Github username')}.`,\n validate: (value) => {\n if (value.length < 1) {\n return `Please enter a valid username`;\n }\n\n return true;\n },\n },\n ]);\n\n const spinner = ora(`Activating license...`).start();\n\n const onError = () => {\n spinner.fail(`Failed to activate license`);\n process.exit(1);\n };\n\n try {\n const response = await activateLicense(schema.parse(params));\n\n if (!response.ok) {\n return onError();\n }\n\n spinner.succeed(`License activated successfully`);\n } catch (e) {\n onError();\n }\n });\n}\n\nasync function activateLicense(params: {\n licenseKey: string;\n githubUsername: string;\n}) {\n return fetch(`https://makerkit.dev/api/ls/license/activate`, {\n method: 'POST',\n body: JSON.stringify(params),\n });\n}\n","import { createActivateLicenseCommand } from '@/src/commands/license/activate/activate-license.command';\nimport { Command } from 'commander';\n\nexport const licenseCommand = new Command()\n .name('license')\n .description('Manage Licenses');\n\ncreateActivateLicenseCommand(licenseCommand);\n","import { join } from 'path';\nimport { KitsModel, validateKit } from '@/src/kits-model';\nimport chalk from 'chalk';\nimport { Command } from 'commander';\nimport { execa } from 'execa';\nimport ora from 'ora';\nimport prompts from 'prompts';\n\nexport const newCommand = new Command()\n .name('new')\n .description('Initialize a new Makerkit project')\n .action(async () => {\n const choices = Object.values(KitsModel).map((kit) => {\n return {\n title: kit.name,\n value: kit.id,\n };\n });\n\n const { kit, name: projectName } = await prompts([\n {\n type: 'select',\n name: 'kit',\n message: `Select the ${chalk.cyan(`SaaS Kit`)} you want to clone`,\n choices,\n },\n {\n type: 'text',\n name: 'name',\n message: `Enter your ${chalk.cyan('Project Name')}.`,\n },\n ]);\n\n const { repository, name: kitName } = validateKit(kit);\n\n const { confirm } = await prompts([\n {\n type: 'confirm',\n name: 'confirm',\n message: `Are you sure you want to clone ${chalk.cyan(\n kitName\n )} to ${chalk.cyan(projectName)}?`,\n },\n ]);\n\n if (!confirm) {\n console.log('Aborting...');\n process.exit(0);\n }\n\n // pull repository from github\n await pullFromGithub(repository, kitName, projectName);\n\n // install dependencies\n await installDependencies(projectName);\n });\n\nasync function pullFromGithub(\n repository: string,\n kit: string,\n projectName: string\n) {\n const spinner = ora(`Cloning ${kit}...`).start();\n\n try {\n await execa('git', ['clone', repository, projectName]);\n\n spinner.succeed(`Cloned ${kit} to ${projectName}...`);\n } catch (e) {\n console.error(e);\n spinner.fail(`Failed to clone ${kit}`);\n\n return Promise.reject(`Failed to clone ${kit}`);\n }\n}\n\nasync function installDependencies(projectName: string) {\n const cwd = join(process.cwd(), projectName);\n const spinner = ora(`Installing dependencies. Please wait...`).start();\n\n try {\n await execa('npm', ['install'], { cwd });\n\n spinner.succeed(`Dependencies successfully installed!`);\n\n console.log(\n `🎉 You can now get started. Open the project in your IDE and read the README.md file for more information.`\n );\n } catch (e) {\n console.error(e);\n spinner.fail(`Failed to install dependencies`);\n\n return Promise.reject(`Failed to install dependencies`);\n }\n}\n","import { validateKit } from '@/src/kits-model';\nimport { PluginsModel, validatePlugin } from '@/src/plugins-model';\nimport { Workspace } from '@/src/utils/workspace';\nimport chalk from 'chalk';\nimport { execaCommand } from 'execa';\nimport ora from 'ora';\nimport prompts from 'prompts';\n\nenum PluginAction {\n Add = 'add',\n Pull = 'pull',\n}\n\nexport class PluginsService {\n static async install(pluginId?: string) {\n const action = PluginAction.Add;\n const plugin = pluginId || (await getPluginFromPrompts(action));\n\n await initPluginCommand(plugin, action);\n }\n\n static async pull(pluginId?: string) {\n const action = PluginAction.Pull;\n const plugin = pluginId || (await getPluginFromPrompts(action));\n\n await initPluginCommand(plugin, action);\n }\n}\n\nasync function initPluginCommand(pluginId: string, action: PluginAction) {\n const { id: kitId } = await Workspace.getKitMeta();\n\n const plugin = validatePlugin(pluginId);\n const kit = validateKit(kitId);\n\n if (!(kit.plugins as string[]).includes(plugin.id)) {\n throw new Error(\n `Plugin ${plugin.name} is not compatible with kit ${kit.name}`\n );\n }\n\n const repository = buildPluginRepositoryName(kit.repository);\n const verb = action === PluginAction.Add ? 'Installing' : 'Updating';\n\n console.log(\n `${verb} ${chalk.cyan(plugin.name)} to kit ${chalk.cyan(\n kit.name\n )} using repo: ${repository} ...`\n );\n\n return executePluginCommand({\n action,\n repository,\n branch: plugin.branch,\n folder: plugin.folder,\n });\n}\n\nasync function getPluginFromPrompts(action: PluginAction) {\n const kit = await Workspace.getKitMeta();\n\n const choices = Object.values(PluginsModel)\n .filter((plugin) => {\n return kit.plugins.includes(plugin.id);\n })\n .map((plugin) => {\n return {\n title: plugin.name,\n value: plugin.id,\n };\n });\n\n const verb = action === PluginAction.Add ? 'install' : 'update';\n\n const { plugin } = await prompts([\n {\n type: 'select',\n name: 'plugin',\n message: `Which ${chalk.cyan('Plugin')} would you like to ${verb}?`,\n choices,\n },\n ]);\n\n return plugin;\n}\n\n// the plugin repository name is the kit repository name + `-plugins`\nfunction buildPluginRepositoryName(repository: string) {\n return repository + `-plugins.git`;\n}\n\nasync function executePluginCommand({\n action,\n repository,\n branch,\n folder,\n}: {\n action: PluginAction;\n repository: string;\n branch: string;\n folder: string;\n}) {\n const verb = action === PluginAction.Add ? 'Installing' : 'Updating';\n const spinner = ora(`${verb} plugin...`).start();\n const commandString = `git subtree ${action} --prefix ${folder} ${repository} ${branch} --squash`;\n\n try {\n await execaCommand(commandString);\n\n const verb = action === PluginAction.Add ? 'installed' : 'updated';\n spinner.succeed(`Plugin ${verb} at ${folder}`);\n } catch (e) {\n console.error(e);\n\n const verb = action === PluginAction.Add ? 'installation' : 'update';\n spinner.fail(`Plugin ${verb} failed`);\n }\n}\n","import { PluginsService } from '@/src/commands/plugins/plugins-service';\nimport { Command } from 'commander';\n\nexport function createInstallPluginCommand(parentCommand: Command) {\n return parentCommand\n .command('install')\n .argument('[plugin-id]', 'Plugin id')\n .description('Install plugin')\n .action(async (maybePluginId) => {\n await PluginsService.install(maybePluginId);\n });\n}\n","import { KitsModel } from '@/src/kits-model';\nimport { validatePlugin } from '@/src/plugins-model';\nimport chalk from 'chalk';\nimport { Command } from 'commander';\n\nexport function createListPluginsCommand(parentCommand: Command) {\n return parentCommand\n .command('list')\n .description('List available plugins.')\n .action(() => {\n const kits = Object.values(KitsModel);\n\n console.log(chalk.white('Makerkit available plugins...'));\n console.log(\n `[${chalk.green('Plugin Name')} (${chalk.gray('plugin-id')})]\\n`\n );\n\n for (const kit of kits) {\n console.log(`${chalk.cyan(kit.name)}`);\n\n if (!kit.plugins.length) {\n console.log(chalk.yellow(`- No plugins available`) + '\\n');\n\n continue;\n }\n\n for (const plugin of kit.plugins) {\n const { name, id } = validatePlugin(plugin);\n console.log(`- ${chalk.green(name)} (${chalk.gray(id)})`);\n }\n\n console.log('');\n }\n });\n}\n","import { PluginsService } from '@/src/commands/plugins/plugins-service';\nimport { Command } from 'commander';\n\nexport function createUpdatePluginCommand(parentCommand: Command) {\n return parentCommand\n .command('update')\n .argument('[plugin-id]', 'Plugin id')\n .description('Update plugin to the latest version')\n .action(async (maybePluginId) => {\n await PluginsService.pull(maybePluginId);\n });\n}\n","import { createInstallPluginCommand } from '@/src/commands/plugins/install/install-plugin.command';\nimport { createListPluginsCommand } from '@/src/commands/plugins/list/list-plugins.command';\nimport { createUpdatePluginCommand } from '@/src/commands/plugins/update/update-plugin.command';\nimport { Workspace } from '@/src/utils/workspace';\nimport { Command } from 'commander';\n\nexport const pluginsCommand = new Command()\n .name('plugins')\n .description('List and install plugins.')\n .hook('preAction', () => {\n return Workspace.logWorkspaceInfo();\n });\n\n// set children commands\ncreateListPluginsCommand(pluginsCommand);\ncreateInstallPluginCommand(pluginsCommand);\ncreateUpdatePluginCommand(pluginsCommand);\n","#!/usr/bin/env node\nimport { blogCommand } from '@/src/commands/blog/blog.command';\nimport { i18nCommand } from '@/src/commands/i18n/i18n.command';\nimport { licenseCommand } from '@/src/commands/license/license.command';\nimport { newCommand } from '@/src/commands/new/new.command';\nimport { pluginsCommand } from '@/src/commands/plugins/plugins.command';\nimport { Command } from 'commander';\nimport { config } from 'dotenv';\n\nconfig({\n path: '.env.local',\n});\n\nprocess.on('SIGINT', () => process.exit(0));\nprocess.on('SIGTERM', () => process.exit(0));\n\nasync function main() {\n const program = new Command()\n .name('makerkit')\n .description(\n 'Your SaaS Kit companion. Add plugins, manage migrations, and more.'\n )\n .version('-v, --version', 'display the version number');\n\n program\n .addCommand(newCommand)\n .addCommand(pluginsCommand)\n .addCommand(i18nCommand)\n .addCommand(licenseCommand)\n .addCommand(blogCommand);\n\n program.parse();\n}\n\nvoid main();\n"],"mappings":"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","names":["join","invariant","chalk","fs","join","join","chalk","fs","join","chalk","prompts","Command","chalk","ora","prompts","z","schema","Command","join","chalk","Command","ora","prompts","kit","join","chalk","ora","prompts","chalk","plugin","prompts","ora","verb","chalk","Command","Command"]}
|
|
1
|
+
{"version":3,"sources":["../src/commands/blog/generate/generate-blog.command.ts","../src/plugins-model.ts","../src/kits-model.ts","../src/utils/openai-client.ts","../src/utils/workspace.ts","../src/commands/blog/blog.command.ts","../src/commands/i18n/i18n-service.ts","../src/commands/i18n/translate/translate.command.ts","../src/commands/i18n/verify/verify.command.ts","../src/commands/i18n/i18n.command.ts","../src/commands/license/activate/activate-license.command.ts","../src/commands/license/license.command.ts","../src/commands/new/new.command.ts","../src/commands/plugins/plugins-service.ts","../src/commands/plugins/install/install-plugin.command.ts","../src/commands/plugins/list/list-plugins.command.ts","../src/commands/plugins/update/update-plugin.command.ts","../src/commands/plugins/plugins.command.ts","../src/index.ts"],"sourcesContent":["import { join } from 'path';\nimport { KitsModel } from '@/src/kits-model';\nimport getOpenAIClient from '@/src/utils/openai-client';\nimport { Workspace } from '@/src/utils/workspace';\nimport chalk from 'chalk';\nimport { Command } from 'commander';\nimport fs from 'fs-extra';\nimport ora from 'ora';\nimport prompts from 'prompts';\nimport { z } from 'zod';\n\nconst schema = z.object({\n title: z.string().min(1).max(70),\n category: z.string().min(1).max(70),\n wordCount: z.number().min(250).max(2500),\n prompt: z\n .string()\n .optional()\n .transform((value) => value || ''),\n});\n\nexport function generateBlogCommand(parentCommand: Command) {\n return parentCommand\n .command('generate')\n .description('Generate your blog posts with AI')\n .action(async () => {\n const { title, prompt, category, wordCount } = schema.parse(\n await getPrompts()\n );\n\n const content = await generateBlogPost({ title, prompt, wordCount });\n const mdx = await getMdxPostTemplate({ title, category, content });\n\n return writeMdxPostTemplate(mdx, title);\n });\n}\n\nexport function getPrompts() {\n return prompts([\n {\n type: 'text',\n name: 'title',\n message: `Enter your ${chalk.cyan('title')}.`,\n },\n {\n type: 'text',\n name: 'category',\n message: `Enter your ${chalk.cyan(\n 'category'\n )}. If it doesn't exist yet, you will need to add it manually to your blog.`,\n },\n {\n type: 'number',\n name: 'wordCount',\n message: `Enter your target ${chalk.cyan(\n 'word count'\n )} (from 250 words, up to 2500).`,\n },\n {\n type: 'text',\n name: 'prompt',\n message: `Would you like to add your own instructions to the AI? (optional)`,\n },\n ]);\n}\n\nasync function generateBlogPost(params: {\n title: string;\n prompt: string;\n wordCount: number;\n}) {\n const client = getOpenAIClient();\n const prompt = getPostPrompt(params);\n const spinner = ora(`Generating blog post...`).start();\n\n try {\n const response = await client.chat.completions.create({\n model: `gpt-3.5-turbo`,\n messages: [\n {\n role: 'user' as const,\n content: prompt,\n },\n ],\n max_tokens: params.wordCount,\n temperature: 0.7,\n });\n\n const content = response.choices[0].message.content ?? '';\n\n spinner.succeed(`Blog post generated successfully`);\n console.log(`Used ${response.usage?.total_tokens} tokens`);\n\n return content;\n } catch (e) {\n console.error(e);\n spinner.fail(`Failed to generate blog post`);\n process.exit(1);\n }\n}\n\nasync function getMdxPostTemplate(params: {\n title: string;\n category: string;\n content: string;\n}) {\n const kit = await Workspace.getKitMeta();\n const isFirebaseKit = kit.id === KitsModel.NextJsFirebase.id;\n\n // we use different properties for firebase and supabase kits\n const categoryProp = isFirebaseKit ? 'collection' : 'category';\n const descriptionProp = isFirebaseKit ? 'excerpt' : 'description';\n const imageProp = isFirebaseKit ? 'coverImage' : 'image';\n\n return `\n---\ntitle: \"${params.title}\"\n${categoryProp}: \"${params.category}\"\ndate: \"${new Date().toISOString()}\"\n${descriptionProp}: \"\"\nlive: false\n${imageProp}: \"\"\n---\n\n${params.content}\n`.trim();\n}\n\nasync function writeMdxPostTemplate(template: string, title: string) {\n const kit = await Workspace.getKitMeta();\n const spinner = ora(`Storing blog post...`).start();\n\n try {\n let blogPath = kit.blogPath;\n\n // when the kit does not have a blog path, we ask the user to provide one\n // this is the case for the Remix kits\n if (!blogPath) {\n blogPath = await prompts({\n type: 'text',\n name: 'blogPath',\n message: `This kit does not support blog posts yet. You can still generate a blog post, but you'll need to manually add it to your blog. Please enter your blog path (e.g. src/content/posts). The path needs to exist.`,\n }).then((response) => response.blogPath as string);\n }\n\n const slug = slugify(title);\n const path = join(process.cwd(), blogPath, `${slug}.mdx`);\n\n await fs.writeFile(path, template);\n\n spinner.succeed(`Blog post stored successfully`);\n } catch (e) {\n console.error(e);\n\n spinner.fail(`Failed to store blog post`);\n }\n}\n\nfunction getPostPrompt(params: {\n title: string;\n prompt: string;\n wordCount: number;\n}) {\n return `\n Generate a professional blog post with title \"${params.title}\".\n Rules:\n \n- The post must be below ${params.wordCount} words\n- Output text using valid Markdown\n- Write professional text while balancing simplicity and complexity in your language and sentence structures.\n- Be an extremely smart, interesting, funny, witty, and confident writer. Readers admire you! \n- Use several paragraphs and an accurate level 2 and 3 headings before each paragraph to maximize readability.\n- Do include level 4 headings (h4) to break complex paragraphs\n- Ensure that headings do not include decimals or numbers with periods. Ensure they're formatted using Markdown.\n- Repeat the main keywords and phrases often for SEO\n \n ${params.prompt ?? ''}\n`.trim();\n}\n\nfunction slugify(text: string) {\n return (text ?? '')\n .toString()\n .normalize('NFKD')\n .toLowerCase()\n .trim()\n .replace(/\\_/g, '-')\n .replace(/\\s+/g, '-')\n .replace(/\\-\\-+/g, '--')\n .replace(/\\_$/g, '');\n}\n","import invariant from 'tiny-invariant';\n\nexport const PluginsModel = {\n CookieBanner: {\n name: `Cookie Banner`,\n id: `cookie-banner`,\n branch: `cookie-banner`,\n description: `Add a cookie banner to your site.`,\n folder: `plugins/cookie-banner`,\n },\n AiChatBot: {\n name: `AI Chatbot`,\n id: `chatbot-v1`,\n branch: `chatbot`,\n description: `Add an AI Chatbot to your site.`,\n folder: `plugins/chatbot`,\n },\n FeedbackPopup: {\n name: `Feedback Popup`,\n id: `feedback-popup-v1`,\n branch: `feedback-popup`,\n description: `Add a feedback popup to your site.`,\n folder: `plugins/feedback-popup`,\n },\n AiTextEditor: {\n name: `AI Text Editor`,\n id: `text-editor-v1`,\n branch: `text-editor`,\n description: `Add an AI Text Editor to your site.`,\n folder: `plugins/text-editor`,\n },\n AiTextEditorTurbo: {\n name: `AI Text Editor`,\n id: `text-editor`,\n branch: `text-editor`,\n description: `Add an AI Text Editor to your site.`,\n folder: `packages/plugins/text-editor`,\n },\n Waitlist: {\n name: `Waitlist`,\n id: `waitlist`,\n branch: `waitlist`,\n description: `Add a waitlist to your site.`,\n folder: `packages/plugins/waitlist`,\n },\n FeedbackPopupTurbo: {\n name: `Feedback Popup`,\n id: `feedback`,\n branch: `feedback`,\n description: `Add a feedback popup to your site.`,\n folder: `packages/plugins/feedback`,\n },\n AiChatBotTurbo: {\n name: `AI Chatbot`,\n id: `chatbot`,\n branch: `chatbot`,\n description: `Add an AI Chatbot to your site.`,\n folder: `packages/plugins/chatbot`,\n },\n Testimonial: {\n name: `Testimonial`,\n id: `testimonial`,\n branch: `testimonial`,\n description: `Add a testimonial to your site.`,\n folder: `packages/plugins/testimonial`,\n },\n Roadmap: {\n name: `Roadmap`,\n id: `roadmap`,\n branch: `roadmap`,\n description: `Add a Roadmap to your site.`,\n folder: `packages/plugins/roadmap`,\n },\n Kanban: {\n name: `Kanban`,\n id: `kanban`,\n branch: `kanban`,\n description: `Add a Kanban component to your site.`,\n folder: `packages/plugins/kanban`,\n },\n GoogleAnalytics: {\n name: `Google Analytics`,\n id: `google-analytics`,\n branch: `google-analytics`,\n description: `Add Google Analytics to your site.`,\n folder: `packages/plugins/analytics/google-analytics`,\n },\n Posthog: {\n name: `Posthog`,\n id: `posthog`,\n branch: `posthog`,\n description: `Add Posthog Analytics to your site.`,\n folder: `packages/plugins/analytics/posthog`,\n },\n Umami: {\n name: `Umami`,\n id: `umami`,\n branch: `umami`,\n description: `Add Umami Analytics to your site.`,\n folder: `packages/plugins/analytics/umami`,\n },\n};\n\nexport function getPluginById(id: string) {\n return Object.values(PluginsModel).find((plugin) => plugin.id === id);\n}\n\nexport function validatePlugin(pluginId: string) {\n const plugin = getPluginById(pluginId);\n\n invariant(plugin, `Plugin ${pluginId} not found`);\n\n return plugin;\n}\n","import { PluginsModel } from '@/src/plugins-model';\nimport invariant from 'tiny-invariant';\n\nexport const KitsModel = {\n NextJsFirebase: {\n name: `Next.js Firebase`,\n id: `next-firebase`,\n repository: `git@github.com:makerkit/next-firebase-saas-kit`,\n blogPath: `_posts`,\n localePath: `public/locales`,\n plugins: [\n PluginsModel.CookieBanner.id,\n PluginsModel.AiChatBot.id,\n PluginsModel.FeedbackPopup.id,\n ],\n },\n NextJsSupabase: {\n name: `Next.js Supabase`,\n id: `next-supabase`,\n localePath: `public/locales`,\n blogPath: `src/content/posts`,\n repository: `git@github.com:makerkit/next-supabase-saas-kit`,\n plugins: [\n PluginsModel.AiChatBot.id,\n PluginsModel.FeedbackPopup.id,\n PluginsModel.CookieBanner.id,\n PluginsModel.AiTextEditor.id,\n ],\n },\n NextJsSupabaseTurbo: {\n name: `Next.js Supabase Turbo`,\n id: `next-supabase-turbo`,\n localePath: `apps/web/public/locales`,\n blogPath: `apps/web/content/posts`,\n repository: `git@github.com:makerkit/next-supabase-saas-kit-turbo`,\n plugins: [\n PluginsModel.Waitlist.id,\n PluginsModel.Testimonial.id,\n PluginsModel.Roadmap.id,\n PluginsModel.Kanban.id,\n PluginsModel.AiChatBotTurbo.id,\n PluginsModel.FeedbackPopupTurbo.id,\n PluginsModel.AiTextEditorTurbo.id,\n PluginsModel.GoogleAnalytics.id,\n PluginsModel.Posthog.id,\n PluginsModel.Umami.id,\n ],\n },\n RemixSupabaseTurbo: {\n name: `Remix Supabase Turbo`,\n id: `remix-supabase-turbo`,\n localePath: `apps/web/public/locales`,\n blogPath: `apps/web/content/posts`,\n repository: `git@github.com:makerkit/remix-supabase-saas-kit-turbo`,\n plugins: [\n PluginsModel.Waitlist.id,\n PluginsModel.Testimonial.id,\n PluginsModel.AiChatBotTurbo.id,\n PluginsModel.FeedbackPopupTurbo.id,\n PluginsModel.AiTextEditorTurbo.id,\n ],\n },\n NextJsSupabaseLite: {\n name: `Next.js Supabase Lite`,\n id: `next-supabase-lite`,\n localePath: `public/locales`,\n blogPath: `src/content/posts`,\n repository: `git@github.com:makerkit/next-supabase-saas-kit-lite`,\n plugins: [],\n },\n RemixFirebase: {\n name: `Remix Firebase`,\n id: `remix-firebase`,\n localePath: `public/locales`,\n blogPath: '',\n repository: `git@github.com:makerkit/remix-firebase-saas-kit`,\n plugins: [],\n },\n RemixSupabase: {\n name: `Remix Supabase`,\n id: `remix-supabase`,\n localePath: `public/locales`,\n blogPath: `app/content/posts`,\n repository: `git@github.com:makerkit/remix-supabase-saas-kit`,\n plugins: [\n PluginsModel.AiChatBot.id,\n PluginsModel.FeedbackPopup.id,\n PluginsModel.CookieBanner.id,\n PluginsModel.AiTextEditor.id,\n ],\n },\n};\n\nexport function getKitById(id: string) {\n return Object.values(KitsModel).find((kit) => kit.id === id);\n}\n\nexport function validateKit(kitId: string) {\n const kit = getKitById(kitId);\n\n invariant(kit, `Kit ${kitId} not found`);\n\n return kit;\n}\n","import OpenAI from 'openai';\n\nfunction getOpenAIClient() {\n const apiKey = process.env.OPENAI_API_KEY;\n\n if (!apiKey) {\n throw new Error(\n 'OPENAI_API_KEY env variable is not set. Please set it in' +\n ' your .env.local file of your Makerkit workspace.'\n );\n }\n\n return new OpenAI({ apiKey });\n}\n\nexport default getOpenAIClient;\n","import { join } from 'path';\nimport { KitsModel } from '@/src/kits-model';\nimport chalk from 'chalk';\nimport fs from 'fs-extra';\n\nexport class Workspace {\n static async getKitMeta() {\n const packageJson = await getPackageJson();\n const kit = await detectKitVersion();\n\n return {\n ...kit,\n version: packageJson.version ?? 'unknown',\n };\n }\n\n static async logWorkspaceInfo() {\n const meta = await Workspace.getKitMeta();\n\n console.log(\n `Makerkit version: ${chalk.cyan(meta.name)} - ${chalk.cyan(\n meta.version ?? 'unknown'\n )}.\\n`\n );\n }\n}\n\nasync function detectKitVersion() {\n let packageJson = await getPackageJson();\n\n if (!packageJson) {\n throw new Error(\n 'No package.json found. Please run this command in a Makerkit workspace.'\n );\n }\n\n let deps = Object.keys(packageJson.dependencies ?? []);\n\n if (deps.includes('turbo')) {\n // locate apps/web\n packageJson = await fs.readJSON(\n join(process.cwd(), 'apps/web/package.json')\n );\n\n deps = Object.keys(packageJson.dependencies ?? []);\n\n if (deps.includes('next')) {\n return KitsModel.NextJsSupabaseTurbo;\n }\n\n if (deps.includes('@remix-run/react')) {\n return KitsModel.RemixSupabaseTurbo;\n }\n }\n\n if (deps.includes('next') && deps.includes('firebase')) {\n return KitsModel.NextJsFirebase;\n }\n\n if (deps.includes('next') && deps.includes('@supabase/supabase-js')) {\n return KitsModel.NextJsSupabase;\n }\n\n if (\n deps.includes('@remix-run/react') &&\n deps.includes('@supabase/supabase-js')\n ) {\n return KitsModel.RemixSupabase;\n }\n\n throw new Error(\n 'Could not detect Makerkit workspace. Please run this command in a Makerkit workspace.'\n );\n}\n\nasync function getPackageJson(): Promise<Record<string, unknown>> {\n return fs\n .readJSON(join(process.cwd(), 'package.json'))\n .catch(() => undefined);\n}\n","import { generateBlogCommand } from '@/src/commands/blog/generate/generate-blog.command';\nimport { Workspace } from '@/src/utils/workspace';\nimport { Command } from 'commander';\n\nexport const blogCommand = new Command()\n .name('blog')\n .description('Manage and generate your blog posts')\n .hook('preAction', () => {\n return Workspace.logWorkspaceInfo();\n });\n\n// set children commands\ngenerateBlogCommand(blogCommand);\n","import { join } from 'path';\nimport getOpenAIClient from '@/src/utils/openai-client';\nimport { Workspace } from '@/src/utils/workspace';\nimport chalk from 'chalk';\nimport fs from 'fs-extra';\nimport OpenAI from 'openai';\n\ntype NestedKey = Record<string, string | Record<string, string>>;\n\nexport class I18nService {\n /**\n * @name verify\n * @description Verifies if the locale files are in sync\n */\n static async verify(base = 'en') {\n const kit = await Workspace.getKitMeta();\n\n const allLocales = fs.readdirSync(kit.localePath).filter((locale) => {\n return locale !== base;\n });\n\n const baseLocaleFolderPath = `${kit.localePath}/${base}`;\n\n const localeFiles = fs.readdirSync(baseLocaleFolderPath).filter((file) => {\n return file.endsWith('.json');\n });\n\n for (const localeFile of localeFiles) {\n for (const locale of allLocales) {\n const baseLocaleFilePath = `${baseLocaleFolderPath}/${localeFile}`;\n const targetLocaleFilePath = `${kit.localePath}/${locale}/${localeFile}`;\n\n const baseLocaleFile = fs.readJSONSync(baseLocaleFilePath);\n const file = fs.readJSONSync(targetLocaleFilePath);\n\n const missingKeys = collectMissingKeys([baseLocaleFile, file]);\n\n if (!missingKeys.length) {\n console.log(\n chalk.green(`Locale ${locale}/${localeFile} is in sync!`)\n );\n\n continue;\n }\n\n console.log(\n chalk.yellow(\n `Locale ${locale}/${localeFile} is missing the following keys: ${missingKeys.join(\n ', '\n )}`\n )\n );\n }\n }\n }\n\n /**\n * @name translate\n * @description Translates the locale files from source to target\n * @param source\n * @param target\n */\n static async translate(source: string, target: string) {\n const kit = await Workspace.getKitMeta();\n const client = getOpenAIClient();\n\n const targetJsonPath = `${kit.localePath}/${target}`;\n const sourceLocalePath = `${kit.localePath}/${source}`;\n\n const sourceLocale = await fs.exists(sourceLocalePath);\n\n if (!sourceLocale) {\n throw new Error(`Source locale at ${sourceLocalePath} not found`);\n }\n\n const files = fs.readdirSync(sourceLocalePath).filter((file) => {\n return file.endsWith('.json');\n });\n\n console.log(`Found the following files: ${files.join(', ')}`);\n\n for (const file of files) {\n const data: Record<string, string | Record<string, string | NestedKey>> =\n {};\n\n const localeFile = fs.readJSONSync(join(sourceLocalePath, file));\n\n console.log(\n chalk.cyan(`Translating \"${file}\". This can take a while...`)\n );\n\n for (const key in localeFile) {\n data[key] = await translateKey(source, target, localeFile[key], client);\n }\n\n console.log(chalk.green(`File \"${file}\" successfully translated!`));\n console.log(chalk.cyan(`Writing file \"${file}\" to ${targetJsonPath}`));\n\n // check if targetJsonPath exists, if not, create it\n (await fs.exists(targetJsonPath)) || (await fs.mkdir(targetJsonPath));\n\n // write file to targetJsonPath\n await fs.writeJSON(join(targetJsonPath, file), data, {});\n\n console.log(chalk.green(`File \"${file}\" successfully written!`));\n }\n }\n}\n\nasync function translateKey(\n source: string,\n target: string,\n key: string | NestedKey,\n client: OpenAI\n) {\n if (typeof key === 'string') {\n return translateString(source, target, key, client);\n }\n\n const data: Record<string, string | NestedKey> = {};\n\n for (const k in key) {\n data[k] = (await translateKey(source, target, key[k], client)) as NestedKey;\n }\n\n return data;\n}\n\nasync function translateString(\n source: string,\n target: string,\n key: string,\n client: OpenAI\n) {\n // skip empty or short keys\n if (!key.trim() || key.length <= 1) {\n return '';\n }\n\n const response = await client.chat.completions.create({\n model: 'gpt-3.5-turbo',\n max_tokens: target.split(' ').length + 50,\n temperature: 0.3,\n messages: [\n {\n role: 'user',\n content: `Translate the text from locale ${source} to ${target}. Text: ${key}. Translation:`,\n },\n ],\n });\n\n return response.choices[0].message.content ?? '';\n}\n\ntype JSONObject = { [key: string]: any };\n\nfunction collectMissingKeys(objects: JSONObject[]): string[] {\n const allKeys: string[] = [];\n\n objects.forEach((obj) => {\n Object.keys(obj).forEach((key) => {\n if (!allKeys.includes(key)) {\n allKeys.push(key);\n }\n });\n });\n\n const missingKeys: string[] = [];\n\n objects.forEach((obj) => {\n allKeys.forEach((key) => {\n if (!Object.keys(obj).includes(key)) {\n missingKeys.push(key);\n }\n });\n });\n\n return missingKeys;\n}\n","import { I18nService } from '@/src/commands/i18n/i18n-service';\nimport chalk from 'chalk';\nimport { Command } from 'commander';\nimport prompts from 'prompts';\n\nexport function createTranslateI18nCommand(parentCommand: Command) {\n return parentCommand\n .command('translate')\n .argument('[source-locale]', 'Source Locale')\n .argument('[target-locale]', 'Target Locale')\n .description('Translate i18n files from source locale to target locale')\n .action(async (sourceLocale, targetLocale) => {\n const locales = await promptLocales(sourceLocale, targetLocale);\n\n await I18nService.translate(locales.sourceLocale, locales.targetLocale);\n });\n}\n\nasync function promptLocales(maybeSource?: string, maybeTarget?: string) {\n const hint = 'e.g. en, fr, es, etc.';\n\n const sourceLocale =\n maybeSource ||\n (\n await prompts([\n {\n type: 'text',\n name: 'locale',\n message: `Enter your ${chalk.cyan('Source Locale')}. ${hint}`,\n hint,\n },\n ])\n ).locale;\n\n const targetLocale =\n maybeTarget ||\n (\n await prompts([\n {\n type: 'text',\n name: 'locale',\n message: `Enter your ${chalk.cyan('Target Locale')}. ${hint}`,\n hint,\n },\n ])\n ).locale;\n\n return {\n sourceLocale,\n targetLocale,\n };\n}\n","import { I18nService } from '@/src/commands/i18n/i18n-service';\nimport { Command } from 'commander';\n\nexport function createVerifyI18nCommand(parentCommand: Command) {\n return parentCommand\n .command('verify')\n .argument('[base-locale]', 'Base Locale')\n .description(\n 'Verify i18n files have no missing keys compared to base locale'\n )\n .action(async (baseLocale = 'en') => {\n await I18nService.verify(baseLocale);\n });\n}\n","import { createTranslateI18nCommand } from '@/src/commands/i18n/translate/translate.command';\nimport { createVerifyI18nCommand } from '@/src/commands/i18n/verify/verify.command';\nimport { Workspace } from '@/src/utils/workspace';\nimport { Command } from 'commander';\n\nexport const i18nCommand = new Command()\n .name('i18n')\n .description('Manage and translate your i18n files')\n .hook('preAction', () => {\n return Workspace.logWorkspaceInfo();\n });\n\n// set children commands\ncreateTranslateI18nCommand(i18nCommand);\ncreateVerifyI18nCommand(i18nCommand);\n","import chalk from 'chalk';\nimport { Command } from 'commander';\nimport ora from 'ora';\nimport prompts from 'prompts';\nimport { z } from 'zod';\n\nconst schema = z.object({\n licenseKey: z.string().min(1).max(32),\n githubUsername: z.string().min(1).max(64),\n});\n\nexport function createActivateLicenseCommand(parentCommand: Command) {\n return parentCommand\n .command('activate')\n .description('Activate your license key for MakerKit')\n .action(async () => {\n const params = await prompts([\n {\n type: 'text',\n name: 'licenseKey',\n message: `Enter your ${chalk.cyan('License Key')}.`,\n validate: (value) => {\n if (value.length < 1) {\n return `Please enter a valid license key`;\n }\n\n return true;\n },\n },\n {\n type: 'text',\n name: 'githubUsername',\n message: `Enter your ${chalk.cyan('Github username')}.`,\n validate: (value) => {\n if (value.length < 1) {\n return `Please enter a valid username`;\n }\n\n return true;\n },\n },\n ]);\n\n const spinner = ora(`Activating license...`).start();\n\n const onError = () => {\n spinner.fail(`Failed to activate license`);\n process.exit(1);\n };\n\n try {\n const response = await activateLicense(schema.parse(params));\n\n if (!response.ok) {\n return onError();\n }\n\n spinner.succeed(`License activated successfully`);\n } catch (e) {\n onError();\n }\n });\n}\n\nasync function activateLicense(params: {\n licenseKey: string;\n githubUsername: string;\n}) {\n return fetch(`https://makerkit.dev/api/ls/license/activate`, {\n method: 'POST',\n body: JSON.stringify(params),\n });\n}\n","import { createActivateLicenseCommand } from '@/src/commands/license/activate/activate-license.command';\nimport { Command } from 'commander';\n\nexport const licenseCommand = new Command()\n .name('license')\n .description('Manage Licenses');\n\ncreateActivateLicenseCommand(licenseCommand);\n","import { join } from 'path';\nimport { KitsModel, validateKit } from '@/src/kits-model';\nimport chalk from 'chalk';\nimport { Command } from 'commander';\nimport { execa } from 'execa';\nimport ora from 'ora';\nimport prompts from 'prompts';\n\nexport const newCommand = new Command()\n .name('new')\n .description('Initialize a new Makerkit project')\n .action(async () => {\n const choices = Object.values(KitsModel).map((kit) => {\n return {\n title: kit.name,\n value: kit.id,\n };\n });\n\n const { kit, name: projectName } = await prompts([\n {\n type: 'select',\n name: 'kit',\n message: `Select the ${chalk.cyan(`SaaS Kit`)} you want to clone`,\n choices,\n },\n {\n type: 'text',\n name: 'name',\n message: `Enter your ${chalk.cyan('Project Name')}.`,\n },\n ]);\n\n const { repository, name: kitName } = validateKit(kit);\n\n const { confirm } = await prompts([\n {\n type: 'confirm',\n name: 'confirm',\n message: `Are you sure you want to clone ${chalk.cyan(\n kitName\n )} to ${chalk.cyan(projectName)}?`,\n },\n ]);\n\n if (!confirm) {\n console.log('Aborting...');\n process.exit(0);\n }\n\n // pull repository from github\n await pullFromGithub(repository, kitName, projectName);\n\n // install dependencies\n await installDependencies(projectName);\n });\n\nasync function pullFromGithub(\n repository: string,\n kit: string,\n projectName: string\n) {\n const spinner = ora(`Cloning ${kit}...`).start();\n\n try {\n await execa('git', ['clone', repository, projectName]);\n\n spinner.succeed(`Cloned ${kit} to ${projectName}...`);\n } catch (e) {\n console.error(e);\n spinner.fail(`Failed to clone ${kit}`);\n\n return Promise.reject(`Failed to clone ${kit}`);\n }\n}\n\nasync function installDependencies(projectName: string) {\n const cwd = join(process.cwd(), projectName);\n const spinner = ora(`Installing dependencies. Please wait...`).start();\n\n try {\n await execa('npm', ['install'], { cwd });\n\n spinner.succeed(`Dependencies successfully installed!`);\n\n console.log(\n `🎉 You can now get started. Open the project in your IDE and read the README.md file for more information.`\n );\n } catch (e) {\n console.error(e);\n spinner.fail(`Failed to install dependencies`);\n\n return Promise.reject(`Failed to install dependencies`);\n }\n}\n","import { validateKit } from '@/src/kits-model';\nimport { PluginsModel, validatePlugin } from '@/src/plugins-model';\nimport { Workspace } from '@/src/utils/workspace';\nimport chalk from 'chalk';\nimport { execaCommand } from 'execa';\nimport ora from 'ora';\nimport prompts from 'prompts';\n\nenum PluginAction {\n Add = 'add',\n Pull = 'pull',\n}\n\nexport class PluginsService {\n static async install(pluginId?: string) {\n const action = PluginAction.Add;\n const plugin = pluginId || (await getPluginFromPrompts(action));\n\n await initPluginCommand(plugin, action);\n }\n\n static async pull(pluginId?: string) {\n const action = PluginAction.Pull;\n const plugin = pluginId || (await getPluginFromPrompts(action));\n\n await initPluginCommand(plugin, action);\n }\n}\n\nasync function initPluginCommand(pluginId: string, action: PluginAction) {\n const { id: kitId } = await Workspace.getKitMeta();\n\n const plugin = validatePlugin(pluginId);\n const kit = validateKit(kitId);\n\n if (!(kit.plugins as string[]).includes(plugin.id)) {\n throw new Error(\n `Plugin ${plugin.name} is not compatible with kit ${kit.name}`\n );\n }\n\n const repository = buildPluginRepositoryName(kit.repository);\n const verb = action === PluginAction.Add ? 'Installing' : 'Updating';\n\n console.log(\n `${verb} ${chalk.cyan(plugin.name)} to kit ${chalk.cyan(\n kit.name\n )} using repo: ${repository} ...`\n );\n\n return executePluginCommand({\n action,\n repository,\n branch: plugin.branch,\n folder: plugin.folder,\n });\n}\n\nasync function getPluginFromPrompts(action: PluginAction) {\n const kit = await Workspace.getKitMeta();\n\n const choices = Object.values(PluginsModel)\n .filter((plugin) => {\n return kit.plugins.includes(plugin.id);\n })\n .map((plugin) => {\n return {\n title: plugin.name,\n value: plugin.id,\n };\n });\n\n const verb = action === PluginAction.Add ? 'install' : 'update';\n\n const { plugin } = await prompts([\n {\n type: 'select',\n name: 'plugin',\n message: `Which ${chalk.cyan('Plugin')} would you like to ${verb}?`,\n choices,\n },\n ]);\n\n return plugin;\n}\n\n// the plugin repository name is the kit repository name + `-plugins`\nfunction buildPluginRepositoryName(repository: string) {\n return repository + `-plugins.git`;\n}\n\nasync function executePluginCommand({\n action,\n repository,\n branch,\n folder,\n}: {\n action: PluginAction;\n repository: string;\n branch: string;\n folder: string;\n}) {\n const verb = action === PluginAction.Add ? 'Installing' : 'Updating';\n const spinner = ora(`${verb} plugin...`).start();\n const commandString = `git subtree ${action} --prefix ${folder} ${repository} ${branch} --squash`;\n\n try {\n await execaCommand(commandString);\n\n const verb = action === PluginAction.Add ? 'installed' : 'updated';\n spinner.succeed(`Plugin ${verb} at ${folder}`);\n } catch (e) {\n console.error(e);\n\n const verb = action === PluginAction.Add ? 'installation' : 'update';\n spinner.fail(`Plugin ${verb} failed`);\n }\n}\n","import { PluginsService } from '@/src/commands/plugins/plugins-service';\nimport { Command } from 'commander';\n\nexport function createInstallPluginCommand(parentCommand: Command) {\n return parentCommand\n .command('install')\n .argument('[plugin-id]', 'Plugin id')\n .description('Install plugin')\n .action(async (maybePluginId) => {\n await PluginsService.install(maybePluginId);\n });\n}\n","import { KitsModel } from '@/src/kits-model';\nimport { validatePlugin } from '@/src/plugins-model';\nimport chalk from 'chalk';\nimport { Command } from 'commander';\n\nexport function createListPluginsCommand(parentCommand: Command) {\n return parentCommand\n .command('list')\n .description('List available plugins.')\n .action(() => {\n const kits = Object.values(KitsModel);\n\n console.log(chalk.white('Makerkit available plugins...'));\n console.log(\n `[${chalk.green('Plugin Name')} (${chalk.gray('plugin-id')})]\\n`\n );\n\n for (const kit of kits) {\n console.log(`${chalk.cyan(kit.name)}`);\n\n if (!kit.plugins.length) {\n console.log(chalk.yellow(`- No plugins available`) + '\\n');\n\n continue;\n }\n\n for (const plugin of kit.plugins) {\n const { name, id } = validatePlugin(plugin);\n console.log(`- ${chalk.green(name)} (${chalk.gray(id)})`);\n }\n\n console.log('');\n }\n });\n}\n","import { PluginsService } from '@/src/commands/plugins/plugins-service';\nimport { Command } from 'commander';\n\nexport function createUpdatePluginCommand(parentCommand: Command) {\n return parentCommand\n .command('update')\n .argument('[plugin-id]', 'Plugin id')\n .description('Update plugin to the latest version')\n .action(async (maybePluginId) => {\n await PluginsService.pull(maybePluginId);\n });\n}\n","import { createInstallPluginCommand } from '@/src/commands/plugins/install/install-plugin.command';\nimport { createListPluginsCommand } from '@/src/commands/plugins/list/list-plugins.command';\nimport { createUpdatePluginCommand } from '@/src/commands/plugins/update/update-plugin.command';\nimport { Workspace } from '@/src/utils/workspace';\nimport { Command } from 'commander';\n\nexport const pluginsCommand = new Command()\n .name('plugins')\n .description('List and install plugins.')\n .hook('preAction', () => {\n return Workspace.logWorkspaceInfo();\n });\n\n// set children commands\ncreateListPluginsCommand(pluginsCommand);\ncreateInstallPluginCommand(pluginsCommand);\ncreateUpdatePluginCommand(pluginsCommand);\n","#!/usr/bin/env node\nimport { blogCommand } from '@/src/commands/blog/blog.command';\nimport { i18nCommand } from '@/src/commands/i18n/i18n.command';\nimport { licenseCommand } from '@/src/commands/license/license.command';\nimport { newCommand } from '@/src/commands/new/new.command';\nimport { pluginsCommand } from '@/src/commands/plugins/plugins.command';\nimport { Command } from 'commander';\nimport { config } from 'dotenv';\n\nconfig({\n path: '.env.local',\n});\n\nprocess.on('SIGINT', () => process.exit(0));\nprocess.on('SIGTERM', () => process.exit(0));\n\nasync function main() {\n const program = new Command()\n .name('makerkit')\n .description(\n 'Your SaaS Kit companion. Add plugins, manage migrations, and more.'\n )\n .version('-v, --version', 'display the version number');\n\n program\n .addCommand(newCommand)\n .addCommand(pluginsCommand)\n .addCommand(i18nCommand)\n .addCommand(licenseCommand)\n .addCommand(blogCommand);\n\n program.parse();\n}\n\nvoid main();\n"],"mappings":"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","names":["join","invariant","chalk","fs","join","join","chalk","fs","join","chalk","prompts","Command","chalk","ora","prompts","z","schema","Command","join","chalk","Command","ora","prompts","kit","join","chalk","ora","prompts","chalk","plugin","prompts","ora","verb","chalk","Command","Command"]}
|