@carlonicora/nestjs-neo4jsonapi 1.5.1 → 1.6.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 (99) hide show
  1. package/dist/agents/community.detector/services/community.detector.service.d.ts.map +1 -1
  2. package/dist/agents/community.detector/services/community.detector.service.js.map +1 -1
  3. package/dist/bootstrap/app.module.factory.d.ts.map +1 -1
  4. package/dist/bootstrap/app.module.factory.js +23 -1
  5. package/dist/bootstrap/app.module.factory.js.map +1 -1
  6. package/dist/common/guards/index.d.ts +1 -1
  7. package/dist/common/guards/index.d.ts.map +1 -1
  8. package/dist/common/guards/index.js +1 -1
  9. package/dist/common/guards/index.js.map +1 -1
  10. package/dist/config/base.config.d.ts.map +1 -1
  11. package/dist/config/base.config.js +2 -0
  12. package/dist/config/base.config.js.map +1 -1
  13. package/dist/config/interfaces/config.discord.interface.d.ts +2 -0
  14. package/dist/config/interfaces/config.discord.interface.d.ts.map +1 -1
  15. package/dist/config/interfaces/index.d.ts +1 -0
  16. package/dist/config/interfaces/index.d.ts.map +1 -1
  17. package/dist/config/interfaces/index.js +1 -0
  18. package/dist/config/interfaces/index.js.map +1 -1
  19. package/dist/core/neo4j/abstracts/abstract.repository.d.ts.map +1 -1
  20. package/dist/core/neo4j/abstracts/abstract.repository.js +9 -3
  21. package/dist/core/neo4j/abstracts/abstract.repository.js.map +1 -1
  22. package/dist/foundations/auth/auth.module.js +2 -2
  23. package/dist/foundations/auth/auth.module.js.map +1 -1
  24. package/dist/foundations/auth/services/auth.discord.service.d.ts +3 -1
  25. package/dist/foundations/auth/services/auth.discord.service.d.ts.map +1 -1
  26. package/dist/foundations/auth/services/auth.discord.service.js +5 -21
  27. package/dist/foundations/auth/services/auth.discord.service.js.map +1 -1
  28. package/dist/foundations/discord/discord.module.d.ts +3 -0
  29. package/dist/foundations/discord/discord.module.d.ts.map +1 -0
  30. package/dist/foundations/discord/discord.module.js +23 -0
  31. package/dist/foundations/discord/discord.module.js.map +1 -0
  32. package/dist/foundations/discord/index.d.ts +4 -0
  33. package/dist/foundations/discord/index.d.ts.map +1 -0
  34. package/dist/foundations/discord/index.js +20 -0
  35. package/dist/foundations/discord/index.js.map +1 -0
  36. package/dist/foundations/discord/serialisers/discord.error.serialiser.d.ts +8 -0
  37. package/dist/foundations/discord/serialisers/discord.error.serialiser.d.ts.map +1 -0
  38. package/dist/foundations/discord/serialisers/discord.error.serialiser.js +23 -0
  39. package/dist/foundations/discord/serialisers/discord.error.serialiser.js.map +1 -0
  40. package/dist/foundations/discord/services/discord.service.d.ts +11 -0
  41. package/dist/foundations/discord/services/discord.service.d.ts.map +1 -0
  42. package/dist/foundations/discord/services/discord.service.js +54 -0
  43. package/dist/foundations/discord/services/discord.service.js.map +1 -0
  44. package/dist/foundations/discord-user/discord-user.module.d.ts +3 -0
  45. package/dist/foundations/discord-user/discord-user.module.d.ts.map +1 -0
  46. package/dist/foundations/discord-user/{discord.module.js → discord-user.module.js} +4 -3
  47. package/dist/foundations/discord-user/discord-user.module.js.map +1 -0
  48. package/dist/foundations/discord-user/index.d.ts +5 -0
  49. package/dist/foundations/discord-user/index.d.ts.map +1 -0
  50. package/dist/foundations/discord-user/index.js +21 -0
  51. package/dist/foundations/discord-user/index.js.map +1 -0
  52. package/dist/foundations/discord-user/services/discord-user.service.d.ts +16 -0
  53. package/dist/foundations/discord-user/services/discord-user.service.d.ts.map +1 -0
  54. package/dist/foundations/discord-user/services/discord-user.service.js +54 -0
  55. package/dist/foundations/discord-user/services/discord-user.service.js.map +1 -0
  56. package/dist/foundations/discord-user/types/discord.user.type.d.ts +1 -1
  57. package/dist/foundations/discord-user/types/discord.user.type.d.ts.map +1 -1
  58. package/dist/foundations/foundations.modules.js +2 -2
  59. package/dist/foundations/foundations.modules.js.map +1 -1
  60. package/dist/foundations/index.d.ts +2 -0
  61. package/dist/foundations/index.d.ts.map +1 -1
  62. package/dist/foundations/index.js +2 -0
  63. package/dist/foundations/index.js.map +1 -1
  64. package/dist/scripts/generate-module/generator.d.ts.map +1 -1
  65. package/dist/scripts/generate-module/generator.js +6 -0
  66. package/dist/scripts/generate-module/generator.js.map +1 -1
  67. package/dist/scripts/generate-module/templates/controller.template.d.ts.map +1 -1
  68. package/dist/scripts/generate-module/templates/controller.template.js +34 -12
  69. package/dist/scripts/generate-module/templates/controller.template.js.map +1 -1
  70. package/dist/scripts/generate-module/templates/dto.post.template.d.ts.map +1 -1
  71. package/dist/scripts/generate-module/templates/dto.post.template.js +19 -3
  72. package/dist/scripts/generate-module/templates/dto.post.template.js.map +1 -1
  73. package/dist/scripts/generate-module/templates/dto.put.template.d.ts.map +1 -1
  74. package/dist/scripts/generate-module/templates/dto.put.template.js +19 -3
  75. package/dist/scripts/generate-module/templates/dto.put.template.js.map +1 -1
  76. package/dist/scripts/generate-module/templates/entity.template.d.ts.map +1 -1
  77. package/dist/scripts/generate-module/templates/entity.template.js +48 -24
  78. package/dist/scripts/generate-module/templates/entity.template.js.map +1 -1
  79. package/dist/scripts/generate-module/templates/meta.template.d.ts +12 -0
  80. package/dist/scripts/generate-module/templates/meta.template.d.ts.map +1 -0
  81. package/dist/scripts/generate-module/templates/meta.template.js +25 -0
  82. package/dist/scripts/generate-module/templates/meta.template.js.map +1 -0
  83. package/dist/scripts/generate-module/transformers/import-resolver.d.ts +66 -0
  84. package/dist/scripts/generate-module/transformers/import-resolver.d.ts.map +1 -1
  85. package/dist/scripts/generate-module/transformers/import-resolver.js +91 -0
  86. package/dist/scripts/generate-module/transformers/import-resolver.js.map +1 -1
  87. package/dist/scripts/generate-module/transformers/nested-route-generator.d.ts.map +1 -1
  88. package/dist/scripts/generate-module/transformers/nested-route-generator.js +13 -3
  89. package/dist/scripts/generate-module/transformers/nested-route-generator.js.map +1 -1
  90. package/dist/scripts/generate-module/transformers/relationship-mapper.d.ts +3 -3
  91. package/dist/scripts/generate-module/transformers/relationship-mapper.d.ts.map +1 -1
  92. package/dist/scripts/generate-module/transformers/relationship-mapper.js +33 -10
  93. package/dist/scripts/generate-module/transformers/relationship-mapper.js.map +1 -1
  94. package/dist/scripts/generate-module/types/template-data.interface.d.ts +7 -0
  95. package/dist/scripts/generate-module/types/template-data.interface.d.ts.map +1 -1
  96. package/package.json +8 -6
  97. package/dist/foundations/discord-user/discord.module.d.ts +0 -3
  98. package/dist/foundations/discord-user/discord.module.d.ts.map +0 -1
  99. package/dist/foundations/discord-user/discord.module.js.map +0 -1
@@ -2,6 +2,28 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateEntityFile = generateEntityFile;
4
4
  const import_resolver_1 = require("../transformers/import-resolver");
5
+ /**
6
+ * Get the entity type import path
7
+ *
8
+ * For foundation entities: imports from the package
9
+ * For feature entities: relative path to entity file
10
+ */
11
+ function getEntityImportPath(rel) {
12
+ return (0, import_resolver_1.isFoundationImport)(rel.relatedEntity.directory)
13
+ ? import_resolver_1.FOUNDATION_PACKAGE
14
+ : `src/${rel.relatedEntity.directory}/${rel.relatedEntity.kebabCase}/entities/${rel.relatedEntity.kebabCase}`;
15
+ }
16
+ /**
17
+ * Get the meta import path
18
+ *
19
+ * For foundation entities: imports from the package (metas are re-exported)
20
+ * For feature entities: relative path to meta file
21
+ */
22
+ function getMetaImportPath(rel) {
23
+ return (0, import_resolver_1.isFoundationImport)(rel.relatedEntity.directory)
24
+ ? import_resolver_1.FOUNDATION_PACKAGE
25
+ : `src/${rel.relatedEntity.directory}/${rel.relatedEntity.kebabCase}/entities/${rel.relatedEntity.kebabCase}.meta`;
26
+ }
5
27
  /**
6
28
  * Generate entity file content (Type + Descriptor)
7
29
  *
@@ -12,38 +34,34 @@ const import_resolver_1 = require("../transformers/import-resolver");
12
34
  * @returns Generated TypeScript code
13
35
  */
14
36
  function generateEntityFile(data) {
15
- const { names, endpoint, nodeName, labelName, fields, relationships, entityImports, metaImports } = data;
37
+ const { names, endpoint, nodeName, labelName, fields, relationships } = data;
16
38
  // Build imports
17
39
  const libraryImports = ["defineEntity", "Entity"];
18
40
  if (data.isCompanyScoped) {
19
41
  libraryImports.push("Company");
20
42
  }
21
- // Add entity imports for relationships
22
- const uniqueEntityImports = new Set();
43
+ // All entities use meta pattern to avoid circular dependencies
44
+ // Entity type imports (grouped by path) - for type annotations
23
45
  const entityImportsByPath = new Map();
46
+ const processedEntities = new Set();
24
47
  for (const rel of relationships) {
25
- if (!uniqueEntityImports.has(rel.relatedEntity.name)) {
26
- uniqueEntityImports.add(rel.relatedEntity.name);
27
- // Group by import path
28
- const importPath = (0, import_resolver_1.isFoundationImport)(rel.relatedEntity.directory)
29
- ? import_resolver_1.FOUNDATION_PACKAGE
30
- : `../../${rel.relatedEntity.directory}/${rel.relatedEntity.kebabCase}/entities/${rel.relatedEntity.kebabCase}.entity`;
48
+ if (!processedEntities.has(rel.relatedEntity.name)) {
49
+ processedEntities.add(rel.relatedEntity.name);
50
+ const importPath = getEntityImportPath(rel);
31
51
  if (!entityImportsByPath.has(importPath)) {
32
52
  entityImportsByPath.set(importPath, []);
33
53
  }
34
54
  entityImportsByPath.get(importPath).push(rel.relatedEntity.name);
35
55
  }
36
56
  }
37
- // Add meta imports for relationships
38
- const uniqueMetaImports = new Set();
57
+ // Meta imports (grouped by path) - for relationship model references
39
58
  const metaImportsByPath = new Map();
59
+ const processedMetas = new Set();
40
60
  for (const rel of relationships) {
41
- if (!uniqueMetaImports.has(rel.model)) {
42
- uniqueMetaImports.add(rel.model);
43
- // Group by import path
44
- const importPath = (0, import_resolver_1.isFoundationImport)(rel.relatedEntity.directory)
45
- ? import_resolver_1.FOUNDATION_PACKAGE
46
- : `../../${rel.relatedEntity.directory}/${rel.relatedEntity.kebabCase}/entities/${rel.relatedEntity.kebabCase}.meta`;
61
+ // Model is like "userMeta", "ownerMeta", "campaignMeta", etc.
62
+ if (!processedMetas.has(rel.model)) {
63
+ processedMetas.add(rel.model);
64
+ const importPath = getMetaImportPath(rel);
47
65
  if (!metaImportsByPath.has(importPath)) {
48
66
  metaImportsByPath.set(importPath, []);
49
67
  }
@@ -78,13 +96,19 @@ function generateEntityFile(data) {
78
96
  return ` ${rel.key}: {\n ${parts.join(",\n ")},\n },`;
79
97
  })
80
98
  .join("\n");
81
- return `import { ${libraryImports.join(", ")} } from "@carlonicora/nestjs-neo4jsonapi";
82
- ${Array.from(entityImportsByPath.entries())
83
- .map(([path, items]) => `import { ${items.join(", ")} } from "${path}";`)
84
- .join("\n")}
85
- ${Array.from(metaImportsByPath.entries())
86
- .map(([path, items]) => `import { ${items.join(", ")} } from "${path}";`)
87
- .join("\n")}
99
+ // Build all import lines
100
+ const importLines = [];
101
+ // Library imports (always first)
102
+ importLines.push(`import { ${libraryImports.join(", ")} } from "@carlonicora/nestjs-neo4jsonapi";`);
103
+ // Entity type imports (for type annotations in the type definition)
104
+ for (const [importPath, items] of entityImportsByPath.entries()) {
105
+ importLines.push(`import { ${items.join(", ")} } from "${importPath}";`);
106
+ }
107
+ // Meta imports (for relationship model references)
108
+ for (const [importPath, items] of metaImportsByPath.entries()) {
109
+ importLines.push(`import { ${items.join(", ")} } from "${importPath}";`);
110
+ }
111
+ return `${importLines.join("\n")}
88
112
 
89
113
  /**
90
114
  * ${names.pascalCase} Entity Type
@@ -1 +1 @@
1
- {"version":3,"file":"entity.template.js","sourceRoot":"","sources":["../../../../scripts/generate-module/templates/entity.template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity.template.js","sourceRoot":"","sources":["../../../../scripts/generate-module/templates/entity.template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { TemplateData } from "../types/template-data.interface";
2
+ /**
3
+ * Generate meta file content
4
+ *
5
+ * Meta files contain lightweight metadata (type, endpoint, nodeName, labelName)
6
+ * that can be imported without causing circular dependencies.
7
+ *
8
+ * @param data - Template data
9
+ * @returns Generated TypeScript code for meta file
10
+ */
11
+ export declare function generateMetaFile(data: TemplateData): string;
12
+ //# sourceMappingURL=meta.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.template.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-module/templates/meta.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAY3D"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateMetaFile = generateMetaFile;
4
+ /**
5
+ * Generate meta file content
6
+ *
7
+ * Meta files contain lightweight metadata (type, endpoint, nodeName, labelName)
8
+ * that can be imported without causing circular dependencies.
9
+ *
10
+ * @param data - Template data
11
+ * @returns Generated TypeScript code for meta file
12
+ */
13
+ function generateMetaFile(data) {
14
+ const { names, endpoint, nodeName, labelName } = data;
15
+ return `import { DataMeta } from "@carlonicora/nestjs-neo4jsonapi";
16
+
17
+ export const ${names.camelCase}Meta: DataMeta = {
18
+ type: "${endpoint}",
19
+ endpoint: "${endpoint}",
20
+ nodeName: "${nodeName}",
21
+ labelName: "${labelName}",
22
+ };
23
+ `;
24
+ }
25
+ //# sourceMappingURL=meta.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.template.js","sourceRoot":"","sources":["../../../../scripts/generate-module/templates/meta.template.ts"],"names":[],"mappings":";;AAWA,4CAYC;AArBD;;;;;;;;GAQG;AACH,SAAgB,gBAAgB,CAAC,IAAkB;IACjD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAEtD,OAAO;;eAEM,KAAK,CAAC,SAAS;WACnB,QAAQ;eACJ,QAAQ;eACR,QAAQ;gBACP,SAAS;;CAExB,CAAC;AACF,CAAC"}
@@ -13,6 +13,47 @@ export declare const FOUNDATION_PACKAGE = "@carlonicora/nestjs-neo4jsonapi";
13
13
  * isFoundationImport("features/campaign") // false
14
14
  */
15
15
  export declare function isFoundationImport(directory: string): boolean;
16
+ /**
17
+ * Check if a related entity uses the NEW structure (Descriptor pattern)
18
+ *
19
+ * IMPORTANT: As of the circular dependency fix, we ALWAYS generate .meta.ts files
20
+ * for all entities. This means all entities now use the OLD structure (meta pattern)
21
+ * to avoid circular imports between entities that reference each other.
22
+ *
23
+ * @param params - Directory and module name of the related entity
24
+ * @returns Always false - all entities now use meta pattern
25
+ *
26
+ * @deprecated This function now always returns false. All entities use meta pattern.
27
+ */
28
+ export declare function isNewEntityStructure(params: {
29
+ directory: string;
30
+ moduleName: string;
31
+ }): boolean;
32
+ /**
33
+ * Get the model reference string for a relationship
34
+ *
35
+ * @param params - Entity name and structure type
36
+ * @returns Model reference string for use in relationship definition
37
+ *
38
+ * @example
39
+ * getModelReference({ isNewStructure: false, entityName: "User", variantName: "owner" })
40
+ * // Returns: "ownerMeta"
41
+ *
42
+ * getModelReference({ isNewStructure: true, entityName: "Character" })
43
+ * // Returns: "CharacterDescriptor.model"
44
+ */
45
+ export declare function getModelReference(params: {
46
+ isNewStructure: boolean;
47
+ entityName: string;
48
+ variantName?: string;
49
+ }): string;
50
+ /**
51
+ * Get the Descriptor name for NEW structure entities
52
+ *
53
+ * @param entityName - PascalCase entity name
54
+ * @returns Descriptor name (e.g., "CharacterDescriptor")
55
+ */
56
+ export declare function getDescriptorName(entityName: string): string;
16
57
  /**
17
58
  * Resolve relative import path between two modules
18
59
  *
@@ -90,4 +131,29 @@ export declare function resolveDtoImportPath(params: {
90
131
  * // Returns: "../entities/comment"
91
132
  */
92
133
  export declare function resolveModuleInternalPath(subpath: string): string;
134
+ /**
135
+ * Resolve import path for NEW structure entity file
136
+ * NEW structure uses absolute paths from src and no .entity suffix
137
+ *
138
+ * @param params - Directory and module info
139
+ * @returns Absolute import path for entity (e.g., "src/features/character/entities/character")
140
+ *
141
+ * @example
142
+ * resolveNewEntityImportPath({ directory: "features", moduleName: "character" })
143
+ * // Returns: "src/features/character/entities/character"
144
+ */
145
+ export declare function resolveNewEntityImportPath(params: {
146
+ directory: string;
147
+ moduleName: string;
148
+ }): string;
149
+ /**
150
+ * Resolve import path for NEW structure DTO file
151
+ *
152
+ * @param params - Directory and module info
153
+ * @returns Absolute import path for DTO (e.g., "src/features/character/dtos/character.dto")
154
+ */
155
+ export declare function resolveNewDtoImportPath(params: {
156
+ directory: string;
157
+ moduleName: string;
158
+ }): string;
93
159
  //# sourceMappingURL=import-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"import-resolver.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-module/transformers/import-resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,kBAAkB,oCAAoC,CAAC;AAEpE;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAgBT;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAGT;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAGT;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAGT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjE"}
1
+ {"version":3,"file":"import-resolver.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-module/transformers/import-resolver.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,kBAAkB,oCAAoC,CAAC;AAEpE;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAK/F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAUT;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAgBT;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAGT;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAGT;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAGT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjE;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CASpG;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAQjG"}
@@ -2,11 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FOUNDATION_PACKAGE = void 0;
4
4
  exports.isFoundationImport = isFoundationImport;
5
+ exports.isNewEntityStructure = isNewEntityStructure;
6
+ exports.getModelReference = getModelReference;
7
+ exports.getDescriptorName = getDescriptorName;
5
8
  exports.resolveImportPath = resolveImportPath;
6
9
  exports.resolveEntityImportPath = resolveEntityImportPath;
7
10
  exports.resolveMetaImportPath = resolveMetaImportPath;
8
11
  exports.resolveDtoImportPath = resolveDtoImportPath;
9
12
  exports.resolveModuleInternalPath = resolveModuleInternalPath;
13
+ exports.resolveNewEntityImportPath = resolveNewEntityImportPath;
14
+ exports.resolveNewDtoImportPath = resolveNewDtoImportPath;
10
15
  /**
11
16
  * Foundation package name constant
12
17
  */
@@ -24,6 +29,57 @@ exports.FOUNDATION_PACKAGE = "@carlonicora/nestjs-neo4jsonapi";
24
29
  function isFoundationImport(directory) {
25
30
  return directory === "@foundation" || directory.startsWith("@foundation/");
26
31
  }
32
+ /**
33
+ * Check if a related entity uses the NEW structure (Descriptor pattern)
34
+ *
35
+ * IMPORTANT: As of the circular dependency fix, we ALWAYS generate .meta.ts files
36
+ * for all entities. This means all entities now use the OLD structure (meta pattern)
37
+ * to avoid circular imports between entities that reference each other.
38
+ *
39
+ * @param params - Directory and module name of the related entity
40
+ * @returns Always false - all entities now use meta pattern
41
+ *
42
+ * @deprecated This function now always returns false. All entities use meta pattern.
43
+ */
44
+ function isNewEntityStructure(params) {
45
+ // Always return false - we now generate .meta.ts files for ALL entities
46
+ // This prevents circular dependencies when entities reference each other
47
+ void params; // Suppress unused parameter warning
48
+ return false;
49
+ }
50
+ /**
51
+ * Get the model reference string for a relationship
52
+ *
53
+ * @param params - Entity name and structure type
54
+ * @returns Model reference string for use in relationship definition
55
+ *
56
+ * @example
57
+ * getModelReference({ isNewStructure: false, entityName: "User", variantName: "owner" })
58
+ * // Returns: "ownerMeta"
59
+ *
60
+ * getModelReference({ isNewStructure: true, entityName: "Character" })
61
+ * // Returns: "CharacterDescriptor.model"
62
+ */
63
+ function getModelReference(params) {
64
+ const { isNewStructure, entityName, variantName } = params;
65
+ if (isNewStructure) {
66
+ return `${entityName}Descriptor.model`;
67
+ }
68
+ else {
69
+ // OLD structure: use variant name if provided, otherwise entity name
70
+ const baseName = variantName || entityName;
71
+ return `${baseName.charAt(0).toLowerCase()}${baseName.slice(1)}Meta`;
72
+ }
73
+ }
74
+ /**
75
+ * Get the Descriptor name for NEW structure entities
76
+ *
77
+ * @param entityName - PascalCase entity name
78
+ * @returns Descriptor name (e.g., "CharacterDescriptor")
79
+ */
80
+ function getDescriptorName(entityName) {
81
+ return `${entityName}Descriptor`;
82
+ }
27
83
  /**
28
84
  * Resolve relative import path between two modules
29
85
  *
@@ -105,4 +161,39 @@ function resolveDtoImportPath(params) {
105
161
  function resolveModuleInternalPath(subpath) {
106
162
  return `../${subpath}`;
107
163
  }
164
+ // ============================================================================
165
+ // NEW Structure Import Path Functions
166
+ // ============================================================================
167
+ /**
168
+ * Resolve import path for NEW structure entity file
169
+ * NEW structure uses absolute paths from src and no .entity suffix
170
+ *
171
+ * @param params - Directory and module info
172
+ * @returns Absolute import path for entity (e.g., "src/features/character/entities/character")
173
+ *
174
+ * @example
175
+ * resolveNewEntityImportPath({ directory: "features", moduleName: "character" })
176
+ * // Returns: "src/features/character/entities/character"
177
+ */
178
+ function resolveNewEntityImportPath(params) {
179
+ const { directory, moduleName } = params;
180
+ if (isFoundationImport(directory)) {
181
+ // Foundation: use package path (when foundations are migrated to NEW structure)
182
+ return `src/foundations/${moduleName}/entities/${moduleName}`;
183
+ }
184
+ return `src/${directory}/${moduleName}/entities/${moduleName}`;
185
+ }
186
+ /**
187
+ * Resolve import path for NEW structure DTO file
188
+ *
189
+ * @param params - Directory and module info
190
+ * @returns Absolute import path for DTO (e.g., "src/features/character/dtos/character.dto")
191
+ */
192
+ function resolveNewDtoImportPath(params) {
193
+ const { directory, moduleName } = params;
194
+ if (isFoundationImport(directory)) {
195
+ return `src/foundations/${moduleName}/dtos/${moduleName}.dto`;
196
+ }
197
+ return `src/${directory}/${moduleName}/dtos/${moduleName}.dto`;
198
+ }
108
199
  //# sourceMappingURL=import-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"import-resolver.js","sourceRoot":"","sources":["../../../../scripts/generate-module/transformers/import-resolver.ts"],"names":[],"mappings":";;;AAeA,gDAEC;AAaD,8CAqBC;AAYD,0DAQC;AAYD,sDAQC;AAYD,oDAQC;AAaD,8DAEC;AA9HD;;GAEG;AACU,QAAA,kBAAkB,GAAG,iCAAiC,CAAC;AAEpE;;;;;;;;;GASG;AACH,SAAgB,kBAAkB,CAAC,SAAiB;IAClD,OAAO,SAAS,KAAK,aAAa,IAAI,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,iBAAiB,CAAC,MAKjC;IACC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAExD,iEAAiE;IACjE,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,MAAM,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED,2DAA2D;IAC3D,mEAAmE;IACnE,gEAAgE;IAChE,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,4DAA4D;IAChF,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,GAAG,KAAK,IAAI,QAAQ,EAAE,CAAC;IAEpC,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;AACxB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,uBAAuB,CAAC,MAKvC;IACC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,GAAG,QAAQ,aAAa,MAAM,CAAC,QAAQ,SAAS,CAAC;AAC1D,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,qBAAqB,CAAC,MAKrC;IACC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,GAAG,QAAQ,aAAa,MAAM,CAAC,QAAQ,OAAO,CAAC;AACxD,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,oBAAoB,CAAC,MAKpC;IACC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,GAAG,QAAQ,SAAS,MAAM,CAAC,QAAQ,MAAM,CAAC;AACnD,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,yBAAyB,CAAC,OAAe;IACvD,OAAO,MAAM,OAAO,EAAE,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"import-resolver.js","sourceRoot":"","sources":["../../../../scripts/generate-module/transformers/import-resolver.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"nested-route-generator.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-module/transformers/nested-route-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAGvF;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,sBAAsB,EAAE,EACvC,UAAU,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACjD,WAAW,EAAE,CA8Bf;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAG9E"}
1
+ {"version":3,"file":"nested-route-generator.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-module/transformers/nested-route-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAGvF;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,sBAAsB,EAAE,EACvC,UAAU,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACjD,WAAW,EAAE,CA2Cf;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAG9E"}
@@ -26,10 +26,16 @@ function generateNestedRoutes(relationships, thisEntity) {
26
26
  .map((rel) => {
27
27
  const relatedName = rel.relatedEntity.camelCase;
28
28
  const relatedMeta = rel.model;
29
+ // For NEW structure, the endpoint is accessed via Descriptor.model.endpoint
30
+ // For OLD structure, it's accessed via meta.endpoint
31
+ const endpointAccess = rel.isNewStructure ? `${rel.descriptorName}.model.endpoint` : `${relatedMeta}.endpoint`;
32
+ // The current entity's Descriptor name (PascalCase)
33
+ const thisEntityDescriptor = `${(0, name_transformer_1.toPascalCase)(thisEntity.nodeName)}Descriptor`;
29
34
  return {
30
35
  // Path template using descriptor endpoint
31
- // Example: ${discussionMeta.endpoint}/:discussionId/${CommentDescriptor.model.endpoint}
32
- path: `\${${relatedMeta}.endpoint}/:${relatedName}Id/\${${thisEntity.nodeName}Descriptor.model.endpoint}`,
36
+ // OLD: ${discussionMeta.endpoint}/:discussionId/${CommentDescriptor.model.endpoint}
37
+ // NEW: ${CharacterDescriptor.model.endpoint}/:characterId/${AttributeDescriptor.model.endpoint}
38
+ path: `\${${endpointAccess}}/:${relatedName}Id/\${${thisEntityDescriptor}.model.endpoint}`,
33
39
  // Method name: findByDiscussion, findByTopic, etc.
34
40
  methodName: `findBy${(0, name_transformer_1.toPascalCase)(rel.key)}`,
35
41
  // Relationship key used in findByRelated call
@@ -37,8 +43,12 @@ function generateNestedRoutes(relationships, thisEntity) {
37
43
  relationshipKey: rel.key,
38
44
  // Parameter name in route: discussionId, topicId, etc.
39
45
  paramName: `${relatedName}Id`,
40
- // Meta import name: discussionMeta, topicMeta, etc.
46
+ // Meta import name (for OLD structure) or endpoint access expression
41
47
  relatedMeta: relatedMeta,
48
+ // NEW structure support
49
+ isNewStructure: rel.isNewStructure,
50
+ descriptorName: rel.descriptorName,
51
+ importPath: rel.importPath,
42
52
  };
43
53
  });
44
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nested-route-generator.js","sourceRoot":"","sources":["../../../../scripts/generate-module/transformers/nested-route-generator.ts"],"names":[],"mappings":";;AAgBA,oDAiCC;AAQD,8DAGC;AA3DD,yDAAkD;AAElD;;;;;;;;;;;;GAYG;AACH,SAAgB,oBAAoB,CAClC,aAAuC,EACvC,UAAkD;IAElD,OAAO,aAAa;SACjB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;QACd,mDAAmD;QACnD,gDAAgD;QAChD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACzB,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;QAChD,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC;QAE9B,OAAO;YACL,0CAA0C;YAC1C,wFAAwF;YACxF,IAAI,EAAE,MAAM,WAAW,eAAe,WAAW,SAAS,UAAU,CAAC,QAAQ,4BAA4B;YAEzG,mDAAmD;YACnD,UAAU,EAAE,SAAS,IAAA,+BAAY,EAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAE5C,8CAA8C;YAC9C,uDAAuD;YACvD,eAAe,EAAE,GAAG,CAAC,GAAG;YAExB,uDAAuD;YACvD,SAAS,EAAE,GAAG,WAAW,IAAI;YAE7B,oDAAoD;YACpD,WAAW,EAAE,WAAW;SACzB,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,GAA2B;IACnE,uDAAuD;IACvD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"nested-route-generator.js","sourceRoot":"","sources":["../../../../scripts/generate-module/transformers/nested-route-generator.ts"],"names":[],"mappings":";;AAgBA,oDA8CC;AAQD,8DAGC;AAxED,yDAAkD;AAElD;;;;;;;;;;;;GAYG;AACH,SAAgB,oBAAoB,CAClC,aAAuC,EACvC,UAAkD;IAElD,OAAO,aAAa;SACjB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;QACd,mDAAmD;QACnD,gDAAgD;QAChD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACzB,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;QAChD,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC;QAE9B,4EAA4E;QAC5E,qDAAqD;QACrD,MAAM,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,iBAAiB,CAAC,CAAC,CAAC,GAAG,WAAW,WAAW,CAAC;QAE/G,oDAAoD;QACpD,MAAM,oBAAoB,GAAG,GAAG,IAAA,+BAAY,EAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;QAE9E,OAAO;YACL,0CAA0C;YAC1C,oFAAoF;YACpF,gGAAgG;YAChG,IAAI,EAAE,MAAM,cAAc,MAAM,WAAW,SAAS,oBAAoB,kBAAkB;YAE1F,mDAAmD;YACnD,UAAU,EAAE,SAAS,IAAA,+BAAY,EAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAE5C,8CAA8C;YAC9C,uDAAuD;YACvD,eAAe,EAAE,GAAG,CAAC,GAAG;YAExB,uDAAuD;YACvD,SAAS,EAAE,GAAG,WAAW,IAAI;YAE7B,qEAAqE;YACrE,WAAW,EAAE,WAAW;YAExB,wBAAwB;YACxB,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,UAAU,EAAE,GAAG,CAAC,UAAU;SAC3B,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,GAA2B;IACnE,uDAAuD;IACvD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACzB,CAAC"}
@@ -4,12 +4,12 @@ import { DescriptorRelationship } from "../types/template-data.interface";
4
4
  * Map JSON relationship definition to descriptor relationship
5
5
  *
6
6
  * Key mappings:
7
- * - toNode: true → direction: "in" (relationship TO this entity)
8
- * - toNode: false → direction: "out" (relationship FROM this entity)
7
+ * - toNode: true → direction: "out" (relationship FROM this entity TO related)
8
+ * - toNode: false → direction: "in" (relationship FROM related TO this entity)
9
9
  * - single: true → cardinality: "one"
10
10
  * - single: false → cardinality: "many"
11
11
  * - variant: "Author" → contextKey: "userId"
12
- * - variant: other → dtoKey: pluralized variant
12
+ * - variant: other → dtoKey: singular/plural based on cardinality
13
13
  *
14
14
  * @param rel - JSON relationship definition
15
15
  * @returns Descriptor relationship configuration
@@ -1 +1 @@
1
- {"version":3,"file":"relationship-mapper.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-module/transformers/relationship-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAG1E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,0BAA0B,GAAG,sBAAsB,CA8CvF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,0BAA0B,EAAE,GAAG,sBAAsB,EAAE,CAEtG;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,sBAAsB,EAAE,GAAG,MAAM,EAAE,CAGtF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,sBAAsB,EAAE,GAAG,MAAM,EAAE,CAGxF"}
1
+ {"version":3,"file":"relationship-mapper.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-module/transformers/relationship-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAS1E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,0BAA0B,GAAG,sBAAsB,CAsEvF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,0BAA0B,EAAE,GAAG,sBAAsB,EAAE,CAEtG;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,sBAAsB,EAAE,GAAG,MAAM,EAAE,CAGtF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,sBAAsB,EAAE,GAAG,MAAM,EAAE,CAGxF"}
@@ -5,23 +5,24 @@ exports.mapRelationships = mapRelationships;
5
5
  exports.getUniqueMetaImports = getUniqueMetaImports;
6
6
  exports.getUniqueEntityImports = getUniqueEntityImports;
7
7
  const name_transformer_1 = require("./name-transformer");
8
+ const import_resolver_1 = require("./import-resolver");
8
9
  /**
9
10
  * Map JSON relationship definition to descriptor relationship
10
11
  *
11
12
  * Key mappings:
12
- * - toNode: true → direction: "in" (relationship TO this entity)
13
- * - toNode: false → direction: "out" (relationship FROM this entity)
13
+ * - toNode: true → direction: "out" (relationship FROM this entity TO related)
14
+ * - toNode: false → direction: "in" (relationship FROM related TO this entity)
14
15
  * - single: true → cardinality: "one"
15
16
  * - single: false → cardinality: "many"
16
17
  * - variant: "Author" → contextKey: "userId"
17
- * - variant: other → dtoKey: pluralized variant
18
+ * - variant: other → dtoKey: singular/plural based on cardinality
18
19
  *
19
20
  * @param rel - JSON relationship definition
20
21
  * @returns Descriptor relationship configuration
21
22
  */
22
23
  function mapRelationship(rel) {
23
24
  // Core mappings
24
- const direction = rel.toNode ? "in" : "out";
25
+ const direction = rel.toNode ? "out" : "in";
25
26
  const cardinality = rel.single ? "one" : "many";
26
27
  // Determine contextKey and dtoKey based on variant
27
28
  let contextKey;
@@ -31,19 +32,38 @@ function mapRelationship(rel) {
31
32
  contextKey = "userId";
32
33
  }
33
34
  else if (rel.variant) {
34
- // Other variants: use variant name as dtoKey (pluralized)
35
- dtoKey = (0, name_transformer_1.pluralize)(rel.variant.toLowerCase());
35
+ // Other variants: use variant name as dtoKey
36
+ // Pluralize only for "many" cardinality
37
+ dtoKey = rel.single ? rel.variant.toLowerCase() : (0, name_transformer_1.pluralize)(rel.variant.toLowerCase());
36
38
  }
37
39
  else {
38
- // No variant: use entity name as dtoKey (pluralized)
39
- dtoKey = (0, name_transformer_1.pluralize)(rel.name.toLowerCase());
40
+ // No variant: use entity name as dtoKey
41
+ // Pluralize only for "many" cardinality
42
+ dtoKey = rel.single ? rel.name.toLowerCase() : (0, name_transformer_1.pluralize)(rel.name.toLowerCase());
40
43
  }
41
44
  // Determine relationship key (what it's called in the descriptor)
42
45
  const key = (0, name_transformer_1.toCamelCase)(rel.variant || rel.name);
43
- // Meta import name (e.g., "userMeta", "discussionMeta")
44
- const model = `${(0, name_transformer_1.toCamelCase)(rel.name)}Meta`;
45
46
  // Related entity name transformations
46
47
  const relatedEntityNames = (0, name_transformer_1.transformNames)(rel.name, (0, name_transformer_1.pluralize)(rel.name.toLowerCase()));
48
+ // Detect if related entity uses NEW structure (Descriptor pattern)
49
+ const isNewStructure = (0, import_resolver_1.isNewEntityStructure)({
50
+ directory: rel.directory,
51
+ moduleName: relatedEntityNames.kebabCase,
52
+ });
53
+ // Get model reference based on structure type
54
+ const model = (0, import_resolver_1.getModelReference)({
55
+ isNewStructure,
56
+ entityName: rel.name,
57
+ variantName: rel.variant,
58
+ });
59
+ // NEW structure specific fields
60
+ const descriptorName = isNewStructure ? (0, import_resolver_1.getDescriptorName)(rel.name) : undefined;
61
+ const importPath = isNewStructure
62
+ ? (0, import_resolver_1.resolveNewEntityImportPath)({
63
+ directory: rel.directory,
64
+ moduleName: relatedEntityNames.kebabCase,
65
+ })
66
+ : undefined;
47
67
  return {
48
68
  key,
49
69
  model,
@@ -60,6 +80,9 @@ function mapRelationship(rel) {
60
80
  camelCase: relatedEntityNames.camelCase,
61
81
  kebabCase: relatedEntityNames.kebabCase,
62
82
  },
83
+ isNewStructure,
84
+ descriptorName,
85
+ importPath,
63
86
  };
64
87
  }
65
88
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"relationship-mapper.js","sourceRoot":"","sources":["../../../../scripts/generate-module/transformers/relationship-mapper.ts"],"names":[],"mappings":";;AAkBA,0CA8CC;AAQD,4CAEC;AASD,oDAGC;AAQD,wDAGC;AA/FD,yDAA4E;AAE5E;;;;;;;;;;;;;GAaG;AACH,SAAgB,eAAe,CAAC,GAA+B;IAC7D,gBAAgB;IAChB,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5C,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAEhD,mDAAmD;IACnD,IAAI,UAA8B,CAAC;IACnC,IAAI,MAA0B,CAAC;IAE/B,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC7B,+CAA+C;QAC/C,UAAU,GAAG,QAAQ,CAAC;IACxB,CAAC;SAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QACvB,0DAA0D;QAC1D,MAAM,GAAG,IAAA,4BAAS,EAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,qDAAqD;QACrD,MAAM,GAAG,IAAA,4BAAS,EAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,kEAAkE;IAClE,MAAM,GAAG,GAAG,IAAA,8BAAW,EAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAEjD,wDAAwD;IACxD,MAAM,KAAK,GAAG,GAAG,IAAA,8BAAW,EAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;IAE7C,sCAAsC;IACtC,MAAM,kBAAkB,GAAG,IAAA,iCAAc,EAAC,GAAG,CAAC,IAAI,EAAE,IAAA,4BAAS,EAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAEvF,OAAO;QACL,GAAG;QACH,KAAK;QACL,SAAS;QACT,YAAY,EAAE,GAAG,CAAC,gBAAgB;QAClC,WAAW;QACX,UAAU;QACV,MAAM;QACN,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,aAAa,EAAE;YACb,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,UAAU,EAAE,kBAAkB,CAAC,UAAU;YACzC,SAAS,EAAE,kBAAkB,CAAC,SAAS;YACvC,SAAS,EAAE,kBAAkB,CAAC,SAAS;SACxC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,aAA2C;IAC1E,OAAO,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAAC,aAAuC;IAC1E,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,sBAAsB,CAAC,aAAuC;IAC5E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"relationship-mapper.js","sourceRoot":"","sources":["../../../../scripts/generate-module/transformers/relationship-mapper.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,9 @@ export interface DescriptorRelationship {
47
47
  camelCase: string;
48
48
  kebabCase: string;
49
49
  };
50
+ isNewStructure: boolean;
51
+ descriptorName?: string;
52
+ importPath?: string;
50
53
  }
51
54
  /**
52
55
  * Nested route configuration
@@ -57,6 +60,9 @@ export interface NestedRoute {
57
60
  relationshipKey: string;
58
61
  paramName: string;
59
62
  relatedMeta: string;
63
+ isNewStructure: boolean;
64
+ descriptorName?: string;
65
+ importPath?: string;
60
66
  }
61
67
  /**
62
68
  * DTO field configuration
@@ -76,6 +82,7 @@ export interface DTORelationship {
76
82
  isList: boolean;
77
83
  isOptional: boolean;
78
84
  importPath: string;
85
+ isNewStructure: boolean;
79
86
  }
80
87
  /**
81
88
  * Complete template data passed to all templates
@@ -1 +1 @@
1
- {"version":3,"file":"template-data.interface.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-module/types/template-data.interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,KAAK,GAAG,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAE3B,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IAGjB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,UAAU,GAAG,aAAa,CAAC;IAGtC,MAAM,EAAE,aAAa,EAAE,CAAC;IAGxB,aAAa,EAAE,sBAAsB,EAAE,CAAC;IAGxC,cAAc,EAAE,eAAe,EAAE,CAAC;IAClC,aAAa,EAAE,eAAe,EAAE,CAAC;IACjC,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,UAAU,EAAE,eAAe,EAAE,CAAC;IAG9B,YAAY,EAAE,WAAW,EAAE,CAAC;IAG5B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,oBAAoB,EAAE,eAAe,EAAE,CAAC;IACxC,mBAAmB,EAAE,eAAe,EAAE,CAAC;CACxC"}
1
+ {"version":3,"file":"template-data.interface.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-module/types/template-data.interface.ts"],"names":[],"mappings":"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"}