@omnifyjp/ts 5.6.0 → 5.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -187,6 +187,13 @@ function generateUserController(name, schema, config) {
187
187
  const userPath = group
188
188
  ? `${editable.path}/Api/V1/${group}`
189
189
  : `${editable.path}/Api/V1`;
190
+ // Issue #98: alias on class-name collision (flatBase + userEditablePath).
191
+ const baseAlias = baseDescriptor.className === editable.className
192
+ ? `${baseDescriptor.className}Base`
193
+ : baseDescriptor.className;
194
+ const baseImport = baseAlias === baseDescriptor.className
195
+ ? `use ${baseDescriptor.fqn};`
196
+ : `use ${baseDescriptor.fqn} as ${baseAlias};`;
190
197
  const content = `<?php
191
198
 
192
199
  /**
@@ -197,9 +204,9 @@ function generateUserController(name, schema, config) {
197
204
 
198
205
  namespace ${userNs};
199
206
 
200
- use ${baseDescriptor.fqn};
207
+ ${baseImport}
201
208
 
202
- class ${editable.className} extends ${baseDescriptor.className}
209
+ class ${editable.className} extends ${baseAlias}
203
210
  {
204
211
  //
205
212
  }
@@ -221,8 +221,17 @@ function generateUserModel(name, config, hasNestedSet = false) {
221
221
  : resolveBaseClass(config.models, modelName, 'BaseModel');
222
222
  const factoryNamespace = config.factories.namespace;
223
223
  const nestedSetNamespace = config.nestedset.namespace;
224
+ // Issue #98: when flatBase + userEditablePath both set, base.className
225
+ // (`Banner`) collides with the editable class (`Banner`). A bare
226
+ // `use App\Omnify\Models\Banner;` + `class Banner extends Banner`
227
+ // self-references and crashes at autoload. Alias the import in that
228
+ // case so the editable resolves to a distinct symbol.
229
+ const baseAlias = base.className === editable.className ? `${base.className}Base` : base.className;
230
+ const baseImport = baseAlias === base.className
231
+ ? `use ${base.fqn};`
232
+ : `use ${base.fqn} as ${baseAlias};`;
224
233
  const imports = [
225
- `use ${base.fqn};`,
234
+ baseImport,
226
235
  `use ${factoryNamespace}\\${modelName}Factory;`,
227
236
  `use Illuminate\\Database\\Eloquent\\Factories\\HasFactory;`,
228
237
  ];
@@ -248,7 +257,7 @@ ${imports.join('\n')}
248
257
  /**
249
258
  * ${modelName} — add project-specific model logic here.
250
259
  */
251
- class ${modelName} extends ${base.className}
260
+ class ${modelName} extends ${baseAlias}
252
261
  {
253
262
  ${traits.join('\n')}
254
263
 
@@ -111,11 +111,18 @@ function generateUserPolicyClass(name, config) {
111
111
  const editable = config.structure === 'modular'
112
112
  ? { className: `${modelName}Policy`, fileName: `${modelName}Policy.php`, namespace: config.policies.namespace, path: config.policies.path }
113
113
  : resolveEditableClass(config.policies, modelName, 'Policy');
114
+ // Issue #98: alias on class-name collision (flatBase + userEditablePath).
115
+ const baseAlias = baseDescriptor.className === editable.className
116
+ ? `${baseDescriptor.className}Base`
117
+ : baseDescriptor.className;
118
+ const baseImport = baseAlias === baseDescriptor.className
119
+ ? `use ${baseDescriptor.fqn};`
120
+ : `use ${baseDescriptor.fqn} as ${baseAlias};`;
114
121
  const content = `<?php
115
122
 
116
123
  namespace ${editable.namespace};
117
124
 
118
- use ${baseDescriptor.fqn};
125
+ ${baseImport}
119
126
 
120
127
  /**
121
128
  * ${modelName} Policy
@@ -123,7 +130,7 @@ use ${baseDescriptor.fqn};
123
130
  * This file is generated once and can be customized.
124
131
  * Add your custom authorization logic here.
125
132
  */
126
- class ${editable.className} extends ${baseDescriptor.className}
133
+ class ${editable.className} extends ${baseAlias}
127
134
  {
128
135
  // Add your custom policy methods here
129
136
  }
@@ -281,6 +281,13 @@ function generateUserRequest(name, config, action) {
281
281
  const editable = config.structure === 'modular'
282
282
  ? { className: `${modelName}${action}Request`, fileName: `${modelName}${action}Request.php`, namespace: config.requests.namespace, path: config.requests.path }
283
283
  : resolveEditableClass(config.requests, modelName, `${action}Request`);
284
+ // Issue #98: alias on class-name collision (flatBase + userEditablePath).
285
+ const baseAlias = baseDescriptor.className === editable.className
286
+ ? `${baseDescriptor.className}Base`
287
+ : baseDescriptor.className;
288
+ const baseImport = baseAlias === baseDescriptor.className
289
+ ? `use ${baseDescriptor.fqn};`
290
+ : `use ${baseDescriptor.fqn} as ${baseAlias};`;
284
291
  const content = `<?php
285
292
 
286
293
  /**
@@ -291,7 +298,7 @@ function generateUserRequest(name, config, action) {
291
298
 
292
299
  namespace ${editable.namespace};
293
300
 
294
- use ${baseDescriptor.fqn};
301
+ ${baseImport}
295
302
 
296
303
  /**
297
304
  * ${modelName}${action}Request — add project-specific authorization and validation here.
@@ -301,7 +308,7 @@ use ${baseDescriptor.fqn};
301
308
  * - rules(): array (returns schemaRules() — override to add custom rules)
302
309
  * - attributes(): array (returns schemaAttributes() — override to rename fields)
303
310
  */
304
- class ${editable.className} extends ${baseDescriptor.className}
311
+ class ${editable.className} extends ${baseAlias}
305
312
  {
306
313
  //
307
314
  }
@@ -143,6 +143,13 @@ function generateUserResource(name, config) {
143
143
  const editable = config.structure === 'modular'
144
144
  ? { className: `${modelName}Resource`, fileName: `${modelName}Resource.php`, namespace: config.resources.namespace, path: config.resources.path }
145
145
  : resolveEditableClass(config.resources, modelName, 'Resource');
146
+ // Issue #98: alias on class-name collision (flatBase + userEditablePath).
147
+ const baseAlias = baseDescriptor.className === editable.className
148
+ ? `${baseDescriptor.className}Base`
149
+ : baseDescriptor.className;
150
+ const baseImport = baseAlias === baseDescriptor.className
151
+ ? `use ${baseDescriptor.fqn};`
152
+ : `use ${baseDescriptor.fqn} as ${baseAlias};`;
146
153
  const content = `<?php
147
154
 
148
155
  /**
@@ -153,7 +160,7 @@ function generateUserResource(name, config) {
153
160
 
154
161
  namespace ${editable.namespace};
155
162
 
156
- use ${baseDescriptor.fqn};
163
+ ${baseImport}
157
164
 
158
165
  /**
159
166
  * ${modelName}Resource — add project-specific serialization here.
@@ -161,7 +168,7 @@ use ${baseDescriptor.fqn};
161
168
  * Inherited from base:
162
169
  * - toArray(Request \\$request): array (returns schemaArray(\\$request) — override to add fields)
163
170
  */
164
- class ${editable.className} extends ${baseDescriptor.className}
171
+ class ${editable.className} extends ${baseAlias}
165
172
  {
166
173
  //
167
174
  }
@@ -1764,6 +1764,15 @@ function generateUserService(name, schema, config) {
1764
1764
  : resolveEditableClass(config.services, modelName, 'Service');
1765
1765
  const userNs = group ? `${editable.namespace}\\${group}` : editable.namespace;
1766
1766
  const userPath = group ? `${editable.path}/${group}` : editable.path;
1767
+ // Issue #98: alias on class-name collision (flatBase + userEditablePath)
1768
+ // so `class BannerService extends BannerService` becomes
1769
+ // `class BannerService extends BannerServiceBase` via aliased import.
1770
+ const baseAlias = baseDescriptor.className === editable.className
1771
+ ? `${baseDescriptor.className}Base`
1772
+ : baseDescriptor.className;
1773
+ const baseImport = baseAlias === baseDescriptor.className
1774
+ ? `use ${baseDescriptor.fqn};`
1775
+ : `use ${baseDescriptor.fqn} as ${baseAlias};`;
1767
1776
  const content = `<?php
1768
1777
 
1769
1778
  /**
@@ -1774,9 +1783,9 @@ function generateUserService(name, schema, config) {
1774
1783
 
1775
1784
  namespace ${userNs};
1776
1785
 
1777
- use ${baseDescriptor.fqn};
1786
+ ${baseImport}
1778
1787
 
1779
- class ${editable.className} extends ${baseDescriptor.className}
1788
+ class ${editable.className} extends ${baseAlias}
1780
1789
  {
1781
1790
  //
1782
1791
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omnifyjp/ts",
3
- "version": "5.6.0",
3
+ "version": "5.6.2",
4
4
  "description": "TypeScript model type generator from Omnify schemas.json",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",