UNPKG

@api-platform/client-generator

Version:

Generate apps built with Next, Nuxt, Quasar, React, React Native, Vue or Vuetify for any API documented using Hydra or OpenAPI

179 lines (158 loc) 4.87 kB
import chalk from "chalk"; import BaseGenerator from "./BaseGenerator"; export default class extends BaseGenerator { constructor(params) { super(params); this.registerTemplates(`vue/`, [ // modules "store/modules/foo/index.js", "store/modules/foo/create/actions.js", "store/modules/foo/create/index.js", "store/modules/foo/create/mutation_types.js", "store/modules/foo/create/mutations.js", "store/modules/foo/delete/actions.js", "store/modules/foo/delete/index.js", "store/modules/foo/delete/mutation_types.js", "store/modules/foo/delete/mutations.js", "store/modules/foo/list/actions.js", "store/modules/foo/list/index.js", "store/modules/foo/list/mutation_types.js", "store/modules/foo/list/mutations.js", "store/modules/foo/show/actions.js", "store/modules/foo/show/index.js", "store/modules/foo/show/mutation_types.js", "store/modules/foo/show/mutations.js", "store/modules/foo/update/actions.js", "store/modules/foo/update/index.js", "store/modules/foo/update/mutation_types.js", "store/modules/foo/update/mutations.js", // components "components/foo/Create.vue", "components/foo/Form.vue", "components/foo/List.vue", "components/foo/Update.vue", "components/foo/Show.vue", // routes "router/foo.js", // error "error/SubmissionError.js", // utils "utils/fetch.js", ]); } help(resource) { const titleLc = resource.title.toLowerCase(); console.log( 'Code for the "%s" resource type has been generated!', resource.title ); console.log( "Paste the following definitions in your application configuration:" ); console.log( chalk.green(` //import routes import ${titleLc}Routes from './router/${titleLc}'; // Add routes to VueRouter const router = new VueRouter({ // ... routes: [ ...${titleLc}Routes, ] }); // Add the modules in the store import ${titleLc} from './store/modules/${titleLc}/'; export const store = new Vuex.Store({ // ... modules: { ${titleLc} } }); `) ); } generate(api, resource, dir) { const lc = resource.title.toLowerCase(); const titleUcFirst = resource.title.charAt(0).toUpperCase() + resource.title.slice(1); const context = { title: resource.title, name: resource.name, lc, uc: resource.title.toUpperCase(), fields: resource.readableFields, formFields: this.buildFields(resource.writableFields), hydraPrefix: this.hydraPrefix, titleUcFirst, }; // Create directories // These directories may already exist for (let dir of [ `${dir}/config`, `${dir}/error`, `${dir}/router`, `${dir}/utils`, ]) { this.createDir(dir, false); } for (let dir of [ `${dir}/store/modules/${lc}`, `${dir}/store/modules/${lc}/create`, `${dir}/store/modules/${lc}/delete`, `${dir}/store/modules/${lc}/list`, `${dir}/store/modules/${lc}/show`, `${dir}/store/modules/${lc}/update`, `${dir}/components/${lc}`, ]) { this.createDir(dir); } for (let pattern of [ // modules "store/modules/%s/index.js", "store/modules/%s/create/actions.js", "store/modules/%s/create/index.js", "store/modules/%s/create/mutation_types.js", "store/modules/%s/create/mutations.js", "store/modules/%s/delete/actions.js", "store/modules/%s/delete/index.js", "store/modules/%s/delete/mutation_types.js", "store/modules/%s/delete/mutations.js", "store/modules/%s/list/actions.js", "store/modules/%s/list/index.js", "store/modules/%s/list/mutation_types.js", "store/modules/%s/list/mutations.js", "store/modules/%s/show/actions.js", "store/modules/%s/show/index.js", "store/modules/%s/show/mutation_types.js", "store/modules/%s/show/mutations.js", "store/modules/%s/update/actions.js", "store/modules/%s/update/index.js", "store/modules/%s/update/mutation_types.js", "store/modules/%s/update/mutations.js", // components "components/%s/Create.vue", "components/%s/Form.vue", "components/%s/List.vue", "components/%s/Update.vue", "components/%s/Show.vue", // routes "router/%s.js", ]) { this.createFileFromPattern(pattern, dir, lc, context); } // error this.createFile( "error/SubmissionError.js", `${dir}/error/SubmissionError.js`, context, false ); this.createEntrypoint(api.entrypoint, `${dir}/config/entrypoint.js`); this.createFile( "utils/fetch.js", `${dir}/utils/fetch.js`, { hydraPrefix: this.hydraPrefix }, false ); } }