@strapi2front/core 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +10 -3
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -8,11 +8,13 @@ declare const configSchema: z.ZodObject<{
|
|
|
8
8
|
token: z.ZodOptional<z.ZodString>;
|
|
9
9
|
apiPrefix: z.ZodDefault<z.ZodString>;
|
|
10
10
|
strapiVersion: z.ZodDefault<z.ZodEnum<["v4", "v5"]>>;
|
|
11
|
+
outputFormat: z.ZodDefault<z.ZodEnum<["typescript", "jsdoc"]>>;
|
|
12
|
+
moduleType: z.ZodOptional<z.ZodEnum<["esm", "commonjs"]>>;
|
|
11
13
|
output: z.ZodDefault<z.ZodObject<{
|
|
12
14
|
path: z.ZodDefault<z.ZodString>;
|
|
13
15
|
types: z.ZodDefault<z.ZodString>;
|
|
14
16
|
services: z.ZodDefault<z.ZodString>;
|
|
15
|
-
actions: z.ZodDefault<z.ZodString
|
|
17
|
+
actions: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
16
18
|
structure: z.ZodDefault<z.ZodEnum<["by-layer", "by-feature"]>>;
|
|
17
19
|
}, "strip", z.ZodTypeAny, {
|
|
18
20
|
path: string;
|
|
@@ -54,6 +56,7 @@ declare const configSchema: z.ZodObject<{
|
|
|
54
56
|
url: string;
|
|
55
57
|
apiPrefix: string;
|
|
56
58
|
strapiVersion: "v4" | "v5";
|
|
59
|
+
outputFormat: "typescript" | "jsdoc";
|
|
57
60
|
options: {
|
|
58
61
|
includeDrafts: boolean;
|
|
59
62
|
strictTypes: boolean;
|
|
@@ -71,11 +74,14 @@ declare const configSchema: z.ZodObject<{
|
|
|
71
74
|
actions: boolean;
|
|
72
75
|
};
|
|
73
76
|
token?: string | undefined;
|
|
77
|
+
moduleType?: "esm" | "commonjs" | undefined;
|
|
74
78
|
}, {
|
|
75
79
|
url: string;
|
|
76
80
|
token?: string | undefined;
|
|
77
81
|
apiPrefix?: string | undefined;
|
|
78
82
|
strapiVersion?: "v4" | "v5" | undefined;
|
|
83
|
+
outputFormat?: "typescript" | "jsdoc" | undefined;
|
|
84
|
+
moduleType?: "esm" | "commonjs" | undefined;
|
|
79
85
|
options?: {
|
|
80
86
|
includeDrafts?: boolean | undefined;
|
|
81
87
|
strictTypes?: boolean | undefined;
|
|
@@ -94,11 +100,12 @@ declare const configSchema: z.ZodObject<{
|
|
|
94
100
|
} | undefined;
|
|
95
101
|
}>;
|
|
96
102
|
type StrapiIntegrateConfig = z.infer<typeof configSchema>;
|
|
103
|
+
type StrapiIntegrateConfigInput = z.input<typeof configSchema>;
|
|
97
104
|
|
|
98
105
|
/**
|
|
99
106
|
* Helper function for defining configuration with type safety
|
|
100
107
|
*/
|
|
101
|
-
declare function defineConfig(config:
|
|
108
|
+
declare function defineConfig(config: StrapiIntegrateConfigInput): StrapiIntegrateConfig;
|
|
102
109
|
/**
|
|
103
110
|
* Load configuration from strapi.config.ts
|
|
104
111
|
*/
|
|
@@ -363,4 +370,4 @@ declare function toCamelCase(str: string): string;
|
|
|
363
370
|
*/
|
|
364
371
|
declare function toKebabCase(str: string): string;
|
|
365
372
|
|
|
366
|
-
export { type Attribute, type AttributeType, type BlocksAttribute, type BooleanAttribute, type CollectionType, type ComponentAttribute, type ComponentSchema, type ComponentType, type ContentTypeSchema, type DateAttribute, type DynamicZoneAttribute, type EnumerationAttribute, type JsonAttribute, type MediaAttribute, type NumberAttribute, type ParsedSchema, type RelationAttribute, type SingleType, type StrapiIntegrateConfig, type StrapiLocale, type StrapiSchema, type StrapiVersion, type StringAttribute, type VersionDetectionResult, configSchema, defineConfig, detectStrapiVersion, fetchSchema, loadConfig, parseSchema, testConnection, toCamelCase, toKebabCase, toPascalCase, uidToIdentifier };
|
|
373
|
+
export { type Attribute, type AttributeType, type BlocksAttribute, type BooleanAttribute, type CollectionType, type ComponentAttribute, type ComponentSchema, type ComponentType, type ContentTypeSchema, type DateAttribute, type DynamicZoneAttribute, type EnumerationAttribute, type JsonAttribute, type MediaAttribute, type NumberAttribute, type ParsedSchema, type RelationAttribute, type SingleType, type StrapiIntegrateConfig, type StrapiIntegrateConfigInput, type StrapiLocale, type StrapiSchema, type StrapiVersion, type StringAttribute, type VersionDetectionResult, configSchema, defineConfig, detectStrapiVersion, fetchSchema, loadConfig, parseSchema, testConnection, toCamelCase, toKebabCase, toPascalCase, uidToIdentifier };
|
package/dist/index.js
CHANGED
|
@@ -13,12 +13,16 @@ var configSchema = z.object({
|
|
|
13
13
|
apiPrefix: z.string().default("/api"),
|
|
14
14
|
// Strapi version
|
|
15
15
|
strapiVersion: z.enum(["v4", "v5"]).default("v5"),
|
|
16
|
+
// Output format: 'typescript' for .ts files, 'jsdoc' for .js with JSDoc annotations
|
|
17
|
+
outputFormat: z.enum(["typescript", "jsdoc"]).default("typescript"),
|
|
18
|
+
// Module type: 'esm' for ES Modules, 'commonjs' for CommonJS (auto-detected if not specified)
|
|
19
|
+
moduleType: z.enum(["esm", "commonjs"]).optional(),
|
|
16
20
|
// Output paths
|
|
17
21
|
output: z.object({
|
|
18
22
|
path: z.string().default("src/strapi"),
|
|
19
23
|
types: z.string().default("types"),
|
|
20
24
|
services: z.string().default("services"),
|
|
21
|
-
actions: z.string().default("actions/strapi"),
|
|
25
|
+
actions: z.string().optional().default("actions/strapi"),
|
|
22
26
|
// Output structure: 'by-layer' (types/, services/, actions/) or 'by-feature' (article/, category/)
|
|
23
27
|
structure: z.enum(["by-layer", "by-feature"]).default("by-feature")
|
|
24
28
|
}).default({}),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/schema.ts","../src/config/loader.ts","../src/schema/fetcher.ts","../src/schema/parser.ts"],"names":["loadEnv"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\n/**\n * Configuration schema for strapi2front\n */\nexport const configSchema = z.object({\n // Strapi connection\n url: z.string().url(\"url must be a valid URL\"),\n token: z.string().min(1, \"token is required\").optional(),\n\n // API prefix (default: \"/api\", can be customized in Strapi config)\n apiPrefix: z.string().default(\"/api\"),\n\n // Strapi version\n strapiVersion: z.enum([\"v4\", \"v5\"]).default(\"v5\"),\n\n // Output paths\n output: z.object({\n path: z.string().default(\"src/strapi\"),\n types: z.string().default(\"types\"),\n services: z.string().default(\"services\"),\n actions: z.string().default(\"actions/strapi\"),\n // Output structure: 'by-layer' (types/, services/, actions/) or 'by-feature' (article/, category/)\n structure: z.enum([\"by-layer\", \"by-feature\"]).default(\"by-feature\"),\n }).default({}),\n\n // Features to generate\n features: z.object({\n types: z.boolean().default(true),\n services: z.boolean().default(true),\n actions: z.boolean().default(true),\n }).default({}),\n\n // Advanced options\n options: z.object({\n // Include draft content types\n includeDrafts: z.boolean().default(false),\n // Generate strict types (no optional fields)\n strictTypes: z.boolean().default(false),\n }).default({}),\n});\n\nexport type StrapiIntegrateConfig = z.infer<typeof configSchema>;\n","import { createJiti } from 'jiti';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { config as loadEnv } from 'dotenv';\nimport { configSchema, type StrapiIntegrateConfig } from './schema.js';\n\nconst CONFIG_FILES = ['strapi.config.ts', 'strapi.config.js', 'strapi.config.mjs'];\n\n/**\n * Helper function for defining configuration with type safety\n */\nexport function defineConfig(config: Partial<StrapiIntegrateConfig>): StrapiIntegrateConfig {\n return configSchema.parse(config);\n}\n\n/**\n * Load configuration from strapi.config.ts\n */\nexport async function loadConfig(cwd: string = process.cwd()): Promise<StrapiIntegrateConfig> {\n // Load environment variables from .env file (quiet to suppress dotenv logs)\n loadEnv({ path: path.join(cwd, '.env'), quiet: true });\n\n // Find config file\n let configPath: string | null = null;\n\n for (const file of CONFIG_FILES) {\n const fullPath = path.join(cwd, file);\n try {\n await fs.access(fullPath);\n configPath = fullPath;\n break;\n } catch {\n // File doesn't exist, continue\n }\n }\n\n if (!configPath) {\n throw new Error(\n `Could not find strapi.config.ts in ${cwd}. Run \"npx strapi2front init\" first.`\n );\n }\n\n // Load config using jiti (supports TypeScript)\n const jiti = createJiti(import.meta.url, {\n interopDefault: true,\n });\n\n try {\n const rawConfig = await jiti.import(configPath);\n const config = (rawConfig as { default?: unknown }).default || rawConfig;\n\n // Resolve environment variables\n const resolvedConfig = resolveEnvVariables(config as Record<string, unknown>);\n\n // Validate with Zod\n return configSchema.parse(resolvedConfig);\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Failed to load config: ${error.message}`);\n }\n throw error;\n }\n}\n\n/**\n * Resolve environment variables in config\n */\nfunction resolveEnvVariables(config: Record<string, unknown>): Record<string, unknown> {\n const resolved: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(config)) {\n if (typeof value === 'string') {\n // Check if it's a process.env reference that wasn't resolved\n if (value.startsWith('process.env.')) {\n const envKey = value.replace('process.env.', '');\n resolved[key] = process.env[envKey] || value;\n } else {\n resolved[key] = value;\n }\n } else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n resolved[key] = resolveEnvVariables(value as Record<string, unknown>);\n } else {\n resolved[key] = value;\n }\n }\n\n // Also check for token from environment\n if (!resolved['token'] && process.env['STRAPI_TOKEN']) {\n resolved['token'] = process.env['STRAPI_TOKEN'];\n }\n\n return resolved;\n}\n","import type { StrapiSchema, ContentTypeSchema, ComponentSchema, StrapiLocale } from \"./types.js\";\n\ninterface ContentTypesApiResponse {\n data: ContentTypeSchema[];\n}\n\ninterface ComponentsApiResponse {\n data: ComponentSchema[];\n}\n\ntype LocalesApiResponse = StrapiLocale[];\n\n/**\n * Normalize URL by removing trailing slashes\n */\nfunction normalizeUrl(url: string): string {\n return url.replace(/\\/+$/, '');\n}\n\n/**\n * Normalize API prefix (ensure it starts with / and has no trailing slash)\n */\nfunction normalizeApiPrefix(prefix: string): string {\n let normalized = prefix.trim();\n if (!normalized.startsWith('/')) {\n normalized = '/' + normalized;\n }\n return normalized.replace(/\\/+$/, '');\n}\n\n/**\n * Fetch content type schema from Strapi\n */\nexport async function fetchSchema(\n url: string,\n token?: string,\n apiPrefix: string = \"/api\"\n): Promise<StrapiSchema> {\n const baseUrl = normalizeUrl(url);\n const prefix = normalizeApiPrefix(apiPrefix);\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (token) {\n headers[\"Authorization\"] = `Bearer ${token}`;\n }\n\n // Fetch content types from content-type-builder API\n const contentTypesResponse = await fetch(\n `${baseUrl}${prefix}/content-type-builder/content-types`,\n { headers }\n );\n\n if (!contentTypesResponse.ok) {\n const error = await contentTypesResponse.text();\n throw new Error(\n `Failed to fetch content types: ${contentTypesResponse.status} ${error}`\n );\n }\n\n const contentTypesData = await contentTypesResponse.json() as ContentTypesApiResponse;\n\n // Fetch components\n const componentsResponse = await fetch(\n `${baseUrl}${prefix}/content-type-builder/components`,\n { headers }\n );\n\n if (!componentsResponse.ok) {\n const error = await componentsResponse.text();\n throw new Error(\n `Failed to fetch components: ${componentsResponse.status} ${error}`\n );\n }\n\n const componentsData = await componentsResponse.json() as ComponentsApiResponse;\n\n // Fetch locales (i18n)\n let locales: StrapiLocale[] = [];\n try {\n const localesResponse = await fetch(\n `${baseUrl}${prefix}/i18n/locales`,\n { headers }\n );\n\n if (localesResponse.ok) {\n locales = await localesResponse.json() as LocalesApiResponse;\n }\n } catch {\n // i18n might not be enabled, continue without locales\n }\n\n // Filter out internal Strapi content types\n const userContentTypes = (contentTypesData.data || []).filter((ct) => {\n return (\n ct.uid.startsWith(\"api::\") &&\n !ct.uid.includes(\"strapi::\") &&\n !ct.uid.includes(\"admin::\")\n );\n });\n\n return {\n contentTypes: userContentTypes,\n components: componentsData.data || [],\n locales,\n };\n}\n\nexport type StrapiVersion = \"v4\" | \"v5\";\n\nexport interface VersionDetectionResult {\n detected: StrapiVersion | null;\n confidence: \"high\" | \"medium\" | \"low\";\n reason: string;\n}\n\n/**\n * Detect Strapi version by analyzing content types unique to each version.\n *\n * V5-exclusive content types:\n * - plugin::content-releases.release\n * - plugin::content-releases.release-action\n * - plugin::review-workflows.workflow\n * - plugin::review-workflows.workflow-stage\n * - admin::session\n *\n * V5-exclusive attributes:\n * - entryDocumentId in plugin::content-releases.release-action\n */\nexport async function detectStrapiVersion(\n url: string,\n token?: string,\n apiPrefix: string = \"/api\"\n): Promise<VersionDetectionResult> {\n const baseUrl = normalizeUrl(url);\n const prefix = normalizeApiPrefix(apiPrefix);\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (token) {\n headers[\"Authorization\"] = `Bearer ${token}`;\n }\n\n try {\n const response = await fetch(\n `${baseUrl}${prefix}/content-type-builder/content-types`,\n { headers }\n );\n\n if (!response.ok) {\n return {\n detected: null,\n confidence: \"low\",\n reason: `Could not fetch schema: ${response.status}`,\n };\n }\n\n const data = await response.json() as ContentTypesApiResponse;\n const contentTypes = data.data || [];\n\n if (contentTypes.length === 0) {\n return {\n detected: null,\n confidence: \"low\",\n reason: \"No content types found in schema\",\n };\n }\n\n // V5-exclusive content type UIDs\n const v5ExclusiveUids = [\n \"plugin::content-releases.release\",\n \"plugin::content-releases.release-action\",\n \"plugin::review-workflows.workflow\",\n \"plugin::review-workflows.workflow-stage\",\n \"admin::session\",\n ];\n\n // Check for V5-exclusive content types\n const contentTypeUids = contentTypes.map((ct) => ct.uid);\n const foundV5ContentType = v5ExclusiveUids.find((uid) => contentTypeUids.includes(uid));\n\n if (foundV5ContentType) {\n return {\n detected: \"v5\",\n confidence: \"high\",\n reason: `Found v5-exclusive content type: ${foundV5ContentType}`,\n };\n }\n\n // Check for entryDocumentId attribute (v5 exclusive)\n const releaseAction = contentTypes.find((ct) => ct.uid === \"plugin::content-releases.release-action\");\n if (releaseAction?.schema?.attributes && \"entryDocumentId\" in releaseAction.schema.attributes) {\n return {\n detected: \"v5\",\n confidence: \"high\",\n reason: \"Found entryDocumentId attribute (Strapi v5 feature)\",\n };\n }\n\n // If none of the v5-exclusive features are found, it's v4\n // Check for typical v4 content types to confirm\n const hasV4AdminTypes = contentTypeUids.includes(\"admin::permission\") &&\n contentTypeUids.includes(\"admin::user\") &&\n !contentTypeUids.includes(\"admin::session\");\n\n if (hasV4AdminTypes) {\n return {\n detected: \"v4\",\n confidence: \"high\",\n reason: \"No v5-exclusive content types found, confirmed v4 structure\",\n };\n }\n\n // Fallback - assume v4 since it's the legacy version\n return {\n detected: \"v4\",\n confidence: \"medium\",\n reason: \"Could not find v5-specific features, assuming v4\",\n };\n } catch (error) {\n return {\n detected: null,\n confidence: \"low\",\n reason: error instanceof Error ? error.message : \"Detection failed\",\n };\n }\n}\n\n/**\n * Test connection to Strapi\n */\nexport async function testConnection(\n url: string,\n token?: string,\n apiPrefix: string = \"/api\"\n): Promise<{ success: boolean; message: string; version?: string }> {\n const baseUrl = normalizeUrl(url);\n const prefix = normalizeApiPrefix(apiPrefix);\n\n try {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (token) {\n headers[\"Authorization\"] = `Bearer ${token}`;\n }\n\n // Try to fetch content types (requires authentication)\n const response = await fetch(\n `${baseUrl}${prefix}/content-type-builder/content-types`,\n { headers }\n );\n\n if (response.ok) {\n return {\n success: true,\n message: \"Connected successfully\",\n };\n }\n\n if (response.status === 401) {\n return {\n success: false,\n message: \"Invalid or missing API token\",\n };\n }\n\n if (response.status === 403) {\n return {\n success: false,\n message: \"API token does not have permission to access content-type-builder\",\n };\n }\n\n return {\n success: false,\n message: `Failed to connect: ${response.status} ${response.statusText}`,\n };\n } catch (error) {\n return {\n success: false,\n message: error instanceof Error ? error.message : \"Connection failed\",\n };\n }\n}\n","import type {\n StrapiSchema,\n ParsedSchema,\n CollectionType,\n SingleType,\n ComponentType,\n Attribute,\n} from './types.js';\n\n/**\n * Parse raw Strapi schema into a structured format for code generation\n */\nexport function parseSchema(schema: StrapiSchema): ParsedSchema {\n const collections: CollectionType[] = [];\n const singles: SingleType[] = [];\n\n for (const ct of schema.contentTypes) {\n const { kind, singularName, pluralName, displayName, description, draftAndPublish, pluginOptions, attributes } = ct.schema;\n\n // Filter out system attributes\n const filteredAttributes = filterSystemAttributes(attributes);\n\n // Check if i18n is enabled for this content type\n const localized = Boolean(\n pluginOptions?.i18n &&\n typeof pluginOptions.i18n === 'object' &&\n (pluginOptions.i18n as Record<string, unknown>).localized\n );\n\n if (kind === 'collectionType') {\n collections.push({\n uid: ct.uid,\n apiId: ct.apiID,\n singularName,\n pluralName,\n displayName,\n description,\n draftAndPublish: draftAndPublish ?? false,\n localized,\n attributes: filteredAttributes,\n });\n } else if (kind === 'singleType') {\n singles.push({\n uid: ct.uid,\n apiId: ct.apiID,\n singularName,\n displayName,\n description,\n draftAndPublish: draftAndPublish ?? false,\n localized,\n attributes: filteredAttributes,\n });\n }\n }\n\n // Parse components\n const components: ComponentType[] = schema.components.map((comp) => {\n const filteredAttributes = filterSystemAttributes(comp.schema.attributes);\n\n return {\n uid: comp.uid,\n category: comp.category,\n name: comp.apiId,\n displayName: comp.schema.displayName,\n description: comp.schema.description,\n attributes: filteredAttributes,\n };\n });\n\n // Sort alphabetically\n collections.sort((a, b) => a.singularName.localeCompare(b.singularName));\n singles.sort((a, b) => a.singularName.localeCompare(b.singularName));\n components.sort((a, b) => a.name.localeCompare(b.name));\n\n return {\n collections,\n singles,\n components,\n };\n}\n\n/**\n * Filter out system attributes that shouldn't be in the generated types\n */\nfunction filterSystemAttributes(\n attributes: Record<string, Attribute>\n): Record<string, Attribute> {\n const SYSTEM_ATTRIBUTES = [\n 'createdBy',\n 'updatedBy',\n 'localizations',\n 'locale',\n ];\n\n const filtered: Record<string, Attribute> = {};\n\n for (const [key, value] of Object.entries(attributes)) {\n // Skip system attributes\n if (SYSTEM_ATTRIBUTES.includes(key)) {\n continue;\n }\n\n // Skip private attributes\n if (value.private === true) {\n continue;\n }\n\n filtered[key] = value;\n }\n\n return filtered;\n}\n\n/**\n * Get the API endpoint name for a content type\n */\nexport function getApiEndpoint(singularName: string, pluralName: string): string {\n return pluralName || `${singularName}s`;\n}\n\n/**\n * Convert uid to a valid TypeScript identifier\n */\nexport function uidToIdentifier(uid: string): string {\n // api::post.post -> Post\n // api::blog-post.blog-post -> BlogPost\n const parts = uid.split('.');\n const name = parts[parts.length - 1] || uid;\n\n return toPascalCase(name);\n}\n\n/**\n * Convert string to PascalCase\n */\nexport function toPascalCase(str: string): string {\n return str\n .split(/[-_\\s]+/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n}\n\n/**\n * Convert string to camelCase\n */\nexport function toCamelCase(str: string): string {\n const pascal = toPascalCase(str);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\n/**\n * Convert string to kebab-case\n */\nexport function toKebabCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/config/schema.ts","../src/config/loader.ts","../src/schema/fetcher.ts","../src/schema/parser.ts"],"names":["loadEnv"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\n/**\n * Configuration schema for strapi2front\n */\nexport const configSchema = z.object({\n // Strapi connection\n url: z.string().url(\"url must be a valid URL\"),\n token: z.string().min(1, \"token is required\").optional(),\n\n // API prefix (default: \"/api\", can be customized in Strapi config)\n apiPrefix: z.string().default(\"/api\"),\n\n // Strapi version\n strapiVersion: z.enum([\"v4\", \"v5\"]).default(\"v5\"),\n\n // Output format: 'typescript' for .ts files, 'jsdoc' for .js with JSDoc annotations\n outputFormat: z.enum([\"typescript\", \"jsdoc\"]).default(\"typescript\"),\n\n // Module type: 'esm' for ES Modules, 'commonjs' for CommonJS (auto-detected if not specified)\n moduleType: z.enum([\"esm\", \"commonjs\"]).optional(),\n\n // Output paths\n output: z.object({\n path: z.string().default(\"src/strapi\"),\n types: z.string().default(\"types\"),\n services: z.string().default(\"services\"),\n actions: z.string().optional().default(\"actions/strapi\"),\n // Output structure: 'by-layer' (types/, services/, actions/) or 'by-feature' (article/, category/)\n structure: z.enum([\"by-layer\", \"by-feature\"]).default(\"by-feature\"),\n }).default({}),\n\n // Features to generate\n features: z.object({\n types: z.boolean().default(true),\n services: z.boolean().default(true),\n actions: z.boolean().default(true),\n }).default({}),\n\n // Advanced options\n options: z.object({\n // Include draft content types\n includeDrafts: z.boolean().default(false),\n // Generate strict types (no optional fields)\n strictTypes: z.boolean().default(false),\n }).default({}),\n});\n\nexport type StrapiIntegrateConfig = z.infer<typeof configSchema>;\nexport type StrapiIntegrateConfigInput = z.input<typeof configSchema>;\n","import { createJiti } from 'jiti';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { config as loadEnv } from 'dotenv';\nimport { configSchema, type StrapiIntegrateConfig, type StrapiIntegrateConfigInput } from './schema.js';\n\nconst CONFIG_FILES = ['strapi.config.ts', 'strapi.config.js', 'strapi.config.mjs'];\n\n/**\n * Helper function for defining configuration with type safety\n */\nexport function defineConfig(config: StrapiIntegrateConfigInput): StrapiIntegrateConfig {\n return configSchema.parse(config);\n}\n\n/**\n * Load configuration from strapi.config.ts\n */\nexport async function loadConfig(cwd: string = process.cwd()): Promise<StrapiIntegrateConfig> {\n // Load environment variables from .env file (quiet to suppress dotenv logs)\n loadEnv({ path: path.join(cwd, '.env'), quiet: true });\n\n // Find config file\n let configPath: string | null = null;\n\n for (const file of CONFIG_FILES) {\n const fullPath = path.join(cwd, file);\n try {\n await fs.access(fullPath);\n configPath = fullPath;\n break;\n } catch {\n // File doesn't exist, continue\n }\n }\n\n if (!configPath) {\n throw new Error(\n `Could not find strapi.config.ts in ${cwd}. Run \"npx strapi2front init\" first.`\n );\n }\n\n // Load config using jiti (supports TypeScript)\n const jiti = createJiti(import.meta.url, {\n interopDefault: true,\n });\n\n try {\n const rawConfig = await jiti.import(configPath);\n const config = (rawConfig as { default?: unknown }).default || rawConfig;\n\n // Resolve environment variables\n const resolvedConfig = resolveEnvVariables(config as Record<string, unknown>);\n\n // Validate with Zod\n return configSchema.parse(resolvedConfig);\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Failed to load config: ${error.message}`);\n }\n throw error;\n }\n}\n\n/**\n * Resolve environment variables in config\n */\nfunction resolveEnvVariables(config: Record<string, unknown>): Record<string, unknown> {\n const resolved: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(config)) {\n if (typeof value === 'string') {\n // Check if it's a process.env reference that wasn't resolved\n if (value.startsWith('process.env.')) {\n const envKey = value.replace('process.env.', '');\n resolved[key] = process.env[envKey] || value;\n } else {\n resolved[key] = value;\n }\n } else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n resolved[key] = resolveEnvVariables(value as Record<string, unknown>);\n } else {\n resolved[key] = value;\n }\n }\n\n // Also check for token from environment\n if (!resolved['token'] && process.env['STRAPI_TOKEN']) {\n resolved['token'] = process.env['STRAPI_TOKEN'];\n }\n\n return resolved;\n}\n","import type { StrapiSchema, ContentTypeSchema, ComponentSchema, StrapiLocale } from \"./types.js\";\n\ninterface ContentTypesApiResponse {\n data: ContentTypeSchema[];\n}\n\ninterface ComponentsApiResponse {\n data: ComponentSchema[];\n}\n\ntype LocalesApiResponse = StrapiLocale[];\n\n/**\n * Normalize URL by removing trailing slashes\n */\nfunction normalizeUrl(url: string): string {\n return url.replace(/\\/+$/, '');\n}\n\n/**\n * Normalize API prefix (ensure it starts with / and has no trailing slash)\n */\nfunction normalizeApiPrefix(prefix: string): string {\n let normalized = prefix.trim();\n if (!normalized.startsWith('/')) {\n normalized = '/' + normalized;\n }\n return normalized.replace(/\\/+$/, '');\n}\n\n/**\n * Fetch content type schema from Strapi\n */\nexport async function fetchSchema(\n url: string,\n token?: string,\n apiPrefix: string = \"/api\"\n): Promise<StrapiSchema> {\n const baseUrl = normalizeUrl(url);\n const prefix = normalizeApiPrefix(apiPrefix);\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (token) {\n headers[\"Authorization\"] = `Bearer ${token}`;\n }\n\n // Fetch content types from content-type-builder API\n const contentTypesResponse = await fetch(\n `${baseUrl}${prefix}/content-type-builder/content-types`,\n { headers }\n );\n\n if (!contentTypesResponse.ok) {\n const error = await contentTypesResponse.text();\n throw new Error(\n `Failed to fetch content types: ${contentTypesResponse.status} ${error}`\n );\n }\n\n const contentTypesData = await contentTypesResponse.json() as ContentTypesApiResponse;\n\n // Fetch components\n const componentsResponse = await fetch(\n `${baseUrl}${prefix}/content-type-builder/components`,\n { headers }\n );\n\n if (!componentsResponse.ok) {\n const error = await componentsResponse.text();\n throw new Error(\n `Failed to fetch components: ${componentsResponse.status} ${error}`\n );\n }\n\n const componentsData = await componentsResponse.json() as ComponentsApiResponse;\n\n // Fetch locales (i18n)\n let locales: StrapiLocale[] = [];\n try {\n const localesResponse = await fetch(\n `${baseUrl}${prefix}/i18n/locales`,\n { headers }\n );\n\n if (localesResponse.ok) {\n locales = await localesResponse.json() as LocalesApiResponse;\n }\n } catch {\n // i18n might not be enabled, continue without locales\n }\n\n // Filter out internal Strapi content types\n const userContentTypes = (contentTypesData.data || []).filter((ct) => {\n return (\n ct.uid.startsWith(\"api::\") &&\n !ct.uid.includes(\"strapi::\") &&\n !ct.uid.includes(\"admin::\")\n );\n });\n\n return {\n contentTypes: userContentTypes,\n components: componentsData.data || [],\n locales,\n };\n}\n\nexport type StrapiVersion = \"v4\" | \"v5\";\n\nexport interface VersionDetectionResult {\n detected: StrapiVersion | null;\n confidence: \"high\" | \"medium\" | \"low\";\n reason: string;\n}\n\n/**\n * Detect Strapi version by analyzing content types unique to each version.\n *\n * V5-exclusive content types:\n * - plugin::content-releases.release\n * - plugin::content-releases.release-action\n * - plugin::review-workflows.workflow\n * - plugin::review-workflows.workflow-stage\n * - admin::session\n *\n * V5-exclusive attributes:\n * - entryDocumentId in plugin::content-releases.release-action\n */\nexport async function detectStrapiVersion(\n url: string,\n token?: string,\n apiPrefix: string = \"/api\"\n): Promise<VersionDetectionResult> {\n const baseUrl = normalizeUrl(url);\n const prefix = normalizeApiPrefix(apiPrefix);\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (token) {\n headers[\"Authorization\"] = `Bearer ${token}`;\n }\n\n try {\n const response = await fetch(\n `${baseUrl}${prefix}/content-type-builder/content-types`,\n { headers }\n );\n\n if (!response.ok) {\n return {\n detected: null,\n confidence: \"low\",\n reason: `Could not fetch schema: ${response.status}`,\n };\n }\n\n const data = await response.json() as ContentTypesApiResponse;\n const contentTypes = data.data || [];\n\n if (contentTypes.length === 0) {\n return {\n detected: null,\n confidence: \"low\",\n reason: \"No content types found in schema\",\n };\n }\n\n // V5-exclusive content type UIDs\n const v5ExclusiveUids = [\n \"plugin::content-releases.release\",\n \"plugin::content-releases.release-action\",\n \"plugin::review-workflows.workflow\",\n \"plugin::review-workflows.workflow-stage\",\n \"admin::session\",\n ];\n\n // Check for V5-exclusive content types\n const contentTypeUids = contentTypes.map((ct) => ct.uid);\n const foundV5ContentType = v5ExclusiveUids.find((uid) => contentTypeUids.includes(uid));\n\n if (foundV5ContentType) {\n return {\n detected: \"v5\",\n confidence: \"high\",\n reason: `Found v5-exclusive content type: ${foundV5ContentType}`,\n };\n }\n\n // Check for entryDocumentId attribute (v5 exclusive)\n const releaseAction = contentTypes.find((ct) => ct.uid === \"plugin::content-releases.release-action\");\n if (releaseAction?.schema?.attributes && \"entryDocumentId\" in releaseAction.schema.attributes) {\n return {\n detected: \"v5\",\n confidence: \"high\",\n reason: \"Found entryDocumentId attribute (Strapi v5 feature)\",\n };\n }\n\n // If none of the v5-exclusive features are found, it's v4\n // Check for typical v4 content types to confirm\n const hasV4AdminTypes = contentTypeUids.includes(\"admin::permission\") &&\n contentTypeUids.includes(\"admin::user\") &&\n !contentTypeUids.includes(\"admin::session\");\n\n if (hasV4AdminTypes) {\n return {\n detected: \"v4\",\n confidence: \"high\",\n reason: \"No v5-exclusive content types found, confirmed v4 structure\",\n };\n }\n\n // Fallback - assume v4 since it's the legacy version\n return {\n detected: \"v4\",\n confidence: \"medium\",\n reason: \"Could not find v5-specific features, assuming v4\",\n };\n } catch (error) {\n return {\n detected: null,\n confidence: \"low\",\n reason: error instanceof Error ? error.message : \"Detection failed\",\n };\n }\n}\n\n/**\n * Test connection to Strapi\n */\nexport async function testConnection(\n url: string,\n token?: string,\n apiPrefix: string = \"/api\"\n): Promise<{ success: boolean; message: string; version?: string }> {\n const baseUrl = normalizeUrl(url);\n const prefix = normalizeApiPrefix(apiPrefix);\n\n try {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (token) {\n headers[\"Authorization\"] = `Bearer ${token}`;\n }\n\n // Try to fetch content types (requires authentication)\n const response = await fetch(\n `${baseUrl}${prefix}/content-type-builder/content-types`,\n { headers }\n );\n\n if (response.ok) {\n return {\n success: true,\n message: \"Connected successfully\",\n };\n }\n\n if (response.status === 401) {\n return {\n success: false,\n message: \"Invalid or missing API token\",\n };\n }\n\n if (response.status === 403) {\n return {\n success: false,\n message: \"API token does not have permission to access content-type-builder\",\n };\n }\n\n return {\n success: false,\n message: `Failed to connect: ${response.status} ${response.statusText}`,\n };\n } catch (error) {\n return {\n success: false,\n message: error instanceof Error ? error.message : \"Connection failed\",\n };\n }\n}\n","import type {\n StrapiSchema,\n ParsedSchema,\n CollectionType,\n SingleType,\n ComponentType,\n Attribute,\n} from './types.js';\n\n/**\n * Parse raw Strapi schema into a structured format for code generation\n */\nexport function parseSchema(schema: StrapiSchema): ParsedSchema {\n const collections: CollectionType[] = [];\n const singles: SingleType[] = [];\n\n for (const ct of schema.contentTypes) {\n const { kind, singularName, pluralName, displayName, description, draftAndPublish, pluginOptions, attributes } = ct.schema;\n\n // Filter out system attributes\n const filteredAttributes = filterSystemAttributes(attributes);\n\n // Check if i18n is enabled for this content type\n const localized = Boolean(\n pluginOptions?.i18n &&\n typeof pluginOptions.i18n === 'object' &&\n (pluginOptions.i18n as Record<string, unknown>).localized\n );\n\n if (kind === 'collectionType') {\n collections.push({\n uid: ct.uid,\n apiId: ct.apiID,\n singularName,\n pluralName,\n displayName,\n description,\n draftAndPublish: draftAndPublish ?? false,\n localized,\n attributes: filteredAttributes,\n });\n } else if (kind === 'singleType') {\n singles.push({\n uid: ct.uid,\n apiId: ct.apiID,\n singularName,\n displayName,\n description,\n draftAndPublish: draftAndPublish ?? false,\n localized,\n attributes: filteredAttributes,\n });\n }\n }\n\n // Parse components\n const components: ComponentType[] = schema.components.map((comp) => {\n const filteredAttributes = filterSystemAttributes(comp.schema.attributes);\n\n return {\n uid: comp.uid,\n category: comp.category,\n name: comp.apiId,\n displayName: comp.schema.displayName,\n description: comp.schema.description,\n attributes: filteredAttributes,\n };\n });\n\n // Sort alphabetically\n collections.sort((a, b) => a.singularName.localeCompare(b.singularName));\n singles.sort((a, b) => a.singularName.localeCompare(b.singularName));\n components.sort((a, b) => a.name.localeCompare(b.name));\n\n return {\n collections,\n singles,\n components,\n };\n}\n\n/**\n * Filter out system attributes that shouldn't be in the generated types\n */\nfunction filterSystemAttributes(\n attributes: Record<string, Attribute>\n): Record<string, Attribute> {\n const SYSTEM_ATTRIBUTES = [\n 'createdBy',\n 'updatedBy',\n 'localizations',\n 'locale',\n ];\n\n const filtered: Record<string, Attribute> = {};\n\n for (const [key, value] of Object.entries(attributes)) {\n // Skip system attributes\n if (SYSTEM_ATTRIBUTES.includes(key)) {\n continue;\n }\n\n // Skip private attributes\n if (value.private === true) {\n continue;\n }\n\n filtered[key] = value;\n }\n\n return filtered;\n}\n\n/**\n * Get the API endpoint name for a content type\n */\nexport function getApiEndpoint(singularName: string, pluralName: string): string {\n return pluralName || `${singularName}s`;\n}\n\n/**\n * Convert uid to a valid TypeScript identifier\n */\nexport function uidToIdentifier(uid: string): string {\n // api::post.post -> Post\n // api::blog-post.blog-post -> BlogPost\n const parts = uid.split('.');\n const name = parts[parts.length - 1] || uid;\n\n return toPascalCase(name);\n}\n\n/**\n * Convert string to PascalCase\n */\nexport function toPascalCase(str: string): string {\n return str\n .split(/[-_\\s]+/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n}\n\n/**\n * Convert string to camelCase\n */\nexport function toCamelCase(str: string): string {\n const pascal = toPascalCase(str);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\n/**\n * Convert string to kebab-case\n */\nexport function toKebabCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n"]}
|