UNPKG

nuxt-crud-cli

Version:

CLI tool to generate API resources for Nuxt CRUD

63 lines (54 loc) 1.9 kB
import fs from 'fs'; import path from 'path'; import { pluralize } from '../utils/string.js'; /** * Generate resource files (resource, collection, types) */ export async function generateResourceFiles( resourcesDir: string, resourceName: string, resourcePascalName: string ): Promise<void> { const pluralResourceName = pluralize(resourceName); // Generate types.ts const typesPath = path.join(resourcesDir, 'types.ts'); const typesContent = `export interface ${resourcePascalName}ResourceProps { id: number; name: string; // Add more properties as needed } `; fs.writeFileSync(typesPath, typesContent); // Generate resource.ts const resourcePath = path.join(resourcesDir, `${resourceName}Resource.ts`); const resourceContent = `import type { ${resourcePascalName}ResourceProps } from "./types"; export function use${resourcePascalName}Resource(${resourceName}: ${resourcePascalName}ResourceProps) { const toArray = () => { return { id: ${resourceName}.id, name: ${resourceName}.name, // Add more properties as needed }; }; return { toArray, }; }`; fs.writeFileSync(resourcePath, resourceContent); // Generate collection.ts const collectionPath = path.join(resourcesDir, `${resourceName}Collection.ts`); const collectionContent = `import { use${resourcePascalName}Resource } from './${resourceName}Resource'; import type { ${resourcePascalName}ResourceProps } from './types'; interface ${resourcePascalName}CollectionProps { data: ${resourcePascalName}ResourceProps[]; } export function use${resourcePascalName}Collection(collection: ${resourcePascalName}CollectionProps) { const toArray = () => { return collection.data.map((${resourceName}) => use${resourcePascalName}Resource(${resourceName}).toArray()); }; return { toArray, }; }`; fs.writeFileSync(collectionPath, collectionContent); }