generathor-laravel 1.0.0

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.
Files changed (92) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +419 -0
  3. package/dist/configuration.d.ts +25 -0
  4. package/dist/configuration.js +43 -0
  5. package/dist/helpers/handlebars.d.ts +3 -0
  6. package/dist/helpers/handlebars.js +20 -0
  7. package/dist/helpers/naming.d.ts +18 -0
  8. package/dist/helpers/naming.js +98 -0
  9. package/dist/helpers/string.d.ts +27 -0
  10. package/dist/helpers/string.js +120 -0
  11. package/dist/helpers/type.d.ts +4 -0
  12. package/dist/helpers/type.js +41 -0
  13. package/dist/index.d.ts +2 -0
  14. package/dist/index.js +18 -0
  15. package/dist/template.d.ts +20 -0
  16. package/dist/template.js +284 -0
  17. package/dist/transformers/collection/attachForm.d.ts +4 -0
  18. package/dist/transformers/collection/attachForm.js +55 -0
  19. package/dist/transformers/collection/attachRequest.d.ts +5 -0
  20. package/dist/transformers/collection/attachRequest.js +92 -0
  21. package/dist/transformers/collection/base.d.ts +20 -0
  22. package/dist/transformers/collection/base.js +54 -0
  23. package/dist/transformers/collection/baseController.d.ts +4 -0
  24. package/dist/transformers/collection/baseController.js +14 -0
  25. package/dist/transformers/collection/belongsToRelation.d.ts +5 -0
  26. package/dist/transformers/collection/belongsToRelation.js +86 -0
  27. package/dist/transformers/collection/controller.d.ts +8 -0
  28. package/dist/transformers/collection/controller.js +163 -0
  29. package/dist/transformers/collection/createRelationForm.d.ts +4 -0
  30. package/dist/transformers/collection/createRelationForm.js +163 -0
  31. package/dist/transformers/collection/filterRelationForm.d.ts +4 -0
  32. package/dist/transformers/collection/filterRelationForm.js +164 -0
  33. package/dist/transformers/collection/hasManyRelation.d.ts +5 -0
  34. package/dist/transformers/collection/hasManyRelation.js +91 -0
  35. package/dist/transformers/collection/menu.d.ts +4 -0
  36. package/dist/transformers/collection/menu.js +25 -0
  37. package/dist/transformers/collection/route.d.ts +5 -0
  38. package/dist/transformers/collection/route.js +123 -0
  39. package/dist/transformers/item/base.d.ts +19 -0
  40. package/dist/transformers/item/base.js +33 -0
  41. package/dist/transformers/item/edit.d.ts +4 -0
  42. package/dist/transformers/item/edit.js +21 -0
  43. package/dist/transformers/item/eloquent.d.ts +4 -0
  44. package/dist/transformers/item/eloquent.js +158 -0
  45. package/dist/transformers/item/filter.d.ts +5 -0
  46. package/dist/transformers/item/filter.js +41 -0
  47. package/dist/transformers/item/forms.d.ts +4 -0
  48. package/dist/transformers/item/forms.js +226 -0
  49. package/dist/transformers/item/laravel.d.ts +15 -0
  50. package/dist/transformers/item/laravel.js +36 -0
  51. package/dist/transformers/item/list.d.ts +4 -0
  52. package/dist/transformers/item/list.js +36 -0
  53. package/dist/transformers/item/requests.d.ts +4 -0
  54. package/dist/transformers/item/requests.js +125 -0
  55. package/dist/transformers/item/show.d.ts +5 -0
  56. package/dist/transformers/item/show.js +54 -0
  57. package/package.json +46 -0
  58. package/templates/eloquent/child.handlebars +13 -0
  59. package/templates/eloquent/filter.handlebars +88 -0
  60. package/templates/eloquent/parent.handlebars +64 -0
  61. package/templates/others/base-controller.handlebars +46 -0
  62. package/templates/others/controller.handlebars +185 -0
  63. package/templates/others/pk-trait.handlebars +157 -0
  64. package/templates/others/request.handlebars +32 -0
  65. package/templates/others/routes.handlebars +16 -0
  66. package/templates/views/breadcrumbs.handlebars +21 -0
  67. package/templates/views/edit.handlebars +41 -0
  68. package/templates/views/form.handlebars +103 -0
  69. package/templates/views/icons/check-circle.handlebars +3 -0
  70. package/templates/views/icons/chevron-down.handlebars +3 -0
  71. package/templates/views/icons/chevron-right.handlebars +3 -0
  72. package/templates/views/icons/computer.handlebars +3 -0
  73. package/templates/views/icons/eye.handlebars +4 -0
  74. package/templates/views/icons/funnel.handlebars +3 -0
  75. package/templates/views/icons/home.handlebars +3 -0
  76. package/templates/views/icons/link.handlebars +3 -0
  77. package/templates/views/icons/list-bullet.handlebars +3 -0
  78. package/templates/views/icons/pencil.handlebars +3 -0
  79. package/templates/views/icons/plus.handlebars +3 -0
  80. package/templates/views/icons/trash.handlebars +3 -0
  81. package/templates/views/icons/unlink.handlebars +3 -0
  82. package/templates/views/icons/x-circle.handlebars +3 -0
  83. package/templates/views/icons/x.handlebars +3 -0
  84. package/templates/views/index.handlebars +181 -0
  85. package/templates/views/loader.handlebars +6 -0
  86. package/templates/views/menu.handlebars +39 -0
  87. package/templates/views/modal.handlebars +36 -0
  88. package/templates/views/record-input.handlebars +90 -0
  89. package/templates/views/relation-item.handlebars +180 -0
  90. package/templates/views/relation-list.handlebars +199 -0
  91. package/templates/views/show.handlebars +134 -0
  92. package/templates/views/tabs.handlebars +16 -0
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Filter = void 0;
7
+ const naming_1 = __importDefault(require("../../helpers/naming"));
8
+ const base_1 = require("./base");
9
+ class Filter extends base_1.BaseTransformer {
10
+ transform() {
11
+ const fks = this.fks();
12
+ const pkMap = this.pkMap();
13
+ this.$item.laravel.filter = {
14
+ class: naming_1.default.modelClass(this.$item.table) + 'Filter',
15
+ namespace: 'App\\ModelFilters',
16
+ columns: this.$item.columns.map((column) => {
17
+ let type = column.type;
18
+ if (pkMap[column.name]) {
19
+ type = 'key';
20
+ }
21
+ else if (fks[column.name]) {
22
+ type = 'record';
23
+ }
24
+ return {
25
+ type,
26
+ name: column.name,
27
+ attribute: naming_1.default.columnAttribute(column),
28
+ };
29
+ }),
30
+ };
31
+ }
32
+ pkMap() {
33
+ const pkMap = {};
34
+ const columns = this.$item.primaryKey ? this.$item.primaryKey.columns : [];
35
+ for (const column of columns) {
36
+ pkMap[column] = true;
37
+ }
38
+ return pkMap;
39
+ }
40
+ }
41
+ exports.Filter = Filter;
@@ -0,0 +1,4 @@
1
+ import { BaseTransformer } from './base';
2
+ export declare class Forms extends BaseTransformer {
3
+ transform(): void;
4
+ }
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Forms = void 0;
7
+ const naming_1 = __importDefault(require("../../helpers/naming"));
8
+ const base_1 = require("./base");
9
+ const ignoreInputsFor = {
10
+ created_at: true,
11
+ updated_at: true,
12
+ };
13
+ class Forms extends base_1.BaseTransformer {
14
+ transform() {
15
+ const context = naming_1.default.context(this.$item.table);
16
+ const recordName = naming_1.default.recordName(this.$item.table);
17
+ const result = {
18
+ create: {
19
+ context,
20
+ record: null,
21
+ routeRecord: null,
22
+ method: 'post',
23
+ prefix: '',
24
+ getOld: 'old',
25
+ errorBag: 'create',
26
+ buttonLabel: 'Save',
27
+ buttonColor: 'green',
28
+ columns: '2',
29
+ route: `generathor.${context}.store`,
30
+ cancelLink: null,
31
+ inputs: [],
32
+ hiddenInputs: [],
33
+ },
34
+ update: {
35
+ context,
36
+ record: recordName,
37
+ routeRecord: recordName,
38
+ method: 'put',
39
+ prefix: '',
40
+ getOld: 'old',
41
+ errorBag: 'update',
42
+ buttonLabel: 'Save',
43
+ buttonColor: 'green',
44
+ columns: '2',
45
+ route: `generathor.${context}.update`,
46
+ cancelLink: {
47
+ label: 'Cancel',
48
+ route: `request()->query('_url', route('generathor.${context}.show', ['${recordName}' => $${recordName}->getRouteKey()]))`,
49
+ icon: null,
50
+ },
51
+ inputs: [],
52
+ hiddenInputs: [
53
+ {
54
+ name: '_url',
55
+ type: 'query',
56
+ },
57
+ ],
58
+ },
59
+ filter: {
60
+ context,
61
+ record: null,
62
+ routeRecord: null,
63
+ method: 'get',
64
+ prefix: 'filter_',
65
+ getOld: 'request',
66
+ errorBag: 'filter',
67
+ buttonLabel: 'Filter',
68
+ buttonColor: 'blue',
69
+ columns: '4',
70
+ cancelLink: {
71
+ label: 'Clear filters',
72
+ route: 'request()->url()',
73
+ icon: '<x-generathor.icon-x />',
74
+ },
75
+ inputs: [],
76
+ hiddenInputs: [],
77
+ },
78
+ };
79
+ const fks = this.fks();
80
+ this.$item.columns.forEach((column) => {
81
+ if (column.autoincrement) {
82
+ return;
83
+ }
84
+ if (fks[column.name]) {
85
+ const input = {
86
+ type: 'record',
87
+ name: column.name,
88
+ label: naming_1.default.columnLabel(column),
89
+ data: {
90
+ context: naming_1.default.context(fks[column.name].table),
91
+ relationName: fks[column.name].relationAttribute,
92
+ },
93
+ };
94
+ result.create.inputs.push(input);
95
+ result.update.inputs.push(input);
96
+ result.filter.inputs.push(input);
97
+ return;
98
+ }
99
+ if (column.type === 'string' &&
100
+ column.enum &&
101
+ Array.isArray(column.enum) &&
102
+ column.enum.length > 0) {
103
+ const input = {
104
+ type: 'select',
105
+ name: column.name,
106
+ label: naming_1.default.columnLabel(column),
107
+ data: {
108
+ options: [
109
+ {
110
+ value: '',
111
+ label: 'Select',
112
+ },
113
+ ].concat(column.enum.map(function (value) {
114
+ return {
115
+ value: value,
116
+ label: naming_1.default.label(value),
117
+ };
118
+ })),
119
+ },
120
+ };
121
+ result.create.inputs.push(input);
122
+ result.update.inputs.push(input);
123
+ result.filter.inputs.push(input);
124
+ return;
125
+ }
126
+ if (column.type === 'int' || column.type === 'float') {
127
+ const decimals = column.type === 'int' ? 0 : column.scale;
128
+ const input = {
129
+ type: 'number',
130
+ name: column.name,
131
+ label: naming_1.default.columnLabel(column),
132
+ data: {
133
+ decimals,
134
+ },
135
+ };
136
+ result.create.inputs.push(input);
137
+ result.update.inputs.push(input);
138
+ result.filter.inputs.push({
139
+ type: 'number',
140
+ name: column.name + '_from',
141
+ label: naming_1.default.label(column.name + '_from'),
142
+ data: {
143
+ decimals,
144
+ },
145
+ });
146
+ result.filter.inputs.push({
147
+ type: 'number',
148
+ name: column.name + '_to',
149
+ label: naming_1.default.label(column.name + '_to'),
150
+ data: {
151
+ decimals,
152
+ },
153
+ });
154
+ return;
155
+ }
156
+ if (column.type === 'bool') {
157
+ const input = {
158
+ type: 'checkbox',
159
+ name: column.name,
160
+ label: naming_1.default.columnLabel(column),
161
+ };
162
+ result.create.inputs.push(input);
163
+ result.update.inputs.push(input);
164
+ result.filter.inputs.push({
165
+ type: 'select',
166
+ name: column.name,
167
+ label: naming_1.default.columnLabel(column),
168
+ data: {
169
+ options: [
170
+ {
171
+ value: '',
172
+ label: 'Select',
173
+ },
174
+ {
175
+ value: '0',
176
+ label: 'No',
177
+ },
178
+ {
179
+ value: '1',
180
+ label: 'Yes',
181
+ },
182
+ ],
183
+ },
184
+ });
185
+ return;
186
+ }
187
+ const dates = {
188
+ datetime: true,
189
+ time: true,
190
+ date: true,
191
+ };
192
+ if (dates[column.subType]) {
193
+ if (!ignoreInputsFor[column.name]) {
194
+ const input = {
195
+ type: column.subType,
196
+ name: column.name,
197
+ label: naming_1.default.columnLabel(column),
198
+ };
199
+ result.create.inputs.push(input);
200
+ result.update.inputs.push(input);
201
+ }
202
+ result.filter.inputs.push({
203
+ type: column.subType,
204
+ name: column.name + '_from',
205
+ label: naming_1.default.label(column.name + '_from'),
206
+ });
207
+ result.filter.inputs.push({
208
+ type: column.subType,
209
+ name: column.name + '_to',
210
+ label: naming_1.default.label(column.name + '_to'),
211
+ });
212
+ return;
213
+ }
214
+ const input = {
215
+ type: 'text',
216
+ name: column.name,
217
+ label: naming_1.default.columnLabel(column),
218
+ };
219
+ result.create.inputs.push(input);
220
+ result.update.inputs.push(input);
221
+ result.filter.inputs.push(input);
222
+ });
223
+ this.$item.laravel.forms = result;
224
+ }
225
+ }
226
+ exports.Forms = Forms;
@@ -0,0 +1,15 @@
1
+ import { Configuration } from '../../configuration';
2
+ import { BaseTransformer, CurrentItem } from './base';
3
+ export declare class Laravel extends BaseTransformer {
4
+ protected $item: CurrentItem;
5
+ protected $config: Configuration;
6
+ private $eloquent;
7
+ private $forms;
8
+ private $filter;
9
+ private $requests;
10
+ private $list;
11
+ private $edit;
12
+ private $show;
13
+ constructor($item: CurrentItem, $config: Configuration);
14
+ transform(): void;
15
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Laravel = void 0;
4
+ const eloquent_1 = require("./eloquent");
5
+ const forms_1 = require("./forms");
6
+ const filter_1 = require("./filter");
7
+ const requests_1 = require("./requests");
8
+ const base_1 = require("./base");
9
+ const list_1 = require("./list");
10
+ const edit_1 = require("./edit");
11
+ const show_1 = require("./show");
12
+ class Laravel extends base_1.BaseTransformer {
13
+ constructor($item, $config) {
14
+ super($item, $config);
15
+ this.$item = $item;
16
+ this.$config = $config;
17
+ this.$eloquent = new eloquent_1.Eloquent($item, $config);
18
+ this.$forms = new forms_1.Forms($item, $config);
19
+ this.$filter = new filter_1.Filter($item, $config);
20
+ this.$requests = new requests_1.Requests($item, $config);
21
+ this.$list = new list_1.List($item, $config);
22
+ this.$edit = new edit_1.Edit($item, $config);
23
+ this.$show = new show_1.Show($item, $config);
24
+ }
25
+ transform() {
26
+ this.$item.laravel = {};
27
+ this.$eloquent.transform();
28
+ this.$forms.transform();
29
+ this.$filter.transform();
30
+ this.$requests.transform();
31
+ this.$list.transform();
32
+ this.$edit.transform();
33
+ this.$show.transform();
34
+ }
35
+ }
36
+ exports.Laravel = Laravel;
@@ -0,0 +1,4 @@
1
+ import { BaseTransformer } from './base';
2
+ export declare class List extends BaseTransformer {
3
+ transform(): void;
4
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.List = void 0;
7
+ const naming_1 = __importDefault(require("../../helpers/naming"));
8
+ const base_1 = require("./base");
9
+ class List extends base_1.BaseTransformer {
10
+ transform() {
11
+ const fks = this.fks();
12
+ this.$item.laravel.list = {
13
+ layout: this.$config.layout(),
14
+ homeRoute: this.$config.homeRoute(),
15
+ context: naming_1.default.context(this.$item.table),
16
+ header: naming_1.default.listLabel(this.$item.table),
17
+ recordName: naming_1.default.recordName(this.$item.table),
18
+ columns: this.$item.columns.map((column) => {
19
+ let type = column.type;
20
+ let data = null;
21
+ if (fks[column.name]) {
22
+ type = 'record';
23
+ data = fks[column.name];
24
+ }
25
+ return {
26
+ data,
27
+ type,
28
+ name: column.name,
29
+ label: naming_1.default.columnLabel(column),
30
+ nullable: column.nullable,
31
+ };
32
+ }),
33
+ };
34
+ }
35
+ }
36
+ exports.List = List;
@@ -0,0 +1,4 @@
1
+ import { BaseTransformer } from './base';
2
+ export declare class Requests extends BaseTransformer {
3
+ transform(): void;
4
+ }
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.Requests = void 0;
30
+ const naming_1 = __importDefault(require("../../helpers/naming"));
31
+ const th = __importStar(require("../../helpers/type"));
32
+ const base_1 = require("./base");
33
+ const ignoreCreateRulesFor = {
34
+ created_at: true,
35
+ updated_at: true,
36
+ };
37
+ class Requests extends base_1.BaseTransformer {
38
+ transform() {
39
+ const model = naming_1.default.modelClass(this.$item.table);
40
+ const result = {
41
+ create: {
42
+ namespace: 'App\\Http\\Requests\\Generathor',
43
+ class: `Create${model}Request`,
44
+ rules: [],
45
+ errorBag: 'create',
46
+ },
47
+ update: {
48
+ namespace: 'App\\Http\\Requests\\Generathor',
49
+ class: `Update${model}Request`,
50
+ rules: [],
51
+ errorBag: 'update',
52
+ },
53
+ filter: {
54
+ namespace: 'App\\Http\\Requests\\Generathor',
55
+ class: `Filter${model}Request`,
56
+ rules: [],
57
+ errorBag: 'filter',
58
+ },
59
+ };
60
+ const fks = this.fks();
61
+ this.$item.columns.forEach((column) => {
62
+ const rules = [];
63
+ const filterRules = [];
64
+ if (!column.nullable && column.type !== 'bool') {
65
+ rules.push('required');
66
+ }
67
+ else {
68
+ rules.push('nullable');
69
+ }
70
+ filterRules.push('nullable');
71
+ if (column.type === 'string' &&
72
+ column.enum &&
73
+ Array.isArray(column.enum)) {
74
+ const rule = 'in:' + column.enum.join(',');
75
+ rules.push(rule);
76
+ filterRules.push(rule);
77
+ }
78
+ const ruleType = th.ruleType(column);
79
+ if (column.type !== 'date') {
80
+ rules.push(ruleType);
81
+ filterRules.push(ruleType);
82
+ }
83
+ const dateRuleType = th.dateRuleType(column);
84
+ if (column.type === 'date' && dateRuleType) {
85
+ rules.push(dateRuleType);
86
+ filterRules.push(dateRuleType);
87
+ }
88
+ if (!column.autoincrement) {
89
+ if (!ignoreCreateRulesFor[column.name]) {
90
+ result.create.rules.push({
91
+ attribute: column.name,
92
+ rules: rules.join('|'),
93
+ });
94
+ result.update.rules.push({
95
+ attribute: column.name,
96
+ rules: rules.join('|'),
97
+ });
98
+ }
99
+ const createRange = column.type === 'date' ||
100
+ (!fks[column.name] &&
101
+ (column.type === 'int' || column.type === 'float'));
102
+ if (createRange) {
103
+ const fromInput = column.name + '_from';
104
+ const toInput = column.name + '_to';
105
+ result.filter.rules.push({
106
+ attribute: fromInput,
107
+ rules: filterRules.join('|'),
108
+ });
109
+ result.filter.rules.push({
110
+ attribute: toInput,
111
+ rules: filterRules.join('|'),
112
+ });
113
+ }
114
+ else {
115
+ result.filter.rules.push({
116
+ attribute: column.name,
117
+ rules: filterRules.join('|'),
118
+ });
119
+ }
120
+ }
121
+ });
122
+ this.$item.laravel.requests = result;
123
+ }
124
+ }
125
+ exports.Requests = Requests;
@@ -0,0 +1,5 @@
1
+ import { BaseTransformer } from './base';
2
+ export declare class Show extends BaseTransformer {
3
+ transform(): void;
4
+ private tabs;
5
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Show = void 0;
7
+ const naming_1 = __importDefault(require("../../helpers/naming"));
8
+ const base_1 = require("./base");
9
+ class Show extends base_1.BaseTransformer {
10
+ transform() {
11
+ const context = naming_1.default.context(this.$item.table);
12
+ const fks = this.fks();
13
+ this.$item.laravel.show = {
14
+ layout: this.$config.layout(),
15
+ homeRoute: this.$config.homeRoute(),
16
+ context: context,
17
+ header: naming_1.default.listLabel(this.$item.table),
18
+ listLabel: naming_1.default.listLabel(this.$item.table),
19
+ recordName: naming_1.default.recordName(this.$item.table),
20
+ tabs: this.tabs(context),
21
+ columns: this.$item.columns.map((column) => {
22
+ let type = column.type;
23
+ let data = null;
24
+ if (fks[column.name]) {
25
+ type = 'record';
26
+ data = fks[column.name];
27
+ }
28
+ return {
29
+ data,
30
+ type,
31
+ name: column.name,
32
+ nullable: column.nullable,
33
+ label: naming_1.default.columnLabel(column),
34
+ };
35
+ }),
36
+ };
37
+ }
38
+ tabs(context) {
39
+ const tabs = [];
40
+ tabs.push({
41
+ label: 'Details',
42
+ });
43
+ for (const relation of this.$item.relations) {
44
+ const relationName = naming_1.default.capitalizedRelationAttribute(relation, this.$item.table);
45
+ tabs.push({
46
+ label: naming_1.default.relationLabel(relation, this.$item.table),
47
+ route: `generathor.${context}.show${relationName}`,
48
+ routeRecord: naming_1.default.recordName(this.$item.table),
49
+ });
50
+ }
51
+ return tabs;
52
+ }
53
+ }
54
+ exports.Show = Show;
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "generathor-laravel",
3
+ "version": "1.0.0",
4
+ "description": "Use this to create Eloquent models and CRUDs",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git://github.com/generathor-js/generathor-laravel.git"
10
+ },
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "format": "prettier --write 'src/**/*.{ts,tsx}'",
14
+ "lint": "eslint",
15
+ "generathor": "generathor",
16
+ "lint:fix": "eslint --fix",
17
+ "prepare": "husky"
18
+ },
19
+ "files": [
20
+ "dist/**/*",
21
+ "templates/**/*"
22
+ ],
23
+ "author": "Diego Michelena",
24
+ "license": "MIT",
25
+ "devDependencies": {
26
+ "@eslint/js": "^9.12.0",
27
+ "@types/args": "^5.0.3",
28
+ "@types/node": "^22.7.6",
29
+ "@types/pluralize": "^0.0.33",
30
+ "eslint": "^9.12.0",
31
+ "husky": "^9.1.6",
32
+ "prettier": "^3.3.3",
33
+ "typescript": "^4.6.4",
34
+ "typescript-eslint": "^8.9.0"
35
+ },
36
+ "dependencies": {
37
+ "pluralize": "^8.0.0"
38
+ },
39
+ "peerDependencies": {
40
+ "generathor-db": "^1.0.2",
41
+ "generathor": "^1.0.11"
42
+ },
43
+ "optionalDependencies": {
44
+ "mysql2": "^3.11.3"
45
+ }
46
+ }
@@ -0,0 +1,13 @@
1
+ <?php
2
+
3
+ namespace {{namespace}};
4
+
5
+ use {{namespace}}\Generathor\\{{model}} as Model;
6
+
7
+ /**
8
+ * Automatically generated by Generathor
9
+ *
10
+ * Class {{model}}
11
+ * Here you can add custom methods
12
+ */
13
+ class {{model}} extends Model {}