@omnifyjp/ts 5.8.10 → 5.8.11

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.
@@ -42,7 +42,13 @@ function generateBaseController(name, schema, reader, config) {
42
42
  const baseNs = config.structure === 'modular'
43
43
  ? resolveModularBaseNamespace(config, name, 'Controllers', config.controllers.baseNamespace)
44
44
  : groupNestBase(config.controllers.baseNamespace);
45
- const modelNs = groupNestBase(config.models.namespace);
45
+ // Issue #98 v5.8.11: controller base methods type-hint the
46
+ // USER-EDITABLE Model — same reasoning as the service-generator
47
+ // signature fix. Without this, the controller's `show` /
48
+ // `update` / `destroy` route bindings resolve as base instances
49
+ // and every project-owned service / policy that takes the
50
+ // editable type fails with TypeError.
51
+ const modelNs = groupNestEditable(config.models.userEditableNamespace, config.models);
46
52
  const serviceBaseNs = config.structure === 'modular'
47
53
  ? resolveModularBaseNamespace(config, name, 'Services', config.services.baseNamespace)
48
54
  : groupNestBase(config.services.baseNamespace);
@@ -510,15 +510,24 @@ function generateBaseService(name, schema, reader, config) {
510
510
  const baseNs = config.structure === 'modular'
511
511
  ? resolveModularBaseNamespace(config, name, 'Services', config.services.baseNamespace)
512
512
  : nestByGroup({ path: '', namespace: config.services.baseNamespace }, schema.group).namespace;
513
- // Issue #98 v5.8.4: cross-layer Model imports must include the
514
- // schema's group folder so they resolve to where Models actually
515
- // live now. Pre-fix the service base emitted
516
- // `use App\Omnify\Models\Banner;` while the model file was at
517
- // `app/Omnify/Models/Cms/Banner.php` autoload failed at runtime
518
- // for every consumer (TypeError + missing-file include).
513
+ // Issue #98 v5.8.11: service base methods type-hint the USER-EDITABLE
514
+ // Model class (`App\Models\Banner`), NOT the grouped base
515
+ // (`App\Omnify\Models\Cms\Banner`). PHP signature contravariance:
516
+ // when the user-editable child service overrides a base method,
517
+ // PHP requires the override's parameter type to be the SAME or
518
+ // WIDER than the parent's. The user-editable class is what app code
519
+ // type-hints against everywhere else (factory $model since v5.8.9,
520
+ // relations since v5.8.10, controllers, tests). Without this fix,
521
+ // every override of `find / create / update / delete` on every
522
+ // editable service blew up with a Fatal compile error.
523
+ // Modular structure: per-Schema isolation — base + editable share ns.
524
+ // Pivot schemas don't have services (kind:object only), so the only
525
+ // shape adjustment is `userEditableGroupByFolder` group nesting.
519
526
  const modelNs = config.structure === 'modular'
520
527
  ? config.models.namespace
521
- : nestByGroup({ path: '', namespace: config.models.namespace }, schema.group).namespace;
528
+ : (config.models.userEditableGroupByFolder
529
+ ? nestByGroup({ path: '', namespace: config.models.userEditableNamespace }, schema.group).namespace
530
+ : config.models.userEditableNamespace);
522
531
  // Build imports
523
532
  const imports = [
524
533
  `use ${modelNs}\\${modelName};`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omnifyjp/ts",
3
- "version": "5.8.10",
3
+ "version": "5.8.11",
4
4
  "description": "TypeScript model type generator from Omnify schemas.json",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",