frgen 0.4.1 → 0.4.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/lib/mui.gen.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./_virtual/_rollupPluginBabelHelpers.js"),n=require("fs"),t=require("path"),a=require("json-schema-to-typescript"),o=function(e){return e.replace(/[-_]+(.)?/g,(function(e,n){return n?n.toUpperCase():""})).replace(/^[A-Z]/,(function(e){return e.toLowerCase()}))},r=function(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").toLowerCase()},c=function(e){return e.replace(/[_\-\s]+/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").toLowerCase().split(" ").map((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})).join("")},i=function(e){return e.replace(/[_\-\s]+/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").toLowerCase().split(" ").filter(Boolean).map((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})).join(" ")},s=function(e){return["string"].includes(e)},l=function(e){return["integer","number"].includes(e)},u=function(e){return["boolean"].includes(e)};exports.generateCreatePage=function(e,a){try{var o=e.title,s="create.page.tsx",l=(c(o),t.join(process.cwd(),"src","pages",r(o),s)),u=t.dirname(l),m='\nimport PageTemplate from "@components/templates/PageTemplate";\nimport Box from "@mui/material/Box";\nimport Form from "./partial/Form";\nimport Toolbar from "@mui/material/Toolbar";\nimport useMutation from "ezhooks/lib/useMutation";\nimport useZod from "@hooks/useZod";\nimport { input'.concat(c(o),'Schema } from "@schemas/').concat(r(o),'.schema";\nimport { post').concat(c(o),' } from "@services/').concat(r(o),'.service";\nimport { useNavigate } from "react-router";\nimport { useSnackbar } from "@contexts/SnackbarContext";\nimport { input').concat(c(o),' } from "@commons/dummy";\n\nconst Page = () => {\n const navigate = useNavigate();\n const { setSnackbar } = useSnackbar();\n\n const mutation = useMutation({\n defaultValue: input').concat(c(o),",\n });\n\n const validation = useZod({\n data: mutation.data,\n schema: input").concat(c(o),"Schema,\n });\n\n const onSubmit = () => {\n const validated = validation.validated();\n if (validated) {\n mutation.send({\n service: post").concat(c(o),',\n onSuccess: () => {\n setSnackbar("Data has been successfully added.");\n mutation.reset();\n const timer = setTimeout(() => {\n navigate("/').concat(r(o),'");\n clearTimeout(timer);\n }, 2000);\n },\n });\n }\n };\n\n return (\n <PageTemplate title="Create ').concat(i(o),'" onBack={() => navigate(-1)}>\n <Box\n sx={{\n overflow: "hidden auto",\n minHeight: "100%",\n position: "relative",\n }}\n >\n <Form mutation={mutation} validation={validation} onSubmit={onSubmit} />\n\n <Toolbar />\n <Toolbar />\n </Box>\n </PageTemplate>\n );\n};\n\nexport default Page;\n ');if(a){var p=t.join(process.cwd(),a);if(n.existsSync(p)){var d=n.readFileSync(p,"utf-8");m=new Function("".concat(d," return createTemplate;"))()({modelName:o,properties:e})}}n.existsSync(u)||n.mkdirSync(u,{recursive:!0}),n.writeFile(l,m,(function(e){e?console.error("err: ",e):console.log("file ".concat(o," ").concat(s," has been created"))}))}catch(e){console.log("err::",e)}},exports.generateDummy=function(a){try{var o=a.title,i="".concat(r(o),".schema"),m=t.join(process.cwd(),"src","commons","dummy.ts"),p="Input".concat(c(o),"Schema"),d="import {".concat(p,"} from '@schemas/").concat(i,"';"),v=Object.entries(a.properties).filter((function(n){return"id"!==e.slicedToArray(n,1)[0]})).map((function(n){var t=e.slicedToArray(n,2),a=t[0],o=t[1],r="''",c=Array.isArray(o.type)?o.type:[o.type];return c.forEach((function(e,n){var t;0==n&&(r=void 0!==o.default?null!==(t=o.default)&&void 0!==t?t:"":c.includes("null")?null:o.enum?"'".concat(o.enum[0],"'"):s(e)?"''":l(e)?0:!!u(e)||"''")})),"".concat(a,":").concat(r)})),g="\n \nexport const input".concat(c(o),":").concat(p," = {\n").concat(v.join(",\n"),"\n};\n"),f=n.readFileSync(m,"utf8");f.includes(d)||(f=d+"\n"+f),f.includes(g)||(f+="\n"+g),n.writeFileSync(m,f)}catch(e){console.log("err::",e)}},exports.generateForm=function(a){var o=arguments.length>2?arguments[2]:void 0;try{var m=a.title,p="".concat(r(m),".schema"),d="Form.tsx",v=t.join(process.cwd(),"src","pages",r(m),"partial",d),g=t.dirname(v),f="Input".concat(c(m),"Schema"),h="import {".concat(f,"} from '@schemas/").concat(p,"';"),y=[],b=function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(o>1)return[];for(var r=[],c=0,m=Object.entries(n);c<m.length;c++){var p=e.slicedToArray(m[c],2),d=p[0],v=p[1];if("id"!==d){d=t?"".concat(t,".").concat(d):d;var g,f="",h=Array.isArray(v.type)?v.type:[v.type],y=e.createForOfIteratorHelper(h);try{for(y.s();!(g=y.n()).done;){var b,x=g.value;if(v.format&&["date-time","date"].includes(v.format))f=' \n <TextField\n label="'.concat(i(d),'"\n name="').concat(d,'"\n type="date"\n variant="standard"\n placeholder="Please ').concat(i(d).toLowerCase(),'"\n required={').concat((null!==(b=a.required)&&void 0!==b?b:[]).includes(d),'}\n value={mutation.value("').concat(d,'", "")}\n onChange={(e) => mutation.setData({').concat(o>0?"['".concat(d,"']"):d,': e.target.value })}\n slotProps={{ inputLabel: { shrink: true } }}\n disabled={mutation.processing}\n error={validation.error("').concat(d,'")}\n helperText={validation.message("').concat(d,'")}\n />');else if(v.enum)f='\n <InputSelect\n label="'.concat(i(d),'"\n items={[').concat(v.enum.map((function(e){return'{ primary: "'.concat(i(e),'", value: "').concat(e,'" }')})).join(", "),']}\n variant="standard"\n name="item"\n required\n selectText="Choose one"\n value={mutation.value("').concat(d,'", "00")}\n onChange={(e) => mutation.setData({').concat(o>0?"['".concat(d,"']"):d,': e.target.value === "00" ? "" : e.target.value })}\n slotProps={{\n inputLabel: { shrink: true },\n select: { native: true },\n }}\n disabled={mutation.processing}\n />');else if(s(x)){var S;f=' \n <TextField\n label="'.concat(i(d),'"\n name="').concat(d,'"\n variant="standard"\n placeholder="Please ').concat(i(d).toLowerCase(),'"\n required={').concat((null!==(S=a.required)&&void 0!==S?S:[]).includes(d),'}\n value={mutation.value("').concat(d,'", "")}\n onChange={(e) => mutation.setData({').concat(o>0?"['".concat(d,"']"):d,': e.target.value })}\n slotProps={{ inputLabel: { shrink: true } }}\n disabled={mutation.processing}\n error={validation.error("').concat(d,'")}\n helperText={validation.message("').concat(d,'")}\n />')}else if(l(x)){var T;f=' \n <TextField\n label="'.concat(i(d),'"\n name="').concat(d,'"\n type="number"\n variant="standard"\n placeholder="Please ').concat(i(d).toLowerCase(),'"\n required={').concat((null!==(T=a.required)&&void 0!==T?T:[]).includes(d),'}\n value={mutation.value("').concat(d,'", "")}\n onChange={(e) => mutation.setData({').concat(o>0?"['".concat(d,"']"):d,': +e.target.value })}\n slotProps={{ inputLabel: { shrink: true } }}\n disabled={mutation.processing}\n error={validation.error("').concat(d,'")}\n helperText={validation.message("').concat(d,'")}\n />')}else f=u(x)?'\n <InputSelect\n label="'.concat(i(d),'"\n items={[{ primary: "Yes", value: true },{ primary: "No", value: false }]}\n variant="standard"\n name="item"\n required\n selectText="Choose one"\n value={mutation.value("').concat(d,'", "00")}\n onChange={(e) => mutation.setData({').concat(o>0?"['".concat(d,"']"):d,': e.target.value === "00" ? "" : e.target.value })}\n slotProps={{\n inputLabel: { shrink: true },\n select: { native: true },\n }}\n disabled={mutation.processing}\n />'):""}}catch(e){y.e(e)}finally{y.f()}r.push(f)}}return r}(a.properties),x='\nimport Stack from "@mui/material/Stack";\nimport LoadComponent from "@components/base/LoadComponent/LoadComponent";\nimport Divider from "@mui/material/Divider";\nimport Typography from "@mui/material/Typography";\nimport Button from "@mui/material/Button";\nimport InputSelect from "@components/base/Input/InputSelect";\nimport { UseZod } from "@hooks/useZod";\nimport { UseMutation } from "ezhooks/lib/useMutation";\n'.concat(y.length?"import {".concat(y.join(", "),"} from '@commons/dummy';"):"","\n").concat(h,'\n\nconst TextField = LoadComponent(() => import("@mui/material/TextField"));\n\ntype Props = {\n mutation: UseMutation<').concat(f,">;\n validation: UseZod<").concat(f,'>;\n onSubmit: () => void;\n};\nconst Form = ({ mutation, validation, onSubmit }: Props) => {\n return (\n <Stack\n direction={"column"}\n spacing={2.5}\n sx={{ margin: "0px auto", width: "50%", p: 3 }}\n >\n <Stack spacing={1}>\n <Typography component={"div"} variant="h6">\n Form ').concat(i(m),"\n </Typography>\n\n <Divider />\n </Stack>\n\n ").concat(b.join(" \n"),'\n\n <Stack direction={"row"}>\n <div>\n <Button\n loading={mutation.processing}\n disabled={mutation.processing}\n size="small"\n onClick={onSubmit}\n >\n Save\n </Button>\n </div>\n </Stack>\n </Stack>\n );\n};\n\nexport default Form;');if(o){var S=t.join(process.cwd(),o);if(n.existsSync(S)){var T=n.readFileSync(S,"utf-8");x=new Function("".concat(T," return formTemplate;"))()({modelName:m,properties:a})}}n.existsSync(g)||n.mkdirSync(g,{recursive:!0}),n.writeFile(v,x,(function(e){e?console.error("err: ",e):console.log("file ".concat(m," ").concat(d," has been created"))}))}catch(e){console.log("err::",e)}},exports.generateIndexPage=function(a,o){try{var m=a.title,p="index.page.tsx",d=c(m),v="".concat(r(m),".service"),g=c(m),f=t.join(process.cwd(),"src","pages",r(m),p),h=t.dirname(f),y=[],b=Object.entries(a.properties).map((function(n){var t=e.slicedToArray(n,2),a=t[0],o=t[1],r=Array.isArray(o.type)?o.type.at(0):o.type,c={key:a,type:r},m=['label: "'.concat(i(a),'"'),'sortKey: "'.concat(a,'"'),"value: (v) => v.".concat(a)],p=['type: "text"','value: table.query("'.concat(a,'", "")'),'options: { placeholder: "Find '.concat(i(a),'..." }'),"onChange: (e) => table.setQuery({ ".concat(a,": e.target.value })")];return s(r)||(l(r)?p[3]="onChange: (e) => table.setQuery({ ".concat(a,": +e.target.value })"):u(r)&&(p[0]='type: "select"',p[1]='value: table.query("'.concat(a,'", "00")'),p[3]="onChange: (e) => {table.setQuery({ ".concat(a,': e.target.value === "00" ? "" : e.target.value })}'),p.splice(1,0,'items: [{ primary: "Yes", value: true },{ primary: "No", value: false }]'))),o.format&&["date","date-time"].includes(o.format)&&(p[0]='type: "date"',p=p.filter((function(e,n){return 2!==n}))),o.enum&&(p[0]='type: "select"',p[1]='value: table.query("'.concat(a,'", "00")'),p[3]="onChange: (e) => {table.setQuery({ ".concat(a,': e.target.value === "00" ? "" : e.target.value })}'),p.splice(1,0,"items: [".concat(o.enum.map((function(e){return'{ primary: "'.concat(i(e),'", value: "').concat(e,'" }')})).join(", "),"]")),c.enum=o.enum),m.push("filter:{".concat(p.join(", "),"}")),y.push(c),"{\n ".concat(m.join(", "),"\n }")})),x='\nimport React from "react";\nimport PageTemplate from "@components/templates/PageTemplate";\nimport DataTablePage from "@components/base/DataTable/DataTablePage";\nimport Dropdown from "@components/base/Dropdown/Dropdown";\nimport useTable from "ezhooks/lib/useTable";\nimport { get'.concat(g,", delete").concat(g,' } from "@services/').concat(v,'";\n\nimport { getPagination } from "@utils/table";\nimport { useNavigate } from "react-router";\nimport { useAlert } from "@contexts/AlertContext";\nimport { useSnackbar } from "@contexts/SnackbarContext";\n\nconst Page = () => {\n const navigate = useNavigate();\n const alert = useAlert();\n const { setSnackbar } = useSnackbar();\n\n const table = useTable({\n service: get').concat(g,',\n selector: (resp) => resp.data,\n total: (resp) => resp.total,\n replaceUrl: true,\n pagination: {\n startPage: 0,\n },\n });\n\n const onClickEdit = (e: React.MouseEvent<HTMLLIElement, MouseEvent>) => {\n const value = e.currentTarget.value;\n navigate(`/edit/${value}`);\n };\n\n const onClickView = (e: React.MouseEvent<HTMLLIElement, MouseEvent>) => {\n const value = e.currentTarget.value;\n navigate(`/view/${value}`);\n };\n\n const onClickDelete = (e: React.MouseEvent<HTMLLIElement, MouseEvent>) => {\n const value = e.currentTarget.value;\n alert.set({\n open: true,\n title: "Delete Confirmation",\n message:\n "Are you sure you want to delete this item? This action cannot be undone.",\n type: "warning",\n confirm: {\n onClick: () => {\n alert.set({ loading: true });\n delete').concat(g,'({ params: { id: value } })\n .then(() => {\n setSnackbar("Data has been successfully deleted.");\n alert.reset();\n table.reload();\n })\n .catch((e) => {\n setSnackbar(e?.message, { severity: "error" });\n })\n .finally(() => {\n alert.set({ loading: false });\n });\n },\n },\n });\n };\n\n return (\n <PageTemplate title="').concat(d,' Page" onReload={table.reload}>\n <DataTablePage\n tableProps={{ size: "small" }}\n loading={table.loading}\n onOrder={table.onSort}\n order={table.order}\n orderBy={table.orderBy}\n column={[\n ').concat(b.join(", "),',\n {\n label: "",\n value: (v) => (\n <Dropdown\n menu={[\n { text: "View", value: v.id, onClick: onClickView },\n { text: "Edit", value: v.id, onClick: onClickEdit },\n { text: "Delete", value: v.id, onClick: onClickDelete },\n ]}\n />\n ),\n head: {\n padding: "checkbox",\n },\n },\n ]}\n data={table.data}\n pagination={getPagination(table.pagination)}\n />\n </PageTemplate>\n );\n};\n\nexport default Page;');if(o){var S=t.join(process.cwd(),o);if(n.existsSync(S)){var T=n.readFileSync(S,"utf-8");x=new Function("".concat(T," return indexTemplate;"))()({modelName:m,columns:y})}}n.existsSync(h)||n.mkdirSync(h,{recursive:!0}),n.writeFile(f,x,(function(e){e?console.error("err: ",e):console.log("file ".concat(m," ").concat(p," has been created"))}))}catch(e){console.log("err::",e)}},exports.generateRoute=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];try{var a="router.tsx",o=[{page:"Page",filename:"index.page",url:""},{page:"ViewPage",filename:"view.page",url:"/view/:id"},{page:"CreatePage",filename:"create.page",url:"/create"},{page:"Update",filename:"update.page",url:"/update/:id"}],i=[],s=[],l=t.join(process.cwd(),"src",a),u=t.dirname(l);e.forEach((function(e){o.forEach((function(n){i.push("const ".concat(c(e)).concat(n.page,' = LoadComponent(() => import("@pages/').concat(r(e),"/").concat(n.filename,'"));')),s.push('{ path: "'.concat(r(e)).concat(n.url,'", element: <').concat(c(e)).concat(n.page," /> }"))}))}));var m='\nimport { createBrowserRouter } from "react-router";\nimport { loader } from "@services/auth.service";\nimport LoadComponent from "@components/base/LoadComponent/LoadComponent";\n\nconst AppLayouts = LoadComponent(() => import("@components/layouts/AppLayout"));\nconst GuestLayout = LoadComponent(\n () => import("@components/layouts/GuestLayout")\n);\n\nconst NotFoundPage = LoadComponent(() => import("@pages/error/PageNotFound"));\nconst SignInPage = LoadComponent(() => import("@pages/auth/LoginPage"));\nconst RegisterPage = LoadComponent(() => import("@pages/auth/RegisterPage"));\nconst VerificationPage = LoadComponent(\n () => import("@pages/auth/VerificationPage")\n);\n\n'.concat(i.join(" \n"),'\n\nconst router = createBrowserRouter(\n [\n {\n path: "/login",\n element: <SignInPage />,\n },\n {\n element: <GuestLayout />,\n children: [\n { path: "/register", element: <RegisterPage /> },\n { path: "/verification", element: <VerificationPage /> },\n ],\n },\n {\n id: "root",\n path: "/",\n loader,\n element: <AppLayouts />,\n hydrateFallbackElement: <span>loading...</span>,\n children: [\n ').concat(s.join(", \n"),'\n ],\n },\n {\n path: "*",\n element: <NotFoundPage />,\n },\n ],\n {\n future: {\n v7_relativeSplatPath: true,\n v7_partialHydration: true,\n v7_skipActionErrorRevalidation: true,\n v7_fetcherPersist: true,\n v7_startTransition: true,\n },\n }\n);\n\nexport default router;\n\n ');n.existsSync(u)||n.mkdirSync(u,{recursive:!0}),n.writeFile(l,m,(function(e){e?console.error("err: ",e):console.log("file ".concat(a," has been created"))}))}catch(e){console.log("err::",e)}},exports.generateService=function(e){try{var a=e.title,i="".concat(r(a),".service.ts"),s=o(a),l=r(a),u=c(a),m=t.join(process.cwd(),"src","services",i),p=t.dirname(m),d="\nimport { ".concat(u,' } from "@typings/model";\nimport { EventSend } from "ezhooks";\nimport * as utils from "ezhooks/lib/utils";\n\nconst baseUrl = import.meta.env.VITE_APP_BASE_API_URL;\n\nexport const ').concat(s,"Url = {\n index: `${baseUrl}/").concat(l,"`,\n view: `${baseUrl}/").concat(l,"/:id`,\n remove: `${baseUrl}/").concat(l,"/:id`,\n};\n\nexport const get").concat(u," = async (event: EventSend): Promise<HttpResponse<").concat(u,"[]>> => {\n let url = ").concat(s,"Url.index;\n const params = new URLSearchParams(event.params);\n if (params.size > 0) {\n url += ").concat("`?${params.toString()}`",";\n }\n \n const resp = await fetch(url, {\n signal: event.ctr?.signal,\n });\n \n return resp.json();\n};\n\nexport const get").concat(u,"ID = (id: number) => async (event: EventSend): Promise<HttpResponse<").concat(u,">> => {\n const res = await fetch(utils.route(").concat(s,"Url.view, { id }), {\n signal: event.ctr?.signal,\n });\n return res.json();\n };\n\nexport const post").concat(u," = async (event: EventSend): Promise<HttpResponse<any>> => {\n const res = await fetch(").concat(s,'Url.index, {\n method: "post",\n signal: event.ctr?.signal,\n headers: {\n "content-type": "application/json",\n },\n body: JSON.stringify(event.data()),\n });\n return res.json();\n};\n\nexport const put').concat(u," = async (event: EventSend): Promise<HttpResponse<any>> => {\n const res = await fetch(").concat(s,'Url.index, {\n method: "put",\n signal: event.ctr?.signal,\n headers: {\n "content-type": "application/json",\n },\n body: JSON.stringify(event.data()),\n });\n return res.json();\n};\n\nexport const delete').concat(u," = async (event: EventSend) => {\n return fetch(utils.route(").concat(s,'Url.remove, { id: event.params.id }), {\n method: "delete",\n signal: event.ctr?.signal,\n });\n};\n ');n.existsSync(p)||n.mkdirSync(p,{recursive:!0}),n.writeFile(m,d,(function(e){e?console.error("err: ",e):console.log("file ".concat(i," has been created"))}))}catch(e){console.log("err::",e)}},exports.generateUpdatePage=function(e,a){try{var o=e.title,s="update.page.tsx",l=(c(o),t.join(process.cwd(),"src","pages",r(o),s)),u=t.dirname(l),m='\nimport React from "react";\nimport PageTemplate from "@components/templates/PageTemplate";\nimport Box from "@mui/material/Box";\nimport Form from "./partial/Form";\nimport Toolbar from "@mui/material/Toolbar";\nimport useMutation from "ezhooks/lib/useMutation";\nimport useZod from "@hooks/useZod";\nimport { input'.concat(c(o),'Schema } from "@schemas/').concat(r(o),'.schema";\nimport { put').concat(c(o),", get").concat(c(o),'ID } from "@services/').concat(r(o),'.service";\nimport { useNavigate, useParams } from "react-router";\nimport { useSnackbar } from "@contexts/SnackbarContext";\nimport { input').concat(c(o),' } from "@commons/dummy";\n\nconst Page = () => {\n const { id } = useParams();\n const navigate = useNavigate();\n const { setSnackbar } = useSnackbar();\n\n const mutation = useMutation({\n defaultValue: input').concat(c(o),",\n });\n\n const validation = useZod({\n data: mutation.data,\n schema: input").concat(c(o),"Schema(z).extend({ id: z.number() }),\n });\n\n const onSubmit = () => {\n const validated = validation.validated();\n if (validated) {\n mutation.send({\n service: put").concat(c(o),',\n onSuccess: () => {\n setSnackbar("Your changes have been saved successfully.");\n mutation.reset();\n const timer = setTimeout(() => {\n navigate("/').concat(r(o),'");\n clearTimeout(timer);\n }, 2000);\n },\n });\n }\n };\n\n const fetchData = () => {\n mutation.send({\n service: get').concat(c(o),'ID(+id),\n onSuccess: (resp) => {\n mutation.setData(resp.data);\n },\n });\n };\n\n React.useEffect(() => {\n if (!id) return;\n fetchData();\n return () => {\n mutation.cancel();\n };\n }, [id]);\n\n return (\n <PageTemplate title="Update ').concat(i(o),'" onBack={() => navigate(-1)}>\n <Box\n sx={{\n overflow: "hidden auto",\n minHeight: "100%",\n position: "relative",\n }}\n >\n <Form mutation={mutation} validation={validation} onSubmit={onSubmit} />\n\n <Toolbar />\n <Toolbar />\n </Box>\n </PageTemplate>\n );\n};\n\nexport default Page;\n ');if(a){var p=t.join(process.cwd(),a);if(n.existsSync(p)){var d=n.readFileSync(p,"utf-8");m=new Function("".concat(d," return updateTemplate;"))()({modelName:o,properties:e})}}n.existsSync(u)||n.mkdirSync(u,{recursive:!0}),n.writeFile(l,m,(function(e){e?console.error("err: ",e):console.log("file ".concat(o," ").concat(s," has been created"))}))}catch(e){console.log("err::",e)}},exports.generateValidation=function(a){try{var o=a.title,i="".concat(r(o),".schema.ts"),m=[],p=t.join(process.cwd(),"src","schemas",i),d=t.dirname(p),v=Object.entries(a.properties).filter((function(n){return"id"!==e.slicedToArray(n,1)[0]})).map((function(n){var t=e.slicedToArray(n,2),o=t[0],i=t[1],p=["zod"];return(Array.isArray(i.type)?i.type:[i.type]).forEach((function(e,n){if(0==n){if(i.enum)p.push("enum([".concat(i.enum.map((function(e){return"'".concat(e,"'")})).join(", "),"])"));else if(s(e))p.push("string()");else if(l(e))p.push("number()");else if(u(e))p.push("boolean()");else if("array"===e){var t;if(null!==(t=i.items)&&void 0!==t&&t.$ref){var d,v=null===(d=i.items)||void 0===d?void 0:d.$ref.split("/").pop();m.push("import { input".concat(c(v),"Schema } from './").concat(r(v),".schema'")),p.push("array(input".concat(c(v),"Schema)"))}}else p.push("any()");a.required&&a.required.includes(o)&&s(e)&&p.push("nonempty()")}"null"===e&&(p.push("optional()"),p.push("nullish()"))})),void 0!==i.default&&(s(i.default)?p.push("default('".concat(i.default,"')")):p.push("default(".concat(i.default,")"))),"".concat(o,":").concat(p.join("."))})),g="input".concat(c(o),"Schema"),f='\nimport * as zod from "zod";\n'.concat(m.join(";\n"),"\n \nexport const ").concat(g," = zod.object({\n ").concat(v.map((function(e){return e})).join(",\n"),"\n});\n\nexport type ").concat(c(g)," = zod.infer<typeof ").concat(g,">;");n.existsSync(d)||n.mkdirSync(d,{recursive:!0}),n.writeFile(p,f,(function(e){e?console.error("err: ",e):console.log("file ".concat(o," ").concat(i," has been created"))}))}catch(e){console.log("err::",e)}},exports.generateViewPage=function(a,o){try{var s=a.title,l="view.page.tsx",u=c(s),m="".concat(r(s),".service"),p=c(s),d=t.join(process.cwd(),"src","pages",r(s),l),v=t.dirname(d),g=[],f=Object.entries(a.properties).map((function(n){var t=e.slicedToArray(n,2),a=t[0],o=t[1],r=['label: "'.concat(i(a),'"'),"value: (v) => v.".concat(a)],c={key:a,type:Array.isArray(o.type)?o.type.at(0):o.type};return o.enum&&(c.enum=o.enum),g.push(r),"{\n ".concat(r.join(", "),"\n }")})),h='\nimport React from "react";\nimport PageTemplate from "@components/templates/PageTemplate";\nimport TableView from "@components/base/Table/TableView";\nimport Box from "@mui/material/Box";\nimport Toolbar from "@mui/material/Toolbar"\n\nimport { get'.concat(p,"ID, delete").concat(p,' } from "@services/').concat(m,'";\nimport { useNavigate, useParams } from "react-router";\nimport { useAlert } from "@contexts/AlertContext";\nimport { useSnackbar } from "@contexts/SnackbarContext";\nimport useRequest from "ezhooks/lib/useRequest";\n\nconst Page = () => {\n const { id } = useParams();\n const navigate = useNavigate();\n const alert = useAlert();\n const { setSnackbar } = useSnackbar();\n\n const client = useRequest({ data: {} });\n\n const onClickEdit = () => {\n navigate(`/edit/${id}`);\n };\n\n const onClickDelete = () => {\n alert.set({\n open: true,\n title: "Delete Confirmation",\n message:\n "Are you sure you want to delete this item? This action cannot be undone.",\n type: "warning",\n confirm: {\n onClick: () => {\n alert.set({ loading: true });\n delete').concat(p,'({ params: { id: +id } })\n .then(() => {\n setSnackbar("Data has been successfully deleted.");\n alert.reset();\n const timer = setTimeout(() => {\n navigate("/example");\n clearTimeout(timer);\n }, 1500);\n })\n .catch((e) => {\n setSnackbar(e?.message, { severity: "error" });\n })\n .finally(() => {\n alert.set({ loading: false });\n });\n },\n },\n });\n };\n\n const fetchData = () => {\n client.exec({\n service: get').concat(p,'ID(+id),\n onSuccess: (data) => {\n return data.data;\n },\n });\n };\n\n React.useEffect(() => {\n if (!id) return;\n fetchData();\n\n return () => {\n client.cancel();\n };\n }, [id]);\n\n return (\n <PageTemplate \n title="View ').concat(u,'" \n onBack={() => navigate(-1)}\n onUpdate={onClickEdit}\n onDelete={onClickDelete}\n onReload={fetchData}\n >\n <Box sx={{ overflow: "hidden auto", minHeight: "100%" }}>\n <TableView\n loading={client.loading}\n data={client.data}\n column={[').concat(f.join(", "),"]}\n />\n\n <Toolbar />\n <Toolbar />\n </Box>\n </PageTemplate>\n );\n};\n\nexport default Page;");if(o){var y=t.join(process.cwd(),o);if(n.existsSync(y)){var b=n.readFileSync(y,"utf-8");h=new Function("".concat(b," return viewTemplate;"))()({modelName:s,columns:g})}}n.existsSync(v)||n.mkdirSync(v,{recursive:!0}),n.writeFile(d,h,(function(e){e?console.error("err: ",e):console.log("file ".concat(s," ").concat(l," has been created"))}))}catch(e){console.log("err::",e)}},exports.isBoolean=u,exports.isNumber=l,exports.isString=s,exports.jsonToTS=function(e){a.compileFromFile(e,{inferStringEnumKeysFromValues:!0,bannerComment:"/* eslint-disable */\n/**\n* This file was automatically generated by json-schema-to-typescript.\n*.\n*/"}).then((function(e){var a=t.join(process.cwd(),"src","typings","model","index.d.ts"),o=t.dirname(a);n.existsSync(o)||n.mkdirSync(o,{recursive:!0}),n.writeFileSync(t.join(process.cwd(),"src","typings","model","index.d.ts"),e)})).catch(console.log)},exports.toCamelCase=o,exports.toKebabCase=r,exports.toPascalCase=c,exports.toPascalWithSpace=i;
2
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./_virtual/_rollupPluginBabelHelpers.js"),n=require("fs"),t=require("path"),r=require("json-schema-to-typescript"),o=require("url"),a=function(e){return e.replace(/[-_]+(.)?/g,(function(e,n){return n?n.toUpperCase():""})).replace(/^[A-Z]/,(function(e){return e.toLowerCase()}))},c=function(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").toLowerCase()},s=function(e){return e.replace(/[_\-\s]+/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").toLowerCase().split(" ").map((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})).join("")},i=function(e){return["string"].includes(e)},u=function(e){return["integer","number"].includes(e)},p=function(e){return["boolean"].includes(e)},l=function(e){n.existsSync(e)||n.mkdirSync(e,{recursive:!0})},m=function(e,t,r){n.writeFile(e,t,(function(n){n?console.error("❌ Error writing file ".concat(e,":"),n.message):console.log("✅ ".concat(r))}))},f=function(){var r=e.asyncToGenerator(e.regeneratorRuntime().mark((function r(a){var c,s;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a){e.next=2;break}return e.abrupt("return",null);case 2:if(c=t.join(process.cwd(),a),n.existsSync(c)){e.next=6;break}return console.warn("⚠️ Template not found: ".concat(a)),e.abrupt("return",null);case 6:return e.prev=6,e.next=9,import(o.pathToFileURL(c).href);case 9:return s=e.sent,e.abrupt("return",s.default);case 13:return e.prev=13,e.t0=e.catch(6),console.error("❌ Error loading template ".concat(a,":"),e.t0.message),e.abrupt("return",null);case 17:case"end":return e.stop()}}),r,null,[[6,13]])})));return function(e){return r.apply(this,arguments)}}(),d=function(n){return Object.entries(n).map((function(n){var t=e.slicedToArray(n,2),r=t[0],o=t[1],a={key:r,type:Array.isArray(o.type)?o.type[0]:o.type};return o.format&&["date","date-time"].includes(o.format)&&(a.format=o.format),o.enum&&(a.enum=o.enum),a}))},g=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(r,o,a){var s,i,u,p,g,v,y,h;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,s=r.title,i=r.properties,u="".concat(a,".page.tsx"),p=t.join(process.cwd(),"src","pages",c(s),u),g=t.dirname(p),v="",e.next=8,f(o);case 8:(y=e.sent)&&(h="index"===a||"view"===a?{modelName:s,columns:d(i)}:{modelName:s,jsonSchema:r},v=y(h)),l(g),m(p,v,"".concat(s," ").concat(u," created")),e.next=17;break;case 14:e.prev=14,e.t0=e.catch(0),console.error("❌ Error generating ".concat(a," page for ").concat(r.title,":"),e.t0.message);case 17:case"end":return e.stop()}}),n,null,[[0,14]])})));return function(e,t,r){return n.apply(this,arguments)}}(),v=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t,r){return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,g(t,r,"index");case 2:case"end":return e.stop()}}),n)})));return function(e,t){return n.apply(this,arguments)}}(),y=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t,r){return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,g(t,r,"view");case 2:case"end":return e.stop()}}),n)})));return function(e,t){return n.apply(this,arguments)}}(),h=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t,r){return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,g(t,r,"create");case 2:case"end":return e.stop()}}),n)})));return function(e,t){return n.apply(this,arguments)}}(),x=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t,r){return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,g(t,r,"update");case 2:case"end":return e.stop()}}),n)})));return function(e,t){return n.apply(this,arguments)}}(),w=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(r){var o,a,s,i,u,p,d,g=arguments;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=g.length>2?g[2]:void 0,e.prev=2,a=r.title,s="Form.tsx",i=t.join(process.cwd(),"src","pages",c(a),"partial",s),u=t.dirname(i),p="",e.next=10,f(o);case 10:(d=e.sent)&&(p=d({modelName:a,jsonSchema:r})),l(u),m(i,p,"".concat(a," ").concat(s," created")),e.next=19;break;case 16:e.prev=16,e.t0=e.catch(2),console.error("❌ Error generating form for ".concat(r.title,":"),e.t0.message);case 19:case"end":return e.stop()}}),n,null,[[2,16]])})));return function(e){return n.apply(this,arguments)}}(),b=function(){var r=e.asyncToGenerator(e.regeneratorRuntime().mark((function r(){var a,c,s,i;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=t.resolve("regen.config.js"),n.existsSync(a)){e.next=3;break}return e.abrupt("return",{templateDir:void 0});case 3:return e.prev=3,s=o.pathToFileURL(a).href,e.next=7,import(s);case 7:return i=e.sent,e.abrupt("return",JSON.parse(JSON.stringify(null!==(c=i.default)&&void 0!==c?c:{})));case 11:return e.prev=11,e.t0=e.catch(3),console.error("⚠️ Error loading config file:",e.t0.message),e.abrupt("return",{templateDir:void 0});case 15:case"end":return e.stop()}}),r,null,[[3,11]])})));return function(){return r.apply(this,arguments)}}();exports.generateCreatePage=h,exports.generateDummy=function(r){try{var o=r.title,a=r.properties,l=t.join(process.cwd(),"src","commons","dummy.ts"),m="Input".concat(s(o),"Schema"),f="import { ".concat(m," } from '@schemas/").concat(c(o),".schema';"),d=Object.entries(a).filter((function(n){return"id"!==e.slicedToArray(n,1)[0]})).map((function(n){var t,r=e.slicedToArray(n,2),o=r[0],a=r[1],c=Array.isArray(a.type)?a.type:[a.type],s=c[0];return t=void 0!==a.default?a.default:c.includes("null")?null:a.enum?"'".concat(a.enum[0],"'"):i(s)?"''":u(s)?0:!!p(s)||"''"," ".concat(o,": ").concat(t)})),g="\nexport const input".concat(s(o),": ").concat(m," = {\n").concat(d.join(",\n"),"\n};\n"),v=n.existsSync(l)?n.readFileSync(l,"utf8"):"";v.includes(f)||(v=f+"\n"+v),v.includes("input".concat(s(o)))||(v+="\n"+g),n.writeFileSync(l,v),console.log("✅ Dummy data for ".concat(o," created"))}catch(e){console.error("❌ Error generating dummy data for ".concat(r.title,":"),e.message)}},exports.generateForm=w,exports.generateIndexPage=v,exports.generateRoute=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];try{var n="router.tsx",r=t.join(process.cwd(),"src",n),o=t.dirname(r),a=[{suffix:"Page",file:"index.page",url:""},{suffix:"ViewPage",file:"view.page",url:"/view/:id"},{suffix:"CreatePage",file:"create.page",url:"/create"},{suffix:"UpdatePage",file:"update.page",url:"/update/:id"}],i=[],u=[];e.forEach((function(e){a.forEach((function(n){var t=n.suffix,r=n.file,o=n.url,a="".concat(s(e)).concat(t),p=c(e);i.push("const ".concat(a,' = LoadComponent(() => import("@pages/').concat(p,"/").concat(r,'"));')),u.push(' { path: "'.concat(p).concat(o,'", element: <').concat(a," /> }"))}))}));var p='import { createBrowserRouter } from "react-router";\nimport { loader } from "@services/auth.service";\nimport LoadComponent from "@components/base/LoadComponent/LoadComponent";\n\nconst AppLayouts = LoadComponent(() => import("@components/layouts/AppLayout"));\nconst GuestLayout = LoadComponent(() => import("@components/layouts/GuestLayout"));\nconst NotFoundPage = LoadComponent(() => import("@pages/error/PageNotFound"));\nconst SignInPage = LoadComponent(() => import("@pages/auth/LoginPage"));\nconst RegisterPage = LoadComponent(() => import("@pages/auth/RegisterPage"));\nconst VerificationPage = LoadComponent(() => import("@pages/auth/VerificationPage"));\n\n'.concat(i.join("\n"),'\n\nconst router = createBrowserRouter(\n [\n {\n path: "/login",\n element: <SignInPage />,\n },\n {\n element: <GuestLayout />,\n children: [\n { path: "/register", element: <RegisterPage /> },\n { path: "/verification", element: <VerificationPage /> },\n ],\n },\n {\n id: "root",\n path: "/",\n loader,\n element: <AppLayouts />,\n hydrateFallbackElement: <span>loading...</span>,\n children: [\n').concat(u.join(",\n"),'\n ],\n },\n {\n path: "*",\n element: <NotFoundPage />,\n },\n ],\n {\n future: {\n v7_relativeSplatPath: true,\n v7_partialHydration: true,\n v7_skipActionErrorRevalidation: true,\n v7_fetcherPersist: true,\n v7_startTransition: true,\n },\n }\n);\n\nexport default router;\n');l(o),m(r,p,"Router ".concat(n," created"))}catch(e){console.error("❌ Error generating routes:",e.message)}},exports.generateService=function(e){try{var n=e.title,r="".concat(c(n),".service.ts"),o=a(n),i=c(n),u=s(n),p=t.join(process.cwd(),"src","services",r),f=t.dirname(p),d="import { ".concat(u,' } from "@typings/model";\nimport { EventSend } from "ezhooks";\nimport * as utils from "ezhooks/lib/utils";\n\nconst baseUrl = import.meta.env.VITE_APP_BASE_API_URL;\n\nexport const ').concat(o,"Url = {\n index: `${baseUrl}/").concat(i,"`,\n view: `${baseUrl}/").concat(i,"/:id`,\n remove: `${baseUrl}/").concat(i,"/:id`,\n};\n\nexport const get").concat(u," = async (event: EventSend): Promise<HttpResponse<").concat(u,"[]>> => {\n let url = ").concat(o,"Url.index;\n const params = new URLSearchParams(event.params);\n \n if (params.size > 0) {\n url += `?${params.toString()}`;\n }\n \n const resp = await fetch(url, {\n signal: event.ctr?.signal,\n });\n \n return resp.json();\n};\n\nexport const get").concat(u,"ID = (id: number) => async (event: EventSend): Promise<HttpResponse<").concat(u,">> => {\n const res = await fetch(utils.route(").concat(o,"Url.view, { id }), {\n signal: event.ctr?.signal,\n });\n return res.json();\n};\n\nexport const post").concat(u," = async (event: EventSend): Promise<HttpResponse<any>> => {\n const res = await fetch(").concat(o,'Url.index, {\n method: "POST",\n signal: event.ctr?.signal,\n headers: {\n "Content-Type": "application/json",\n },\n body: JSON.stringify(event.data()),\n });\n return res.json();\n};\n\nexport const put').concat(u," = async (event: EventSend): Promise<HttpResponse<any>> => {\n const res = await fetch(").concat(o,'Url.index, {\n method: "PUT",\n signal: event.ctr?.signal,\n headers: {\n "Content-Type": "application/json",\n },\n body: JSON.stringify(event.data()),\n });\n return res.json();\n};\n\nexport const delete').concat(u," = async (event: EventSend) => {\n return fetch(utils.route(").concat(o,'Url.remove, { id: event.params.id }), {\n method: "DELETE",\n signal: event.ctr?.signal,\n });\n};\n');l(f),m(p,d,"Service ".concat(r," created"))}catch(n){console.error("❌ Error generating service for ".concat(e.title,":"),n.message)}},exports.generateUpdatePage=x,exports.generateValidation=function(n){try{var r=n.title,o=n.properties,a=n.required,f=void 0===a?[]:a,d="".concat(c(r),".schema.ts"),g=t.join(process.cwd(),"src","schemas",d),v=t.dirname(g),y=[],h=[];Object.entries(o).filter((function(n){return"id"!==e.slicedToArray(n,1)[0]})).forEach((function(n){var t=e.slicedToArray(n,2),r=t[0],o=t[1],a=["zod"],l=Array.isArray(o.type)?o.type:[o.type],m=l[0];if(o.enum)a.push("enum([".concat(o.enum.map((function(e){return"'".concat(e,"'")})).join(", "),"])"));else if(i(m))a.push("string()"),f.includes(r)&&a.push("nonempty()");else if(u(m))a.push("number()");else if(p(m))a.push("boolean()");else if("array"===m){var d;if(null!==(d=o.items)&&void 0!==d&&d.$ref){var g=o.items.$ref.split("/").pop();y.push("import { input".concat(s(g),"Schema } from './").concat(c(g),".schema'")),a.push("array(input".concat(s(g),"Schema)"))}else a.push("array(zod.any())")}else a.push("any()");if(l.includes("null")&&(a.push("optional()"),a.push("nullish()")),void 0!==o.default){var v=i(o.default)?"'".concat(o.default,"'"):o.default;a.push("default(".concat(v,")"))}h.push(" ".concat(r,": ").concat(a.join(".")))}));var x="input".concat(s(r),"Schema"),w='import * as zod from "zod";\n'.concat(y.join(";\n"),"\n\nexport const ").concat(x," = zod.object({\n").concat(h.join(",\n"),"\n});\n\nexport type ").concat(s(x)," = zod.infer<typeof ").concat(x,">;\n");l(v),m(g,w,"Validation ".concat(d," created"))}catch(e){console.error("❌ Error generating validation for ".concat(n.title,":"),e.message)}},exports.generateViewPage=y,exports.isBoolean=p,exports.isNumber=u,exports.isString=i,exports.jsonToTS=function(e){r.compileFromFile(e,{inferStringEnumKeysFromValues:!0,bannerComment:"/* eslint-disable */\n/**\n * This file was automatically generated by json-schema-to-typescript.\n * DO NOT MODIFY IT BY HAND.\n */"}).then((function(e){var r=t.join(process.cwd(),"src","typings","model","index.d.ts"),o=t.dirname(r);l(o),n.writeFileSync(r,e),console.log("✅ TypeScript types generated")})).catch((function(e){console.error("❌ Error generating TypeScript types:",e.message)}))},exports.loadRegenConfig=b,exports.toCamelCase=a,exports.toKebabCase=c,exports.toPascalCase=s;
package/lib/regen.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e=require("./_virtual/_rollupPluginBabelHelpers.js"),t=require("fs"),a=require("path"),r=require("./mui.gen.js"),n=e.toArray(process.argv);n[0],n[1];var i=n[2],o=n.slice(3);i||(console.error("❌ action undefined."),process.exit(1));var c=a.join(process.cwd(),"json-schema.json"),s=void 0,p=void 0,l=void 0,m=void 0,d=void 0,u=[];if(o.length>0){var f,g=e.createForOfIteratorHelper(o);try{for(g.s();!(f=g.n()).done;){var v=f.value.split("="),b=e.slicedToArray(v,2),j=b[0],h=b[1];"--mui"===j&&"mui","--file"===j&&(c=h),"--index-template"===j&&(s=h),"--form-template"===j&&(p=h),"--view-template"===j&&(l=h),"--create-template"===j&&(m=h),"--update-template"===j&&(d=h),"--template"===j&&(s="".concat(h,"/index-template.js"),p="".concat(h,"/form-template.js"),l="".concat(h,"/view-template.js"),m="".concat(h,"/create-template.js"),d="".concat(h,"/update-template.js")),"--ignore"===j&&(u=h.split(","))}}catch(e){g.e(e)}finally{g.f()}}"--help"===i&&(console.log("\n Usage: npx regen <action> [options]\n \n Actions:\n make:page Generate all pages and services\n make:dummy Generate dummy data\n make:route Generate route file\n make:validation Generate validation files\n make:form Generate form components\n --help Show this help message\n \n Options:\n --file=<path> Specify the path to the JSON schema file (default: ./json-schema.json)\n --mui Use MUI templates\n --index-template=<path> Specify custom index page template\n --form-template=<path> Specify custom form component template\n --view-template=<path> Specify custom view page template\n --create-template=<path> Specify custom create page template\n --update-template=<path> Specify custom update page template\n --template=<dir> Specify a directory containing all templates\n --ignore=<templates> Comma-separated list of templates to ignore (options: create, update, view, form, index, service, validation, dummy)\n "),process.exit(0)),function(){var a=e.asyncToGenerator(e.regeneratorRuntime().mark((function a(){var n,o;return e.regeneratorRuntime().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:a.prev=0,n=t.readFileSync(c,{encoding:"utf-8"}),o=JSON.parse(n),a.t0=i,a.next="make:page"===a.t0?6:"make:dummy"===a.t0?8:"make:route"===a.t0?10:"make:validation"===a.t0?12:"make:form"===a.t0?14:16;break;case 6:return Object.entries(o.definitions).forEach((function(t){var a=e.slicedToArray(t,2),n=a[0],i=a[1];u.includes("service")||r.generateService(e.objectSpread2({title:n},i)),u.includes("validation")||r.generateValidation(e.objectSpread2({title:n},i)),u.includes("form")||r.generateForm(e.objectSpread2({title:n},i),o.definitions,p),u.includes("index")||r.generateIndexPage(e.objectSpread2({title:n},i),s),u.includes("create")||r.generateCreatePage(e.objectSpread2({title:n},i),m),u.includes("update")||r.generateUpdatePage(e.objectSpread2({title:n},i),d),u.includes("view")||r.generateViewPage(e.objectSpread2({title:n},i),l),u.includes("dummy")||r.generateDummy(e.objectSpread2({title:n},i)),r.jsonToTS(c)})),a.abrupt("break",18);case 8:return Object.entries(o.definitions).forEach((function(t){var a=e.slicedToArray(t,2),n=a[0],i=a[1];r.generateDummy(e.objectSpread2({title:n},i))})),a.abrupt("break",18);case 10:return r.generateRoute(Object.entries(o.definitions).map((function(t){return e.slicedToArray(t,1)[0]}))),a.abrupt("break",18);case 12:return Object.entries(o.definitions).forEach((function(t){var a=e.slicedToArray(t,2),n=a[0],i=a[1];r.generateValidation(e.objectSpread2({title:n},i))})),a.abrupt("break",18);case 14:return Object.entries(o.definitions).forEach((function(t){var a=e.slicedToArray(t,2),n=a[0],i=a[1];r.generateForm(e.objectSpread2({title:n},i),o.definitions)})),a.abrupt("break",18);case 16:console.error("❌ Unknown action: ".concat(i)),process.exit(1);case 18:a.next=23;break;case 20:a.prev=20,a.t1=a.catch(0),console.error("❌ ERROR:",a.t1);case 23:return a.prev=23,a.finish(23);case 25:case"end":return a.stop()}}),a,null,[[0,20,23,25]])})));return function(){return a.apply(this,arguments)}}()();
2
+ "use strict";var e=require("./_virtual/_rollupPluginBabelHelpers.js"),t=require("fs"),a=require("path"),n=require("./mui.gen.js"),r=e.toArray(process.argv);r[0],r[1];var o=r[2],l=r.slice(3),i={file:a.join(process.cwd(),"json-schema.json"),indexTemplate:void 0,formTemplate:void 0,viewTemplate:void 0,createTemplate:void 0,updateTemplate:void 0,templateDir:void 0,ignoreTemplate:[]};function p(t){var a,n=e.objectSpread2({},i),r=e.createForOfIteratorHelper(t);try{for(r.s();!(a=r.n()).done;){var o=a.value.split("="),l=e.slicedToArray(o,2),p=l[0],m=l[1];switch(p){case"--file":n.file=m;break;case"--index-template":n.indexTemplate=m;break;case"--form-template":n.formTemplate=m;break;case"--view-template":n.viewTemplate=m;break;case"--create-template":n.createTemplate=m;break;case"--update-template":n.updateTemplate=m;break;case"--template":n.templateDir=m,n.indexTemplate="".concat(m,"/index-template.js"),n.formTemplate="".concat(m,"/form-template.js"),n.viewTemplate="".concat(m,"/view-template.js"),n.createTemplate="".concat(m,"/create-template.js"),n.updateTemplate="".concat(m,"/update-template.js");break;case"--ignore":n.ignoreTemplate=m.split(",")}}}catch(e){r.e(e)}finally{r.f()}return n}function m(t,a){var n=e.objectSpread2({},a);return null!=t&&t.templateDir&&!a.templateDir&&(n.indexTemplate||(n.indexTemplate="".concat(t.templateDir,"/index-template.js")),n.formTemplate||(n.formTemplate="".concat(t.templateDir,"/form-template.js")),n.viewTemplate||(n.viewTemplate="".concat(t.templateDir,"/view-template.js")),n.createTemplate||(n.createTemplate="".concat(t.templateDir,"/create-template.js")),n.updateTemplate||(n.updateTemplate="".concat(t.templateDir,"/update-template.js"))),null!=t&&t.ignoreTemplate&&0===a.ignoreTemplate.length&&(n.ignoreTemplate=t.ignoreTemplate),null!=t&&t.jsonSchemaFile&&a.file===i.file&&(n.file=t.jsonSchemaFile),n}function c(t,a,r,o){var l=e.objectSpread2({title:t},a);o.ignoreTemplate.includes("service")||n.generateService(l),o.ignoreTemplate.includes("validation")||n.generateValidation(l),o.ignoreTemplate.includes("form")||n.generateForm(l,r,o.formTemplate),o.ignoreTemplate.includes("index")||n.generateIndexPage(l,o.indexTemplate),o.ignoreTemplate.includes("create")||n.generateCreatePage(l,o.createTemplate),o.ignoreTemplate.includes("update")||n.generateUpdatePage(l,o.updateTemplate),o.ignoreTemplate.includes("view")||n.generateViewPage(l,o.viewTemplate),o.ignoreTemplate.includes("dummy")||n.generateDummy(l)}function s(e,t,a){return u.apply(this,arguments)}function u(){return u=e.asyncToGenerator(e.regeneratorRuntime().mark((function t(a,r,o){var l;return e.regeneratorRuntime().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:l=Object.entries(r.definitions),t.t0=a,t.next="make:page"===t.t0?4:"make:dummy"===t.t0?8:"make:route"===t.t0?11:"make:validation"===t.t0?14:"make:form"===t.t0?17:20;break;case 4:return l.forEach((function(t){var a=e.slicedToArray(t,2);c(a[0],a[1],r.definitions,o)})),n.jsonToTS(o.file),console.log("✅ Pages generated successfully!"),t.abrupt("break",22);case 8:return l.forEach((function(t){var a=e.slicedToArray(t,2),r=a[0],o=a[1];n.generateDummy(e.objectSpread2({title:r},o))})),console.log("✅ Dummy data generated successfully!"),t.abrupt("break",22);case 11:return n.generateRoute(l.map((function(t){return e.slicedToArray(t,1)[0]}))),console.log("✅ Routes generated successfully!"),t.abrupt("break",22);case 14:return l.forEach((function(t){var a=e.slicedToArray(t,2),r=a[0],o=a[1];n.generateValidation(e.objectSpread2({title:r},o))})),console.log("✅ Validation files generated successfully!"),t.abrupt("break",22);case 17:return l.forEach((function(t){var a=e.slicedToArray(t,2),o=a[0],l=a[1];n.generateForm(e.objectSpread2({title:o},l),r.definitions)})),console.log("✅ Form components generated successfully!"),t.abrupt("break",22);case 20:console.error("❌ Unknown action: ".concat(a)),process.exit(1);case 22:case"end":return t.stop()}}),t)}))),u.apply(this,arguments)}function d(){return(d=e.asyncToGenerator(e.regeneratorRuntime().mark((function a(){var r,i,c,u,d;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,o||(console.error("❌ Action undefined."),console.log("Run 'npx regen --help' for usage information."),process.exit(1)),"--help"===o&&(console.log("\nUsage: npx regen <action> [options]\n\nActions:\n make:page Generate all pages and services\n make:dummy Generate dummy data\n make:route Generate route file\n make:validation Generate validation files\n make:form Generate form components\n --help Show this help message\n\nOptions:\n --file=<path> Path to JSON schema file (default: ./json-schema.json)\n --mui Use MUI templates\n --index-template=<path> Custom index page template\n --form-template=<path> Custom form component template\n --view-template=<path> Custom view page template\n --create-template=<path> Custom create page template\n --update-template=<path> Custom update page template\n --template=<dir> Directory containing all templates\n --ignore=<templates> Templates to ignore (comma-separated)\n Options: create, update, view, form, index, service, validation, dummy\n\nExamples:\n npx regen make:page\n npx regen make:page --file=./schema.json\n npx regen make:page --template=./templates\n npx regen make:page --ignore=dummy,validation\n "),process.exit(0)),r=p(l),e.next=6,n.loadRegenConfig();case 6:return i=e.sent,c=m(i,r),u=t.readFileSync(c.file,{encoding:"utf-8"}),d=JSON.parse(u),e.next=12,s(o,d,c);case 12:e.next=18;break;case 14:e.prev=14,e.t0=e.catch(0),console.error("❌ ERROR:",e.t0.message),process.exit(1);case 18:case"end":return e.stop()}}),a,null,[[0,14]])})))).apply(this,arguments)}!function(){d.apply(this,arguments)}();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "frgen",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "helper generator",
5
5
  "main": "lib/main.jss",
6
6
  "types": "lib/index.d.ts",