From 859013ecc129ec8d8600031d2830bcb0c987c24b Mon Sep 17 00:00:00 2001 From: Prou Yann Date: Wed, 23 Sep 2020 21:25:44 +0200 Subject: [PATCH] Feat: remove support admin-on-rest --- README.md | 4 + package.json | 4 +- src/generators.js | 3 - src/generators/AdminOnRestGenerator.js | 69 ------------- src/generators/AdminOnRestGenerator.test.js | 47 --------- src/index.js | 2 +- templates/admin-on-rest/components/foo.js | 106 -------------------- templates/admin-on-rest/config/foo.js | 49 --------- templates/admin-on-rest/resource-import.js | 1 - templates/admin-on-rest/resources/foo.js | 15 --- 10 files changed, 7 insertions(+), 293 deletions(-) delete mode 100644 src/generators/AdminOnRestGenerator.js delete mode 100644 src/generators/AdminOnRestGenerator.test.js delete mode 100644 templates/admin-on-rest/components/foo.js delete mode 100644 templates/admin-on-rest/config/foo.js delete mode 100644 templates/admin-on-rest/resource-import.js delete mode 100644 templates/admin-on-rest/resources/foo.js diff --git a/README.md b/README.md index 3ac2c6c5..dac69834 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,13 @@ [![npm version](https://badge.fury.io/js/%40api-platform%2Fclient-generator.svg)](https://badge.fury.io/js/%40api-platform%2Fclient-generator) API Platform Client Generator is a generator to scaffold app with Create-Retrieve-Update-Delete features for any API exposing a [Hydra](http://www.hydra-cg.com/spec/latest/core/) or [OpenAPI](https://www.openapis.org/) documentation for: + * Quasar Framework + * Next.js * React/Redux * React Native + * TypeScript Interfaces * Vue.js + * Vuetify.js Works especially well with APIs built with the [API Platform](https://api-platform.com) framework. diff --git a/package.json b/package.json index 405cca81..5dddfdef 100644 --- a/package.json +++ b/package.json @@ -53,9 +53,9 @@ "eslint-check": "eslint --print-config .eslintrc.js | eslint-config-prettier-check", "build": "babel src -d lib --ignore '*.test.js'", "watch": "babel --watch src -d lib --ignore '*.test.js'", - "test-gen": "rm -rf ./tmp && yarn build && ./lib/index.js https://demo.api-platform.com ./tmp/react && ./lib/index.js https://demo.api-platform.com ./tmp/react-native -g react-native && ./lib/index.js https://demo.api-platform.com ./tmp/vue -g vue && ./lib/index.js https://demo.api-platform.com ./tmp/admin-on-rest -g admin-on-rest", + "test-gen": "rm -rf ./tmp && yarn build && ./lib/index.js https://demo.api-platform.com ./tmp/react && ./lib/index.js https://demo.api-platform.com ./tmp/react-native -g react-native && ./lib/index.js https://demo.api-platform.com ./tmp/vue -g vue", "test-gen-cs": "./node_modules/.bin/prettier --single-quote -l \"./tmp/react/**/*.{js,jsx,ts,tsx,json,css,scss,md}\"", - "test-gen-swagger": "rm -rf ./tmp && yarn build && ./lib/index.js https://demo.api-platform.com/docs.json ./tmp/react -f swagger && ./lib/index.js https://demo.api-platform.com/docs.json ./tmp/react-native -g react-native -f swagger && ./lib/index.js https://demo.api-platform.com/docs.json ./tmp/vue -g vue -f swagger && ./lib/index.js https://demo.api-platform.com/docs.json ./tmp/admin-on-rest -g admin-on-rest -f swagger", + "test-gen-swagger": "rm -rf ./tmp && yarn build && ./lib/index.js https://demo.api-platform.com/docs.json ./tmp/react -f swagger && ./lib/index.js https://demo.api-platform.com/docs.json ./tmp/react-native -g react-native -f swagger && ./lib/index.js https://demo.api-platform.com/docs.json ./tmp/vue -g vue -f swagger", "test-gen-env": "rm -rf ./tmp && yarn build && API_PLATFORM_CLIENT_GENERATOR_ENTRYPOINT=https://demo.api-platform.com API_PLATFORM_CLIENT_GENERATOR_OUTPUT=./tmp ./lib/index.js" }, "husky": { diff --git a/src/generators.js b/src/generators.js index 59aa934c..ee4c959c 100644 --- a/src/generators.js +++ b/src/generators.js @@ -1,4 +1,3 @@ -import AdminOnRestGenerator from "./generators/AdminOnRestGenerator"; import NextGenerator from "./generators/NextGenerator"; import NuxtGenerator from "./generators/NuxtGenerator"; import ReactGenerator from "./generators/ReactGenerator"; @@ -15,8 +14,6 @@ function wrap(cl) { export default function generators(generator = "react") { switch (generator) { - case "admin-on-rest": - return wrap(AdminOnRestGenerator); case "next": return wrap(NextGenerator); case "nuxt": diff --git a/src/generators/AdminOnRestGenerator.js b/src/generators/AdminOnRestGenerator.js deleted file mode 100644 index d3fec130..00000000 --- a/src/generators/AdminOnRestGenerator.js +++ /dev/null @@ -1,69 +0,0 @@ -import fs from "fs"; -import BaseGenerator from "./BaseGenerator"; -import handlebars from "handlebars"; -import hbh_comparison from "handlebars-helpers/lib/comparison"; - -export default class extends BaseGenerator { - constructor(params) { - super(params); - - this.registerTemplates(`admin-on-rest/`, [ - "components/foo.js", - "config/foo.js", - "resources/foo.js", - "resource-import.js" - ]); - - handlebars.registerHelper("compare", hbh_comparison.compare); - } - - help(resource) { - console.log( - 'Code for the "%s" resource type has been generated!', - resource.title - ); - } - - appendFile(template, dest, context = {}) { - fs.appendFileSync(dest, this.templates[template](context)); - } - - 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}/resources`, - `${dir}/components/` - ]) { - this.createDir(dir, false); - } - - for (let pattern of [ - "components/%s.js", - "config/%s.js", - "resources/%s.js" - ]) { - this.createFileFromPattern(pattern, dir, lc, context); - } - - this.appendFile("resource-import.js", `${dir}/resource-import.js`, context); - - this.createEntrypoint(api.entrypoint, `${dir}/config/entrypoint.js`); - } -} diff --git a/src/generators/AdminOnRestGenerator.test.js b/src/generators/AdminOnRestGenerator.test.js deleted file mode 100644 index d53ac5a6..00000000 --- a/src/generators/AdminOnRestGenerator.test.js +++ /dev/null @@ -1,47 +0,0 @@ -import { Api, Resource, Field } from "@api-platform/api-doc-parser/lib"; -import fs from "fs"; -import tmp from "tmp"; -import AdminOnRestGenerator from "./AdminOnRestGenerator"; - -test("Generate a Admin On Rest app", () => { - const generator = new AdminOnRestGenerator({ - hydraPrefix: "hydra:", - templateDirectory: `${__dirname}/../../templates` - }); - const tmpobj = tmp.dirSync({ unsafeCleanup: true }); - - const fields = [ - new Field("bar", { - id: "http://schema.org/url", - range: "http://www.w3.org/2001/XMLSchema#string", - reference: null, - required: true, - description: "An URL" - }) - ]; - const resource = new Resource("abc", "http://example.com/foos", { - id: "abc", - title: "abc", - readableFields: fields, - writableFields: fields - }); - const api = new Api("http://example.com", { - entrypoint: "http://example.com:8080", - title: "My API", - resources: [resource] - }); - generator.generate(api, resource, tmpobj.name); - - [ - "/config/entrypoint.js", - "/resources/abc.js", - "/resource-import.js" - ].forEach(file => expect(fs.existsSync(tmpobj.name + file)).toBe(true)); - - ["/components/abc.js", "/config/abc.js"].forEach(file => { - expect(fs.existsSync(tmpobj.name + file)).toBe(true); - expect(fs.readFileSync(tmpobj.name + file, "utf8")).toMatch(/bar/); - }); - - tmpobj.removeCallback(); -}); diff --git a/src/index.js b/src/index.js index b8e1a761..7eb74656 100755 --- a/src/index.js +++ b/src/index.js @@ -28,7 +28,7 @@ program .option("--bearer [bearer]", "Token for bearer auth (Hydra only)") .option( "-g, --generator [generator]", - 'The generator to use, one of "react", "react-native", "vue", "admin-on-rest", "typescript", "next", "nuxt"', + 'The generator to use, one of "next", "nuxt", "quasar", "react", "react-native", "typescript", "vue", "vuetify"', "react" ) .option( diff --git a/templates/admin-on-rest/components/foo.js b/templates/admin-on-rest/components/foo.js deleted file mode 100644 index f8c588ca..00000000 --- a/templates/admin-on-rest/components/foo.js +++ /dev/null @@ -1,106 +0,0 @@ -import React from 'react'; -import {CardActions} from 'material-ui/Card'; -import { - List, Datagrid, Edit, Create, Show, SimpleShowLayout, SimpleForm, - DateField, TextField, - TextInput, DateInput, - EditButton,ShowButton, DeleteButton, RefreshButton, ListButton, CreateButton -} from 'admin-on-rest'; -import {configList, configEdit, configCreate, configShow} from '../config/{{{lc}}}'; - -export const {{title}}List = (props) => ( - } - {...props} - > - - {{#each fields}} - {configList.{{name}} && } - {{/each}} - {configList.buttons.show && } - {configList.buttons.edit && } - {configList.buttons.delete && } - - -); - -const {{title}}Title = ({record}) => { - return {{title}} {record && record.id ? ` : ${record.id}` : ''}; -}; - -export const {{title}}Edit = (props) => ( - } - title={<{{title}}Title />} - {...props} - > - - {{#each formFields}} - {{#compare type "==" "dateTime" }} - {configEdit.{{name}} && } - {{else}} - {configEdit.{{name}} && } - {{/compare}} - {{/each}} - - -); - -export const {{title}}Create = (props) => ( - - - {{#each formFields}} - {{#compare type "==" "dateTime" }} - {configCreate.{{name}} && } - {{else}} - {configCreate.{{name}} && } - {{/compare}} - {{/each}} - - -); - -export const {{title}}Show = (props) => ( - } - title={<{{title}}Title />} - {...props} - > - - {{#each fields}} - {configShow.{{name}} && } - {{/each}} - - -); - -const cardActionStyle = { - zIndex: 2, - display: 'inline-block', - float: 'right', -}; - -const {{title}}ListActions = ({basePath, data}) => ( - - {configList.buttons.create && } - {configList.buttons.refresh && } - -); - -const {{title}}ShowActions = ({basePath, data}) => ( - - {configShow.buttons.edit && } - {configShow.buttons.list && } - {configShow.buttons.delete && } - {configShow.buttons.refresh && } - -); - -const {{title}}EditActions = ({basePath, data}) => ( - - {configShow.buttons.show && } - {configShow.buttons.list && } - {configShow.buttons.delete && } - {configShow.buttons.refresh && } - -); diff --git a/templates/admin-on-rest/config/foo.js b/templates/admin-on-rest/config/foo.js deleted file mode 100644 index 4be827a6..00000000 --- a/templates/admin-on-rest/config/foo.js +++ /dev/null @@ -1,49 +0,0 @@ -export const configList = { - '@id': true, -{{#each fields}} - {{{name}}}: true, -{{/each}} - buttons: { - show: true, - edit: true, - create: true, - refresh: true, - delete: true, - } -} - -export const configEdit = { - '@id': true, -{{#each fields}} - {{{name}}}: true, -{{/each}} - buttons: { - show: true, - list: true, - delete: true, - refresh: true, - } -} - -export const configCreate = { - '@id': true, -{{#each fields}} - {{{name}}}: true, -{{/each}} - buttons: { - list: true, - } -} - -export const configShow = { - '@id': true, -{{#each fields}} - {{{name}}}: true, -{{/each}} - buttons: { - edit: true, - list: true, - delete: true, - refresh: true, - } -} diff --git a/templates/admin-on-rest/resource-import.js b/templates/admin-on-rest/resource-import.js deleted file mode 100644 index 12cfce9c..00000000 --- a/templates/admin-on-rest/resource-import.js +++ /dev/null @@ -1 +0,0 @@ -export { default as {{lc}} } from './resources/{{{lc}}}'; diff --git a/templates/admin-on-rest/resources/foo.js b/templates/admin-on-rest/resources/foo.js deleted file mode 100644 index d007e023..00000000 --- a/templates/admin-on-rest/resources/foo.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react' -import { Resource, Delete } from 'admin-on-rest' -import { {{title}}Create, {{title}}Edit, {{title}}List, {{title}}Show } from '../components/{{{lc}}}'; - -export default ( - -);