strapi2front 0.1.2 → 0.1.5

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.
@@ -4,7 +4,7 @@ import pc4 from 'picocolors';
4
4
  import * as p from '@clack/prompts';
5
5
  import fs4 from 'fs/promises';
6
6
  import path5 from 'path';
7
- import { execSync } from 'child_process';
7
+ import { spawn, execSync } from 'child_process';
8
8
  import fs5 from 'fs';
9
9
  import { loadConfig, detectStrapiVersion, fetchSchema, parseSchema } from '@strapi2front/core';
10
10
  import { generateByFeature, generateTypes, generateClient, generateLocales, generateServices, generateActions } from '@strapi2front/generators';
@@ -260,6 +260,26 @@ var logger = {
260
260
  };
261
261
 
262
262
  // src/commands/init.ts
263
+ function execAsync(command, cwd) {
264
+ return new Promise((resolve, reject) => {
265
+ const [cmd, ...args2] = command.split(" ");
266
+ const child = spawn(cmd, args2, {
267
+ cwd,
268
+ stdio: "ignore",
269
+ shell: true
270
+ });
271
+ child.on("close", (code) => {
272
+ if (code === 0) {
273
+ resolve();
274
+ } else {
275
+ reject(new Error(`Command failed with exit code ${code}`));
276
+ }
277
+ });
278
+ child.on("error", (error) => {
279
+ reject(error);
280
+ });
281
+ });
282
+ }
263
283
  async function initCommand(_options) {
264
284
  const cwd = process.cwd();
265
285
  const s = p.spinner();
@@ -306,23 +326,23 @@ async function initCommand(_options) {
306
326
  process.exit(0);
307
327
  }
308
328
  if (installDeps) {
309
- s.start("Installing strapi2front...");
329
+ const installStrapi2frontCmd = getInstallDevCommand(packageManager.name, "strapi2front");
330
+ s.start(`Installing strapi2front... (${pc4.dim(installStrapi2frontCmd)})`);
310
331
  try {
311
- const installStrapi2frontCmd = getInstallDevCommand(packageManager.name, "strapi2front");
312
- execSync(installStrapi2frontCmd, { cwd, stdio: "ignore" });
313
- s.stop("strapi2front installed");
332
+ await execAsync(installStrapi2frontCmd, cwd);
333
+ s.stop(`${pc4.green("\u2713")} strapi2front installed`);
314
334
  } catch {
315
- s.stop("Failed to install strapi2front");
316
- logger.warn(`Please install manually: ${getInstallDevCommand(packageManager.name, "strapi2front")}`);
335
+ s.stop(`${pc4.red("\u2717")} Failed to install strapi2front`);
336
+ logger.warn(`Please install manually: ${installStrapi2frontCmd}`);
317
337
  }
318
- s.start("Installing strapi-sdk-js...");
338
+ const installSdkCmd = getInstallCommand(packageManager.name, "strapi-sdk-js");
339
+ s.start(`Installing strapi-sdk-js... (${pc4.dim(installSdkCmd)})`);
319
340
  try {
320
- const installSdkCmd = getInstallCommand(packageManager.name, "strapi-sdk-js");
321
- execSync(installSdkCmd, { cwd, stdio: "ignore" });
322
- s.stop("strapi-sdk-js installed");
341
+ await execAsync(installSdkCmd, cwd);
342
+ s.stop(`${pc4.green("\u2713")} strapi-sdk-js installed`);
323
343
  } catch {
324
- s.stop("Failed to install strapi-sdk-js");
325
- logger.warn(`Please install manually: ${getInstallCommand(packageManager.name, "strapi-sdk-js")}`);
344
+ s.stop(`${pc4.red("\u2717")} Failed to install strapi-sdk-js`);
345
+ logger.warn(`Please install manually: ${installSdkCmd}`);
326
346
  }
327
347
  } else {
328
348
  p.log.info(pc4.dim("Remember to install dependencies manually:"));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/detectors/framework.ts","../../src/lib/detectors/typescript.ts","../../src/lib/detectors/package-manager.ts","../../src/lib/prompts/init.prompts.ts","../../src/lib/utils/logger.ts","../../src/commands/init.ts","../../src/commands/sync.ts","../../src/bin/strapi2front.ts"],"names":["path","fs","commands","pc","p2","detectPackageManager","execSync","p3"],"mappings":"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","file":"strapi2front.js","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type Framework = \"astro\" | \"nextjs\" | \"nuxt\" | \"unknown\";\n\nexport interface FrameworkInfo {\n name: Framework;\n version: string | null;\n configFile: string | null;\n}\n\nconst FRAMEWORK_DETECTORS: Record<\n string,\n { name: Framework; configFiles: string[] }\n> = {\n astro: {\n name: \"astro\",\n configFiles: [\"astro.config.mjs\", \"astro.config.ts\", \"astro.config.js\"],\n },\n next: {\n name: \"nextjs\",\n configFiles: [\"next.config.mjs\", \"next.config.ts\", \"next.config.js\"],\n },\n nuxt: {\n name: \"nuxt\",\n configFiles: [\"nuxt.config.ts\", \"nuxt.config.js\"],\n },\n};\n\nexport async function detectFramework(cwd: string = process.cwd()): Promise<FrameworkInfo> {\n // Read package.json to check dependencies\n const pkgPath = path.join(cwd, \"package.json\");\n\n try {\n const pkgContent = await fs.readFile(pkgPath, \"utf-8\");\n const pkg = JSON.parse(pkgContent);\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n // Check each framework\n for (const [pkgName, detector] of Object.entries(FRAMEWORK_DETECTORS)) {\n if (deps[pkgName]) {\n // Check for config file\n for (const configFile of detector.configFiles) {\n const configPath = path.join(cwd, configFile);\n try {\n await fs.access(configPath);\n return {\n name: detector.name,\n version: deps[pkgName],\n configFile,\n };\n } catch {\n // Config file not found, continue\n }\n }\n\n // Package found but no config file\n return {\n name: detector.name,\n version: deps[pkgName],\n configFile: null,\n };\n }\n }\n } catch {\n // package.json not found\n }\n\n return {\n name: \"unknown\",\n version: null,\n configFile: null,\n };\n}\n\nexport function getFrameworkDisplayName(framework: Framework): string {\n const names: Record<Framework, string> = {\n astro: \"Astro\",\n nextjs: \"Next.js\",\n nuxt: \"Nuxt\",\n unknown: \"Unknown\",\n };\n return names[framework];\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport interface TypeScriptInfo {\n enabled: boolean;\n configFile: string | null;\n version: string | null;\n}\n\nconst TS_CONFIG_FILES = [\"tsconfig.json\", \"tsconfig.app.json\"];\n\nexport async function detectTypeScript(cwd: string = process.cwd()): Promise<TypeScriptInfo> {\n // Check for tsconfig\n for (const configFile of TS_CONFIG_FILES) {\n const configPath = path.join(cwd, configFile);\n try {\n await fs.access(configPath);\n\n // Check package.json for typescript version\n const pkgPath = path.join(cwd, \"package.json\");\n try {\n const pkgContent = await fs.readFile(pkgPath, \"utf-8\");\n const pkg = JSON.parse(pkgContent);\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n return {\n enabled: true,\n configFile,\n version: deps.typescript || null,\n };\n } catch {\n return {\n enabled: true,\n configFile,\n version: null,\n };\n }\n } catch {\n // Config not found, continue\n }\n }\n\n return {\n enabled: false,\n configFile: null,\n version: null,\n };\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type PackageManager = \"pnpm\" | \"npm\" | \"yarn\" | \"bun\";\n\nexport interface PackageManagerInfo {\n name: PackageManager;\n lockFile: string | null;\n}\n\nconst LOCK_FILES: Record<string, PackageManager> = {\n \"pnpm-lock.yaml\": \"pnpm\",\n \"package-lock.json\": \"npm\",\n \"yarn.lock\": \"yarn\",\n \"bun.lockb\": \"bun\",\n};\n\nexport async function detectPackageManager(cwd: string = process.cwd()): Promise<PackageManagerInfo> {\n // Check for lock files\n for (const [lockFile, pm] of Object.entries(LOCK_FILES)) {\n const lockPath = path.join(cwd, lockFile);\n try {\n await fs.access(lockPath);\n return {\n name: pm,\n lockFile,\n };\n } catch {\n // Lock file not found, continue\n }\n }\n\n // Default to npm if no lock file found\n return {\n name: \"npm\",\n lockFile: null,\n };\n}\n\nexport function getInstallCommand(pm: PackageManager, pkg: string): string {\n const commands: Record<PackageManager, string> = {\n pnpm: `pnpm add ${pkg}`,\n npm: `npm install ${pkg}`,\n yarn: `yarn add ${pkg}`,\n bun: `bun add ${pkg}`,\n };\n return commands[pm];\n}\n\nexport function getInstallDevCommand(pm: PackageManager, pkg: string): string {\n const commands: Record<PackageManager, string> = {\n pnpm: `pnpm add -D ${pkg}`,\n npm: `npm install -D ${pkg}`,\n yarn: `yarn add -D ${pkg}`,\n bun: `bun add -d ${pkg}`,\n };\n return commands[pm];\n}\n\nexport function getRunCommand(pm: PackageManager, script: string): string {\n const commands: Record<PackageManager, string> = {\n pnpm: `pnpm ${script}`,\n npm: `npm run ${script}`,\n yarn: `yarn ${script}`,\n bun: `bun run ${script}`,\n };\n return commands[pm];\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { getFrameworkDisplayName, type FrameworkInfo } from \"../detectors/framework.js\";\nimport type { TypeScriptInfo } from \"../detectors/typescript.js\";\nimport type { PackageManagerInfo } from \"../detectors/package-manager.js\";\n\nexport interface DetectionResults {\n framework: FrameworkInfo;\n typescript: TypeScriptInfo;\n packageManager: PackageManagerInfo;\n}\n\nexport interface InitPromptAnswers {\n strapiUrl: string;\n strapiToken: string;\n strapiVersion: \"v4\" | \"v5\";\n outputDir: string;\n generateActions: boolean;\n generateServices: boolean;\n}\n\nexport async function runInitPrompts(detection: DetectionResults): Promise<InitPromptAnswers | null> {\n p.intro(pc.cyan(\"strapi2front setup\"));\n\n // Show detected info\n p.note(\n [\n `Framework: ${pc.green(getFrameworkDisplayName(detection.framework.name))} ${detection.framework.version ? pc.dim(`v${detection.framework.version}`) : \"\"}`,\n `TypeScript: ${detection.typescript.enabled ? pc.green(\"enabled\") : pc.yellow(\"disabled\")}`,\n `Package Manager: ${pc.green(detection.packageManager.name)}`,\n ].join(\"\\n\"),\n \"Detected Configuration\"\n );\n\n // Check framework support\n if (detection.framework.name === \"unknown\") {\n p.cancel(\"Could not detect a supported framework. Currently only Astro is supported.\");\n return null;\n }\n\n if (detection.framework.name !== \"astro\") {\n p.cancel(`${detection.framework.name} is not yet supported. Currently only Astro is supported.`);\n return null;\n }\n\n // Prompt for Strapi connection\n const defaultUrl = \"http://localhost:1337\";\n const strapiUrlInput = await p.text({\n message: \"What is your Strapi URL?\",\n placeholder: `${defaultUrl} (press Enter for default)`,\n validate: (value): string | undefined => {\n const trimmed = (value || \"\").trim();\n // Allow empty (will use default)\n if (trimmed === \"\") return undefined;\n try {\n new URL(trimmed);\n return undefined;\n } catch {\n return \"Please enter a valid URL\";\n }\n },\n });\n\n if (p.isCancel(strapiUrlInput)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Use default if empty or whitespace only\n const strapiUrl = ((strapiUrlInput as string) || \"\").trim() || defaultUrl;\n\n const strapiToken = await p.text({\n message: \"What is your Strapi API token?\",\n placeholder: \"Press Enter to skip (you can add it later in .env)\",\n });\n\n if (p.isCancel(strapiToken)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Trim and check if empty\n const trimmedToken = ((strapiToken as string) || \"\").trim();\n\n // Show hint if token is empty\n if (trimmedToken === \"\") {\n p.log.info(pc.dim(\"Token skipped. Remember to add STRAPI_TOKEN to your .env file later.\"));\n }\n\n // Strapi version\n const strapiVersion = await p.select({\n message: \"What version of Strapi are you using?\",\n options: [\n { value: \"v5\", label: \"Strapi v5\", hint: \"Recommended - Latest version\" },\n { value: \"v4\", label: \"Strapi v4\", hint: \"Legacy version\" },\n ],\n initialValue: \"v5\",\n });\n\n if (p.isCancel(strapiVersion)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n p.log.info(pc.dim(`Using Strapi ${strapiVersion}. This can be changed later in strapi.config.ts`));\n\n // Output directory\n const outputDir = await p.text({\n message: \"Where should we generate the Strapi files?\",\n placeholder: \"src/strapi\",\n defaultValue: \"src/strapi\",\n });\n\n if (p.isCancel(outputDir)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Features to generate\n const features = await p.multiselect({\n message: \"What would you like to generate?\",\n options: [\n { value: \"types\", label: \"Types\", hint: \"TypeScript interfaces for your content types\" },\n { value: \"services\", label: \"Services\", hint: \"Typed service functions for data fetching\" },\n { value: \"actions\", label: \"Astro Actions\", hint: \"Type-safe actions for client/server\" },\n ],\n initialValues: [\"types\", \"services\", \"actions\"],\n required: true,\n });\n\n if (p.isCancel(features)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n return {\n strapiUrl: strapiUrl,\n strapiToken: trimmedToken,\n strapiVersion: strapiVersion as \"v4\" | \"v5\",\n outputDir: ((outputDir as string) || \"\").trim() || \"src/strapi\",\n generateActions: (features as string[]).includes(\"actions\"),\n generateServices: (features as string[]).includes(\"services\"),\n };\n}\n\nexport async function confirmOverwrite(files: string[]): Promise<boolean> {\n const confirm = await p.confirm({\n message: `The following files will be overwritten:\\n${files.map((f) => ` - ${f}`).join(\"\\n\")}\\n\\nContinue?`,\n initialValue: true,\n });\n\n return !p.isCancel(confirm) && confirm === true;\n}\n","import pc from 'picocolors';\n\nexport const logger = {\n info: (message: string) => {\n console.log(pc.blue(\"i\"), message);\n },\n\n success: (message: string) => {\n console.log(pc.green(\"v\"), message);\n },\n\n warn: (message: string) => {\n console.log(pc.yellow(\"!\"), message);\n },\n\n error: (message: string) => {\n console.log(pc.red(\"x\"), message);\n },\n\n step: (message: string) => {\n console.log(pc.cyan(\">\"), message);\n },\n\n dim: (message: string) => {\n console.log(pc.dim(message));\n },\n\n newLine: () => {\n console.log(\"\");\n },\n};\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { execSync } from \"node:child_process\";\nimport { detectFramework } from \"../lib/detectors/framework.js\";\nimport { detectTypeScript } from \"../lib/detectors/typescript.js\";\nimport { detectPackageManager, getInstallCommand, getInstallDevCommand } from \"../lib/detectors/package-manager.js\";\nimport { runInitPrompts } from \"../lib/prompts/init.prompts.js\";\nimport { logger } from \"../lib/utils/logger.js\";\n\nexport interface InitCommandOptions {\n yes?: boolean;\n url?: string;\n token?: string;\n framework?: string;\n}\n\nexport async function initCommand(_options: InitCommandOptions): Promise<void> {\n const cwd = process.cwd();\n\n // Detect project configuration\n const s = p.spinner();\n s.start(\"Detecting project configuration...\");\n\n const [framework, typescript, packageManager] = await Promise.all([\n detectFramework(cwd),\n detectTypeScript(cwd),\n detectPackageManager(cwd),\n ]);\n\n s.stop(\"Project configuration detected\");\n\n // Run interactive prompts\n const answers = await runInitPrompts({\n framework,\n typescript,\n packageManager,\n });\n\n if (!answers) {\n return;\n }\n\n // Create configuration\n s.start(\"Creating configuration files...\");\n\n try {\n // Create strapi.config.ts\n const configContent = generateConfigFile({\n strapiUrl: answers.strapiUrl,\n strapiVersion: answers.strapiVersion,\n outputDir: answers.outputDir,\n generateActions: answers.generateActions,\n generateServices: answers.generateServices,\n });\n const configPath = path.join(cwd, \"strapi.config.ts\");\n await fs.writeFile(configPath, configContent, \"utf-8\");\n\n // Update .env file\n const envPath = path.join(cwd, \".env\");\n await appendToEnvFile(envPath, {\n STRAPI_URL: answers.strapiUrl,\n STRAPI_TOKEN: answers.strapiToken,\n });\n\n // Create output directory\n const outputPath = path.join(cwd, answers.outputDir);\n await fs.mkdir(outputPath, { recursive: true });\n\n s.stop(\"Configuration files created\");\n\n // Install dependencies\n const installDeps = await p.confirm({\n message: \"Install required dependencies (strapi2front, strapi-sdk-js)?\",\n initialValue: true,\n });\n\n if (p.isCancel(installDeps)) {\n p.cancel(\"Setup cancelled\");\n process.exit(0);\n }\n\n if (installDeps) {\n // Install strapi2front as dev dependency (needed for config file)\n s.start(\"Installing strapi2front...\");\n try {\n const installStrapi2frontCmd = getInstallDevCommand(packageManager.name, \"strapi2front\");\n execSync(installStrapi2frontCmd, { cwd, stdio: \"ignore\" });\n s.stop(\"strapi2front installed\");\n } catch {\n s.stop(\"Failed to install strapi2front\");\n logger.warn(`Please install manually: ${getInstallDevCommand(packageManager.name, \"strapi2front\")}`);\n }\n\n // Install strapi-sdk-js as regular dependency\n s.start(\"Installing strapi-sdk-js...\");\n try {\n const installSdkCmd = getInstallCommand(packageManager.name, \"strapi-sdk-js\");\n execSync(installSdkCmd, { cwd, stdio: \"ignore\" });\n s.stop(\"strapi-sdk-js installed\");\n } catch {\n s.stop(\"Failed to install strapi-sdk-js\");\n logger.warn(`Please install manually: ${getInstallCommand(packageManager.name, \"strapi-sdk-js\")}`);\n }\n } else {\n p.log.info(pc.dim(\"Remember to install dependencies manually:\"));\n p.log.info(pc.dim(` ${getInstallDevCommand(packageManager.name, \"strapi2front\")}`));\n p.log.info(pc.dim(` ${getInstallCommand(packageManager.name, \"strapi-sdk-js\")}`));\n }\n\n // Show success message\n p.note(\n [\n `${pc.green(\"v\")} Created ${pc.cyan(\"strapi.config.ts\")}`,\n `${pc.green(\"v\")} Updated ${pc.cyan(\".env\")} with Strapi credentials`,\n `${pc.green(\"v\")} Created output directory ${pc.cyan(answers.outputDir)}`,\n \"\",\n `Next steps:`,\n ` 1. Run ${pc.cyan(\"npx strapi2front sync\")} to generate types`,\n ` 2. Import types from ${pc.cyan(answers.outputDir + \"/types\")}`,\n ` 3. Import services from ${pc.cyan(answers.outputDir + \"/services\")}`,\n ].join(\"\\n\"),\n \"Setup complete!\"\n );\n\n p.outro(pc.green(\"Happy coding!\"));\n } catch (error) {\n s.stop(\"Failed to create configuration files\");\n logger.error(error instanceof Error ? error.message : \"Unknown error\");\n process.exit(1);\n }\n}\n\nfunction generateConfigFile(answers: {\n strapiUrl: string;\n strapiVersion: \"v4\" | \"v5\";\n outputDir: string;\n generateActions: boolean;\n generateServices: boolean;\n}): string {\n return `import { defineConfig } from \"strapi2front\";\n\nexport default defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n token: process.env.STRAPI_TOKEN,\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n types: \"types\",\n services: \"services\",\n actions: \"actions/strapi\",\n structure: 'by-feature' // or 'by-layer'\n },\n\n // Features to generate\n features: {\n types: true,\n services: ${answers.generateServices},\n actions: ${answers.generateActions},\n },\n\n // Strapi version\n strapiVersion: \"${answers.strapiVersion}\",\n});\n`;\n}\n\nasync function appendToEnvFile(\n envPath: string,\n variables: Record<string, string>\n): Promise<void> {\n let content = \"\";\n\n try {\n content = await fs.readFile(envPath, \"utf-8\");\n } catch {\n // File does not exist, create new\n }\n\n const lines = content.split(\"\\n\");\n const existingKeys = new Set(\n lines\n .filter((line) => line.includes(\"=\"))\n .map((line) => line.split(\"=\")[0].trim())\n );\n\n const newLines: string[] = [];\n\n for (const [key, value] of Object.entries(variables)) {\n if (!existingKeys.has(key)) {\n newLines.push(`${key}=${value}`);\n }\n }\n\n if (newLines.length > 0) {\n const separator = content.endsWith(\"\\n\") || content === \"\" ? \"\" : \"\\n\";\n const newContent = content + separator + newLines.join(\"\\n\") + \"\\n\";\n await fs.writeFile(envPath, newContent, \"utf-8\");\n }\n}\n\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { loadConfig } from \"@strapi2front/core\";\nimport { fetchSchema, detectStrapiVersion } from \"@strapi2front/core\";\nimport { parseSchema } from \"@strapi2front/core\";\nimport type { StrapiVersion } from \"@strapi2front/core\";\nimport type { ParsedSchema, Attribute } from \"@strapi2front/core\";\nimport { generateTypes } from \"@strapi2front/generators\";\nimport { generateServices } from \"@strapi2front/generators\";\nimport { generateActions } from \"@strapi2front/generators\";\nimport { generateClient } from \"@strapi2front/generators\";\nimport { generateLocales } from \"@strapi2front/generators\";\nimport { generateByFeature } from \"@strapi2front/generators\";\nimport { logger } from \"../lib/utils/logger.js\";\n\nconst BLOCKS_RENDERER_PACKAGE = \"@strapi/blocks-react-renderer\";\n\n/**\n * Check if schema contains any blocks fields\n */\nfunction schemaHasBlocks(schema: ParsedSchema): { hasBlocks: boolean; fieldsFound: string[] } {\n const fieldsFound: string[] = [];\n\n const checkAttributes = (typeName: string, attributes: Record<string, Attribute>): void => {\n for (const [fieldName, attr] of Object.entries(attributes)) {\n if (attr.type === \"blocks\") {\n fieldsFound.push(`${typeName}.${fieldName}`);\n }\n }\n };\n\n for (const collection of schema.collections) {\n checkAttributes(collection.singularName, collection.attributes);\n }\n\n for (const single of schema.singles) {\n checkAttributes(single.singularName, single.attributes);\n }\n\n for (const component of schema.components) {\n checkAttributes(`component:${component.name}`, component.attributes);\n }\n\n return { hasBlocks: fieldsFound.length > 0, fieldsFound };\n}\n\n/**\n * Check if a package is installed\n */\nfunction isPackageInstalled(packageName: string, cwd: string): boolean {\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(packageJsonPath)) return false;\n\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n return packageName in deps;\n } catch {\n return false;\n }\n}\n\n/**\n * Detect package manager\n */\nfunction detectPackageManager(cwd: string): \"npm\" | \"yarn\" | \"pnpm\" | \"bun\" {\n if (fs.existsSync(path.join(cwd, \"bun.lockb\"))) return \"bun\";\n if (fs.existsSync(path.join(cwd, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (fs.existsSync(path.join(cwd, \"yarn.lock\"))) return \"yarn\";\n return \"npm\";\n}\n\n/**\n * Install a package\n */\nfunction installPackage(packageName: string, cwd: string): void {\n const pm = detectPackageManager(cwd);\n const commands: Record<string, string> = {\n npm: `npm install ${packageName}`,\n yarn: `yarn add ${packageName}`,\n pnpm: `pnpm add ${packageName}`,\n bun: `bun add ${packageName}`,\n };\n\n execSync(commands[pm], { cwd, stdio: \"inherit\" });\n}\n\n/**\n * Structure type for output organization\n */\ntype OutputStructure = \"by-layer\" | \"by-feature\";\n\n/**\n * Get orphaned folders from the opposite structure\n */\nfunction getOrphanedFolders(outputPath: string, currentStructure: OutputStructure): string[] {\n const orphanedFolders: string[] = [];\n\n if (currentStructure === \"by-feature\") {\n // If using by-feature, check for by-layer folders\n const byLayerFolders = [\"types\", \"services\", \"actions\"];\n for (const folder of byLayerFolders) {\n const folderPath = path.join(outputPath, folder);\n if (fs.existsSync(folderPath)) {\n orphanedFolders.push(folder);\n }\n }\n // Also check for root-level client.ts and locales.ts (by-layer puts them at root)\n if (fs.existsSync(path.join(outputPath, \"client.ts\"))) {\n orphanedFolders.push(\"client.ts\");\n }\n if (fs.existsSync(path.join(outputPath, \"locales.ts\"))) {\n orphanedFolders.push(\"locales.ts\");\n }\n } else {\n // If using by-layer, check for by-feature folders\n const byFeatureFolders = [\"collections\", \"singles\", \"shared\", \"components\"];\n for (const folder of byFeatureFolders) {\n const folderPath = path.join(outputPath, folder);\n if (fs.existsSync(folderPath)) {\n orphanedFolders.push(folder);\n }\n }\n }\n\n return orphanedFolders;\n}\n\n/**\n * Remove orphaned folders/files\n */\nfunction cleanOrphanedFiles(outputPath: string, orphanedItems: string[]): void {\n for (const item of orphanedItems) {\n const itemPath = path.join(outputPath, item);\n if (fs.existsSync(itemPath)) {\n const stat = fs.statSync(itemPath);\n if (stat.isDirectory()) {\n fs.rmSync(itemPath, { recursive: true, force: true });\n } else {\n fs.unlinkSync(itemPath);\n }\n }\n }\n}\n\nexport interface SyncCommandOptions {\n force?: boolean;\n typesOnly?: boolean;\n servicesOnly?: boolean;\n actionsOnly?: boolean;\n clean?: boolean;\n}\n\nexport async function syncCommand(options: SyncCommandOptions): Promise<void> {\n const cwd = process.cwd();\n\n p.intro(pc.cyan(\"strapi2front sync\"));\n\n const s = p.spinner();\n\n try {\n // Load configuration\n s.start(\"Loading configuration...\");\n let config = await loadConfig(cwd);\n s.stop(\"Configuration loaded\");\n\n // Detect and validate Strapi version\n s.start(\"Detecting Strapi version...\");\n const versionResult = await detectStrapiVersion(config.url, config.token);\n s.stop(\"Version detection complete\");\n\n let effectiveVersion: StrapiVersion = config.strapiVersion;\n\n if (versionResult.detected) {\n if (versionResult.detected !== config.strapiVersion) {\n // Version mismatch detected\n if (versionResult.detected === \"v5\" && config.strapiVersion === \"v4\") {\n p.log.warn(\n pc.yellow(`Detected Strapi ${pc.bold(\"v5\")} but config has ${pc.bold(\"v4\")}. Using v5.`)\n );\n effectiveVersion = \"v5\";\n } else if (versionResult.detected === \"v4\" && config.strapiVersion === \"v5\") {\n p.log.warn(\n pc.yellow(`Detected Strapi ${pc.bold(\"v4\")} but config has ${pc.bold(\"v5\")}. Using v4.`)\n );\n effectiveVersion = \"v4\";\n }\n } else {\n p.log.info(`Strapi ${pc.green(pc.bold(config.strapiVersion))}`);\n }\n } else {\n p.log.warn(pc.yellow(`Could not detect Strapi version. Using ${pc.bold(config.strapiVersion)}`));\n }\n\n // Update config with effective version for this sync\n config = { ...config, strapiVersion: effectiveVersion };\n\n // Fetch schema from Strapi\n s.start(\"Fetching schema from Strapi...\");\n const rawSchema = await fetchSchema(config.url, config.token);\n const schema = parseSchema(rawSchema);\n s.stop(`Schema fetched: ${schema.collections.length} collections, ${schema.singles.length} singles, ${schema.components.length} components`);\n\n // Check for Blocks fields and prompt for renderer package\n let blocksRendererInstalled = isPackageInstalled(BLOCKS_RENDERER_PACKAGE, cwd);\n const { hasBlocks: hasBlocksFields, fieldsFound: blocksFieldsFound } = schemaHasBlocks(schema);\n\n if (hasBlocksFields && !blocksRendererInstalled) {\n p.log.info(`Blocks fields detected: ${pc.cyan(blocksFieldsFound.join(\", \"))}`);\n\n const installBlocks = await p.confirm({\n message: `Install ${pc.cyan(BLOCKS_RENDERER_PACKAGE)} for proper type support and rendering?`,\n initialValue: true,\n });\n\n if (p.isCancel(installBlocks)) {\n p.cancel(\"Sync cancelled\");\n process.exit(0);\n }\n\n if (installBlocks) {\n s.start(`Installing ${BLOCKS_RENDERER_PACKAGE}...`);\n try {\n installPackage(BLOCKS_RENDERER_PACKAGE, cwd);\n blocksRendererInstalled = true;\n s.stop(`${BLOCKS_RENDERER_PACKAGE} installed`);\n } catch (error) {\n s.stop(`Failed to install ${BLOCKS_RENDERER_PACKAGE}`);\n logger.warn(\"You can install it manually later and re-run sync\");\n }\n } else {\n p.log.info(pc.dim(`Skipping ${BLOCKS_RENDERER_PACKAGE}. BlocksContent will be typed as unknown[]`));\n }\n }\n\n const outputPath = path.join(cwd, config.output.path);\n const generatedFiles: string[] = [];\n\n // Determine what to generate\n const generateAll = !options.typesOnly && !options.servicesOnly && !options.actionsOnly;\n\n // Check structure mode\n const isByFeature = config.output.structure === 'by-feature';\n const currentStructure: OutputStructure = isByFeature ? \"by-feature\" : \"by-layer\";\n\n // Check for orphaned files from previous structure\n if (fs.existsSync(outputPath)) {\n const orphanedFolders = getOrphanedFolders(outputPath, currentStructure);\n\n if (orphanedFolders.length > 0) {\n const otherStructure = isByFeature ? \"by-layer\" : \"by-feature\";\n p.log.warn(\n pc.yellow(`Found files from previous ${pc.bold(otherStructure)} structure:`)\n );\n p.log.message(pc.dim(` ${orphanedFolders.join(\", \")}`));\n\n let shouldClean = options.clean;\n\n if (!shouldClean) {\n const cleanResponse = await p.confirm({\n message: `Remove orphaned ${otherStructure} files?`,\n initialValue: true,\n });\n\n if (p.isCancel(cleanResponse)) {\n p.cancel(\"Sync cancelled\");\n process.exit(0);\n }\n\n shouldClean = cleanResponse;\n }\n\n if (shouldClean) {\n s.start(\"Cleaning orphaned files...\");\n cleanOrphanedFiles(outputPath, orphanedFolders);\n s.stop(`Removed: ${orphanedFolders.join(\", \")}`);\n } else {\n p.log.info(pc.dim(\"Keeping orphaned files. You can clean them manually or use --clean flag.\"));\n }\n }\n }\n\n if (isByFeature) {\n // Generate using by-feature structure (screaming architecture)\n s.start(\"Generating files (by-feature structure)...\");\n const files = await generateByFeature(schema, rawSchema.locales, {\n outputDir: outputPath,\n features: {\n types: config.features.types && (generateAll || Boolean(options.typesOnly)),\n services: config.features.services && (generateAll || Boolean(options.servicesOnly)),\n actions: config.features.actions && (generateAll || Boolean(options.actionsOnly)),\n },\n blocksRendererInstalled,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} files`);\n } else {\n // Generate using by-layer structure (default)\n\n // Generate types\n if (generateAll || options.typesOnly) {\n if (config.features.types) {\n s.start(\"Generating types...\");\n const typesPath = path.join(outputPath, config.output.types);\n const files = await generateTypes(schema, {\n outputDir: typesPath,\n blocksRendererInstalled,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} type files`);\n }\n }\n\n // Generate client (needed by services)\n if (generateAll || options.servicesOnly) {\n if (config.features.services) {\n s.start(\"Generating client...\");\n const clientFiles = await generateClient({ outputDir: outputPath, strapiVersion: config.strapiVersion });\n generatedFiles.push(...clientFiles);\n s.stop(\"Generated client\");\n\n // Generate locales (for i18n support)\n s.start(\"Generating locales...\");\n const localesFiles = await generateLocales(rawSchema.locales, { outputDir: outputPath });\n generatedFiles.push(...localesFiles);\n if (rawSchema.locales.length > 0) {\n s.stop(`Generated locales: ${rawSchema.locales.map(l => l.code).join(\", \")}`);\n } else {\n s.stop(\"Generated locales (i18n not enabled in Strapi)\");\n }\n }\n }\n\n // Generate services\n if (generateAll || options.servicesOnly) {\n if (config.features.services) {\n s.start(\"Generating services...\");\n const servicesPath = path.join(outputPath, config.output.services);\n const typesImportPath = path.relative(servicesPath, path.join(outputPath, config.output.types)).replace(/\\\\/g, \"/\") || \".\";\n const files = await generateServices(schema, {\n outputDir: servicesPath,\n typesImportPath: typesImportPath.startsWith(\".\") ? typesImportPath : \"./\" + typesImportPath,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} service files`);\n }\n }\n\n // Generate actions\n if (generateAll || options.actionsOnly) {\n if (config.features.actions) {\n s.start(\"Generating Astro actions...\");\n const actionsPath = path.join(outputPath, config.output.actions);\n const servicesPath = path.join(outputPath, config.output.services);\n\n const servicesImportPath = path.relative(actionsPath, servicesPath).replace(/\\\\/g, \"/\") || \".\";\n\n const files = await generateActions(schema, {\n outputDir: actionsPath,\n servicesImportPath: servicesImportPath.startsWith(\".\") ? servicesImportPath : \"./\" + servicesImportPath,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} action files`);\n }\n }\n }\n\n // Show summary\n p.note(\n [\n `Generated ${generatedFiles.length} files in ${pc.cyan(config.output.path)}`,\n \"\",\n \"Files generated:\",\n ...generatedFiles.slice(0, 10).map((f) => ` ${pc.dim(path.relative(cwd, f))}`),\n generatedFiles.length > 10 ? ` ${pc.dim(`... and ${generatedFiles.length - 10} more`)}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n \"Sync complete!\"\n );\n\n p.outro(pc.green(\"Types and services are ready to use!\"));\n } catch (error) {\n s.stop(\"Sync failed\");\n\n if (error instanceof Error) {\n logger.error(error.message);\n\n if (error.message.includes(\"Could not find strapi.config\")) {\n logger.info(\"Run \\\"npx strapi2front init\\\" first to set up your project.\");\n }\n } else {\n logger.error(\"An unknown error occurred\");\n }\n\n process.exit(1);\n }\n}\n","import { Command } from 'commander';\nimport pc from 'picocolors';\nimport { initCommand } from '../commands/init.js';\nimport { syncCommand } from '../commands/sync.js';\n\nconst program = new Command();\n\n// ASCII Art Logo\nconst logo = `\n _ _ ___ __ _\n ___| |_ _ __ __ _ _ __ (_)__ \\\\ / _|_ __ ___ _ __ | |_\n/ __| __| '__/ _\\` | '_ \\\\| | / /| |_| '__/ _ \\\\| '_ \\\\| __|\n\\\\__ \\\\ |_| | | (_| | |_) | ||_| | _| | | (_) | | | | |_\n|___/\\\\__|_| \\\\__,_| .__/|_|(_) |_| |_| \\\\___/|_| |_|\\\\__|\n |_|\n`;\n\nprogram\n .name('strapi2front')\n .description('Generate TypeScript types, services, and framework actions from your Strapi schema')\n .version('0.1.0')\n .addHelpText('beforeAll', pc.cyan(logo));\n\n// Init command\nprogram\n .command('init')\n .description('Initialize strapi2front in your project')\n .option('-y, --yes', 'Skip prompts and use defaults')\n .option('--url <url>', 'Strapi URL')\n .option('--token <token>', 'Strapi API token')\n .option('--framework <framework>', 'Framework to use (astro)')\n .action(initCommand);\n\n// Sync command\nprogram\n .command('sync')\n .description('Sync types, services, and actions from Strapi schema')\n .option('-f, --force', 'Force regeneration of all files')\n .option('--types-only', 'Only generate types')\n .option('--services-only', 'Only generate services')\n .option('--actions-only', 'Only generate actions')\n .option('--clean', 'Automatically remove orphaned files from previous structure')\n .action(syncCommand);\n\n// If no command is provided, run init by default\nconst args = process.argv.slice(2);\nconst commands = ['init', 'sync', 'help', '--help', '-h', '--version', '-V'];\nconst hasCommand = args.some((arg) => commands.includes(arg));\n\nif (args.length === 0 || !hasCommand) {\n // Show logo and run init\n console.log(pc.cyan(logo));\n initCommand({});\n} else {\n // Parse args normally\n program.parse();\n}\n"]}
1
+ {"version":3,"sources":["../../src/lib/detectors/framework.ts","../../src/lib/detectors/typescript.ts","../../src/lib/detectors/package-manager.ts","../../src/lib/prompts/init.prompts.ts","../../src/lib/utils/logger.ts","../../src/commands/init.ts","../../src/commands/sync.ts","../../src/bin/strapi2front.ts"],"names":["path","fs","commands","pc","args","p2","detectPackageManager","p3"],"mappings":"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","file":"strapi2front.js","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type Framework = \"astro\" | \"nextjs\" | \"nuxt\" | \"unknown\";\n\nexport interface FrameworkInfo {\n name: Framework;\n version: string | null;\n configFile: string | null;\n}\n\nconst FRAMEWORK_DETECTORS: Record<\n string,\n { name: Framework; configFiles: string[] }\n> = {\n astro: {\n name: \"astro\",\n configFiles: [\"astro.config.mjs\", \"astro.config.ts\", \"astro.config.js\"],\n },\n next: {\n name: \"nextjs\",\n configFiles: [\"next.config.mjs\", \"next.config.ts\", \"next.config.js\"],\n },\n nuxt: {\n name: \"nuxt\",\n configFiles: [\"nuxt.config.ts\", \"nuxt.config.js\"],\n },\n};\n\nexport async function detectFramework(cwd: string = process.cwd()): Promise<FrameworkInfo> {\n // Read package.json to check dependencies\n const pkgPath = path.join(cwd, \"package.json\");\n\n try {\n const pkgContent = await fs.readFile(pkgPath, \"utf-8\");\n const pkg = JSON.parse(pkgContent);\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n // Check each framework\n for (const [pkgName, detector] of Object.entries(FRAMEWORK_DETECTORS)) {\n if (deps[pkgName]) {\n // Check for config file\n for (const configFile of detector.configFiles) {\n const configPath = path.join(cwd, configFile);\n try {\n await fs.access(configPath);\n return {\n name: detector.name,\n version: deps[pkgName],\n configFile,\n };\n } catch {\n // Config file not found, continue\n }\n }\n\n // Package found but no config file\n return {\n name: detector.name,\n version: deps[pkgName],\n configFile: null,\n };\n }\n }\n } catch {\n // package.json not found\n }\n\n return {\n name: \"unknown\",\n version: null,\n configFile: null,\n };\n}\n\nexport function getFrameworkDisplayName(framework: Framework): string {\n const names: Record<Framework, string> = {\n astro: \"Astro\",\n nextjs: \"Next.js\",\n nuxt: \"Nuxt\",\n unknown: \"Unknown\",\n };\n return names[framework];\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport interface TypeScriptInfo {\n enabled: boolean;\n configFile: string | null;\n version: string | null;\n}\n\nconst TS_CONFIG_FILES = [\"tsconfig.json\", \"tsconfig.app.json\"];\n\nexport async function detectTypeScript(cwd: string = process.cwd()): Promise<TypeScriptInfo> {\n // Check for tsconfig\n for (const configFile of TS_CONFIG_FILES) {\n const configPath = path.join(cwd, configFile);\n try {\n await fs.access(configPath);\n\n // Check package.json for typescript version\n const pkgPath = path.join(cwd, \"package.json\");\n try {\n const pkgContent = await fs.readFile(pkgPath, \"utf-8\");\n const pkg = JSON.parse(pkgContent);\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n return {\n enabled: true,\n configFile,\n version: deps.typescript || null,\n };\n } catch {\n return {\n enabled: true,\n configFile,\n version: null,\n };\n }\n } catch {\n // Config not found, continue\n }\n }\n\n return {\n enabled: false,\n configFile: null,\n version: null,\n };\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type PackageManager = \"pnpm\" | \"npm\" | \"yarn\" | \"bun\";\n\nexport interface PackageManagerInfo {\n name: PackageManager;\n lockFile: string | null;\n}\n\nconst LOCK_FILES: Record<string, PackageManager> = {\n \"pnpm-lock.yaml\": \"pnpm\",\n \"package-lock.json\": \"npm\",\n \"yarn.lock\": \"yarn\",\n \"bun.lockb\": \"bun\",\n};\n\nexport async function detectPackageManager(cwd: string = process.cwd()): Promise<PackageManagerInfo> {\n // Check for lock files\n for (const [lockFile, pm] of Object.entries(LOCK_FILES)) {\n const lockPath = path.join(cwd, lockFile);\n try {\n await fs.access(lockPath);\n return {\n name: pm,\n lockFile,\n };\n } catch {\n // Lock file not found, continue\n }\n }\n\n // Default to npm if no lock file found\n return {\n name: \"npm\",\n lockFile: null,\n };\n}\n\nexport function getInstallCommand(pm: PackageManager, pkg: string): string {\n const commands: Record<PackageManager, string> = {\n pnpm: `pnpm add ${pkg}`,\n npm: `npm install ${pkg}`,\n yarn: `yarn add ${pkg}`,\n bun: `bun add ${pkg}`,\n };\n return commands[pm];\n}\n\nexport function getInstallDevCommand(pm: PackageManager, pkg: string): string {\n const commands: Record<PackageManager, string> = {\n pnpm: `pnpm add -D ${pkg}`,\n npm: `npm install -D ${pkg}`,\n yarn: `yarn add -D ${pkg}`,\n bun: `bun add -d ${pkg}`,\n };\n return commands[pm];\n}\n\nexport function getRunCommand(pm: PackageManager, script: string): string {\n const commands: Record<PackageManager, string> = {\n pnpm: `pnpm ${script}`,\n npm: `npm run ${script}`,\n yarn: `yarn ${script}`,\n bun: `bun run ${script}`,\n };\n return commands[pm];\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { getFrameworkDisplayName, type FrameworkInfo } from \"../detectors/framework.js\";\nimport type { TypeScriptInfo } from \"../detectors/typescript.js\";\nimport type { PackageManagerInfo } from \"../detectors/package-manager.js\";\n\nexport interface DetectionResults {\n framework: FrameworkInfo;\n typescript: TypeScriptInfo;\n packageManager: PackageManagerInfo;\n}\n\nexport interface InitPromptAnswers {\n strapiUrl: string;\n strapiToken: string;\n strapiVersion: \"v4\" | \"v5\";\n outputDir: string;\n generateActions: boolean;\n generateServices: boolean;\n}\n\nexport async function runInitPrompts(detection: DetectionResults): Promise<InitPromptAnswers | null> {\n p.intro(pc.cyan(\"strapi2front setup\"));\n\n // Show detected info\n p.note(\n [\n `Framework: ${pc.green(getFrameworkDisplayName(detection.framework.name))} ${detection.framework.version ? pc.dim(`v${detection.framework.version}`) : \"\"}`,\n `TypeScript: ${detection.typescript.enabled ? pc.green(\"enabled\") : pc.yellow(\"disabled\")}`,\n `Package Manager: ${pc.green(detection.packageManager.name)}`,\n ].join(\"\\n\"),\n \"Detected Configuration\"\n );\n\n // Check framework support\n if (detection.framework.name === \"unknown\") {\n p.cancel(\"Could not detect a supported framework. Currently only Astro is supported.\");\n return null;\n }\n\n if (detection.framework.name !== \"astro\") {\n p.cancel(`${detection.framework.name} is not yet supported. Currently only Astro is supported.`);\n return null;\n }\n\n // Prompt for Strapi connection\n const defaultUrl = \"http://localhost:1337\";\n const strapiUrlInput = await p.text({\n message: \"What is your Strapi URL?\",\n placeholder: `${defaultUrl} (press Enter for default)`,\n validate: (value): string | undefined => {\n const trimmed = (value || \"\").trim();\n // Allow empty (will use default)\n if (trimmed === \"\") return undefined;\n try {\n new URL(trimmed);\n return undefined;\n } catch {\n return \"Please enter a valid URL\";\n }\n },\n });\n\n if (p.isCancel(strapiUrlInput)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Use default if empty or whitespace only\n const strapiUrl = ((strapiUrlInput as string) || \"\").trim() || defaultUrl;\n\n const strapiToken = await p.text({\n message: \"What is your Strapi API token?\",\n placeholder: \"Press Enter to skip (you can add it later in .env)\",\n });\n\n if (p.isCancel(strapiToken)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Trim and check if empty\n const trimmedToken = ((strapiToken as string) || \"\").trim();\n\n // Show hint if token is empty\n if (trimmedToken === \"\") {\n p.log.info(pc.dim(\"Token skipped. Remember to add STRAPI_TOKEN to your .env file later.\"));\n }\n\n // Strapi version\n const strapiVersion = await p.select({\n message: \"What version of Strapi are you using?\",\n options: [\n { value: \"v5\", label: \"Strapi v5\", hint: \"Recommended - Latest version\" },\n { value: \"v4\", label: \"Strapi v4\", hint: \"Legacy version\" },\n ],\n initialValue: \"v5\",\n });\n\n if (p.isCancel(strapiVersion)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n p.log.info(pc.dim(`Using Strapi ${strapiVersion}. This can be changed later in strapi.config.ts`));\n\n // Output directory\n const outputDir = await p.text({\n message: \"Where should we generate the Strapi files?\",\n placeholder: \"src/strapi\",\n defaultValue: \"src/strapi\",\n });\n\n if (p.isCancel(outputDir)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Features to generate\n const features = await p.multiselect({\n message: \"What would you like to generate?\",\n options: [\n { value: \"types\", label: \"Types\", hint: \"TypeScript interfaces for your content types\" },\n { value: \"services\", label: \"Services\", hint: \"Typed service functions for data fetching\" },\n { value: \"actions\", label: \"Astro Actions\", hint: \"Type-safe actions for client/server\" },\n ],\n initialValues: [\"types\", \"services\", \"actions\"],\n required: true,\n });\n\n if (p.isCancel(features)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n return {\n strapiUrl: strapiUrl,\n strapiToken: trimmedToken,\n strapiVersion: strapiVersion as \"v4\" | \"v5\",\n outputDir: ((outputDir as string) || \"\").trim() || \"src/strapi\",\n generateActions: (features as string[]).includes(\"actions\"),\n generateServices: (features as string[]).includes(\"services\"),\n };\n}\n\nexport async function confirmOverwrite(files: string[]): Promise<boolean> {\n const confirm = await p.confirm({\n message: `The following files will be overwritten:\\n${files.map((f) => ` - ${f}`).join(\"\\n\")}\\n\\nContinue?`,\n initialValue: true,\n });\n\n return !p.isCancel(confirm) && confirm === true;\n}\n","import pc from 'picocolors';\n\nexport const logger = {\n info: (message: string) => {\n console.log(pc.blue(\"i\"), message);\n },\n\n success: (message: string) => {\n console.log(pc.green(\"v\"), message);\n },\n\n warn: (message: string) => {\n console.log(pc.yellow(\"!\"), message);\n },\n\n error: (message: string) => {\n console.log(pc.red(\"x\"), message);\n },\n\n step: (message: string) => {\n console.log(pc.cyan(\">\"), message);\n },\n\n dim: (message: string) => {\n console.log(pc.dim(message));\n },\n\n newLine: () => {\n console.log(\"\");\n },\n};\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { spawn } from \"node:child_process\";\nimport { detectFramework } from \"../lib/detectors/framework.js\";\nimport { detectTypeScript } from \"../lib/detectors/typescript.js\";\nimport { detectPackageManager, getInstallCommand, getInstallDevCommand } from \"../lib/detectors/package-manager.js\";\nimport { runInitPrompts } from \"../lib/prompts/init.prompts.js\";\nimport { logger } from \"../lib/utils/logger.js\";\n\n/**\n * Execute a shell command asynchronously\n * This allows spinners to animate while the command runs\n */\nfunction execAsync(command: string, cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const [cmd, ...args] = command.split(\" \");\n const child = spawn(cmd, args, {\n cwd,\n stdio: \"ignore\",\n shell: true,\n });\n\n child.on(\"close\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n\n child.on(\"error\", (error) => {\n reject(error);\n });\n });\n}\n\nexport interface InitCommandOptions {\n yes?: boolean;\n url?: string;\n token?: string;\n framework?: string;\n}\n\nexport async function initCommand(_options: InitCommandOptions): Promise<void> {\n const cwd = process.cwd();\n\n // Detect project configuration\n const s = p.spinner();\n s.start(\"Detecting project configuration...\");\n\n const [framework, typescript, packageManager] = await Promise.all([\n detectFramework(cwd),\n detectTypeScript(cwd),\n detectPackageManager(cwd),\n ]);\n\n s.stop(\"Project configuration detected\");\n\n // Run interactive prompts\n const answers = await runInitPrompts({\n framework,\n typescript,\n packageManager,\n });\n\n if (!answers) {\n return;\n }\n\n // Create configuration\n s.start(\"Creating configuration files...\");\n\n try {\n // Create strapi.config.ts\n const configContent = generateConfigFile({\n strapiUrl: answers.strapiUrl,\n strapiVersion: answers.strapiVersion,\n outputDir: answers.outputDir,\n generateActions: answers.generateActions,\n generateServices: answers.generateServices,\n });\n const configPath = path.join(cwd, \"strapi.config.ts\");\n await fs.writeFile(configPath, configContent, \"utf-8\");\n\n // Update .env file\n const envPath = path.join(cwd, \".env\");\n await appendToEnvFile(envPath, {\n STRAPI_URL: answers.strapiUrl,\n STRAPI_TOKEN: answers.strapiToken,\n });\n\n // Create output directory\n const outputPath = path.join(cwd, answers.outputDir);\n await fs.mkdir(outputPath, { recursive: true });\n\n s.stop(\"Configuration files created\");\n\n // Install dependencies\n const installDeps = await p.confirm({\n message: \"Install required dependencies (strapi2front, strapi-sdk-js)?\",\n initialValue: true,\n });\n\n if (p.isCancel(installDeps)) {\n p.cancel(\"Setup cancelled\");\n process.exit(0);\n }\n\n if (installDeps) {\n // Install strapi2front as dev dependency (needed for config file)\n const installStrapi2frontCmd = getInstallDevCommand(packageManager.name, \"strapi2front\");\n s.start(`Installing strapi2front... (${pc.dim(installStrapi2frontCmd)})`);\n try {\n await execAsync(installStrapi2frontCmd, cwd);\n s.stop(`${pc.green(\"✓\")} strapi2front installed`);\n } catch {\n s.stop(`${pc.red(\"✗\")} Failed to install strapi2front`);\n logger.warn(`Please install manually: ${installStrapi2frontCmd}`);\n }\n\n // Install strapi-sdk-js as regular dependency\n const installSdkCmd = getInstallCommand(packageManager.name, \"strapi-sdk-js\");\n s.start(`Installing strapi-sdk-js... (${pc.dim(installSdkCmd)})`);\n try {\n await execAsync(installSdkCmd, cwd);\n s.stop(`${pc.green(\"✓\")} strapi-sdk-js installed`);\n } catch {\n s.stop(`${pc.red(\"✗\")} Failed to install strapi-sdk-js`);\n logger.warn(`Please install manually: ${installSdkCmd}`);\n }\n } else {\n p.log.info(pc.dim(\"Remember to install dependencies manually:\"));\n p.log.info(pc.dim(` ${getInstallDevCommand(packageManager.name, \"strapi2front\")}`));\n p.log.info(pc.dim(` ${getInstallCommand(packageManager.name, \"strapi-sdk-js\")}`));\n }\n\n // Show success message\n p.note(\n [\n `${pc.green(\"v\")} Created ${pc.cyan(\"strapi.config.ts\")}`,\n `${pc.green(\"v\")} Updated ${pc.cyan(\".env\")} with Strapi credentials`,\n `${pc.green(\"v\")} Created output directory ${pc.cyan(answers.outputDir)}`,\n \"\",\n `Next steps:`,\n ` 1. Run ${pc.cyan(\"npx strapi2front sync\")} to generate types`,\n ` 2. Import types from ${pc.cyan(answers.outputDir + \"/types\")}`,\n ` 3. Import services from ${pc.cyan(answers.outputDir + \"/services\")}`,\n ].join(\"\\n\"),\n \"Setup complete!\"\n );\n\n p.outro(pc.green(\"Happy coding!\"));\n } catch (error) {\n s.stop(\"Failed to create configuration files\");\n logger.error(error instanceof Error ? error.message : \"Unknown error\");\n process.exit(1);\n }\n}\n\nfunction generateConfigFile(answers: {\n strapiUrl: string;\n strapiVersion: \"v4\" | \"v5\";\n outputDir: string;\n generateActions: boolean;\n generateServices: boolean;\n}): string {\n return `import { defineConfig } from \"strapi2front\";\n\nexport default defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n token: process.env.STRAPI_TOKEN,\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n types: \"types\",\n services: \"services\",\n actions: \"actions/strapi\",\n structure: 'by-feature' // or 'by-layer'\n },\n\n // Features to generate\n features: {\n types: true,\n services: ${answers.generateServices},\n actions: ${answers.generateActions},\n },\n\n // Strapi version\n strapiVersion: \"${answers.strapiVersion}\",\n});\n`;\n}\n\nasync function appendToEnvFile(\n envPath: string,\n variables: Record<string, string>\n): Promise<void> {\n let content = \"\";\n\n try {\n content = await fs.readFile(envPath, \"utf-8\");\n } catch {\n // File does not exist, create new\n }\n\n const lines = content.split(\"\\n\");\n const existingKeys = new Set(\n lines\n .filter((line) => line.includes(\"=\"))\n .map((line) => line.split(\"=\")[0].trim())\n );\n\n const newLines: string[] = [];\n\n for (const [key, value] of Object.entries(variables)) {\n if (!existingKeys.has(key)) {\n newLines.push(`${key}=${value}`);\n }\n }\n\n if (newLines.length > 0) {\n const separator = content.endsWith(\"\\n\") || content === \"\" ? \"\" : \"\\n\";\n const newContent = content + separator + newLines.join(\"\\n\") + \"\\n\";\n await fs.writeFile(envPath, newContent, \"utf-8\");\n }\n}\n\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { loadConfig } from \"@strapi2front/core\";\nimport { fetchSchema, detectStrapiVersion } from \"@strapi2front/core\";\nimport { parseSchema } from \"@strapi2front/core\";\nimport type { StrapiVersion } from \"@strapi2front/core\";\nimport type { ParsedSchema, Attribute } from \"@strapi2front/core\";\nimport { generateTypes } from \"@strapi2front/generators\";\nimport { generateServices } from \"@strapi2front/generators\";\nimport { generateActions } from \"@strapi2front/generators\";\nimport { generateClient } from \"@strapi2front/generators\";\nimport { generateLocales } from \"@strapi2front/generators\";\nimport { generateByFeature } from \"@strapi2front/generators\";\nimport { logger } from \"../lib/utils/logger.js\";\n\nconst BLOCKS_RENDERER_PACKAGE = \"@strapi/blocks-react-renderer\";\n\n/**\n * Check if schema contains any blocks fields\n */\nfunction schemaHasBlocks(schema: ParsedSchema): { hasBlocks: boolean; fieldsFound: string[] } {\n const fieldsFound: string[] = [];\n\n const checkAttributes = (typeName: string, attributes: Record<string, Attribute>): void => {\n for (const [fieldName, attr] of Object.entries(attributes)) {\n if (attr.type === \"blocks\") {\n fieldsFound.push(`${typeName}.${fieldName}`);\n }\n }\n };\n\n for (const collection of schema.collections) {\n checkAttributes(collection.singularName, collection.attributes);\n }\n\n for (const single of schema.singles) {\n checkAttributes(single.singularName, single.attributes);\n }\n\n for (const component of schema.components) {\n checkAttributes(`component:${component.name}`, component.attributes);\n }\n\n return { hasBlocks: fieldsFound.length > 0, fieldsFound };\n}\n\n/**\n * Check if a package is installed\n */\nfunction isPackageInstalled(packageName: string, cwd: string): boolean {\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(packageJsonPath)) return false;\n\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n return packageName in deps;\n } catch {\n return false;\n }\n}\n\n/**\n * Detect package manager\n */\nfunction detectPackageManager(cwd: string): \"npm\" | \"yarn\" | \"pnpm\" | \"bun\" {\n if (fs.existsSync(path.join(cwd, \"bun.lockb\"))) return \"bun\";\n if (fs.existsSync(path.join(cwd, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (fs.existsSync(path.join(cwd, \"yarn.lock\"))) return \"yarn\";\n return \"npm\";\n}\n\n/**\n * Install a package\n */\nfunction installPackage(packageName: string, cwd: string): void {\n const pm = detectPackageManager(cwd);\n const commands: Record<string, string> = {\n npm: `npm install ${packageName}`,\n yarn: `yarn add ${packageName}`,\n pnpm: `pnpm add ${packageName}`,\n bun: `bun add ${packageName}`,\n };\n\n execSync(commands[pm], { cwd, stdio: \"inherit\" });\n}\n\n/**\n * Structure type for output organization\n */\ntype OutputStructure = \"by-layer\" | \"by-feature\";\n\n/**\n * Get orphaned folders from the opposite structure\n */\nfunction getOrphanedFolders(outputPath: string, currentStructure: OutputStructure): string[] {\n const orphanedFolders: string[] = [];\n\n if (currentStructure === \"by-feature\") {\n // If using by-feature, check for by-layer folders\n const byLayerFolders = [\"types\", \"services\", \"actions\"];\n for (const folder of byLayerFolders) {\n const folderPath = path.join(outputPath, folder);\n if (fs.existsSync(folderPath)) {\n orphanedFolders.push(folder);\n }\n }\n // Also check for root-level client.ts and locales.ts (by-layer puts them at root)\n if (fs.existsSync(path.join(outputPath, \"client.ts\"))) {\n orphanedFolders.push(\"client.ts\");\n }\n if (fs.existsSync(path.join(outputPath, \"locales.ts\"))) {\n orphanedFolders.push(\"locales.ts\");\n }\n } else {\n // If using by-layer, check for by-feature folders\n const byFeatureFolders = [\"collections\", \"singles\", \"shared\", \"components\"];\n for (const folder of byFeatureFolders) {\n const folderPath = path.join(outputPath, folder);\n if (fs.existsSync(folderPath)) {\n orphanedFolders.push(folder);\n }\n }\n }\n\n return orphanedFolders;\n}\n\n/**\n * Remove orphaned folders/files\n */\nfunction cleanOrphanedFiles(outputPath: string, orphanedItems: string[]): void {\n for (const item of orphanedItems) {\n const itemPath = path.join(outputPath, item);\n if (fs.existsSync(itemPath)) {\n const stat = fs.statSync(itemPath);\n if (stat.isDirectory()) {\n fs.rmSync(itemPath, { recursive: true, force: true });\n } else {\n fs.unlinkSync(itemPath);\n }\n }\n }\n}\n\nexport interface SyncCommandOptions {\n force?: boolean;\n typesOnly?: boolean;\n servicesOnly?: boolean;\n actionsOnly?: boolean;\n clean?: boolean;\n}\n\nexport async function syncCommand(options: SyncCommandOptions): Promise<void> {\n const cwd = process.cwd();\n\n p.intro(pc.cyan(\"strapi2front sync\"));\n\n const s = p.spinner();\n\n try {\n // Load configuration\n s.start(\"Loading configuration...\");\n let config = await loadConfig(cwd);\n s.stop(\"Configuration loaded\");\n\n // Detect and validate Strapi version\n s.start(\"Detecting Strapi version...\");\n const versionResult = await detectStrapiVersion(config.url, config.token);\n s.stop(\"Version detection complete\");\n\n let effectiveVersion: StrapiVersion = config.strapiVersion;\n\n if (versionResult.detected) {\n if (versionResult.detected !== config.strapiVersion) {\n // Version mismatch detected\n if (versionResult.detected === \"v5\" && config.strapiVersion === \"v4\") {\n p.log.warn(\n pc.yellow(`Detected Strapi ${pc.bold(\"v5\")} but config has ${pc.bold(\"v4\")}. Using v5.`)\n );\n effectiveVersion = \"v5\";\n } else if (versionResult.detected === \"v4\" && config.strapiVersion === \"v5\") {\n p.log.warn(\n pc.yellow(`Detected Strapi ${pc.bold(\"v4\")} but config has ${pc.bold(\"v5\")}. Using v4.`)\n );\n effectiveVersion = \"v4\";\n }\n } else {\n p.log.info(`Strapi ${pc.green(pc.bold(config.strapiVersion))}`);\n }\n } else {\n p.log.warn(pc.yellow(`Could not detect Strapi version. Using ${pc.bold(config.strapiVersion)}`));\n }\n\n // Update config with effective version for this sync\n config = { ...config, strapiVersion: effectiveVersion };\n\n // Fetch schema from Strapi\n s.start(\"Fetching schema from Strapi...\");\n const rawSchema = await fetchSchema(config.url, config.token);\n const schema = parseSchema(rawSchema);\n s.stop(`Schema fetched: ${schema.collections.length} collections, ${schema.singles.length} singles, ${schema.components.length} components`);\n\n // Check for Blocks fields and prompt for renderer package\n let blocksRendererInstalled = isPackageInstalled(BLOCKS_RENDERER_PACKAGE, cwd);\n const { hasBlocks: hasBlocksFields, fieldsFound: blocksFieldsFound } = schemaHasBlocks(schema);\n\n if (hasBlocksFields && !blocksRendererInstalled) {\n p.log.info(`Blocks fields detected: ${pc.cyan(blocksFieldsFound.join(\", \"))}`);\n\n const installBlocks = await p.confirm({\n message: `Install ${pc.cyan(BLOCKS_RENDERER_PACKAGE)} for proper type support and rendering?`,\n initialValue: true,\n });\n\n if (p.isCancel(installBlocks)) {\n p.cancel(\"Sync cancelled\");\n process.exit(0);\n }\n\n if (installBlocks) {\n s.start(`Installing ${BLOCKS_RENDERER_PACKAGE}...`);\n try {\n installPackage(BLOCKS_RENDERER_PACKAGE, cwd);\n blocksRendererInstalled = true;\n s.stop(`${BLOCKS_RENDERER_PACKAGE} installed`);\n } catch (error) {\n s.stop(`Failed to install ${BLOCKS_RENDERER_PACKAGE}`);\n logger.warn(\"You can install it manually later and re-run sync\");\n }\n } else {\n p.log.info(pc.dim(`Skipping ${BLOCKS_RENDERER_PACKAGE}. BlocksContent will be typed as unknown[]`));\n }\n }\n\n const outputPath = path.join(cwd, config.output.path);\n const generatedFiles: string[] = [];\n\n // Determine what to generate\n const generateAll = !options.typesOnly && !options.servicesOnly && !options.actionsOnly;\n\n // Check structure mode\n const isByFeature = config.output.structure === 'by-feature';\n const currentStructure: OutputStructure = isByFeature ? \"by-feature\" : \"by-layer\";\n\n // Check for orphaned files from previous structure\n if (fs.existsSync(outputPath)) {\n const orphanedFolders = getOrphanedFolders(outputPath, currentStructure);\n\n if (orphanedFolders.length > 0) {\n const otherStructure = isByFeature ? \"by-layer\" : \"by-feature\";\n p.log.warn(\n pc.yellow(`Found files from previous ${pc.bold(otherStructure)} structure:`)\n );\n p.log.message(pc.dim(` ${orphanedFolders.join(\", \")}`));\n\n let shouldClean = options.clean;\n\n if (!shouldClean) {\n const cleanResponse = await p.confirm({\n message: `Remove orphaned ${otherStructure} files?`,\n initialValue: true,\n });\n\n if (p.isCancel(cleanResponse)) {\n p.cancel(\"Sync cancelled\");\n process.exit(0);\n }\n\n shouldClean = cleanResponse;\n }\n\n if (shouldClean) {\n s.start(\"Cleaning orphaned files...\");\n cleanOrphanedFiles(outputPath, orphanedFolders);\n s.stop(`Removed: ${orphanedFolders.join(\", \")}`);\n } else {\n p.log.info(pc.dim(\"Keeping orphaned files. You can clean them manually or use --clean flag.\"));\n }\n }\n }\n\n if (isByFeature) {\n // Generate using by-feature structure (screaming architecture)\n s.start(\"Generating files (by-feature structure)...\");\n const files = await generateByFeature(schema, rawSchema.locales, {\n outputDir: outputPath,\n features: {\n types: config.features.types && (generateAll || Boolean(options.typesOnly)),\n services: config.features.services && (generateAll || Boolean(options.servicesOnly)),\n actions: config.features.actions && (generateAll || Boolean(options.actionsOnly)),\n },\n blocksRendererInstalled,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} files`);\n } else {\n // Generate using by-layer structure (default)\n\n // Generate types\n if (generateAll || options.typesOnly) {\n if (config.features.types) {\n s.start(\"Generating types...\");\n const typesPath = path.join(outputPath, config.output.types);\n const files = await generateTypes(schema, {\n outputDir: typesPath,\n blocksRendererInstalled,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} type files`);\n }\n }\n\n // Generate client (needed by services)\n if (generateAll || options.servicesOnly) {\n if (config.features.services) {\n s.start(\"Generating client...\");\n const clientFiles = await generateClient({ outputDir: outputPath, strapiVersion: config.strapiVersion });\n generatedFiles.push(...clientFiles);\n s.stop(\"Generated client\");\n\n // Generate locales (for i18n support)\n s.start(\"Generating locales...\");\n const localesFiles = await generateLocales(rawSchema.locales, { outputDir: outputPath });\n generatedFiles.push(...localesFiles);\n if (rawSchema.locales.length > 0) {\n s.stop(`Generated locales: ${rawSchema.locales.map(l => l.code).join(\", \")}`);\n } else {\n s.stop(\"Generated locales (i18n not enabled in Strapi)\");\n }\n }\n }\n\n // Generate services\n if (generateAll || options.servicesOnly) {\n if (config.features.services) {\n s.start(\"Generating services...\");\n const servicesPath = path.join(outputPath, config.output.services);\n const typesImportPath = path.relative(servicesPath, path.join(outputPath, config.output.types)).replace(/\\\\/g, \"/\") || \".\";\n const files = await generateServices(schema, {\n outputDir: servicesPath,\n typesImportPath: typesImportPath.startsWith(\".\") ? typesImportPath : \"./\" + typesImportPath,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} service files`);\n }\n }\n\n // Generate actions\n if (generateAll || options.actionsOnly) {\n if (config.features.actions) {\n s.start(\"Generating Astro actions...\");\n const actionsPath = path.join(outputPath, config.output.actions);\n const servicesPath = path.join(outputPath, config.output.services);\n\n const servicesImportPath = path.relative(actionsPath, servicesPath).replace(/\\\\/g, \"/\") || \".\";\n\n const files = await generateActions(schema, {\n outputDir: actionsPath,\n servicesImportPath: servicesImportPath.startsWith(\".\") ? servicesImportPath : \"./\" + servicesImportPath,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} action files`);\n }\n }\n }\n\n // Show summary\n p.note(\n [\n `Generated ${generatedFiles.length} files in ${pc.cyan(config.output.path)}`,\n \"\",\n \"Files generated:\",\n ...generatedFiles.slice(0, 10).map((f) => ` ${pc.dim(path.relative(cwd, f))}`),\n generatedFiles.length > 10 ? ` ${pc.dim(`... and ${generatedFiles.length - 10} more`)}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n \"Sync complete!\"\n );\n\n p.outro(pc.green(\"Types and services are ready to use!\"));\n } catch (error) {\n s.stop(\"Sync failed\");\n\n if (error instanceof Error) {\n logger.error(error.message);\n\n if (error.message.includes(\"Could not find strapi.config\")) {\n logger.info(\"Run \\\"npx strapi2front init\\\" first to set up your project.\");\n }\n } else {\n logger.error(\"An unknown error occurred\");\n }\n\n process.exit(1);\n }\n}\n","import { Command } from 'commander';\nimport pc from 'picocolors';\nimport { initCommand } from '../commands/init.js';\nimport { syncCommand } from '../commands/sync.js';\n\nconst program = new Command();\n\n// ASCII Art Logo\nconst logo = `\n _ _ ___ __ _\n ___| |_ _ __ __ _ _ __ (_)__ \\\\ / _|_ __ ___ _ __ | |_\n/ __| __| '__/ _\\` | '_ \\\\| | / /| |_| '__/ _ \\\\| '_ \\\\| __|\n\\\\__ \\\\ |_| | | (_| | |_) | ||_| | _| | | (_) | | | | |_\n|___/\\\\__|_| \\\\__,_| .__/|_|(_) |_| |_| \\\\___/|_| |_|\\\\__|\n |_|\n`;\n\nprogram\n .name('strapi2front')\n .description('Generate TypeScript types, services, and framework actions from your Strapi schema')\n .version('0.1.0')\n .addHelpText('beforeAll', pc.cyan(logo));\n\n// Init command\nprogram\n .command('init')\n .description('Initialize strapi2front in your project')\n .option('-y, --yes', 'Skip prompts and use defaults')\n .option('--url <url>', 'Strapi URL')\n .option('--token <token>', 'Strapi API token')\n .option('--framework <framework>', 'Framework to use (astro)')\n .action(initCommand);\n\n// Sync command\nprogram\n .command('sync')\n .description('Sync types, services, and actions from Strapi schema')\n .option('-f, --force', 'Force regeneration of all files')\n .option('--types-only', 'Only generate types')\n .option('--services-only', 'Only generate services')\n .option('--actions-only', 'Only generate actions')\n .option('--clean', 'Automatically remove orphaned files from previous structure')\n .action(syncCommand);\n\n// If no command is provided, run init by default\nconst args = process.argv.slice(2);\nconst commands = ['init', 'sync', 'help', '--help', '-h', '--version', '-V'];\nconst hasCommand = args.some((arg) => commands.includes(arg));\n\nif (args.length === 0 || !hasCommand) {\n // Show logo and run init\n console.log(pc.cyan(logo));\n initCommand({});\n} else {\n // Parse args normally\n program.parse();\n}\n"]}
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import * as p from '@clack/prompts';
5
5
  import pc4 from 'picocolors';
6
6
  import fs4 from 'fs/promises';
7
7
  import path5 from 'path';
8
- import { execSync } from 'child_process';
8
+ import { spawn, execSync } from 'child_process';
9
9
  import fs5 from 'fs';
10
10
  import { generateByFeature, generateTypes, generateClient, generateLocales, generateServices, generateActions } from '@strapi2front/generators';
11
11
 
@@ -260,6 +260,26 @@ var logger = {
260
260
  };
261
261
 
262
262
  // src/commands/init.ts
263
+ function execAsync(command, cwd) {
264
+ return new Promise((resolve, reject) => {
265
+ const [cmd, ...args] = command.split(" ");
266
+ const child = spawn(cmd, args, {
267
+ cwd,
268
+ stdio: "ignore",
269
+ shell: true
270
+ });
271
+ child.on("close", (code) => {
272
+ if (code === 0) {
273
+ resolve();
274
+ } else {
275
+ reject(new Error(`Command failed with exit code ${code}`));
276
+ }
277
+ });
278
+ child.on("error", (error) => {
279
+ reject(error);
280
+ });
281
+ });
282
+ }
263
283
  async function initCommand(_options) {
264
284
  const cwd = process.cwd();
265
285
  const s = p.spinner();
@@ -306,23 +326,23 @@ async function initCommand(_options) {
306
326
  process.exit(0);
307
327
  }
308
328
  if (installDeps) {
309
- s.start("Installing strapi2front...");
329
+ const installStrapi2frontCmd = getInstallDevCommand(packageManager.name, "strapi2front");
330
+ s.start(`Installing strapi2front... (${pc4.dim(installStrapi2frontCmd)})`);
310
331
  try {
311
- const installStrapi2frontCmd = getInstallDevCommand(packageManager.name, "strapi2front");
312
- execSync(installStrapi2frontCmd, { cwd, stdio: "ignore" });
313
- s.stop("strapi2front installed");
332
+ await execAsync(installStrapi2frontCmd, cwd);
333
+ s.stop(`${pc4.green("\u2713")} strapi2front installed`);
314
334
  } catch {
315
- s.stop("Failed to install strapi2front");
316
- logger.warn(`Please install manually: ${getInstallDevCommand(packageManager.name, "strapi2front")}`);
335
+ s.stop(`${pc4.red("\u2717")} Failed to install strapi2front`);
336
+ logger.warn(`Please install manually: ${installStrapi2frontCmd}`);
317
337
  }
318
- s.start("Installing strapi-sdk-js...");
338
+ const installSdkCmd = getInstallCommand(packageManager.name, "strapi-sdk-js");
339
+ s.start(`Installing strapi-sdk-js... (${pc4.dim(installSdkCmd)})`);
319
340
  try {
320
- const installSdkCmd = getInstallCommand(packageManager.name, "strapi-sdk-js");
321
- execSync(installSdkCmd, { cwd, stdio: "ignore" });
322
- s.stop("strapi-sdk-js installed");
341
+ await execAsync(installSdkCmd, cwd);
342
+ s.stop(`${pc4.green("\u2713")} strapi-sdk-js installed`);
323
343
  } catch {
324
- s.stop("Failed to install strapi-sdk-js");
325
- logger.warn(`Please install manually: ${getInstallCommand(packageManager.name, "strapi-sdk-js")}`);
344
+ s.stop(`${pc4.red("\u2717")} Failed to install strapi-sdk-js`);
345
+ logger.warn(`Please install manually: ${installSdkCmd}`);
326
346
  }
327
347
  } else {
328
348
  p.log.info(pc4.dim("Remember to install dependencies manually:"));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/detectors/framework.ts","../src/lib/detectors/typescript.ts","../src/lib/detectors/package-manager.ts","../src/lib/prompts/init.prompts.ts","../src/lib/utils/logger.ts","../src/commands/init.ts","../src/commands/sync.ts"],"names":["path","fs","pc","p2","detectPackageManager","execSync","p3"],"mappings":"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","file":"index.js","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type Framework = \"astro\" | \"nextjs\" | \"nuxt\" | \"unknown\";\n\nexport interface FrameworkInfo {\n name: Framework;\n version: string | null;\n configFile: string | null;\n}\n\nconst FRAMEWORK_DETECTORS: Record<\n string,\n { name: Framework; configFiles: string[] }\n> = {\n astro: {\n name: \"astro\",\n configFiles: [\"astro.config.mjs\", \"astro.config.ts\", \"astro.config.js\"],\n },\n next: {\n name: \"nextjs\",\n configFiles: [\"next.config.mjs\", \"next.config.ts\", \"next.config.js\"],\n },\n nuxt: {\n name: \"nuxt\",\n configFiles: [\"nuxt.config.ts\", \"nuxt.config.js\"],\n },\n};\n\nexport async function detectFramework(cwd: string = process.cwd()): Promise<FrameworkInfo> {\n // Read package.json to check dependencies\n const pkgPath = path.join(cwd, \"package.json\");\n\n try {\n const pkgContent = await fs.readFile(pkgPath, \"utf-8\");\n const pkg = JSON.parse(pkgContent);\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n // Check each framework\n for (const [pkgName, detector] of Object.entries(FRAMEWORK_DETECTORS)) {\n if (deps[pkgName]) {\n // Check for config file\n for (const configFile of detector.configFiles) {\n const configPath = path.join(cwd, configFile);\n try {\n await fs.access(configPath);\n return {\n name: detector.name,\n version: deps[pkgName],\n configFile,\n };\n } catch {\n // Config file not found, continue\n }\n }\n\n // Package found but no config file\n return {\n name: detector.name,\n version: deps[pkgName],\n configFile: null,\n };\n }\n }\n } catch {\n // package.json not found\n }\n\n return {\n name: \"unknown\",\n version: null,\n configFile: null,\n };\n}\n\nexport function getFrameworkDisplayName(framework: Framework): string {\n const names: Record<Framework, string> = {\n astro: \"Astro\",\n nextjs: \"Next.js\",\n nuxt: \"Nuxt\",\n unknown: \"Unknown\",\n };\n return names[framework];\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport interface TypeScriptInfo {\n enabled: boolean;\n configFile: string | null;\n version: string | null;\n}\n\nconst TS_CONFIG_FILES = [\"tsconfig.json\", \"tsconfig.app.json\"];\n\nexport async function detectTypeScript(cwd: string = process.cwd()): Promise<TypeScriptInfo> {\n // Check for tsconfig\n for (const configFile of TS_CONFIG_FILES) {\n const configPath = path.join(cwd, configFile);\n try {\n await fs.access(configPath);\n\n // Check package.json for typescript version\n const pkgPath = path.join(cwd, \"package.json\");\n try {\n const pkgContent = await fs.readFile(pkgPath, \"utf-8\");\n const pkg = JSON.parse(pkgContent);\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n return {\n enabled: true,\n configFile,\n version: deps.typescript || null,\n };\n } catch {\n return {\n enabled: true,\n configFile,\n version: null,\n };\n }\n } catch {\n // Config not found, continue\n }\n }\n\n return {\n enabled: false,\n configFile: null,\n version: null,\n };\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type PackageManager = \"pnpm\" | \"npm\" | \"yarn\" | \"bun\";\n\nexport interface PackageManagerInfo {\n name: PackageManager;\n lockFile: string | null;\n}\n\nconst LOCK_FILES: Record<string, PackageManager> = {\n \"pnpm-lock.yaml\": \"pnpm\",\n \"package-lock.json\": \"npm\",\n \"yarn.lock\": \"yarn\",\n \"bun.lockb\": \"bun\",\n};\n\nexport async function detectPackageManager(cwd: string = process.cwd()): Promise<PackageManagerInfo> {\n // Check for lock files\n for (const [lockFile, pm] of Object.entries(LOCK_FILES)) {\n const lockPath = path.join(cwd, lockFile);\n try {\n await fs.access(lockPath);\n return {\n name: pm,\n lockFile,\n };\n } catch {\n // Lock file not found, continue\n }\n }\n\n // Default to npm if no lock file found\n return {\n name: \"npm\",\n lockFile: null,\n };\n}\n\nexport function getInstallCommand(pm: PackageManager, pkg: string): string {\n const commands: Record<PackageManager, string> = {\n pnpm: `pnpm add ${pkg}`,\n npm: `npm install ${pkg}`,\n yarn: `yarn add ${pkg}`,\n bun: `bun add ${pkg}`,\n };\n return commands[pm];\n}\n\nexport function getInstallDevCommand(pm: PackageManager, pkg: string): string {\n const commands: Record<PackageManager, string> = {\n pnpm: `pnpm add -D ${pkg}`,\n npm: `npm install -D ${pkg}`,\n yarn: `yarn add -D ${pkg}`,\n bun: `bun add -d ${pkg}`,\n };\n return commands[pm];\n}\n\nexport function getRunCommand(pm: PackageManager, script: string): string {\n const commands: Record<PackageManager, string> = {\n pnpm: `pnpm ${script}`,\n npm: `npm run ${script}`,\n yarn: `yarn ${script}`,\n bun: `bun run ${script}`,\n };\n return commands[pm];\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { getFrameworkDisplayName, type FrameworkInfo } from \"../detectors/framework.js\";\nimport type { TypeScriptInfo } from \"../detectors/typescript.js\";\nimport type { PackageManagerInfo } from \"../detectors/package-manager.js\";\n\nexport interface DetectionResults {\n framework: FrameworkInfo;\n typescript: TypeScriptInfo;\n packageManager: PackageManagerInfo;\n}\n\nexport interface InitPromptAnswers {\n strapiUrl: string;\n strapiToken: string;\n strapiVersion: \"v4\" | \"v5\";\n outputDir: string;\n generateActions: boolean;\n generateServices: boolean;\n}\n\nexport async function runInitPrompts(detection: DetectionResults): Promise<InitPromptAnswers | null> {\n p.intro(pc.cyan(\"strapi2front setup\"));\n\n // Show detected info\n p.note(\n [\n `Framework: ${pc.green(getFrameworkDisplayName(detection.framework.name))} ${detection.framework.version ? pc.dim(`v${detection.framework.version}`) : \"\"}`,\n `TypeScript: ${detection.typescript.enabled ? pc.green(\"enabled\") : pc.yellow(\"disabled\")}`,\n `Package Manager: ${pc.green(detection.packageManager.name)}`,\n ].join(\"\\n\"),\n \"Detected Configuration\"\n );\n\n // Check framework support\n if (detection.framework.name === \"unknown\") {\n p.cancel(\"Could not detect a supported framework. Currently only Astro is supported.\");\n return null;\n }\n\n if (detection.framework.name !== \"astro\") {\n p.cancel(`${detection.framework.name} is not yet supported. Currently only Astro is supported.`);\n return null;\n }\n\n // Prompt for Strapi connection\n const defaultUrl = \"http://localhost:1337\";\n const strapiUrlInput = await p.text({\n message: \"What is your Strapi URL?\",\n placeholder: `${defaultUrl} (press Enter for default)`,\n validate: (value): string | undefined => {\n const trimmed = (value || \"\").trim();\n // Allow empty (will use default)\n if (trimmed === \"\") return undefined;\n try {\n new URL(trimmed);\n return undefined;\n } catch {\n return \"Please enter a valid URL\";\n }\n },\n });\n\n if (p.isCancel(strapiUrlInput)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Use default if empty or whitespace only\n const strapiUrl = ((strapiUrlInput as string) || \"\").trim() || defaultUrl;\n\n const strapiToken = await p.text({\n message: \"What is your Strapi API token?\",\n placeholder: \"Press Enter to skip (you can add it later in .env)\",\n });\n\n if (p.isCancel(strapiToken)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Trim and check if empty\n const trimmedToken = ((strapiToken as string) || \"\").trim();\n\n // Show hint if token is empty\n if (trimmedToken === \"\") {\n p.log.info(pc.dim(\"Token skipped. Remember to add STRAPI_TOKEN to your .env file later.\"));\n }\n\n // Strapi version\n const strapiVersion = await p.select({\n message: \"What version of Strapi are you using?\",\n options: [\n { value: \"v5\", label: \"Strapi v5\", hint: \"Recommended - Latest version\" },\n { value: \"v4\", label: \"Strapi v4\", hint: \"Legacy version\" },\n ],\n initialValue: \"v5\",\n });\n\n if (p.isCancel(strapiVersion)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n p.log.info(pc.dim(`Using Strapi ${strapiVersion}. This can be changed later in strapi.config.ts`));\n\n // Output directory\n const outputDir = await p.text({\n message: \"Where should we generate the Strapi files?\",\n placeholder: \"src/strapi\",\n defaultValue: \"src/strapi\",\n });\n\n if (p.isCancel(outputDir)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Features to generate\n const features = await p.multiselect({\n message: \"What would you like to generate?\",\n options: [\n { value: \"types\", label: \"Types\", hint: \"TypeScript interfaces for your content types\" },\n { value: \"services\", label: \"Services\", hint: \"Typed service functions for data fetching\" },\n { value: \"actions\", label: \"Astro Actions\", hint: \"Type-safe actions for client/server\" },\n ],\n initialValues: [\"types\", \"services\", \"actions\"],\n required: true,\n });\n\n if (p.isCancel(features)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n return {\n strapiUrl: strapiUrl,\n strapiToken: trimmedToken,\n strapiVersion: strapiVersion as \"v4\" | \"v5\",\n outputDir: ((outputDir as string) || \"\").trim() || \"src/strapi\",\n generateActions: (features as string[]).includes(\"actions\"),\n generateServices: (features as string[]).includes(\"services\"),\n };\n}\n\nexport async function confirmOverwrite(files: string[]): Promise<boolean> {\n const confirm = await p.confirm({\n message: `The following files will be overwritten:\\n${files.map((f) => ` - ${f}`).join(\"\\n\")}\\n\\nContinue?`,\n initialValue: true,\n });\n\n return !p.isCancel(confirm) && confirm === true;\n}\n","import pc from 'picocolors';\n\nexport const logger = {\n info: (message: string) => {\n console.log(pc.blue(\"i\"), message);\n },\n\n success: (message: string) => {\n console.log(pc.green(\"v\"), message);\n },\n\n warn: (message: string) => {\n console.log(pc.yellow(\"!\"), message);\n },\n\n error: (message: string) => {\n console.log(pc.red(\"x\"), message);\n },\n\n step: (message: string) => {\n console.log(pc.cyan(\">\"), message);\n },\n\n dim: (message: string) => {\n console.log(pc.dim(message));\n },\n\n newLine: () => {\n console.log(\"\");\n },\n};\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { execSync } from \"node:child_process\";\nimport { detectFramework } from \"../lib/detectors/framework.js\";\nimport { detectTypeScript } from \"../lib/detectors/typescript.js\";\nimport { detectPackageManager, getInstallCommand, getInstallDevCommand } from \"../lib/detectors/package-manager.js\";\nimport { runInitPrompts } from \"../lib/prompts/init.prompts.js\";\nimport { logger } from \"../lib/utils/logger.js\";\n\nexport interface InitCommandOptions {\n yes?: boolean;\n url?: string;\n token?: string;\n framework?: string;\n}\n\nexport async function initCommand(_options: InitCommandOptions): Promise<void> {\n const cwd = process.cwd();\n\n // Detect project configuration\n const s = p.spinner();\n s.start(\"Detecting project configuration...\");\n\n const [framework, typescript, packageManager] = await Promise.all([\n detectFramework(cwd),\n detectTypeScript(cwd),\n detectPackageManager(cwd),\n ]);\n\n s.stop(\"Project configuration detected\");\n\n // Run interactive prompts\n const answers = await runInitPrompts({\n framework,\n typescript,\n packageManager,\n });\n\n if (!answers) {\n return;\n }\n\n // Create configuration\n s.start(\"Creating configuration files...\");\n\n try {\n // Create strapi.config.ts\n const configContent = generateConfigFile({\n strapiUrl: answers.strapiUrl,\n strapiVersion: answers.strapiVersion,\n outputDir: answers.outputDir,\n generateActions: answers.generateActions,\n generateServices: answers.generateServices,\n });\n const configPath = path.join(cwd, \"strapi.config.ts\");\n await fs.writeFile(configPath, configContent, \"utf-8\");\n\n // Update .env file\n const envPath = path.join(cwd, \".env\");\n await appendToEnvFile(envPath, {\n STRAPI_URL: answers.strapiUrl,\n STRAPI_TOKEN: answers.strapiToken,\n });\n\n // Create output directory\n const outputPath = path.join(cwd, answers.outputDir);\n await fs.mkdir(outputPath, { recursive: true });\n\n s.stop(\"Configuration files created\");\n\n // Install dependencies\n const installDeps = await p.confirm({\n message: \"Install required dependencies (strapi2front, strapi-sdk-js)?\",\n initialValue: true,\n });\n\n if (p.isCancel(installDeps)) {\n p.cancel(\"Setup cancelled\");\n process.exit(0);\n }\n\n if (installDeps) {\n // Install strapi2front as dev dependency (needed for config file)\n s.start(\"Installing strapi2front...\");\n try {\n const installStrapi2frontCmd = getInstallDevCommand(packageManager.name, \"strapi2front\");\n execSync(installStrapi2frontCmd, { cwd, stdio: \"ignore\" });\n s.stop(\"strapi2front installed\");\n } catch {\n s.stop(\"Failed to install strapi2front\");\n logger.warn(`Please install manually: ${getInstallDevCommand(packageManager.name, \"strapi2front\")}`);\n }\n\n // Install strapi-sdk-js as regular dependency\n s.start(\"Installing strapi-sdk-js...\");\n try {\n const installSdkCmd = getInstallCommand(packageManager.name, \"strapi-sdk-js\");\n execSync(installSdkCmd, { cwd, stdio: \"ignore\" });\n s.stop(\"strapi-sdk-js installed\");\n } catch {\n s.stop(\"Failed to install strapi-sdk-js\");\n logger.warn(`Please install manually: ${getInstallCommand(packageManager.name, \"strapi-sdk-js\")}`);\n }\n } else {\n p.log.info(pc.dim(\"Remember to install dependencies manually:\"));\n p.log.info(pc.dim(` ${getInstallDevCommand(packageManager.name, \"strapi2front\")}`));\n p.log.info(pc.dim(` ${getInstallCommand(packageManager.name, \"strapi-sdk-js\")}`));\n }\n\n // Show success message\n p.note(\n [\n `${pc.green(\"v\")} Created ${pc.cyan(\"strapi.config.ts\")}`,\n `${pc.green(\"v\")} Updated ${pc.cyan(\".env\")} with Strapi credentials`,\n `${pc.green(\"v\")} Created output directory ${pc.cyan(answers.outputDir)}`,\n \"\",\n `Next steps:`,\n ` 1. Run ${pc.cyan(\"npx strapi2front sync\")} to generate types`,\n ` 2. Import types from ${pc.cyan(answers.outputDir + \"/types\")}`,\n ` 3. Import services from ${pc.cyan(answers.outputDir + \"/services\")}`,\n ].join(\"\\n\"),\n \"Setup complete!\"\n );\n\n p.outro(pc.green(\"Happy coding!\"));\n } catch (error) {\n s.stop(\"Failed to create configuration files\");\n logger.error(error instanceof Error ? error.message : \"Unknown error\");\n process.exit(1);\n }\n}\n\nfunction generateConfigFile(answers: {\n strapiUrl: string;\n strapiVersion: \"v4\" | \"v5\";\n outputDir: string;\n generateActions: boolean;\n generateServices: boolean;\n}): string {\n return `import { defineConfig } from \"strapi2front\";\n\nexport default defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n token: process.env.STRAPI_TOKEN,\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n types: \"types\",\n services: \"services\",\n actions: \"actions/strapi\",\n structure: 'by-feature' // or 'by-layer'\n },\n\n // Features to generate\n features: {\n types: true,\n services: ${answers.generateServices},\n actions: ${answers.generateActions},\n },\n\n // Strapi version\n strapiVersion: \"${answers.strapiVersion}\",\n});\n`;\n}\n\nasync function appendToEnvFile(\n envPath: string,\n variables: Record<string, string>\n): Promise<void> {\n let content = \"\";\n\n try {\n content = await fs.readFile(envPath, \"utf-8\");\n } catch {\n // File does not exist, create new\n }\n\n const lines = content.split(\"\\n\");\n const existingKeys = new Set(\n lines\n .filter((line) => line.includes(\"=\"))\n .map((line) => line.split(\"=\")[0].trim())\n );\n\n const newLines: string[] = [];\n\n for (const [key, value] of Object.entries(variables)) {\n if (!existingKeys.has(key)) {\n newLines.push(`${key}=${value}`);\n }\n }\n\n if (newLines.length > 0) {\n const separator = content.endsWith(\"\\n\") || content === \"\" ? \"\" : \"\\n\";\n const newContent = content + separator + newLines.join(\"\\n\") + \"\\n\";\n await fs.writeFile(envPath, newContent, \"utf-8\");\n }\n}\n\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { loadConfig } from \"@strapi2front/core\";\nimport { fetchSchema, detectStrapiVersion } from \"@strapi2front/core\";\nimport { parseSchema } from \"@strapi2front/core\";\nimport type { StrapiVersion } from \"@strapi2front/core\";\nimport type { ParsedSchema, Attribute } from \"@strapi2front/core\";\nimport { generateTypes } from \"@strapi2front/generators\";\nimport { generateServices } from \"@strapi2front/generators\";\nimport { generateActions } from \"@strapi2front/generators\";\nimport { generateClient } from \"@strapi2front/generators\";\nimport { generateLocales } from \"@strapi2front/generators\";\nimport { generateByFeature } from \"@strapi2front/generators\";\nimport { logger } from \"../lib/utils/logger.js\";\n\nconst BLOCKS_RENDERER_PACKAGE = \"@strapi/blocks-react-renderer\";\n\n/**\n * Check if schema contains any blocks fields\n */\nfunction schemaHasBlocks(schema: ParsedSchema): { hasBlocks: boolean; fieldsFound: string[] } {\n const fieldsFound: string[] = [];\n\n const checkAttributes = (typeName: string, attributes: Record<string, Attribute>): void => {\n for (const [fieldName, attr] of Object.entries(attributes)) {\n if (attr.type === \"blocks\") {\n fieldsFound.push(`${typeName}.${fieldName}`);\n }\n }\n };\n\n for (const collection of schema.collections) {\n checkAttributes(collection.singularName, collection.attributes);\n }\n\n for (const single of schema.singles) {\n checkAttributes(single.singularName, single.attributes);\n }\n\n for (const component of schema.components) {\n checkAttributes(`component:${component.name}`, component.attributes);\n }\n\n return { hasBlocks: fieldsFound.length > 0, fieldsFound };\n}\n\n/**\n * Check if a package is installed\n */\nfunction isPackageInstalled(packageName: string, cwd: string): boolean {\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(packageJsonPath)) return false;\n\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n return packageName in deps;\n } catch {\n return false;\n }\n}\n\n/**\n * Detect package manager\n */\nfunction detectPackageManager(cwd: string): \"npm\" | \"yarn\" | \"pnpm\" | \"bun\" {\n if (fs.existsSync(path.join(cwd, \"bun.lockb\"))) return \"bun\";\n if (fs.existsSync(path.join(cwd, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (fs.existsSync(path.join(cwd, \"yarn.lock\"))) return \"yarn\";\n return \"npm\";\n}\n\n/**\n * Install a package\n */\nfunction installPackage(packageName: string, cwd: string): void {\n const pm = detectPackageManager(cwd);\n const commands: Record<string, string> = {\n npm: `npm install ${packageName}`,\n yarn: `yarn add ${packageName}`,\n pnpm: `pnpm add ${packageName}`,\n bun: `bun add ${packageName}`,\n };\n\n execSync(commands[pm], { cwd, stdio: \"inherit\" });\n}\n\n/**\n * Structure type for output organization\n */\ntype OutputStructure = \"by-layer\" | \"by-feature\";\n\n/**\n * Get orphaned folders from the opposite structure\n */\nfunction getOrphanedFolders(outputPath: string, currentStructure: OutputStructure): string[] {\n const orphanedFolders: string[] = [];\n\n if (currentStructure === \"by-feature\") {\n // If using by-feature, check for by-layer folders\n const byLayerFolders = [\"types\", \"services\", \"actions\"];\n for (const folder of byLayerFolders) {\n const folderPath = path.join(outputPath, folder);\n if (fs.existsSync(folderPath)) {\n orphanedFolders.push(folder);\n }\n }\n // Also check for root-level client.ts and locales.ts (by-layer puts them at root)\n if (fs.existsSync(path.join(outputPath, \"client.ts\"))) {\n orphanedFolders.push(\"client.ts\");\n }\n if (fs.existsSync(path.join(outputPath, \"locales.ts\"))) {\n orphanedFolders.push(\"locales.ts\");\n }\n } else {\n // If using by-layer, check for by-feature folders\n const byFeatureFolders = [\"collections\", \"singles\", \"shared\", \"components\"];\n for (const folder of byFeatureFolders) {\n const folderPath = path.join(outputPath, folder);\n if (fs.existsSync(folderPath)) {\n orphanedFolders.push(folder);\n }\n }\n }\n\n return orphanedFolders;\n}\n\n/**\n * Remove orphaned folders/files\n */\nfunction cleanOrphanedFiles(outputPath: string, orphanedItems: string[]): void {\n for (const item of orphanedItems) {\n const itemPath = path.join(outputPath, item);\n if (fs.existsSync(itemPath)) {\n const stat = fs.statSync(itemPath);\n if (stat.isDirectory()) {\n fs.rmSync(itemPath, { recursive: true, force: true });\n } else {\n fs.unlinkSync(itemPath);\n }\n }\n }\n}\n\nexport interface SyncCommandOptions {\n force?: boolean;\n typesOnly?: boolean;\n servicesOnly?: boolean;\n actionsOnly?: boolean;\n clean?: boolean;\n}\n\nexport async function syncCommand(options: SyncCommandOptions): Promise<void> {\n const cwd = process.cwd();\n\n p.intro(pc.cyan(\"strapi2front sync\"));\n\n const s = p.spinner();\n\n try {\n // Load configuration\n s.start(\"Loading configuration...\");\n let config = await loadConfig(cwd);\n s.stop(\"Configuration loaded\");\n\n // Detect and validate Strapi version\n s.start(\"Detecting Strapi version...\");\n const versionResult = await detectStrapiVersion(config.url, config.token);\n s.stop(\"Version detection complete\");\n\n let effectiveVersion: StrapiVersion = config.strapiVersion;\n\n if (versionResult.detected) {\n if (versionResult.detected !== config.strapiVersion) {\n // Version mismatch detected\n if (versionResult.detected === \"v5\" && config.strapiVersion === \"v4\") {\n p.log.warn(\n pc.yellow(`Detected Strapi ${pc.bold(\"v5\")} but config has ${pc.bold(\"v4\")}. Using v5.`)\n );\n effectiveVersion = \"v5\";\n } else if (versionResult.detected === \"v4\" && config.strapiVersion === \"v5\") {\n p.log.warn(\n pc.yellow(`Detected Strapi ${pc.bold(\"v4\")} but config has ${pc.bold(\"v5\")}. Using v4.`)\n );\n effectiveVersion = \"v4\";\n }\n } else {\n p.log.info(`Strapi ${pc.green(pc.bold(config.strapiVersion))}`);\n }\n } else {\n p.log.warn(pc.yellow(`Could not detect Strapi version. Using ${pc.bold(config.strapiVersion)}`));\n }\n\n // Update config with effective version for this sync\n config = { ...config, strapiVersion: effectiveVersion };\n\n // Fetch schema from Strapi\n s.start(\"Fetching schema from Strapi...\");\n const rawSchema = await fetchSchema(config.url, config.token);\n const schema = parseSchema(rawSchema);\n s.stop(`Schema fetched: ${schema.collections.length} collections, ${schema.singles.length} singles, ${schema.components.length} components`);\n\n // Check for Blocks fields and prompt for renderer package\n let blocksRendererInstalled = isPackageInstalled(BLOCKS_RENDERER_PACKAGE, cwd);\n const { hasBlocks: hasBlocksFields, fieldsFound: blocksFieldsFound } = schemaHasBlocks(schema);\n\n if (hasBlocksFields && !blocksRendererInstalled) {\n p.log.info(`Blocks fields detected: ${pc.cyan(blocksFieldsFound.join(\", \"))}`);\n\n const installBlocks = await p.confirm({\n message: `Install ${pc.cyan(BLOCKS_RENDERER_PACKAGE)} for proper type support and rendering?`,\n initialValue: true,\n });\n\n if (p.isCancel(installBlocks)) {\n p.cancel(\"Sync cancelled\");\n process.exit(0);\n }\n\n if (installBlocks) {\n s.start(`Installing ${BLOCKS_RENDERER_PACKAGE}...`);\n try {\n installPackage(BLOCKS_RENDERER_PACKAGE, cwd);\n blocksRendererInstalled = true;\n s.stop(`${BLOCKS_RENDERER_PACKAGE} installed`);\n } catch (error) {\n s.stop(`Failed to install ${BLOCKS_RENDERER_PACKAGE}`);\n logger.warn(\"You can install it manually later and re-run sync\");\n }\n } else {\n p.log.info(pc.dim(`Skipping ${BLOCKS_RENDERER_PACKAGE}. BlocksContent will be typed as unknown[]`));\n }\n }\n\n const outputPath = path.join(cwd, config.output.path);\n const generatedFiles: string[] = [];\n\n // Determine what to generate\n const generateAll = !options.typesOnly && !options.servicesOnly && !options.actionsOnly;\n\n // Check structure mode\n const isByFeature = config.output.structure === 'by-feature';\n const currentStructure: OutputStructure = isByFeature ? \"by-feature\" : \"by-layer\";\n\n // Check for orphaned files from previous structure\n if (fs.existsSync(outputPath)) {\n const orphanedFolders = getOrphanedFolders(outputPath, currentStructure);\n\n if (orphanedFolders.length > 0) {\n const otherStructure = isByFeature ? \"by-layer\" : \"by-feature\";\n p.log.warn(\n pc.yellow(`Found files from previous ${pc.bold(otherStructure)} structure:`)\n );\n p.log.message(pc.dim(` ${orphanedFolders.join(\", \")}`));\n\n let shouldClean = options.clean;\n\n if (!shouldClean) {\n const cleanResponse = await p.confirm({\n message: `Remove orphaned ${otherStructure} files?`,\n initialValue: true,\n });\n\n if (p.isCancel(cleanResponse)) {\n p.cancel(\"Sync cancelled\");\n process.exit(0);\n }\n\n shouldClean = cleanResponse;\n }\n\n if (shouldClean) {\n s.start(\"Cleaning orphaned files...\");\n cleanOrphanedFiles(outputPath, orphanedFolders);\n s.stop(`Removed: ${orphanedFolders.join(\", \")}`);\n } else {\n p.log.info(pc.dim(\"Keeping orphaned files. You can clean them manually or use --clean flag.\"));\n }\n }\n }\n\n if (isByFeature) {\n // Generate using by-feature structure (screaming architecture)\n s.start(\"Generating files (by-feature structure)...\");\n const files = await generateByFeature(schema, rawSchema.locales, {\n outputDir: outputPath,\n features: {\n types: config.features.types && (generateAll || Boolean(options.typesOnly)),\n services: config.features.services && (generateAll || Boolean(options.servicesOnly)),\n actions: config.features.actions && (generateAll || Boolean(options.actionsOnly)),\n },\n blocksRendererInstalled,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} files`);\n } else {\n // Generate using by-layer structure (default)\n\n // Generate types\n if (generateAll || options.typesOnly) {\n if (config.features.types) {\n s.start(\"Generating types...\");\n const typesPath = path.join(outputPath, config.output.types);\n const files = await generateTypes(schema, {\n outputDir: typesPath,\n blocksRendererInstalled,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} type files`);\n }\n }\n\n // Generate client (needed by services)\n if (generateAll || options.servicesOnly) {\n if (config.features.services) {\n s.start(\"Generating client...\");\n const clientFiles = await generateClient({ outputDir: outputPath, strapiVersion: config.strapiVersion });\n generatedFiles.push(...clientFiles);\n s.stop(\"Generated client\");\n\n // Generate locales (for i18n support)\n s.start(\"Generating locales...\");\n const localesFiles = await generateLocales(rawSchema.locales, { outputDir: outputPath });\n generatedFiles.push(...localesFiles);\n if (rawSchema.locales.length > 0) {\n s.stop(`Generated locales: ${rawSchema.locales.map(l => l.code).join(\", \")}`);\n } else {\n s.stop(\"Generated locales (i18n not enabled in Strapi)\");\n }\n }\n }\n\n // Generate services\n if (generateAll || options.servicesOnly) {\n if (config.features.services) {\n s.start(\"Generating services...\");\n const servicesPath = path.join(outputPath, config.output.services);\n const typesImportPath = path.relative(servicesPath, path.join(outputPath, config.output.types)).replace(/\\\\/g, \"/\") || \".\";\n const files = await generateServices(schema, {\n outputDir: servicesPath,\n typesImportPath: typesImportPath.startsWith(\".\") ? typesImportPath : \"./\" + typesImportPath,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} service files`);\n }\n }\n\n // Generate actions\n if (generateAll || options.actionsOnly) {\n if (config.features.actions) {\n s.start(\"Generating Astro actions...\");\n const actionsPath = path.join(outputPath, config.output.actions);\n const servicesPath = path.join(outputPath, config.output.services);\n\n const servicesImportPath = path.relative(actionsPath, servicesPath).replace(/\\\\/g, \"/\") || \".\";\n\n const files = await generateActions(schema, {\n outputDir: actionsPath,\n servicesImportPath: servicesImportPath.startsWith(\".\") ? servicesImportPath : \"./\" + servicesImportPath,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} action files`);\n }\n }\n }\n\n // Show summary\n p.note(\n [\n `Generated ${generatedFiles.length} files in ${pc.cyan(config.output.path)}`,\n \"\",\n \"Files generated:\",\n ...generatedFiles.slice(0, 10).map((f) => ` ${pc.dim(path.relative(cwd, f))}`),\n generatedFiles.length > 10 ? ` ${pc.dim(`... and ${generatedFiles.length - 10} more`)}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n \"Sync complete!\"\n );\n\n p.outro(pc.green(\"Types and services are ready to use!\"));\n } catch (error) {\n s.stop(\"Sync failed\");\n\n if (error instanceof Error) {\n logger.error(error.message);\n\n if (error.message.includes(\"Could not find strapi.config\")) {\n logger.info(\"Run \\\"npx strapi2front init\\\" first to set up your project.\");\n }\n } else {\n logger.error(\"An unknown error occurred\");\n }\n\n process.exit(1);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/lib/detectors/framework.ts","../src/lib/detectors/typescript.ts","../src/lib/detectors/package-manager.ts","../src/lib/prompts/init.prompts.ts","../src/lib/utils/logger.ts","../src/commands/init.ts","../src/commands/sync.ts"],"names":["path","fs","pc","p2","detectPackageManager","p3"],"mappings":"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","file":"index.js","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type Framework = \"astro\" | \"nextjs\" | \"nuxt\" | \"unknown\";\n\nexport interface FrameworkInfo {\n name: Framework;\n version: string | null;\n configFile: string | null;\n}\n\nconst FRAMEWORK_DETECTORS: Record<\n string,\n { name: Framework; configFiles: string[] }\n> = {\n astro: {\n name: \"astro\",\n configFiles: [\"astro.config.mjs\", \"astro.config.ts\", \"astro.config.js\"],\n },\n next: {\n name: \"nextjs\",\n configFiles: [\"next.config.mjs\", \"next.config.ts\", \"next.config.js\"],\n },\n nuxt: {\n name: \"nuxt\",\n configFiles: [\"nuxt.config.ts\", \"nuxt.config.js\"],\n },\n};\n\nexport async function detectFramework(cwd: string = process.cwd()): Promise<FrameworkInfo> {\n // Read package.json to check dependencies\n const pkgPath = path.join(cwd, \"package.json\");\n\n try {\n const pkgContent = await fs.readFile(pkgPath, \"utf-8\");\n const pkg = JSON.parse(pkgContent);\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n // Check each framework\n for (const [pkgName, detector] of Object.entries(FRAMEWORK_DETECTORS)) {\n if (deps[pkgName]) {\n // Check for config file\n for (const configFile of detector.configFiles) {\n const configPath = path.join(cwd, configFile);\n try {\n await fs.access(configPath);\n return {\n name: detector.name,\n version: deps[pkgName],\n configFile,\n };\n } catch {\n // Config file not found, continue\n }\n }\n\n // Package found but no config file\n return {\n name: detector.name,\n version: deps[pkgName],\n configFile: null,\n };\n }\n }\n } catch {\n // package.json not found\n }\n\n return {\n name: \"unknown\",\n version: null,\n configFile: null,\n };\n}\n\nexport function getFrameworkDisplayName(framework: Framework): string {\n const names: Record<Framework, string> = {\n astro: \"Astro\",\n nextjs: \"Next.js\",\n nuxt: \"Nuxt\",\n unknown: \"Unknown\",\n };\n return names[framework];\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport interface TypeScriptInfo {\n enabled: boolean;\n configFile: string | null;\n version: string | null;\n}\n\nconst TS_CONFIG_FILES = [\"tsconfig.json\", \"tsconfig.app.json\"];\n\nexport async function detectTypeScript(cwd: string = process.cwd()): Promise<TypeScriptInfo> {\n // Check for tsconfig\n for (const configFile of TS_CONFIG_FILES) {\n const configPath = path.join(cwd, configFile);\n try {\n await fs.access(configPath);\n\n // Check package.json for typescript version\n const pkgPath = path.join(cwd, \"package.json\");\n try {\n const pkgContent = await fs.readFile(pkgPath, \"utf-8\");\n const pkg = JSON.parse(pkgContent);\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n return {\n enabled: true,\n configFile,\n version: deps.typescript || null,\n };\n } catch {\n return {\n enabled: true,\n configFile,\n version: null,\n };\n }\n } catch {\n // Config not found, continue\n }\n }\n\n return {\n enabled: false,\n configFile: null,\n version: null,\n };\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type PackageManager = \"pnpm\" | \"npm\" | \"yarn\" | \"bun\";\n\nexport interface PackageManagerInfo {\n name: PackageManager;\n lockFile: string | null;\n}\n\nconst LOCK_FILES: Record<string, PackageManager> = {\n \"pnpm-lock.yaml\": \"pnpm\",\n \"package-lock.json\": \"npm\",\n \"yarn.lock\": \"yarn\",\n \"bun.lockb\": \"bun\",\n};\n\nexport async function detectPackageManager(cwd: string = process.cwd()): Promise<PackageManagerInfo> {\n // Check for lock files\n for (const [lockFile, pm] of Object.entries(LOCK_FILES)) {\n const lockPath = path.join(cwd, lockFile);\n try {\n await fs.access(lockPath);\n return {\n name: pm,\n lockFile,\n };\n } catch {\n // Lock file not found, continue\n }\n }\n\n // Default to npm if no lock file found\n return {\n name: \"npm\",\n lockFile: null,\n };\n}\n\nexport function getInstallCommand(pm: PackageManager, pkg: string): string {\n const commands: Record<PackageManager, string> = {\n pnpm: `pnpm add ${pkg}`,\n npm: `npm install ${pkg}`,\n yarn: `yarn add ${pkg}`,\n bun: `bun add ${pkg}`,\n };\n return commands[pm];\n}\n\nexport function getInstallDevCommand(pm: PackageManager, pkg: string): string {\n const commands: Record<PackageManager, string> = {\n pnpm: `pnpm add -D ${pkg}`,\n npm: `npm install -D ${pkg}`,\n yarn: `yarn add -D ${pkg}`,\n bun: `bun add -d ${pkg}`,\n };\n return commands[pm];\n}\n\nexport function getRunCommand(pm: PackageManager, script: string): string {\n const commands: Record<PackageManager, string> = {\n pnpm: `pnpm ${script}`,\n npm: `npm run ${script}`,\n yarn: `yarn ${script}`,\n bun: `bun run ${script}`,\n };\n return commands[pm];\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { getFrameworkDisplayName, type FrameworkInfo } from \"../detectors/framework.js\";\nimport type { TypeScriptInfo } from \"../detectors/typescript.js\";\nimport type { PackageManagerInfo } from \"../detectors/package-manager.js\";\n\nexport interface DetectionResults {\n framework: FrameworkInfo;\n typescript: TypeScriptInfo;\n packageManager: PackageManagerInfo;\n}\n\nexport interface InitPromptAnswers {\n strapiUrl: string;\n strapiToken: string;\n strapiVersion: \"v4\" | \"v5\";\n outputDir: string;\n generateActions: boolean;\n generateServices: boolean;\n}\n\nexport async function runInitPrompts(detection: DetectionResults): Promise<InitPromptAnswers | null> {\n p.intro(pc.cyan(\"strapi2front setup\"));\n\n // Show detected info\n p.note(\n [\n `Framework: ${pc.green(getFrameworkDisplayName(detection.framework.name))} ${detection.framework.version ? pc.dim(`v${detection.framework.version}`) : \"\"}`,\n `TypeScript: ${detection.typescript.enabled ? pc.green(\"enabled\") : pc.yellow(\"disabled\")}`,\n `Package Manager: ${pc.green(detection.packageManager.name)}`,\n ].join(\"\\n\"),\n \"Detected Configuration\"\n );\n\n // Check framework support\n if (detection.framework.name === \"unknown\") {\n p.cancel(\"Could not detect a supported framework. Currently only Astro is supported.\");\n return null;\n }\n\n if (detection.framework.name !== \"astro\") {\n p.cancel(`${detection.framework.name} is not yet supported. Currently only Astro is supported.`);\n return null;\n }\n\n // Prompt for Strapi connection\n const defaultUrl = \"http://localhost:1337\";\n const strapiUrlInput = await p.text({\n message: \"What is your Strapi URL?\",\n placeholder: `${defaultUrl} (press Enter for default)`,\n validate: (value): string | undefined => {\n const trimmed = (value || \"\").trim();\n // Allow empty (will use default)\n if (trimmed === \"\") return undefined;\n try {\n new URL(trimmed);\n return undefined;\n } catch {\n return \"Please enter a valid URL\";\n }\n },\n });\n\n if (p.isCancel(strapiUrlInput)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Use default if empty or whitespace only\n const strapiUrl = ((strapiUrlInput as string) || \"\").trim() || defaultUrl;\n\n const strapiToken = await p.text({\n message: \"What is your Strapi API token?\",\n placeholder: \"Press Enter to skip (you can add it later in .env)\",\n });\n\n if (p.isCancel(strapiToken)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Trim and check if empty\n const trimmedToken = ((strapiToken as string) || \"\").trim();\n\n // Show hint if token is empty\n if (trimmedToken === \"\") {\n p.log.info(pc.dim(\"Token skipped. Remember to add STRAPI_TOKEN to your .env file later.\"));\n }\n\n // Strapi version\n const strapiVersion = await p.select({\n message: \"What version of Strapi are you using?\",\n options: [\n { value: \"v5\", label: \"Strapi v5\", hint: \"Recommended - Latest version\" },\n { value: \"v4\", label: \"Strapi v4\", hint: \"Legacy version\" },\n ],\n initialValue: \"v5\",\n });\n\n if (p.isCancel(strapiVersion)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n p.log.info(pc.dim(`Using Strapi ${strapiVersion}. This can be changed later in strapi.config.ts`));\n\n // Output directory\n const outputDir = await p.text({\n message: \"Where should we generate the Strapi files?\",\n placeholder: \"src/strapi\",\n defaultValue: \"src/strapi\",\n });\n\n if (p.isCancel(outputDir)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Features to generate\n const features = await p.multiselect({\n message: \"What would you like to generate?\",\n options: [\n { value: \"types\", label: \"Types\", hint: \"TypeScript interfaces for your content types\" },\n { value: \"services\", label: \"Services\", hint: \"Typed service functions for data fetching\" },\n { value: \"actions\", label: \"Astro Actions\", hint: \"Type-safe actions for client/server\" },\n ],\n initialValues: [\"types\", \"services\", \"actions\"],\n required: true,\n });\n\n if (p.isCancel(features)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n return {\n strapiUrl: strapiUrl,\n strapiToken: trimmedToken,\n strapiVersion: strapiVersion as \"v4\" | \"v5\",\n outputDir: ((outputDir as string) || \"\").trim() || \"src/strapi\",\n generateActions: (features as string[]).includes(\"actions\"),\n generateServices: (features as string[]).includes(\"services\"),\n };\n}\n\nexport async function confirmOverwrite(files: string[]): Promise<boolean> {\n const confirm = await p.confirm({\n message: `The following files will be overwritten:\\n${files.map((f) => ` - ${f}`).join(\"\\n\")}\\n\\nContinue?`,\n initialValue: true,\n });\n\n return !p.isCancel(confirm) && confirm === true;\n}\n","import pc from 'picocolors';\n\nexport const logger = {\n info: (message: string) => {\n console.log(pc.blue(\"i\"), message);\n },\n\n success: (message: string) => {\n console.log(pc.green(\"v\"), message);\n },\n\n warn: (message: string) => {\n console.log(pc.yellow(\"!\"), message);\n },\n\n error: (message: string) => {\n console.log(pc.red(\"x\"), message);\n },\n\n step: (message: string) => {\n console.log(pc.cyan(\">\"), message);\n },\n\n dim: (message: string) => {\n console.log(pc.dim(message));\n },\n\n newLine: () => {\n console.log(\"\");\n },\n};\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { spawn } from \"node:child_process\";\nimport { detectFramework } from \"../lib/detectors/framework.js\";\nimport { detectTypeScript } from \"../lib/detectors/typescript.js\";\nimport { detectPackageManager, getInstallCommand, getInstallDevCommand } from \"../lib/detectors/package-manager.js\";\nimport { runInitPrompts } from \"../lib/prompts/init.prompts.js\";\nimport { logger } from \"../lib/utils/logger.js\";\n\n/**\n * Execute a shell command asynchronously\n * This allows spinners to animate while the command runs\n */\nfunction execAsync(command: string, cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const [cmd, ...args] = command.split(\" \");\n const child = spawn(cmd, args, {\n cwd,\n stdio: \"ignore\",\n shell: true,\n });\n\n child.on(\"close\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n\n child.on(\"error\", (error) => {\n reject(error);\n });\n });\n}\n\nexport interface InitCommandOptions {\n yes?: boolean;\n url?: string;\n token?: string;\n framework?: string;\n}\n\nexport async function initCommand(_options: InitCommandOptions): Promise<void> {\n const cwd = process.cwd();\n\n // Detect project configuration\n const s = p.spinner();\n s.start(\"Detecting project configuration...\");\n\n const [framework, typescript, packageManager] = await Promise.all([\n detectFramework(cwd),\n detectTypeScript(cwd),\n detectPackageManager(cwd),\n ]);\n\n s.stop(\"Project configuration detected\");\n\n // Run interactive prompts\n const answers = await runInitPrompts({\n framework,\n typescript,\n packageManager,\n });\n\n if (!answers) {\n return;\n }\n\n // Create configuration\n s.start(\"Creating configuration files...\");\n\n try {\n // Create strapi.config.ts\n const configContent = generateConfigFile({\n strapiUrl: answers.strapiUrl,\n strapiVersion: answers.strapiVersion,\n outputDir: answers.outputDir,\n generateActions: answers.generateActions,\n generateServices: answers.generateServices,\n });\n const configPath = path.join(cwd, \"strapi.config.ts\");\n await fs.writeFile(configPath, configContent, \"utf-8\");\n\n // Update .env file\n const envPath = path.join(cwd, \".env\");\n await appendToEnvFile(envPath, {\n STRAPI_URL: answers.strapiUrl,\n STRAPI_TOKEN: answers.strapiToken,\n });\n\n // Create output directory\n const outputPath = path.join(cwd, answers.outputDir);\n await fs.mkdir(outputPath, { recursive: true });\n\n s.stop(\"Configuration files created\");\n\n // Install dependencies\n const installDeps = await p.confirm({\n message: \"Install required dependencies (strapi2front, strapi-sdk-js)?\",\n initialValue: true,\n });\n\n if (p.isCancel(installDeps)) {\n p.cancel(\"Setup cancelled\");\n process.exit(0);\n }\n\n if (installDeps) {\n // Install strapi2front as dev dependency (needed for config file)\n const installStrapi2frontCmd = getInstallDevCommand(packageManager.name, \"strapi2front\");\n s.start(`Installing strapi2front... (${pc.dim(installStrapi2frontCmd)})`);\n try {\n await execAsync(installStrapi2frontCmd, cwd);\n s.stop(`${pc.green(\"✓\")} strapi2front installed`);\n } catch {\n s.stop(`${pc.red(\"✗\")} Failed to install strapi2front`);\n logger.warn(`Please install manually: ${installStrapi2frontCmd}`);\n }\n\n // Install strapi-sdk-js as regular dependency\n const installSdkCmd = getInstallCommand(packageManager.name, \"strapi-sdk-js\");\n s.start(`Installing strapi-sdk-js... (${pc.dim(installSdkCmd)})`);\n try {\n await execAsync(installSdkCmd, cwd);\n s.stop(`${pc.green(\"✓\")} strapi-sdk-js installed`);\n } catch {\n s.stop(`${pc.red(\"✗\")} Failed to install strapi-sdk-js`);\n logger.warn(`Please install manually: ${installSdkCmd}`);\n }\n } else {\n p.log.info(pc.dim(\"Remember to install dependencies manually:\"));\n p.log.info(pc.dim(` ${getInstallDevCommand(packageManager.name, \"strapi2front\")}`));\n p.log.info(pc.dim(` ${getInstallCommand(packageManager.name, \"strapi-sdk-js\")}`));\n }\n\n // Show success message\n p.note(\n [\n `${pc.green(\"v\")} Created ${pc.cyan(\"strapi.config.ts\")}`,\n `${pc.green(\"v\")} Updated ${pc.cyan(\".env\")} with Strapi credentials`,\n `${pc.green(\"v\")} Created output directory ${pc.cyan(answers.outputDir)}`,\n \"\",\n `Next steps:`,\n ` 1. Run ${pc.cyan(\"npx strapi2front sync\")} to generate types`,\n ` 2. Import types from ${pc.cyan(answers.outputDir + \"/types\")}`,\n ` 3. Import services from ${pc.cyan(answers.outputDir + \"/services\")}`,\n ].join(\"\\n\"),\n \"Setup complete!\"\n );\n\n p.outro(pc.green(\"Happy coding!\"));\n } catch (error) {\n s.stop(\"Failed to create configuration files\");\n logger.error(error instanceof Error ? error.message : \"Unknown error\");\n process.exit(1);\n }\n}\n\nfunction generateConfigFile(answers: {\n strapiUrl: string;\n strapiVersion: \"v4\" | \"v5\";\n outputDir: string;\n generateActions: boolean;\n generateServices: boolean;\n}): string {\n return `import { defineConfig } from \"strapi2front\";\n\nexport default defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n token: process.env.STRAPI_TOKEN,\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n types: \"types\",\n services: \"services\",\n actions: \"actions/strapi\",\n structure: 'by-feature' // or 'by-layer'\n },\n\n // Features to generate\n features: {\n types: true,\n services: ${answers.generateServices},\n actions: ${answers.generateActions},\n },\n\n // Strapi version\n strapiVersion: \"${answers.strapiVersion}\",\n});\n`;\n}\n\nasync function appendToEnvFile(\n envPath: string,\n variables: Record<string, string>\n): Promise<void> {\n let content = \"\";\n\n try {\n content = await fs.readFile(envPath, \"utf-8\");\n } catch {\n // File does not exist, create new\n }\n\n const lines = content.split(\"\\n\");\n const existingKeys = new Set(\n lines\n .filter((line) => line.includes(\"=\"))\n .map((line) => line.split(\"=\")[0].trim())\n );\n\n const newLines: string[] = [];\n\n for (const [key, value] of Object.entries(variables)) {\n if (!existingKeys.has(key)) {\n newLines.push(`${key}=${value}`);\n }\n }\n\n if (newLines.length > 0) {\n const separator = content.endsWith(\"\\n\") || content === \"\" ? \"\" : \"\\n\";\n const newContent = content + separator + newLines.join(\"\\n\") + \"\\n\";\n await fs.writeFile(envPath, newContent, \"utf-8\");\n }\n}\n\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { loadConfig } from \"@strapi2front/core\";\nimport { fetchSchema, detectStrapiVersion } from \"@strapi2front/core\";\nimport { parseSchema } from \"@strapi2front/core\";\nimport type { StrapiVersion } from \"@strapi2front/core\";\nimport type { ParsedSchema, Attribute } from \"@strapi2front/core\";\nimport { generateTypes } from \"@strapi2front/generators\";\nimport { generateServices } from \"@strapi2front/generators\";\nimport { generateActions } from \"@strapi2front/generators\";\nimport { generateClient } from \"@strapi2front/generators\";\nimport { generateLocales } from \"@strapi2front/generators\";\nimport { generateByFeature } from \"@strapi2front/generators\";\nimport { logger } from \"../lib/utils/logger.js\";\n\nconst BLOCKS_RENDERER_PACKAGE = \"@strapi/blocks-react-renderer\";\n\n/**\n * Check if schema contains any blocks fields\n */\nfunction schemaHasBlocks(schema: ParsedSchema): { hasBlocks: boolean; fieldsFound: string[] } {\n const fieldsFound: string[] = [];\n\n const checkAttributes = (typeName: string, attributes: Record<string, Attribute>): void => {\n for (const [fieldName, attr] of Object.entries(attributes)) {\n if (attr.type === \"blocks\") {\n fieldsFound.push(`${typeName}.${fieldName}`);\n }\n }\n };\n\n for (const collection of schema.collections) {\n checkAttributes(collection.singularName, collection.attributes);\n }\n\n for (const single of schema.singles) {\n checkAttributes(single.singularName, single.attributes);\n }\n\n for (const component of schema.components) {\n checkAttributes(`component:${component.name}`, component.attributes);\n }\n\n return { hasBlocks: fieldsFound.length > 0, fieldsFound };\n}\n\n/**\n * Check if a package is installed\n */\nfunction isPackageInstalled(packageName: string, cwd: string): boolean {\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(packageJsonPath)) return false;\n\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n return packageName in deps;\n } catch {\n return false;\n }\n}\n\n/**\n * Detect package manager\n */\nfunction detectPackageManager(cwd: string): \"npm\" | \"yarn\" | \"pnpm\" | \"bun\" {\n if (fs.existsSync(path.join(cwd, \"bun.lockb\"))) return \"bun\";\n if (fs.existsSync(path.join(cwd, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (fs.existsSync(path.join(cwd, \"yarn.lock\"))) return \"yarn\";\n return \"npm\";\n}\n\n/**\n * Install a package\n */\nfunction installPackage(packageName: string, cwd: string): void {\n const pm = detectPackageManager(cwd);\n const commands: Record<string, string> = {\n npm: `npm install ${packageName}`,\n yarn: `yarn add ${packageName}`,\n pnpm: `pnpm add ${packageName}`,\n bun: `bun add ${packageName}`,\n };\n\n execSync(commands[pm], { cwd, stdio: \"inherit\" });\n}\n\n/**\n * Structure type for output organization\n */\ntype OutputStructure = \"by-layer\" | \"by-feature\";\n\n/**\n * Get orphaned folders from the opposite structure\n */\nfunction getOrphanedFolders(outputPath: string, currentStructure: OutputStructure): string[] {\n const orphanedFolders: string[] = [];\n\n if (currentStructure === \"by-feature\") {\n // If using by-feature, check for by-layer folders\n const byLayerFolders = [\"types\", \"services\", \"actions\"];\n for (const folder of byLayerFolders) {\n const folderPath = path.join(outputPath, folder);\n if (fs.existsSync(folderPath)) {\n orphanedFolders.push(folder);\n }\n }\n // Also check for root-level client.ts and locales.ts (by-layer puts them at root)\n if (fs.existsSync(path.join(outputPath, \"client.ts\"))) {\n orphanedFolders.push(\"client.ts\");\n }\n if (fs.existsSync(path.join(outputPath, \"locales.ts\"))) {\n orphanedFolders.push(\"locales.ts\");\n }\n } else {\n // If using by-layer, check for by-feature folders\n const byFeatureFolders = [\"collections\", \"singles\", \"shared\", \"components\"];\n for (const folder of byFeatureFolders) {\n const folderPath = path.join(outputPath, folder);\n if (fs.existsSync(folderPath)) {\n orphanedFolders.push(folder);\n }\n }\n }\n\n return orphanedFolders;\n}\n\n/**\n * Remove orphaned folders/files\n */\nfunction cleanOrphanedFiles(outputPath: string, orphanedItems: string[]): void {\n for (const item of orphanedItems) {\n const itemPath = path.join(outputPath, item);\n if (fs.existsSync(itemPath)) {\n const stat = fs.statSync(itemPath);\n if (stat.isDirectory()) {\n fs.rmSync(itemPath, { recursive: true, force: true });\n } else {\n fs.unlinkSync(itemPath);\n }\n }\n }\n}\n\nexport interface SyncCommandOptions {\n force?: boolean;\n typesOnly?: boolean;\n servicesOnly?: boolean;\n actionsOnly?: boolean;\n clean?: boolean;\n}\n\nexport async function syncCommand(options: SyncCommandOptions): Promise<void> {\n const cwd = process.cwd();\n\n p.intro(pc.cyan(\"strapi2front sync\"));\n\n const s = p.spinner();\n\n try {\n // Load configuration\n s.start(\"Loading configuration...\");\n let config = await loadConfig(cwd);\n s.stop(\"Configuration loaded\");\n\n // Detect and validate Strapi version\n s.start(\"Detecting Strapi version...\");\n const versionResult = await detectStrapiVersion(config.url, config.token);\n s.stop(\"Version detection complete\");\n\n let effectiveVersion: StrapiVersion = config.strapiVersion;\n\n if (versionResult.detected) {\n if (versionResult.detected !== config.strapiVersion) {\n // Version mismatch detected\n if (versionResult.detected === \"v5\" && config.strapiVersion === \"v4\") {\n p.log.warn(\n pc.yellow(`Detected Strapi ${pc.bold(\"v5\")} but config has ${pc.bold(\"v4\")}. Using v5.`)\n );\n effectiveVersion = \"v5\";\n } else if (versionResult.detected === \"v4\" && config.strapiVersion === \"v5\") {\n p.log.warn(\n pc.yellow(`Detected Strapi ${pc.bold(\"v4\")} but config has ${pc.bold(\"v5\")}. Using v4.`)\n );\n effectiveVersion = \"v4\";\n }\n } else {\n p.log.info(`Strapi ${pc.green(pc.bold(config.strapiVersion))}`);\n }\n } else {\n p.log.warn(pc.yellow(`Could not detect Strapi version. Using ${pc.bold(config.strapiVersion)}`));\n }\n\n // Update config with effective version for this sync\n config = { ...config, strapiVersion: effectiveVersion };\n\n // Fetch schema from Strapi\n s.start(\"Fetching schema from Strapi...\");\n const rawSchema = await fetchSchema(config.url, config.token);\n const schema = parseSchema(rawSchema);\n s.stop(`Schema fetched: ${schema.collections.length} collections, ${schema.singles.length} singles, ${schema.components.length} components`);\n\n // Check for Blocks fields and prompt for renderer package\n let blocksRendererInstalled = isPackageInstalled(BLOCKS_RENDERER_PACKAGE, cwd);\n const { hasBlocks: hasBlocksFields, fieldsFound: blocksFieldsFound } = schemaHasBlocks(schema);\n\n if (hasBlocksFields && !blocksRendererInstalled) {\n p.log.info(`Blocks fields detected: ${pc.cyan(blocksFieldsFound.join(\", \"))}`);\n\n const installBlocks = await p.confirm({\n message: `Install ${pc.cyan(BLOCKS_RENDERER_PACKAGE)} for proper type support and rendering?`,\n initialValue: true,\n });\n\n if (p.isCancel(installBlocks)) {\n p.cancel(\"Sync cancelled\");\n process.exit(0);\n }\n\n if (installBlocks) {\n s.start(`Installing ${BLOCKS_RENDERER_PACKAGE}...`);\n try {\n installPackage(BLOCKS_RENDERER_PACKAGE, cwd);\n blocksRendererInstalled = true;\n s.stop(`${BLOCKS_RENDERER_PACKAGE} installed`);\n } catch (error) {\n s.stop(`Failed to install ${BLOCKS_RENDERER_PACKAGE}`);\n logger.warn(\"You can install it manually later and re-run sync\");\n }\n } else {\n p.log.info(pc.dim(`Skipping ${BLOCKS_RENDERER_PACKAGE}. BlocksContent will be typed as unknown[]`));\n }\n }\n\n const outputPath = path.join(cwd, config.output.path);\n const generatedFiles: string[] = [];\n\n // Determine what to generate\n const generateAll = !options.typesOnly && !options.servicesOnly && !options.actionsOnly;\n\n // Check structure mode\n const isByFeature = config.output.structure === 'by-feature';\n const currentStructure: OutputStructure = isByFeature ? \"by-feature\" : \"by-layer\";\n\n // Check for orphaned files from previous structure\n if (fs.existsSync(outputPath)) {\n const orphanedFolders = getOrphanedFolders(outputPath, currentStructure);\n\n if (orphanedFolders.length > 0) {\n const otherStructure = isByFeature ? \"by-layer\" : \"by-feature\";\n p.log.warn(\n pc.yellow(`Found files from previous ${pc.bold(otherStructure)} structure:`)\n );\n p.log.message(pc.dim(` ${orphanedFolders.join(\", \")}`));\n\n let shouldClean = options.clean;\n\n if (!shouldClean) {\n const cleanResponse = await p.confirm({\n message: `Remove orphaned ${otherStructure} files?`,\n initialValue: true,\n });\n\n if (p.isCancel(cleanResponse)) {\n p.cancel(\"Sync cancelled\");\n process.exit(0);\n }\n\n shouldClean = cleanResponse;\n }\n\n if (shouldClean) {\n s.start(\"Cleaning orphaned files...\");\n cleanOrphanedFiles(outputPath, orphanedFolders);\n s.stop(`Removed: ${orphanedFolders.join(\", \")}`);\n } else {\n p.log.info(pc.dim(\"Keeping orphaned files. You can clean them manually or use --clean flag.\"));\n }\n }\n }\n\n if (isByFeature) {\n // Generate using by-feature structure (screaming architecture)\n s.start(\"Generating files (by-feature structure)...\");\n const files = await generateByFeature(schema, rawSchema.locales, {\n outputDir: outputPath,\n features: {\n types: config.features.types && (generateAll || Boolean(options.typesOnly)),\n services: config.features.services && (generateAll || Boolean(options.servicesOnly)),\n actions: config.features.actions && (generateAll || Boolean(options.actionsOnly)),\n },\n blocksRendererInstalled,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} files`);\n } else {\n // Generate using by-layer structure (default)\n\n // Generate types\n if (generateAll || options.typesOnly) {\n if (config.features.types) {\n s.start(\"Generating types...\");\n const typesPath = path.join(outputPath, config.output.types);\n const files = await generateTypes(schema, {\n outputDir: typesPath,\n blocksRendererInstalled,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} type files`);\n }\n }\n\n // Generate client (needed by services)\n if (generateAll || options.servicesOnly) {\n if (config.features.services) {\n s.start(\"Generating client...\");\n const clientFiles = await generateClient({ outputDir: outputPath, strapiVersion: config.strapiVersion });\n generatedFiles.push(...clientFiles);\n s.stop(\"Generated client\");\n\n // Generate locales (for i18n support)\n s.start(\"Generating locales...\");\n const localesFiles = await generateLocales(rawSchema.locales, { outputDir: outputPath });\n generatedFiles.push(...localesFiles);\n if (rawSchema.locales.length > 0) {\n s.stop(`Generated locales: ${rawSchema.locales.map(l => l.code).join(\", \")}`);\n } else {\n s.stop(\"Generated locales (i18n not enabled in Strapi)\");\n }\n }\n }\n\n // Generate services\n if (generateAll || options.servicesOnly) {\n if (config.features.services) {\n s.start(\"Generating services...\");\n const servicesPath = path.join(outputPath, config.output.services);\n const typesImportPath = path.relative(servicesPath, path.join(outputPath, config.output.types)).replace(/\\\\/g, \"/\") || \".\";\n const files = await generateServices(schema, {\n outputDir: servicesPath,\n typesImportPath: typesImportPath.startsWith(\".\") ? typesImportPath : \"./\" + typesImportPath,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} service files`);\n }\n }\n\n // Generate actions\n if (generateAll || options.actionsOnly) {\n if (config.features.actions) {\n s.start(\"Generating Astro actions...\");\n const actionsPath = path.join(outputPath, config.output.actions);\n const servicesPath = path.join(outputPath, config.output.services);\n\n const servicesImportPath = path.relative(actionsPath, servicesPath).replace(/\\\\/g, \"/\") || \".\";\n\n const files = await generateActions(schema, {\n outputDir: actionsPath,\n servicesImportPath: servicesImportPath.startsWith(\".\") ? servicesImportPath : \"./\" + servicesImportPath,\n strapiVersion: config.strapiVersion,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} action files`);\n }\n }\n }\n\n // Show summary\n p.note(\n [\n `Generated ${generatedFiles.length} files in ${pc.cyan(config.output.path)}`,\n \"\",\n \"Files generated:\",\n ...generatedFiles.slice(0, 10).map((f) => ` ${pc.dim(path.relative(cwd, f))}`),\n generatedFiles.length > 10 ? ` ${pc.dim(`... and ${generatedFiles.length - 10} more`)}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n \"Sync complete!\"\n );\n\n p.outro(pc.green(\"Types and services are ready to use!\"));\n } catch (error) {\n s.stop(\"Sync failed\");\n\n if (error instanceof Error) {\n logger.error(error.message);\n\n if (error.message.includes(\"Could not find strapi.config\")) {\n logger.info(\"Run \\\"npx strapi2front init\\\" first to set up your project.\");\n }\n } else {\n logger.error(\"An unknown error occurred\");\n }\n\n process.exit(1);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "strapi2front",
3
- "version": "0.1.2",
3
+ "version": "0.1.5",
4
4
  "description": "Generate TypeScript types, services, and framework actions from your Strapi schema",
5
5
  "type": "module",
6
6
  "bin": {
@@ -26,8 +26,8 @@
26
26
  "picocolors": "^1.0.0",
27
27
  "pkg-types": "^1.0.0",
28
28
  "@strapi2front/client": "0.1.0",
29
- "@strapi2front/core": "0.1.2",
30
- "@strapi2front/generators": "0.1.2"
29
+ "@strapi2front/core": "0.1.5",
30
+ "@strapi2front/generators": "0.1.5"
31
31
  },
32
32
  "devDependencies": {
33
33
  "tsup": "^8.0.0",