@autobe/agent 0.26.0 → 0.28.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 (205) hide show
  1. package/lib/AutoBeAgent.d.ts +2 -1
  2. package/lib/AutoBeAgent.js +27 -7
  3. package/lib/AutoBeAgent.js.map +1 -1
  4. package/lib/AutoBeMockAgent.js +2 -4
  5. package/lib/AutoBeMockAgent.js.map +1 -1
  6. package/lib/constants/AutoBeSystemPromptConstant.d.ts +11 -11
  7. package/lib/context/AutoBeContext.d.ts +4 -1
  8. package/lib/context/AutoBeTokenUsage.d.ts +1 -1
  9. package/lib/context/AutoBeTokenUsage.js.map +1 -1
  10. package/lib/context/assertSchemaModel.d.ts +1 -1
  11. package/lib/context/assertSchemaModel.js +4 -7
  12. package/lib/context/assertSchemaModel.js.map +1 -1
  13. package/lib/factory/AutoBeFunctionCallingMetricFactory.d.ts +7 -0
  14. package/lib/factory/AutoBeFunctionCallingMetricFactory.js +35 -0
  15. package/lib/factory/AutoBeFunctionCallingMetricFactory.js.map +1 -0
  16. package/lib/factory/AutoBeProcessAggregateFactory.d.ts +13 -0
  17. package/lib/factory/AutoBeProcessAggregateFactory.js +100 -0
  18. package/lib/factory/AutoBeProcessAggregateFactory.js.map +1 -0
  19. package/lib/factory/createAutoBeContext.d.ts +2 -1
  20. package/lib/factory/createAutoBeContext.js +78 -27
  21. package/lib/factory/createAutoBeContext.js.map +1 -1
  22. package/lib/index.mjs +24065 -12997
  23. package/lib/index.mjs.map +1 -1
  24. package/lib/orchestrate/analyze/histories/transformAnalyzeScenarioHistories.js +1 -1
  25. package/lib/orchestrate/analyze/histories/transformAnalyzeScenarioHistories.js.map +1 -1
  26. package/lib/orchestrate/analyze/orchestrateAnalyze.js +1 -0
  27. package/lib/orchestrate/analyze/orchestrateAnalyze.js.map +1 -1
  28. package/lib/orchestrate/analyze/orchestrateAnalyzeReview.js +166 -87
  29. package/lib/orchestrate/analyze/orchestrateAnalyzeReview.js.map +1 -1
  30. package/lib/orchestrate/analyze/orchestrateAnalyzeScenario.js +639 -322
  31. package/lib/orchestrate/analyze/orchestrateAnalyzeScenario.js.map +1 -1
  32. package/lib/orchestrate/analyze/orchestrateAnalyzeWrite.js +146 -76
  33. package/lib/orchestrate/analyze/orchestrateAnalyzeWrite.js.map +1 -1
  34. package/lib/orchestrate/analyze/structures/IAutoBeAnalyzeReviewApplication.d.ts +17 -52
  35. package/lib/orchestrate/analyze/structures/IAutoBeAnalyzeScenarioApplication.d.ts +25 -22
  36. package/lib/orchestrate/analyze/structures/IAutoBeAnalyzeWriteApplication.d.ts +7 -23
  37. package/lib/orchestrate/common/orchestrateCommonCorrectCasting.d.ts +2 -1
  38. package/lib/orchestrate/common/orchestrateCommonCorrectCasting.js +168 -4
  39. package/lib/orchestrate/common/orchestrateCommonCorrectCasting.js.map +1 -1
  40. package/lib/{factory/createAutoBeApplication.d.ts → orchestrate/facade/createAutoBeFacadeController.d.ts} +2 -2
  41. package/lib/orchestrate/facade/createAutoBeFacadeController.js +1308 -0
  42. package/lib/orchestrate/facade/createAutoBeFacadeController.js.map +1 -0
  43. package/lib/orchestrate/facade/histories/IAutoBeFacadeApplication.js.map +1 -0
  44. package/lib/orchestrate/facade/histories/IAutoBeFacadeApplicationProps.js.map +1 -0
  45. package/lib/orchestrate/facade/histories/IAutoBeFacadeApplicationResult.js.map +1 -0
  46. package/lib/orchestrate/facade/{transformFacadeStateMessage.d.ts → structures/transformFacadeStateMessage.d.ts} +1 -1
  47. package/lib/orchestrate/facade/structures/transformFacadeStateMessage.js.map +1 -0
  48. package/lib/orchestrate/interface/histories/transformInterfaceComplementHistories.js +2 -2
  49. package/lib/orchestrate/interface/histories/transformInterfaceComplementHistories.js.map +1 -1
  50. package/lib/orchestrate/interface/histories/transformInterfaceEndpointHistories.js +1 -1
  51. package/lib/orchestrate/interface/histories/transformInterfaceEndpointHistories.js.map +1 -1
  52. package/lib/orchestrate/interface/histories/transformInterfaceEndpointsReviewHistories.js +3 -2
  53. package/lib/orchestrate/interface/histories/transformInterfaceEndpointsReviewHistories.js.map +1 -1
  54. package/lib/orchestrate/interface/histories/transformInterfaceGroupHistories.js +1 -1
  55. package/lib/orchestrate/interface/histories/transformInterfaceGroupHistories.js.map +1 -1
  56. package/lib/orchestrate/interface/histories/transformInterfaceOperationHistories.js +1 -1
  57. package/lib/orchestrate/interface/histories/transformInterfaceOperationHistories.js.map +1 -1
  58. package/lib/orchestrate/interface/histories/transformInterfaceOperationsReviewHistories.js +2 -2
  59. package/lib/orchestrate/interface/histories/transformInterfaceOperationsReviewHistories.js.map +1 -1
  60. package/lib/orchestrate/interface/histories/transformInterfaceSchemaHistories.js +1 -1
  61. package/lib/orchestrate/interface/histories/transformInterfaceSchemaHistories.js.map +1 -1
  62. package/lib/orchestrate/interface/orchestrateInterface.d.ts +1 -1
  63. package/lib/orchestrate/interface/orchestrateInterface.js +15 -8
  64. package/lib/orchestrate/interface/orchestrateInterface.js.map +1 -1
  65. package/lib/orchestrate/interface/orchestrateInterfaceAuthorizations.js +874 -49
  66. package/lib/orchestrate/interface/orchestrateInterfaceAuthorizations.js.map +1 -1
  67. package/lib/orchestrate/interface/orchestrateInterfaceComplement.js +1858 -67
  68. package/lib/orchestrate/interface/orchestrateInterfaceComplement.js.map +1 -1
  69. package/lib/orchestrate/interface/orchestrateInterfaceEndpoints.js +251 -133
  70. package/lib/orchestrate/interface/orchestrateInterfaceEndpoints.js.map +1 -1
  71. package/lib/orchestrate/interface/orchestrateInterfaceEndpointsReview.d.ts +0 -6
  72. package/lib/orchestrate/interface/orchestrateInterfaceEndpointsReview.js +257 -135
  73. package/lib/orchestrate/interface/orchestrateInterfaceEndpointsReview.js.map +1 -1
  74. package/lib/orchestrate/interface/orchestrateInterfaceGroups.js +341 -227
  75. package/lib/orchestrate/interface/orchestrateInterfaceGroups.js.map +1 -1
  76. package/lib/orchestrate/interface/orchestrateInterfaceOperations.js +761 -49
  77. package/lib/orchestrate/interface/orchestrateInterfaceOperations.js.map +1 -1
  78. package/lib/orchestrate/interface/orchestrateInterfaceOperationsReview.js +911 -50
  79. package/lib/orchestrate/interface/orchestrateInterfaceOperationsReview.js.map +1 -1
  80. package/lib/orchestrate/interface/orchestrateInterfacePrerequisites.js +207 -4
  81. package/lib/orchestrate/interface/orchestrateInterfacePrerequisites.js.map +1 -1
  82. package/lib/orchestrate/interface/orchestrateInterfaceSchemaRename.js +109 -2
  83. package/lib/orchestrate/interface/orchestrateInterfaceSchemaRename.js.map +1 -1
  84. package/lib/orchestrate/interface/orchestrateInterfaceSchemaReview.d.ts +5 -3
  85. package/lib/orchestrate/interface/orchestrateInterfaceSchemaReview.js +1904 -77
  86. package/lib/orchestrate/interface/orchestrateInterfaceSchemaReview.js.map +1 -1
  87. package/lib/orchestrate/interface/orchestrateInterfaceSchemas.js +1858 -67
  88. package/lib/orchestrate/interface/orchestrateInterfaceSchemas.js.map +1 -1
  89. package/lib/orchestrate/interface/utils/JsonSchemaFactory.js +23 -23
  90. package/lib/orchestrate/prisma/orchestratePrisma.d.ts +1 -1
  91. package/lib/orchestrate/prisma/orchestratePrisma.js +1 -0
  92. package/lib/orchestrate/prisma/orchestratePrisma.js.map +1 -1
  93. package/lib/orchestrate/prisma/orchestratePrismaComponent.js +391 -197
  94. package/lib/orchestrate/prisma/orchestratePrismaComponent.js.map +1 -1
  95. package/lib/orchestrate/prisma/orchestratePrismaCorrect.js +1168 -591
  96. package/lib/orchestrate/prisma/orchestratePrismaCorrect.js.map +1 -1
  97. package/lib/orchestrate/prisma/orchestratePrismaReview.js +1186 -600
  98. package/lib/orchestrate/prisma/orchestratePrismaReview.js.map +1 -1
  99. package/lib/orchestrate/prisma/orchestratePrismaSchemas.js +6 -3
  100. package/lib/orchestrate/prisma/orchestratePrismaSchemas.js.map +1 -1
  101. package/lib/orchestrate/realize/histories/transformRealizeWriteAuthorizationsHistories.js +2 -2
  102. package/lib/orchestrate/realize/histories/transformRealizeWriteAuthorizationsHistories.js.map +1 -1
  103. package/lib/orchestrate/realize/orchestrateRealize.d.ts +1 -1
  104. package/lib/orchestrate/realize/orchestrateRealize.js +2 -1
  105. package/lib/orchestrate/realize/orchestrateRealize.js.map +1 -1
  106. package/lib/orchestrate/realize/orchestrateRealizeAuthorization.js +362 -180
  107. package/lib/orchestrate/realize/orchestrateRealizeAuthorization.js.map +1 -1
  108. package/lib/orchestrate/realize/orchestrateRealizeAuthorizationCorrect.js +399 -199
  109. package/lib/orchestrate/realize/orchestrateRealizeAuthorizationCorrect.js.map +1 -1
  110. package/lib/orchestrate/realize/orchestrateRealizeCorrect.js +133 -4
  111. package/lib/orchestrate/realize/orchestrateRealizeCorrect.js.map +1 -1
  112. package/lib/orchestrate/realize/orchestrateRealizeCorrectCasting.js +171 -7
  113. package/lib/orchestrate/realize/orchestrateRealizeCorrectCasting.js.map +1 -1
  114. package/lib/orchestrate/realize/orchestrateRealizeWrite.js +132 -3
  115. package/lib/orchestrate/realize/orchestrateRealizeWrite.js.map +1 -1
  116. package/lib/orchestrate/realize/utils/replaceImportStatements.js +0 -85
  117. package/lib/orchestrate/realize/utils/replaceImportStatements.js.map +1 -1
  118. package/lib/orchestrate/test/histories/transformTestWriteHistories.js.map +1 -1
  119. package/lib/orchestrate/test/orchestrateTest.d.ts +1 -1
  120. package/lib/orchestrate/test/orchestrateTest.js +2 -1
  121. package/lib/orchestrate/test/orchestrateTest.js.map +1 -1
  122. package/lib/orchestrate/test/orchestrateTestCorrect.js +134 -3
  123. package/lib/orchestrate/test/orchestrateTestCorrect.js.map +1 -1
  124. package/lib/orchestrate/test/orchestrateTestCorrectInvalidRequest.js +169 -4
  125. package/lib/orchestrate/test/orchestrateTestCorrectInvalidRequest.js.map +1 -1
  126. package/lib/orchestrate/test/orchestrateTestScenario.js +257 -4
  127. package/lib/orchestrate/test/orchestrateTestScenario.js.map +1 -1
  128. package/lib/orchestrate/test/orchestrateTestScenarioReview.js +283 -4
  129. package/lib/orchestrate/test/orchestrateTestScenarioReview.js.map +1 -1
  130. package/lib/orchestrate/test/orchestrateTestWrite.js +141 -3
  131. package/lib/orchestrate/test/orchestrateTestWrite.js.map +1 -1
  132. package/lib/utils/TokenUsageComputer.d.ts +5 -0
  133. package/lib/utils/TokenUsageComputer.js +29 -0
  134. package/lib/utils/TokenUsageComputer.js.map +1 -0
  135. package/package.json +10 -10
  136. package/src/AutoBeAgent.ts +40 -6
  137. package/src/AutoBeMockAgent.ts +2 -4
  138. package/src/constants/AutoBeSystemPromptConstant.ts +11 -11
  139. package/src/context/AutoBeContext.ts +8 -0
  140. package/src/context/AutoBeTokenUsage.ts +1 -1
  141. package/src/context/assertSchemaModel.ts +5 -8
  142. package/src/factory/AutoBeFunctionCallingMetricFactory.ts +44 -0
  143. package/src/factory/AutoBeProcessAggregateFactory.ts +141 -0
  144. package/src/factory/createAutoBeContext.ts +96 -36
  145. package/src/orchestrate/analyze/orchestrateAnalyze.ts +1 -0
  146. package/src/orchestrate/analyze/orchestrateAnalyzeReview.ts +9 -10
  147. package/src/orchestrate/analyze/orchestrateAnalyzeScenario.ts +15 -10
  148. package/src/orchestrate/analyze/orchestrateAnalyzeWrite.ts +10 -11
  149. package/src/orchestrate/analyze/structures/IAutoBeAnalyzeReviewApplication.ts +19 -54
  150. package/src/orchestrate/analyze/structures/IAutoBeAnalyzeScenarioApplication.ts +25 -22
  151. package/src/orchestrate/analyze/structures/IAutoBeAnalyzeWriteApplication.ts +8 -24
  152. package/src/orchestrate/common/orchestrateCommonCorrectCasting.ts +20 -3
  153. package/src/orchestrate/facade/createAutoBeFacadeController.ts +136 -0
  154. package/src/orchestrate/facade/{transformFacadeStateMessage.ts → structures/transformFacadeStateMessage.ts} +2 -2
  155. package/src/orchestrate/interface/histories/transformInterfaceEndpointsReviewHistories.ts +1 -0
  156. package/src/orchestrate/interface/orchestrateInterface.ts +17 -6
  157. package/src/orchestrate/interface/orchestrateInterfaceAuthorizations.ts +13 -2
  158. package/src/orchestrate/interface/orchestrateInterfaceComplement.ts +13 -2
  159. package/src/orchestrate/interface/orchestrateInterfaceEndpoints.ts +16 -11
  160. package/src/orchestrate/interface/orchestrateInterfaceEndpointsReview.ts +16 -13
  161. package/src/orchestrate/interface/orchestrateInterfaceGroups.ts +19 -15
  162. package/src/orchestrate/interface/orchestrateInterfaceOperations.ts +13 -2
  163. package/src/orchestrate/interface/orchestrateInterfaceOperationsReview.ts +16 -2
  164. package/src/orchestrate/interface/orchestrateInterfacePrerequisites.ts +13 -2
  165. package/src/orchestrate/interface/orchestrateInterfaceSchemaRename.ts +11 -2
  166. package/src/orchestrate/interface/orchestrateInterfaceSchemaReview.ts +24 -16
  167. package/src/orchestrate/interface/orchestrateInterfaceSchemas.ts +13 -2
  168. package/src/orchestrate/prisma/orchestratePrisma.ts +2 -1
  169. package/src/orchestrate/prisma/orchestratePrismaComponent.ts +15 -10
  170. package/src/orchestrate/prisma/orchestratePrismaCorrect.ts +9 -10
  171. package/src/orchestrate/prisma/orchestratePrismaReview.ts +9 -11
  172. package/src/orchestrate/prisma/orchestratePrismaSchemas.ts +2 -1
  173. package/src/orchestrate/realize/orchestrateRealize.ts +3 -2
  174. package/src/orchestrate/realize/orchestrateRealizeAuthorization.ts +15 -10
  175. package/src/orchestrate/realize/orchestrateRealizeAuthorizationCorrect.ts +15 -10
  176. package/src/orchestrate/realize/orchestrateRealizeCorrect.ts +14 -3
  177. package/src/orchestrate/realize/orchestrateRealizeCorrectCasting.ts +21 -6
  178. package/src/orchestrate/realize/orchestrateRealizeWrite.ts +13 -2
  179. package/src/orchestrate/realize/utils/replaceImportStatements.ts +0 -90
  180. package/src/orchestrate/test/experimental/orchestrateTestWrite.ast +5 -1
  181. package/src/orchestrate/test/histories/transformTestWriteHistories.ts +1 -1
  182. package/src/orchestrate/test/orchestrateTest.ts +3 -2
  183. package/src/orchestrate/test/orchestrateTestCorrect.ts +14 -2
  184. package/src/orchestrate/test/orchestrateTestCorrectInvalidRequest.ts +21 -3
  185. package/src/orchestrate/test/orchestrateTestScenario.ts +13 -2
  186. package/src/orchestrate/test/orchestrateTestScenarioReview.ts +13 -2
  187. package/src/orchestrate/test/orchestrateTestWrite.ts +13 -2
  188. package/src/utils/TokenUsageComputer.ts +35 -0
  189. package/lib/context/IAutoBeFacadeApplication.js.map +0 -1
  190. package/lib/context/IAutoBeFacadeApplicationProps.js.map +0 -1
  191. package/lib/context/IAutoBeFacadeApplicationResult.js.map +0 -1
  192. package/lib/factory/createAutoBeApplication.js +0 -942
  193. package/lib/factory/createAutoBeApplication.js.map +0 -1
  194. package/lib/orchestrate/facade/transformFacadeStateMessage.js.map +0 -1
  195. package/src/factory/createAutoBeApplication.ts +0 -123
  196. /package/lib/{context → orchestrate/facade/histories}/IAutoBeFacadeApplication.d.ts +0 -0
  197. /package/lib/{context → orchestrate/facade/histories}/IAutoBeFacadeApplication.js +0 -0
  198. /package/lib/{context → orchestrate/facade/histories}/IAutoBeFacadeApplicationProps.d.ts +0 -0
  199. /package/lib/{context → orchestrate/facade/histories}/IAutoBeFacadeApplicationProps.js +0 -0
  200. /package/lib/{context → orchestrate/facade/histories}/IAutoBeFacadeApplicationResult.d.ts +0 -0
  201. /package/lib/{context → orchestrate/facade/histories}/IAutoBeFacadeApplicationResult.js +0 -0
  202. /package/lib/orchestrate/facade/{transformFacadeStateMessage.js → structures/transformFacadeStateMessage.js} +0 -0
  203. /package/src/{context → orchestrate/facade/histories}/IAutoBeFacadeApplication.ts +0 -0
  204. /package/src/{context → orchestrate/facade/histories}/IAutoBeFacadeApplicationProps.ts +0 -0
  205. /package/src/{context → orchestrate/facade/histories}/IAutoBeFacadeApplicationResult.ts +0 -0
@@ -119,7 +119,7 @@ function process(ctx, props) {
119
119
  const pointer = {
120
120
  value: null,
121
121
  };
122
- const { tokenUsage } = yield ctx.conversate({
122
+ const { metric, tokenUsage } = yield ctx.conversate({
123
123
  source: "interfaceOperation",
124
124
  histories: (0, transformInterfaceOperationHistories_1.transformInterfaceOperationHistories)({
125
125
  state: ctx.state(),
@@ -162,14 +162,15 @@ function process(ctx, props) {
162
162
  });
163
163
  if (pointer.value === null)
164
164
  throw new Error("Failed to create operations."); // never be happened
165
- ctx.dispatch(Object.assign(Object.assign({ type: "interfaceOperation", id: (0, uuid_1.v7)(), operations: pointer.value, tokenUsage }, props.progress), { step: (_d = (_c = ctx.state().analyze) === null || _c === void 0 ? void 0 : _c.step) !== null && _d !== void 0 ? _d : 0, created_at: new Date().toISOString() }));
165
+ ctx.dispatch(Object.assign(Object.assign({ type: "interfaceOperation", id: (0, uuid_1.v7)(), operations: pointer.value, metric,
166
+ tokenUsage }, props.progress), { step: (_d = (_c = ctx.state().analyze) === null || _c === void 0 ? void 0 : _c.step) !== null && _d !== void 0 ? _d : 0, created_at: new Date().toISOString() }));
166
167
  return pointer.value;
167
168
  });
168
169
  }
169
170
  function createController(props) {
170
171
  (0, assertSchemaModel_1.assertSchemaModel)(props.model);
171
172
  const validate = (next) => {
172
- const result = (() => { const _io0 = input => Array.isArray(input.operations) && input.operations.every(elem => "object" === typeof elem && null !== elem && _io1(elem)); const _io1 = input => "string" === typeof input.specification && "string" === typeof input.description && "string" === typeof input.summary && (Array.isArray(input.parameters) && input.parameters.every(elem => "object" === typeof elem && null !== elem && _io2(elem))) && (null === input.requestBody || "object" === typeof input.requestBody && null !== input.requestBody && _io6(input.requestBody)) && (null === input.responseBody || "object" === typeof input.responseBody && null !== input.responseBody && _io7(input.responseBody)) && ("string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name)) && (Array.isArray(input.authorizationActors) && input.authorizationActors.every(elem => "string" === typeof elem && (RegExp("^[a-z][a-zA-Z0-9]*$").test(elem) && 1 <= elem.length))) && ("string" === typeof input.path && RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path)) && ("get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method); const _io2 = input => "string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) && "string" === typeof input.description && ("object" === typeof input.schema && null !== input.schema && _iu0(input.schema)); const _io3 = input => (undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000)) && (undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000)) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 && 0 < input.multipleOf)) && "integer" === input.type; const _io4 = input => (undefined === input.minimum || "number" === typeof input.minimum) && (undefined === input.maximum || "number" === typeof input.maximum) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && 0 < input.multipleOf) && "number" === input.type; const _io5 = input => (undefined === input.format || "string" === typeof input.format) && (undefined === input.pattern || "string" === typeof input.pattern) && (undefined === input.contentMediaType || "string" === typeof input.contentMediaType) && (undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000)) && (undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000)) && "string" === input.type; const _io6 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _io7 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _iu0 = input => (() => {
173
+ const result = (() => { const _iv4 = new Set(["date-time", "password", "regex", "uuid", "email", "hostname", "idn-email", "idn-hostname", "iri", "iri-reference", "ipv4", "ipv6", "uri", "uri-reference", "uri-template", "url", "date", "time", "duration", "json-pointer", "relative-json-pointer"]); const _vv8 = new Set(["date-time", "password", "regex", "uuid", "email", "hostname", "idn-email", "idn-hostname", "iri", "iri-reference", "ipv4", "ipv6", "uri", "uri-reference", "uri-template", "url", "date", "time", "duration", "json-pointer", "relative-json-pointer"]); const _io0 = input => Array.isArray(input.operations) && input.operations.every(elem => "object" === typeof elem && null !== elem && _io1(elem)); const _io1 = input => "string" === typeof input.specification && "string" === typeof input.description && "string" === typeof input.summary && (Array.isArray(input.parameters) && input.parameters.every(elem => "object" === typeof elem && null !== elem && _io2(elem))) && (null === input.requestBody || "object" === typeof input.requestBody && null !== input.requestBody && _io6(input.requestBody)) && (null === input.responseBody || "object" === typeof input.responseBody && null !== input.responseBody && _io7(input.responseBody)) && ("string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name)) && (Array.isArray(input.authorizationActors) && input.authorizationActors.every(elem => "string" === typeof elem && (RegExp("^[a-z][a-zA-Z0-9]*$").test(elem) && 1 <= elem.length))) && ("string" === typeof input.path && RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path)) && ("get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method); const _io2 = input => "string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) && "string" === typeof input.description && ("object" === typeof input.schema && null !== input.schema && _iu0(input.schema)); const _io3 = input => (undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000)) && (undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000)) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 && 0 < input.multipleOf)) && "integer" === input.type; const _io4 = input => (undefined === input.minimum || "number" === typeof input.minimum) && (undefined === input.maximum || "number" === typeof input.maximum) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && 0 < input.multipleOf) && "number" === input.type; const _io5 = input => (undefined === input.format || true === _iv4.has(input.format)) && (undefined === input.pattern || "string" === typeof input.pattern) && (undefined === input.contentMediaType || "string" === typeof input.contentMediaType) && (undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000)) && (undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000)) && "string" === input.type; const _io6 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _io7 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _iu0 = input => (() => {
173
174
  if ("number" === input.type)
174
175
  return _io4(input);
175
176
  else if ("integer" === input.type)
@@ -182,12 +183,12 @@ function createController(props) {
182
183
  path: _path + ".operations",
183
184
  expected: "Array<IAutoBeInterfaceOperationApplication.IOperation>",
184
185
  value: input.operations
185
- })) && input.operations.map((elem, _index4) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
186
- path: _path + ".operations[" + _index4 + "]",
186
+ })) && input.operations.map((elem, _index5) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
187
+ path: _path + ".operations[" + _index5 + "]",
187
188
  expected: "IAutoBeInterfaceOperationApplication.IOperation",
188
189
  value: elem
189
- })) && _vo1(elem, _path + ".operations[" + _index4 + "]", true && _exceptionable) || _report(_exceptionable, {
190
- path: _path + ".operations[" + _index4 + "]",
190
+ })) && _vo1(elem, _path + ".operations[" + _index5 + "]", true && _exceptionable) || _report(_exceptionable, {
191
+ path: _path + ".operations[" + _index5 + "]",
191
192
  expected: "IAutoBeInterfaceOperationApplication.IOperation",
192
193
  value: elem
193
194
  })).every(flag => flag) || _report(_exceptionable, {
@@ -210,12 +211,12 @@ function createController(props) {
210
211
  path: _path + ".parameters",
211
212
  expected: "Array<AutoBeOpenApi.IParameter>",
212
213
  value: input.parameters
213
- })) && input.parameters.map((elem, _index5) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
214
- path: _path + ".parameters[" + _index5 + "]",
214
+ })) && input.parameters.map((elem, _index6) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
215
+ path: _path + ".parameters[" + _index6 + "]",
215
216
  expected: "AutoBeOpenApi.IParameter",
216
217
  value: elem
217
- })) && _vo2(elem, _path + ".parameters[" + _index5 + "]", true && _exceptionable) || _report(_exceptionable, {
218
- path: _path + ".parameters[" + _index5 + "]",
218
+ })) && _vo2(elem, _path + ".parameters[" + _index6 + "]", true && _exceptionable) || _report(_exceptionable, {
219
+ path: _path + ".parameters[" + _index6 + "]",
219
220
  expected: "AutoBeOpenApi.IParameter",
220
221
  value: elem
221
222
  })).every(flag => flag) || _report(_exceptionable, {
@@ -250,16 +251,16 @@ function createController(props) {
250
251
  path: _path + ".authorizationActors",
251
252
  expected: "Array<string & CamelCasePattern & MinLength<1>>",
252
253
  value: input.authorizationActors
253
- })) && input.authorizationActors.map((elem, _index6) => "string" === typeof elem && (RegExp("^[a-z][a-zA-Z0-9]*$").test(elem) || _report(_exceptionable, {
254
- path: _path + ".authorizationActors[" + _index6 + "]",
254
+ })) && input.authorizationActors.map((elem, _index7) => "string" === typeof elem && (RegExp("^[a-z][a-zA-Z0-9]*$").test(elem) || _report(_exceptionable, {
255
+ path: _path + ".authorizationActors[" + _index7 + "]",
255
256
  expected: "string & CamelCasePattern",
256
257
  value: elem
257
258
  })) && (1 <= elem.length || _report(_exceptionable, {
258
- path: _path + ".authorizationActors[" + _index6 + "]",
259
+ path: _path + ".authorizationActors[" + _index7 + "]",
259
260
  expected: "string & MinLength<1>",
260
261
  value: elem
261
262
  })) || _report(_exceptionable, {
262
- path: _path + ".authorizationActors[" + _index6 + "]",
263
+ path: _path + ".authorizationActors[" + _index7 + "]",
263
264
  expected: "(string & CamelCasePattern & MinLength<1>)",
264
265
  value: elem
265
266
  })).every(flag => flag) || _report(_exceptionable, {
@@ -366,9 +367,9 @@ function createController(props) {
366
367
  path: _path + ".type",
367
368
  expected: "\"number\"",
368
369
  value: input.type
369
- })].every(flag => flag); const _vo5 = (input, _path, _exceptionable = true) => [undefined === input.format || "string" === typeof input.format || _report(_exceptionable, {
370
+ })].every(flag => flag); const _vo5 = (input, _path, _exceptionable = true) => [undefined === input.format || true === _vv8.has(input.format) || _report(_exceptionable, {
370
371
  path: _path + ".format",
371
- expected: "(string | undefined)",
372
+ expected: "(\"date\" | \"date-time\" | \"duration\" | \"email\" | \"hostname\" | \"idn-email\" | \"idn-hostname\" | \"ipv4\" | \"ipv6\" | \"iri\" | \"iri-reference\" | \"json-pointer\" | \"password\" | \"regex\" | \"relative-json-pointer\" | \"time\" | \"uri\" | \"uri-reference\" | \"uri-template\" | \"url\" | \"uuid\" | undefined)",
372
373
  value: input.format
373
374
  }), undefined === input.pattern || "string" === typeof input.pattern || _report(_exceptionable, {
374
375
  path: _path + ".pattern",
@@ -494,7 +495,11 @@ function createController(props) {
494
495
  };
495
496
  return result;
496
497
  };
497
- const application = collection[props.model === "chatgpt" ? "chatgpt" : "claude"](validate);
498
+ const application = collection[props.model === "chatgpt"
499
+ ? "chatgpt"
500
+ : props.model === "gemini"
501
+ ? "gemini"
502
+ : "claude"](validate);
498
503
  return {
499
504
  protocol: "class",
500
505
  name: "interface",
@@ -740,7 +745,30 @@ const collection = {
740
745
  properties: {
741
746
  format: {
742
747
  description: "Format restriction.",
743
- type: "string"
748
+ type: "string",
749
+ "enum": [
750
+ "date-time",
751
+ "password",
752
+ "regex",
753
+ "uuid",
754
+ "email",
755
+ "hostname",
756
+ "idn-email",
757
+ "idn-hostname",
758
+ "iri",
759
+ "iri-reference",
760
+ "ipv4",
761
+ "ipv6",
762
+ "uri",
763
+ "uri-reference",
764
+ "uri-template",
765
+ "url",
766
+ "date",
767
+ "time",
768
+ "duration",
769
+ "json-pointer",
770
+ "relative-json-pointer"
771
+ ]
744
772
  },
745
773
  pattern: {
746
774
  description: "Pattern restriction.",
@@ -809,7 +837,7 @@ const collection = {
809
837
  }
810
838
  },
811
839
  description: "Generate detailed API operations from path/method combinations.\n\nThis function creates complete API operations following REST principles and\nquality standards. Each generated operation includes specification, path,\nmethod, detailed multi-paragraph description, concise summary, parameters,\nand appropriate request/response bodies.\n\nThe function processes as many operations as possible in a single call,\nwith progress tracking to ensure iterative completion of all required\nendpoints.",
812
- validate: (() => { const _io0 = input => Array.isArray(input.operations) && input.operations.every(elem => "object" === typeof elem && null !== elem && _io1(elem)); const _io1 = input => "string" === typeof input.specification && "string" === typeof input.description && "string" === typeof input.summary && (Array.isArray(input.parameters) && input.parameters.every(elem => "object" === typeof elem && null !== elem && _io2(elem))) && (null === input.requestBody || "object" === typeof input.requestBody && null !== input.requestBody && _io6(input.requestBody)) && (null === input.responseBody || "object" === typeof input.responseBody && null !== input.responseBody && _io7(input.responseBody)) && ("string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name)) && (Array.isArray(input.authorizationActors) && input.authorizationActors.every(elem => "string" === typeof elem && (RegExp("^[a-z][a-zA-Z0-9]*$").test(elem) && 1 <= elem.length))) && ("string" === typeof input.path && RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path)) && ("get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method); const _io2 = input => "string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) && "string" === typeof input.description && ("object" === typeof input.schema && null !== input.schema && _iu0(input.schema)); const _io3 = input => (undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000)) && (undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000)) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 && 0 < input.multipleOf)) && "integer" === input.type; const _io4 = input => (undefined === input.minimum || "number" === typeof input.minimum) && (undefined === input.maximum || "number" === typeof input.maximum) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && 0 < input.multipleOf) && "number" === input.type; const _io5 = input => (undefined === input.format || "string" === typeof input.format) && (undefined === input.pattern || "string" === typeof input.pattern) && (undefined === input.contentMediaType || "string" === typeof input.contentMediaType) && (undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000)) && (undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000)) && "string" === input.type; const _io6 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _io7 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _iu0 = input => (() => {
840
+ validate: (() => { const _iv4 = new Set(["date-time", "password", "regex", "uuid", "email", "hostname", "idn-email", "idn-hostname", "iri", "iri-reference", "ipv4", "ipv6", "uri", "uri-reference", "uri-template", "url", "date", "time", "duration", "json-pointer", "relative-json-pointer"]); const _vv8 = new Set(["date-time", "password", "regex", "uuid", "email", "hostname", "idn-email", "idn-hostname", "iri", "iri-reference", "ipv4", "ipv6", "uri", "uri-reference", "uri-template", "url", "date", "time", "duration", "json-pointer", "relative-json-pointer"]); const _io0 = input => Array.isArray(input.operations) && input.operations.every(elem => "object" === typeof elem && null !== elem && _io1(elem)); const _io1 = input => "string" === typeof input.specification && "string" === typeof input.description && "string" === typeof input.summary && (Array.isArray(input.parameters) && input.parameters.every(elem => "object" === typeof elem && null !== elem && _io2(elem))) && (null === input.requestBody || "object" === typeof input.requestBody && null !== input.requestBody && _io6(input.requestBody)) && (null === input.responseBody || "object" === typeof input.responseBody && null !== input.responseBody && _io7(input.responseBody)) && ("string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name)) && (Array.isArray(input.authorizationActors) && input.authorizationActors.every(elem => "string" === typeof elem && (RegExp("^[a-z][a-zA-Z0-9]*$").test(elem) && 1 <= elem.length))) && ("string" === typeof input.path && RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path)) && ("get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method); const _io2 = input => "string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) && "string" === typeof input.description && ("object" === typeof input.schema && null !== input.schema && _iu0(input.schema)); const _io3 = input => (undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000)) && (undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000)) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 && 0 < input.multipleOf)) && "integer" === input.type; const _io4 = input => (undefined === input.minimum || "number" === typeof input.minimum) && (undefined === input.maximum || "number" === typeof input.maximum) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && 0 < input.multipleOf) && "number" === input.type; const _io5 = input => (undefined === input.format || true === _iv4.has(input.format)) && (undefined === input.pattern || "string" === typeof input.pattern) && (undefined === input.contentMediaType || "string" === typeof input.contentMediaType) && (undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000)) && (undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000)) && "string" === input.type; const _io6 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _io7 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _iu0 = input => (() => {
813
841
  if ("number" === input.type)
814
842
  return _io4(input);
815
843
  else if ("integer" === input.type)
@@ -822,12 +850,12 @@ const collection = {
822
850
  path: _path + ".operations",
823
851
  expected: "Array<IAutoBeInterfaceOperationApplication.IOperation>",
824
852
  value: input.operations
825
- })) && input.operations.map((elem, _index4) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
826
- path: _path + ".operations[" + _index4 + "]",
853
+ })) && input.operations.map((elem, _index5) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
854
+ path: _path + ".operations[" + _index5 + "]",
827
855
  expected: "IAutoBeInterfaceOperationApplication.IOperation",
828
856
  value: elem
829
- })) && _vo1(elem, _path + ".operations[" + _index4 + "]", true && _exceptionable) || _report(_exceptionable, {
830
- path: _path + ".operations[" + _index4 + "]",
857
+ })) && _vo1(elem, _path + ".operations[" + _index5 + "]", true && _exceptionable) || _report(_exceptionable, {
858
+ path: _path + ".operations[" + _index5 + "]",
831
859
  expected: "IAutoBeInterfaceOperationApplication.IOperation",
832
860
  value: elem
833
861
  })).every(flag => flag) || _report(_exceptionable, {
@@ -850,12 +878,12 @@ const collection = {
850
878
  path: _path + ".parameters",
851
879
  expected: "Array<AutoBeOpenApi.IParameter>",
852
880
  value: input.parameters
853
- })) && input.parameters.map((elem, _index5) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
854
- path: _path + ".parameters[" + _index5 + "]",
881
+ })) && input.parameters.map((elem, _index6) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
882
+ path: _path + ".parameters[" + _index6 + "]",
855
883
  expected: "AutoBeOpenApi.IParameter",
856
884
  value: elem
857
- })) && _vo2(elem, _path + ".parameters[" + _index5 + "]", true && _exceptionable) || _report(_exceptionable, {
858
- path: _path + ".parameters[" + _index5 + "]",
885
+ })) && _vo2(elem, _path + ".parameters[" + _index6 + "]", true && _exceptionable) || _report(_exceptionable, {
886
+ path: _path + ".parameters[" + _index6 + "]",
859
887
  expected: "AutoBeOpenApi.IParameter",
860
888
  value: elem
861
889
  })).every(flag => flag) || _report(_exceptionable, {
@@ -890,16 +918,16 @@ const collection = {
890
918
  path: _path + ".authorizationActors",
891
919
  expected: "Array<string & CamelCasePattern & MinLength<1>>",
892
920
  value: input.authorizationActors
893
- })) && input.authorizationActors.map((elem, _index6) => "string" === typeof elem && (RegExp("^[a-z][a-zA-Z0-9]*$").test(elem) || _report(_exceptionable, {
894
- path: _path + ".authorizationActors[" + _index6 + "]",
921
+ })) && input.authorizationActors.map((elem, _index7) => "string" === typeof elem && (RegExp("^[a-z][a-zA-Z0-9]*$").test(elem) || _report(_exceptionable, {
922
+ path: _path + ".authorizationActors[" + _index7 + "]",
895
923
  expected: "string & CamelCasePattern",
896
924
  value: elem
897
925
  })) && (1 <= elem.length || _report(_exceptionable, {
898
- path: _path + ".authorizationActors[" + _index6 + "]",
926
+ path: _path + ".authorizationActors[" + _index7 + "]",
899
927
  expected: "string & MinLength<1>",
900
928
  value: elem
901
929
  })) || _report(_exceptionable, {
902
- path: _path + ".authorizationActors[" + _index6 + "]",
930
+ path: _path + ".authorizationActors[" + _index7 + "]",
903
931
  expected: "(string & CamelCasePattern & MinLength<1>)",
904
932
  value: elem
905
933
  })).every(flag => flag) || _report(_exceptionable, {
@@ -1006,9 +1034,9 @@ const collection = {
1006
1034
  path: _path + ".type",
1007
1035
  expected: "\"number\"",
1008
1036
  value: input.type
1009
- })].every(flag => flag); const _vo5 = (input, _path, _exceptionable = true) => [undefined === input.format || "string" === typeof input.format || _report(_exceptionable, {
1037
+ })].every(flag => flag); const _vo5 = (input, _path, _exceptionable = true) => [undefined === input.format || true === _vv8.has(input.format) || _report(_exceptionable, {
1010
1038
  path: _path + ".format",
1011
- expected: "(string | undefined)",
1039
+ expected: "(\"date\" | \"date-time\" | \"duration\" | \"email\" | \"hostname\" | \"idn-email\" | \"idn-hostname\" | \"ipv4\" | \"ipv6\" | \"iri\" | \"iri-reference\" | \"json-pointer\" | \"password\" | \"regex\" | \"relative-json-pointer\" | \"time\" | \"uri\" | \"uri-reference\" | \"uri-template\" | \"url\" | \"uuid\" | undefined)",
1012
1040
  value: input.format
1013
1041
  }), undefined === input.pattern || "string" === typeof input.pattern || _report(_exceptionable, {
1014
1042
  path: _path + ".pattern",
@@ -1346,7 +1374,71 @@ const collection = {
1346
1374
  properties: {
1347
1375
  format: {
1348
1376
  description: "Format restriction.",
1349
- type: "string"
1377
+ oneOf: [
1378
+ {
1379
+ "const": "date-time"
1380
+ },
1381
+ {
1382
+ "const": "password"
1383
+ },
1384
+ {
1385
+ "const": "regex"
1386
+ },
1387
+ {
1388
+ "const": "uuid"
1389
+ },
1390
+ {
1391
+ "const": "email"
1392
+ },
1393
+ {
1394
+ "const": "hostname"
1395
+ },
1396
+ {
1397
+ "const": "idn-email"
1398
+ },
1399
+ {
1400
+ "const": "idn-hostname"
1401
+ },
1402
+ {
1403
+ "const": "iri"
1404
+ },
1405
+ {
1406
+ "const": "iri-reference"
1407
+ },
1408
+ {
1409
+ "const": "ipv4"
1410
+ },
1411
+ {
1412
+ "const": "ipv6"
1413
+ },
1414
+ {
1415
+ "const": "uri"
1416
+ },
1417
+ {
1418
+ "const": "uri-reference"
1419
+ },
1420
+ {
1421
+ "const": "uri-template"
1422
+ },
1423
+ {
1424
+ "const": "url"
1425
+ },
1426
+ {
1427
+ "const": "date"
1428
+ },
1429
+ {
1430
+ "const": "time"
1431
+ },
1432
+ {
1433
+ "const": "duration"
1434
+ },
1435
+ {
1436
+ "const": "json-pointer"
1437
+ },
1438
+ {
1439
+ "const": "relative-json-pointer"
1440
+ }
1441
+ ]
1350
1442
  },
1351
1443
  pattern: {
1352
1444
  description: "Pattern restriction.",
@@ -1414,7 +1506,7 @@ const collection = {
1414
1506
  }
1415
1507
  },
1416
1508
  description: "Generate detailed API operations from path/method combinations.\n\nThis function creates complete API operations following REST principles and\nquality standards. Each generated operation includes specification, path,\nmethod, detailed multi-paragraph description, concise summary, parameters,\nand appropriate request/response bodies.\n\nThe function processes as many operations as possible in a single call,\nwith progress tracking to ensure iterative completion of all required\nendpoints.",
1417
- validate: (() => { const _io0 = input => Array.isArray(input.operations) && input.operations.every(elem => "object" === typeof elem && null !== elem && _io1(elem)); const _io1 = input => "string" === typeof input.specification && "string" === typeof input.description && "string" === typeof input.summary && (Array.isArray(input.parameters) && input.parameters.every(elem => "object" === typeof elem && null !== elem && _io2(elem))) && (null === input.requestBody || "object" === typeof input.requestBody && null !== input.requestBody && _io6(input.requestBody)) && (null === input.responseBody || "object" === typeof input.responseBody && null !== input.responseBody && _io7(input.responseBody)) && ("string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name)) && (Array.isArray(input.authorizationActors) && input.authorizationActors.every(elem => "string" === typeof elem && (RegExp("^[a-z][a-zA-Z0-9]*$").test(elem) && 1 <= elem.length))) && ("string" === typeof input.path && RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path)) && ("get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method); const _io2 = input => "string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) && "string" === typeof input.description && ("object" === typeof input.schema && null !== input.schema && _iu0(input.schema)); const _io3 = input => (undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000)) && (undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000)) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 && 0 < input.multipleOf)) && "integer" === input.type; const _io4 = input => (undefined === input.minimum || "number" === typeof input.minimum) && (undefined === input.maximum || "number" === typeof input.maximum) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && 0 < input.multipleOf) && "number" === input.type; const _io5 = input => (undefined === input.format || "string" === typeof input.format) && (undefined === input.pattern || "string" === typeof input.pattern) && (undefined === input.contentMediaType || "string" === typeof input.contentMediaType) && (undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000)) && (undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000)) && "string" === input.type; const _io6 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _io7 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _iu0 = input => (() => {
1509
+ validate: (() => { const _iv4 = new Set(["date-time", "password", "regex", "uuid", "email", "hostname", "idn-email", "idn-hostname", "iri", "iri-reference", "ipv4", "ipv6", "uri", "uri-reference", "uri-template", "url", "date", "time", "duration", "json-pointer", "relative-json-pointer"]); const _vv8 = new Set(["date-time", "password", "regex", "uuid", "email", "hostname", "idn-email", "idn-hostname", "iri", "iri-reference", "ipv4", "ipv6", "uri", "uri-reference", "uri-template", "url", "date", "time", "duration", "json-pointer", "relative-json-pointer"]); const _io0 = input => Array.isArray(input.operations) && input.operations.every(elem => "object" === typeof elem && null !== elem && _io1(elem)); const _io1 = input => "string" === typeof input.specification && "string" === typeof input.description && "string" === typeof input.summary && (Array.isArray(input.parameters) && input.parameters.every(elem => "object" === typeof elem && null !== elem && _io2(elem))) && (null === input.requestBody || "object" === typeof input.requestBody && null !== input.requestBody && _io6(input.requestBody)) && (null === input.responseBody || "object" === typeof input.responseBody && null !== input.responseBody && _io7(input.responseBody)) && ("string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name)) && (Array.isArray(input.authorizationActors) && input.authorizationActors.every(elem => "string" === typeof elem && (RegExp("^[a-z][a-zA-Z0-9]*$").test(elem) && 1 <= elem.length))) && ("string" === typeof input.path && RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path)) && ("get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method); const _io2 = input => "string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) && "string" === typeof input.description && ("object" === typeof input.schema && null !== input.schema && _iu0(input.schema)); const _io3 = input => (undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000)) && (undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000)) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 && 0 < input.multipleOf)) && "integer" === input.type; const _io4 = input => (undefined === input.minimum || "number" === typeof input.minimum) && (undefined === input.maximum || "number" === typeof input.maximum) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && 0 < input.multipleOf) && "number" === input.type; const _io5 = input => (undefined === input.format || true === _iv4.has(input.format)) && (undefined === input.pattern || "string" === typeof input.pattern) && (undefined === input.contentMediaType || "string" === typeof input.contentMediaType) && (undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000)) && (undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000)) && "string" === input.type; const _io6 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _io7 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _iu0 = input => (() => {
1418
1510
  if ("number" === input.type)
1419
1511
  return _io4(input);
1420
1512
  else if ("integer" === input.type)
@@ -1427,12 +1519,12 @@ const collection = {
1427
1519
  path: _path + ".operations",
1428
1520
  expected: "Array<IAutoBeInterfaceOperationApplication.IOperation>",
1429
1521
  value: input.operations
1430
- })) && input.operations.map((elem, _index4) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
1431
- path: _path + ".operations[" + _index4 + "]",
1522
+ })) && input.operations.map((elem, _index5) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
1523
+ path: _path + ".operations[" + _index5 + "]",
1432
1524
  expected: "IAutoBeInterfaceOperationApplication.IOperation",
1433
1525
  value: elem
1434
- })) && _vo1(elem, _path + ".operations[" + _index4 + "]", true && _exceptionable) || _report(_exceptionable, {
1435
- path: _path + ".operations[" + _index4 + "]",
1526
+ })) && _vo1(elem, _path + ".operations[" + _index5 + "]", true && _exceptionable) || _report(_exceptionable, {
1527
+ path: _path + ".operations[" + _index5 + "]",
1436
1528
  expected: "IAutoBeInterfaceOperationApplication.IOperation",
1437
1529
  value: elem
1438
1530
  })).every(flag => flag) || _report(_exceptionable, {
@@ -1455,12 +1547,12 @@ const collection = {
1455
1547
  path: _path + ".parameters",
1456
1548
  expected: "Array<AutoBeOpenApi.IParameter>",
1457
1549
  value: input.parameters
1458
- })) && input.parameters.map((elem, _index5) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
1459
- path: _path + ".parameters[" + _index5 + "]",
1550
+ })) && input.parameters.map((elem, _index6) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
1551
+ path: _path + ".parameters[" + _index6 + "]",
1460
1552
  expected: "AutoBeOpenApi.IParameter",
1461
1553
  value: elem
1462
- })) && _vo2(elem, _path + ".parameters[" + _index5 + "]", true && _exceptionable) || _report(_exceptionable, {
1463
- path: _path + ".parameters[" + _index5 + "]",
1554
+ })) && _vo2(elem, _path + ".parameters[" + _index6 + "]", true && _exceptionable) || _report(_exceptionable, {
1555
+ path: _path + ".parameters[" + _index6 + "]",
1464
1556
  expected: "AutoBeOpenApi.IParameter",
1465
1557
  value: elem
1466
1558
  })).every(flag => flag) || _report(_exceptionable, {
@@ -1495,16 +1587,16 @@ const collection = {
1495
1587
  path: _path + ".authorizationActors",
1496
1588
  expected: "Array<string & CamelCasePattern & MinLength<1>>",
1497
1589
  value: input.authorizationActors
1498
- })) && input.authorizationActors.map((elem, _index6) => "string" === typeof elem && (RegExp("^[a-z][a-zA-Z0-9]*$").test(elem) || _report(_exceptionable, {
1499
- path: _path + ".authorizationActors[" + _index6 + "]",
1590
+ })) && input.authorizationActors.map((elem, _index7) => "string" === typeof elem && (RegExp("^[a-z][a-zA-Z0-9]*$").test(elem) || _report(_exceptionable, {
1591
+ path: _path + ".authorizationActors[" + _index7 + "]",
1500
1592
  expected: "string & CamelCasePattern",
1501
1593
  value: elem
1502
1594
  })) && (1 <= elem.length || _report(_exceptionable, {
1503
- path: _path + ".authorizationActors[" + _index6 + "]",
1595
+ path: _path + ".authorizationActors[" + _index7 + "]",
1504
1596
  expected: "string & MinLength<1>",
1505
1597
  value: elem
1506
1598
  })) || _report(_exceptionable, {
1507
- path: _path + ".authorizationActors[" + _index6 + "]",
1599
+ path: _path + ".authorizationActors[" + _index7 + "]",
1508
1600
  expected: "(string & CamelCasePattern & MinLength<1>)",
1509
1601
  value: elem
1510
1602
  })).every(flag => flag) || _report(_exceptionable, {
@@ -1611,9 +1703,629 @@ const collection = {
1611
1703
  path: _path + ".type",
1612
1704
  expected: "\"number\"",
1613
1705
  value: input.type
1614
- })].every(flag => flag); const _vo5 = (input, _path, _exceptionable = true) => [undefined === input.format || "string" === typeof input.format || _report(_exceptionable, {
1706
+ })].every(flag => flag); const _vo5 = (input, _path, _exceptionable = true) => [undefined === input.format || true === _vv8.has(input.format) || _report(_exceptionable, {
1615
1707
  path: _path + ".format",
1708
+ expected: "(\"date\" | \"date-time\" | \"duration\" | \"email\" | \"hostname\" | \"idn-email\" | \"idn-hostname\" | \"ipv4\" | \"ipv6\" | \"iri\" | \"iri-reference\" | \"json-pointer\" | \"password\" | \"regex\" | \"relative-json-pointer\" | \"time\" | \"uri\" | \"uri-reference\" | \"uri-template\" | \"url\" | \"uuid\" | undefined)",
1709
+ value: input.format
1710
+ }), undefined === input.pattern || "string" === typeof input.pattern || _report(_exceptionable, {
1711
+ path: _path + ".pattern",
1712
+ expected: "(string | undefined)",
1713
+ value: input.pattern
1714
+ }), undefined === input.contentMediaType || "string" === typeof input.contentMediaType || _report(_exceptionable, {
1715
+ path: _path + ".contentMediaType",
1616
1716
  expected: "(string | undefined)",
1717
+ value: input.contentMediaType
1718
+ }), undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000 || _report(_exceptionable, {
1719
+ path: _path + ".minLength",
1720
+ expected: "number & Type<\"uint64\">",
1721
+ value: input.minLength
1722
+ })) || _report(_exceptionable, {
1723
+ path: _path + ".minLength",
1724
+ expected: "((number & Type<\"uint64\">) | undefined)",
1725
+ value: input.minLength
1726
+ }), undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000 || _report(_exceptionable, {
1727
+ path: _path + ".maxLength",
1728
+ expected: "number & Type<\"uint64\">",
1729
+ value: input.maxLength
1730
+ })) || _report(_exceptionable, {
1731
+ path: _path + ".maxLength",
1732
+ expected: "((number & Type<\"uint64\">) | undefined)",
1733
+ value: input.maxLength
1734
+ }), "string" === input.type || _report(_exceptionable, {
1735
+ path: _path + ".type",
1736
+ expected: "\"string\"",
1737
+ value: input.type
1738
+ })].every(flag => flag); const _vo6 = (input, _path, _exceptionable = true) => ["string" === typeof input.description || _report(_exceptionable, {
1739
+ path: _path + ".description",
1740
+ expected: "string",
1741
+ value: input.description
1742
+ }), "string" === typeof input.typeName || _report(_exceptionable, {
1743
+ path: _path + ".typeName",
1744
+ expected: "string",
1745
+ value: input.typeName
1746
+ })].every(flag => flag); const _vo7 = (input, _path, _exceptionable = true) => ["string" === typeof input.description || _report(_exceptionable, {
1747
+ path: _path + ".description",
1748
+ expected: "string",
1749
+ value: input.description
1750
+ }), "string" === typeof input.typeName || _report(_exceptionable, {
1751
+ path: _path + ".typeName",
1752
+ expected: "string",
1753
+ value: input.typeName
1754
+ })].every(flag => flag); const _vu0 = (input, _path, _exceptionable = true) => (() => {
1755
+ if ("number" === input.type)
1756
+ return _vo4(input, _path, true && _exceptionable);
1757
+ else if ("integer" === input.type)
1758
+ return _vo3(input, _path, true && _exceptionable);
1759
+ else if ("string" === input.type)
1760
+ return _vo5(input, _path, true && _exceptionable);
1761
+ else
1762
+ return _report(_exceptionable, {
1763
+ path: _path,
1764
+ expected: "(AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.IString)",
1765
+ value: input
1766
+ });
1767
+ })(); const __is = input => "object" === typeof input && null !== input && _io0(input); let errors; let _report; return input => {
1768
+ if (false === __is(input)) {
1769
+ errors = [];
1770
+ _report = __typia_transform__validateReport._validateReport(errors);
1771
+ ((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
1772
+ path: _path + "",
1773
+ expected: "IAutoBeInterfaceOperationApplication.IProps",
1774
+ value: input
1775
+ })) && _vo0(input, _path + "", true) || _report(true, {
1776
+ path: _path + "",
1777
+ expected: "IAutoBeInterfaceOperationApplication.IProps",
1778
+ value: input
1779
+ }))(input, "$input", true);
1780
+ const success = 0 === errors.length;
1781
+ return success ? {
1782
+ success,
1783
+ data: input
1784
+ } : {
1785
+ success,
1786
+ errors,
1787
+ data: input
1788
+ };
1789
+ }
1790
+ return {
1791
+ success: true,
1792
+ data: input
1793
+ };
1794
+ }; })()
1795
+ }
1796
+ ]
1797
+ };
1798
+ __typia_transform__llmApplicationFinalize._llmApplicationFinalize(application, Object.assign(Object.assign({}, {
1799
+ validate: {
1800
+ makeOperations: validate,
1801
+ },
1802
+ }), { equals: false }));
1803
+ return application;
1804
+ })(),
1805
+ gemini: (validate) => (() => {
1806
+ const application = {
1807
+ model: "gemini",
1808
+ options: {
1809
+ reference: true,
1810
+ separate: null
1811
+ },
1812
+ functions: [
1813
+ {
1814
+ name: "makeOperations",
1815
+ parameters: {
1816
+ description: " Properties containing the operations to generate.\n\n------------------------------\n\nCurrent Type: {@link IAutoBeInterfaceOperationApplication.IProps}",
1817
+ type: "object",
1818
+ properties: {
1819
+ operations: {
1820
+ description: "Array of API operations to generate.\n\nEach operation in this array includes:\n\n- Specification: Detailed API specification with clear purpose and\n functionality\n- Path: Resource-centric URL path (e.g., \"/resources/{resourceId}\")\n- Method: HTTP method (get, post, put, delete, patch)\n- Description: Extremely detailed multi-paragraph description referencing\n Prisma schema comments\n- Summary: Concise one-sentence summary of the endpoint\n- Parameters: Array of all necessary parameters with descriptions and\n schema definitions\n- RequestBody: For POST/PUT/PATCH methods, with typeName referencing\n components.schemas\n- ResponseBody: With typeName referencing appropriate response type\n\nAll operations follow strict quality standards:\n\n1. Detailed descriptions referencing Prisma schema comments\n2. Accurate parameter definitions matching path parameters\n3. Appropriate request/response body type references\n4. Consistent patterns for CRUD operations\n\nFor list retrievals (typically PATCH), include pagination, search, and\nsorting. For detail retrieval (GET), return a single resource. For\ncreation (POST), use .ICreate request body. For modification (PUT), use\n.IUpdate request body.",
1821
+ type: "array",
1822
+ items: {
1823
+ $ref: "#/$defs/IAutoBeInterfaceOperationApplication.IOperation"
1824
+ }
1825
+ }
1826
+ },
1827
+ required: [
1828
+ "operations"
1829
+ ],
1830
+ additionalProperties: false,
1831
+ $defs: {
1832
+ "IAutoBeInterfaceOperationApplication.IOperation": {
1833
+ description: "Operation of the Restful API.\n\nThis interface defines a single API endpoint with its HTTP {@link method},\n{@link path}, {@link parameters path parameters},\n{@link requestBody request body}, and {@link responseBody} structure. It\ncorresponds to an individual operation in the paths section of an OpenAPI\ndocument.\n\nEach operation requires a detailed explanation of its purpose through the\nreason and description fields, making it clear why the API was designed and\nhow it should be used.\n\nDO: Use object types for all request bodies and responses. DO: Reference\nnamed types defined in the components section. DO: Use `application/json`\nas the content-type. DO: Use `string & tags.Format<\"uri\">` in the schema\nfor file upload/download operations instead of binary data formats.\n\nIn OpenAPI, this might represent:\n\n```json\n{\n \"/shoppings/customers/orders\": {\n \"post\": {\n \"description\": \"Create a new order application from shopping cart...\",\n \"parameters\": [...],\n \"requestBody\": {...},\n \"responses\": {...}\n }\n }\n}\n```",
1834
+ type: "object",
1835
+ properties: {
1836
+ specification: {
1837
+ description: "Specification of the API operation.\n\nBefore defining the API operation interface, please describe what you're\nplanning to write in this `specification` field.\n\nThe specification must be fully detailed and clear, so that anyone can\nunderstand the purpose and functionality of the API operation and its\nrelated components (e.g., {@link path}, {@link parameters},\n{@link requestBody}).\n\nIMPORTANT: The specification MUST identify which Prisma DB table this\noperation is associated with, helping ensure complete coverage of all\ndatabase entities.",
1838
+ type: "string"
1839
+ },
1840
+ description: {
1841
+ description: "Detailed description about the API operation.\n\nIMPORTANT: This field MUST be extensively detailed and MUST reference the\ndescription comments from the related Prisma DB schema tables and\ncolumns. The description should be organized into MULTIPLE PARAGRAPHS\nseparated by line breaks to improve readability and comprehension.\n\nFor example, include separate paragraphs for:\n\n- The purpose and overview of the API operation\n- Security considerations and user permissions\n- Relationship to underlying database entities\n- Validation rules and business logic\n- Related API operations that might be used together with this one\n- Expected behavior and error handling\n\nWhen writing the description, be sure to incorporate the corresponding DB\nschema's description comments, matching the level of detail and style of\nthose comments. This ensures consistency between the API documentation\nand database structure.\n\nIf there's a dependency to other APIs, please describe the dependency API\noperation in this field with detailed reason. For example, if this API\noperation needs a pre-execution of other API operation, it must be\nexplicitly described.\n\n- `GET /shoppings/customers/sales` must be pre-executed to get entire list\n of summarized sales. Detailed sale information would be obtained by\n specifying the sale ID in the path parameter.\n\n**CRITICAL WARNING about soft delete keywords**: DO NOT use terms like\n\"soft delete\", \"soft-delete\", or similar variations in this description\nUNLESS the operation actually implements soft deletion. These keywords\ntrigger validation logic that expects a corresponding soft_delete_column\nto be specified. Only use these terms when you intend to implement soft\ndeletion (marking records as deleted without removing them from the\ndatabase).\n\nExample of problematic description: \u274C \"This would normally be a\nsoft-delete, but we intentionally perform permanent deletion here\" - This\ntriggers soft delete validation despite being a hard delete operation.\n\n> MUST be written in English. Never use other languages.",
1842
+ type: "string"
1843
+ },
1844
+ summary: {
1845
+ description: "Short summary of the API operation.\n\nThis should be a concise description of the API operation, typically one\nsentence long. It should provide a quick overview of what the API does\nwithout going into too much detail.\n\nThis summary will be used in the OpenAPI documentation to give users a\nquick understanding of the API operation's purpose.\n\nIMPORTANT: The summary should clearly indicate which Prisma DB table this\noperation relates to, helping to ensure all tables have API coverage.\n\n**CRITICAL WARNING about soft delete keywords**: DO NOT use terms like\n\"soft delete\", \"soft-delete\", or similar variations in this summary\nUNLESS the operation actually implements soft deletion. These keywords\ntrigger validation logic that expects a corresponding soft_delete_column\nto be specified. Only use these terms when you intend to implement soft\ndeletion (marking records as deleted without removing them from the\ndatabase).\n\n> MUST be written in English. Never use other languages",
1846
+ type: "string"
1847
+ },
1848
+ parameters: {
1849
+ description: "List of path parameters.\n\nNote that, the {@link AutoBeOpenApi.IParameter.name identifier name} of\npath parameter must be corresponded to the\n{@link path API operation path}.\n\nFor example, if there's an API operation which has {@link path} of\n`/shoppings/customers/sales/{saleId}/questions/${questionId}/comments/${commentId}`,\nits list of {@link AutoBeOpenApi.IParameter.name path parameters} must be\nlike:\n\n- `saleId`\n- `questionId`\n- `commentId`",
1850
+ type: "array",
1851
+ items: {
1852
+ $ref: "#/$defs/AutoBeOpenApi.IParameter"
1853
+ }
1854
+ },
1855
+ requestBody: {
1856
+ description: "Request body of the API operation.\n\nDefines the payload structure for the request. Contains a description and\nschema reference to define the expected input data.\n\nShould be `null` for operations that don't require a request body, such\nas most \"get\" operations.",
1857
+ anyOf: [
1858
+ {
1859
+ type: "null"
1860
+ },
1861
+ {
1862
+ $ref: "#/$defs/AutoBeOpenApi.IRequestBody"
1863
+ }
1864
+ ]
1865
+ },
1866
+ responseBody: {
1867
+ description: "Response body of the API operation.\n\nDefines the structure of the successful response data. Contains a\ndescription and schema reference for the returned data.\n\nShould be null for operations that don't return any data.",
1868
+ anyOf: [
1869
+ {
1870
+ type: "null"
1871
+ },
1872
+ {
1873
+ $ref: "#/$defs/AutoBeOpenApi.IResponseBody"
1874
+ }
1875
+ ]
1876
+ },
1877
+ name: {
1878
+ description: "Functional name of the API endpoint.\n\nThis is a semantic identifier that represents the primary function or\npurpose of the API endpoint. It serves as a canonical name that can be\nused for code generation, SDK method names, and internal references.\n\n## Reserved Word Restrictions\n\nCRITICAL: The name MUST NOT be a TypeScript/JavaScript reserved word, as\nit will be used as a class method name in generated code. Avoid names\nlike:\n\n- `delete`, `for`, `if`, `else`, `while`, `do`, `switch`, `case`, `break`\n- `continue`, `function`, `return`, `with`, `in`, `of`, `instanceof`\n- `typeof`, `void`, `var`, `let`, `const`, `class`, `extends`, `import`\n- `export`, `default`, `try`, `catch`, `finally`, `throw`, `new`\n- `super`, `this`, `null`, `true`, `false`, `async`, `await`\n- `yield`, `static`, `private`, `protected`, `public`, `implements`\n- `interface`, `package`, `enum`, `debugger`\n\nInstead, use alternative names for these operations:\n\n- Use `erase` instead of `delete`\n- Use `iterate` instead of `for`\n- Use `when` instead of `if`\n- Use `cls` instead of `class`\n\n## Standard Endpoint Names\n\nUse these conventional names based on the endpoint's primary function:\n\n- **`index`**: List/search operations that return multiple entities\n\n - Typically used with PATCH method for complex queries\n - Example: `PATCH /users` \u2192 `name: \"index\"`\n- **`at`**: Retrieve a specific entity by identifier\n\n - Typically used with GET method on single resource\n - Example: `GET /users/{userId}` \u2192 `name: \"at\"`\n- **`create`**: Create a new entity\n\n - Typically used with POST method\n - Example: `POST /users` \u2192 `name: \"create\"`\n- **`update`**: Update an existing entity\n\n - Typically used with PUT method\n - Example: `PUT /users/{userId}` \u2192 `name: \"update\"`\n- **`erase`**: Delete/remove an entity (NOT `delete` - reserved word!)\n\n - Typically used with DELETE method\n - Example: `DELETE /users/{userId}` \u2192 `name: \"erase\"`\n\n## Custom Endpoint Names\n\nFor specialized operations beyond basic CRUD, use descriptive verbs:\n\n- **`activate`**: Enable or turn on a feature/entity\n- **`deactivate`**: Disable or turn off a feature/entity\n- **`approve`**: Approve a request or entity\n- **`reject`**: Reject a request or entity\n- **`publish`**: Make content publicly available\n- **`archive`**: Move to archived state\n- **`restore`**: Restore from archived/deleted state\n- **`duplicate`**: Create a copy of an entity\n- **`transfer`**: Move ownership or change assignment\n- **`validate`**: Validate data or state\n- **`process`**: Execute a business process or workflow\n- **`export`**: Generate downloadable data\n- **`import`**: Process uploaded data\n\n## Naming Guidelines\n\n- MUST use camelCase naming convention\n- Use singular verb forms\n- Be concise but descriptive\n- Avoid abbreviations unless widely understood\n- Ensure the name clearly represents the endpoint's primary action\n- For nested resources, focus on the action rather than hierarchy\n- NEVER use JavaScript/TypeScript reserved words\n\nValid Examples:\n\n- `index`, `create`, `update`, `erase` (single word)\n- `updatePassword`, `cancelOrder`, `publishArticle` (camelCase)\n- `validateEmail`, `generateReport`, `exportData` (camelCase)\n\nInvalid Examples:\n\n- `update_password` (snake_case not allowed)\n- `UpdatePassword` (PascalCase not allowed)\n- `update-password` (kebab-case not allowed)\n\nPath to Name Examples:\n\n- `GET /shopping/orders/{orderId}/items` \u2192 `name: \"index\"` (lists items)\n- `POST /shopping/orders/{orderId}/cancel` \u2192 `name: \"cancel\"`\n- `PUT /users/{userId}/password` \u2192 `name: \"updatePassword\"`\n\n## Uniqueness Rule\n\nThe `name` must be unique within the API's accessor namespace. The\naccessor is formed by combining the path segments (excluding parameters)\nwith the operation name.\n\nAccessor formation:\n\n1. Extract non-parameter segments from the path (remove `{...}` parts)\n2. Join segments with dots\n3. Append the operation name\n\nExamples:\n\n- Path: `/shopping/sale/{saleId}/review/{reviewId}`, Name: `at` \u2192 Accessor:\n `shopping.sale.review.at`\n- Path: `/users/{userId}/posts`, Name: `index` \u2192 Accessor:\n `users.posts.index`\n- Path: `/auth/login`, Name: `signIn` \u2192 Accessor: `auth.login.signIn`\n\nEach accessor must be globally unique across the entire API. This ensures\noperations can be uniquely identified in generated SDKs and prevents\nnaming conflicts.\n\n\n@pattern ^[a-z][a-zA-Z0-9]*$",
1879
+ type: "string"
1880
+ },
1881
+ authorizationActors: {
1882
+ description: "Authorization actors required to access this API operation.\n\nThis field specifies which user actors are allowed to access this\nendpoint. Multiple actors can be specified to allow different types of\nusers to access the same endpoint.\n\n## \u26A0\uFE0F CRITICAL: Actor Multiplication Effect\n\n**EACH ACTOR IN THIS ARRAY GENERATES A SEPARATE ENDPOINT**\n\n- If you specify `[\"admin\", \"moderator\", \"member\"]`, this creates 3\n separate endpoints\n- Total generated endpoints = operations \u00D7 average actors.length\n- Example: 100 operations with 3 actors each = 300 actual endpoints\n\n## \uD83D\uDD34 AVOID OVER-GENERATION\n\n**DO NOT create actor-specific endpoints when a public endpoint would\nsuffice:**\n\n- \u274C BAD: Separate GET endpoints for admin, member, moderator to view the\n same public data\n- \u2705 GOOD: Single public endpoint `[]` with actor-based filtering in business\n logic\n\n**DO NOT enumerate all possible actors when the Prisma schema uses a\nsingle User table:**\n\n- If Prisma has a User table with role/permission fields, you likely only\n need `[\"user\"]`\n- Avoid listing `[\"admin\", \"seller\", \"buyer\", \"moderator\", ...]`\n unnecessarily\n- The actual actor checking happens in business logic, not at the endpoint\n level\n\n## Naming Convention\n\nDO: Use camelCase for all actor names.\n\n## Important Guidelines\n\n- Set to empty array `[]` for public endpoints that require no\n authentication\n- Set to array with actor strings for actor-restricted endpoints\n- **MINIMIZE the number of actors per endpoint to prevent explosion**\n- Consider if the endpoint can be public with actor-based filtering instead\n- The actor names match exactly with the user type/actor defined in the\n database\n- This will be used by the Realize Agent to generate appropriate decorator\n and authorization logic in the provider functions\n- The controller will apply the corresponding authentication decorator\n based on these actors\n\n## Examples\n\n- `[]` - Public endpoint, no authentication required (PREFERRED for read\n operations)\n- `[\"user\"]` - Any authenticated user can access (PREFERRED for\n user-specific operations)\n- `[\"admin\"]` - Only admin users can access (USE SPARINGLY)\n- `[\"admin\", \"moderator\"]` - Both admin and moderator users can access\n (AVOID if possible)\n- `[\"seller\"]` - Only seller users can access (ONLY if Seller is a separate\n table)\n\n## Best Practices\n\n1. **Start with public `[]` for all read operations** unless sensitive data\n is involved\n2. **Use single actor `[\"user\"]` for authenticated operations** and handle\n permissions in business logic\n3. **Only use multiple actors when absolutely necessary** for different\n business logic paths\n4. **Remember: Fewer actors = Fewer endpoints = Better performance and\n maintainability**\n\nNote: The actual authentication/authorization implementation will be\nhandled by decorators at the controller level, and the provider function\nwill receive the authenticated user object with the appropriate type.",
1883
+ type: "array",
1884
+ items: {
1885
+ description: "@minLength 1\n@pattern ^[a-z][a-zA-Z0-9]*$",
1886
+ type: "string"
1887
+ }
1888
+ },
1889
+ path: {
1890
+ description: "HTTP path of the API operation.\n\nThe URL path for accessing this API operation, using path parameters\nenclosed in curly braces (e.g., `/shoppings/customers/sales/{saleId}`).\n\nIt must be corresponded to the {@link parameters path parameters}.\n\nThe path structure should clearly indicate which database entity this\noperation is manipulating, helping to ensure all entities have\nappropriate API coverage.\n\nPath validation rules:\n\n- Must start with a forward slash (/)\n- Can contain only: letters (a-z, A-Z), numbers (0-9), forward slashes (/),\n curly braces for parameters ({paramName}), hyphens (-), and underscores\n (_)\n- Parameters must be enclosed in curly braces: {paramName}\n- Resource names should be in camelCase\n- No quotes, spaces, or invalid special characters allowed\n- No domain or role-based prefixes\n\nValid examples:\n\n- \"/users\"\n- \"/users/{userId}\"\n- \"/articles/{articleId}/comments\"\n- \"/attachmentFiles\"\n- \"/orders/{orderId}/items/{itemId}\"\n\nInvalid examples:\n\n- \"'/users'\" (contains quotes)\n- \"/user profile\" (contains space)\n- \"/users/[userId]\" (wrong bracket format)\n- \"/admin/users\" (role prefix)\n- \"/api/v1/users\" (API prefix)\n\n\n@pattern ^\\/[a-zA-Z0-9\\/_{}.-]*$",
1891
+ type: "string"
1892
+ },
1893
+ method: {
1894
+ description: "HTTP method of the API operation.\n\n**IMPORTANT**: Methods must be written in lowercase only (e.g., \"get\",\nnot \"GET\").\n\nNote that, if the API operation has {@link requestBody}, method must not\nbe `get`.\n\nAlso, even though the API operation has been designed to only get\ninformation, but it needs complicated request information, it must be\ndefined as `patch` method with {@link requestBody} data specification.\n\n- `get`: get information\n- `patch`: get information with complicated request data\n ({@link requestBody})\n- `post`: create new record\n- `put`: update existing record\n- `delete`: remove record",
1895
+ type: "string",
1896
+ "enum": [
1897
+ "get",
1898
+ "post",
1899
+ "put",
1900
+ "delete",
1901
+ "patch"
1902
+ ]
1903
+ }
1904
+ },
1905
+ required: [
1906
+ "specification",
1907
+ "description",
1908
+ "summary",
1909
+ "parameters",
1910
+ "requestBody",
1911
+ "responseBody",
1912
+ "name",
1913
+ "authorizationActors",
1914
+ "path",
1915
+ "method"
1916
+ ]
1917
+ },
1918
+ "AutoBeOpenApi.IParameter": {
1919
+ description: "Path parameter information for API routes.\n\nThis interface defines a path parameter that appears in the URL of an API\nendpoint. Path parameters are enclosed in curly braces in the\n{@link AutoBeOpenApi.IOperation.path operation path} and must be defined\nwith their types and descriptions.\n\nFor example, if API operation path is\n`/shoppings/customers/sales/{saleId}/questions/${questionId}/comments/${commentId}`,\nthe path parameters should be like below:\n\n```json\n{\n \"path\": \"/shoppings/customers/sales/{saleId}/questions/${questionId}/comments/${commentId}\",\n \"method\": \"get\",\n \"parameters\": [\n {\n \"name\": \"saleId\",\n \"in\": \"path\",\n \"schema\": { \"type\": \"string\", \"format\": \"uuid\" },\n \"description\": \"Target sale's ID\"\n },\n {\n \"name\": \"questionId\",\n \"in\": \"path\",\n \"schema\": { \"type\": \"string\", \"format\": \"uuid\" },\n \"description\": \"Target question's ID\"\n },\n {\n \"name\": \"commentId\",\n \"in\": \"path\",\n \"schema\": { \"type\": \"string\", \"format\": \"uuid\" },\n \"description\": \"Target comment's ID\"\n }\n ]\n}\n```",
1920
+ type: "object",
1921
+ properties: {
1922
+ name: {
1923
+ description: "Identifier name of the path parameter.\n\nThis name must match exactly with the parameter name in the route path.\nIt must be corresponded to the\n{@link AutoBeOpenApi.IOperation.path API operation path}.\n\nMUST use camelCase naming convention.\n\n\n@pattern ^[a-z][a-zA-Z0-9]*$",
1924
+ type: "string"
1925
+ },
1926
+ description: {
1927
+ description: "Description about the path parameter.\n\nMake short, concise and clear description about the path parameter.\n\n> MUST be written in English. Never use other languages.",
1928
+ type: "string"
1929
+ },
1930
+ schema: {
1931
+ description: "Type schema of the path parameter.\n\nPath parameters are typically primitive types like\n{@link AutoBeOpenApi.IJsonSchema.IString strings},\n{@link AutoBeOpenApi.IJsonSchema.IInteger integers},\n{@link AutoBeOpenApi.IJsonSchema.INumber numbers}.\n\nIf you need other types, please use request body instead with object type\nencapsulation.",
1932
+ anyOf: [
1933
+ {
1934
+ $ref: "#/$defs/AutoBeOpenApi.IJsonSchema.INumber"
1935
+ },
1936
+ {
1937
+ $ref: "#/$defs/AutoBeOpenApi.IJsonSchema.IInteger"
1938
+ },
1939
+ {
1940
+ $ref: "#/$defs/AutoBeOpenApi.IJsonSchema.IString"
1941
+ }
1942
+ ],
1943
+ "x-discriminator": {
1944
+ propertyName: "type",
1945
+ mapping: {
1946
+ number: "#/$defs/AutoBeOpenApi.IJsonSchema.INumber",
1947
+ integer: "#/$defs/AutoBeOpenApi.IJsonSchema.IInteger",
1948
+ string: "#/$defs/AutoBeOpenApi.IJsonSchema.IString"
1949
+ }
1950
+ }
1951
+ }
1952
+ },
1953
+ required: [
1954
+ "name",
1955
+ "description",
1956
+ "schema"
1957
+ ]
1958
+ },
1959
+ "AutoBeOpenApi.IJsonSchema.INumber": {
1960
+ description: "Number (double) type info.",
1961
+ type: "object",
1962
+ properties: {
1963
+ minimum: {
1964
+ description: "Minimum value restriction.",
1965
+ type: "number"
1966
+ },
1967
+ maximum: {
1968
+ description: "Maximum value restriction.",
1969
+ type: "number"
1970
+ },
1971
+ exclusiveMinimum: {
1972
+ description: "Exclusive minimum value restriction.",
1973
+ type: "number"
1974
+ },
1975
+ exclusiveMaximum: {
1976
+ description: "Exclusive maximum value restriction.",
1977
+ type: "number"
1978
+ },
1979
+ multipleOf: {
1980
+ description: "Multiple of value restriction.\n\n\n@exclusiveMinimum 0",
1981
+ type: "number"
1982
+ },
1983
+ type: {
1984
+ description: "Discriminator value of the type.\n\nCRITICAL: This MUST be a SINGLE string value, NOT an array. The type\nfield identifies the JSON Schema type and must be exactly one of:\n\"boolean\", \"integer\", \"number\", \"string\", \"array\", \"object\", or\n\"null\".\n\n\u274C INCORRECT: type: [\"string\", \"null\"] // This is WRONG! \u2705 CORRECT:\ntype: \"string\" // For nullable string, use oneOf instead\n\nIf you need to express a nullable type (e.g., string | null), you MUST\nuse the `IOneOf` structure:\n\n```typescript\n{\n \"oneOf\": [{ \"type\": \"string\" }, { \"type\": \"null\" }]\n}\n```\n\nNEVER use array notation in the type field. The type field is a\ndiscriminator that accepts only a single string value.",
1985
+ type: "string",
1986
+ "enum": [
1987
+ "number"
1988
+ ]
1989
+ }
1990
+ },
1991
+ required: [
1992
+ "type"
1993
+ ]
1994
+ },
1995
+ "AutoBeOpenApi.IJsonSchema.IInteger": {
1996
+ description: "Integer type info.",
1997
+ type: "object",
1998
+ properties: {
1999
+ minimum: {
2000
+ description: "Minimum value restriction.",
2001
+ type: "integer"
2002
+ },
2003
+ maximum: {
2004
+ description: "Maximum value restriction.",
2005
+ type: "integer"
2006
+ },
2007
+ exclusiveMinimum: {
2008
+ description: "Exclusive minimum value restriction.",
2009
+ type: "number"
2010
+ },
2011
+ exclusiveMaximum: {
2012
+ description: "Exclusive maximum value restriction.",
2013
+ type: "number"
2014
+ },
2015
+ multipleOf: {
2016
+ description: "Multiple of value restriction.\n\n\n@exclusiveMinimum 0",
2017
+ type: "integer"
2018
+ },
2019
+ type: {
2020
+ description: "Discriminator value of the type.\n\nCRITICAL: This MUST be a SINGLE string value, NOT an array. The type\nfield identifies the JSON Schema type and must be exactly one of:\n\"boolean\", \"integer\", \"number\", \"string\", \"array\", \"object\", or\n\"null\".\n\n\u274C INCORRECT: type: [\"string\", \"null\"] // This is WRONG! \u2705 CORRECT:\ntype: \"string\" // For nullable string, use oneOf instead\n\nIf you need to express a nullable type (e.g., string | null), you MUST\nuse the `IOneOf` structure:\n\n```typescript\n{\n \"oneOf\": [{ \"type\": \"string\" }, { \"type\": \"null\" }]\n}\n```\n\nNEVER use array notation in the type field. The type field is a\ndiscriminator that accepts only a single string value.",
2021
+ type: "string",
2022
+ "enum": [
2023
+ "integer"
2024
+ ]
2025
+ }
2026
+ },
2027
+ required: [
2028
+ "type"
2029
+ ]
2030
+ },
2031
+ "AutoBeOpenApi.IJsonSchema.IString": {
2032
+ description: "String type info.",
2033
+ type: "object",
2034
+ properties: {
2035
+ format: {
2036
+ description: "Format restriction.",
2037
+ type: "string",
2038
+ "enum": [
2039
+ "date-time",
2040
+ "password",
2041
+ "regex",
2042
+ "uuid",
2043
+ "email",
2044
+ "hostname",
2045
+ "idn-email",
2046
+ "idn-hostname",
2047
+ "iri",
2048
+ "iri-reference",
2049
+ "ipv4",
2050
+ "ipv6",
2051
+ "uri",
2052
+ "uri-reference",
2053
+ "uri-template",
2054
+ "url",
2055
+ "date",
2056
+ "time",
2057
+ "duration",
2058
+ "json-pointer",
2059
+ "relative-json-pointer"
2060
+ ]
2061
+ },
2062
+ pattern: {
2063
+ description: "Pattern restriction.",
2064
+ type: "string"
2065
+ },
2066
+ contentMediaType: {
2067
+ description: "Content media type restriction.",
2068
+ type: "string"
2069
+ },
2070
+ minLength: {
2071
+ description: "Minimum length restriction.\n\n\n@minimum 0",
2072
+ type: "integer"
2073
+ },
2074
+ maxLength: {
2075
+ description: "Maximum length restriction.\n\n\n@minimum 0",
2076
+ type: "integer"
2077
+ },
2078
+ type: {
2079
+ description: "Discriminator value of the type.\n\nCRITICAL: This MUST be a SINGLE string value, NOT an array. The type\nfield identifies the JSON Schema type and must be exactly one of:\n\"boolean\", \"integer\", \"number\", \"string\", \"array\", \"object\", or\n\"null\".\n\n\u274C INCORRECT: type: [\"string\", \"null\"] // This is WRONG! \u2705 CORRECT:\ntype: \"string\" // For nullable string, use oneOf instead\n\nIf you need to express a nullable type (e.g., string | null), you MUST\nuse the `IOneOf` structure:\n\n```typescript\n{\n \"oneOf\": [{ \"type\": \"string\" }, { \"type\": \"null\" }]\n}\n```\n\nNEVER use array notation in the type field. The type field is a\ndiscriminator that accepts only a single string value.",
2080
+ type: "string",
2081
+ "enum": [
2082
+ "string"
2083
+ ]
2084
+ }
2085
+ },
2086
+ required: [
2087
+ "type"
2088
+ ]
2089
+ },
2090
+ "AutoBeOpenApi.IRequestBody": {
2091
+ description: "Request body information of OpenAPI operation.\n\nThis interface defines the structure for request bodies in API routes. It\ncorresponds to the requestBody section in OpenAPI specifications, providing\nboth a description and schema reference for the request payload.\n\nThe content-type for all request bodies is always `application/json`. Even\nwhen file uploading is required, don't use `multipart/form-data` or\n`application/x-www-form-urlencoded` content types. Instead, just define an\nURI string property in the request body schema.\n\nNote that, all body schemas must be transformable to a\n{@link AutoBeOpenApi.IJsonSchema.IReference reference} type defined in the\n{@link AutoBeOpenApi.IComponents.schemas components section} as an\n{@link AutoBeOpenApi.IJsonSchema.IObject object} type.\n\nIn OpenAPI, this might represent:\n\n```json\n{\n \"requestBody\": {\n \"description\": \"Creation info of the order\",\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/IShoppingOrder.ICreate\"\n }\n }\n }\n }\n}\n```",
2092
+ type: "object",
2093
+ properties: {
2094
+ description: {
2095
+ description: "Description about the request body.\n\nMake short, concise and clear description about the request body.\n\n> MUST be written in English. Never use other languages.",
2096
+ type: "string"
2097
+ },
2098
+ typeName: {
2099
+ description: "Request body type name.\n\nThis specifies the data structure expected in the request body, that will\nbe transformed to {@link AutoBeOpenApi.IJsonSchema.IReference reference}\ntype in the {@link AutoBeOpenApi.IComponents.schemas components section}\nas an {@link AutoBeOpenApi.IJsonSchema.Object object} type.\n\nHere is the naming convention for the request body type:\n\n- `IEntityName.ICreate`: Request body for creation operations (POST)\n- `IEntityName.IUpdate`: Request body for update operations (PUT)\n- `IEntityName.IRequest`: Request parameters for list operations (often\n with search/pagination)\n\nWhat you write:\n\n```json\n{\n \"typeName\": \"IShoppingOrder.ICreate\"\n}\n```\n\nTransformed to:\n\n```json\n{\n \"schema\": {\n \"$ref\": \"#/components/schemas/IShoppingOrder.ICreate\"\n }\n}\n```",
2100
+ type: "string"
2101
+ }
2102
+ },
2103
+ required: [
2104
+ "description",
2105
+ "typeName"
2106
+ ]
2107
+ },
2108
+ "AutoBeOpenApi.IResponseBody": {
2109
+ description: "Response body information for OpenAPI operation.\n\nThis interface defines the structure of a successful response from an API\noperation. It provides a description of the response and a schema reference\nto define the returned data structure.\n\nThe content-type for all responses is always `application/json`. Even when\nfile downloading is required, don't use `application/octet-stream` or\n`multipart/form-data` content types. Instead, just define an URI string\nproperty in the response body schema.\n\nIn OpenAPI, this might represent:\n\n```json\n{\n \"responses\": {\n \"200\": {\n \"description\": \"Order information\",\n \"content\": {\n \"application/json\": {\n \"schema\": { \"$ref\": \"#/components/schemas/IShoppingOrder\" }\n }\n }\n }\n }\n}\n```",
2110
+ type: "object",
2111
+ properties: {
2112
+ description: {
2113
+ description: "Description about the response body.\n\nMake short, concise and clear description about the response body.\n\n> MUST be written in English. Never use other languages.",
2114
+ type: "string"
2115
+ },
2116
+ typeName: {
2117
+ description: "Response body's data type.\n\nSpecifies the structure of the returned data (response body), that will\nbe transformed to {@link AutoBeOpenApi.IJsonSchema.IReference} type in the\n{@link AutoBeOpenApi.IComponents.schemas components section} as an\n{@link AutoBeOpenApi.IJsonSchema.IObject object} type.\n\nHere is the naming convention for the response body type:\n\n- `IEntityName`: Main entity with detailed information (e.g.,\n `IShoppingSale`)\n- `IEntityName.ISummary`: Simplified response version with essential\n properties\n- `IEntityName.IInvert`: Alternative view of an entity from a different\n perspective\n- `IPageIEntityName`: Paginated results container with `pagination` and\n `data` properties\n\nWhat you write:\n\n```json\n{\n \"typeName\": \"IShoppingOrder\"\n}\n```\n\nTransformed to:\n\n```json\n{\n \"schema\": {\n \"$ref\": \"#/components/schemas/IShoppingOrder\"\n }\n}\n```",
2118
+ type: "string"
2119
+ }
2120
+ },
2121
+ required: [
2122
+ "description",
2123
+ "typeName"
2124
+ ]
2125
+ }
2126
+ }
2127
+ },
2128
+ description: "Generate detailed API operations from path/method combinations.\n\nThis function creates complete API operations following REST principles and\nquality standards. Each generated operation includes specification, path,\nmethod, detailed multi-paragraph description, concise summary, parameters,\nand appropriate request/response bodies.\n\nThe function processes as many operations as possible in a single call,\nwith progress tracking to ensure iterative completion of all required\nendpoints.",
2129
+ validate: (() => { const _iv4 = new Set(["date-time", "password", "regex", "uuid", "email", "hostname", "idn-email", "idn-hostname", "iri", "iri-reference", "ipv4", "ipv6", "uri", "uri-reference", "uri-template", "url", "date", "time", "duration", "json-pointer", "relative-json-pointer"]); const _vv8 = new Set(["date-time", "password", "regex", "uuid", "email", "hostname", "idn-email", "idn-hostname", "iri", "iri-reference", "ipv4", "ipv6", "uri", "uri-reference", "uri-template", "url", "date", "time", "duration", "json-pointer", "relative-json-pointer"]); const _io0 = input => Array.isArray(input.operations) && input.operations.every(elem => "object" === typeof elem && null !== elem && _io1(elem)); const _io1 = input => "string" === typeof input.specification && "string" === typeof input.description && "string" === typeof input.summary && (Array.isArray(input.parameters) && input.parameters.every(elem => "object" === typeof elem && null !== elem && _io2(elem))) && (null === input.requestBody || "object" === typeof input.requestBody && null !== input.requestBody && _io6(input.requestBody)) && (null === input.responseBody || "object" === typeof input.responseBody && null !== input.responseBody && _io7(input.responseBody)) && ("string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name)) && (Array.isArray(input.authorizationActors) && input.authorizationActors.every(elem => "string" === typeof elem && (RegExp("^[a-z][a-zA-Z0-9]*$").test(elem) && 1 <= elem.length))) && ("string" === typeof input.path && RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path)) && ("get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method); const _io2 = input => "string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) && "string" === typeof input.description && ("object" === typeof input.schema && null !== input.schema && _iu0(input.schema)); const _io3 = input => (undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000)) && (undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000)) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 && 0 < input.multipleOf)) && "integer" === input.type; const _io4 = input => (undefined === input.minimum || "number" === typeof input.minimum) && (undefined === input.maximum || "number" === typeof input.maximum) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && 0 < input.multipleOf) && "number" === input.type; const _io5 = input => (undefined === input.format || true === _iv4.has(input.format)) && (undefined === input.pattern || "string" === typeof input.pattern) && (undefined === input.contentMediaType || "string" === typeof input.contentMediaType) && (undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000)) && (undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000)) && "string" === input.type; const _io6 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _io7 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _iu0 = input => (() => {
2130
+ if ("number" === input.type)
2131
+ return _io4(input);
2132
+ else if ("integer" === input.type)
2133
+ return _io3(input);
2134
+ else if ("string" === input.type)
2135
+ return _io5(input);
2136
+ else
2137
+ return false;
2138
+ })(); const _vo0 = (input, _path, _exceptionable = true) => [(Array.isArray(input.operations) || _report(_exceptionable, {
2139
+ path: _path + ".operations",
2140
+ expected: "Array<IAutoBeInterfaceOperationApplication.IOperation>",
2141
+ value: input.operations
2142
+ })) && input.operations.map((elem, _index5) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
2143
+ path: _path + ".operations[" + _index5 + "]",
2144
+ expected: "IAutoBeInterfaceOperationApplication.IOperation",
2145
+ value: elem
2146
+ })) && _vo1(elem, _path + ".operations[" + _index5 + "]", true && _exceptionable) || _report(_exceptionable, {
2147
+ path: _path + ".operations[" + _index5 + "]",
2148
+ expected: "IAutoBeInterfaceOperationApplication.IOperation",
2149
+ value: elem
2150
+ })).every(flag => flag) || _report(_exceptionable, {
2151
+ path: _path + ".operations",
2152
+ expected: "Array<IAutoBeInterfaceOperationApplication.IOperation>",
2153
+ value: input.operations
2154
+ })].every(flag => flag); const _vo1 = (input, _path, _exceptionable = true) => ["string" === typeof input.specification || _report(_exceptionable, {
2155
+ path: _path + ".specification",
2156
+ expected: "string",
2157
+ value: input.specification
2158
+ }), "string" === typeof input.description || _report(_exceptionable, {
2159
+ path: _path + ".description",
2160
+ expected: "string",
2161
+ value: input.description
2162
+ }), "string" === typeof input.summary || _report(_exceptionable, {
2163
+ path: _path + ".summary",
2164
+ expected: "string",
2165
+ value: input.summary
2166
+ }), (Array.isArray(input.parameters) || _report(_exceptionable, {
2167
+ path: _path + ".parameters",
2168
+ expected: "Array<AutoBeOpenApi.IParameter>",
2169
+ value: input.parameters
2170
+ })) && input.parameters.map((elem, _index6) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
2171
+ path: _path + ".parameters[" + _index6 + "]",
2172
+ expected: "AutoBeOpenApi.IParameter",
2173
+ value: elem
2174
+ })) && _vo2(elem, _path + ".parameters[" + _index6 + "]", true && _exceptionable) || _report(_exceptionable, {
2175
+ path: _path + ".parameters[" + _index6 + "]",
2176
+ expected: "AutoBeOpenApi.IParameter",
2177
+ value: elem
2178
+ })).every(flag => flag) || _report(_exceptionable, {
2179
+ path: _path + ".parameters",
2180
+ expected: "Array<AutoBeOpenApi.IParameter>",
2181
+ value: input.parameters
2182
+ }), null === input.requestBody || ("object" === typeof input.requestBody && null !== input.requestBody || _report(_exceptionable, {
2183
+ path: _path + ".requestBody",
2184
+ expected: "(AutoBeOpenApi.IRequestBody | null)",
2185
+ value: input.requestBody
2186
+ })) && _vo6(input.requestBody, _path + ".requestBody", true && _exceptionable) || _report(_exceptionable, {
2187
+ path: _path + ".requestBody",
2188
+ expected: "(AutoBeOpenApi.IRequestBody | null)",
2189
+ value: input.requestBody
2190
+ }), null === input.responseBody || ("object" === typeof input.responseBody && null !== input.responseBody || _report(_exceptionable, {
2191
+ path: _path + ".responseBody",
2192
+ expected: "(AutoBeOpenApi.IResponseBody | null)",
2193
+ value: input.responseBody
2194
+ })) && _vo7(input.responseBody, _path + ".responseBody", true && _exceptionable) || _report(_exceptionable, {
2195
+ path: _path + ".responseBody",
2196
+ expected: "(AutoBeOpenApi.IResponseBody | null)",
2197
+ value: input.responseBody
2198
+ }), "string" === typeof input.name && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) || _report(_exceptionable, {
2199
+ path: _path + ".name",
2200
+ expected: "string & CamelCasePattern",
2201
+ value: input.name
2202
+ })) || _report(_exceptionable, {
2203
+ path: _path + ".name",
2204
+ expected: "(string & CamelCasePattern)",
2205
+ value: input.name
2206
+ }), (Array.isArray(input.authorizationActors) || _report(_exceptionable, {
2207
+ path: _path + ".authorizationActors",
2208
+ expected: "Array<string & CamelCasePattern & MinLength<1>>",
2209
+ value: input.authorizationActors
2210
+ })) && input.authorizationActors.map((elem, _index7) => "string" === typeof elem && (RegExp("^[a-z][a-zA-Z0-9]*$").test(elem) || _report(_exceptionable, {
2211
+ path: _path + ".authorizationActors[" + _index7 + "]",
2212
+ expected: "string & CamelCasePattern",
2213
+ value: elem
2214
+ })) && (1 <= elem.length || _report(_exceptionable, {
2215
+ path: _path + ".authorizationActors[" + _index7 + "]",
2216
+ expected: "string & MinLength<1>",
2217
+ value: elem
2218
+ })) || _report(_exceptionable, {
2219
+ path: _path + ".authorizationActors[" + _index7 + "]",
2220
+ expected: "(string & CamelCasePattern & MinLength<1>)",
2221
+ value: elem
2222
+ })).every(flag => flag) || _report(_exceptionable, {
2223
+ path: _path + ".authorizationActors",
2224
+ expected: "Array<string & CamelCasePattern & MinLength<1>>",
2225
+ value: input.authorizationActors
2226
+ }), "string" === typeof input.path && (RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path) || _report(_exceptionable, {
2227
+ path: _path + ".path",
2228
+ expected: "string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">",
2229
+ value: input.path
2230
+ })) || _report(_exceptionable, {
2231
+ path: _path + ".path",
2232
+ expected: "(string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">)",
2233
+ value: input.path
2234
+ }), "get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method || _report(_exceptionable, {
2235
+ path: _path + ".method",
2236
+ expected: "(\"delete\" | \"get\" | \"patch\" | \"post\" | \"put\")",
2237
+ value: input.method
2238
+ })].every(flag => flag); const _vo2 = (input, _path, _exceptionable = true) => ["string" === typeof input.name && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) || _report(_exceptionable, {
2239
+ path: _path + ".name",
2240
+ expected: "string & CamelCasePattern",
2241
+ value: input.name
2242
+ })) || _report(_exceptionable, {
2243
+ path: _path + ".name",
2244
+ expected: "(string & CamelCasePattern)",
2245
+ value: input.name
2246
+ }), "string" === typeof input.description || _report(_exceptionable, {
2247
+ path: _path + ".description",
2248
+ expected: "string",
2249
+ value: input.description
2250
+ }), ("object" === typeof input.schema && null !== input.schema || _report(_exceptionable, {
2251
+ path: _path + ".schema",
2252
+ expected: "(AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IString)",
2253
+ value: input.schema
2254
+ })) && _vu0(input.schema, _path + ".schema", true && _exceptionable) || _report(_exceptionable, {
2255
+ path: _path + ".schema",
2256
+ expected: "(AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IString)",
2257
+ value: input.schema
2258
+ })].every(flag => flag); const _vo3 = (input, _path, _exceptionable = true) => [undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000 || _report(_exceptionable, {
2259
+ path: _path + ".minimum",
2260
+ expected: "number & Type<\"int64\">",
2261
+ value: input.minimum
2262
+ })) || _report(_exceptionable, {
2263
+ path: _path + ".minimum",
2264
+ expected: "((number & Type<\"int64\">) | undefined)",
2265
+ value: input.minimum
2266
+ }), undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000 || _report(_exceptionable, {
2267
+ path: _path + ".maximum",
2268
+ expected: "number & Type<\"int64\">",
2269
+ value: input.maximum
2270
+ })) || _report(_exceptionable, {
2271
+ path: _path + ".maximum",
2272
+ expected: "((number & Type<\"int64\">) | undefined)",
2273
+ value: input.maximum
2274
+ }), undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum || _report(_exceptionable, {
2275
+ path: _path + ".exclusiveMinimum",
2276
+ expected: "(number | undefined)",
2277
+ value: input.exclusiveMinimum
2278
+ }), undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum || _report(_exceptionable, {
2279
+ path: _path + ".exclusiveMaximum",
2280
+ expected: "(number | undefined)",
2281
+ value: input.exclusiveMaximum
2282
+ }), undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 || _report(_exceptionable, {
2283
+ path: _path + ".multipleOf",
2284
+ expected: "number & Type<\"uint64\">",
2285
+ value: input.multipleOf
2286
+ })) && (0 < input.multipleOf || _report(_exceptionable, {
2287
+ path: _path + ".multipleOf",
2288
+ expected: "number & ExclusiveMinimum<0>",
2289
+ value: input.multipleOf
2290
+ })) || _report(_exceptionable, {
2291
+ path: _path + ".multipleOf",
2292
+ expected: "((number & Type<\"uint64\"> & ExclusiveMinimum<0>) | undefined)",
2293
+ value: input.multipleOf
2294
+ }), "integer" === input.type || _report(_exceptionable, {
2295
+ path: _path + ".type",
2296
+ expected: "\"integer\"",
2297
+ value: input.type
2298
+ })].every(flag => flag); const _vo4 = (input, _path, _exceptionable = true) => [undefined === input.minimum || "number" === typeof input.minimum || _report(_exceptionable, {
2299
+ path: _path + ".minimum",
2300
+ expected: "(number | undefined)",
2301
+ value: input.minimum
2302
+ }), undefined === input.maximum || "number" === typeof input.maximum || _report(_exceptionable, {
2303
+ path: _path + ".maximum",
2304
+ expected: "(number | undefined)",
2305
+ value: input.maximum
2306
+ }), undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum || _report(_exceptionable, {
2307
+ path: _path + ".exclusiveMinimum",
2308
+ expected: "(number | undefined)",
2309
+ value: input.exclusiveMinimum
2310
+ }), undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum || _report(_exceptionable, {
2311
+ path: _path + ".exclusiveMaximum",
2312
+ expected: "(number | undefined)",
2313
+ value: input.exclusiveMaximum
2314
+ }), undefined === input.multipleOf || "number" === typeof input.multipleOf && (0 < input.multipleOf || _report(_exceptionable, {
2315
+ path: _path + ".multipleOf",
2316
+ expected: "number & ExclusiveMinimum<0>",
2317
+ value: input.multipleOf
2318
+ })) || _report(_exceptionable, {
2319
+ path: _path + ".multipleOf",
2320
+ expected: "((number & ExclusiveMinimum<0>) | undefined)",
2321
+ value: input.multipleOf
2322
+ }), "number" === input.type || _report(_exceptionable, {
2323
+ path: _path + ".type",
2324
+ expected: "\"number\"",
2325
+ value: input.type
2326
+ })].every(flag => flag); const _vo5 = (input, _path, _exceptionable = true) => [undefined === input.format || true === _vv8.has(input.format) || _report(_exceptionable, {
2327
+ path: _path + ".format",
2328
+ expected: "(\"date\" | \"date-time\" | \"duration\" | \"email\" | \"hostname\" | \"idn-email\" | \"idn-hostname\" | \"ipv4\" | \"ipv6\" | \"iri\" | \"iri-reference\" | \"json-pointer\" | \"password\" | \"regex\" | \"relative-json-pointer\" | \"time\" | \"uri\" | \"uri-reference\" | \"uri-template\" | \"url\" | \"uuid\" | undefined)",
1617
2329
  value: input.format
1618
2330
  }), undefined === input.pattern || "string" === typeof input.pattern || _report(_exceptionable, {
1619
2331
  path: _path + ".pattern",