@rhino-dev/rhino-nestjs 0.2.5

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 (191) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +427 -0
  3. package/dist/blueprint/blueprint-parser.d.ts +130 -0
  4. package/dist/blueprint/blueprint-parser.js +276 -0
  5. package/dist/blueprint/blueprint-parser.js.map +1 -0
  6. package/dist/blueprint/blueprint-runner.d.ts +51 -0
  7. package/dist/blueprint/blueprint-runner.js +238 -0
  8. package/dist/blueprint/blueprint-runner.js.map +1 -0
  9. package/dist/blueprint/blueprint-validator.d.ts +19 -0
  10. package/dist/blueprint/blueprint-validator.js +163 -0
  11. package/dist/blueprint/blueprint-validator.js.map +1 -0
  12. package/dist/blueprint/generators/policy-generator.d.ts +40 -0
  13. package/dist/blueprint/generators/policy-generator.js +157 -0
  14. package/dist/blueprint/generators/policy-generator.js.map +1 -0
  15. package/dist/blueprint/generators/prisma-schema-generator.d.ts +43 -0
  16. package/dist/blueprint/generators/prisma-schema-generator.js +197 -0
  17. package/dist/blueprint/generators/prisma-schema-generator.js.map +1 -0
  18. package/dist/blueprint/generators/resource-definition-generator.d.ts +52 -0
  19. package/dist/blueprint/generators/resource-definition-generator.js +229 -0
  20. package/dist/blueprint/generators/resource-definition-generator.js.map +1 -0
  21. package/dist/blueprint/generators/seeder-generator.d.ts +21 -0
  22. package/dist/blueprint/generators/seeder-generator.js +135 -0
  23. package/dist/blueprint/generators/seeder-generator.js.map +1 -0
  24. package/dist/blueprint/generators/test-generator.d.ts +28 -0
  25. package/dist/blueprint/generators/test-generator.js +275 -0
  26. package/dist/blueprint/generators/test-generator.js.map +1 -0
  27. package/dist/blueprint/manifest-manager.d.ts +58 -0
  28. package/dist/blueprint/manifest-manager.js +137 -0
  29. package/dist/blueprint/manifest-manager.js.map +1 -0
  30. package/dist/cli/commands/blueprint.command.d.ts +16 -0
  31. package/dist/cli/commands/blueprint.command.js +35 -0
  32. package/dist/cli/commands/blueprint.command.js.map +1 -0
  33. package/dist/cli/commands/export-postman.command.d.ts +5 -0
  34. package/dist/cli/commands/export-postman.command.js +39 -0
  35. package/dist/cli/commands/export-postman.command.js.map +1 -0
  36. package/dist/cli/commands/export-types.command.d.ts +4 -0
  37. package/dist/cli/commands/export-types.command.js +36 -0
  38. package/dist/cli/commands/export-types.command.js.map +1 -0
  39. package/dist/cli/commands/generate.command.d.ts +6 -0
  40. package/dist/cli/commands/generate.command.js +212 -0
  41. package/dist/cli/commands/generate.command.js.map +1 -0
  42. package/dist/cli/commands/install.command.d.ts +8 -0
  43. package/dist/cli/commands/install.command.js +205 -0
  44. package/dist/cli/commands/install.command.js.map +1 -0
  45. package/dist/cli/index.d.ts +17 -0
  46. package/dist/cli/index.js +123 -0
  47. package/dist/cli/index.js.map +1 -0
  48. package/dist/cli/utils/io.d.ts +12 -0
  49. package/dist/cli/utils/io.js +74 -0
  50. package/dist/cli/utils/io.js.map +1 -0
  51. package/dist/cli/utils/prompt.d.ts +12 -0
  52. package/dist/cli/utils/prompt.js +78 -0
  53. package/dist/cli/utils/prompt.js.map +1 -0
  54. package/dist/constants/tokens.d.ts +3 -0
  55. package/dist/constants/tokens.js +7 -0
  56. package/dist/constants/tokens.js.map +1 -0
  57. package/dist/controllers/auth.controller.d.ts +59 -0
  58. package/dist/controllers/auth.controller.js +121 -0
  59. package/dist/controllers/auth.controller.js.map +1 -0
  60. package/dist/controllers/global.controller.d.ts +44 -0
  61. package/dist/controllers/global.controller.js +357 -0
  62. package/dist/controllers/global.controller.js.map +1 -0
  63. package/dist/controllers/invitation.controller.d.ts +30 -0
  64. package/dist/controllers/invitation.controller.js +111 -0
  65. package/dist/controllers/invitation.controller.js.map +1 -0
  66. package/dist/controllers/nested.controller.d.ts +12 -0
  67. package/dist/controllers/nested.controller.js +69 -0
  68. package/dist/controllers/nested.controller.js.map +1 -0
  69. package/dist/decorators/index.d.ts +33 -0
  70. package/dist/decorators/index.js +79 -0
  71. package/dist/decorators/index.js.map +1 -0
  72. package/dist/errors/rhino-exception.d.ts +24 -0
  73. package/dist/errors/rhino-exception.js +47 -0
  74. package/dist/errors/rhino-exception.js.map +1 -0
  75. package/dist/exporters/postman-exporter.d.ts +21 -0
  76. package/dist/exporters/postman-exporter.js +396 -0
  77. package/dist/exporters/postman-exporter.js.map +1 -0
  78. package/dist/exporters/typescript-exporter.d.ts +23 -0
  79. package/dist/exporters/typescript-exporter.js +129 -0
  80. package/dist/exporters/typescript-exporter.js.map +1 -0
  81. package/dist/guards/jwt-auth.guard.d.ts +16 -0
  82. package/dist/guards/jwt-auth.guard.js +61 -0
  83. package/dist/guards/jwt-auth.guard.js.map +1 -0
  84. package/dist/guards/resource-policy.guard.d.ts +12 -0
  85. package/dist/guards/resource-policy.guard.js +111 -0
  86. package/dist/guards/resource-policy.guard.js.map +1 -0
  87. package/dist/index.d.ts +60 -0
  88. package/dist/index.js +171 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/interceptors/hidden-columns.interceptor.d.ts +18 -0
  91. package/dist/interceptors/hidden-columns.interceptor.js +66 -0
  92. package/dist/interceptors/hidden-columns.interceptor.js.map +1 -0
  93. package/dist/interceptors/response.interceptor.d.ts +19 -0
  94. package/dist/interceptors/response.interceptor.js +47 -0
  95. package/dist/interceptors/response.interceptor.js.map +1 -0
  96. package/dist/interfaces/rhino-config.interface.d.ts +103 -0
  97. package/dist/interfaces/rhino-config.interface.js +3 -0
  98. package/dist/interfaces/rhino-config.interface.js.map +1 -0
  99. package/dist/interfaces/rhino-request.interface.d.ts +12 -0
  100. package/dist/interfaces/rhino-request.interface.js +3 -0
  101. package/dist/interfaces/rhino-request.interface.js.map +1 -0
  102. package/dist/middleware/resolve-organization.middleware.d.ts +15 -0
  103. package/dist/middleware/resolve-organization.middleware.js +38 -0
  104. package/dist/middleware/resolve-organization.middleware.js.map +1 -0
  105. package/dist/middleware/route-group.middleware.d.ts +17 -0
  106. package/dist/middleware/route-group.middleware.js +60 -0
  107. package/dist/middleware/route-group.middleware.js.map +1 -0
  108. package/dist/middleware/tenant-route-rewrite.d.ts +76 -0
  109. package/dist/middleware/tenant-route-rewrite.js +124 -0
  110. package/dist/middleware/tenant-route-rewrite.js.map +1 -0
  111. package/dist/policies/resource-policy.d.ts +25 -0
  112. package/dist/policies/resource-policy.js +77 -0
  113. package/dist/policies/resource-policy.js.map +1 -0
  114. package/dist/prisma/prisma-soft-delete.extension.d.ts +16 -0
  115. package/dist/prisma/prisma-soft-delete.extension.js +57 -0
  116. package/dist/prisma/prisma-soft-delete.extension.js.map +1 -0
  117. package/dist/prisma/prisma-uuid.extension.d.ts +9 -0
  118. package/dist/prisma/prisma-uuid.extension.js +28 -0
  119. package/dist/prisma/prisma-uuid.extension.js.map +1 -0
  120. package/dist/prisma/prisma.service.d.ts +38 -0
  121. package/dist/prisma/prisma.service.js +100 -0
  122. package/dist/prisma/prisma.service.js.map +1 -0
  123. package/dist/rhino.config.d.ts +43 -0
  124. package/dist/rhino.config.js +130 -0
  125. package/dist/rhino.config.js.map +1 -0
  126. package/dist/rhino.module.d.ts +61 -0
  127. package/dist/rhino.module.js +268 -0
  128. package/dist/rhino.module.js.map +1 -0
  129. package/dist/services/audit.service.d.ts +35 -0
  130. package/dist/services/audit.service.js +92 -0
  131. package/dist/services/audit.service.js.map +1 -0
  132. package/dist/services/auth.service.d.ts +33 -0
  133. package/dist/services/auth.service.js +157 -0
  134. package/dist/services/auth.service.js.map +1 -0
  135. package/dist/services/invitation.service.d.ts +37 -0
  136. package/dist/services/invitation.service.js +143 -0
  137. package/dist/services/invitation.service.js.map +1 -0
  138. package/dist/services/nested.service.d.ts +34 -0
  139. package/dist/services/nested.service.js +163 -0
  140. package/dist/services/nested.service.js.map +1 -0
  141. package/dist/services/organization.service.d.ts +13 -0
  142. package/dist/services/organization.service.js +60 -0
  143. package/dist/services/organization.service.js.map +1 -0
  144. package/dist/services/query-builder.service.d.ts +31 -0
  145. package/dist/services/query-builder.service.js +151 -0
  146. package/dist/services/query-builder.service.js.map +1 -0
  147. package/dist/services/resource.service.d.ts +38 -0
  148. package/dist/services/resource.service.js +230 -0
  149. package/dist/services/resource.service.js.map +1 -0
  150. package/dist/services/route-registration.service.d.ts +40 -0
  151. package/dist/services/route-registration.service.js +68 -0
  152. package/dist/services/route-registration.service.js.map +1 -0
  153. package/dist/services/scope.service.d.ts +16 -0
  154. package/dist/services/scope.service.js +32 -0
  155. package/dist/services/scope.service.js.map +1 -0
  156. package/dist/services/serializer.service.d.ts +36 -0
  157. package/dist/services/serializer.service.js +90 -0
  158. package/dist/services/serializer.service.js.map +1 -0
  159. package/dist/services/validation.service.d.ts +50 -0
  160. package/dist/services/validation.service.js +203 -0
  161. package/dist/services/validation.service.js.map +1 -0
  162. package/dist/tsconfig.build.tsbuildinfo +1 -0
  163. package/dist/utils/fk-chain-walker.d.ts +30 -0
  164. package/dist/utils/fk-chain-walker.js +23 -0
  165. package/dist/utils/fk-chain-walker.js.map +1 -0
  166. package/dist/utils/format.d.ts +7 -0
  167. package/dist/utils/format.js +28 -0
  168. package/dist/utils/format.js.map +1 -0
  169. package/dist/utils/model-builder.d.ts +64 -0
  170. package/dist/utils/model-builder.js +67 -0
  171. package/dist/utils/model-builder.js.map +1 -0
  172. package/dist/utils/permission-matcher.d.ts +46 -0
  173. package/dist/utils/permission-matcher.js +120 -0
  174. package/dist/utils/permission-matcher.js.map +1 -0
  175. package/dist/utils/scope-discovery.d.ts +34 -0
  176. package/dist/utils/scope-discovery.js +102 -0
  177. package/dist/utils/scope-discovery.js.map +1 -0
  178. package/package.json +64 -0
  179. package/stubs/skills/rhino-audit.md +184 -0
  180. package/stubs/skills/rhino-bugfix.md +117 -0
  181. package/stubs/skills/rhino-deploy.md +5 -0
  182. package/stubs/skills/rhino-docs.md +147 -0
  183. package/stubs/skills/rhino-feature.md +146 -0
  184. package/stubs/skills/rhino-migrate.md +181 -0
  185. package/stubs/skills/rhino-model.md +180 -0
  186. package/stubs/skills/rhino-plan.md +5 -0
  187. package/stubs/skills/rhino-policy.md +183 -0
  188. package/stubs/skills/rhino-refactor.md +147 -0
  189. package/stubs/skills/rhino-review.md +113 -0
  190. package/stubs/skills/rhino-scope.md +140 -0
  191. package/stubs/skills/rhino-test.md +233 -0
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RHINO_MODEL_METADATA = void 0;
4
+ exports.RhinoModel = RhinoModel;
5
+ exports.getRhinoModelMetadata = getRhinoModelMetadata;
6
+ exports.BelongsToOrganization = BelongsToOrganization;
7
+ exports.HasAuditTrail = HasAuditTrail;
8
+ exports.HasUuid = HasUuid;
9
+ exports.HasSoftDeletes = HasSoftDeletes;
10
+ exports.ExceptActions = ExceptActions;
11
+ exports.HidableColumns = HidableColumns;
12
+ exports.PermittedAttrs = PermittedAttrs;
13
+ require("reflect-metadata");
14
+ exports.RHINO_MODEL_METADATA = Symbol('rhino:model');
15
+ /**
16
+ * Class decorator that tags a resource definition class with its Rhino
17
+ * model configuration. The metadata is read by the CLI / install helpers and
18
+ * can be merged into `RhinoModule.forRoot({models})`.
19
+ *
20
+ * Usage:
21
+ *
22
+ * @RhinoModel({ slug: 'posts', model: 'post', belongsToOrganization: true })
23
+ * export class PostResource {}
24
+ */
25
+ function RhinoModel(config) {
26
+ return (target) => {
27
+ const existing = (Reflect.getMetadata(exports.RHINO_MODEL_METADATA, target) ?? {});
28
+ Reflect.defineMetadata(exports.RHINO_MODEL_METADATA, { ...existing, ...config }, target);
29
+ };
30
+ }
31
+ function getRhinoModelMetadata(target) {
32
+ return Reflect.getMetadata(exports.RHINO_MODEL_METADATA, target);
33
+ }
34
+ /**
35
+ * Marker decorator. Does nothing at runtime — documents intent for generators.
36
+ */
37
+ function BelongsToOrganization() {
38
+ return (target) => {
39
+ const existing = (Reflect.getMetadata(exports.RHINO_MODEL_METADATA, target) ?? {});
40
+ Reflect.defineMetadata(exports.RHINO_MODEL_METADATA, { ...existing, belongsToOrganization: true }, target);
41
+ };
42
+ }
43
+ function HasAuditTrail(excludeFields = []) {
44
+ return (target) => {
45
+ const existing = (Reflect.getMetadata(exports.RHINO_MODEL_METADATA, target) ?? {});
46
+ Reflect.defineMetadata(exports.RHINO_MODEL_METADATA, { ...existing, hasAuditTrail: true, auditExclude: excludeFields }, target);
47
+ };
48
+ }
49
+ function HasUuid() {
50
+ return (target) => {
51
+ const existing = (Reflect.getMetadata(exports.RHINO_MODEL_METADATA, target) ?? {});
52
+ Reflect.defineMetadata(exports.RHINO_MODEL_METADATA, { ...existing, hasUuid: true }, target);
53
+ };
54
+ }
55
+ function HasSoftDeletes() {
56
+ return (target) => {
57
+ const existing = (Reflect.getMetadata(exports.RHINO_MODEL_METADATA, target) ?? {});
58
+ Reflect.defineMetadata(exports.RHINO_MODEL_METADATA, { ...existing, softDeletes: true }, target);
59
+ };
60
+ }
61
+ function ExceptActions(actions) {
62
+ return (target) => {
63
+ const existing = (Reflect.getMetadata(exports.RHINO_MODEL_METADATA, target) ?? {});
64
+ Reflect.defineMetadata(exports.RHINO_MODEL_METADATA, { ...existing, exceptActions: actions }, target);
65
+ };
66
+ }
67
+ function HidableColumns(columns) {
68
+ return (target) => {
69
+ const existing = (Reflect.getMetadata(exports.RHINO_MODEL_METADATA, target) ?? {});
70
+ Reflect.defineMetadata(exports.RHINO_MODEL_METADATA, { ...existing, additionalHiddenColumns: columns }, target);
71
+ };
72
+ }
73
+ function PermittedAttrs(config) {
74
+ return (target) => {
75
+ const existing = (Reflect.getMetadata(exports.RHINO_MODEL_METADATA, target) ?? {});
76
+ Reflect.defineMetadata(exports.RHINO_MODEL_METADATA, { ...existing, permittedAttrs: config }, target);
77
+ };
78
+ }
79
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { HttpException } from '@nestjs/common';
2
+ export type RhinoErrorCode = 'VALIDATION_FAILED' | 'FORBIDDEN_FIELDS' | 'CROSS_TENANT' | 'UNAUTHORIZED' | 'FORBIDDEN' | 'NOT_FOUND' | 'ACTION_DISABLED' | 'UNKNOWN_RESOURCE' | 'INVITATION_EXPIRED' | 'INVITATION_USED' | 'INVITATION_INVALID_ROLE' | 'NESTED_OPERATION_FAILED' | 'INCLUDE_NOT_AUTHORIZED';
3
+ export interface RhinoErrorBody {
4
+ code: RhinoErrorCode;
5
+ message: string;
6
+ details?: Record<string, any>;
7
+ }
8
+ /**
9
+ * Single exception shape surfaced by the library. Frontends can rely on the
10
+ * `{ code, message, details }` envelope regardless of HTTP status.
11
+ */
12
+ export declare class RhinoException extends HttpException {
13
+ readonly code: RhinoErrorCode;
14
+ constructor(code: RhinoErrorCode, message: string, status: number, details?: Record<string, any>);
15
+ static validationFailed(errors: Record<string, string[]>): RhinoException;
16
+ static forbiddenFields(fields: string[]): RhinoException;
17
+ static crossTenant(errors: Record<string, string[]>): RhinoException;
18
+ static unauthorized(message?: string): RhinoException;
19
+ static forbidden(message?: string): RhinoException;
20
+ static notFound(message?: string): RhinoException;
21
+ static actionDisabled(action: string): RhinoException;
22
+ static unknownResource(slug: string): RhinoException;
23
+ static includeNotAuthorized(slug: string): RhinoException;
24
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RhinoException = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ /**
6
+ * Single exception shape surfaced by the library. Frontends can rely on the
7
+ * `{ code, message, details }` envelope regardless of HTTP status.
8
+ */
9
+ class RhinoException extends common_1.HttpException {
10
+ code;
11
+ constructor(code, message, status, details) {
12
+ const body = { code, message, ...(details ? { details } : {}) };
13
+ super(body, status);
14
+ this.code = code;
15
+ }
16
+ static validationFailed(errors) {
17
+ return new RhinoException('VALIDATION_FAILED', 'Validation failed', 422, { errors });
18
+ }
19
+ static forbiddenFields(fields) {
20
+ return new RhinoException('FORBIDDEN_FIELDS', 'Request contains fields not allowed for your role', 403, {
21
+ fields,
22
+ });
23
+ }
24
+ static crossTenant(errors) {
25
+ return new RhinoException('CROSS_TENANT', 'Referenced record not in current organization', 422, { errors });
26
+ }
27
+ static unauthorized(message = 'Unauthorized') {
28
+ return new RhinoException('UNAUTHORIZED', message, 401);
29
+ }
30
+ static forbidden(message = 'This action is unauthorized.') {
31
+ return new RhinoException('FORBIDDEN', message, 403);
32
+ }
33
+ static notFound(message = 'Not found') {
34
+ return new RhinoException('NOT_FOUND', message, 404);
35
+ }
36
+ static actionDisabled(action) {
37
+ return new RhinoException('ACTION_DISABLED', 'Action not available', 404, { action });
38
+ }
39
+ static unknownResource(slug) {
40
+ return new RhinoException('UNKNOWN_RESOURCE', `Unknown resource: ${slug}`, 404, { slug });
41
+ }
42
+ static includeNotAuthorized(slug) {
43
+ return new RhinoException('INCLUDE_NOT_AUTHORIZED', `Include not authorized: ${slug}`, 403, { slug });
44
+ }
45
+ }
46
+ exports.RhinoException = RhinoException;
47
+ //# sourceMappingURL=rhino-exception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rhino-exception.js","sourceRoot":"","sources":["../../src/errors/rhino-exception.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAuB/C;;;GAGG;AACH,MAAa,cAAe,SAAQ,sBAAa;IACtC,IAAI,CAAiB;IAE9B,YAAY,IAAoB,EAAE,OAAe,EAAE,MAAc,EAAE,OAA6B;QAC9F,MAAM,IAAI,GAAmB,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,MAAgC;QACtD,OAAO,IAAI,cAAc,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,MAAgB;QACrC,OAAO,IAAI,cAAc,CAAC,kBAAkB,EAAE,mDAAmD,EAAE,GAAG,EAAE;YACtG,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,MAAgC;QACjD,OAAO,IAAI,cAAc,CAAC,cAAc,EAAE,+CAA+C,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9G,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAO,GAAG,cAAc;QAC1C,OAAO,IAAI,cAAc,CAAC,cAAc,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,8BAA8B;QACvD,OAAO,IAAI,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,WAAW;QACnC,OAAO,IAAI,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAc;QAClC,OAAO,IAAI,cAAc,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,IAAY;QACjC,OAAO,IAAI,cAAc,CAAC,kBAAkB,EAAE,qBAAqB,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,CAAC,oBAAoB,CAAC,IAAY;QACtC,OAAO,IAAI,cAAc,CAAC,wBAAwB,EAAE,2BAA2B,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACxG,CAAC;CACF;AA9CD,wCA8CC"}
@@ -0,0 +1,21 @@
1
+ import type { RhinoConfig } from '../interfaces/rhino-config.interface';
2
+ export interface PostmanExporterOptions {
3
+ baseUrl: string;
4
+ projectName?: string;
5
+ }
6
+ /**
7
+ * Generate a Postman Collection v2.1 JSON object from an RhinoConfig.
8
+ *
9
+ * The returned value is a plain JS object that can be serialised with
10
+ * `JSON.stringify`. Prisma model names are not available at export time, so
11
+ * request bodies use field-name placeholders derived from the config hints
12
+ * (allowedFilters / allowedFields / …).
13
+ */
14
+ export declare function generatePostmanCollection(config: RhinoConfig, options: PostmanExporterOptions): object;
15
+ /**
16
+ * Alias for `generatePostmanCollection` that serialises the result to a JSON
17
+ * string. Used by the CLI command which expects a string back.
18
+ *
19
+ * @internal Prefer `generatePostmanCollection` in library code.
20
+ */
21
+ export declare function generate(config: RhinoConfig, options: PostmanExporterOptions): string;
@@ -0,0 +1,396 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generatePostmanCollection = generatePostmanCollection;
4
+ exports.generate = generate;
5
+ // ---------------------------------------------------------------------------
6
+ // Public API
7
+ // ---------------------------------------------------------------------------
8
+ /**
9
+ * Generate a Postman Collection v2.1 JSON object from an RhinoConfig.
10
+ *
11
+ * The returned value is a plain JS object that can be serialised with
12
+ * `JSON.stringify`. Prisma model names are not available at export time, so
13
+ * request bodies use field-name placeholders derived from the config hints
14
+ * (allowedFilters / allowedFields / …).
15
+ */
16
+ function generatePostmanCollection(config, options) {
17
+ const baseUrl = (options.baseUrl ?? '').replace(/\/$/, '');
18
+ const projectName = options.projectName ?? 'Rhino API';
19
+ const models = config.models ?? {};
20
+ const routeGroups = config.routeGroups ?? {};
21
+ const groupNames = Object.keys(routeGroups);
22
+ const hasMultipleGroups = groupNames.length > 1;
23
+ const multiTenantEnabled = isMultiTenantEnabled(config);
24
+ const needsOrgVariable = groupNames.some(name => {
25
+ const prefix = routeGroups[name].prefix ?? '';
26
+ return prefixHasParam(prefix);
27
+ });
28
+ const variables = buildCollectionVariables(baseUrl, needsOrgVariable);
29
+ const items = [];
30
+ // Auth folder is always first
31
+ items.push(buildAuthFolder(multiTenantEnabled));
32
+ if (hasMultipleGroups) {
33
+ for (const groupName of groupNames) {
34
+ const group = routeGroups[groupName];
35
+ const slugList = group.models === '*' ? Object.keys(models) : group.models;
36
+ const groupItems = [];
37
+ for (const slug of slugList) {
38
+ const reg = models[slug];
39
+ if (!reg)
40
+ continue;
41
+ const modelFolder = buildModelFolder(slug, reg, group.prefix ?? '');
42
+ groupItems.push(modelFolder);
43
+ }
44
+ if (groupItems.length > 0) {
45
+ items.push({ name: groupName, item: groupItems });
46
+ }
47
+ }
48
+ }
49
+ else if (groupNames.length === 1) {
50
+ const groupName = groupNames[0];
51
+ const group = routeGroups[groupName];
52
+ const slugList = group.models === '*' ? Object.keys(models) : group.models;
53
+ for (const slug of slugList) {
54
+ const reg = models[slug];
55
+ if (!reg)
56
+ continue;
57
+ items.push(buildModelFolder(slug, reg, group.prefix ?? ''));
58
+ }
59
+ }
60
+ else {
61
+ // No route groups — flat list
62
+ for (const [slug, reg] of Object.entries(models)) {
63
+ items.push(buildModelFolder(slug, reg, ''));
64
+ }
65
+ }
66
+ return {
67
+ info: {
68
+ name: projectName,
69
+ schema: 'https://schema.getpostman.com/json/collection/v2.1.0/collection.json',
70
+ },
71
+ variable: variables,
72
+ item: items,
73
+ };
74
+ }
75
+ // ---------------------------------------------------------------------------
76
+ // Helpers — variables & headers
77
+ // ---------------------------------------------------------------------------
78
+ function isMultiTenantEnabled(config) {
79
+ const mt = config.multiTenant;
80
+ if (!mt)
81
+ return false;
82
+ if (mt.enabled === false)
83
+ return false;
84
+ return mt.enabled === true || Boolean(mt.organizationIdentifierColumn);
85
+ }
86
+ function prefixHasParam(prefix) {
87
+ return prefix.includes('{') || prefix.includes(':');
88
+ }
89
+ function buildCollectionVariables(baseUrl, needsOrgVariable) {
90
+ const vars = [
91
+ { key: 'baseUrl', value: baseUrl },
92
+ { key: 'modelId', value: '1' },
93
+ { key: 'token', value: '' },
94
+ ];
95
+ if (needsOrgVariable) {
96
+ vars.push({ key: 'organization', value: 'organization-1' });
97
+ }
98
+ return vars;
99
+ }
100
+ function defaultHeaders() {
101
+ return [
102
+ { key: 'Accept', value: 'application/json' },
103
+ { key: 'Authorization', value: 'Bearer {{token}}' },
104
+ ];
105
+ }
106
+ function jsonHeaders() {
107
+ return [
108
+ ...defaultHeaders(),
109
+ { key: 'Content-Type', value: 'application/json' },
110
+ ];
111
+ }
112
+ // ---------------------------------------------------------------------------
113
+ // Auth folder
114
+ // ---------------------------------------------------------------------------
115
+ function buildAuthFolder(multiTenantEnabled) {
116
+ const loginTestScript = 'const json = pm.response.json();\n' +
117
+ 'if (json.token) {\n' +
118
+ ' pm.collectionVariables.set("token", json.token);\n' +
119
+ '}\n' +
120
+ 'if (json.organization_slug) {\n' +
121
+ ' pm.collectionVariables.set("organization", json.organization_slug);\n' +
122
+ '}';
123
+ const items = [
124
+ requestItem('Login', 'POST', '{{baseUrl}}/auth/login', {}, jsonHeaders(), {
125
+ email: 'user@example.com',
126
+ password: 'password',
127
+ }, loginTestScript),
128
+ requestItem('Logout', 'POST', '{{baseUrl}}/auth/logout', {}, defaultHeaders()),
129
+ requestItem('Password recover', 'POST', '{{baseUrl}}/auth/password/recover', {}, jsonHeaders(), {
130
+ email: 'user@example.com',
131
+ }),
132
+ requestItem('Password reset', 'POST', '{{baseUrl}}/auth/password/reset', {}, jsonHeaders(), {
133
+ token: '{{token}}',
134
+ email: 'user@example.com',
135
+ password: 'new-password',
136
+ password_confirmation: 'new-password',
137
+ }),
138
+ requestItem('Register', 'POST', '{{baseUrl}}/auth/register', {}, jsonHeaders(), {
139
+ invitation_token: '{{token}}',
140
+ name: 'New User',
141
+ password: 'password',
142
+ password_confirmation: 'password',
143
+ }),
144
+ ];
145
+ if (multiTenantEnabled) {
146
+ items.push(requestItem('Accept invitation', 'POST', '{{baseUrl}}/invitations/accept', {}, jsonHeaders(), {
147
+ token: 'invitation-token',
148
+ }));
149
+ }
150
+ return { name: 'Authentication', item: items };
151
+ }
152
+ // ---------------------------------------------------------------------------
153
+ // Model folder
154
+ // ---------------------------------------------------------------------------
155
+ function buildModelFolder(slug, reg, groupPrefix) {
156
+ const basePath = buildBasePath(slug, groupPrefix);
157
+ const exceptActions = reg.exceptActions ?? [];
158
+ const folders = [];
159
+ if (!exceptActions.includes('index')) {
160
+ folders.push({ name: 'Index', item: buildIndexRequests(basePath, slug, reg) });
161
+ }
162
+ if (!exceptActions.includes('show')) {
163
+ folders.push({ name: 'Show', item: buildShowRequests(basePath, slug, reg) });
164
+ }
165
+ if (!exceptActions.includes('store')) {
166
+ folders.push({ name: 'Store', item: buildStoreRequests(basePath, reg) });
167
+ }
168
+ if (!exceptActions.includes('update')) {
169
+ folders.push({ name: 'Update', item: buildUpdateRequests(basePath, reg) });
170
+ }
171
+ if (!exceptActions.includes('destroy')) {
172
+ folders.push({ name: 'Destroy', item: buildDestroyRequests(basePath) });
173
+ }
174
+ if (reg.softDeletes) {
175
+ if (!exceptActions.includes('trashed')) {
176
+ folders.push({ name: 'Trashed', item: buildTrashedRequests(basePath, reg) });
177
+ }
178
+ if (!exceptActions.includes('restore')) {
179
+ folders.push({ name: 'Restore', item: buildRestoreRequests(basePath) });
180
+ }
181
+ if (!exceptActions.includes('forceDelete')) {
182
+ folders.push({ name: 'Force Delete', item: buildForceDeleteRequests(basePath) });
183
+ }
184
+ }
185
+ return { name: slug, item: folders };
186
+ }
187
+ function buildBasePath(slug, groupPrefix) {
188
+ if (groupPrefix) {
189
+ // Replace {param} or :param with {{param}} for Postman variables
190
+ const postmanPrefix = groupPrefix
191
+ .replace(/\{(\w+)\}/g, '{{$1}}')
192
+ .replace(/:(\w+)/g, '{{$1}}');
193
+ return `{{baseUrl}}/${postmanPrefix}/${slug}`;
194
+ }
195
+ return `{{baseUrl}}/${slug}`;
196
+ }
197
+ // ---------------------------------------------------------------------------
198
+ // CRUD request builders
199
+ // ---------------------------------------------------------------------------
200
+ function buildIndexRequests(basePath, slug, reg) {
201
+ const requests = [];
202
+ const hdrs = defaultHeaders();
203
+ requests.push(requestItem('List all', 'GET', basePath, {}, hdrs));
204
+ for (const filter of reg.allowedFilters ?? []) {
205
+ requests.push(requestItem(`Filter by ${filter}`, 'GET', basePath, {
206
+ [`filter[${filter}]`]: exampleFilterValue(filter),
207
+ }, hdrs));
208
+ }
209
+ for (const sort of reg.allowedSorts ?? []) {
210
+ requests.push(requestItem(`Sort by ${sort} (asc)`, 'GET', basePath, { sort }, hdrs));
211
+ requests.push(requestItem(`Sort by ${sort} (desc)`, 'GET', basePath, { sort: `-${sort}` }, hdrs));
212
+ }
213
+ const includes = reg.allowedIncludes ?? [];
214
+ for (const include of includes) {
215
+ requests.push(requestItem(`Include ${include}`, 'GET', basePath, { include }, hdrs));
216
+ }
217
+ if (includes.length > 1) {
218
+ requests.push(requestItem('Include all', 'GET', basePath, { include: includes.join(',') }, hdrs));
219
+ }
220
+ const fields = reg.allowedFields ?? [];
221
+ if (fields.length > 0) {
222
+ requests.push(requestItem('Select fields', 'GET', basePath, {
223
+ [`fields[${slug}]`]: fields.slice(0, 5).join(','),
224
+ }, hdrs));
225
+ }
226
+ if ((reg.allowedSearch ?? []).length > 0) {
227
+ requests.push(requestItem('Search', 'GET', basePath, { search: 'example' }, hdrs));
228
+ }
229
+ if (reg.paginationEnabled !== false) {
230
+ requests.push(requestItem('Paginate', 'GET', basePath, { per_page: '25', page: '1' }, hdrs));
231
+ }
232
+ // Combined example
233
+ const combined = {};
234
+ if ((reg.allowedFilters ?? []).length > 0) {
235
+ const f = reg.allowedFilters[0];
236
+ combined[`filter[${f}]`] = exampleFilterValue(f);
237
+ }
238
+ if ((reg.allowedSorts ?? []).length > 0) {
239
+ combined['sort'] = `-${reg.defaultSort ?? reg.allowedSorts[0]}`;
240
+ }
241
+ if (includes.length > 0) {
242
+ combined['include'] = includes.slice(0, 2).join(',');
243
+ }
244
+ if (fields.length > 0) {
245
+ combined[`fields[${slug}]`] = fields.slice(0, 3).join(',');
246
+ }
247
+ combined['per_page'] = '10';
248
+ combined['page'] = '1';
249
+ requests.push(requestItem('Combined', 'GET', basePath, combined, hdrs));
250
+ return requests;
251
+ }
252
+ function buildShowRequests(basePath, slug, reg) {
253
+ const path = `${basePath}/{{modelId}}`;
254
+ const hdrs = defaultHeaders();
255
+ const requests = [
256
+ requestItem('Show by ID', 'GET', path, {}, hdrs),
257
+ ];
258
+ const includes = reg.allowedIncludes ?? [];
259
+ if (includes.length > 0) {
260
+ requests.push(requestItem('Show with include', 'GET', path, { include: includes[0] }, hdrs));
261
+ }
262
+ const fields = reg.allowedFields ?? [];
263
+ if (fields.length > 0) {
264
+ requests.push(requestItem('Show with fields', 'GET', path, {
265
+ [`fields[${slug}]`]: fields.slice(0, 5).join(','),
266
+ }, hdrs));
267
+ }
268
+ return requests;
269
+ }
270
+ function buildStoreRequests(basePath, reg) {
271
+ const body = buildExampleBody(reg);
272
+ return [requestItem('Create', 'POST', basePath, {}, jsonHeaders(), body)];
273
+ }
274
+ function buildUpdateRequests(basePath, reg) {
275
+ const path = `${basePath}/{{modelId}}`;
276
+ const body = buildExampleBody(reg);
277
+ const requests = [
278
+ requestItem('Update', 'PUT', path, {}, jsonHeaders(), body),
279
+ ];
280
+ if (Object.keys(body).length > 1) {
281
+ const [firstKey] = Object.keys(body);
282
+ requests.push(requestItem('Update partial', 'PUT', path, {}, jsonHeaders(), { [firstKey]: body[firstKey] }));
283
+ }
284
+ return requests;
285
+ }
286
+ function buildDestroyRequests(basePath) {
287
+ return [requestItem('Delete by ID', 'DELETE', `${basePath}/{{modelId}}`, {}, defaultHeaders())];
288
+ }
289
+ function buildTrashedRequests(basePath, reg) {
290
+ const path = `${basePath}/trashed`;
291
+ const hdrs = defaultHeaders();
292
+ const requests = [requestItem('List trashed', 'GET', path, {}, hdrs)];
293
+ if ((reg.allowedSorts ?? []).length > 0) {
294
+ requests.push(requestItem('List trashed sorted', 'GET', path, { sort: '-deletedAt' }, hdrs));
295
+ }
296
+ return requests;
297
+ }
298
+ function buildRestoreRequests(basePath) {
299
+ return [requestItem('Restore by ID', 'POST', `${basePath}/{{modelId}}/restore`, {}, defaultHeaders())];
300
+ }
301
+ function buildForceDeleteRequests(basePath) {
302
+ return [requestItem('Force delete by ID', 'DELETE', `${basePath}/{{modelId}}/force-delete`, {}, defaultHeaders())];
303
+ }
304
+ // ---------------------------------------------------------------------------
305
+ // Body / value helpers
306
+ // ---------------------------------------------------------------------------
307
+ function buildExampleBody(reg) {
308
+ const body = {};
309
+ const fields = reg.allowedFields ?? [];
310
+ const filters = reg.allowedFilters ?? [];
311
+ // Prefer allowedFields as the body skeleton; fall back to filters for hints
312
+ const candidates = fields.length > 0 ? fields : filters;
313
+ for (const field of candidates) {
314
+ body[field] = exampleValueForField(field);
315
+ }
316
+ return body;
317
+ }
318
+ function exampleFilterValue(filter) {
319
+ const lower = filter.toLowerCase();
320
+ if (['is_published', 'is_active', 'published', 'active'].includes(lower))
321
+ return '1';
322
+ return 'example';
323
+ }
324
+ function exampleValueForField(field) {
325
+ const lower = field.toLowerCase();
326
+ if (lower.endsWith('_id') || lower === 'id')
327
+ return 1;
328
+ if (['is_published', 'is_active', 'active', 'published', 'enabled'].includes(lower))
329
+ return true;
330
+ if (lower.endsWith('_at') || lower.includes('date'))
331
+ return '2024-01-01T00:00:00Z';
332
+ if (lower === 'email')
333
+ return 'user@example.com';
334
+ if (lower === 'name' || lower === 'title')
335
+ return `Example ${field}`;
336
+ return `example-${field}`;
337
+ }
338
+ // ---------------------------------------------------------------------------
339
+ // Core request item builder
340
+ // ---------------------------------------------------------------------------
341
+ function requestItem(name, method, path, queryParams, headers, body, testScript) {
342
+ const query = Object.entries(queryParams).map(([key, value]) => ({ key, value }));
343
+ const rawUrl = query.length > 0
344
+ ? `${path}?${query.map(q => `${q.key}=${encodeURIComponent(q.value)}`).join('&')}`
345
+ : path;
346
+ // Split path into host + path parts for Postman URL structure
347
+ // The path looks like "{{baseUrl}}/segment/..."
348
+ const withoutProtocol = path.replace(/^https?:\/\//, '');
349
+ const parts = withoutProtocol.split('/').filter(Boolean);
350
+ const urlObj = {
351
+ raw: rawUrl,
352
+ host: [parts[0] ?? '{{baseUrl}}'],
353
+ path: parts.slice(1),
354
+ };
355
+ if (query.length > 0) {
356
+ urlObj['query'] = query;
357
+ }
358
+ const request = {
359
+ method,
360
+ header: headers,
361
+ url: urlObj,
362
+ };
363
+ if (body != null && ['POST', 'PUT', 'PATCH'].includes(method)) {
364
+ request['body'] = {
365
+ mode: 'raw',
366
+ raw: JSON.stringify(body, null, 2),
367
+ options: { raw: { language: 'json' } },
368
+ };
369
+ }
370
+ const item = { name, request };
371
+ if (testScript) {
372
+ item['event'] = [
373
+ {
374
+ listen: 'test',
375
+ script: {
376
+ exec: testScript.split('\n'),
377
+ type: 'text/javascript',
378
+ },
379
+ },
380
+ ];
381
+ }
382
+ return item;
383
+ }
384
+ // ---------------------------------------------------------------------------
385
+ // CLI-compatible alias
386
+ // ---------------------------------------------------------------------------
387
+ /**
388
+ * Alias for `generatePostmanCollection` that serialises the result to a JSON
389
+ * string. Used by the CLI command which expects a string back.
390
+ *
391
+ * @internal Prefer `generatePostmanCollection` in library code.
392
+ */
393
+ function generate(config, options) {
394
+ return JSON.stringify(generatePostmanCollection(config, options), null, 2);
395
+ }
396
+ //# sourceMappingURL=postman-exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postman-exporter.js","sourceRoot":"","sources":["../../src/exporters/postman-exporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { RhinoConfig } from '../interfaces/rhino-config.interface';
2
+ export interface TypeScriptExporterOptions {
3
+ /** Optional header comment prepended to the output. */
4
+ header?: string;
5
+ }
6
+ /**
7
+ * Generate a portable `.d.ts` string from an RhinoConfig.
8
+ *
9
+ * - One interface per registered model slug, using `allowedFields` for
10
+ * properties when available.
11
+ * - A `${PascalSlug}Query` interface when `allowedFilters`, `allowedSorts`
12
+ * or `allowedSearch` are set.
13
+ * - Generic helpers: `Paginated<T>`, `ApiResponse<T>`.
14
+ * - A top-level `RhinoModels` union of all registered slugs.
15
+ * - No Prisma-dependent imports.
16
+ */
17
+ export declare function generateTypeScriptTypes(config: RhinoConfig, options?: TypeScriptExporterOptions): string;
18
+ /**
19
+ * Alias for `generateTypeScriptTypes` used by the CLI command.
20
+ *
21
+ * @internal Prefer `generateTypeScriptTypes` in library code.
22
+ */
23
+ export declare function generate(config: RhinoConfig, options?: TypeScriptExporterOptions): string;