strapi2front 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/bin/strapi2front.js +4 -4
- package/dist/bin/strapi2front.js.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/package.json +13 -6
package/README.md
CHANGED
package/dist/bin/strapi2front.js
CHANGED
|
@@ -507,7 +507,7 @@ async function initCommand(_options) {
|
|
|
507
507
|
` 1. Run ${pc3.cyan("npx strapi2front sync")} to generate files`,
|
|
508
508
|
` 2. Import from ${pc3.cyan(answers.outputDir + "/collections/*" + fileExt)}`,
|
|
509
509
|
"",
|
|
510
|
-
`Docs: ${pc3.dim("https://strapi2front.
|
|
510
|
+
`Docs: ${pc3.dim("https://strapi2front.elevenestudio.com/docs")}`
|
|
511
511
|
].join("\n"),
|
|
512
512
|
"Setup complete!"
|
|
513
513
|
);
|
|
@@ -515,7 +515,7 @@ async function initCommand(_options) {
|
|
|
515
515
|
} catch (error) {
|
|
516
516
|
s.stop("Failed to create configuration files");
|
|
517
517
|
logger.error(error instanceof Error ? error.message : "Unknown error");
|
|
518
|
-
logger.info(`Docs: ${pc3.dim("https://strapi2front.
|
|
518
|
+
logger.info(`Docs: ${pc3.dim("https://strapi2front.elevenestudio.com/docs/installation")}`);
|
|
519
519
|
process.exit(1);
|
|
520
520
|
}
|
|
521
521
|
}
|
|
@@ -846,7 +846,7 @@ async function syncCommand(options) {
|
|
|
846
846
|
...generatedFiles.slice(0, 10).map((f) => ` ${pc3.dim(path6.relative(cwd, f))}`),
|
|
847
847
|
generatedFiles.length > 10 ? ` ${pc3.dim(`... and ${generatedFiles.length - 10} more`)}` : "",
|
|
848
848
|
"",
|
|
849
|
-
`Docs: ${pc3.dim("https://strapi2front.
|
|
849
|
+
`Docs: ${pc3.dim("https://strapi2front.elevenestudio.com/docs")}`
|
|
850
850
|
].filter(Boolean).join("\n"),
|
|
851
851
|
"Sync complete!"
|
|
852
852
|
);
|
|
@@ -867,7 +867,7 @@ async function syncCommand(options) {
|
|
|
867
867
|
} else {
|
|
868
868
|
logger.error("An unknown error occurred");
|
|
869
869
|
}
|
|
870
|
-
logger.info(`Docs: ${pc3.dim("https://strapi2front.
|
|
870
|
+
logger.info(`Docs: ${pc3.dim("https://strapi2front.elevenestudio.com/docs")}`);
|
|
871
871
|
process.exit(1);
|
|
872
872
|
}
|
|
873
873
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/detectors/framework.ts","../../src/lib/detectors/typescript.ts","../../src/lib/detectors/package-manager.ts","../../src/lib/detectors/module-type.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 fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type ModuleType = \"esm\" | \"commonjs\";\n\nexport interface ModuleTypeInfo {\n type: ModuleType;\n reason: string;\n}\n\n/**\n * Detect if the project uses ES Modules or CommonJS\n *\n * Detection order:\n * 1. Check package.json \"type\" field\n * 2. Check for .mjs config files (next.config.mjs, etc.)\n * 3. Default to CommonJS\n */\nexport async function detectModuleType(cwd: string = process.cwd()): Promise<ModuleTypeInfo> {\n // Check package.json \"type\" field\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n const content = await fs.readFile(packageJsonPath, \"utf-8\");\n const packageJson = JSON.parse(content);\n\n if (packageJson.type === \"module\") {\n return { type: \"esm\", reason: 'package.json has \"type\": \"module\"' };\n }\n\n if (packageJson.type === \"commonjs\") {\n return { type: \"commonjs\", reason: 'package.json has \"type\": \"commonjs\"' };\n }\n } catch {\n // package.json not found or invalid\n }\n\n // Check for .mjs config files (indicates ESM preference)\n const esmIndicators = [\n \"next.config.mjs\",\n \"nuxt.config.mjs\",\n \"vite.config.mjs\",\n \"astro.config.mjs\",\n ];\n\n for (const file of esmIndicators) {\n try {\n await fs.access(path.join(cwd, file));\n return { type: \"esm\", reason: `Found ${file} (ESM config file)` };\n } catch {\n // File doesn't exist\n }\n }\n\n // Default to CommonJS (Node.js default)\n return { type: \"commonjs\", reason: \"Default (no ESM indicators found)\" };\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 apiPrefix: string;\n outputFormat: \"typescript\" | \"jsdoc\";\n outputDir: string;\n generateTypes: boolean;\n generateServices: boolean;\n generateActions: boolean;\n generateSchemas: boolean;\n generateUpload: boolean;\n}\n\n/**\n * Parse version string to get major version number\n */\nfunction getMajorVersion(version: string | null): number | null {\n if (!version) return null;\n // Remove ^ or ~ prefix and get first number\n const match = version.replace(/^[\\^~]/, \"\").match(/^(\\d+)/);\n return match ? parseInt(match[1], 10) : null;\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 // Track feature availability\n let canGenerateActions = true;\n\n // Check framework support for additional features\n if (detection.framework.name === \"unknown\") {\n // Unknown framework - generate types and services only\n canGenerateActions = false;\n } else if (detection.framework.name !== \"astro\") {\n // Non-Astro framework - generate types and services only (for now)\n canGenerateActions = false;\n } else {\n // Astro - check version for Actions support (requires v4+)\n const majorVersion = getMajorVersion(detection.framework.version);\n if (majorVersion !== null && majorVersion < 4) {\n p.log.warn(pc.yellow(`Astro v${majorVersion} detected. Upgrade to v4+ to enable Actions.`));\n canGenerateActions = false;\n }\n }\n\n // Determine output format based on TypeScript support\n let outputFormat: \"typescript\" | \"jsdoc\" = \"typescript\";\n\n if (!detection.typescript.enabled) {\n p.log.info(pc.dim(\"TypeScript not detected. Files will be generated as JavaScript with JSDoc annotations.\"));\n outputFormat = \"jsdoc\";\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 // Show token permissions hint\n p.log.message(\n pc.dim(\n `\\n To generate a token: Strapi Admin > Settings > API Tokens > Create new API Token\\n` +\n ` Required permissions:\\n` +\n ` Content-type-builder:\\n` +\n ` - Components: getComponents, getComponent\\n` +\n ` - Content-types: getContentTypes, getContentType\\n` +\n ` I18n (if using localization):\\n` +\n ` - Locales: listLocales\\n`\n )\n );\n\n const strapiToken = await p.text({\n message: \"What is your Strapi sync token?\",\n placeholder: \"Press Enter to skip (you can add it later in .env as STRAPI_SYNC_TOKEN)\",\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_SYNC_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 // API Prefix\n const defaultPrefix = \"/api\";\n const apiPrefixInput = await p.text({\n message: \"What is your Strapi API prefix?\",\n placeholder: `${defaultPrefix} (press Enter for default)`,\n validate: (value): string | undefined => {\n const trimmed = (value || \"\").trim();\n if (trimmed === \"\") return undefined;\n if (!trimmed.startsWith(\"/\")) {\n return \"API prefix must start with /\";\n }\n return undefined;\n },\n });\n\n if (p.isCancel(apiPrefixInput)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n const apiPrefix = ((apiPrefixInput as string) || \"\").trim() || defaultPrefix;\n\n if (apiPrefix !== defaultPrefix) {\n p.log.info(pc.dim(`Using custom API prefix: ${apiPrefix}`));\n }\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 - labels depend on output format\n const isTypeScript = outputFormat === \"typescript\";\n const featureOptions = [\n {\n value: \"types\",\n label: isTypeScript ? \"Types\" : \"Type Definitions\",\n hint: isTypeScript\n ? \"TypeScript interfaces for your content types\"\n : \"JSDoc type definitions for your content types\"\n },\n {\n value: \"services\",\n label: \"Services\",\n hint: isTypeScript\n ? \"Typed service functions for data fetching\"\n : \"Service functions with JSDoc annotations\"\n },\n ];\n\n // Schemas require TypeScript (generated code uses `export type` and `z.infer<typeof>`)\n if (isTypeScript) {\n featureOptions.push({\n value: \"schemas\",\n label: \"Schemas\",\n hint: \"Zod validation schemas for forms (React Hook Form, TanStack Form, etc.)\"\n });\n }\n\n featureOptions.push({\n value: \"upload\",\n label: \"Upload\",\n hint: \"File upload helpers (action + public client for browser uploads)\"\n });\n\n // Only show Astro Actions if available (requires TypeScript)\n if (canGenerateActions && isTypeScript) {\n featureOptions.push({ value: \"actions\", label: \"Astro Actions\", hint: \"Type-safe actions for client/server\" });\n }\n\n const initialFeatures: string[] = [\"types\", \"services\"];\n if (isTypeScript) initialFeatures.push(\"schemas\");\n if (canGenerateActions && isTypeScript) initialFeatures.push(\"actions\");\n\n const features = await p.multiselect({\n message: \"What would you like to generate?\",\n options: featureOptions,\n initialValues: initialFeatures,\n required: true,\n });\n\n if (p.isCancel(features)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Validate feature dependencies and auto-enable required features\n const selectedFeatures = new Set(features as string[]);\n\n // Dependency chain: types ← services ← actions\n if (selectedFeatures.has(\"services\") && !selectedFeatures.has(\"types\")) {\n selectedFeatures.add(\"types\");\n p.log.info(pc.dim(\"Auto-enabled Types (required by Services)\"));\n }\n if (selectedFeatures.has(\"actions\") && !selectedFeatures.has(\"services\")) {\n selectedFeatures.add(\"services\");\n p.log.info(pc.dim(\"Auto-enabled Services (required by Actions)\"));\n if (!selectedFeatures.has(\"types\")) {\n selectedFeatures.add(\"types\");\n p.log.info(pc.dim(\"Auto-enabled Types (required by Services)\"));\n }\n }\n\n return {\n strapiUrl: strapiUrl,\n strapiToken: trimmedToken,\n strapiVersion: strapiVersion as \"v4\" | \"v5\",\n apiPrefix: apiPrefix,\n outputFormat: outputFormat,\n outputDir: ((outputDir as string) || \"\").trim() || \"src/strapi\",\n generateTypes: selectedFeatures.has(\"types\"),\n generateServices: selectedFeatures.has(\"services\"),\n generateActions: canGenerateActions && isTypeScript && selectedFeatures.has(\"actions\"),\n generateSchemas: selectedFeatures.has(\"schemas\"),\n generateUpload: selectedFeatures.has(\"upload\"),\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 { detectModuleType } from \"../lib/detectors/module-type.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 // Detect module type for JSDoc projects\n let moduleType: \"esm\" | \"commonjs\" = \"commonjs\";\n if (answers.outputFormat === \"jsdoc\") {\n const detected = await detectModuleType(cwd);\n moduleType = detected.type;\n }\n\n // Create config file (use .js extension for JSDoc projects)\n const configExtension = answers.outputFormat === \"jsdoc\" ? \"js\" : \"ts\";\n const configContent = generateConfigFile({\n strapiUrl: answers.strapiUrl,\n strapiVersion: answers.strapiVersion,\n apiPrefix: answers.apiPrefix,\n outputFormat: answers.outputFormat,\n outputDir: answers.outputDir,\n generateTypes: answers.generateTypes,\n generateServices: answers.generateServices,\n generateActions: answers.generateActions,\n generateSchemas: answers.generateSchemas,\n generateUpload: answers.generateUpload,\n moduleType,\n });\n const configPath = path.join(cwd, `strapi.config.${configExtension}`);\n await fs.writeFile(configPath, configContent, \"utf-8\");\n\n // Update .env file\n const envPath = path.join(cwd, \".env\");\n const envVars: Record<string, string> = {\n STRAPI_URL: answers.strapiUrl,\n STRAPI_SYNC_TOKEN: answers.strapiToken, // Token for syncing schema (dev only)\n STRAPI_TOKEN: \"\", // Token for frontend API calls (production)\n };\n\n // Add upload-specific env vars\n if (answers.generateUpload) {\n envVars.PUBLIC_STRAPI_URL = answers.strapiUrl;\n envVars.PUBLIC_STRAPI_UPLOAD_TOKEN = \"\";\n }\n\n await appendToEnvFile(envPath, envVars, answers.generateUpload);\n\n // Create/update .env.example file\n const envExamplePath = path.join(cwd, \".env.example\");\n await createEnvExampleFile(envExamplePath, answers.generateUpload);\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/client)?\",\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/client as regular dependency\n const installSdkCmd = getInstallCommand(packageManager.name, \"@strapi/client\");\n s.start(`Installing @strapi/client... (${pc.dim(installSdkCmd)})`);\n try {\n await execAsync(installSdkCmd, cwd);\n s.stop(`${pc.green(\"✓\")} @strapi/client installed`);\n } catch {\n s.stop(`${pc.red(\"✗\")} Failed to install @strapi/client`);\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/client\")}`));\n }\n\n // Show success message\n const configFileName = `strapi.config.${configExtension}`;\n const fileExt = answers.outputFormat === \"jsdoc\" ? \".js\" : \".ts\";\n p.note(\n [\n `${pc.green(\"✓\")} Created ${pc.cyan(configFileName)}`,\n `${pc.green(\"✓\")} Updated ${pc.cyan(\".env\")} with Strapi tokens`,\n `${pc.green(\"✓\")} Created ${pc.cyan(\".env.example\")} for reference`,\n `${pc.green(\"✓\")} Created output directory ${pc.cyan(answers.outputDir)}`,\n \"\",\n `Output format: ${pc.cyan(answers.outputFormat === \"jsdoc\" ? \"JavaScript (JSDoc)\" : \"TypeScript\")}`,\n \"\",\n `Next steps:`,\n ` 1. Run ${pc.cyan(\"npx strapi2front sync\")} to generate files`,\n ` 2. Import from ${pc.cyan(answers.outputDir + \"/collections/*\" + fileExt)}`,\n \"\",\n `Docs: ${pc.dim(\"https://strapi2front.dev/docs\")}`,\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 logger.info(`Docs: ${pc.dim(\"https://strapi2front.dev/docs/installation\")}`);\n process.exit(1);\n }\n}\n\nfunction generateConfigFile(answers: {\n strapiUrl: string;\n strapiVersion: \"v4\" | \"v5\";\n apiPrefix: string;\n outputFormat: \"typescript\" | \"jsdoc\";\n outputDir: string;\n generateTypes: boolean;\n generateServices: boolean;\n generateActions: boolean;\n generateSchemas: boolean;\n generateUpload: boolean;\n moduleType: \"esm\" | \"commonjs\";\n}): string {\n const isTypeScript = answers.outputFormat === \"typescript\";\n const useESM = answers.moduleType === \"esm\";\n\n if (isTypeScript) {\n return `import { defineConfig } from \"strapi2front\";\n\nexport default defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n // Token for syncing schema (uses STRAPI_SYNC_TOKEN with fallback to STRAPI_TOKEN)\n token: process.env.STRAPI_SYNC_TOKEN || process.env.STRAPI_TOKEN,\n\n // API prefix (default: \"/api\")\n apiPrefix: \"${answers.apiPrefix}\",\n\n // Output format: \"typescript\" (.ts) or \"jsdoc\" (.js with JSDoc)\n outputFormat: \"typescript\",\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n },\n\n // Features to generate\n features: {\n types: ${answers.generateTypes},\n services: ${answers.generateServices},\n actions: ${answers.generateActions},\n schemas: ${answers.generateSchemas}, // Zod schemas for form validation (React Hook Form, TanStack Form, etc.)\n upload: ${answers.generateUpload}, // File upload helpers (action + public client)\n },\n\n // Strapi version\n strapiVersion: \"${answers.strapiVersion}\",\n});\n`;\n }\n\n // JSDoc config (JavaScript) - ESM or CommonJS based on project type\n if (useESM) {\n return `// @ts-check\nimport { defineConfig } from \"strapi2front\";\n\nexport default defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n // Token for syncing schema (uses STRAPI_SYNC_TOKEN with fallback to STRAPI_TOKEN)\n token: process.env.STRAPI_SYNC_TOKEN || process.env.STRAPI_TOKEN,\n\n // API prefix (default: \"/api\")\n apiPrefix: \"${answers.apiPrefix}\",\n\n // Output format: \"typescript\" (.ts) or \"jsdoc\" (.js with JSDoc)\n outputFormat: \"jsdoc\",\n\n // Module type: auto-detected as ESM\n moduleType: \"esm\",\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n },\n\n // Features to generate\n features: {\n types: ${answers.generateTypes},\n services: ${answers.generateServices},\n actions: false, // Actions require TypeScript\n schemas: ${answers.generateSchemas},\n upload: ${answers.generateUpload},\n },\n\n // Strapi version\n strapiVersion: \"${answers.strapiVersion}\",\n});\n`;\n }\n\n // CommonJS config\n return `// @ts-check\nconst { defineConfig } = require(\"strapi2front\");\n\nmodule.exports = defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n // Token for syncing schema (uses STRAPI_SYNC_TOKEN with fallback to STRAPI_TOKEN)\n token: process.env.STRAPI_SYNC_TOKEN || process.env.STRAPI_TOKEN,\n\n // API prefix (default: \"/api\")\n apiPrefix: \"${answers.apiPrefix}\",\n\n // Output format: \"typescript\" (.ts) or \"jsdoc\" (.js with JSDoc)\n outputFormat: \"jsdoc\",\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n },\n\n // Features to generate\n features: {\n types: ${answers.generateTypes},\n services: ${answers.generateServices},\n actions: false, // Actions require TypeScript\n schemas: ${answers.generateSchemas},\n upload: ${answers.generateUpload},\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 includeUploadComment = false\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 // Add comments for each token type\n if (key === \"STRAPI_SYNC_TOKEN\") {\n newLines.push(\"\");\n newLines.push(\"# Sync token: Used by strapi2front to sync schema (development only)\");\n newLines.push(\"# Permissions: content-type-builder (getContentTypes, getComponents), i18n (listLocales)\");\n newLines.push(\"# IMPORTANT: Do NOT deploy this token to production\");\n } else if (key === \"STRAPI_TOKEN\") {\n newLines.push(\"\");\n newLines.push(\"# Frontend token: Used by your app to fetch content (production)\");\n newLines.push(\"# Configure with only the permissions your app needs\");\n } else if (key === \"PUBLIC_STRAPI_UPLOAD_TOKEN\" && includeUploadComment) {\n newLines.push(\"\");\n newLines.push(\"# Upload token: Create in Strapi Admin > Settings > API Tokens\");\n newLines.push(\"# Set permissions: Upload > upload (only, no delete/update)\");\n }\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\nasync function createEnvExampleFile(\n envExamplePath: string,\n includeUpload = false\n): Promise<void> {\n const lines = [\n \"# Strapi URL\",\n \"STRAPI_URL=http://localhost:1337\",\n \"\",\n \"# Sync token: Used by strapi2front to sync schema (development only)\",\n \"# Permissions: content-type-builder (getContentTypes, getComponents), i18n (listLocales)\",\n \"# IMPORTANT: Do NOT deploy this token to production\",\n \"STRAPI_SYNC_TOKEN=\",\n \"\",\n \"# Frontend token: Used by your app to fetch content (production)\",\n \"# Configure with only the permissions your app needs\",\n \"STRAPI_TOKEN=\",\n ];\n\n if (includeUpload) {\n lines.push(\n \"\",\n \"# Public URL for browser-side uploads\",\n \"PUBLIC_STRAPI_URL=http://localhost:1337\",\n \"\",\n \"# Upload token: Create in Strapi Admin > Settings > API Tokens\",\n \"# Set permissions: Upload > upload (only, no delete/update)\",\n \"PUBLIC_STRAPI_UPLOAD_TOKEN=\"\n );\n }\n\n await fs.writeFile(envExamplePath, lines.join(\"\\n\") + \"\\n\", \"utf-8\");\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 { generateByFeature } from \"@strapi2front/generators\";\nimport { logger } from \"../lib/utils/logger.js\";\nimport { detectModuleType } from \"../lib/detectors/module-type.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\nexport interface SyncCommandOptions {\n force?: boolean;\n typesOnly?: boolean;\n servicesOnly?: boolean;\n actionsOnly?: boolean;\n schemasOnly?: boolean;\n uploadOnly?: 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, config.apiPrefix);\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, config.apiPrefix);\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 && !options.schemasOnly && !options.uploadOnly;\n\n // Get output format from config (default to typescript)\n const outputFormat = config.outputFormat || \"typescript\";\n\n // Detect module type for JSDoc output (ESM vs CommonJS)\n let moduleType: \"esm\" | \"commonjs\" = \"commonjs\";\n if (outputFormat === \"jsdoc\") {\n if (config.moduleType) {\n moduleType = config.moduleType;\n p.log.info(`Module type: ${pc.cyan(moduleType)} (from config)`);\n } else {\n const detected = await detectModuleType(cwd);\n moduleType = detected.type;\n p.log.info(`Module type: ${pc.cyan(moduleType)} (${detected.reason})`);\n }\n }\n\n // Generate using by-feature structure (screaming architecture)\n s.start(`Generating files (${outputFormat})...`);\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 && outputFormat === \"typescript\" && (generateAll || Boolean(options.actionsOnly)),\n schemas: config.features.schemas && (generateAll || Boolean(options.schemasOnly)),\n upload: config.features.upload && (generateAll || Boolean(options.uploadOnly)),\n },\n schemaOptions: config.schemaOptions,\n blocksRendererInstalled,\n strapiVersion: config.strapiVersion,\n apiPrefix: config.apiPrefix,\n outputFormat,\n moduleType,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} files`);\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 `Docs: ${pc.dim(\"https://strapi2front.dev/docs\")}`,\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n \"Sync complete!\"\n );\n\n const generatedFeatures: string[] = [];\n if (config.features.types) generatedFeatures.push(\"Types\");\n if (config.features.services) generatedFeatures.push(\"Services\");\n if (config.features.schemas) generatedFeatures.push(\"Schemas\");\n if (config.features.actions) generatedFeatures.push(\"Actions\");\n if (config.features.upload) generatedFeatures.push(\"Upload\");\n p.outro(pc.green(`${generatedFeatures.join(\", \")} 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 logger.info(`Docs: ${pc.dim(\"https://strapi2front.dev/docs\")}`);\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 sync token (STRAPI_SYNC_TOKEN)')\n .option('--framework <framework>', 'Framework to use (astro)')\n .action(initCommand);\n\n// Sync command\nprogram\n .command('sync')\n .description('Sync types, schemas, services, actions, and upload helpers 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('--schemas-only', 'Only generate Zod validation schemas')\n .option('--upload-only', 'Only generate upload helpers')\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/detectors/module-type.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 fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type ModuleType = \"esm\" | \"commonjs\";\n\nexport interface ModuleTypeInfo {\n type: ModuleType;\n reason: string;\n}\n\n/**\n * Detect if the project uses ES Modules or CommonJS\n *\n * Detection order:\n * 1. Check package.json \"type\" field\n * 2. Check for .mjs config files (next.config.mjs, etc.)\n * 3. Default to CommonJS\n */\nexport async function detectModuleType(cwd: string = process.cwd()): Promise<ModuleTypeInfo> {\n // Check package.json \"type\" field\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n const content = await fs.readFile(packageJsonPath, \"utf-8\");\n const packageJson = JSON.parse(content);\n\n if (packageJson.type === \"module\") {\n return { type: \"esm\", reason: 'package.json has \"type\": \"module\"' };\n }\n\n if (packageJson.type === \"commonjs\") {\n return { type: \"commonjs\", reason: 'package.json has \"type\": \"commonjs\"' };\n }\n } catch {\n // package.json not found or invalid\n }\n\n // Check for .mjs config files (indicates ESM preference)\n const esmIndicators = [\n \"next.config.mjs\",\n \"nuxt.config.mjs\",\n \"vite.config.mjs\",\n \"astro.config.mjs\",\n ];\n\n for (const file of esmIndicators) {\n try {\n await fs.access(path.join(cwd, file));\n return { type: \"esm\", reason: `Found ${file} (ESM config file)` };\n } catch {\n // File doesn't exist\n }\n }\n\n // Default to CommonJS (Node.js default)\n return { type: \"commonjs\", reason: \"Default (no ESM indicators found)\" };\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 apiPrefix: string;\n outputFormat: \"typescript\" | \"jsdoc\";\n outputDir: string;\n generateTypes: boolean;\n generateServices: boolean;\n generateActions: boolean;\n generateSchemas: boolean;\n generateUpload: boolean;\n}\n\n/**\n * Parse version string to get major version number\n */\nfunction getMajorVersion(version: string | null): number | null {\n if (!version) return null;\n // Remove ^ or ~ prefix and get first number\n const match = version.replace(/^[\\^~]/, \"\").match(/^(\\d+)/);\n return match ? parseInt(match[1], 10) : null;\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 // Track feature availability\n let canGenerateActions = true;\n\n // Check framework support for additional features\n if (detection.framework.name === \"unknown\") {\n // Unknown framework - generate types and services only\n canGenerateActions = false;\n } else if (detection.framework.name !== \"astro\") {\n // Non-Astro framework - generate types and services only (for now)\n canGenerateActions = false;\n } else {\n // Astro - check version for Actions support (requires v4+)\n const majorVersion = getMajorVersion(detection.framework.version);\n if (majorVersion !== null && majorVersion < 4) {\n p.log.warn(pc.yellow(`Astro v${majorVersion} detected. Upgrade to v4+ to enable Actions.`));\n canGenerateActions = false;\n }\n }\n\n // Determine output format based on TypeScript support\n let outputFormat: \"typescript\" | \"jsdoc\" = \"typescript\";\n\n if (!detection.typescript.enabled) {\n p.log.info(pc.dim(\"TypeScript not detected. Files will be generated as JavaScript with JSDoc annotations.\"));\n outputFormat = \"jsdoc\";\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 // Show token permissions hint\n p.log.message(\n pc.dim(\n `\\n To generate a token: Strapi Admin > Settings > API Tokens > Create new API Token\\n` +\n ` Required permissions:\\n` +\n ` Content-type-builder:\\n` +\n ` - Components: getComponents, getComponent\\n` +\n ` - Content-types: getContentTypes, getContentType\\n` +\n ` I18n (if using localization):\\n` +\n ` - Locales: listLocales\\n`\n )\n );\n\n const strapiToken = await p.text({\n message: \"What is your Strapi sync token?\",\n placeholder: \"Press Enter to skip (you can add it later in .env as STRAPI_SYNC_TOKEN)\",\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_SYNC_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 // API Prefix\n const defaultPrefix = \"/api\";\n const apiPrefixInput = await p.text({\n message: \"What is your Strapi API prefix?\",\n placeholder: `${defaultPrefix} (press Enter for default)`,\n validate: (value): string | undefined => {\n const trimmed = (value || \"\").trim();\n if (trimmed === \"\") return undefined;\n if (!trimmed.startsWith(\"/\")) {\n return \"API prefix must start with /\";\n }\n return undefined;\n },\n });\n\n if (p.isCancel(apiPrefixInput)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n const apiPrefix = ((apiPrefixInput as string) || \"\").trim() || defaultPrefix;\n\n if (apiPrefix !== defaultPrefix) {\n p.log.info(pc.dim(`Using custom API prefix: ${apiPrefix}`));\n }\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 - labels depend on output format\n const isTypeScript = outputFormat === \"typescript\";\n const featureOptions = [\n {\n value: \"types\",\n label: isTypeScript ? \"Types\" : \"Type Definitions\",\n hint: isTypeScript\n ? \"TypeScript interfaces for your content types\"\n : \"JSDoc type definitions for your content types\"\n },\n {\n value: \"services\",\n label: \"Services\",\n hint: isTypeScript\n ? \"Typed service functions for data fetching\"\n : \"Service functions with JSDoc annotations\"\n },\n ];\n\n // Schemas require TypeScript (generated code uses `export type` and `z.infer<typeof>`)\n if (isTypeScript) {\n featureOptions.push({\n value: \"schemas\",\n label: \"Schemas\",\n hint: \"Zod validation schemas for forms (React Hook Form, TanStack Form, etc.)\"\n });\n }\n\n featureOptions.push({\n value: \"upload\",\n label: \"Upload\",\n hint: \"File upload helpers (action + public client for browser uploads)\"\n });\n\n // Only show Astro Actions if available (requires TypeScript)\n if (canGenerateActions && isTypeScript) {\n featureOptions.push({ value: \"actions\", label: \"Astro Actions\", hint: \"Type-safe actions for client/server\" });\n }\n\n const initialFeatures: string[] = [\"types\", \"services\"];\n if (isTypeScript) initialFeatures.push(\"schemas\");\n if (canGenerateActions && isTypeScript) initialFeatures.push(\"actions\");\n\n const features = await p.multiselect({\n message: \"What would you like to generate?\",\n options: featureOptions,\n initialValues: initialFeatures,\n required: true,\n });\n\n if (p.isCancel(features)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Validate feature dependencies and auto-enable required features\n const selectedFeatures = new Set(features as string[]);\n\n // Dependency chain: types ← services ← actions\n if (selectedFeatures.has(\"services\") && !selectedFeatures.has(\"types\")) {\n selectedFeatures.add(\"types\");\n p.log.info(pc.dim(\"Auto-enabled Types (required by Services)\"));\n }\n if (selectedFeatures.has(\"actions\") && !selectedFeatures.has(\"services\")) {\n selectedFeatures.add(\"services\");\n p.log.info(pc.dim(\"Auto-enabled Services (required by Actions)\"));\n if (!selectedFeatures.has(\"types\")) {\n selectedFeatures.add(\"types\");\n p.log.info(pc.dim(\"Auto-enabled Types (required by Services)\"));\n }\n }\n\n return {\n strapiUrl: strapiUrl,\n strapiToken: trimmedToken,\n strapiVersion: strapiVersion as \"v4\" | \"v5\",\n apiPrefix: apiPrefix,\n outputFormat: outputFormat,\n outputDir: ((outputDir as string) || \"\").trim() || \"src/strapi\",\n generateTypes: selectedFeatures.has(\"types\"),\n generateServices: selectedFeatures.has(\"services\"),\n generateActions: canGenerateActions && isTypeScript && selectedFeatures.has(\"actions\"),\n generateSchemas: selectedFeatures.has(\"schemas\"),\n generateUpload: selectedFeatures.has(\"upload\"),\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 { detectModuleType } from \"../lib/detectors/module-type.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 // Detect module type for JSDoc projects\n let moduleType: \"esm\" | \"commonjs\" = \"commonjs\";\n if (answers.outputFormat === \"jsdoc\") {\n const detected = await detectModuleType(cwd);\n moduleType = detected.type;\n }\n\n // Create config file (use .js extension for JSDoc projects)\n const configExtension = answers.outputFormat === \"jsdoc\" ? \"js\" : \"ts\";\n const configContent = generateConfigFile({\n strapiUrl: answers.strapiUrl,\n strapiVersion: answers.strapiVersion,\n apiPrefix: answers.apiPrefix,\n outputFormat: answers.outputFormat,\n outputDir: answers.outputDir,\n generateTypes: answers.generateTypes,\n generateServices: answers.generateServices,\n generateActions: answers.generateActions,\n generateSchemas: answers.generateSchemas,\n generateUpload: answers.generateUpload,\n moduleType,\n });\n const configPath = path.join(cwd, `strapi.config.${configExtension}`);\n await fs.writeFile(configPath, configContent, \"utf-8\");\n\n // Update .env file\n const envPath = path.join(cwd, \".env\");\n const envVars: Record<string, string> = {\n STRAPI_URL: answers.strapiUrl,\n STRAPI_SYNC_TOKEN: answers.strapiToken, // Token for syncing schema (dev only)\n STRAPI_TOKEN: \"\", // Token for frontend API calls (production)\n };\n\n // Add upload-specific env vars\n if (answers.generateUpload) {\n envVars.PUBLIC_STRAPI_URL = answers.strapiUrl;\n envVars.PUBLIC_STRAPI_UPLOAD_TOKEN = \"\";\n }\n\n await appendToEnvFile(envPath, envVars, answers.generateUpload);\n\n // Create/update .env.example file\n const envExamplePath = path.join(cwd, \".env.example\");\n await createEnvExampleFile(envExamplePath, answers.generateUpload);\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/client)?\",\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/client as regular dependency\n const installSdkCmd = getInstallCommand(packageManager.name, \"@strapi/client\");\n s.start(`Installing @strapi/client... (${pc.dim(installSdkCmd)})`);\n try {\n await execAsync(installSdkCmd, cwd);\n s.stop(`${pc.green(\"✓\")} @strapi/client installed`);\n } catch {\n s.stop(`${pc.red(\"✗\")} Failed to install @strapi/client`);\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/client\")}`));\n }\n\n // Show success message\n const configFileName = `strapi.config.${configExtension}`;\n const fileExt = answers.outputFormat === \"jsdoc\" ? \".js\" : \".ts\";\n p.note(\n [\n `${pc.green(\"✓\")} Created ${pc.cyan(configFileName)}`,\n `${pc.green(\"✓\")} Updated ${pc.cyan(\".env\")} with Strapi tokens`,\n `${pc.green(\"✓\")} Created ${pc.cyan(\".env.example\")} for reference`,\n `${pc.green(\"✓\")} Created output directory ${pc.cyan(answers.outputDir)}`,\n \"\",\n `Output format: ${pc.cyan(answers.outputFormat === \"jsdoc\" ? \"JavaScript (JSDoc)\" : \"TypeScript\")}`,\n \"\",\n `Next steps:`,\n ` 1. Run ${pc.cyan(\"npx strapi2front sync\")} to generate files`,\n ` 2. Import from ${pc.cyan(answers.outputDir + \"/collections/*\" + fileExt)}`,\n \"\",\n `Docs: ${pc.dim(\"https://strapi2front.elevenestudio.com/docs\")}`,\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 logger.info(`Docs: ${pc.dim(\"https://strapi2front.elevenestudio.com/docs/installation\")}`);\n process.exit(1);\n }\n}\n\nfunction generateConfigFile(answers: {\n strapiUrl: string;\n strapiVersion: \"v4\" | \"v5\";\n apiPrefix: string;\n outputFormat: \"typescript\" | \"jsdoc\";\n outputDir: string;\n generateTypes: boolean;\n generateServices: boolean;\n generateActions: boolean;\n generateSchemas: boolean;\n generateUpload: boolean;\n moduleType: \"esm\" | \"commonjs\";\n}): string {\n const isTypeScript = answers.outputFormat === \"typescript\";\n const useESM = answers.moduleType === \"esm\";\n\n if (isTypeScript) {\n return `import { defineConfig } from \"strapi2front\";\n\nexport default defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n // Token for syncing schema (uses STRAPI_SYNC_TOKEN with fallback to STRAPI_TOKEN)\n token: process.env.STRAPI_SYNC_TOKEN || process.env.STRAPI_TOKEN,\n\n // API prefix (default: \"/api\")\n apiPrefix: \"${answers.apiPrefix}\",\n\n // Output format: \"typescript\" (.ts) or \"jsdoc\" (.js with JSDoc)\n outputFormat: \"typescript\",\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n },\n\n // Features to generate\n features: {\n types: ${answers.generateTypes},\n services: ${answers.generateServices},\n actions: ${answers.generateActions},\n schemas: ${answers.generateSchemas}, // Zod schemas for form validation (React Hook Form, TanStack Form, etc.)\n upload: ${answers.generateUpload}, // File upload helpers (action + public client)\n },\n\n // Strapi version\n strapiVersion: \"${answers.strapiVersion}\",\n});\n`;\n }\n\n // JSDoc config (JavaScript) - ESM or CommonJS based on project type\n if (useESM) {\n return `// @ts-check\nimport { defineConfig } from \"strapi2front\";\n\nexport default defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n // Token for syncing schema (uses STRAPI_SYNC_TOKEN with fallback to STRAPI_TOKEN)\n token: process.env.STRAPI_SYNC_TOKEN || process.env.STRAPI_TOKEN,\n\n // API prefix (default: \"/api\")\n apiPrefix: \"${answers.apiPrefix}\",\n\n // Output format: \"typescript\" (.ts) or \"jsdoc\" (.js with JSDoc)\n outputFormat: \"jsdoc\",\n\n // Module type: auto-detected as ESM\n moduleType: \"esm\",\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n },\n\n // Features to generate\n features: {\n types: ${answers.generateTypes},\n services: ${answers.generateServices},\n actions: false, // Actions require TypeScript\n schemas: ${answers.generateSchemas},\n upload: ${answers.generateUpload},\n },\n\n // Strapi version\n strapiVersion: \"${answers.strapiVersion}\",\n});\n`;\n }\n\n // CommonJS config\n return `// @ts-check\nconst { defineConfig } = require(\"strapi2front\");\n\nmodule.exports = defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n // Token for syncing schema (uses STRAPI_SYNC_TOKEN with fallback to STRAPI_TOKEN)\n token: process.env.STRAPI_SYNC_TOKEN || process.env.STRAPI_TOKEN,\n\n // API prefix (default: \"/api\")\n apiPrefix: \"${answers.apiPrefix}\",\n\n // Output format: \"typescript\" (.ts) or \"jsdoc\" (.js with JSDoc)\n outputFormat: \"jsdoc\",\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n },\n\n // Features to generate\n features: {\n types: ${answers.generateTypes},\n services: ${answers.generateServices},\n actions: false, // Actions require TypeScript\n schemas: ${answers.generateSchemas},\n upload: ${answers.generateUpload},\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 includeUploadComment = false\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 // Add comments for each token type\n if (key === \"STRAPI_SYNC_TOKEN\") {\n newLines.push(\"\");\n newLines.push(\"# Sync token: Used by strapi2front to sync schema (development only)\");\n newLines.push(\"# Permissions: content-type-builder (getContentTypes, getComponents), i18n (listLocales)\");\n newLines.push(\"# IMPORTANT: Do NOT deploy this token to production\");\n } else if (key === \"STRAPI_TOKEN\") {\n newLines.push(\"\");\n newLines.push(\"# Frontend token: Used by your app to fetch content (production)\");\n newLines.push(\"# Configure with only the permissions your app needs\");\n } else if (key === \"PUBLIC_STRAPI_UPLOAD_TOKEN\" && includeUploadComment) {\n newLines.push(\"\");\n newLines.push(\"# Upload token: Create in Strapi Admin > Settings > API Tokens\");\n newLines.push(\"# Set permissions: Upload > upload (only, no delete/update)\");\n }\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\nasync function createEnvExampleFile(\n envExamplePath: string,\n includeUpload = false\n): Promise<void> {\n const lines = [\n \"# Strapi URL\",\n \"STRAPI_URL=http://localhost:1337\",\n \"\",\n \"# Sync token: Used by strapi2front to sync schema (development only)\",\n \"# Permissions: content-type-builder (getContentTypes, getComponents), i18n (listLocales)\",\n \"# IMPORTANT: Do NOT deploy this token to production\",\n \"STRAPI_SYNC_TOKEN=\",\n \"\",\n \"# Frontend token: Used by your app to fetch content (production)\",\n \"# Configure with only the permissions your app needs\",\n \"STRAPI_TOKEN=\",\n ];\n\n if (includeUpload) {\n lines.push(\n \"\",\n \"# Public URL for browser-side uploads\",\n \"PUBLIC_STRAPI_URL=http://localhost:1337\",\n \"\",\n \"# Upload token: Create in Strapi Admin > Settings > API Tokens\",\n \"# Set permissions: Upload > upload (only, no delete/update)\",\n \"PUBLIC_STRAPI_UPLOAD_TOKEN=\"\n );\n }\n\n await fs.writeFile(envExamplePath, lines.join(\"\\n\") + \"\\n\", \"utf-8\");\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 { generateByFeature } from \"@strapi2front/generators\";\nimport { logger } from \"../lib/utils/logger.js\";\nimport { detectModuleType } from \"../lib/detectors/module-type.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\nexport interface SyncCommandOptions {\n force?: boolean;\n typesOnly?: boolean;\n servicesOnly?: boolean;\n actionsOnly?: boolean;\n schemasOnly?: boolean;\n uploadOnly?: 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, config.apiPrefix);\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, config.apiPrefix);\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 && !options.schemasOnly && !options.uploadOnly;\n\n // Get output format from config (default to typescript)\n const outputFormat = config.outputFormat || \"typescript\";\n\n // Detect module type for JSDoc output (ESM vs CommonJS)\n let moduleType: \"esm\" | \"commonjs\" = \"commonjs\";\n if (outputFormat === \"jsdoc\") {\n if (config.moduleType) {\n moduleType = config.moduleType;\n p.log.info(`Module type: ${pc.cyan(moduleType)} (from config)`);\n } else {\n const detected = await detectModuleType(cwd);\n moduleType = detected.type;\n p.log.info(`Module type: ${pc.cyan(moduleType)} (${detected.reason})`);\n }\n }\n\n // Generate using by-feature structure (screaming architecture)\n s.start(`Generating files (${outputFormat})...`);\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 && outputFormat === \"typescript\" && (generateAll || Boolean(options.actionsOnly)),\n schemas: config.features.schemas && (generateAll || Boolean(options.schemasOnly)),\n upload: config.features.upload && (generateAll || Boolean(options.uploadOnly)),\n },\n schemaOptions: config.schemaOptions,\n blocksRendererInstalled,\n strapiVersion: config.strapiVersion,\n apiPrefix: config.apiPrefix,\n outputFormat,\n moduleType,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} files`);\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 `Docs: ${pc.dim(\"https://strapi2front.elevenestudio.com/docs\")}`,\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n \"Sync complete!\"\n );\n\n const generatedFeatures: string[] = [];\n if (config.features.types) generatedFeatures.push(\"Types\");\n if (config.features.services) generatedFeatures.push(\"Services\");\n if (config.features.schemas) generatedFeatures.push(\"Schemas\");\n if (config.features.actions) generatedFeatures.push(\"Actions\");\n if (config.features.upload) generatedFeatures.push(\"Upload\");\n p.outro(pc.green(`${generatedFeatures.join(\", \")} 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 logger.info(`Docs: ${pc.dim(\"https://strapi2front.elevenestudio.com/docs\")}`);\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 sync token (STRAPI_SYNC_TOKEN)')\n .option('--framework <framework>', 'Framework to use (astro)')\n .action(initCommand);\n\n// Sync command\nprogram\n .command('sync')\n .description('Sync types, schemas, services, actions, and upload helpers 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('--schemas-only', 'Only generate Zod validation schemas')\n .option('--upload-only', 'Only generate upload helpers')\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
|
@@ -507,7 +507,7 @@ async function initCommand(_options) {
|
|
|
507
507
|
` 1. Run ${pc3.cyan("npx strapi2front sync")} to generate files`,
|
|
508
508
|
` 2. Import from ${pc3.cyan(answers.outputDir + "/collections/*" + fileExt)}`,
|
|
509
509
|
"",
|
|
510
|
-
`Docs: ${pc3.dim("https://strapi2front.
|
|
510
|
+
`Docs: ${pc3.dim("https://strapi2front.elevenestudio.com/docs")}`
|
|
511
511
|
].join("\n"),
|
|
512
512
|
"Setup complete!"
|
|
513
513
|
);
|
|
@@ -515,7 +515,7 @@ async function initCommand(_options) {
|
|
|
515
515
|
} catch (error) {
|
|
516
516
|
s.stop("Failed to create configuration files");
|
|
517
517
|
logger.error(error instanceof Error ? error.message : "Unknown error");
|
|
518
|
-
logger.info(`Docs: ${pc3.dim("https://strapi2front.
|
|
518
|
+
logger.info(`Docs: ${pc3.dim("https://strapi2front.elevenestudio.com/docs/installation")}`);
|
|
519
519
|
process.exit(1);
|
|
520
520
|
}
|
|
521
521
|
}
|
|
@@ -846,7 +846,7 @@ async function syncCommand(options) {
|
|
|
846
846
|
...generatedFiles.slice(0, 10).map((f) => ` ${pc3.dim(path6.relative(cwd, f))}`),
|
|
847
847
|
generatedFiles.length > 10 ? ` ${pc3.dim(`... and ${generatedFiles.length - 10} more`)}` : "",
|
|
848
848
|
"",
|
|
849
|
-
`Docs: ${pc3.dim("https://strapi2front.
|
|
849
|
+
`Docs: ${pc3.dim("https://strapi2front.elevenestudio.com/docs")}`
|
|
850
850
|
].filter(Boolean).join("\n"),
|
|
851
851
|
"Sync complete!"
|
|
852
852
|
);
|
|
@@ -867,7 +867,7 @@ async function syncCommand(options) {
|
|
|
867
867
|
} else {
|
|
868
868
|
logger.error("An unknown error occurred");
|
|
869
869
|
}
|
|
870
|
-
logger.info(`Docs: ${pc3.dim("https://strapi2front.
|
|
870
|
+
logger.info(`Docs: ${pc3.dim("https://strapi2front.elevenestudio.com/docs")}`);
|
|
871
871
|
process.exit(1);
|
|
872
872
|
}
|
|
873
873
|
}
|
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/detectors/module-type.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 fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type ModuleType = \"esm\" | \"commonjs\";\n\nexport interface ModuleTypeInfo {\n type: ModuleType;\n reason: string;\n}\n\n/**\n * Detect if the project uses ES Modules or CommonJS\n *\n * Detection order:\n * 1. Check package.json \"type\" field\n * 2. Check for .mjs config files (next.config.mjs, etc.)\n * 3. Default to CommonJS\n */\nexport async function detectModuleType(cwd: string = process.cwd()): Promise<ModuleTypeInfo> {\n // Check package.json \"type\" field\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n const content = await fs.readFile(packageJsonPath, \"utf-8\");\n const packageJson = JSON.parse(content);\n\n if (packageJson.type === \"module\") {\n return { type: \"esm\", reason: 'package.json has \"type\": \"module\"' };\n }\n\n if (packageJson.type === \"commonjs\") {\n return { type: \"commonjs\", reason: 'package.json has \"type\": \"commonjs\"' };\n }\n } catch {\n // package.json not found or invalid\n }\n\n // Check for .mjs config files (indicates ESM preference)\n const esmIndicators = [\n \"next.config.mjs\",\n \"nuxt.config.mjs\",\n \"vite.config.mjs\",\n \"astro.config.mjs\",\n ];\n\n for (const file of esmIndicators) {\n try {\n await fs.access(path.join(cwd, file));\n return { type: \"esm\", reason: `Found ${file} (ESM config file)` };\n } catch {\n // File doesn't exist\n }\n }\n\n // Default to CommonJS (Node.js default)\n return { type: \"commonjs\", reason: \"Default (no ESM indicators found)\" };\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 apiPrefix: string;\n outputFormat: \"typescript\" | \"jsdoc\";\n outputDir: string;\n generateTypes: boolean;\n generateServices: boolean;\n generateActions: boolean;\n generateSchemas: boolean;\n generateUpload: boolean;\n}\n\n/**\n * Parse version string to get major version number\n */\nfunction getMajorVersion(version: string | null): number | null {\n if (!version) return null;\n // Remove ^ or ~ prefix and get first number\n const match = version.replace(/^[\\^~]/, \"\").match(/^(\\d+)/);\n return match ? parseInt(match[1], 10) : null;\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 // Track feature availability\n let canGenerateActions = true;\n\n // Check framework support for additional features\n if (detection.framework.name === \"unknown\") {\n // Unknown framework - generate types and services only\n canGenerateActions = false;\n } else if (detection.framework.name !== \"astro\") {\n // Non-Astro framework - generate types and services only (for now)\n canGenerateActions = false;\n } else {\n // Astro - check version for Actions support (requires v4+)\n const majorVersion = getMajorVersion(detection.framework.version);\n if (majorVersion !== null && majorVersion < 4) {\n p.log.warn(pc.yellow(`Astro v${majorVersion} detected. Upgrade to v4+ to enable Actions.`));\n canGenerateActions = false;\n }\n }\n\n // Determine output format based on TypeScript support\n let outputFormat: \"typescript\" | \"jsdoc\" = \"typescript\";\n\n if (!detection.typescript.enabled) {\n p.log.info(pc.dim(\"TypeScript not detected. Files will be generated as JavaScript with JSDoc annotations.\"));\n outputFormat = \"jsdoc\";\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 // Show token permissions hint\n p.log.message(\n pc.dim(\n `\\n To generate a token: Strapi Admin > Settings > API Tokens > Create new API Token\\n` +\n ` Required permissions:\\n` +\n ` Content-type-builder:\\n` +\n ` - Components: getComponents, getComponent\\n` +\n ` - Content-types: getContentTypes, getContentType\\n` +\n ` I18n (if using localization):\\n` +\n ` - Locales: listLocales\\n`\n )\n );\n\n const strapiToken = await p.text({\n message: \"What is your Strapi sync token?\",\n placeholder: \"Press Enter to skip (you can add it later in .env as STRAPI_SYNC_TOKEN)\",\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_SYNC_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 // API Prefix\n const defaultPrefix = \"/api\";\n const apiPrefixInput = await p.text({\n message: \"What is your Strapi API prefix?\",\n placeholder: `${defaultPrefix} (press Enter for default)`,\n validate: (value): string | undefined => {\n const trimmed = (value || \"\").trim();\n if (trimmed === \"\") return undefined;\n if (!trimmed.startsWith(\"/\")) {\n return \"API prefix must start with /\";\n }\n return undefined;\n },\n });\n\n if (p.isCancel(apiPrefixInput)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n const apiPrefix = ((apiPrefixInput as string) || \"\").trim() || defaultPrefix;\n\n if (apiPrefix !== defaultPrefix) {\n p.log.info(pc.dim(`Using custom API prefix: ${apiPrefix}`));\n }\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 - labels depend on output format\n const isTypeScript = outputFormat === \"typescript\";\n const featureOptions = [\n {\n value: \"types\",\n label: isTypeScript ? \"Types\" : \"Type Definitions\",\n hint: isTypeScript\n ? \"TypeScript interfaces for your content types\"\n : \"JSDoc type definitions for your content types\"\n },\n {\n value: \"services\",\n label: \"Services\",\n hint: isTypeScript\n ? \"Typed service functions for data fetching\"\n : \"Service functions with JSDoc annotations\"\n },\n ];\n\n // Schemas require TypeScript (generated code uses `export type` and `z.infer<typeof>`)\n if (isTypeScript) {\n featureOptions.push({\n value: \"schemas\",\n label: \"Schemas\",\n hint: \"Zod validation schemas for forms (React Hook Form, TanStack Form, etc.)\"\n });\n }\n\n featureOptions.push({\n value: \"upload\",\n label: \"Upload\",\n hint: \"File upload helpers (action + public client for browser uploads)\"\n });\n\n // Only show Astro Actions if available (requires TypeScript)\n if (canGenerateActions && isTypeScript) {\n featureOptions.push({ value: \"actions\", label: \"Astro Actions\", hint: \"Type-safe actions for client/server\" });\n }\n\n const initialFeatures: string[] = [\"types\", \"services\"];\n if (isTypeScript) initialFeatures.push(\"schemas\");\n if (canGenerateActions && isTypeScript) initialFeatures.push(\"actions\");\n\n const features = await p.multiselect({\n message: \"What would you like to generate?\",\n options: featureOptions,\n initialValues: initialFeatures,\n required: true,\n });\n\n if (p.isCancel(features)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Validate feature dependencies and auto-enable required features\n const selectedFeatures = new Set(features as string[]);\n\n // Dependency chain: types ← services ← actions\n if (selectedFeatures.has(\"services\") && !selectedFeatures.has(\"types\")) {\n selectedFeatures.add(\"types\");\n p.log.info(pc.dim(\"Auto-enabled Types (required by Services)\"));\n }\n if (selectedFeatures.has(\"actions\") && !selectedFeatures.has(\"services\")) {\n selectedFeatures.add(\"services\");\n p.log.info(pc.dim(\"Auto-enabled Services (required by Actions)\"));\n if (!selectedFeatures.has(\"types\")) {\n selectedFeatures.add(\"types\");\n p.log.info(pc.dim(\"Auto-enabled Types (required by Services)\"));\n }\n }\n\n return {\n strapiUrl: strapiUrl,\n strapiToken: trimmedToken,\n strapiVersion: strapiVersion as \"v4\" | \"v5\",\n apiPrefix: apiPrefix,\n outputFormat: outputFormat,\n outputDir: ((outputDir as string) || \"\").trim() || \"src/strapi\",\n generateTypes: selectedFeatures.has(\"types\"),\n generateServices: selectedFeatures.has(\"services\"),\n generateActions: canGenerateActions && isTypeScript && selectedFeatures.has(\"actions\"),\n generateSchemas: selectedFeatures.has(\"schemas\"),\n generateUpload: selectedFeatures.has(\"upload\"),\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 { detectModuleType } from \"../lib/detectors/module-type.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 // Detect module type for JSDoc projects\n let moduleType: \"esm\" | \"commonjs\" = \"commonjs\";\n if (answers.outputFormat === \"jsdoc\") {\n const detected = await detectModuleType(cwd);\n moduleType = detected.type;\n }\n\n // Create config file (use .js extension for JSDoc projects)\n const configExtension = answers.outputFormat === \"jsdoc\" ? \"js\" : \"ts\";\n const configContent = generateConfigFile({\n strapiUrl: answers.strapiUrl,\n strapiVersion: answers.strapiVersion,\n apiPrefix: answers.apiPrefix,\n outputFormat: answers.outputFormat,\n outputDir: answers.outputDir,\n generateTypes: answers.generateTypes,\n generateServices: answers.generateServices,\n generateActions: answers.generateActions,\n generateSchemas: answers.generateSchemas,\n generateUpload: answers.generateUpload,\n moduleType,\n });\n const configPath = path.join(cwd, `strapi.config.${configExtension}`);\n await fs.writeFile(configPath, configContent, \"utf-8\");\n\n // Update .env file\n const envPath = path.join(cwd, \".env\");\n const envVars: Record<string, string> = {\n STRAPI_URL: answers.strapiUrl,\n STRAPI_SYNC_TOKEN: answers.strapiToken, // Token for syncing schema (dev only)\n STRAPI_TOKEN: \"\", // Token for frontend API calls (production)\n };\n\n // Add upload-specific env vars\n if (answers.generateUpload) {\n envVars.PUBLIC_STRAPI_URL = answers.strapiUrl;\n envVars.PUBLIC_STRAPI_UPLOAD_TOKEN = \"\";\n }\n\n await appendToEnvFile(envPath, envVars, answers.generateUpload);\n\n // Create/update .env.example file\n const envExamplePath = path.join(cwd, \".env.example\");\n await createEnvExampleFile(envExamplePath, answers.generateUpload);\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/client)?\",\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/client as regular dependency\n const installSdkCmd = getInstallCommand(packageManager.name, \"@strapi/client\");\n s.start(`Installing @strapi/client... (${pc.dim(installSdkCmd)})`);\n try {\n await execAsync(installSdkCmd, cwd);\n s.stop(`${pc.green(\"✓\")} @strapi/client installed`);\n } catch {\n s.stop(`${pc.red(\"✗\")} Failed to install @strapi/client`);\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/client\")}`));\n }\n\n // Show success message\n const configFileName = `strapi.config.${configExtension}`;\n const fileExt = answers.outputFormat === \"jsdoc\" ? \".js\" : \".ts\";\n p.note(\n [\n `${pc.green(\"✓\")} Created ${pc.cyan(configFileName)}`,\n `${pc.green(\"✓\")} Updated ${pc.cyan(\".env\")} with Strapi tokens`,\n `${pc.green(\"✓\")} Created ${pc.cyan(\".env.example\")} for reference`,\n `${pc.green(\"✓\")} Created output directory ${pc.cyan(answers.outputDir)}`,\n \"\",\n `Output format: ${pc.cyan(answers.outputFormat === \"jsdoc\" ? \"JavaScript (JSDoc)\" : \"TypeScript\")}`,\n \"\",\n `Next steps:`,\n ` 1. Run ${pc.cyan(\"npx strapi2front sync\")} to generate files`,\n ` 2. Import from ${pc.cyan(answers.outputDir + \"/collections/*\" + fileExt)}`,\n \"\",\n `Docs: ${pc.dim(\"https://strapi2front.dev/docs\")}`,\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 logger.info(`Docs: ${pc.dim(\"https://strapi2front.dev/docs/installation\")}`);\n process.exit(1);\n }\n}\n\nfunction generateConfigFile(answers: {\n strapiUrl: string;\n strapiVersion: \"v4\" | \"v5\";\n apiPrefix: string;\n outputFormat: \"typescript\" | \"jsdoc\";\n outputDir: string;\n generateTypes: boolean;\n generateServices: boolean;\n generateActions: boolean;\n generateSchemas: boolean;\n generateUpload: boolean;\n moduleType: \"esm\" | \"commonjs\";\n}): string {\n const isTypeScript = answers.outputFormat === \"typescript\";\n const useESM = answers.moduleType === \"esm\";\n\n if (isTypeScript) {\n return `import { defineConfig } from \"strapi2front\";\n\nexport default defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n // Token for syncing schema (uses STRAPI_SYNC_TOKEN with fallback to STRAPI_TOKEN)\n token: process.env.STRAPI_SYNC_TOKEN || process.env.STRAPI_TOKEN,\n\n // API prefix (default: \"/api\")\n apiPrefix: \"${answers.apiPrefix}\",\n\n // Output format: \"typescript\" (.ts) or \"jsdoc\" (.js with JSDoc)\n outputFormat: \"typescript\",\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n },\n\n // Features to generate\n features: {\n types: ${answers.generateTypes},\n services: ${answers.generateServices},\n actions: ${answers.generateActions},\n schemas: ${answers.generateSchemas}, // Zod schemas for form validation (React Hook Form, TanStack Form, etc.)\n upload: ${answers.generateUpload}, // File upload helpers (action + public client)\n },\n\n // Strapi version\n strapiVersion: \"${answers.strapiVersion}\",\n});\n`;\n }\n\n // JSDoc config (JavaScript) - ESM or CommonJS based on project type\n if (useESM) {\n return `// @ts-check\nimport { defineConfig } from \"strapi2front\";\n\nexport default defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n // Token for syncing schema (uses STRAPI_SYNC_TOKEN with fallback to STRAPI_TOKEN)\n token: process.env.STRAPI_SYNC_TOKEN || process.env.STRAPI_TOKEN,\n\n // API prefix (default: \"/api\")\n apiPrefix: \"${answers.apiPrefix}\",\n\n // Output format: \"typescript\" (.ts) or \"jsdoc\" (.js with JSDoc)\n outputFormat: \"jsdoc\",\n\n // Module type: auto-detected as ESM\n moduleType: \"esm\",\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n },\n\n // Features to generate\n features: {\n types: ${answers.generateTypes},\n services: ${answers.generateServices},\n actions: false, // Actions require TypeScript\n schemas: ${answers.generateSchemas},\n upload: ${answers.generateUpload},\n },\n\n // Strapi version\n strapiVersion: \"${answers.strapiVersion}\",\n});\n`;\n }\n\n // CommonJS config\n return `// @ts-check\nconst { defineConfig } = require(\"strapi2front\");\n\nmodule.exports = defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n // Token for syncing schema (uses STRAPI_SYNC_TOKEN with fallback to STRAPI_TOKEN)\n token: process.env.STRAPI_SYNC_TOKEN || process.env.STRAPI_TOKEN,\n\n // API prefix (default: \"/api\")\n apiPrefix: \"${answers.apiPrefix}\",\n\n // Output format: \"typescript\" (.ts) or \"jsdoc\" (.js with JSDoc)\n outputFormat: \"jsdoc\",\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n },\n\n // Features to generate\n features: {\n types: ${answers.generateTypes},\n services: ${answers.generateServices},\n actions: false, // Actions require TypeScript\n schemas: ${answers.generateSchemas},\n upload: ${answers.generateUpload},\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 includeUploadComment = false\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 // Add comments for each token type\n if (key === \"STRAPI_SYNC_TOKEN\") {\n newLines.push(\"\");\n newLines.push(\"# Sync token: Used by strapi2front to sync schema (development only)\");\n newLines.push(\"# Permissions: content-type-builder (getContentTypes, getComponents), i18n (listLocales)\");\n newLines.push(\"# IMPORTANT: Do NOT deploy this token to production\");\n } else if (key === \"STRAPI_TOKEN\") {\n newLines.push(\"\");\n newLines.push(\"# Frontend token: Used by your app to fetch content (production)\");\n newLines.push(\"# Configure with only the permissions your app needs\");\n } else if (key === \"PUBLIC_STRAPI_UPLOAD_TOKEN\" && includeUploadComment) {\n newLines.push(\"\");\n newLines.push(\"# Upload token: Create in Strapi Admin > Settings > API Tokens\");\n newLines.push(\"# Set permissions: Upload > upload (only, no delete/update)\");\n }\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\nasync function createEnvExampleFile(\n envExamplePath: string,\n includeUpload = false\n): Promise<void> {\n const lines = [\n \"# Strapi URL\",\n \"STRAPI_URL=http://localhost:1337\",\n \"\",\n \"# Sync token: Used by strapi2front to sync schema (development only)\",\n \"# Permissions: content-type-builder (getContentTypes, getComponents), i18n (listLocales)\",\n \"# IMPORTANT: Do NOT deploy this token to production\",\n \"STRAPI_SYNC_TOKEN=\",\n \"\",\n \"# Frontend token: Used by your app to fetch content (production)\",\n \"# Configure with only the permissions your app needs\",\n \"STRAPI_TOKEN=\",\n ];\n\n if (includeUpload) {\n lines.push(\n \"\",\n \"# Public URL for browser-side uploads\",\n \"PUBLIC_STRAPI_URL=http://localhost:1337\",\n \"\",\n \"# Upload token: Create in Strapi Admin > Settings > API Tokens\",\n \"# Set permissions: Upload > upload (only, no delete/update)\",\n \"PUBLIC_STRAPI_UPLOAD_TOKEN=\"\n );\n }\n\n await fs.writeFile(envExamplePath, lines.join(\"\\n\") + \"\\n\", \"utf-8\");\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 { generateByFeature } from \"@strapi2front/generators\";\nimport { logger } from \"../lib/utils/logger.js\";\nimport { detectModuleType } from \"../lib/detectors/module-type.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\nexport interface SyncCommandOptions {\n force?: boolean;\n typesOnly?: boolean;\n servicesOnly?: boolean;\n actionsOnly?: boolean;\n schemasOnly?: boolean;\n uploadOnly?: 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, config.apiPrefix);\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, config.apiPrefix);\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 && !options.schemasOnly && !options.uploadOnly;\n\n // Get output format from config (default to typescript)\n const outputFormat = config.outputFormat || \"typescript\";\n\n // Detect module type for JSDoc output (ESM vs CommonJS)\n let moduleType: \"esm\" | \"commonjs\" = \"commonjs\";\n if (outputFormat === \"jsdoc\") {\n if (config.moduleType) {\n moduleType = config.moduleType;\n p.log.info(`Module type: ${pc.cyan(moduleType)} (from config)`);\n } else {\n const detected = await detectModuleType(cwd);\n moduleType = detected.type;\n p.log.info(`Module type: ${pc.cyan(moduleType)} (${detected.reason})`);\n }\n }\n\n // Generate using by-feature structure (screaming architecture)\n s.start(`Generating files (${outputFormat})...`);\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 && outputFormat === \"typescript\" && (generateAll || Boolean(options.actionsOnly)),\n schemas: config.features.schemas && (generateAll || Boolean(options.schemasOnly)),\n upload: config.features.upload && (generateAll || Boolean(options.uploadOnly)),\n },\n schemaOptions: config.schemaOptions,\n blocksRendererInstalled,\n strapiVersion: config.strapiVersion,\n apiPrefix: config.apiPrefix,\n outputFormat,\n moduleType,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} files`);\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 `Docs: ${pc.dim(\"https://strapi2front.dev/docs\")}`,\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n \"Sync complete!\"\n );\n\n const generatedFeatures: string[] = [];\n if (config.features.types) generatedFeatures.push(\"Types\");\n if (config.features.services) generatedFeatures.push(\"Services\");\n if (config.features.schemas) generatedFeatures.push(\"Schemas\");\n if (config.features.actions) generatedFeatures.push(\"Actions\");\n if (config.features.upload) generatedFeatures.push(\"Upload\");\n p.outro(pc.green(`${generatedFeatures.join(\", \")} 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 logger.info(`Docs: ${pc.dim(\"https://strapi2front.dev/docs\")}`);\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/detectors/module-type.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 fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type ModuleType = \"esm\" | \"commonjs\";\n\nexport interface ModuleTypeInfo {\n type: ModuleType;\n reason: string;\n}\n\n/**\n * Detect if the project uses ES Modules or CommonJS\n *\n * Detection order:\n * 1. Check package.json \"type\" field\n * 2. Check for .mjs config files (next.config.mjs, etc.)\n * 3. Default to CommonJS\n */\nexport async function detectModuleType(cwd: string = process.cwd()): Promise<ModuleTypeInfo> {\n // Check package.json \"type\" field\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n const content = await fs.readFile(packageJsonPath, \"utf-8\");\n const packageJson = JSON.parse(content);\n\n if (packageJson.type === \"module\") {\n return { type: \"esm\", reason: 'package.json has \"type\": \"module\"' };\n }\n\n if (packageJson.type === \"commonjs\") {\n return { type: \"commonjs\", reason: 'package.json has \"type\": \"commonjs\"' };\n }\n } catch {\n // package.json not found or invalid\n }\n\n // Check for .mjs config files (indicates ESM preference)\n const esmIndicators = [\n \"next.config.mjs\",\n \"nuxt.config.mjs\",\n \"vite.config.mjs\",\n \"astro.config.mjs\",\n ];\n\n for (const file of esmIndicators) {\n try {\n await fs.access(path.join(cwd, file));\n return { type: \"esm\", reason: `Found ${file} (ESM config file)` };\n } catch {\n // File doesn't exist\n }\n }\n\n // Default to CommonJS (Node.js default)\n return { type: \"commonjs\", reason: \"Default (no ESM indicators found)\" };\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 apiPrefix: string;\n outputFormat: \"typescript\" | \"jsdoc\";\n outputDir: string;\n generateTypes: boolean;\n generateServices: boolean;\n generateActions: boolean;\n generateSchemas: boolean;\n generateUpload: boolean;\n}\n\n/**\n * Parse version string to get major version number\n */\nfunction getMajorVersion(version: string | null): number | null {\n if (!version) return null;\n // Remove ^ or ~ prefix and get first number\n const match = version.replace(/^[\\^~]/, \"\").match(/^(\\d+)/);\n return match ? parseInt(match[1], 10) : null;\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 // Track feature availability\n let canGenerateActions = true;\n\n // Check framework support for additional features\n if (detection.framework.name === \"unknown\") {\n // Unknown framework - generate types and services only\n canGenerateActions = false;\n } else if (detection.framework.name !== \"astro\") {\n // Non-Astro framework - generate types and services only (for now)\n canGenerateActions = false;\n } else {\n // Astro - check version for Actions support (requires v4+)\n const majorVersion = getMajorVersion(detection.framework.version);\n if (majorVersion !== null && majorVersion < 4) {\n p.log.warn(pc.yellow(`Astro v${majorVersion} detected. Upgrade to v4+ to enable Actions.`));\n canGenerateActions = false;\n }\n }\n\n // Determine output format based on TypeScript support\n let outputFormat: \"typescript\" | \"jsdoc\" = \"typescript\";\n\n if (!detection.typescript.enabled) {\n p.log.info(pc.dim(\"TypeScript not detected. Files will be generated as JavaScript with JSDoc annotations.\"));\n outputFormat = \"jsdoc\";\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 // Show token permissions hint\n p.log.message(\n pc.dim(\n `\\n To generate a token: Strapi Admin > Settings > API Tokens > Create new API Token\\n` +\n ` Required permissions:\\n` +\n ` Content-type-builder:\\n` +\n ` - Components: getComponents, getComponent\\n` +\n ` - Content-types: getContentTypes, getContentType\\n` +\n ` I18n (if using localization):\\n` +\n ` - Locales: listLocales\\n`\n )\n );\n\n const strapiToken = await p.text({\n message: \"What is your Strapi sync token?\",\n placeholder: \"Press Enter to skip (you can add it later in .env as STRAPI_SYNC_TOKEN)\",\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_SYNC_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 // API Prefix\n const defaultPrefix = \"/api\";\n const apiPrefixInput = await p.text({\n message: \"What is your Strapi API prefix?\",\n placeholder: `${defaultPrefix} (press Enter for default)`,\n validate: (value): string | undefined => {\n const trimmed = (value || \"\").trim();\n if (trimmed === \"\") return undefined;\n if (!trimmed.startsWith(\"/\")) {\n return \"API prefix must start with /\";\n }\n return undefined;\n },\n });\n\n if (p.isCancel(apiPrefixInput)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n const apiPrefix = ((apiPrefixInput as string) || \"\").trim() || defaultPrefix;\n\n if (apiPrefix !== defaultPrefix) {\n p.log.info(pc.dim(`Using custom API prefix: ${apiPrefix}`));\n }\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 - labels depend on output format\n const isTypeScript = outputFormat === \"typescript\";\n const featureOptions = [\n {\n value: \"types\",\n label: isTypeScript ? \"Types\" : \"Type Definitions\",\n hint: isTypeScript\n ? \"TypeScript interfaces for your content types\"\n : \"JSDoc type definitions for your content types\"\n },\n {\n value: \"services\",\n label: \"Services\",\n hint: isTypeScript\n ? \"Typed service functions for data fetching\"\n : \"Service functions with JSDoc annotations\"\n },\n ];\n\n // Schemas require TypeScript (generated code uses `export type` and `z.infer<typeof>`)\n if (isTypeScript) {\n featureOptions.push({\n value: \"schemas\",\n label: \"Schemas\",\n hint: \"Zod validation schemas for forms (React Hook Form, TanStack Form, etc.)\"\n });\n }\n\n featureOptions.push({\n value: \"upload\",\n label: \"Upload\",\n hint: \"File upload helpers (action + public client for browser uploads)\"\n });\n\n // Only show Astro Actions if available (requires TypeScript)\n if (canGenerateActions && isTypeScript) {\n featureOptions.push({ value: \"actions\", label: \"Astro Actions\", hint: \"Type-safe actions for client/server\" });\n }\n\n const initialFeatures: string[] = [\"types\", \"services\"];\n if (isTypeScript) initialFeatures.push(\"schemas\");\n if (canGenerateActions && isTypeScript) initialFeatures.push(\"actions\");\n\n const features = await p.multiselect({\n message: \"What would you like to generate?\",\n options: featureOptions,\n initialValues: initialFeatures,\n required: true,\n });\n\n if (p.isCancel(features)) {\n p.cancel(\"Setup cancelled\");\n return null;\n }\n\n // Validate feature dependencies and auto-enable required features\n const selectedFeatures = new Set(features as string[]);\n\n // Dependency chain: types ← services ← actions\n if (selectedFeatures.has(\"services\") && !selectedFeatures.has(\"types\")) {\n selectedFeatures.add(\"types\");\n p.log.info(pc.dim(\"Auto-enabled Types (required by Services)\"));\n }\n if (selectedFeatures.has(\"actions\") && !selectedFeatures.has(\"services\")) {\n selectedFeatures.add(\"services\");\n p.log.info(pc.dim(\"Auto-enabled Services (required by Actions)\"));\n if (!selectedFeatures.has(\"types\")) {\n selectedFeatures.add(\"types\");\n p.log.info(pc.dim(\"Auto-enabled Types (required by Services)\"));\n }\n }\n\n return {\n strapiUrl: strapiUrl,\n strapiToken: trimmedToken,\n strapiVersion: strapiVersion as \"v4\" | \"v5\",\n apiPrefix: apiPrefix,\n outputFormat: outputFormat,\n outputDir: ((outputDir as string) || \"\").trim() || \"src/strapi\",\n generateTypes: selectedFeatures.has(\"types\"),\n generateServices: selectedFeatures.has(\"services\"),\n generateActions: canGenerateActions && isTypeScript && selectedFeatures.has(\"actions\"),\n generateSchemas: selectedFeatures.has(\"schemas\"),\n generateUpload: selectedFeatures.has(\"upload\"),\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 { detectModuleType } from \"../lib/detectors/module-type.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 // Detect module type for JSDoc projects\n let moduleType: \"esm\" | \"commonjs\" = \"commonjs\";\n if (answers.outputFormat === \"jsdoc\") {\n const detected = await detectModuleType(cwd);\n moduleType = detected.type;\n }\n\n // Create config file (use .js extension for JSDoc projects)\n const configExtension = answers.outputFormat === \"jsdoc\" ? \"js\" : \"ts\";\n const configContent = generateConfigFile({\n strapiUrl: answers.strapiUrl,\n strapiVersion: answers.strapiVersion,\n apiPrefix: answers.apiPrefix,\n outputFormat: answers.outputFormat,\n outputDir: answers.outputDir,\n generateTypes: answers.generateTypes,\n generateServices: answers.generateServices,\n generateActions: answers.generateActions,\n generateSchemas: answers.generateSchemas,\n generateUpload: answers.generateUpload,\n moduleType,\n });\n const configPath = path.join(cwd, `strapi.config.${configExtension}`);\n await fs.writeFile(configPath, configContent, \"utf-8\");\n\n // Update .env file\n const envPath = path.join(cwd, \".env\");\n const envVars: Record<string, string> = {\n STRAPI_URL: answers.strapiUrl,\n STRAPI_SYNC_TOKEN: answers.strapiToken, // Token for syncing schema (dev only)\n STRAPI_TOKEN: \"\", // Token for frontend API calls (production)\n };\n\n // Add upload-specific env vars\n if (answers.generateUpload) {\n envVars.PUBLIC_STRAPI_URL = answers.strapiUrl;\n envVars.PUBLIC_STRAPI_UPLOAD_TOKEN = \"\";\n }\n\n await appendToEnvFile(envPath, envVars, answers.generateUpload);\n\n // Create/update .env.example file\n const envExamplePath = path.join(cwd, \".env.example\");\n await createEnvExampleFile(envExamplePath, answers.generateUpload);\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/client)?\",\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/client as regular dependency\n const installSdkCmd = getInstallCommand(packageManager.name, \"@strapi/client\");\n s.start(`Installing @strapi/client... (${pc.dim(installSdkCmd)})`);\n try {\n await execAsync(installSdkCmd, cwd);\n s.stop(`${pc.green(\"✓\")} @strapi/client installed`);\n } catch {\n s.stop(`${pc.red(\"✗\")} Failed to install @strapi/client`);\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/client\")}`));\n }\n\n // Show success message\n const configFileName = `strapi.config.${configExtension}`;\n const fileExt = answers.outputFormat === \"jsdoc\" ? \".js\" : \".ts\";\n p.note(\n [\n `${pc.green(\"✓\")} Created ${pc.cyan(configFileName)}`,\n `${pc.green(\"✓\")} Updated ${pc.cyan(\".env\")} with Strapi tokens`,\n `${pc.green(\"✓\")} Created ${pc.cyan(\".env.example\")} for reference`,\n `${pc.green(\"✓\")} Created output directory ${pc.cyan(answers.outputDir)}`,\n \"\",\n `Output format: ${pc.cyan(answers.outputFormat === \"jsdoc\" ? \"JavaScript (JSDoc)\" : \"TypeScript\")}`,\n \"\",\n `Next steps:`,\n ` 1. Run ${pc.cyan(\"npx strapi2front sync\")} to generate files`,\n ` 2. Import from ${pc.cyan(answers.outputDir + \"/collections/*\" + fileExt)}`,\n \"\",\n `Docs: ${pc.dim(\"https://strapi2front.elevenestudio.com/docs\")}`,\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 logger.info(`Docs: ${pc.dim(\"https://strapi2front.elevenestudio.com/docs/installation\")}`);\n process.exit(1);\n }\n}\n\nfunction generateConfigFile(answers: {\n strapiUrl: string;\n strapiVersion: \"v4\" | \"v5\";\n apiPrefix: string;\n outputFormat: \"typescript\" | \"jsdoc\";\n outputDir: string;\n generateTypes: boolean;\n generateServices: boolean;\n generateActions: boolean;\n generateSchemas: boolean;\n generateUpload: boolean;\n moduleType: \"esm\" | \"commonjs\";\n}): string {\n const isTypeScript = answers.outputFormat === \"typescript\";\n const useESM = answers.moduleType === \"esm\";\n\n if (isTypeScript) {\n return `import { defineConfig } from \"strapi2front\";\n\nexport default defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n // Token for syncing schema (uses STRAPI_SYNC_TOKEN with fallback to STRAPI_TOKEN)\n token: process.env.STRAPI_SYNC_TOKEN || process.env.STRAPI_TOKEN,\n\n // API prefix (default: \"/api\")\n apiPrefix: \"${answers.apiPrefix}\",\n\n // Output format: \"typescript\" (.ts) or \"jsdoc\" (.js with JSDoc)\n outputFormat: \"typescript\",\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n },\n\n // Features to generate\n features: {\n types: ${answers.generateTypes},\n services: ${answers.generateServices},\n actions: ${answers.generateActions},\n schemas: ${answers.generateSchemas}, // Zod schemas for form validation (React Hook Form, TanStack Form, etc.)\n upload: ${answers.generateUpload}, // File upload helpers (action + public client)\n },\n\n // Strapi version\n strapiVersion: \"${answers.strapiVersion}\",\n});\n`;\n }\n\n // JSDoc config (JavaScript) - ESM or CommonJS based on project type\n if (useESM) {\n return `// @ts-check\nimport { defineConfig } from \"strapi2front\";\n\nexport default defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n // Token for syncing schema (uses STRAPI_SYNC_TOKEN with fallback to STRAPI_TOKEN)\n token: process.env.STRAPI_SYNC_TOKEN || process.env.STRAPI_TOKEN,\n\n // API prefix (default: \"/api\")\n apiPrefix: \"${answers.apiPrefix}\",\n\n // Output format: \"typescript\" (.ts) or \"jsdoc\" (.js with JSDoc)\n outputFormat: \"jsdoc\",\n\n // Module type: auto-detected as ESM\n moduleType: \"esm\",\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n },\n\n // Features to generate\n features: {\n types: ${answers.generateTypes},\n services: ${answers.generateServices},\n actions: false, // Actions require TypeScript\n schemas: ${answers.generateSchemas},\n upload: ${answers.generateUpload},\n },\n\n // Strapi version\n strapiVersion: \"${answers.strapiVersion}\",\n});\n`;\n }\n\n // CommonJS config\n return `// @ts-check\nconst { defineConfig } = require(\"strapi2front\");\n\nmodule.exports = defineConfig({\n // Strapi connection\n url: process.env.STRAPI_URL || \"${answers.strapiUrl}\",\n // Token for syncing schema (uses STRAPI_SYNC_TOKEN with fallback to STRAPI_TOKEN)\n token: process.env.STRAPI_SYNC_TOKEN || process.env.STRAPI_TOKEN,\n\n // API prefix (default: \"/api\")\n apiPrefix: \"${answers.apiPrefix}\",\n\n // Output format: \"typescript\" (.ts) or \"jsdoc\" (.js with JSDoc)\n outputFormat: \"jsdoc\",\n\n // Output configuration\n output: {\n path: \"${answers.outputDir}\",\n },\n\n // Features to generate\n features: {\n types: ${answers.generateTypes},\n services: ${answers.generateServices},\n actions: false, // Actions require TypeScript\n schemas: ${answers.generateSchemas},\n upload: ${answers.generateUpload},\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 includeUploadComment = false\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 // Add comments for each token type\n if (key === \"STRAPI_SYNC_TOKEN\") {\n newLines.push(\"\");\n newLines.push(\"# Sync token: Used by strapi2front to sync schema (development only)\");\n newLines.push(\"# Permissions: content-type-builder (getContentTypes, getComponents), i18n (listLocales)\");\n newLines.push(\"# IMPORTANT: Do NOT deploy this token to production\");\n } else if (key === \"STRAPI_TOKEN\") {\n newLines.push(\"\");\n newLines.push(\"# Frontend token: Used by your app to fetch content (production)\");\n newLines.push(\"# Configure with only the permissions your app needs\");\n } else if (key === \"PUBLIC_STRAPI_UPLOAD_TOKEN\" && includeUploadComment) {\n newLines.push(\"\");\n newLines.push(\"# Upload token: Create in Strapi Admin > Settings > API Tokens\");\n newLines.push(\"# Set permissions: Upload > upload (only, no delete/update)\");\n }\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\nasync function createEnvExampleFile(\n envExamplePath: string,\n includeUpload = false\n): Promise<void> {\n const lines = [\n \"# Strapi URL\",\n \"STRAPI_URL=http://localhost:1337\",\n \"\",\n \"# Sync token: Used by strapi2front to sync schema (development only)\",\n \"# Permissions: content-type-builder (getContentTypes, getComponents), i18n (listLocales)\",\n \"# IMPORTANT: Do NOT deploy this token to production\",\n \"STRAPI_SYNC_TOKEN=\",\n \"\",\n \"# Frontend token: Used by your app to fetch content (production)\",\n \"# Configure with only the permissions your app needs\",\n \"STRAPI_TOKEN=\",\n ];\n\n if (includeUpload) {\n lines.push(\n \"\",\n \"# Public URL for browser-side uploads\",\n \"PUBLIC_STRAPI_URL=http://localhost:1337\",\n \"\",\n \"# Upload token: Create in Strapi Admin > Settings > API Tokens\",\n \"# Set permissions: Upload > upload (only, no delete/update)\",\n \"PUBLIC_STRAPI_UPLOAD_TOKEN=\"\n );\n }\n\n await fs.writeFile(envExamplePath, lines.join(\"\\n\") + \"\\n\", \"utf-8\");\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 { generateByFeature } from \"@strapi2front/generators\";\nimport { logger } from \"../lib/utils/logger.js\";\nimport { detectModuleType } from \"../lib/detectors/module-type.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\nexport interface SyncCommandOptions {\n force?: boolean;\n typesOnly?: boolean;\n servicesOnly?: boolean;\n actionsOnly?: boolean;\n schemasOnly?: boolean;\n uploadOnly?: 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, config.apiPrefix);\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, config.apiPrefix);\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 && !options.schemasOnly && !options.uploadOnly;\n\n // Get output format from config (default to typescript)\n const outputFormat = config.outputFormat || \"typescript\";\n\n // Detect module type for JSDoc output (ESM vs CommonJS)\n let moduleType: \"esm\" | \"commonjs\" = \"commonjs\";\n if (outputFormat === \"jsdoc\") {\n if (config.moduleType) {\n moduleType = config.moduleType;\n p.log.info(`Module type: ${pc.cyan(moduleType)} (from config)`);\n } else {\n const detected = await detectModuleType(cwd);\n moduleType = detected.type;\n p.log.info(`Module type: ${pc.cyan(moduleType)} (${detected.reason})`);\n }\n }\n\n // Generate using by-feature structure (screaming architecture)\n s.start(`Generating files (${outputFormat})...`);\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 && outputFormat === \"typescript\" && (generateAll || Boolean(options.actionsOnly)),\n schemas: config.features.schemas && (generateAll || Boolean(options.schemasOnly)),\n upload: config.features.upload && (generateAll || Boolean(options.uploadOnly)),\n },\n schemaOptions: config.schemaOptions,\n blocksRendererInstalled,\n strapiVersion: config.strapiVersion,\n apiPrefix: config.apiPrefix,\n outputFormat,\n moduleType,\n });\n generatedFiles.push(...files);\n s.stop(`Generated ${files.length} files`);\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 `Docs: ${pc.dim(\"https://strapi2front.elevenestudio.com/docs\")}`,\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n \"Sync complete!\"\n );\n\n const generatedFeatures: string[] = [];\n if (config.features.types) generatedFeatures.push(\"Types\");\n if (config.features.services) generatedFeatures.push(\"Services\");\n if (config.features.schemas) generatedFeatures.push(\"Schemas\");\n if (config.features.actions) generatedFeatures.push(\"Actions\");\n if (config.features.upload) generatedFeatures.push(\"Upload\");\n p.outro(pc.green(`${generatedFeatures.join(\", \")} 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 logger.info(`Docs: ${pc.dim(\"https://strapi2front.elevenestudio.com/docs\")}`);\n process.exit(1);\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "strapi2front",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.2",
|
|
4
4
|
"description": "Generate TypeScript types, services, and framework actions from your Strapi schema",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
"ora": "^8.0.0",
|
|
27
27
|
"picocolors": "^1.0.0",
|
|
28
28
|
"pkg-types": "^1.0.0",
|
|
29
|
-
"@strapi2front/
|
|
30
|
-
"@strapi2front/
|
|
31
|
-
"@strapi2front/
|
|
29
|
+
"@strapi2front/client": "0.5.1",
|
|
30
|
+
"@strapi2front/core": "0.5.1",
|
|
31
|
+
"@strapi2front/generators": "0.5.1"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"tsup": "^8.0.0",
|
|
@@ -48,8 +48,15 @@
|
|
|
48
48
|
"actions"
|
|
49
49
|
],
|
|
50
50
|
"license": "MIT",
|
|
51
|
-
"author": "Eleven Estudio
|
|
52
|
-
"homepage": "https://
|
|
51
|
+
"author": "Eleven Estudio (https://github.com/elevenestudio)",
|
|
52
|
+
"homepage": "https://strapi2front.elevenestudio.com",
|
|
53
|
+
"contributors": [
|
|
54
|
+
{
|
|
55
|
+
"name": "Geovanny Gil",
|
|
56
|
+
"email": "esgeovannygil@gmail.com",
|
|
57
|
+
"url": "https://github.com/GeovannyGil"
|
|
58
|
+
}
|
|
59
|
+
],
|
|
53
60
|
"repository": {
|
|
54
61
|
"type": "git",
|
|
55
62
|
"url": "https://github.com/eleven-estudio/strapi2front.git",
|