@declaro/data 2.0.0-beta.14 → 2.0.0-beta.140

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 (142) hide show
  1. package/{LICENSE → LICENSE.md} +1 -1
  2. package/README.md +0 -0
  3. package/dist/browser/index.js +26 -0
  4. package/dist/browser/index.js.map +93 -0
  5. package/dist/node/index.cjs +13372 -0
  6. package/dist/node/index.cjs.map +93 -0
  7. package/dist/node/index.js +13351 -0
  8. package/dist/node/index.js.map +93 -0
  9. package/dist/ts/application/model-controller.d.ts +60 -0
  10. package/dist/ts/application/model-controller.d.ts.map +1 -0
  11. package/dist/ts/application/model-controller.test.d.ts +2 -0
  12. package/dist/ts/application/model-controller.test.d.ts.map +1 -0
  13. package/dist/ts/application/read-only-model-controller.d.ts +24 -0
  14. package/dist/ts/application/read-only-model-controller.d.ts.map +1 -0
  15. package/dist/ts/application/read-only-model-controller.test.d.ts +2 -0
  16. package/dist/ts/application/read-only-model-controller.test.d.ts.map +1 -0
  17. package/dist/ts/domain/events/domain-event.d.ts +41 -0
  18. package/dist/ts/domain/events/domain-event.d.ts.map +1 -0
  19. package/dist/ts/domain/events/domain-event.test.d.ts +2 -0
  20. package/dist/ts/domain/events/domain-event.test.d.ts.map +1 -0
  21. package/dist/ts/domain/events/event-types.d.ts +37 -0
  22. package/dist/ts/domain/events/event-types.d.ts.map +1 -0
  23. package/dist/ts/domain/events/mutation-event.d.ts +41 -0
  24. package/dist/ts/domain/events/mutation-event.d.ts.map +1 -0
  25. package/dist/ts/domain/events/mutation-event.test.d.ts +2 -0
  26. package/dist/ts/domain/events/mutation-event.test.d.ts.map +1 -0
  27. package/dist/ts/domain/events/query-event.d.ts +8 -0
  28. package/dist/ts/domain/events/query-event.d.ts.map +1 -0
  29. package/dist/ts/domain/events/query-event.test.d.ts +2 -0
  30. package/dist/ts/domain/events/query-event.test.d.ts.map +1 -0
  31. package/dist/ts/domain/events/request-event.d.ts +26 -0
  32. package/dist/ts/domain/events/request-event.d.ts.map +1 -0
  33. package/dist/ts/domain/events/request-event.test.d.ts +2 -0
  34. package/dist/ts/domain/events/request-event.test.d.ts.map +1 -0
  35. package/dist/ts/domain/interfaces/repository.d.ts +110 -0
  36. package/dist/ts/domain/interfaces/repository.d.ts.map +1 -0
  37. package/dist/ts/domain/models/pagination.d.ts +28 -0
  38. package/dist/ts/domain/models/pagination.d.ts.map +1 -0
  39. package/dist/ts/domain/services/base-model-service.d.ts +23 -0
  40. package/dist/ts/domain/services/base-model-service.d.ts.map +1 -0
  41. package/dist/ts/domain/services/model-service-args.d.ts +9 -0
  42. package/dist/ts/domain/services/model-service-args.d.ts.map +1 -0
  43. package/dist/ts/domain/services/model-service.d.ts +99 -0
  44. package/dist/ts/domain/services/model-service.d.ts.map +1 -0
  45. package/dist/ts/domain/services/model-service.normalization.test.d.ts +2 -0
  46. package/dist/ts/domain/services/model-service.normalization.test.d.ts.map +1 -0
  47. package/dist/ts/domain/services/model-service.test.d.ts +2 -0
  48. package/dist/ts/domain/services/model-service.test.d.ts.map +1 -0
  49. package/dist/ts/domain/services/read-only-model-service.d.ts +90 -0
  50. package/dist/ts/domain/services/read-only-model-service.d.ts.map +1 -0
  51. package/dist/ts/domain/services/read-only-model-service.test.d.ts +2 -0
  52. package/dist/ts/domain/services/read-only-model-service.test.d.ts.map +1 -0
  53. package/dist/ts/index.d.ts +18 -0
  54. package/dist/ts/index.d.ts.map +1 -0
  55. package/dist/ts/shared/utils/schema-inference.d.ts +23 -0
  56. package/dist/ts/shared/utils/schema-inference.d.ts.map +1 -0
  57. package/dist/ts/shared/utils/schema-inheritance.d.ts +24 -0
  58. package/dist/ts/shared/utils/schema-inheritance.d.ts.map +1 -0
  59. package/dist/ts/shared/utils/schema-inheritance.test.d.ts +2 -0
  60. package/dist/ts/shared/utils/schema-inheritance.test.d.ts.map +1 -0
  61. package/dist/ts/shared/utils/test/animal-schema.d.ts +57 -0
  62. package/dist/ts/shared/utils/test/animal-schema.d.ts.map +1 -0
  63. package/dist/ts/shared/utils/test/animal-trait-schema.d.ts +55 -0
  64. package/dist/ts/shared/utils/test/animal-trait-schema.d.ts.map +1 -0
  65. package/dist/ts/shared/utils/test/elephant-schema.d.ts +30 -0
  66. package/dist/ts/shared/utils/test/elephant-schema.d.ts.map +1 -0
  67. package/dist/ts/shared/utils/test/elephant-trait-schema.d.ts +26 -0
  68. package/dist/ts/shared/utils/test/elephant-trait-schema.d.ts.map +1 -0
  69. package/dist/ts/test/mock/models/mock-book-models.d.ts +42 -0
  70. package/dist/ts/test/mock/models/mock-book-models.d.ts.map +1 -0
  71. package/dist/ts/test/mock/repositories/mock-memory-repository.assign.test.d.ts +2 -0
  72. package/dist/ts/test/mock/repositories/mock-memory-repository.assign.test.d.ts.map +1 -0
  73. package/dist/ts/test/mock/repositories/mock-memory-repository.basic.test.d.ts +2 -0
  74. package/dist/ts/test/mock/repositories/mock-memory-repository.basic.test.d.ts.map +1 -0
  75. package/dist/ts/test/mock/repositories/mock-memory-repository.bulk-upsert.test.d.ts +2 -0
  76. package/dist/ts/test/mock/repositories/mock-memory-repository.bulk-upsert.test.d.ts.map +1 -0
  77. package/dist/ts/test/mock/repositories/mock-memory-repository.count.test.d.ts +2 -0
  78. package/dist/ts/test/mock/repositories/mock-memory-repository.count.test.d.ts.map +1 -0
  79. package/dist/ts/test/mock/repositories/mock-memory-repository.d.ts +62 -0
  80. package/dist/ts/test/mock/repositories/mock-memory-repository.d.ts.map +1 -0
  81. package/dist/ts/test/mock/repositories/mock-memory-repository.search.test.d.ts +2 -0
  82. package/dist/ts/test/mock/repositories/mock-memory-repository.search.test.d.ts.map +1 -0
  83. package/dist/ts/test/mock/repositories/mock-memory-repository.trash.test.d.ts +2 -0
  84. package/dist/ts/test/mock/repositories/mock-memory-repository.trash.test.d.ts.map +1 -0
  85. package/dist/ts/test/mock/repositories/mock-memory-repository.upsert.test.d.ts +2 -0
  86. package/dist/ts/test/mock/repositories/mock-memory-repository.upsert.test.d.ts.map +1 -0
  87. package/package.json +46 -42
  88. package/src/application/model-controller.test.ts +694 -0
  89. package/src/application/model-controller.ts +186 -0
  90. package/src/application/read-only-model-controller.test.ts +335 -0
  91. package/src/application/read-only-model-controller.ts +79 -0
  92. package/src/domain/events/domain-event.test.ts +82 -0
  93. package/src/domain/events/domain-event.ts +69 -0
  94. package/src/domain/events/event-types.ts +37 -0
  95. package/src/domain/events/mutation-event.test.ts +390 -0
  96. package/src/domain/events/mutation-event.ts +53 -0
  97. package/src/domain/events/query-event.test.ts +228 -0
  98. package/src/domain/events/query-event.ts +14 -0
  99. package/src/domain/events/request-event.test.ts +38 -0
  100. package/src/domain/events/request-event.ts +47 -0
  101. package/src/domain/interfaces/repository.ts +136 -0
  102. package/src/domain/models/pagination.ts +28 -0
  103. package/src/domain/services/base-model-service.ts +54 -0
  104. package/src/domain/services/model-service-args.ts +9 -0
  105. package/src/domain/services/model-service.normalization.test.ts +704 -0
  106. package/src/domain/services/model-service.test.ts +1616 -0
  107. package/src/domain/services/model-service.ts +597 -0
  108. package/src/domain/services/read-only-model-service.test.ts +1130 -0
  109. package/src/domain/services/read-only-model-service.ts +211 -0
  110. package/src/index.ts +17 -4
  111. package/src/shared/utils/schema-inference.ts +26 -0
  112. package/src/shared/utils/schema-inheritance.test.ts +295 -0
  113. package/src/shared/utils/schema-inheritance.ts +28 -0
  114. package/src/shared/utils/test/animal-schema.ts +46 -0
  115. package/src/shared/utils/test/animal-trait-schema.ts +45 -0
  116. package/src/shared/utils/test/elephant-schema.ts +58 -0
  117. package/src/shared/utils/test/elephant-trait-schema.ts +53 -0
  118. package/src/test/mock/models/mock-book-models.ts +78 -0
  119. package/src/test/mock/repositories/mock-memory-repository.assign.test.ts +215 -0
  120. package/src/test/mock/repositories/mock-memory-repository.basic.test.ts +129 -0
  121. package/src/test/mock/repositories/mock-memory-repository.bulk-upsert.test.ts +159 -0
  122. package/src/test/mock/repositories/mock-memory-repository.count.test.ts +98 -0
  123. package/src/test/mock/repositories/mock-memory-repository.search.test.ts +265 -0
  124. package/src/test/mock/repositories/mock-memory-repository.trash.test.ts +736 -0
  125. package/src/test/mock/repositories/mock-memory-repository.ts +401 -0
  126. package/src/test/mock/repositories/mock-memory-repository.upsert.test.ts +108 -0
  127. package/dist/databaseConnection.d.ts +0 -24
  128. package/dist/datastoreAbstract.d.ts +0 -37
  129. package/dist/declaro-data.cjs +0 -1
  130. package/dist/declaro-data.mjs +0 -250
  131. package/dist/hydrateEntity.d.ts +0 -8
  132. package/dist/index.d.ts +0 -4
  133. package/dist/serverConnection.d.ts +0 -15
  134. package/dist/trackedStatus.d.ts +0 -15
  135. package/src/databaseConnection.ts +0 -137
  136. package/src/datastoreAbstract.ts +0 -190
  137. package/src/hydrateEntity.ts +0 -36
  138. package/src/placeholder.test.ts +0 -7
  139. package/src/serverConnection.ts +0 -74
  140. package/src/trackedStatus.ts +0 -35
  141. package/tsconfig.json +0 -10
  142. package/vite.config.ts +0 -23
@@ -0,0 +1,60 @@
1
+ import type { AuthValidator } from '@declaro/auth';
2
+ import { PermissionValidator, type AnyModelSchema } from '@declaro/core';
3
+ import type { ModelService, ICreateOptions, IUpdateOptions } from '../domain/services/model-service';
4
+ import type { ILoadOptions } from '../domain/services/read-only-model-service';
5
+ import type { InferDetail, InferFilters, InferInput, InferLookup, InferSummary } from '../shared/utils/schema-inference';
6
+ import { ReadOnlyModelController } from './read-only-model-controller';
7
+ export declare class ModelController<TSchema extends AnyModelSchema> extends ReadOnlyModelController<TSchema> {
8
+ protected readonly service: ModelService<TSchema>;
9
+ protected readonly authValidator: AuthValidator;
10
+ constructor(service: ModelService<TSchema>, authValidator: AuthValidator);
11
+ createPermissions(input: InferInput<TSchema>, options?: ICreateOptions): Promise<PermissionValidator>;
12
+ create(input: InferInput<TSchema>, options?: ICreateOptions): Promise<InferDetail<TSchema>>;
13
+ updatePermissions(lookup: InferLookup<TSchema>, input: InferInput<TSchema>, options?: IUpdateOptions): Promise<PermissionValidator>;
14
+ update(lookup: InferLookup<TSchema>, input: InferInput<TSchema>, options?: IUpdateOptions): Promise<InferDetail<TSchema>>;
15
+ removePermissions(lookup: InferLookup<TSchema>, options?: ILoadOptions): Promise<PermissionValidator>;
16
+ remove(lookup: InferLookup<TSchema>, options?: ILoadOptions): Promise<InferSummary<TSchema>>;
17
+ restorePermissions(lookup: InferLookup<TSchema>, options?: ILoadOptions): Promise<PermissionValidator>;
18
+ restore(lookup: InferLookup<TSchema>, options?: ILoadOptions): Promise<InferSummary<TSchema>>;
19
+ upsertPermissions(input: InferInput<TSchema>, options?: ICreateOptions | IUpdateOptions): Promise<PermissionValidator>;
20
+ /**
21
+ * Upserts a record (creates if it doesn't exist, updates if it does).
22
+ * @param input The input data for the upsert operation.
23
+ * @param options Optional create or update options.
24
+ * @returns The upserted record.
25
+ */
26
+ upsert(input: InferInput<TSchema>, options?: ICreateOptions | IUpdateOptions): Promise<InferDetail<TSchema>>;
27
+ bulkUpsertPermissions(inputs: InferInput<TSchema>[], options?: ICreateOptions | IUpdateOptions): Promise<PermissionValidator>;
28
+ /**
29
+ * Bulk upserts multiple records (creates if they don't exist, updates if they do).
30
+ * @param inputs Array of input data for the bulk upsert operation.
31
+ * @param options Optional create or update options.
32
+ * @returns Array of upserted records.
33
+ */
34
+ bulkUpsert(inputs: InferInput<TSchema>[], options?: ICreateOptions | IUpdateOptions): Promise<InferDetail<TSchema>[]>;
35
+ permanentlyDeleteFromTrashPermissions(lookup: InferLookup<TSchema>): Promise<PermissionValidator>;
36
+ /**
37
+ * Permanently deletes a specific entity from the trash.
38
+ * Requires 'permanently-delete-from-trash', 'permanently-delete', or 'empty-trash' permission.
39
+ * @param lookup The lookup object containing entity identifiers
40
+ * @returns The permanently deleted entity summary
41
+ */
42
+ permanentlyDeleteFromTrash(lookup: InferLookup<TSchema>): Promise<InferSummary<TSchema>>;
43
+ permanentlyDeletePermissions(lookup: InferLookup<TSchema>): Promise<PermissionValidator>;
44
+ /**
45
+ * Permanently deletes an entity without moving it to trash first.
46
+ * Requires 'permanently-delete' permission.
47
+ * @param lookup The lookup object containing entity identifiers
48
+ * @returns The permanently deleted entity summary
49
+ */
50
+ permanentlyDelete(lookup: InferLookup<TSchema>): Promise<InferSummary<TSchema>>;
51
+ emptyTrashPermissions(filters?: InferFilters<TSchema>): Promise<PermissionValidator>;
52
+ /**
53
+ * Empties the trash by permanently deleting entities that have been marked as removed.
54
+ * Requires 'empty-trash' permission.
55
+ * @param filters Optional filters to apply when selecting entities to delete
56
+ * @returns The count of entities permanently deleted
57
+ */
58
+ emptyTrash(filters?: InferFilters<TSchema>): Promise<number>;
59
+ }
60
+ //# sourceMappingURL=model-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-controller.d.ts","sourceRoot":"","sources":["../../../src/application/model-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=model-controller.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-controller.test.d.ts","sourceRoot":"","sources":["../../../src/application/model-controller.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import type { AuthValidator } from '@declaro/auth';
2
+ import { PermissionValidator, type AnyModelSchema } from '@declaro/core';
3
+ import type { ILoadOptions, ISearchOptions, ReadOnlyModelService } from '../domain/services/read-only-model-service';
4
+ import type { InferDetail, InferFilters, InferLookup, InferSearchResults } from '../shared/utils/schema-inference';
5
+ export declare class ReadOnlyModelController<TSchema extends AnyModelSchema> {
6
+ protected readonly service: ReadOnlyModelService<TSchema>;
7
+ protected readonly authValidator: AuthValidator;
8
+ constructor(service: ReadOnlyModelService<TSchema>, authValidator: AuthValidator);
9
+ loadPermissions(lookup: InferLookup<TSchema>): Promise<PermissionValidator>;
10
+ load(lookup: InferLookup<TSchema>, options?: ILoadOptions): Promise<InferDetail<TSchema>>;
11
+ loadManyPermissions(lookups: InferLookup<TSchema>[]): Promise<PermissionValidator>;
12
+ loadMany(lookups: InferLookup<TSchema>[], options?: ILoadOptions): Promise<InferDetail<TSchema>[]>;
13
+ searchPermissions(input: InferFilters<TSchema>, options?: ISearchOptions<TSchema>): Promise<PermissionValidator>;
14
+ search(input: InferFilters<TSchema>, options?: ISearchOptions<TSchema>): Promise<InferSearchResults<TSchema>>;
15
+ countPermissions(input: InferFilters<TSchema>, options?: ISearchOptions<TSchema>): Promise<PermissionValidator>;
16
+ /**
17
+ * Count the number of records matching the given filters.
18
+ * @param input The filters to apply to the count operation.
19
+ * @param options Additional options for the count operation.
20
+ * @returns The count of matching records.
21
+ */
22
+ count(input: InferFilters<TSchema>, options?: ISearchOptions<TSchema>): Promise<number>;
23
+ }
24
+ //# sourceMappingURL=read-only-model-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-only-model-controller.d.ts","sourceRoot":"","sources":["../../../src/application/read-only-model-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAElD,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAA;AACpH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAElH,qBAAa,uBAAuB,CAAC,OAAO,SAAS,cAAc;IAE3D,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC;IACzD,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa;gBAD5B,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC,EACtC,aAAa,EAAE,aAAa;IAG7C,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAO3E,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAMzF,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAOlF,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;IAMlG,iBAAiB,CACnB,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,EAC5B,OAAO,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,GAClC,OAAO,CAAC,mBAAmB,CAAC;IAOzB,MAAM,CACR,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,EAC5B,OAAO,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,GAClC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAMjC,gBAAgB,CAClB,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,EAC5B,OAAO,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,GAClC,OAAO,CAAC,mBAAmB,CAAC;IAO/B;;;;;OAKG;IACG,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAKhG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=read-only-model-controller.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-only-model-controller.test.d.ts","sourceRoot":"","sources":["../../../src/application/read-only-model-controller.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ import type { IAuthSession } from '@declaro/auth';
2
+ import { type IEvent, type IActionDescriptor, ActionDescriptor, type IActionDescriptorInput } from '@declaro/core';
3
+ export interface IDomainEvent<T, M = any> extends IEvent {
4
+ eventId: string;
5
+ data?: T;
6
+ meta?: M;
7
+ timestamp: Date;
8
+ descriptor: IActionDescriptor;
9
+ session?: IAuthSession;
10
+ }
11
+ export interface IDomainEventOptions<TData, TMeta = any> {
12
+ type?: string;
13
+ eventId?: string;
14
+ data?: TData;
15
+ timestamp?: Date;
16
+ descriptor?: IActionDescriptorInput;
17
+ session?: IAuthSession;
18
+ meta?: TMeta;
19
+ }
20
+ export interface IDomainEventJSON<T, M = any> {
21
+ eventId: string;
22
+ data?: T;
23
+ meta: M;
24
+ timestamp: string;
25
+ type: string;
26
+ session?: {
27
+ id: string;
28
+ };
29
+ }
30
+ export declare class DomainEvent<T, M = any> implements IDomainEvent<T, M> {
31
+ readonly eventId: string;
32
+ data?: T;
33
+ timestamp: Date;
34
+ type: string;
35
+ descriptor: ActionDescriptor;
36
+ session?: IAuthSession;
37
+ meta: M;
38
+ constructor(options?: IDomainEventOptions<T, M>);
39
+ toJSON(): IDomainEventJSON<T, M>;
40
+ }
41
+ //# sourceMappingURL=domain-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-event.d.ts","sourceRoot":"","sources":["../../../../src/domain/events/domain-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAGlH,MAAM,WAAW,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAE,SAAQ,MAAM;IACpD,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,CAAC,CAAA;IACR,IAAI,CAAC,EAAE,CAAC,CAAA;IACR,SAAS,EAAE,IAAI,CAAA;IACf,UAAU,EAAE,iBAAiB,CAAA;IAC7B,OAAO,CAAC,EAAE,YAAY,CAAA;CACzB;AAED,MAAM,WAAW,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG;IACnD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,KAAK,CAAA;IACZ,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,IAAI,CAAC,EAAE,KAAK,CAAA;CACf;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,CAAC,CAAA;IACR,IAAI,EAAE,CAAC,CAAA;IACP,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CAC3B;AAED,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAE,YAAW,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,CAAC,CAAA;IACR,SAAS,EAAE,IAAI,CAAA;IACf,IAAI,EAAE,MAAM,CAAkB;IAC9B,UAAU,EAAE,gBAAgB,CAAA;IAC5B,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,IAAI,EAAE,CAAC,CAAA;gBAEF,OAAO,GAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAM;IAiBnD,MAAM,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;CAUnC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=domain-event.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-event.test.d.ts","sourceRoot":"","sources":["../../../../src/domain/events/domain-event.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ export declare enum ModelQueryEvent {
2
+ BeforeLoad = "beforeLoad",
3
+ AfterLoad = "afterLoad",
4
+ BeforeLoadMany = "beforeLoadMany",
5
+ AfterLoadMany = "afterLoadMany",
6
+ BeforeSearch = "beforeSearch",
7
+ AfterSearch = "afterSearch",
8
+ BeforeCount = "beforeCount",
9
+ AfterCount = "afterCount"
10
+ }
11
+ export declare enum ModelMutationAction {
12
+ Create = "create",
13
+ BeforeCreate = "beforeCreate",
14
+ AfterCreate = "afterCreate",
15
+ Update = "update",
16
+ BeforeUpdate = "beforeUpdate",
17
+ AfterUpdate = "afterUpdate",
18
+ Duplicate = "duplicate",
19
+ BeforeDuplicate = "beforeDuplicate",
20
+ AfterDuplicate = "afterDuplicate",
21
+ Remove = "remove",
22
+ BeforeRemove = "beforeRemove",
23
+ AfterRemove = "afterRemove",
24
+ Restore = "restore",
25
+ BeforeRestore = "beforeRestore",
26
+ AfterRestore = "afterRestore",
27
+ EmptyTrash = "emptyTrash",
28
+ BeforeEmptyTrash = "beforeEmptyTrash",
29
+ AfterEmptyTrash = "afterEmptyTrash",
30
+ PermanentlyDeleteFromTrash = "permanentlyDeleteFromTrash",
31
+ BeforePermanentlyDeleteFromTrash = "beforePermanentlyDeleteFromTrash",
32
+ AfterPermanentlyDeleteFromTrash = "afterPermanentlyDeleteFromTrash",
33
+ PermanentlyDelete = "permanentlyDelete",
34
+ BeforePermanentlyDelete = "beforePermanentlyDelete",
35
+ AfterPermanentlyDelete = "afterPermanentlyDelete"
36
+ }
37
+ //# sourceMappingURL=event-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-types.d.ts","sourceRoot":"","sources":["../../../../src/domain/events/event-types.ts"],"names":[],"mappings":"AAAA,oBAAY,eAAe;IACvB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;IAC3B,UAAU,eAAe;CAC5B;AAED,oBAAY,mBAAmB;IAC3B,MAAM,WAAW;IACjB,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,MAAM,WAAW;IACjB,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC,MAAM,WAAW;IACjB,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,gBAAgB,qBAAqB;IACrC,eAAe,oBAAoB;IACnC,0BAA0B,+BAA+B;IACzD,gCAAgC,qCAAqC;IACrE,+BAA+B,oCAAoC;IACnE,iBAAiB,sBAAsB;IACvC,uBAAuB,4BAA4B;IACnD,sBAAsB,2BAA2B;CACpD"}
@@ -0,0 +1,41 @@
1
+ import type { IActionDescriptorInput } from '@declaro/core';
2
+ import { RequestEvent, type IRequestEventMeta } from './request-event';
3
+ export interface IMutationEventMeta<TResult> extends IRequestEventMeta {
4
+ existing?: TResult;
5
+ }
6
+ export interface ICreateEventMeta<TResult, TInput> extends IMutationEventMeta<TResult> {
7
+ args?: {
8
+ input: TInput;
9
+ options?: Record<string, unknown>;
10
+ };
11
+ }
12
+ export interface IUpdateEventMeta<TResult, TLookup, TInput> extends IMutationEventMeta<TResult> {
13
+ args?: {
14
+ lookup: TLookup;
15
+ input: TInput;
16
+ options?: Record<string, unknown>;
17
+ };
18
+ }
19
+ export interface IRemoveEventMeta<TResult, TLookup> extends IMutationEventMeta<TResult> {
20
+ args?: {
21
+ lookup: TLookup;
22
+ options?: Record<string, unknown>;
23
+ };
24
+ }
25
+ export interface IRestoreEventMeta<TResult, TLookup> extends IMutationEventMeta<TResult> {
26
+ args?: {
27
+ lookup: TLookup;
28
+ options?: Record<string, unknown>;
29
+ };
30
+ }
31
+ export interface IDuplicateEventMeta<TResult, TLookup, TInput> extends IMutationEventMeta<TResult> {
32
+ args?: {
33
+ lookup: TLookup;
34
+ overrides?: Partial<TInput>;
35
+ options?: Record<string, unknown>;
36
+ };
37
+ }
38
+ export declare class MutationEvent<TResult, TInput, TMeta extends IMutationEventMeta<TResult> = IMutationEventMeta<TResult>> extends RequestEvent<TResult, TInput, TMeta> {
39
+ constructor(descriptor: IActionDescriptorInput, input: TInput, meta?: TMeta);
40
+ }
41
+ //# sourceMappingURL=mutation-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-event.d.ts","sourceRoot":"","sources":["../../../../src/domain/events/mutation-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEtE,MAAM,WAAW,kBAAkB,CAAC,OAAO,CAAE,SAAQ,iBAAiB;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAE,SAAQ,kBAAkB,CAAC,OAAO,CAAC;IAClF,IAAI,CAAC,EAAE;QACH,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACpC,CAAA;CACJ;AAED,MAAM,WAAW,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAE,SAAQ,kBAAkB,CAAC,OAAO,CAAC;IAC3F,IAAI,CAAC,EAAE;QACH,MAAM,EAAE,OAAO,CAAA;QACf,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACpC,CAAA;CACJ;AAED,MAAM,WAAW,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAE,SAAQ,kBAAkB,CAAC,OAAO,CAAC;IACnF,IAAI,CAAC,EAAE;QACH,MAAM,EAAE,OAAO,CAAA;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACpC,CAAA;CACJ;AAED,MAAM,WAAW,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAE,SAAQ,kBAAkB,CAAC,OAAO,CAAC;IACpF,IAAI,CAAC,EAAE;QACH,MAAM,EAAE,OAAO,CAAA;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACpC,CAAA;CACJ;AAED,MAAM,WAAW,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAE,SAAQ,kBAAkB,CAAC,OAAO,CAAC;IAC9F,IAAI,CAAC,EAAE;QACH,MAAM,EAAE,OAAO,CAAA;QACf,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACpC,CAAA;CACJ;AAED,qBAAa,aAAa,CACtB,OAAO,EACP,MAAM,EACN,KAAK,SAAS,kBAAkB,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,CACzE,SAAQ,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;gBAC9B,UAAU,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,KAAmB;CAG3F"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mutation-event.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-event.test.d.ts","sourceRoot":"","sources":["../../../../src/domain/events/mutation-event.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { IActionDescriptorInput } from '@declaro/core';
2
+ import { RequestEvent, type IRequestEventMeta } from './request-event';
3
+ export interface IQueryEventMeta<TResult> extends IRequestEventMeta {
4
+ }
5
+ export declare class QueryEvent<TResult, TParams, TMeta extends IQueryEventMeta<TResult> = IQueryEventMeta<TResult>> extends RequestEvent<TResult, TParams, TMeta> {
6
+ constructor(descriptor: IActionDescriptorInput, params: TParams, meta?: TMeta);
7
+ }
8
+ //# sourceMappingURL=query-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-event.d.ts","sourceRoot":"","sources":["../../../../src/domain/events/query-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEtE,MAAM,WAAW,eAAe,CAAC,OAAO,CAAE,SAAQ,iBAAiB;CAAG;AAEtE,qBAAa,UAAU,CACnB,OAAO,EACP,OAAO,EACP,KAAK,SAAS,eAAe,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,CACnE,SAAQ,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;gBAC/B,UAAU,EAAE,sBAAsB,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAE,KAAmB;CAG7F"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=query-event.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-event.test.d.ts","sourceRoot":"","sources":["../../../../src/domain/events/query-event.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import type { IActionDescriptorInput, Simplify } from '@declaro/core';
2
+ import { DomainEvent } from './domain-event';
3
+ export interface IRequestEventMeta {
4
+ }
5
+ export interface IRequestEventJSON<TInput, TMeta = IRequestEventMeta> extends Simplify<DomainEvent<TInput, TMeta>> {
6
+ input: TInput;
7
+ }
8
+ export declare class RequestEvent<TResult, TInput, TMeta extends IRequestEventMeta = IRequestEventMeta> extends DomainEvent<TResult, TMeta> {
9
+ input: TInput;
10
+ constructor(descriptor: IActionDescriptorInput, input: TInput, meta?: TMeta);
11
+ setInput(input: TInput): this;
12
+ setMeta(meta: Partial<TMeta>): this;
13
+ setResult(result: TResult): this;
14
+ toJSON(): {
15
+ input: TInput;
16
+ eventId: string;
17
+ data?: TResult | undefined;
18
+ meta: TMeta;
19
+ timestamp: string;
20
+ type: string;
21
+ session?: {
22
+ id: string;
23
+ };
24
+ };
25
+ }
26
+ //# sourceMappingURL=request-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-event.d.ts","sourceRoot":"","sources":["../../../../src/domain/events/request-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,MAAM,WAAW,iBAAiB;CAAG;AAErC,MAAM,WAAW,iBAAiB,CAAC,MAAM,EAAE,KAAK,GAAG,iBAAiB,CAAE,SAAQ,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9G,KAAK,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAS,iBAAiB,GAAG,iBAAiB,CAAE,SAAQ,WAAW,CAC/G,OAAO,EACP,KAAK,CACR;IACG,KAAK,EAAE,MAAM,CAAA;gBAED,UAAU,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,KAAmB;IASxF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI;IAKnC,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAMhC,MAAM;;;;;;;;;;;CAMT"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=request-event.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-event.test.d.ts","sourceRoot":"","sources":["../../../../src/domain/events/request-event.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,110 @@
1
+ import type { AnyModelSchema } from '@declaro/core';
2
+ import type { InferDetail, InferFilters, InferInput, InferLookup, InferSearchResults, InferSummary } from '../../shared/utils/schema-inference';
3
+ import type { ICreateOptions, IUpdateOptions } from '../services/model-service';
4
+ import type { ILoadOptions, ISearchOptions } from '../services/read-only-model-service';
5
+ export interface IRepository<TSchema extends AnyModelSchema> {
6
+ /**
7
+ * Loads a single element based on the provided lookup.
8
+ *
9
+ * @param input - The lookup criteria for the element.
10
+ * @returns A promise resolving to the detailed element or null if not found.
11
+ */
12
+ load(input: InferLookup<TSchema>, options?: ILoadOptions): Promise<InferDetail<TSchema> | null>;
13
+ /**
14
+ * Loads multiple elements based on the provided lookups.
15
+ *
16
+ * @param inputs - The lookup criteria for the elements.
17
+ * @returns A promise resolving to an array of detailed elements.
18
+ */
19
+ loadMany(inputs: InferLookup<TSchema>[], options?: ILoadOptions): Promise<InferDetail<TSchema>[]>;
20
+ /**
21
+ * Searches for elements based on filters and optional pagination.
22
+ *
23
+ * @param input - The filters to apply to the search.
24
+ * @param pagination - Optional pagination criteria.
25
+ * @returns A promise resolving to the search results.
26
+ */
27
+ search(input: InferFilters<TSchema>, options?: ISearchOptions<TSchema>): Promise<InferSearchResults<TSchema>>;
28
+ /**
29
+ * Deletes elements based on the provided lookups.
30
+ *
31
+ * @param lookup - The lookup criteria for the element to delete.
32
+ * @returns A promise resolving to the deleted list item.
33
+ */
34
+ remove(lookup: InferLookup<TSchema>, options?: ILoadOptions): Promise<InferSummary<TSchema>>;
35
+ /**
36
+ * Restores an element based on the provided lookups, if a soft-deleted copy exists.
37
+ *
38
+ * @param lookup - The lookup criteria for the element to restore.
39
+ * @returns A promise resolving to the restored list item.
40
+ */
41
+ restore(lookup: InferLookup<TSchema>, options?: ILoadOptions): Promise<InferSummary<TSchema>>;
42
+ /**
43
+ * Creates a new element based on the provided input.
44
+ *
45
+ * @param input - The input data for the new element.
46
+ * @returns A promise resolving to the detailed created element.
47
+ */
48
+ create(input: InferInput<TSchema>, options?: ICreateOptions): Promise<InferDetail<TSchema>>;
49
+ /**
50
+ * Updates elements based on filters.
51
+ *
52
+ * @param filters - The filters to apply to the update.
53
+ * @returns A promise resolving to the detailed updated element.
54
+ */
55
+ update(lookup: InferLookup<TSchema>, input: InferInput<TSchema>, options?: IUpdateOptions): Promise<InferDetail<TSchema>>;
56
+ /**
57
+ * Upserts an element based on the provided input.
58
+ * If the element exists, it will be updated; otherwise, a new element will be created.
59
+ *
60
+ * A load operation will be performed to check if the element exists. create/update related events will be dispatched accordingly.
61
+ *
62
+ * @param input - The input data for the new or existing element.
63
+ * @returns A promise resolving to the detailed created or updated element.
64
+ */
65
+ upsert(input: InferInput<TSchema>, options?: ICreateOptions | IUpdateOptions): Promise<InferDetail<TSchema>>;
66
+ /**
67
+ * Upserts multiple elements based on the provided inputs.
68
+ * If an element exists, it will be updated; otherwise, a new element will be created.
69
+ *
70
+ * A loadMany operation will be performed to check if the elements exist. create/update related events will be dispatched accordingly.
71
+ *
72
+ * @param inputs - The input data for the upsert operation.
73
+ * @returns A promise resolving to an array of detailed upserted elements.
74
+ */
75
+ bulkUpsert(inputs: InferInput<TSchema>[], options?: ICreateOptions | IUpdateOptions): Promise<InferDetail<TSchema>[]>;
76
+ /**
77
+ * Counts the number of elements matching the provided search criteria.
78
+ *
79
+ * @param search - The search criteria to apply.
80
+ * @returns A promise resolving to the count of matching elements.
81
+ */
82
+ count(search: InferFilters<TSchema>, options?: ISearchOptions<TSchema>): Promise<number>;
83
+ /**
84
+ * Permanently deletes all items from trash, optionally filtered by the provided criteria.
85
+ * Items deleted via this method cannot be restored.
86
+ *
87
+ * @param filters - Optional filters to apply when selecting items to delete from trash.
88
+ * @returns A promise resolving to the count of permanently deleted items.
89
+ */
90
+ emptyTrash(filters?: InferFilters<TSchema>): Promise<number>;
91
+ /**
92
+ * Permanently deletes a specific item from trash based on the provided lookup.
93
+ * The item must exist in trash (previously removed). Items deleted via this method cannot be restored.
94
+ *
95
+ * @param lookup - The lookup criteria for the item to permanently delete from trash.
96
+ * @returns A promise resolving to the permanently deleted item summary.
97
+ * @throws Error if the item is not found in trash.
98
+ */
99
+ permanentlyDeleteFromTrash(lookup: InferLookup<TSchema>): Promise<InferSummary<TSchema>>;
100
+ /**
101
+ * Permanently deletes an item based on the provided lookup, regardless of whether it is active or in trash.
102
+ * Items deleted via this method cannot be restored.
103
+ *
104
+ * @param lookup - The lookup criteria for the item to permanently delete.
105
+ * @returns A promise resolving to the permanently deleted item summary.
106
+ * @throws Error if the item is not found in either active data or trash.
107
+ */
108
+ permanentlyDelete(lookup: InferLookup<TSchema>): Promise<InferSummary<TSchema>>;
109
+ }
110
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../src/domain/interfaces/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import z from 'zod/v4';
2
+ import { ZodModel } from '@declaro/zod';
3
+ import { ModelSchema } from '@declaro/core';
4
+ export declare const PaginationInput: ZodModel<"PaginationInput", z.ZodObject<{
5
+ page: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodNumber>>>;
6
+ pageSize: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodNumber>>>;
7
+ }, z.core.$strip>>;
8
+ export type IPaginationInput = z.infer<typeof PaginationInput.schema>;
9
+ export declare const PaginationOutput: ZodModel<"PaginationOutput", z.ZodObject<{
10
+ page: z.ZodDefault<z.ZodNumber>;
11
+ pageSize: z.ZodDefault<z.ZodNumber>;
12
+ total: z.ZodDefault<z.ZodNumber>;
13
+ totalPages: z.ZodDefault<z.ZodNumber>;
14
+ }, z.core.$strip>>;
15
+ export type IPagination = z.infer<typeof PaginationOutput.schema>;
16
+ export declare const PaginationSchema: ModelSchema<"Pagination", {
17
+ input: ZodModel<"PaginationInput", z.ZodObject<{
18
+ page: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodNumber>>>;
19
+ pageSize: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodNumber>>>;
20
+ }, z.core.$strip>>;
21
+ output: ZodModel<"PaginationOutput", z.ZodObject<{
22
+ page: z.ZodDefault<z.ZodNumber>;
23
+ pageSize: z.ZodDefault<z.ZodNumber>;
24
+ total: z.ZodDefault<z.ZodNumber>;
25
+ totalPages: z.ZodDefault<z.ZodNumber>;
26
+ }, z.core.$strip>>;
27
+ }, undefined>;
28
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../../src/domain/models/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAA;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,eAAO,MAAM,eAAe;;;kBAM3B,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC,CAAA;AAErE,eAAO,MAAM,gBAAgB;;;;;kBAQ5B,CAAA;AACD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAA;AAEjE,eAAO,MAAM,gBAAgB;;;;;;;;;;;aAG3B,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { ActionDescriptor, type AnyModelSchema } from '@declaro/core';
2
+ import type { IModelServiceArgs } from './model-service-args';
3
+ import type { IRepository } from '../interfaces/repository';
4
+ import type { InferEntityMetadata, InferInput, InferLookup, InferPrimaryKeyType } from '../../shared/utils/schema-inference';
5
+ export interface IActionOptions {
6
+ /**
7
+ * The scope of the load operation, e.g., 'detail', 'list', etc.
8
+ */
9
+ scope?: string;
10
+ }
11
+ export declare class BaseModelService<TSchema extends AnyModelSchema> {
12
+ protected readonly namespace: string;
13
+ protected readonly schema: TSchema;
14
+ protected readonly entityMetadata: InferEntityMetadata<TSchema>;
15
+ protected readonly emitter: IModelServiceArgs<TSchema>['emitter'];
16
+ protected readonly repository: IRepository<TSchema>;
17
+ constructor(args: IModelServiceArgs<TSchema>);
18
+ getDescriptor(action: string, scope?: string): ActionDescriptor;
19
+ getPrimaryKeyValue(input: InferLookup<TSchema>): InferPrimaryKeyType<TSchema>;
20
+ getPrimaryKeyValue(input: InferInput<TSchema>): InferPrimaryKeyType<TSchema>;
21
+ getSchema(): TSchema;
22
+ }
23
+ //# sourceMappingURL=base-model-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-model-service.d.ts","sourceRoot":"","sources":["../../../../src/domain/services/base-model-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAoB,MAAM,eAAe,CAAA;AACvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,EACR,mBAAmB,EACnB,UAAU,EACV,WAAW,EACX,mBAAmB,EACtB,MAAM,qCAAqC,CAAA;AAE5C,MAAM,WAAW,cAAc;IAC3B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,gBAAgB,CAAC,OAAO,SAAS,cAAc;IACxD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IACpC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IAClC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAA;IAC/D,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAA;IACjE,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;gBAEvC,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC;IAQ5C,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAS5C,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC;IAC7E,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC;IAQrE,SAAS;CAGnB"}
@@ -0,0 +1,9 @@
1
+ import type { AnyModelSchema, EventManager } from '@declaro/core';
2
+ import type { IRepository } from '../interfaces/repository';
3
+ export interface IModelServiceArgs<TSchema extends AnyModelSchema> {
4
+ schema: TSchema;
5
+ namespace?: string;
6
+ emitter: EventManager;
7
+ repository: IRepository<TSchema>;
8
+ }
9
+ //# sourceMappingURL=model-service-args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-service-args.d.ts","sourceRoot":"","sources":["../../../../src/domain/services/model-service-args.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAE3D,MAAM,WAAW,iBAAiB,CAAC,OAAO,SAAS,cAAc;IAC7D,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,YAAY,CAAA;IACrB,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CACnC"}
@@ -0,0 +1,99 @@
1
+ import type { ActionDescriptor, AnyModelSchema } from '@declaro/core';
2
+ import type { InferDetail, InferFilters, InferInput, InferLookup, InferSummary } from '../../shared/utils/schema-inference';
3
+ import type { IModelServiceArgs } from './model-service-args';
4
+ import { ReadOnlyModelService, type ILoadOptions } from './read-only-model-service';
5
+ import type { IActionOptions } from './base-model-service';
6
+ export interface ICreateOptions extends IActionOptions {
7
+ /**
8
+ * If true, skips dispatching events for this action.
9
+ */
10
+ doNotDispatchEvents?: boolean;
11
+ }
12
+ export interface IUpdateOptions extends IActionOptions {
13
+ /**
14
+ * If true, skips dispatching events for this action.
15
+ */
16
+ doNotDispatchEvents?: boolean;
17
+ }
18
+ export interface INormalizeInputArgs<TSchema extends AnyModelSchema> {
19
+ existing?: InferDetail<TSchema>;
20
+ descriptor: ActionDescriptor;
21
+ }
22
+ export declare class ModelService<TSchema extends AnyModelSchema> extends ReadOnlyModelService<TSchema> {
23
+ constructor(args: IModelServiceArgs<TSchema>);
24
+ /**
25
+ * Normalizes input data before processing. This method can be overridden by subclasses
26
+ * to implement custom input normalization logic (e.g., trimming strings, setting defaults, etc.).
27
+ * By default, this method returns the input unchanged.
28
+ * @param input The input data to normalize.
29
+ * @returns The normalized input data.
30
+ */
31
+ protected normalizeInput(input: InferInput<TSchema>, args: INormalizeInputArgs<TSchema>): Promise<InferInput<TSchema>>;
32
+ /**
33
+ * Converts a detail object to a valid input for this service's schema.
34
+ * Picks only fields that exist in the input model and validates/coerces
35
+ * them through the input schema. Useful for duplicating entities or
36
+ * converting a detail from one entity type into an input for another.
37
+ * @param detail The detail object to convert (can be from any schema).
38
+ * @returns A validated input object with coerced values.
39
+ */
40
+ detailsToInput(detail: Record<string, unknown>): Promise<InferInput<TSchema>>;
41
+ /**
42
+ * Duplicates an existing entity by loading it, converting to input, removing the
43
+ * primary key, and creating a new record. Accepts an optional partial input to
44
+ * merge on top of the converted copy before creation.
45
+ * @param lookup The lookup criteria to find the record to duplicate.
46
+ * @param overrides Optional partial input to merge on top of the duplicated data.
47
+ * @param options Optional create options.
48
+ * @returns The newly created duplicate record.
49
+ */
50
+ duplicate(lookup: InferLookup<TSchema>, overrides?: Partial<InferInput<TSchema>>, options?: ICreateOptions): Promise<InferDetail<TSchema>>;
51
+ /**
52
+ * Removes a record by its lookup criteria.
53
+ * @param lookup The lookup criteria to find the record.
54
+ * @returns The removed record.
55
+ */
56
+ remove(lookup: InferLookup<TSchema>, options?: ILoadOptions): Promise<InferSummary<TSchema>>;
57
+ /**
58
+ * Restores a record by its lookup criteria.
59
+ * If a soft-deleted copy exists, it will be restored.
60
+ * @param lookup The lookup criteria to find the record to restore.
61
+ * @returns
62
+ */
63
+ restore(lookup: InferLookup<TSchema>, options?: ILoadOptions): Promise<InferSummary<TSchema>>;
64
+ create(input: InferInput<TSchema>, options?: ICreateOptions): Promise<InferDetail<TSchema>>;
65
+ update(lookup: InferLookup<TSchema>, input: InferInput<TSchema>, options?: IUpdateOptions): Promise<InferDetail<TSchema>>;
66
+ /**
67
+ * Upserts a record (creates if it doesn't exist, updates if it does).
68
+ * @param input The input data for the upsert operation.
69
+ * @param options Optional create or update options.
70
+ * @returns The upserted record.
71
+ */
72
+ upsert(input: InferInput<TSchema>, options?: ICreateOptions | IUpdateOptions): Promise<InferDetail<TSchema>>;
73
+ /**
74
+ * Bulk upserts multiple records (creates if they don't exist, updates if they do).
75
+ * @param inputs Array of input data for the bulk upsert operation.
76
+ * @param options Optional create or update options.
77
+ * @returns Array of upserted records.
78
+ */
79
+ bulkUpsert(inputs: InferInput<TSchema>[], options?: ICreateOptions | IUpdateOptions): Promise<InferDetail<TSchema>[]>;
80
+ /**
81
+ * Permanently deletes all items from trash, optionally filtered by the provided criteria.
82
+ * @param filters Optional filters to apply when selecting items to delete from trash.
83
+ * @returns The count of permanently deleted items.
84
+ */
85
+ emptyTrash(filters?: InferFilters<TSchema>): Promise<number>;
86
+ /**
87
+ * Permanently deletes a specific item from trash based on the provided lookup.
88
+ * @param lookup The lookup criteria for the item to permanently delete from trash.
89
+ * @returns The permanently deleted item summary.
90
+ */
91
+ permanentlyDeleteFromTrash(lookup: InferLookup<TSchema>): Promise<InferSummary<TSchema>>;
92
+ /**
93
+ * Permanently deletes an item based on the provided lookup, regardless of whether it is active or in trash.
94
+ * @param lookup The lookup criteria for the item to permanently delete.
95
+ * @returns The permanently deleted item summary.
96
+ */
97
+ permanentlyDelete(lookup: InferLookup<TSchema>): Promise<InferSummary<TSchema>>;
98
+ }
99
+ //# sourceMappingURL=model-service.d.ts.map