frgen 0.4.6 → 0.4.8
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/README.md +90 -23
- package/lib/_virtual/_rollupPluginBabelHelpers.js +1 -1
- package/lib/express/make_controller.js +1 -1
- package/lib/express/make_crud.js +1 -1
- package/lib/express/make_model.js +1 -1
- package/lib/express/make_module.js +2 -0
- package/lib/express/make_repository.js +2 -0
- package/lib/express/make_resource.js +1 -1
- package/lib/express/make_service.js +1 -1
- package/lib/express/make_validation.js +1 -1
- package/lib/express/utils.js +1 -1
- package/lib/main.js +1 -1
- package/lib/react/mui.gen.js +1 -1
- package/lib/regen.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
# 🧰 FRGEN and Regen — CLI CRUD Generator
|
|
2
2
|
|
|
3
3
|
#### Backend
|
|
4
|
-
`frgen` is a **Command Line Tool** that automatically generates boilerplate files such as **models**, **controllers**, **services**, **validations**, and **resources** based on your database table structure.
|
|
4
|
+
`frgen` is a **Command Line Tool** that automatically generates boilerplate files such as **models**, **controllers**, **services**, **repositories**, **validations**, and **resources** based on your database table structure.
|
|
5
|
+
|
|
6
|
+
When using `--prisma`, frgen follows a **repository pattern**:
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
controller → service → repository → prisma
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
- **Repository** — only layer that touches Prisma directly
|
|
13
|
+
- **Service** — delegates all DB operations to the repository
|
|
14
|
+
- **Controller** — handles HTTP request/response, calls service
|
|
5
15
|
|
|
6
16
|
---
|
|
7
17
|
|
|
@@ -20,7 +30,7 @@ npm install frgen --save-dev
|
|
|
20
30
|
| `--table=<table_name>` | The table name used as the generation base | `--table=users` |
|
|
21
31
|
| `--schema=<schema_name>` | (Optional) Database schema, default `public` | `--schema=my_schema` |
|
|
22
32
|
| `--path=<output_folder>` | (Optional) Output file path | `--path=modules/user` |
|
|
23
|
-
| `--prisma` | Use Prisma ORM | `--prisma` |
|
|
33
|
+
| `--prisma` | Use Prisma ORM (repository pattern) | `--prisma` |
|
|
24
34
|
| `--pg` | Use PostgreSQL client | `--pg` |
|
|
25
35
|
| `--mysql` | Use MySQL client | `--mysql` |
|
|
26
36
|
|
|
@@ -54,39 +64,67 @@ npx frgen make:resource --table=products
|
|
|
54
64
|
### 3. `make:controller`
|
|
55
65
|
Generates a complete set of files including:
|
|
56
66
|
- Controller
|
|
57
|
-
- Service
|
|
67
|
+
- Service (delegates to repository when `--prisma`)
|
|
68
|
+
- Repository (only when `--prisma`)
|
|
58
69
|
- Validation
|
|
59
70
|
- Resource
|
|
60
71
|
|
|
61
72
|
```bash
|
|
62
|
-
npx frgen make:controller --table=users --path=modules/users
|
|
73
|
+
npx frgen make:controller --table=users --path=modules/users --prisma
|
|
63
74
|
```
|
|
64
75
|
|
|
65
76
|
**Steps performed:**
|
|
66
77
|
1. `generateController()`
|
|
67
|
-
2. `
|
|
68
|
-
3. `
|
|
69
|
-
4. `
|
|
78
|
+
2. `generateRepository()` *(if `--prisma`)*
|
|
79
|
+
3. `generateService()`
|
|
80
|
+
4. `generateValidation()`
|
|
81
|
+
5. `generateContent()`
|
|
70
82
|
|
|
71
83
|
---
|
|
72
84
|
|
|
73
85
|
### 4. `make:crud`
|
|
74
86
|
Generates a full CRUD structure at once, including:
|
|
75
|
-
- Model
|
|
76
|
-
- Controller
|
|
77
|
-
- Service
|
|
78
|
-
-
|
|
79
|
-
-
|
|
87
|
+
- Model *(non-prisma only)*
|
|
88
|
+
- Controller
|
|
89
|
+
- Service
|
|
90
|
+
- Repository *(if `--prisma`)*
|
|
91
|
+
- Validation
|
|
92
|
+
- Resource
|
|
80
93
|
|
|
81
94
|
```bash
|
|
82
|
-
npx frgen make:crud --pg --schema=public
|
|
95
|
+
npx frgen make:crud --pg --prisma --schema=public
|
|
83
96
|
```
|
|
84
97
|
|
|
85
98
|
**Use this to generate the full CRUD boilerplate automatically.**
|
|
86
99
|
|
|
87
100
|
---
|
|
88
101
|
|
|
89
|
-
### 5. `make:
|
|
102
|
+
### 5. `make:module`
|
|
103
|
+
Generates all files for a single table **co-located inside one folder**. Imports between files use relative paths.
|
|
104
|
+
|
|
105
|
+
Includes:
|
|
106
|
+
- Controller
|
|
107
|
+
- Service
|
|
108
|
+
- Repository *(if `--prisma`)*
|
|
109
|
+
- Validation
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
npx frgen make:module --table=users --prisma
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Default output: `src/http/module/user/`
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
src/http/module/user/
|
|
119
|
+
user.controller.ts
|
|
120
|
+
user.service.ts
|
|
121
|
+
user.repository.ts
|
|
122
|
+
user.validation.ts
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
### 6. `make:validation`
|
|
90
128
|
Generates an automatic **validation** file based on table structure.
|
|
91
129
|
|
|
92
130
|
```bash
|
|
@@ -95,13 +133,24 @@ npx frgen make:validation --table=orders
|
|
|
95
133
|
|
|
96
134
|
---
|
|
97
135
|
|
|
98
|
-
###
|
|
99
|
-
Generates a **service layer** file
|
|
136
|
+
### 7. `make:service`
|
|
137
|
+
Generates a **service layer** file. When `--prisma`, the service delegates to the repository instead of calling Prisma directly.
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
npx frgen make:service --table=users --prisma --path=modules/users
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
### 8. `make:repository`
|
|
146
|
+
Generates a **repository** file — the only layer that interacts with Prisma.
|
|
100
147
|
|
|
101
148
|
```bash
|
|
102
|
-
npx frgen make:
|
|
149
|
+
npx frgen make:repository --table=users --prisma
|
|
103
150
|
```
|
|
104
151
|
|
|
152
|
+
Default output: `src/http/repository/`
|
|
153
|
+
|
|
105
154
|
---
|
|
106
155
|
|
|
107
156
|
## 🧠 Internal Explanation
|
|
@@ -115,7 +164,7 @@ npx frgen make:service --table=users --path=modules/users
|
|
|
115
164
|
| `_path` | Output path for generated files |
|
|
116
165
|
| `schema` | Database schema (default: `public`) |
|
|
117
166
|
| `client` | Database client (`pg` or `mysql`) |
|
|
118
|
-
| `prisma` | Boolean, whether Prisma ORM is used |
|
|
167
|
+
| `prisma` | Boolean, whether Prisma ORM + repository pattern is used |
|
|
119
168
|
| `pool` | Active database connection |
|
|
120
169
|
|
|
121
170
|
---
|
|
@@ -128,7 +177,9 @@ npx frgen make:service --table=users --path=modules/users
|
|
|
128
177
|
4. Check database connectivity with `checkDatabaseConnection()`
|
|
129
178
|
5. Execute action based on the command:
|
|
130
179
|
- `make:model` → `generateModelContent()`
|
|
131
|
-
- `make:controller` → `generateController()`, `generateService()`, etc.
|
|
180
|
+
- `make:controller` → `generateController()`, `generateRepository()` *(prisma)*, `generateService()`, etc.
|
|
181
|
+
- `make:module` → all files co-located in one folder
|
|
182
|
+
- `make:repository` → `generateRepository()`
|
|
132
183
|
- `make:crud` → `generateAll()`
|
|
133
184
|
6. Close the database connection (`pool.end()` / `pool.releaseConnection()`)
|
|
134
185
|
|
|
@@ -146,9 +197,12 @@ npx frgen make:controller --table=users --schema=public --pg --path=modules/user
|
|
|
146
197
|
npx frgen make:crud --mysql --path=modules/user
|
|
147
198
|
```
|
|
148
199
|
|
|
149
|
-
### With Prisma
|
|
200
|
+
### With Prisma (repository pattern)
|
|
150
201
|
```bash
|
|
151
|
-
npx frgen make:
|
|
202
|
+
npx frgen make:controller --table=users --schema=public --pg --prisma --path=src/http
|
|
203
|
+
npx frgen make:module --table=users --pg --prisma
|
|
204
|
+
npx frgen make:repository --table=products --pg --prisma --path=src/http/repository
|
|
205
|
+
npx frgen make:service --table=products --pg --prisma --path=src/http/service
|
|
152
206
|
```
|
|
153
207
|
|
|
154
208
|
---
|
|
@@ -161,7 +215,9 @@ npx frgen make:service --table=products --path=modules/products --prisma
|
|
|
161
215
|
| `./utils.js` | Utility functions: `checkDatabaseConnection`, `removePluralSuffix`, `toPascalCase` |
|
|
162
216
|
| `./make:model.js` | Model generator |
|
|
163
217
|
| `./make:controller.js` | Controller generator |
|
|
164
|
-
| `./make:service.js` | Service generator |
|
|
218
|
+
| `./make:service.js` | Service generator (delegates to repository when Prisma) |
|
|
219
|
+
| `./make:repository.js` | Repository generator (Prisma only) |
|
|
220
|
+
| `./make:module.js` | Module folder generator (co-located files) |
|
|
165
221
|
| `./make:validation.js` | Validation generator |
|
|
166
222
|
| `./make:resource.js` | Resource generator |
|
|
167
223
|
| `./make:crud.js` | Full CRUD generator |
|
|
@@ -291,7 +347,16 @@ npx regen make:form
|
|
|
291
347
|
|
|
292
348
|
---
|
|
293
349
|
|
|
294
|
-
### **6.
|
|
350
|
+
### **6. `make:service`**
|
|
351
|
+
Generates service files only.
|
|
352
|
+
|
|
353
|
+
```bash
|
|
354
|
+
npx regen make:service
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
---
|
|
358
|
+
|
|
359
|
+
### **7. `--help`**
|
|
295
360
|
Shows help message.
|
|
296
361
|
|
|
297
362
|
```bash
|
|
@@ -331,6 +396,7 @@ npx regen make:page --mui
|
|
|
331
396
|
| `--view-template=<path>` | Custom view template |
|
|
332
397
|
| `--create-template=<path>` | Custom create page template |
|
|
333
398
|
| `--update-template=<path>` | Custom update page template |
|
|
399
|
+
| `--service-template=<path>` | Custom service template |
|
|
334
400
|
| `--template=<dir>` | Directory containing all templates |
|
|
335
401
|
|
|
336
402
|
Example:
|
|
@@ -348,6 +414,7 @@ custom-templates/
|
|
|
348
414
|
view-template.js
|
|
349
415
|
create-template.js
|
|
350
416
|
update-template.js
|
|
417
|
+
service-template.js
|
|
351
418
|
```
|
|
352
419
|
|
|
353
420
|
---
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";function t(t,r){var e=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var n,o,i,a,u=[],c=!0,f=!1;try{if(i=(e=e.call(t)).next,0===r){if(Object(e)!==e)return;c=!1}else for(;!(c=(n=i.call(e)).done)&&(u.push(n.value),u.length!==r);c=!0);}catch(t){f=!0,o=t}finally{try{if(!c&&null!=e.return&&(a=e.return(),Object(a)!==a))return}finally{if(f)throw o}}return u}}function r(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(t,r).enumerable}))),e.push.apply(e,n)}return e}function e(){e=function(){return r};var t,r={},n=Object.prototype,o=n.hasOwnProperty,i=Object.defineProperty||function(t,r,e){t[r]=e.value},a="function"==typeof Symbol?Symbol:{},u=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",f=a.toStringTag||"@@toStringTag";function l(t,r,e){return Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}),t[r]}try{l({},"")}catch(t){l=function(t,r,e){return t[r]=e}}function s(t,r,e,n){var o=r&&r.prototype instanceof b?r:b,a=Object.create(o.prototype),u=new I(n||[]);return i(a,"_invoke",{value:P(t,e,u)}),a}function y(t,r,e){try{return{type:"normal",arg:t.call(r,e)}}catch(t){return{type:"throw",arg:t}}}r.wrap=s;var h="suspendedStart",p="suspendedYield",v="executing",d="completed",m={};function b(){}function g(){}function w(){}var x={};l(x,u,(function(){return this}));var O=Object.getPrototypeOf,j=O&&O(O(k([])));j&&j!==n&&o.call(j,u)&&(x=j);var L=w.prototype=b.prototype=Object.create(x);function E(t){["next","throw","return"].forEach((function(r){l(t,r,(function(t){return this._invoke(r,t)}))}))}function S(t,r){function e(n,i,a,u){var c=y(t[n],t,i);if("throw"!==c.type){var f=c.arg,l=f.value;return l&&"object"==typeof l&&o.call(l,"__await")?r.resolve(l.__await).then((function(t){e("next",t,a,u)}),(function(t){e("throw",t,a,u)})):r.resolve(l).then((function(t){f.value=t,a(f)}),(function(t){return e("throw",t,a,u)}))}u(c.arg)}var n;i(this,"_invoke",{value:function(t,o){function i(){return new r((function(r,n){e(t,o,r,n)}))}return n=n?n.then(i,i):i()}})}function P(r,e,n){var o=h;return function(i,a){if(o===v)throw Error("Generator is already running");if(o===d){if("throw"===i)throw a;return{value:t,done:!0}}for(n.method=i,n.arg=a;;){var u=n.delegate;if(u){var c=A(u,n);if(c){if(c===m)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===h)throw o=d,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=v;var f=y(r,e,n);if("normal"===f.type){if(o=n.done?d:p,f.arg===m)continue;return{value:f.arg,done:n.done}}"throw"===f.type&&(o=d,n.method="throw",n.arg=f.arg)}}}function A(r,e){var n=e.method,o=r.iterator[n];if(o===t)return e.delegate=null,"throw"===n&&r.iterator.return&&(e.method="return",e.arg=t,A(r,e),"throw"===e.method)||"return"!==n&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+n+"' method")),m;var i=y(o,r.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,m;var a=i.arg;return a?a.done?(e[r.resultName]=a.value,e.next=r.nextLoc,"return"!==e.method&&(e.method="next",e.arg=t),e.delegate=null,m):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,m)}function _(t){var r={tryLoc:t[0]};1 in t&&(r.catchLoc=t[1]),2 in t&&(r.finallyLoc=t[2],r.afterLoc=t[3]),this.tryEntries.push(r)}function T(t){var r=t.completion||{};r.type="normal",delete r.arg,t.completion=r}function I(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(_,this),this.reset(!0)}function k(r){if(r||""===r){var e=r[u];if(e)return e.call(r);if("function"==typeof r.next)return r;if(!isNaN(r.length)){var n=-1,i=function e(){for(;++n<r.length;)if(o.call(r,n))return e.value=r[n],e.done=!1,e;return e.value=t,e.done=!0,e};return i.next=i}}throw new TypeError(typeof r+" is not iterable")}return g.prototype=w,i(L,"constructor",{value:w,configurable:!0}),i(w,"constructor",{value:g,configurable:!0}),g.displayName=l(w,f,"GeneratorFunction"),r.isGeneratorFunction=function(t){var r="function"==typeof t&&t.constructor;return!!r&&(r===g||"GeneratorFunction"===(r.displayName||r.name))},r.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,w):(t.__proto__=w,l(t,f,"GeneratorFunction")),t.prototype=Object.create(L),t},r.awrap=function(t){return{__await:t}},E(S.prototype),l(S.prototype,c,(function(){return this})),r.AsyncIterator=S,r.async=function(t,e,n,o,i){void 0===i&&(i=Promise);var a=new S(s(t,e,n,o),i);return r.isGeneratorFunction(e)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},E(L),l(L,f,"Generator"),l(L,u,(function(){return this})),l(L,"toString",(function(){return"[object Generator]"})),r.keys=function(t){var r=Object(t),e=[];for(var n in r)e.push(n);return e.reverse(),function t(){for(;e.length;){var n=e.pop();if(n in r)return t.value=n,t.done=!1,t}return t.done=!0,t}},r.values=k,I.prototype={constructor:I,reset:function(r){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(T),!r)for(var e in this)"t"===e.charAt(0)&&o.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(r){if(this.done)throw r;var e=this;function n(n,o){return u.type="throw",u.arg=r,e.next=n,o&&(e.method="next",e.arg=t),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],u=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var c=o.call(a,"catchLoc"),f=o.call(a,"finallyLoc");if(c&&f){if(this.prev<a.catchLoc)return n(a.catchLoc,!0);if(this.prev<a.finallyLoc)return n(a.finallyLoc)}else if(c){if(this.prev<a.catchLoc)return n(a.catchLoc,!0)}else{if(!f)throw Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return n(a.finallyLoc)}}}},abrupt:function(t,r){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc<=this.prev&&o.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var i=n;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=r&&r<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=r,i?(this.method="next",this.next=i.finallyLoc,m):this.complete(a)},complete:function(t,r){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&r&&(this.next=r),m},finish:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),T(e),m}},catch:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var o=n.arg;T(e)}return o}}throw Error("illegal catch attempt")},delegateYield:function(r,e,n){return this.delegate={iterator:k(r),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=t),m}},r}function n(t,r){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,r||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}function o(t){var r=n(t,"string");return"symbol"==typeof r?r:r+""}function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function a(t,r,e,n,o,i,a){try{var u=t[i](a),c=u.value}catch(t){return void e(t)}u.done?r(c):Promise.resolve(c).then(n,o)}function u(t,r,e){return(r=o(r))in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}function c(t){if(Array.isArray(t))return t}function f(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function l(t,r){if(t){if("string"==typeof t)return s(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?s(t,r):void 0}}function s(t,r){(null==r||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}function y(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}Object.defineProperty(exports,"__esModule",{value:!0}),exports.arrayLikeToArray=s,exports.arrayWithHoles=c,exports.asyncToGenerator=function(t){return function(){var r=this,e=arguments;return new Promise((function(n,o){var i=t.apply(r,e);function u(t){a(i,n,o,u,c,"next",t)}function c(t){a(i,n,o,u,c,"throw",t)}u(void 0)}))}},exports.createForOfIteratorHelper=function(t,r){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=l(t))||r){e&&(t=e);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){e=e.call(t)},n:function(){var t=e.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==e.return||e.return()}finally{if(u)throw i}}}},exports.defineProperty=u,exports.iterableToArray=f,exports.iterableToArrayLimit=t,exports.nonIterableRest=y,exports.objectSpread2=function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?r(Object(n),!0).forEach((function(r){u(t,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))}))}return t},exports.regeneratorRuntime=e,exports.slicedToArray=function(r,e){return c(r)||t(r,e)||l(r,e)||y()},exports.toArray=function(t){return c(t)||f(t)||l(t)||y()},exports.toPrimitive=n,exports.toPropertyKey=o,exports.typeof=i,exports.unsupportedIterableToArray=l;
|
|
2
|
+
"use strict";function t(t,r){var e=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var n,o,i,a,u=[],c=!0,l=!1;try{if(i=(e=e.call(t)).next,0===r){if(Object(e)!==e)return;c=!1}else for(;!(c=(n=i.call(e)).done)&&(u.push(n.value),u.length!==r);c=!0);}catch(t){l=!0,o=t}finally{try{if(!c&&null!=e.return&&(a=e.return(),Object(a)!==a))return}finally{if(l)throw o}}return u}}function r(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(t,r).enumerable}))),e.push.apply(e,n)}return e}function e(){e=function(){return r};var t,r={},n=Object.prototype,o=n.hasOwnProperty,i=Object.defineProperty||function(t,r,e){t[r]=e.value},a="function"==typeof Symbol?Symbol:{},u=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function f(t,r,e){return Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}),t[r]}try{f({},"")}catch(t){f=function(t,r,e){return t[r]=e}}function s(t,r,e,n){var o=r&&r.prototype instanceof b?r:b,a=Object.create(o.prototype),u=new I(n||[]);return i(a,"_invoke",{value:P(t,e,u)}),a}function y(t,r,e){try{return{type:"normal",arg:t.call(r,e)}}catch(t){return{type:"throw",arg:t}}}r.wrap=s;var h="suspendedStart",p="suspendedYield",v="executing",d="completed",m={};function b(){}function g(){}function w(){}var x={};f(x,u,(function(){return this}));var O=Object.getPrototypeOf,j=O&&O(O(k([])));j&&j!==n&&o.call(j,u)&&(x=j);var L=w.prototype=b.prototype=Object.create(x);function E(t){["next","throw","return"].forEach((function(r){f(t,r,(function(t){return this._invoke(r,t)}))}))}function S(t,r){function e(n,i,a,u){var c=y(t[n],t,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==typeof f&&o.call(f,"__await")?r.resolve(f.__await).then((function(t){e("next",t,a,u)}),(function(t){e("throw",t,a,u)})):r.resolve(f).then((function(t){l.value=t,a(l)}),(function(t){return e("throw",t,a,u)}))}u(c.arg)}var n;i(this,"_invoke",{value:function(t,o){function i(){return new r((function(r,n){e(t,o,r,n)}))}return n=n?n.then(i,i):i()}})}function P(r,e,n){var o=h;return function(i,a){if(o===v)throw Error("Generator is already running");if(o===d){if("throw"===i)throw a;return{value:t,done:!0}}for(n.method=i,n.arg=a;;){var u=n.delegate;if(u){var c=A(u,n);if(c){if(c===m)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===h)throw o=d,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=v;var l=y(r,e,n);if("normal"===l.type){if(o=n.done?d:p,l.arg===m)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(o=d,n.method="throw",n.arg=l.arg)}}}function A(r,e){var n=e.method,o=r.iterator[n];if(o===t)return e.delegate=null,"throw"===n&&r.iterator.return&&(e.method="return",e.arg=t,A(r,e),"throw"===e.method)||"return"!==n&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+n+"' method")),m;var i=y(o,r.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,m;var a=i.arg;return a?a.done?(e[r.resultName]=a.value,e.next=r.nextLoc,"return"!==e.method&&(e.method="next",e.arg=t),e.delegate=null,m):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,m)}function _(t){var r={tryLoc:t[0]};1 in t&&(r.catchLoc=t[1]),2 in t&&(r.finallyLoc=t[2],r.afterLoc=t[3]),this.tryEntries.push(r)}function T(t){var r=t.completion||{};r.type="normal",delete r.arg,t.completion=r}function I(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(_,this),this.reset(!0)}function k(r){if(r||""===r){var e=r[u];if(e)return e.call(r);if("function"==typeof r.next)return r;if(!isNaN(r.length)){var n=-1,i=function e(){for(;++n<r.length;)if(o.call(r,n))return e.value=r[n],e.done=!1,e;return e.value=t,e.done=!0,e};return i.next=i}}throw new TypeError(typeof r+" is not iterable")}return g.prototype=w,i(L,"constructor",{value:w,configurable:!0}),i(w,"constructor",{value:g,configurable:!0}),g.displayName=f(w,l,"GeneratorFunction"),r.isGeneratorFunction=function(t){var r="function"==typeof t&&t.constructor;return!!r&&(r===g||"GeneratorFunction"===(r.displayName||r.name))},r.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,w):(t.__proto__=w,f(t,l,"GeneratorFunction")),t.prototype=Object.create(L),t},r.awrap=function(t){return{__await:t}},E(S.prototype),f(S.prototype,c,(function(){return this})),r.AsyncIterator=S,r.async=function(t,e,n,o,i){void 0===i&&(i=Promise);var a=new S(s(t,e,n,o),i);return r.isGeneratorFunction(e)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},E(L),f(L,l,"Generator"),f(L,u,(function(){return this})),f(L,"toString",(function(){return"[object Generator]"})),r.keys=function(t){var r=Object(t),e=[];for(var n in r)e.push(n);return e.reverse(),function t(){for(;e.length;){var n=e.pop();if(n in r)return t.value=n,t.done=!1,t}return t.done=!0,t}},r.values=k,I.prototype={constructor:I,reset:function(r){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(T),!r)for(var e in this)"t"===e.charAt(0)&&o.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(r){if(this.done)throw r;var e=this;function n(n,o){return u.type="throw",u.arg=r,e.next=n,o&&(e.method="next",e.arg=t),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],u=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var c=o.call(a,"catchLoc"),l=o.call(a,"finallyLoc");if(c&&l){if(this.prev<a.catchLoc)return n(a.catchLoc,!0);if(this.prev<a.finallyLoc)return n(a.finallyLoc)}else if(c){if(this.prev<a.catchLoc)return n(a.catchLoc,!0)}else{if(!l)throw Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return n(a.finallyLoc)}}}},abrupt:function(t,r){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc<=this.prev&&o.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var i=n;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=r&&r<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=r,i?(this.method="next",this.next=i.finallyLoc,m):this.complete(a)},complete:function(t,r){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&r&&(this.next=r),m},finish:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),T(e),m}},catch:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var o=n.arg;T(e)}return o}}throw Error("illegal catch attempt")},delegateYield:function(r,e,n){return this.delegate={iterator:k(r),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=t),m}},r}function n(t,r){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,r||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}function o(t){var r=n(t,"string");return"symbol"==typeof r?r:r+""}function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function a(t,r,e,n,o,i,a){try{var u=t[i](a),c=u.value}catch(t){return void e(t)}u.done?r(c):Promise.resolve(c).then(n,o)}function u(t,r,e){return(r=o(r))in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}function c(t){if(Array.isArray(t))return y(t)}function l(t){if(Array.isArray(t))return t}function f(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function s(t,r){if(t){if("string"==typeof t)return y(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?y(t,r):void 0}}function y(t,r){(null==r||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}function h(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function p(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}Object.defineProperty(exports,"__esModule",{value:!0}),exports.arrayLikeToArray=y,exports.arrayWithHoles=l,exports.arrayWithoutHoles=c,exports.asyncToGenerator=function(t){return function(){var r=this,e=arguments;return new Promise((function(n,o){var i=t.apply(r,e);function u(t){a(i,n,o,u,c,"next",t)}function c(t){a(i,n,o,u,c,"throw",t)}u(void 0)}))}},exports.createForOfIteratorHelper=function(t,r){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=s(t))||r){e&&(t=e);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){e=e.call(t)},n:function(){var t=e.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==e.return||e.return()}finally{if(u)throw i}}}},exports.defineProperty=u,exports.iterableToArray=f,exports.iterableToArrayLimit=t,exports.nonIterableRest=p,exports.nonIterableSpread=h,exports.objectSpread2=function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?r(Object(n),!0).forEach((function(r){u(t,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))}))}return t},exports.regeneratorRuntime=e,exports.slicedToArray=function(r,e){return l(r)||t(r,e)||s(r,e)||p()},exports.toArray=function(t){return l(t)||f(t)||s(t)||p()},exports.toConsumableArray=function(t){return c(t)||f(t)||s(t)||h()},exports.toPrimitive=n,exports.toPropertyKey=o,exports.typeof=i,exports.unsupportedIterableToArray=s;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("
|
|
2
|
+
"use strict";var e=require("./utils.js");module.exports=function(t,n){t||(console.error("table name undefined"),process.exit(1));var a=e.removePluralSuffix(t),c="".concat(e.toPascalCase(a),"Resource"),r="".concat(e.toKebabCase(a),".resource"),o="".concat(e.toKebabCase(a),".service"),s="".concat(e.toKebabCase(a),".validation"),i="create".concat(e.toPascalCase(a),"Schema"),l="update".concat(e.toPascalCase(a),"Schema"),u="".concat(e.toPascalCase(a),"Controller"),d=e.toPascalCase(a),p="".concat(e.toKebabCase(a),".controller.ts"),x=e.toKebabCase(a),q=e.resolveOutputPath(["src","app","http","controller"],n,p),m='\nimport { NextFunction, Request, Response } from "express";\nimport { Controller, Get, Post, Put, Delete } from "frexp/lib/Decorator";\nimport { getPaginate, get'.concat(d,"ID, create").concat(d,", update").concat(d,", delete").concat(d,'} from "@service/').concat(o,'";\nimport ').concat(c,' from "@resource/').concat(r,'";\nimport { ').concat(i,",").concat(l,' } from "@validation/').concat(s,'";\n\n@Controller("/').concat(x,'")\nexport class ').concat(u,' {\n\n @Get("/")\n async get').concat(d,"Paginate(req: Request, res: Response, next: NextFunction){\n try {\n const results = await getPaginate(req.query);\n res.json(").concat(c,'.paginate(results));\n } catch (error) {\n next(error);\n }\n };\n\n @Get("/:id")\n async get').concat(d,"View(req: Request, res: Response, next: NextFunction){\n try {\n const result = await get").concat(d,"ID(+req.params.id)\n res.json(new ").concat(c,'(result, true));\n } catch (error) {\n next(error);\n }\n };\n\n @Post("/")\n async create').concat(d,"(req: Request, res: Response, next: NextFunction){\n try {\n const validated = await req.validation(").concat(i,");\n const result = await create").concat(d,"(validated);\n res.json(new ").concat(c,'(result, true));\n } catch (error) {\n next(error);\n }\n };\n\n @Put("/")\n async update').concat(d,"(req: Request, res: Response, next: NextFunction){\n try {\n const validated = await req.validation(").concat(l,");\n const result = await update").concat(d,"(validated);\n res.json(new ").concat(c,'(result, true));\n } catch (error) {\n next(error);\n }\n };\n\n @Delete("/:id")\n async delete').concat(d,"(req: Request, res: Response, next: NextFunction){\n try {\n await delete").concat(d,"(+req.params.id)\n res.sendStatus(204);\n } catch (error) {\n next(error);\n }\n };\n}\n");e.writeFileSafe(q,m,p)};
|
package/lib/express/make_crud.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.js"),r=require("./make_controller.js"),t=require("./make_model.js"),a=require("./make_resource.js"),n=require("./make_service.js"),c=require("./make_validation.js"),s=require("./
|
|
2
|
+
"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.js"),r=require("./make_controller.js"),t=require("./make_model.js"),a=require("./make_resource.js"),n=require("./make_service.js"),c=require("./make_validation.js"),s=require("./make_repository.js"),u=require("./utils.js"),o=function(){var o=e.asyncToGenerator(e.regeneratorRuntime().mark((function o(l,i,f,v,d){var p,x,k,m,b,_,g;return e.regeneratorRuntime().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:return o.prev=0,o.next=3,u.getTables(i,f,d);case 3:p=o.sent,console.log("Generating CRUD for ".concat(p.length," tables...")),x=e.createForOfIteratorHelper(p),o.prev=6,x.s();case 8:if((k=x.n()).done){o.next=28;break}return b=k.value,_=null!==(m=b.table_name)&&void 0!==m?m:b.TABLE_NAME,o.next=13,r(_,"default"!==l?"".concat(l,"/controller"):"default");case 13:if(!v){o.next=16;break}return o.next=16,s(_,"default"!==l?"".concat(l,"/repository"):"default");case 16:return o.next=18,n(_,"default"!==l?"".concat(l,"/service"):"default",v);case 18:return o.next=20,c(_,i,f,d,"default"!==l?"".concat(l,"/validation"):"default");case 20:return o.next=22,a(_,i,f,d,"default"!==l?"".concat(l,"/resource"):"default");case 22:if(v){o.next=26;break}return g=u.toPascalCase(u.removePluralSuffix(_)),o.next=26,t(g,_,i,f,d);case 26:o.next=8;break;case 28:o.next=33;break;case 30:o.prev=30,o.t0=o.catch(6),x.e(o.t0);case 33:return o.prev=33,x.f(),o.finish(33);case 36:o.next=41;break;case 38:o.prev=38,o.t1=o.catch(0),console.log(o.t1);case 41:return o.prev=41,o.finish(41);case 43:case"end":return o.stop()}}),o,null,[[0,38,41,43],[6,30,33,36]])})));return function(e,r,t,a,n){return o.apply(this,arguments)}}();module.exports=o;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.js"),n=require("
|
|
2
|
+
"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.js"),n=require("./utils.js");function t(t){return Array.from(new Set(Object.entries(t).map((function(t){var a=e.slicedToArray(t,2);a[0];var r=a[1].relatedTable;return"import ".concat(n.capitalize(n.toCamelCase(n.removePluralSuffix(r)))," from './").concat(n.capitalize(n.toCamelCase(n.removePluralSuffix(r))),"';")})))).join("\n")}function a(t,a){var r=Object.entries(t).map((function(t){var r=e.slicedToArray(t,2),o=r[0],c=r[1],i=c.relation,l=c.relatedTable,s=c.foreignKey,u=c.localKey;return"\n ".concat(o,": {\n relation: Model.").concat(i,",\n modelClass: ").concat(n.capitalize(n.toCamelCase(n.removePluralSuffix(l))),",\n join: {\n ").concat("ManyToManyRelation"===i?"\n from: '".concat(u,"',\n through: {\n from: '").concat(s,"',\n to: '").concat(s,"'\n },\n to: '").concat(u,"'"):"\n from: '".concat(a,".").concat(s,"',\n to: '").concat(l,".").concat(u,"'"),"\n }\n }")})).join(",");return"\nstatic get relationMappings() {\nreturn {".concat(r,"\n};\n}")}var r=function(){var r=e.asyncToGenerator(e.regeneratorRuntime().mark((function r(o,c,i){var l,s,u,m,p,d,f,b,g,v,C,y,x=arguments;return e.regeneratorRuntime().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return l=x.length>3&&void 0!==x[3]?x[3]:"public",s=x.length>4&&void 0!==x[4]?x[4]:"pg",r.prev=2,o||(console.error("class name undefined"),process.exit(1)),c||(console.error("table name undefined"),process.exit(1)),u="".concat(o,".ts"),m=n.resolveOutputPath(["src","app","model"],"default",u),r.next=9,n.getTableColumns(i,null!=c?c:o.toLowerCase()+"s",l,s);case 9:return p=r.sent,d=Object.fromEntries(p.map(n.normalizeColumn)),r.next=13,n.getTableRelations(i,c,l,s);case 13:f=r.sent,b=Object.entries(d).map((function(t){var a,r=e.slicedToArray(t,2),o=r[0],c=r[1],i=n.toCamelCase(o),l=(a=c.type,["integer","bigint","smallint","tinyint","numeric","decimal","float"].includes(a)?"number":["varchar","text","string","char","character varying","uuid"].includes(a)?"string":["boolean"].includes(a)?"boolean":["date","datetime","timestamp","timestamp with time zone"].includes(a)?"Date":"any");return" public ".concat(i,": ").concat(l,";")})).join("\n"),g='\n static get tableName() {\n return "'.concat(o.toLowerCase(),'s";\n }\n '),c&&(g='\n static get tableName() {\n return "'.concat(c,'";\n }\n ')),v=f?t(f):"",C=f?a(f,c):"",y='\n import Model from "@lib/Model";\n import { snakeCaseMappers } from "objection";\n '.concat(v,"\n \n export default class ").concat(o," extends Model {\n \n ").concat(b,"\n \n ").concat(g,'\n \n static get idColumn() {\n return "id";\n }\n \n static get columnNameMappers() {\n return snakeCaseMappers();\n }\n \n ').concat(C,"\n }"),n.writeFileSafe(m,y,u),r.next=26;break;case 23:r.prev=23,r.t0=r.catch(2),console.error("err::",r.t0);case 26:case"end":return r.stop()}}),r,null,[[2,23]])})));return function(e,n,t){return r.apply(this,arguments)}}();module.exports=r;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";var n=require("../_virtual/_rollupPluginBabelHelpers.js"),t=require("path"),e=require("./utils.js"),o=["int","integer","bigint","smallint","tinyint","numeric","decimal","float"],c=["varchar","text","string","char","character varying","uuid","date","datetime","timestamp","timestamp with time zone"],a=["boolean"];function r(n,t){var r,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],u=t.type,d=t.nullable,p=t.defaultValue,l=["z"],m=o.includes(u),y=c.includes(u),f=a.includes(u),x=s.find((function(t){return t.column_name===n}));(m?l.push("coerce.number()"):y?l.push("string()"):f?l.push("boolean()"):x?l.push("enum(Object.values(".concat(x.enum_name,") as [string, ...string[]])")):l.push("any()"),d&&(l.push("optional()"),l.push("nullish()")),!p||["CURRENT_TIMESTAMP"].includes(p)||i.includes(n))||void 0!==(r=m?parseInt(p):x?"".concat(x.enum_name,".").concat(e.extractEnumValue(p)):f?p:"'".concat(p,"'"))&&l.push("default(".concat(r,")"));return"".concat(e.toCamelCase(n),":").concat(l.join("."))}var i=["created_at","updated_at","createdAt","updatedAt"],s=function(){var s=n.asyncToGenerator(n.regeneratorRuntime().mark((function s(u,d,p,l,m,y){var f,x,g,h,w,q,v,R,b,j,F,P,C,N,A,I,E,S,T,z,_,B,D,k,O,G,V,M;return n.regeneratorRuntime().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return s.prev=0,u||(console.error("table name undefined"),process.exit(1)),f=e.removePluralSuffix(u),x=e.toKebabCase(f),g=e.toPascalCase(f),h=e.toCamelCase(f),w=x,q="default"!==d?t.join(process.cwd(),d):t.join(process.cwd(),"src","http","module",x),v="Create".concat(g,"Schema"),R="Update".concat(g,"Schema"),b="create".concat(g,"Schema"),j="update".concat(g,"Schema"),F="".concat(x,".validation.ts"),P="".concat(x,".repository.ts"),C="".concat(x,".service.ts"),N="".concat(x,".controller.ts"),s.next=18,e.getTableColumns(p,u,l,m);case 18:return A=s.sent,I=Object.fromEntries(A.map(e.normalizeColumn)),s.next=22,e.getPrimaryKeys(p,u,l,m);case 22:return E=s.sent,s.next=25,e.getEnumFieldsAndValues(p,u,l,m);case 25:S=s.sent,T=Object.entries(I).filter((function(t){var e=n.slicedToArray(t,1)[0];return!i.includes(e)})).filter((function(t){var e=n.slicedToArray(t,1)[0];return!E.includes(e)})).map((function(t){var e=n.slicedToArray(t,2);return r(e[0],e[1],E,S)})),z=Object.entries(I).filter((function(t){var e=n.slicedToArray(t,1)[0];return!i.includes(e)})).filter((function(t){var e=n.slicedToArray(t,1)[0];return E.includes(e)})).map((function(t){var r,i,s,u=n.slicedToArray(t,2),d=u[0],p=u[1];return r=d,i=p.type,s=["z"],o.includes(i)?s.push("coerce.number().int().nonoptional()"):c.includes(i)?s.push("string().nonempty().nonoptional()"):a.includes(i)?s.push("boolean()"):s.push("any()"),"".concat(e.toCamelCase(r),":").concat(s.join("."))})),_=S.length?"import { ".concat(S.map((function(n){return n.enum_name})).join(", "),' } from "@generated/prisma";'):"",B='\nimport * as z from "zod";\n'.concat(_,"\n\nexport const ").concat(b," = z.object({\n ").concat(T.join(",\n "),"\n});\n\nexport type ").concat(v," = z.infer<typeof ").concat(b,">;\n\nexport const ").concat(j," = ").concat(b,".extend({\n ").concat(z.join(",\n "),"\n});\n\nexport type ").concat(R," = z.infer<typeof ").concat(j,">;\n"),e.writeFileSafe(t.join(q,F),B,F),y&&(D='\nimport prisma from "@config/db";\nimport NotFoundException from "@exception/notfound.exception";\nimport { '.concat(v,", ").concat(R,' } from "./').concat(x,'.validation";\n\nexport const getPaginate').concat(g,"Repository = async (qs: Record<string, any>) => {\n const count = await prisma.").concat(h,".count();\n const results = await prisma.").concat(h,".findMany({ take: +(qs.take ?? 10), skip: +(qs.skip ?? 0) });\n return { total: count, data: results };\n};\n\nexport const get").concat(g,"ByIdRepository = async (id: number) => {\n const model = await prisma.").concat(h,'.findFirst({ where: { id } });\n if (!model) {\n throw new NotFoundException("').concat(g,'");\n }\n return model;\n};\n\nexport const create').concat(g,"Repository = (payload: ").concat(v,") => {\n return prisma.").concat(h,".create({ data: payload });\n};\n\nexport const update").concat(g,"Repository = (id: number, payload: Omit<").concat(R,', "id">) => {\n return prisma.').concat(h,".update({ where: { id: +id! }, data: payload });\n};\n\nexport const delete").concat(g,"Repository = (id: number) => {\n return prisma.").concat(h,".delete({ where: { id } });\n};\n"),e.writeFileSafe(t.join(q,P),D,P)),k=y?"\nimport { getPaginate".concat(g,"Repository, get").concat(g,"ByIdRepository, create").concat(g,"Repository, update").concat(g,"Repository, delete").concat(g,'Repository } from "./').concat(x,'.repository";\nimport { ').concat(v,", ").concat(R,' } from "./').concat(x,'.validation";\n\nexport const getPaginate = (qs: Record<string, any>) => {\n return getPaginate').concat(g,"Repository(qs);\n};\n\nexport const get").concat(g,"ID = (id: number) => {\n return get").concat(g,"ByIdRepository(id);\n};\n\nexport const create").concat(g," = (payload: ").concat(v,") => {\n return create").concat(g,"Repository(payload);\n};\n\nexport const update").concat(g," = ({ id, ...payload }: ").concat(R,") => {\n return update").concat(g,"Repository(id, payload);\n};\n\nexport const delete").concat(g," = (id: number) => {\n return delete").concat(g,"Repository(id);\n};\n"):"\nimport ".concat(g,' from "@model/').concat(g,'";\nimport NotFoundException from "@exception/notfound.exception";\nimport { ').concat(v,", ").concat(R,' } from "./').concat(x,'.validation";\n\nexport const getPaginate = (qs: Record<string, any>) => {\n return ').concat(g,".query().page(qs.page ?? 0, qs.perPage ?? 10);\n};\n\nexport const get").concat(g,"ID = async (id: number) => {\n const model = await ").concat(g,'.query().findById(id);\n if (!model) {\n throw new NotFoundException("').concat(g,'");\n }\n return model;\n};\n\nexport const create').concat(g," = (payload: ").concat(v,") => {\n return ").concat(g,".query().insertAndFetch(payload);\n};\n\nexport const update").concat(g," = async ({ id, ...payload }: ").concat(R,") => {\n const model = await ").concat(g,'.query().findById(id);\n if (!model) {\n throw new NotFoundException("').concat(g,'");\n }\n await model.$query().updateAndFetch(payload);\n return model;\n};\n\nexport const delete').concat(g," = async (id: number) => {\n const model = await ").concat(g,'.query().findById(id);\n if (!model) {\n throw new NotFoundException("').concat(g,'");\n }\n await model.$query().delete();\n};\n'),e.writeFileSafe(t.join(q,C),k,C),O="".concat(g,"Resource"),G="".concat(x,".resource"),V="".concat(g,"Controller"),M='\nimport { NextFunction, Request, Response } from "express";\nimport { Controller, Get, Post, Put, Delete } from "frexp/lib/Decorator";\nimport { getPaginate, get'.concat(g,"ID, create").concat(g,", update").concat(g,", delete").concat(g,' } from "./').concat(x,'.service";\nimport ').concat(O,' from "@resource/').concat(G,'";\nimport { ').concat(b,", ").concat(j,' } from "./').concat(x,'.validation";\n\n@Controller("/').concat(w,'")\nexport class ').concat(V,' {\n\n @Get("/")\n async get').concat(g,"Paginate(req: Request, res: Response, next: NextFunction) {\n try {\n const results = await getPaginate(req.query);\n res.json(").concat(O,'.paginate(results));\n } catch (error) {\n next(error);\n }\n }\n\n @Get("/:id")\n async get').concat(g,"View(req: Request, res: Response, next: NextFunction) {\n try {\n const result = await get").concat(g,"ID(+req.params.id);\n res.json(new ").concat(O,'(result, true));\n } catch (error) {\n next(error);\n }\n }\n\n @Post("/")\n async create').concat(g,"(req: Request, res: Response, next: NextFunction) {\n try {\n const validated = await req.validation(").concat(b,");\n const result = await create").concat(g,"(validated);\n res.json(new ").concat(O,'(result, true));\n } catch (error) {\n next(error);\n }\n }\n\n @Put("/")\n async update').concat(g,"(req: Request, res: Response, next: NextFunction) {\n try {\n const validated = await req.validation(").concat(j,");\n const result = await update").concat(g,"(validated);\n res.json(new ").concat(O,'(result, true));\n } catch (error) {\n next(error);\n }\n }\n\n @Delete("/:id")\n async delete').concat(g,"(req: Request, res: Response, next: NextFunction) {\n try {\n await delete").concat(g,"(+req.params.id);\n res.sendStatus(204);\n } catch (error) {\n next(error);\n }\n }\n}\n"),e.writeFileSafe(t.join(q,N),M,N),s.next=44;break;case 41:s.prev=41,s.t0=s.catch(0),console.error("err::",s.t0);case 44:case"end":return s.stop()}}),s,null,[[0,41]])})));return function(n,t,e,o,c,a){return s.apply(this,arguments)}}();module.exports=s;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";var t=require("./utils.js");module.exports=function(n,o){n||(console.error("table name undefined"),process.exit(1));var e=t.removePluralSuffix(n),a=t.toCamelCase(e),c=t.toPascalCase(e),r="".concat(t.toKebabCase(e),".repository.ts"),i=t.resolveOutputPath(["src","http","repository"],o,r),s="Create".concat(c,"Schema"),p="Update".concat(c,"Schema"),d="".concat(t.toKebabCase(e),".validation"),u='\nimport prisma from "@config/db";\nimport NotFoundException from "@exception/notfound.exception";\nimport {'.concat(s,", ").concat(p,'} from "@validation/').concat(d,'";\n\nexport const getPaginate').concat(c,"Repository = async (qs: Record<string, any>) => {\n const count = await prisma.").concat(a,".count();\n const results = await prisma.").concat(a,".findMany({ take: +(qs.take ?? 10), skip: +(qs.skip ?? 0) });\n return { total: count, data: results };\n};\n\nexport const get").concat(c,"ByIdRepository = async (id: number) => {\n const model = await prisma.").concat(a,'.findFirst({ where: { id } });\n if (!model) {\n throw new NotFoundException("').concat(t.toPascalCase(e),'");\n }\n return model;\n};\n\nexport const create').concat(c,"Repository = (payload: ").concat(s,") => {\n return prisma.").concat(a,".create({ data: payload });\n};\n\nexport const update").concat(c,"Repository = (id: number, payload: Omit<").concat(p,', "id">) => {\n return prisma.').concat(a,".update({ where: { id: +id! }, data: payload });\n};\n\nexport const delete").concat(c,"Repository = (id: number) => {\n return prisma.").concat(a,".delete({ where: { id } });\n};\n");t.writeFileSafe(i,u,r)};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.js"),r=require("
|
|
2
|
+
"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.js"),r=require("./utils.js"),t=function(){var t=e.asyncToGenerator(e.regeneratorRuntime().mark((function t(n,a,o,c,s){var u,l,i,p,f,m,b,d;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,n||(console.error("table name undefined"),process.exit(1)),u=r.removePluralSuffix(n),l="".concat(r.toKebabCase(u),".resource.ts"),i="".concat(r.toPascalCase(u),"Resource"),p=r.resolveOutputPath(["src","app","http","resource"],s,l),e.next=8,r.getTableColumns(a,n,o,c);case 8:f=e.sent,m=Object.fromEntries(f.map(r.normalizeColumn)),b=Object.keys(m).filter((function(e){return"created_at"!==e&&"updated_at"!==e})).map((function(e){return"".concat(r.toCamelCase(e),": this.").concat(r.toCamelCase(e))})).join(",\n"),d='\nimport Resource from "frexp/lib/Resource";\n\nexport default class '.concat(i," extends Resource {\n toArray() {\n return {\n").concat(b,"\n };\n }\n}"),r.writeFileSafe(p,d,l),e.next=18;break;case 15:e.prev=15,e.t0=e.catch(0),console.error("err::",e.t0);case 18:case"end":return e.stop()}}),t,null,[[0,15]])})));return function(e,r,n,a,o){return t.apply(this,arguments)}}();module.exports=t;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
2
|
+
"use strict";var n=require("./utils.js");module.exports=function(t,o,e){t||(console.error("table name undefined"),process.exit(1));var c,a=n.removePluralSuffix(t),r=n.toPascalCase(a),i="".concat(n.toKebabCase(a),".service.ts"),d=n.resolveOutputPath(["src","app","http","service"],o,i),p="Create".concat(r,"Schema"),s="Update".concat(r,"Schema"),u="".concat(n.toKebabCase(a),".validation"),y="".concat(n.toKebabCase(a),".repository");c=e?"\nimport { getPaginate".concat(r,"Repository, get").concat(r,"ByIdRepository, create").concat(r,"Repository, update").concat(r,"Repository, delete").concat(r,'Repository } from "@repository/').concat(y,'";\nimport {').concat(p,", ").concat(s,'} from "@validation/').concat(u,'";\n\nexport const getPaginate = (qs: Record<string, any>) => {\n return getPaginate').concat(r,"Repository(qs);\n};\n\nexport const get").concat(r,"ID = (id: number) => {\n return get").concat(r,"ByIdRepository(id);\n};\n\nexport const create").concat(r," = (payload: ").concat(p,") => {\n return create").concat(r,"Repository(payload);\n};\n\nexport const update").concat(r," = ({ id, ...payload }: ").concat(s,") => {\n return update").concat(r,"Repository(id, payload);\n};\n\nexport const delete").concat(r," = (id: number) => {\n return delete").concat(r,"Repository(id);\n};\n"):"\nimport ".concat(r,' from "@model/').concat(r,'";\nimport NotFoundException from "@exception/notfound.exception";\nimport {').concat(p,", ").concat(s,'} from "@validation/').concat(u,'";\n\nexport const getPaginate = (qs: Record<string, any>) => {\n return ').concat(r,".query().page(qs.page ?? 0, qs.perPage ?? 10);\n};\n\nexport const get").concat(r,"ID = async (id: number) => {\n const model = await ").concat(r,'.query().findById(id);\n if (!model) {\n throw new NotFoundException("Record");\n }\n return model;\n};\n\nexport const create').concat(r," = (payload: ").concat(p,") => {\n return ").concat(r,".query().insertAndFetch(payload);\n};\n\nexport const update").concat(r," = async ({ id, ...payload }: ").concat(s,") => {\n const model = await ").concat(r,'.query().findById(id);\n if (!model) {\n throw new NotFoundException("').concat(r,'");\n }\n await model.$query().updateAndFetch(payload);\n return model;\n};\n\nexport const delete').concat(r," = async (id: number) => {\n const model = await ").concat(r,'.query().findById(id);\n if (!model) {\n throw new NotFoundException("').concat(r,'");\n }\n await model.$query().delete();\n};\n'),n.writeFileSafe(d,c,i)};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.js"),n=require("
|
|
2
|
+
"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.js"),n=require("./utils.js"),t=["int","integer","bigint","smallint","tinyint","numeric","decimal","float"],a=["varchar","text","string","char","character varying","uuid","date","datetime","timestamp","timestamp with time zone"],r=["boolean"];function c(c,o){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=o.type,l=o.nullable,p=o.defaultValue,m=["z"],d=t.includes(s),f=a.includes(s),v=r.includes(s),h=u.map((function(e){return e.column_name})).includes(c);if(d)m.push("coerce.number()");else if(f)m.push("string()");else if(v)m.push("boolean()");else if(h){var y=u.find((function(e){return e.column_name===c}));y&&m.push("enum(Object.values(".concat(y.enum_name,") as [string, ...string[]])"))}else m.push("any()");var g=i.includes(c);l&&(m.push("optional()"),m.push("nullish()"));var b=["CURRENT_TIMESTAMP"].includes(p);if(p&&!b&&!g){var C;if(d)C=parseInt(p);else if(h){var x=u.find((function(e){return e.column_name===c}));x&&(C="".concat(x.enum_name,".").concat(n.extractEnumValue(p)))}else C=v?p:"'".concat(p,"'");void 0!==e.typeof(C)&&m.push("default(".concat(C,")"))}return"".concat(n.toCamelCase(c),":").concat(m.join("."))}function o(e,c){var o=c.type,i=["z"],u=t.includes(o),s=a.includes(o),l=r.includes(o);return u?i.push("coerce.number().int().nonoptional()"):s?i.push("string().nonempty().nonoptional()"):l?i.push("boolean()"):i.push("any()"),"".concat(n.toCamelCase(e),":").concat(i.join("."))}function i(e){return!["created_at","updated_at","createdAt","updatedAt"].includes(e)}var u=function(){var t=e.asyncToGenerator(e.regeneratorRuntime().mark((function t(a,r){var u,s,l,p,m,d,f,v,h,y,g,b,C,x,T,j,A,_,z,P=arguments;return e.regeneratorRuntime().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return u=P.length>2&&void 0!==P[2]?P[2]:"public",s=P.length>3&&void 0!==P[3]?P[3]:"pg",l=P.length>4&&void 0!==P[4]?P[4]:"default",t.prev=3,a||(console.error("table name undefined"),process.exit(1)),p=n.removePluralSuffix(a),m="".concat(n.toKebabCase(p),".validation.ts"),d="Create".concat(n.toPascalCase(p),"Schema"),f="Update".concat(n.toPascalCase(p),"Schema"),v="create".concat(n.toPascalCase(p),"Schema"),h="update".concat(n.toPascalCase(p),"Schema"),y=n.resolveOutputPath(["src","app","http","validation"],l,m),t.next=14,n.getTableColumns(r,a,u,s);case 14:return g=t.sent,b=Object.fromEntries(g.map(n.normalizeColumn)),t.next=18,n.getPrimaryKeys(r,a,u,s);case 18:return C=t.sent,t.next=21,n.getEnumFieldsAndValues(r,a,u,s);case 21:x=t.sent,T=Object.entries(b).filter((function(n){return i(e.slicedToArray(n,1)[0])})).filter((function(n){var t=e.slicedToArray(n,1)[0];return!C.includes(t)})).map((function(t){var a=e.slicedToArray(t,2),r=a[0],o=a[1];return[n.toCamelCase(r),c(r,o,C,x)]})),j=Object.entries(b).filter((function(n){return i(e.slicedToArray(n,1)[0])})).filter((function(n){var t=e.slicedToArray(n,1)[0];return C.includes(t)})).map((function(t){var a=e.slicedToArray(t,2),r=a[0],c=a[1];return[n.toCamelCase(r),o(r,c)]})),A="",x.length&&(_=x.map((function(e){return e.enum_name})).join(","),A="import { ".concat(_,' } from "@generated/prisma";')),z='\nimport * as z from "zod";\n'.concat(A,"\n\nexport const ").concat(v," = z.object({\n ").concat(T.map((function(n){var t=e.slicedToArray(n,2);return t[0],t[1]})).join(",\n"),"\n});\n\nexport type ").concat(d," = z.infer<typeof ").concat(v,">;\n\nexport const ").concat(h," = ").concat(v,".extend({\n ").concat(j.map((function(n){var t=e.slicedToArray(n,2);return t[0],t[1]})).join(",\n"),"\n});\n\nexport type ").concat(f," = z.infer<typeof ").concat(h,">;\n"),n.writeFileSafe(y,z,m),t.next=33;break;case 30:t.prev=30,t.t0=t.catch(3),console.error("err:",t.t0);case 33:case"end":return t.stop()}}),t,null,[[3,30]])})));return function(e,n){return t.apply(this,arguments)}}();module.exports=u;
|
package/lib/express/utils.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");require("path");var n=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t){return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,t.query("SELECT 1");case 3:console.log("Connection success"),e.next=10;break;case 6:e.prev=6,e.t0=e.catch(0),console.error("Gagal terhubung ke database:",e.t0),process.exit(1);case 10:case"end":return e.stop()}}),n,null,[[0,6]])})));return function(e){return n.apply(this,arguments)}}(),t=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t,a){var r,o,c,s,u,i,m,l,_,E=arguments;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=E.length>2&&void 0!==E[2]?E[2]:"public",o=E.length>3&&void 0!==E[3]?E[3]:"pg",e.prev=2,"pg"===o?(c="\n SELECT *\n FROM information_schema.columns\n WHERE table_catalog = current_database()\n AND table_name = $1\n AND table_schema = $2\n ",s=[a,r]):(c="\n SELECT *\n FROM information_schema.columns\n WHERE table_schema = ?\n AND table_name = ?\n ",s=[r,a]),e.next=6,t.query(c,s);case 6:return u=e.sent,i=u.rows,m=void 0===i?[]:i,l=u[0],_=void 0===l?[]:l,e.abrupt("return",m.length?m:_);case 14:throw e.prev=14,e.t0=e.catch(2),console.error("Gagal mengambil informasi tabel:",e.t0),e.t0;case 18:case"end":return e.stop()}}),n,null,[[2,14]])})));return function(e,t){return n.apply(this,arguments)}}(),a=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t,a){var r,o,c,s,u,i,m,l,_,E,p=arguments;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=p.length>2&&void 0!==p[2]?p[2]:"public",o=p.length>3&&void 0!==p[3]?p[3]:"pg",e.prev=2,"pg"===o?(c="\n SELECT a.attname as column_name\n FROM pg_index i\n JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)\n JOIN pg_class c ON c.oid = i.indrelid\n JOIN pg_namespace n ON n.oid = c.relnamespace\n WHERE i.indisprimary = true\n AND c.relname = $1\n AND n.nspname = $2\n ",s=[a,r]):(c="\n SELECT COLUMN_NAME AS column_name\n FROM information_schema.KEY_COLUMN_USAGE\n WHERE TABLE_SCHEMA = ?\n AND TABLE_NAME = ?\n AND CONSTRAINT_NAME = 'PRIMARY'\n ",s=[r,a]),e.next=6,t.query(c,s);case 6:return u=e.sent,i=u.rows,m=void 0===i?[]:i,l=u[0],_=void 0===l?[]:l,E=m.length?m:_,e.abrupt("return",E.map((function(e){return e.column_name})));case 15:throw e.prev=15,e.t0=e.catch(2),console.error("Error fetching primary keys:",e.t0),e.t0;case 19:case"end":return e.stop()}}),n,null,[[2,15]])})));return function(e,t){return n.apply(this,arguments)}}(),r=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t,a){var r,o,c,s,u,i,m,l,_,E=arguments;return e.regeneratorRuntime().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(r=E.length>2&&void 0!==E[2]?E[2]:"public",o=E.length>3&&void 0!==E[3]?E[3]:"pg",n.prev=2,"mysql"!==o){n.next=13;break}return"\n SELECT COLUMN_NAME, COLUMN_TYPE\n FROM information_schema.columns\n WHERE table_schema = ?\n AND table_name = ?\n AND data_type = 'enum'\n ",n.next=7,t.query("\n SELECT COLUMN_NAME, COLUMN_TYPE\n FROM information_schema.columns\n WHERE table_schema = ?\n AND table_name = ?\n AND data_type = 'enum'\n ",[r,a]);case 7:return c=n.sent,s=e.slicedToArray(c,1),u=s[0],n.abrupt("return",u.map((function(e){return{column_name:e.COLUMN_NAME,enum_name:e.COLUMN_NAME,values:e.COLUMN_TYPE.replace(/^enum\((.*)\)$/,"$1").split(",").map((function(e){return e.trim().replace(/^'|'$/g,"")}))}})));case 13:return"\n SELECT column_name, udt_name\n FROM information_schema.columns\n WHERE table_schema = $1\n AND table_name = $2\n AND data_type = 'USER-DEFINED'\n ",n.next=16,t.query("\n SELECT column_name, udt_name\n FROM information_schema.columns\n WHERE table_schema = $1\n AND table_name = $2\n AND data_type = 'USER-DEFINED'\n ",[r,a]);case 16:if(0!==(i=n.sent).rows.length){n.next=19;break}return n.abrupt("return",[]);case 19:return m=i.rows.map((function(e){return e.udt_name})),"\n SELECT t.typname as enum_name, e.enumlabel as value\n FROM pg_type t\n JOIN pg_enum e ON t.oid = e.enumtypid\n JOIN pg_namespace n ON n.oid = t.typnamespace\n WHERE t.typname = ANY($1)\n ORDER BY t.typname, e.enumsortorder\n ",n.next=23,t.query("\n SELECT t.typname as enum_name, e.enumlabel as value\n FROM pg_type t\n JOIN pg_enum e ON t.oid = e.enumtypid\n JOIN pg_namespace n ON n.oid = t.typnamespace\n WHERE t.typname = ANY($1)\n ORDER BY t.typname, e.enumsortorder\n ",[m]);case 23:return l=n.sent,_=l.rows.reduce((function(e,n){return e[n.enum_name]=e[n.enum_name]||[],e[n.enum_name].push(n.value),e}),{}),n.abrupt("return",i.rows.map((function(e){return{column_name:e.column_name,enum_name:e.udt_name,values:_[e.udt_name]||[]}})));case 26:n.next=32;break;case 28:throw n.prev=28,n.t0=n.catch(2),console.error("Error fetching ENUM fields:",n.t0),n.t0;case 32:case"end":return n.stop()}}),n,null,[[2,28]])})));return function(e,t){return n.apply(this,arguments)}}(),o=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t,a){var r,o,c,s,u,i,m,l,_,E,p,N,f,A,g,h,b,O=arguments;return e.regeneratorRuntime().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(r=O.length>2&&void 0!==O[2]?O[2]:"public",o=O.length>3&&void 0!==O[3]?O[3]:"pg",n.prev=2,"mysql"!==o){n.next=13;break}return"\n SELECT \n TABLE_NAME,\n COLUMN_NAME,\n REFERENCED_TABLE_NAME AS foreign_table_name,\n REFERENCED_COLUMN_NAME AS foreign_column_name\n FROM information_schema.KEY_COLUMN_USAGE\n WHERE TABLE_SCHEMA = ?\n AND TABLE_NAME = ?\n AND REFERENCED_TABLE_NAME IS NOT NULL\n ",n.next=7,t.query("\n SELECT \n TABLE_NAME,\n COLUMN_NAME,\n REFERENCED_TABLE_NAME AS foreign_table_name,\n REFERENCED_COLUMN_NAME AS foreign_column_name\n FROM information_schema.KEY_COLUMN_USAGE\n WHERE TABLE_SCHEMA = ?\n AND TABLE_NAME = ?\n AND REFERENCED_TABLE_NAME IS NOT NULL\n ",[r,a]);case 7:return c=n.sent,s=e.slicedToArray(c,1),u=s[0],n.abrupt("return",u.map((function(e){return{relation:"BelongsToOneRelation",relatedTable:e.foreign_table_name,foreignKey:e.COLUMN_NAME,localKey:e.foreign_column_name}})));case 13:return"\n SELECT \n tc.table_name,\n kcu.column_name,\n ccu.table_name AS foreign_table_name,\n ccu.column_name AS foreign_column_name\n FROM information_schema.table_constraints AS tc\n JOIN information_schema.key_column_usage AS kcu \n ON tc.constraint_name = kcu.constraint_name\n JOIN information_schema.constraint_column_usage AS ccu \n ON ccu.constraint_name = tc.constraint_name\n WHERE tc.constraint_type = 'FOREIGN KEY'\n AND tc.table_name = $1\n AND tc.table_schema = $2\n ",i="\n SELECT \n tc.table_name,\n kcu.column_name,\n ccu.table_name AS foreign_table_name,\n ccu.column_name AS foreign_column_name\n FROM information_schema.table_constraints AS tc\n JOIN information_schema.key_column_usage AS kcu \n ON tc.constraint_name = kcu.constraint_name\n JOIN information_schema.constraint_column_usage AS ccu \n ON ccu.constraint_name = tc.constraint_name\n WHERE tc.constraint_type = 'FOREIGN KEY'\n AND ccu.table_name = $1\n AND tc.table_schema = $2\n ",n.next=17,t.query("\n SELECT \n tc.table_name,\n kcu.column_name,\n ccu.table_name AS foreign_table_name,\n ccu.column_name AS foreign_column_name\n FROM information_schema.table_constraints AS tc\n JOIN information_schema.key_column_usage AS kcu \n ON tc.constraint_name = kcu.constraint_name\n JOIN information_schema.constraint_column_usage AS ccu \n ON ccu.constraint_name = tc.constraint_name\n WHERE tc.constraint_type = 'FOREIGN KEY'\n AND tc.table_name = $1\n AND tc.table_schema = $2\n ",[a,r]);case 17:return m=n.sent,l=m.rows,n.next=21,t.query(i,[a,r]);case 21:_=n.sent,E=_.rows,p={},N=e.createForOfIteratorHelper(l);try{for(N.s();!(f=N.n()).done;)A=f.value,p[A.foreign_table_name]={relation:"BelongsToOneRelation",relatedTable:A.foreign_table_name,foreignKey:A.column_name,localKey:A.foreign_column_name}}catch(e){N.e(e)}finally{N.f()}g=e.createForOfIteratorHelper(E);try{for(g.s();!(h=g.n()).done;)b=h.value,p[b.table_name]={relation:"HasManyRelation",relatedTable:b.table_name,foreignKey:b.foreign_column_name,localKey:b.column_name}}catch(e){g.e(e)}finally{g.f()}return n.abrupt("return",p);case 29:n.next=35;break;case 31:throw n.prev=31,n.t0=n.catch(2),console.error("Error fetching table relations:",n.t0),n.t0;case 35:case"end":return n.stop()}}),n,null,[[2,31]])})));return function(e,t){return n.apply(this,arguments)}}(),c=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t){var a,r,o,c,s,u,i,m,l,_=arguments;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=_.length>1&&void 0!==_[1]?_[1]:"public",r=_.length>2&&void 0!==_[2]?_[2]:"pg",e.prev=2,"mysql"===r?(o="\n SELECT *\n FROM information_schema.tables\n WHERE table_schema = ?\n AND table_type = 'BASE TABLE'\n AND table_name NOT IN ('migrations', '_prisma_migrations')\n ",c=[a]):(o="\n SELECT *\n FROM information_schema.tables\n WHERE table_schema = $1\n AND table_schema NOT IN ('information_schema', 'pg_catalog')\n AND table_type = 'BASE TABLE'\n AND table_name NOT IN ('migrations', '_prisma_migrations', 'migrations_lock')\n ",c=[a]),e.next=6,t.query(o,c);case 6:return s=e.sent,u=s.rows,i=void 0===u?[]:u,m=s[0],l=void 0===m?[]:m,e.abrupt("return",i.length?i:l);case 14:throw e.prev=14,e.t0=e.catch(2),console.error("Error fetching tables:",e.t0),e.t0;case 18:case"end":return e.stop()}}),n,null,[[2,14]])})));return function(e){return n.apply(this,arguments)}}();exports.capitalize=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},exports.checkDatabaseConnection=n,exports.extractEnumValue=function(e){if(!e)return null;var n=e.match(/^'(.+?)'::/);return n?n[1]:e},exports.getEnumFieldsAndValues=r,exports.getPrimaryKeys=a,exports.getTableColumns=t,exports.getTableRelations=o,exports.getTables=c,exports.removePluralSuffix=function(e){var n={children:"child",men:"man",women:"woman",mice:"mouse",geese:"goose",feet:"foot",teeth:"tooth",people:"person",data:"datum",criteria:"criterion",fungi:"fungus",nuclei:"nucleus",cacti:"cactus"};return n[e.toLowerCase()]?n[e.toLowerCase()]:/(ies)$/.test(e)?e.replace(/ies$/,"y"):/(ves)$/.test(e)?e.replace(/ves$/,"f"):/(oes|xes|ses|shes|ches|zes)$/.test(e)?e.replace(/(oes|xes|ses|shes|ches|zes)$/,""):/(s)$/.test(e)&&!/(ss)$/.test(e)?e.replace(/s$/,""):e},exports.toCamelCase=function(e){return e.replace(/[-_]+(.)?/g,(function(e,n){return n?n.toUpperCase():""})).replace(/^[A-Z]/,(function(e){return e.toLowerCase()}))},exports.toKebabCase=function(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").toLowerCase()},exports.toPascalCase=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("")};
|
|
2
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../_virtual/_rollupPluginBabelHelpers.js"),n=require("fs"),t=require("path"),a=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t){return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,t.query("SELECT 1");case 3:console.log("Connection success"),e.next=10;break;case 6:e.prev=6,e.t0=e.catch(0),console.error("Gagal terhubung ke database:",e.t0),process.exit(1);case 10:case"end":return e.stop()}}),n,null,[[0,6]])})));return function(e){return n.apply(this,arguments)}}(),r=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t,a){var r,o,c,s,u,i,m,l,_,E=arguments;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=E.length>2&&void 0!==E[2]?E[2]:"public",o=E.length>3&&void 0!==E[3]?E[3]:"pg",e.prev=2,"pg"===o?(c="\n SELECT *\n FROM information_schema.columns\n WHERE table_catalog = current_database()\n AND table_name = $1\n AND table_schema = $2\n ",s=[a,r]):(c="\n SELECT *\n FROM information_schema.columns\n WHERE table_schema = ?\n AND table_name = ?\n ",s=[r,a]),e.next=6,t.query(c,s);case 6:return u=e.sent,i=u.rows,m=void 0===i?[]:i,l=u[0],_=void 0===l?[]:l,e.abrupt("return",m.length?m:_);case 14:throw e.prev=14,e.t0=e.catch(2),console.error("Gagal mengambil informasi tabel:",e.t0),e.t0;case 18:case"end":return e.stop()}}),n,null,[[2,14]])})));return function(e,t){return n.apply(this,arguments)}}(),o=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t,a){var r,o,c,s,u,i,m,l,_,E,p=arguments;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=p.length>2&&void 0!==p[2]?p[2]:"public",o=p.length>3&&void 0!==p[3]?p[3]:"pg",e.prev=2,"pg"===o?(c="\n SELECT a.attname as column_name\n FROM pg_index i\n JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)\n JOIN pg_class c ON c.oid = i.indrelid\n JOIN pg_namespace n ON n.oid = c.relnamespace\n WHERE i.indisprimary = true\n AND c.relname = $1\n AND n.nspname = $2\n ",s=[a,r]):(c="\n SELECT COLUMN_NAME AS column_name\n FROM information_schema.KEY_COLUMN_USAGE\n WHERE TABLE_SCHEMA = ?\n AND TABLE_NAME = ?\n AND CONSTRAINT_NAME = 'PRIMARY'\n ",s=[r,a]),e.next=6,t.query(c,s);case 6:return u=e.sent,i=u.rows,m=void 0===i?[]:i,l=u[0],_=void 0===l?[]:l,E=m.length?m:_,e.abrupt("return",E.map((function(e){return e.column_name})));case 15:throw e.prev=15,e.t0=e.catch(2),console.error("Error fetching primary keys:",e.t0),e.t0;case 19:case"end":return e.stop()}}),n,null,[[2,15]])})));return function(e,t){return n.apply(this,arguments)}}(),c=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t,a){var r,o,c,s,u,i,m,l,_,E=arguments;return e.regeneratorRuntime().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(r=E.length>2&&void 0!==E[2]?E[2]:"public",o=E.length>3&&void 0!==E[3]?E[3]:"pg",n.prev=2,"mysql"!==o){n.next=13;break}return"\n SELECT COLUMN_NAME, COLUMN_TYPE\n FROM information_schema.columns\n WHERE table_schema = ?\n AND table_name = ?\n AND data_type = 'enum'\n ",n.next=7,t.query("\n SELECT COLUMN_NAME, COLUMN_TYPE\n FROM information_schema.columns\n WHERE table_schema = ?\n AND table_name = ?\n AND data_type = 'enum'\n ",[r,a]);case 7:return c=n.sent,s=e.slicedToArray(c,1),u=s[0],n.abrupt("return",u.map((function(e){return{column_name:e.COLUMN_NAME,enum_name:e.COLUMN_NAME,values:e.COLUMN_TYPE.replace(/^enum\((.*)\)$/,"$1").split(",").map((function(e){return e.trim().replace(/^'|'$/g,"")}))}})));case 13:return"\n SELECT column_name, udt_name\n FROM information_schema.columns\n WHERE table_schema = $1\n AND table_name = $2\n AND data_type = 'USER-DEFINED'\n ",n.next=16,t.query("\n SELECT column_name, udt_name\n FROM information_schema.columns\n WHERE table_schema = $1\n AND table_name = $2\n AND data_type = 'USER-DEFINED'\n ",[r,a]);case 16:if(0!==(i=n.sent).rows.length){n.next=19;break}return n.abrupt("return",[]);case 19:return m=i.rows.map((function(e){return e.udt_name})),"\n SELECT t.typname as enum_name, e.enumlabel as value\n FROM pg_type t\n JOIN pg_enum e ON t.oid = e.enumtypid\n JOIN pg_namespace n ON n.oid = t.typnamespace\n WHERE t.typname = ANY($1)\n ORDER BY t.typname, e.enumsortorder\n ",n.next=23,t.query("\n SELECT t.typname as enum_name, e.enumlabel as value\n FROM pg_type t\n JOIN pg_enum e ON t.oid = e.enumtypid\n JOIN pg_namespace n ON n.oid = t.typnamespace\n WHERE t.typname = ANY($1)\n ORDER BY t.typname, e.enumsortorder\n ",[m]);case 23:return l=n.sent,_=l.rows.reduce((function(e,n){return e[n.enum_name]=e[n.enum_name]||[],e[n.enum_name].push(n.value),e}),{}),n.abrupt("return",i.rows.map((function(e){return{column_name:e.column_name,enum_name:e.udt_name,values:_[e.udt_name]||[]}})));case 26:n.next=32;break;case 28:throw n.prev=28,n.t0=n.catch(2),console.error("Error fetching ENUM fields:",n.t0),n.t0;case 32:case"end":return n.stop()}}),n,null,[[2,28]])})));return function(e,t){return n.apply(this,arguments)}}(),s=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t,a){var r,o,c,s,u,i,m,l,_,E,p,N,f,A,g,h,b,d=arguments;return e.regeneratorRuntime().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(r=d.length>2&&void 0!==d[2]?d[2]:"public",o=d.length>3&&void 0!==d[3]?d[3]:"pg",n.prev=2,"mysql"!==o){n.next=13;break}return"\n SELECT \n TABLE_NAME,\n COLUMN_NAME,\n REFERENCED_TABLE_NAME AS foreign_table_name,\n REFERENCED_COLUMN_NAME AS foreign_column_name\n FROM information_schema.KEY_COLUMN_USAGE\n WHERE TABLE_SCHEMA = ?\n AND TABLE_NAME = ?\n AND REFERENCED_TABLE_NAME IS NOT NULL\n ",n.next=7,t.query("\n SELECT \n TABLE_NAME,\n COLUMN_NAME,\n REFERENCED_TABLE_NAME AS foreign_table_name,\n REFERENCED_COLUMN_NAME AS foreign_column_name\n FROM information_schema.KEY_COLUMN_USAGE\n WHERE TABLE_SCHEMA = ?\n AND TABLE_NAME = ?\n AND REFERENCED_TABLE_NAME IS NOT NULL\n ",[r,a]);case 7:return c=n.sent,s=e.slicedToArray(c,1),u=s[0],n.abrupt("return",u.map((function(e){return{relation:"BelongsToOneRelation",relatedTable:e.foreign_table_name,foreignKey:e.COLUMN_NAME,localKey:e.foreign_column_name}})));case 13:return"\n SELECT \n tc.table_name,\n kcu.column_name,\n ccu.table_name AS foreign_table_name,\n ccu.column_name AS foreign_column_name\n FROM information_schema.table_constraints AS tc\n JOIN information_schema.key_column_usage AS kcu \n ON tc.constraint_name = kcu.constraint_name\n JOIN information_schema.constraint_column_usage AS ccu \n ON ccu.constraint_name = tc.constraint_name\n WHERE tc.constraint_type = 'FOREIGN KEY'\n AND tc.table_name = $1\n AND tc.table_schema = $2\n ",i="\n SELECT \n tc.table_name,\n kcu.column_name,\n ccu.table_name AS foreign_table_name,\n ccu.column_name AS foreign_column_name\n FROM information_schema.table_constraints AS tc\n JOIN information_schema.key_column_usage AS kcu \n ON tc.constraint_name = kcu.constraint_name\n JOIN information_schema.constraint_column_usage AS ccu \n ON ccu.constraint_name = tc.constraint_name\n WHERE tc.constraint_type = 'FOREIGN KEY'\n AND ccu.table_name = $1\n AND tc.table_schema = $2\n ",n.next=17,t.query("\n SELECT \n tc.table_name,\n kcu.column_name,\n ccu.table_name AS foreign_table_name,\n ccu.column_name AS foreign_column_name\n FROM information_schema.table_constraints AS tc\n JOIN information_schema.key_column_usage AS kcu \n ON tc.constraint_name = kcu.constraint_name\n JOIN information_schema.constraint_column_usage AS ccu \n ON ccu.constraint_name = tc.constraint_name\n WHERE tc.constraint_type = 'FOREIGN KEY'\n AND tc.table_name = $1\n AND tc.table_schema = $2\n ",[a,r]);case 17:return m=n.sent,l=m.rows,n.next=21,t.query(i,[a,r]);case 21:_=n.sent,E=_.rows,p={},N=e.createForOfIteratorHelper(l);try{for(N.s();!(f=N.n()).done;)A=f.value,p[A.foreign_table_name]={relation:"BelongsToOneRelation",relatedTable:A.foreign_table_name,foreignKey:A.column_name,localKey:A.foreign_column_name}}catch(e){N.e(e)}finally{N.f()}g=e.createForOfIteratorHelper(E);try{for(g.s();!(h=g.n()).done;)b=h.value,p[b.table_name]={relation:"HasManyRelation",relatedTable:b.table_name,foreignKey:b.foreign_column_name,localKey:b.column_name}}catch(e){g.e(e)}finally{g.f()}return n.abrupt("return",p);case 29:n.next=35;break;case 31:throw n.prev=31,n.t0=n.catch(2),console.error("Error fetching table relations:",n.t0),n.t0;case 35:case"end":return n.stop()}}),n,null,[[2,31]])})));return function(e,t){return n.apply(this,arguments)}}(),u=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(t){var a,r,o,c,s,u,i,m,l,_=arguments;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=_.length>1&&void 0!==_[1]?_[1]:"public",r=_.length>2&&void 0!==_[2]?_[2]:"pg",e.prev=2,"mysql"===r?(o="\n SELECT *\n FROM information_schema.tables\n WHERE table_schema = ?\n AND table_type = 'BASE TABLE'\n AND table_name NOT IN ('migrations', '_prisma_migrations')\n ",c=[a]):(o="\n SELECT *\n FROM information_schema.tables\n WHERE table_schema = $1\n AND table_schema NOT IN ('information_schema', 'pg_catalog')\n AND table_type = 'BASE TABLE'\n AND table_name NOT IN ('migrations', '_prisma_migrations', 'migrations_lock')\n ",c=[a]),e.next=6,t.query(o,c);case 6:return s=e.sent,u=s.rows,i=void 0===u?[]:u,m=s[0],l=void 0===m?[]:m,e.abrupt("return",i.length?i:l);case 14:throw e.prev=14,e.t0=e.catch(2),console.error("Error fetching tables:",e.t0),e.t0;case 18:case"end":return e.stop()}}),n,null,[[2,14]])})));return function(e){return n.apply(this,arguments)}}();exports.capitalize=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},exports.checkDatabaseConnection=a,exports.extractEnumValue=function(e){if(!e)return null;var n=e.match(/^'(.+?)'::/);return n?n[1]:e},exports.getEnumFieldsAndValues=c,exports.getPrimaryKeys=o,exports.getTableColumns=r,exports.getTableRelations=s,exports.getTables=u,exports.normalizeColumn=function(e){var n,t,a,r,o;return[null!==(n=e.column_name)&&void 0!==n?n:e.COLUMN_NAME,{defaultValue:null!==(t=e.column_default)&&void 0!==t?t:e.COLUMN_DEFAULT,type:null!==(a=e.data_type)&&void 0!==a?a:e.DATA_TYPE,maxLength:null!==(r=e.character_maximum_length)&&void 0!==r?r:e.CHARACTER_MAXIMUM_LENGTH,nullable:"YES"===(null!==(o=e.is_nullable)&&void 0!==o?o:e.IS_NULLABLE)}]},exports.removePluralSuffix=function(e){var n={children:"child",men:"man",women:"woman",mice:"mouse",geese:"goose",feet:"foot",teeth:"tooth",people:"person",data:"datum",criteria:"criterion",fungi:"fungus",nuclei:"nucleus",cacti:"cactus"};return n[e.toLowerCase()]?n[e.toLowerCase()]:/(ies)$/.test(e)?e.replace(/ies$/,"y"):/(ves)$/.test(e)?e.replace(/ves$/,"f"):/(oes|xes|ses|shes|ches|zes)$/.test(e)?e.replace(/(oes|xes|ses|shes|ches|zes)$/,""):/(s)$/.test(e)&&!/(ss)$/.test(e)?e.replace(/s$/,""):e},exports.resolveOutputPath=function(n,a,r){return"default"!==a?t.join(process.cwd(),a,r):t.join.apply(t,[process.cwd()].concat(e.toConsumableArray(n),[r]))},exports.toCamelCase=function(e){return e.replace(/[-_]+(.)?/g,(function(e,n){return n?n.toUpperCase():""})).replace(/^[A-Z]/,(function(e){return e.toLowerCase()}))},exports.toKebabCase=function(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").toLowerCase()},exports.toPascalCase=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("")},exports.writeFileSafe=function(e,a,r){var o=t.dirname(e);n.existsSync(o)||n.mkdirSync(o,{recursive:!0}),n.writeFile(e,a,(function(e){e?console.error("err:",e):console.log("File ".concat(r," has been created"))}))};
|
package/lib/main.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e,r=require("./_virtual/_rollupPluginBabelHelpers.js"),a=require("./express/utils.js"),t=require("./express/make_model.js"),n=require("./express/make_resource.js"),s=require("./express/make_controller.js"),
|
|
2
|
+
"use strict";var e,r=require("./_virtual/_rollupPluginBabelHelpers.js"),a=require("./express/utils.js"),t=require("./express/make_model.js"),n=require("./express/make_resource.js"),s=require("./express/make_controller.js"),o=require("./express/make_crud.js"),c=require("./express/make_validation.js"),l=require("./express/make_service.js"),i=require("./express/make_repository.js"),u=require("./express/make_module.js"),p=require("./db.js"),m=r.toArray(process.argv);m[0],m[1];var d=m[2],k=m.slice(3);d||(console.error("❌ action undefined."),process.exit(1));var v="",f="default",x=null!==(e=process.env.DB_SCHEMA)&&void 0!==e?e:"public",b=process.env.DB_CLIENT||"pg",h=!1,y=!1;if(k.length>0){var g,q=r.createForOfIteratorHelper(k);try{for(q.s();!(g=q.n()).done;){var _=g.value.split("="),j=r.slicedToArray(_,2),G=j[0],C=j[1];"--schema"===G&&(x=C),"--path"===G&&(f=C),"--prisma"===G&&(h=!0),"--mysql"===G&&(b="mysql"),"--pg"===G&&(b="pg"),"--skip-controller"===G&&!0,"--controller-only"===G&&(y=!0),"--table"===G&&(v=C)}}catch(e){q.e(e)}finally{q.f()}v||"make:crud"===d||(console.error("❌ table undefined."),process.exit(1))}if("--help"===d&&(console.log("\n Usage:npx frgen <action> [options]\n \n Actions:\n make:model Generate model file\n make:resource Generate resource file\n make:controller Generate controller, service, validation, and resource files\n make:crud Generate all files for CRUD operations\n make:validation Generate validation files\n make:service Generate service files\n make:repository Generate repository file (Prisma)\n make:module Generate module folder (controller, service, repository, validation)\n --help Show this help message\n\n Options:\n --table=<table_name> Specify the table name (required)\n --schema=<schema_name> Specify the database schema (default: public)\n --path=<output_path> Specify the output path (default: default)\n --prisma Generate Prisma-compatible service files\n --mysql Use MySQL as the database client\n --pg Use PostgreSQL as the database client\n "),process.exit(0)),"make:crud"===d){var S=r.toArray(process.argv);S[0],S[1],S[2];var A=S.slice(3);if(A.length>0){var P,D=r.createForOfIteratorHelper(A);try{for(D.s();!(P=D.n()).done;){var R=P.value.split("="),B=r.slicedToArray(R,2),E=B[0],T=B[1];"--schema"===E&&(x=T),"--prisma"===E&&(h=!0),"--pg"===E&&(b="pg"),"--mysql"===E&&(b="mysql",x=process.env.DB_NAME)}}catch(e){D.e(e)}finally{D.f()}}}(function(){var e=r.asyncToGenerator(r.regeneratorRuntime().mark((function e(){var m,k,g,q,_,j,G,C,S,A,P;return r.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,process.env.DB_CLIENT=b,e.next=4,p.createPool();case 4:return m=e.sent,e.next=7,a.checkDatabaseConnection(m);case 7:e.t0=d,e.next="make:model"===e.t0?10:"make:resource"===e.t0?14:"make:controller"===e.t0?17:"make:crud"===e.t0?37:"make:validation"===e.t0?40:"make:service"===e.t0?43:"make:repository"===e.t0?46:"make:module"===e.t0?49:52;break;case 10:return k="".concat(a.toPascalCase(a.removePluralSuffix(v)),"Controller"),e.next=13,t(k,v,m,x,b);case 13:return e.abrupt("break",54);case 14:return e.next=16,n(v,m,x,b,f);case 16:return e.abrupt("break",54);case 17:return g=f.endsWith("/")?f.slice(0,-1):f,q=g.includes("controller"),_=q?g:"".concat(g,"/controller"),j=q?g.replace("controller","service"):"".concat(g,"/service"),G=q?g.replace("controller","validation"):"".concat(g,"/validation"),C=q?g.replace("controller","resource"):"".concat(g,"/resource"),S=q?g.replace("controller","repository"):"".concat(g,"/repository"),e.next=26,s(v,_);case 26:if(y){e.next=36;break}if(!h){e.next=30;break}return e.next=30,i(v,S);case 30:return e.next=32,l(v,j,h);case 32:return e.next=34,c(v,m,x,b,G);case 34:return e.next=36,n(v,m,x,b,C);case 36:return e.abrupt("break",54);case 37:return e.next=39,o(f,m,x,h,b);case 39:return e.abrupt("break",54);case 40:return e.next=42,c(v,m,x,b,f);case 42:return e.abrupt("break",54);case 43:return e.next=45,l(v,f,h);case 45:return e.abrupt("break",54);case 46:return e.next=48,i(v,f);case 48:return e.abrupt("break",54);case 49:return e.next=51,u(v,f,m,x,b,h);case 51:return e.abrupt("break",54);case 52:console.error("❌ Unknown action: ".concat(d)),process.exit(1);case 54:e.next=60;break;case 56:e.prev=56,e.t1=e.catch(0),console.error("❌ ERROR:",e.t1),process.exit(1);case 60:if(e.prev=60,null===(A=m)||void 0===A||!A.end){e.next=66;break}return e.next=64,m.end();case 64:e.next=69;break;case 66:if(null===(P=m)||void 0===P||!P.releaseConnection){e.next=69;break}return e.next=69,m.releaseConnection();case 69:return e.finish(60);case 70:case"end":return e.stop()}}),e,null,[[0,56,60,70]])})));return function(){return e.apply(this,arguments)}})()();
|
package/lib/react/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"),r=require("json-schema-to-typescript"),o=require("url"),a=require("node:module"),c=require("module"),s="undefined"!=typeof document?document.currentScript:null,i=function(e){return e.replace(/[-_]+(.)?/g,(function(e,n){return n?n.toUpperCase():""})).replace(/^[A-Z]/,(function(e){return e.toLowerCase()}))},u=function(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").toLowerCase()},p=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("")},l=function(e){return["string"].includes(e)},m=function(e){return["integer","number"].includes(e)},d=function(e){return["boolean"].includes(e)},f=function(e){n.existsSync(e)||n.mkdirSync(e,{recursive:!0})},g=function(e,t,r){n.writeFile(e,t,(function(n){n?console.error("❌ Error writing file ".concat(e,":"),n.message):console.log("✅ ".concat(r))}))},v=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)}}(),h=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}))},y=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(r,o,a){var c,s,i,p,l,m,d,y;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,c=r.title,s=r.properties,i="".concat(a,".page.tsx"),p=t.join(process.cwd(),"src","pages",u(c),i),l=t.dirname(p),m="",e.next=8,v(o);case 8:(d=e.sent)&&(y="index"===a||"view"===a?{modelName:c,columns:h(s)}:{modelName:c,jsonSchema:r},m=d(y)),f(l),g(p,m,"".concat(c," ").concat(i," 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)}}(),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,y(t,r,"index");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(t,r){return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,y(t,r,"view");case 2:case"end":return e.stop()}}),n)})));return function(e,t){return n.apply(this,arguments)}}(),b=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,y(t,r,"create");case 2:case"end":return e.stop()}}),n)})));return function(e,t){return n.apply(this,arguments)}}(),S=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,y(t,r,"update");case 2:case"end":return e.stop()}}),n)})));return function(e,t){return n.apply(this,arguments)}}(),R=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(r){var o,a,c,s,i,p,l,m=arguments;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=m.length>2?m[2]:void 0,e.prev=2,a=r.title,c="Form.tsx",s=t.join(process.cwd(),"src","pages",u(a),"partial",c),i=t.dirname(s),p="",e.next=10,v(o);case 10:(l=e.sent)&&(p=l({modelName:a,jsonSchema:r})),f(i),g(s,p,"".concat(a," ").concat(c," 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)}}(),j=function(){var r=e.asyncToGenerator(e.regeneratorRuntime().mark((function r(){var i,u,p,l,m;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=[t.resolve("regen.config.ts"),t.resolve("regen.config.js")],u=i.find((function(e){return n.existsSync(e)}))){e.next=4;break}return e.abrupt("return",{templateDir:void 0});case 4:if(e.prev=4,!u.endsWith(".ts")){e.next=22;break}e.prev=6,a.register("tsx",o.pathToFileURL("./")),e.next=22;break;case 10:e.prev=10,e.t0=e.catch(6),e.prev=12,c.createRequire("undefined"==typeof document?require("url").pathToFileURL(__filename).href:s&&"SCRIPT"===s.tagName.toUpperCase()&&s.src||new URL("react/mui.gen.js",document.baseURI).href)("ts-node/register"),e.next=22;break;case 17:return e.prev=17,e.t1=e.catch(12),console.error("⚠️ TypeScript config found but tsx/ts-node not installed."),console.log(" Install with: npm install -D tsx or npm install -D ts-node"),e.abrupt("return",{templateDir:void 0});case 22:return l=o.pathToFileURL(u).href,e.next=25,import(l);case 25:return m=e.sent,e.abrupt("return",JSON.parse(JSON.stringify(null!==(p=m.default)&&void 0!==p?p:{})));case 29:return e.prev=29,e.t2=e.catch(4),console.error("⚠️ Error loading config file:",e.t2.message),e.abrupt("return",{templateDir:void 0});case 33:case"end":return e.stop()}}),r,null,[[4,29],[6,10],[12,17]])})));return function(){return r.apply(this,arguments)}}();exports.generateCreatePage=b,exports.generateDummy=function(r){try{var o=r.title,a=r.properties,c=t.join(process.cwd(),"src","commons","dummy.ts"),s="Input".concat(p(o),"Schema"),i="import { ".concat(s," } from '@schemas/").concat(u(o),".schema';"),f=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],"'"):l(s)?"''":m(s)?0:!!d(s)||"''"," ".concat(o,": ").concat(t)})),g="\nexport const input".concat(p(o),": ").concat(s," = {\n").concat(f.join(",\n"),"\n};\n"),v=n.existsSync(c)?n.readFileSync(c,"utf8"):"";v.includes(i)||(v=i+"\n"+v),v.includes("input".concat(p(o)))||(v+="\n"+g),n.writeFileSync(c,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=R,exports.generateIndexPage=x,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"}],c=[],s=[];e.forEach((function(e){a.forEach((function(n){var t=n.suffix,r=n.file,o=n.url,a="".concat(p(e)).concat(t),i=u(e);c.push("const ".concat(a,' = LoadComponent(() => import("@pages/').concat(i,"/").concat(r,'"));')),s.push(' { path: "'.concat(i).concat(o,'", element: <').concat(a," /> }"))}))}));var i='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(c.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');f(o),g(r,i,"Router ".concat(n," created"))}catch(e){console.error("❌ Error generating routes:",e.message)}},exports.generateService=function(e){try{var n=e.title,r="".concat(u(n),".service.ts"),o=i(n),a=u(n),c=p(n),s=t.join(process.cwd(),"src","services",r),l=t.dirname(s),m="import { ".concat(c,' } from "@typings/model";\nimport { EventSend } from "ezhooks";\n\nconst baseUrl = "http://localhost:3000/api";\n\nexport const ').concat(o,"Url = {\n index: `${baseUrl}/").concat(a,"`,\n view: `${baseUrl}/").concat(a,"/:id`,\n remove: `${baseUrl}/").concat(a,"/:id`,\n};\n\nexport const get").concat(c," = async (event: EventSend): Promise<HttpResponse<").concat(c,"[]>> => {\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(c,"ID = (id: number) => async (event: EventSend): Promise<HttpResponse<").concat(c,">> => {\n const res = await fetch(").concat(o,"Url.view.replace(':id', String(id)), {\n signal: event.ctr?.signal,\n });\n return res.json();\n};\n\nexport const post").concat(c," = 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(c," = 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(c," = async (event: EventSend) => {\n return fetch(").concat(o,"Url.remove.replace(':id', event.params.id), {\n method: \"DELETE\",\n signal: event.ctr?.signal,\n });\n};\n");f(l),g(s,m,"Service ".concat(r," created"))}catch(n){console.error("❌ Error generating service for ".concat(e.title,":"),n.message)}},exports.generateUpdatePage=S,exports.generateValidation=function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'import * as zod from "zod";';try{var o=n.title,a=n.properties,c=n.required,s=void 0===c?[]:c,i="".concat(u(o),".schema.ts"),v=t.join(process.cwd(),"src","schemas",i),h=t.dirname(v),y=[],x=[];Object.entries(a).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"],c=Array.isArray(o.type)?o.type:[o.type],i=c[0];if(o.enum)a.push("enum([".concat(o.enum.map((function(e){return"'".concat(e,"'")})).join(", "),"])"));else if(l(i))a.push("string()"),s.includes(r)&&a.push("nonempty()");else if(m(i))a.push("number()");else if(d(i))a.push("boolean()");else if("array"===i){var f;if(null!==(f=o.items)&&void 0!==f&&f.$ref){var g=o.items.$ref.split("/").pop();y.push("import { input".concat(p(g),"Schema } from './").concat(u(g),".schema'")),a.push("array(input".concat(p(g),"Schema)"))}else a.push("array(zod.any())")}else a.push("any()");if(c.includes("null")&&(a.push("optional()"),a.push("nullish()")),void 0!==o.default){var v=l(o.default)?"'".concat(o.default,"'"):o.default;a.push("default(".concat(v,")"))}x.push(" ".concat(r,": ").concat(a.join(".")))}));var w="input".concat(p(o),"Schema"),b="".concat(r,"\n").concat(y.join(";\n"),"\n\nexport const ").concat(w," = zod.object({\n").concat(x.join(",\n"),"\n});\n\nexport type ").concat(p(w)," = zod.infer<typeof ").concat(w,">;\n");f(h),g(v,b,"Validation ".concat(i," created"))}catch(e){console.error("❌ Error generating validation for ".concat(n.title,":"),e.message)}},exports.generateViewPage=w,exports.isBoolean=d,exports.isNumber=m,exports.isString=l,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);f(o),n.writeFileSync(r,e),console.log("✅ TypeScript types generated")})).catch((function(e){console.error("❌ Error generating TypeScript types:",e.message)}))},exports.loadRegenConfig=j,exports.toCamelCase=i,exports.toKebabCase=u,exports.toPascalCase=p;
|
|
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"),a=require("url"),o=require("node:module"),c=require("module"),s="undefined"!=typeof document?document.currentScript:null,i=function(e){return e.replace(/[-_]+(.)?/g,(function(e,n){return n?n.toUpperCase():""})).replace(/^[A-Z]/,(function(e){return e.toLowerCase()}))},u=function(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").toLowerCase()},p=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("")},l=function(e){return["string"].includes(e)},f=function(e){return["integer","number"].includes(e)},m=function(e){return["boolean"].includes(e)},d=function(e){n.existsSync(e)||n.mkdirSync(e,{recursive:!0})},g=function(e,t,r){n.writeFile(e,t,(function(n){n?console.error("❌ Error writing file ".concat(e,":"),n.message):console.log("✅ ".concat(r))}))},v=function(){var r=e.asyncToGenerator(e.regeneratorRuntime().mark((function r(o){var c,s;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(o){e.next=2;break}return e.abrupt("return",null);case 2:if(c=t.join(process.cwd(),o),n.existsSync(c)){e.next=6;break}return console.warn("⚠️ Template not found: ".concat(o)),e.abrupt("return",null);case 6:return e.prev=6,e.next=9,import(a.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(o,":"),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)}}(),y=function(n){return Object.entries(n).map((function(n){var t=e.slicedToArray(n,2),r=t[0],a=t[1],o={key:r,type:Array.isArray(a.type)?a.type[0]:a.type};return a.format&&["date","date-time"].includes(a.format)&&(o.format=a.format),a.enum&&(o.enum=a.enum),o}))},h=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(r,a){var o,c,s,l,f,m,y,h,x;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,o=r.title,c="".concat(u(o),".service.ts"),s=i(o),l=u(o),f=p(o),m=t.join(process.cwd(),"src","services",c),y=t.dirname(m),h="",e.next=11,v(a);case 11:x=e.sent,h=x?x({modelName:o,serviceName:s,urlName:l,funcName:f}):"import { ".concat(f,' } from "@typings/model";\nimport { EventSend } from "ezhooks";\n\nconst baseUrl = "http://localhost:3000/api";\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(f," = async (event: EventSend): Promise<HttpResponse<").concat(f,"[]>> => {\n let url = ").concat(s,"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(f,"ID = (id: number) => async (event: EventSend): Promise<HttpResponse<").concat(f,">> => {\n const res = await fetch(").concat(s,"Url.view.replace(':id', String(id)), {\n signal: event.ctr?.signal,\n });\n return res.json();\n};\n\nexport const post").concat(f," = 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(f," = 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(f," = async (event: EventSend) => {\n return fetch(").concat(s,"Url.remove.replace(':id', event.params.id), {\n method: \"DELETE\",\n signal: event.ctr?.signal,\n });\n};\n"),d(y),g(m,h,"Service ".concat(c," created")),e.next=20;break;case 17:e.prev=17,e.t0=e.catch(0),console.error("❌ Error generating service for ".concat(r.title,":"),e.t0.message);case 20:case"end":return e.stop()}}),n,null,[[0,17]])})));return function(e,t){return n.apply(this,arguments)}}(),x=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(r,a,o){var c,s,i,p,l,f,m,h;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,c=r.title,s=r.properties,i="".concat(o,".page.tsx"),p=t.join(process.cwd(),"src","pages",u(c),i),l=t.dirname(p),f="",e.next=8,v(a);case 8:(m=e.sent)&&(h="index"===o||"view"===o?{modelName:c,columns:y(s)}:{modelName:c,jsonSchema:r},f=m(h)),d(l),g(p,f,"".concat(c," ").concat(i," created")),e.next=17;break;case 14:e.prev=14,e.t0=e.catch(0),console.error("❌ Error generating ".concat(o," 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)}}(),S=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,x(t,r,"index");case 2:case"end":return e.stop()}}),n)})));return function(e,t){return n.apply(this,arguments)}}(),b=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,x(t,r,"view");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(t,r){return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,x(t,r,"create");case 2:case"end":return e.stop()}}),n)})));return function(e,t){return n.apply(this,arguments)}}(),R=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,x(t,r,"update");case 2:case"end":return e.stop()}}),n)})));return function(e,t){return n.apply(this,arguments)}}(),j=function(){var n=e.asyncToGenerator(e.regeneratorRuntime().mark((function n(r){var a,o,c,s,i,p,l,f=arguments;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=f.length>2?f[2]:void 0,e.prev=2,o=r.title,c="Form.tsx",s=t.join(process.cwd(),"src","pages",u(o),"partial",c),i=t.dirname(s),p="",e.next=10,v(a);case 10:(l=e.sent)&&(p=l({modelName:o,jsonSchema:r})),d(i),g(s,p,"".concat(o," ").concat(c," 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)}}(),k=function(){var a=e.asyncToGenerator(e.regeneratorRuntime().mark((function a(o){var c,s,i,p,l,f,m,g,v,y,h,x,S,b,w;return e.regeneratorRuntime().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:if(s=JSON.parse(n.readFileSync(o,"utf8")),i=null!==(c=s.definitions)&&void 0!==c?c:{},0!==(p=Object.entries(i)).length){a.next=6;break}return console.warn("⚠️ No definitions found in schema file."),a.abrupt("return");case 6:l={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 */"},f=0,m=p;case 8:if(!(f<m.length)){a.next=29;break}return g=e.slicedToArray(m[f],2),v=g[0],y=g[1],a.prev=10,h=e.objectSpread2(e.objectSpread2({title:v},y),{},{definitions:i}),a.next=14,r.compile(h,v,l);case 14:x=a.sent,S="".concat(u(v),".type.ts"),b=t.join(process.cwd(),"src","typings",S),w=t.dirname(b),d(w),n.writeFileSync(b,x),console.log("✅ TypeScript types generated: ".concat(S)),a.next=26;break;case 23:a.prev=23,a.t0=a.catch(10),console.error("❌ Error generating types for ".concat(v,":"),a.t0.message);case 26:f++,a.next=8;break;case 29:case"end":return a.stop()}}),a,null,[[10,23]])})));return function(e){return a.apply(this,arguments)}}(),T=function(){var r=e.asyncToGenerator(e.regeneratorRuntime().mark((function r(){var i,u,p,l,f;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=[t.resolve("regen.config.ts"),t.resolve("regen.config.js")],u=i.find((function(e){return n.existsSync(e)}))){e.next=4;break}return e.abrupt("return",{templateDir:void 0});case 4:if(e.prev=4,!u.endsWith(".ts")){e.next=22;break}e.prev=6,o.register("tsx",a.pathToFileURL("./")),e.next=22;break;case 10:e.prev=10,e.t0=e.catch(6),e.prev=12,c.createRequire("undefined"==typeof document?require("url").pathToFileURL(__filename).href:s&&"SCRIPT"===s.tagName.toUpperCase()&&s.src||new URL("react/mui.gen.js",document.baseURI).href)("ts-node/register"),e.next=22;break;case 17:return e.prev=17,e.t1=e.catch(12),console.error("⚠️ TypeScript config found but tsx/ts-node not installed."),console.log(" Install with: npm install -D tsx or npm install -D ts-node"),e.abrupt("return",{templateDir:void 0});case 22:return l=a.pathToFileURL(u).href,e.next=25,import(l);case 25:return f=e.sent,e.abrupt("return",JSON.parse(JSON.stringify(null!==(p=f.default)&&void 0!==p?p:{})));case 29:return e.prev=29,e.t2=e.catch(4),console.error("⚠️ Error loading config file:",e.t2.message),e.abrupt("return",{templateDir:void 0});case 33:case"end":return e.stop()}}),r,null,[[4,29],[6,10],[12,17]])})));return function(){return r.apply(this,arguments)}}();exports.generateCreatePage=w,exports.generateDummy=function(r){try{var a=r.title,o=r.properties,c=t.join(process.cwd(),"src","commons","dummy.ts"),s="Input".concat(p(a),"Schema"),i="import { ".concat(s," } from '@schemas/").concat(u(a),".schema';"),d=Object.entries(o).filter((function(n){return"id"!==e.slicedToArray(n,1)[0]})).map((function(n){var t,r=e.slicedToArray(n,2),a=r[0],o=r[1],c=Array.isArray(o.type)?o.type:[o.type],s=c[0];return t=void 0!==o.default?o.default:c.includes("null")?null:o.enum?"'".concat(o.enum[0],"'"):l(s)?"''":f(s)?0:!!m(s)||"''"," ".concat(a,": ").concat(t)})),g="\nexport const input".concat(p(a),": ").concat(s," = {\n").concat(d.join(",\n"),"\n};\n"),v=n.existsSync(c)?n.readFileSync(c,"utf8"):"";v.includes(i)||(v=i+"\n"+v),v.includes("input".concat(p(a)))||(v+="\n"+g),n.writeFileSync(c,v),console.log("✅ Dummy data for ".concat(a," created"))}catch(e){console.error("❌ Error generating dummy data for ".concat(r.title,":"),e.message)}},exports.generateForm=j,exports.generateIndexPage=S,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),a=t.dirname(r),o=[{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"}],c=[],s=[];e.forEach((function(e){o.forEach((function(n){var t=n.suffix,r=n.file,a=n.url,o="".concat(p(e)).concat(t),i=u(e);c.push("const ".concat(o,' = React.lazy(() => import("@pages/').concat(i,"/").concat(r,'"));')),s.push(' { path: "'.concat(i).concat(a,'", element: <Suspense fallback={<span>loading...</span>}><').concat(o," /></Suspense> }"))}))}));var i='import React, { Suspense } from "react";\nimport { createBrowserRouter } from "react-router";\nimport { loader } from "@services/auth.service";\n\nconst AppLayouts = React.lazy(() => import("@components/layouts/AppLayout"));\nconst GuestLayout = React.lazy(() => import("@components/layouts/GuestLayout"));\nconst NotFoundPage = React.lazy(() => import("@pages/error/PageNotFound"));\nconst SignInPage = React.lazy(() => import("@pages/auth/LoginPage"));\nconst RegisterPage = React.lazy(() => import("@pages/auth/RegisterPage"));\nconst VerificationPage = React.lazy(() => import("@pages/auth/VerificationPage"));\n\n'.concat(c.join("\n"),'\n\nconst router = createBrowserRouter(\n [\n {\n path: "/login",\n element: <Suspense fallback={<span>loading...</span>}><SignInPage /></Suspense>,\n },\n {\n element: <Suspense fallback={<span>loading...</span>}><GuestLayout /></Suspense>,\n children: [\n { path: "/register", element: <Suspense fallback={<span>loading...</span>}><RegisterPage /></Suspense> },\n { path: "/verification", element: <Suspense fallback={<span>loading...</span>}><VerificationPage /></Suspense> },\n ],\n },\n {\n id: "root",\n path: "/",\n loader,\n element: <Suspense fallback={<span>loading...</span>}><AppLayouts /></Suspense>,\n hydrateFallbackElement: <span>loading...</span>,\n children: [\n').concat(s.join(",\n"),'\n ],\n },\n {\n path: "*",\n element: <Suspense fallback={<span>loading...</span>}><NotFoundPage /></Suspense>,\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');d(a),g(r,i,"Router ".concat(n," created"))}catch(e){console.error("❌ Error generating routes:",e.message)}},exports.generateService=h,exports.generateUpdatePage=R,exports.generateValidation=function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'import * as zod from "zod";';try{var a=n.title,o=n.properties,c=n.required,s=void 0===c?[]:c,i="".concat(u(a),".schema.ts"),v=t.join(process.cwd(),"src","schemas",i),y=t.dirname(v),h=[],x=[];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],a=t[1],o=["zod"],c=Array.isArray(a.type)?a.type:[a.type],i=c[0];if(a.enum)o.push("enum([".concat(a.enum.map((function(e){return"'".concat(e,"'")})).join(", "),"])"));else if(l(i))o.push("string()"),s.includes(r)&&o.push("nonempty()");else if(f(i))o.push("number()");else if(m(i))o.push("boolean()");else if("array"===i){var d;if(null!==(d=a.items)&&void 0!==d&&d.$ref){var g=a.items.$ref.split("/").pop();h.push("import { input".concat(p(g),"Schema } from './").concat(u(g),".schema'")),o.push("array(input".concat(p(g),"Schema)"))}else o.push("array(zod.any())")}else o.push("any()");if(c.includes("null")&&(o.push("optional()"),o.push("nullish()")),void 0!==a.default){var v=l(a.default)?"'".concat(a.default,"'"):a.default;o.push("default(".concat(v,")"))}x.push(" ".concat(r,": ").concat(o.join(".")))}));var S="input".concat(p(a),"Schema"),b="".concat(r,"\n").concat(h.join(";\n"),"\n\nexport const ").concat(S," = zod.object({\n").concat(x.join(",\n"),"\n});\n\nexport type ").concat(p(S)," = zod.infer<typeof ").concat(S,">;\n");d(y),g(v,b,"Validation ".concat(i," created"))}catch(e){console.error("❌ Error generating validation for ".concat(n.title,":"),e.message)}},exports.generateViewPage=b,exports.isBoolean=m,exports.isNumber=f,exports.isString=l,exports.jsonToTS=k,exports.loadRegenConfig=T,exports.toCamelCase=i,exports.toKebabCase=u,exports.toPascalCase=p;
|
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"),
|
|
2
|
+
"use strict";var e=require("./_virtual/_rollupPluginBabelHelpers.js"),t=require("fs"),a=require("path"),r=require("./react/mui.gen.js"),n=e.toArray(process.argv);n[0],n[1];var l=n[2],o=n.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,serviceTemplate:void 0,templateDir:void 0,ignoreTemplate:[]};function m(t){var a,r=e.objectSpread2({},i),n=e.createForOfIteratorHelper(t);try{for(n.s();!(a=n.n()).done;){var l=a.value.split("="),o=e.slicedToArray(l,2),m=o[0],p=o[1];switch(m){case"--file":r.file=p;break;case"--index-template":r.indexTemplate=p;break;case"--form-template":r.formTemplate=p;break;case"--view-template":r.viewTemplate=p;break;case"--create-template":r.createTemplate=p;break;case"--update-template":r.updateTemplate=p;break;case"--service-template":r.serviceTemplate=p;break;case"--template":r.templateDir=p,r.indexTemplate="".concat(p,"/index-template.js"),r.formTemplate="".concat(p,"/form-template.js"),r.viewTemplate="".concat(p,"/view-template.js"),r.createTemplate="".concat(p,"/create-template.js"),r.updateTemplate="".concat(p,"/update-template.js"),r.serviceTemplate="".concat(p,"/service-template.js");break;case"--ignore":r.ignoreTemplate=p.split(",")}}}catch(e){n.e(e)}finally{n.f()}return r}function p(t,a){var r=e.objectSpread2({},a);return null!=t&&t.templateDir&&!a.templateDir&&(r.indexTemplate||(r.indexTemplate="".concat(t.templateDir,"/index-template.js")),r.formTemplate||(r.formTemplate="".concat(t.templateDir,"/form-template.js")),r.viewTemplate||(r.viewTemplate="".concat(t.templateDir,"/view-template.js")),r.createTemplate||(r.createTemplate="".concat(t.templateDir,"/create-template.js")),r.updateTemplate||(r.updateTemplate="".concat(t.templateDir,"/update-template.js")),r.serviceTemplate||(r.serviceTemplate="".concat(t.templateDir,"/service-template.js"))),null!=t&&t.ignoreTemplate&&0===a.ignoreTemplate.length&&(r.ignoreTemplate=t.ignoreTemplate),null!=t&&t.jsonSchemaFile&&a.file===i.file&&(r.file=t.jsonSchemaFile),null!=t&&t.schemaImportStatement&&(r.schemaImportStatement=t.schemaImportStatement),r}function c(t,a,n,l){var o=e.objectSpread2({title:t},a);l.ignoreTemplate.includes("service")||r.generateService(o,l.serviceTemplate),l.ignoreTemplate.includes("validation")||r.generateValidation(o,l.schemaImportStatement),l.ignoreTemplate.includes("form")||r.generateForm(o,n,l.formTemplate),l.ignoreTemplate.includes("index")||r.generateIndexPage(o,l.indexTemplate),l.ignoreTemplate.includes("create")||r.generateCreatePage(o,l.createTemplate),l.ignoreTemplate.includes("update")||r.generateUpdatePage(o,l.updateTemplate),l.ignoreTemplate.includes("view")||r.generateViewPage(o,l.viewTemplate),l.ignoreTemplate.includes("dummy")||r.generateDummy(o)}function s(e,t,a){return u.apply(this,arguments)}function u(){return u=e.asyncToGenerator(e.regeneratorRuntime().mark((function t(a,n,l){var o;return e.regeneratorRuntime().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:o=Object.entries(n.definitions),t.t0=a,t.next="make:page"===t.t0?4:"make:dummy"===t.t0?9:"make:route"===t.t0?12:"make:validation"===t.t0?15:"make:service"===t.t0?18:"make:form"===t.t0?22:25;break;case 4:return o.forEach((function(t){var a=e.slicedToArray(t,2);c(a[0],a[1],n.definitions,l)})),t.next=7,r.jsonToTS(l.file);case 7:return console.log("✅ Pages generated successfully!"),t.abrupt("break",27);case 9:return o.forEach((function(t){var a=e.slicedToArray(t,2),n=a[0],l=a[1];r.generateDummy(e.objectSpread2({title:n},l))})),console.log("✅ Dummy data generated successfully!"),t.abrupt("break",27);case 12:return r.generateRoute(o.map((function(t){return e.slicedToArray(t,1)[0]}))),console.log("✅ Routes generated successfully!"),t.abrupt("break",27);case 15:return o.forEach((function(t){var a=e.slicedToArray(t,2),n=a[0],o=a[1];r.generateValidation(e.objectSpread2({title:n},o)),l.schemaImportStatement})),console.log("✅ Validation files generated successfully!"),t.abrupt("break",27);case 18:return t.next=20,Promise.all(o.map((function(t){var a=e.slicedToArray(t,2),n=a[0],o=a[1];return r.generateService(e.objectSpread2({title:n},o),l.serviceTemplate)})));case 20:return console.log("✅ Service files generated successfully!"),t.abrupt("break",27);case 22:return o.forEach((function(t){var a=e.slicedToArray(t,2),l=a[0],o=a[1];r.generateForm(e.objectSpread2({title:l},o),n.definitions)})),console.log("✅ Form components generated successfully!"),t.abrupt("break",27);case 25:console.error("❌ Unknown action: ".concat(a)),process.exit(1);case 27:case"end":return t.stop()}}),t)}))),u.apply(this,arguments)}function d(){return(d=e.asyncToGenerator(e.regeneratorRuntime().mark((function a(){var n,i,c,u,d;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,l||(console.error("❌ Action undefined."),console.log("Run 'npx regen --help' for usage information."),process.exit(1)),"--help"===l&&(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 --service-template=<path> Custom service 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)),n=m(o),e.next=6,r.loadRegenConfig();case 6:return i=e.sent,c=p(i,n),u=t.readFileSync(c.file,{encoding:"utf-8"}),d=JSON.parse(u),e.next=12,s(l,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)}();
|