@tstdl/base 0.91.49 → 0.91.51

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 (164) hide show
  1. package/ai/data-extracting.d.ts +1 -0
  2. package/ai/data-extracting.js +62 -0
  3. package/authentication/server/authentication.api-controller.js +4 -4
  4. package/cancellation/token.d.ts +1 -2
  5. package/cancellation/token.js +1 -1
  6. package/core.d.ts +1 -1
  7. package/core.js +1 -1
  8. package/document-management/api/document-management.api.d.ts +376 -0
  9. package/document-management/api/document-management.api.js +208 -0
  10. package/document-management/api/index.d.ts +1 -0
  11. package/document-management/api/index.js +1 -0
  12. package/document-management/drizzle/0000_wakeful_firebrand.sql +228 -0
  13. package/document-management/drizzle/meta/0000_snapshot.json +1538 -0
  14. package/document-management/drizzle/meta/_journal.json +13 -0
  15. package/document-management/drizzle.config.d.ts +2 -0
  16. package/document-management/drizzle.config.js +11 -0
  17. package/document-management/index.d.ts +2 -0
  18. package/document-management/index.js +2 -0
  19. package/document-management/localizations/english.d.ts +2 -0
  20. package/document-management/localizations/english.js +9 -0
  21. package/document-management/localizations/german.d.ts +2 -0
  22. package/document-management/localizations/german.js +9 -0
  23. package/document-management/localizations/index.d.ts +5 -0
  24. package/document-management/localizations/index.js +9 -0
  25. package/document-management/localizations/localization.d.ts +9 -0
  26. package/document-management/localizations/localization.js +2 -0
  27. package/document-management/models/document-category.model.d.ts +4 -0
  28. package/document-management/models/document-category.model.js +18 -0
  29. package/document-management/models/document-collection-document.model.d.ts +7 -0
  30. package/document-management/models/document-collection-document.model.js +33 -0
  31. package/document-management/models/document-collection.model.d.ts +3 -0
  32. package/document-management/models/document-collection.model.js +14 -0
  33. package/document-management/models/document-file.model.d.ts +7 -0
  34. package/document-management/models/document-file.model.js +33 -0
  35. package/document-management/models/document-property-value.model.d.ts +21 -0
  36. package/document-management/models/document-property-value.model.js +58 -0
  37. package/document-management/models/document-property.model.d.ts +11 -0
  38. package/document-management/models/document-property.model.js +30 -0
  39. package/document-management/models/document-request-collection.model.d.ts +6 -0
  40. package/document-management/models/document-request-collection.model.js +28 -0
  41. package/document-management/models/document-request-file.model.d.ts +11 -0
  42. package/document-management/models/document-request-file.model.js +56 -0
  43. package/document-management/models/document-request-template.d.ts +10 -0
  44. package/document-management/models/document-request-template.js +39 -0
  45. package/document-management/models/document-request.model.d.ts +9 -0
  46. package/document-management/models/document-request.model.js +37 -0
  47. package/document-management/models/document-requests-template.d.ts +5 -0
  48. package/document-management/models/document-requests-template.js +23 -0
  49. package/document-management/models/document-type-property.model.d.ts +6 -0
  50. package/document-management/models/document-type-property.model.js +28 -0
  51. package/document-management/models/document-type.model.d.ts +7 -0
  52. package/document-management/models/document-type.model.js +32 -0
  53. package/document-management/models/document.model.d.ts +9 -0
  54. package/document-management/models/document.model.js +44 -0
  55. package/document-management/models/index.d.ts +15 -0
  56. package/document-management/models/index.js +15 -0
  57. package/document-management/models/schemas.d.ts +33 -0
  58. package/document-management/models/schemas.js +34 -0
  59. package/document-management/models/service-models/categories-and-types.view-model.d.ts +6 -0
  60. package/document-management/models/service-models/categories-and-types.view-model.js +24 -0
  61. package/document-management/models/service-models/document-folders.view-model.d.ts +22 -0
  62. package/document-management/models/service-models/document-folders.view-model.js +56 -0
  63. package/document-management/models/service-models/document-requests-template.view-model.d.ts +8 -0
  64. package/document-management/models/service-models/document-requests-template.view-model.js +26 -0
  65. package/document-management/models/service-models/document.service-model.d.ts +262 -0
  66. package/document-management/models/service-models/document.service-model.js +50 -0
  67. package/document-management/models/service-models/document.view-model.d.ts +33 -0
  68. package/document-management/models/service-models/document.view-model.js +99 -0
  69. package/document-management/models/service-models/index.d.ts +8 -0
  70. package/document-management/models/service-models/index.js +8 -0
  71. package/document-management/models/service-models/normalized-document-collection-view.model.d.ts +73 -0
  72. package/document-management/models/service-models/normalized-document-collection-view.model.js +110 -0
  73. package/document-management/models/service-models/normalized-requests-template-data.model.d.ts +16 -0
  74. package/document-management/models/service-models/normalized-requests-template-data.model.js +13 -0
  75. package/document-management/models/service-models/stats.view-model.d.ts +6 -0
  76. package/document-management/models/service-models/stats.view-model.js +32 -0
  77. package/document-management/module.d.ts +11 -0
  78. package/document-management/module.js +27 -0
  79. package/document-management/services/document-management.service.d.ts +65 -0
  80. package/document-management/services/document-management.service.js +376 -0
  81. package/document-management/services/index.d.ts +1 -0
  82. package/document-management/services/index.js +1 -0
  83. package/examples/document-management/main.d.ts +1 -0
  84. package/examples/document-management/main.js +30 -0
  85. package/examples/orm/drizzle.config.js +2 -1
  86. package/examples/orm/schemas.d.ts +1 -1
  87. package/examples/orm/user.model.d.ts +1 -2
  88. package/examples/orm/user.model.js +0 -1
  89. package/http/server/node/node-http-server.js +5 -5
  90. package/injector/injector.d.ts +4 -1
  91. package/injector/injector.js +4 -1
  92. package/injector/interfaces.d.ts +3 -3
  93. package/json-path/json-path.d.ts +2 -0
  94. package/json-path/json-path.js +7 -0
  95. package/message-bus/message-bus.d.ts +4 -6
  96. package/orm/database-schema.d.ts +3 -0
  97. package/orm/database-schema.js +6 -2
  98. package/orm/database.d.ts +6 -0
  99. package/orm/database.js +14 -0
  100. package/orm/decorators.d.ts +25 -2
  101. package/orm/decorators.js +15 -0
  102. package/orm/drizzle/index.d.ts +1 -0
  103. package/orm/drizzle/index.js +1 -0
  104. package/orm/drizzle/schema-converter.d.ts +37 -8
  105. package/orm/drizzle/schema-converter.js +121 -40
  106. package/orm/entity.d.ts +15 -12
  107. package/orm/entity.js +24 -11
  108. package/orm/index.d.ts +3 -2
  109. package/orm/index.js +3 -2
  110. package/orm/module.d.ts +6 -0
  111. package/orm/module.js +15 -0
  112. package/orm/query-converter.d.ts +5 -0
  113. package/orm/query-converter.js +114 -0
  114. package/orm/query.d.ts +15 -13
  115. package/orm/repository.d.ts +90 -31
  116. package/orm/repository.js +357 -55
  117. package/orm/schemas/index.d.ts +3 -0
  118. package/orm/schemas/index.js +3 -0
  119. package/orm/schemas/json.d.ts +9 -0
  120. package/orm/schemas/json.js +19 -0
  121. package/orm/schemas/numeric-date.d.ts +8 -0
  122. package/orm/schemas/numeric-date.js +13 -0
  123. package/orm/schemas/timestamp.d.ts +10 -0
  124. package/orm/schemas/timestamp.js +20 -0
  125. package/orm/transaction.d.ts +29 -0
  126. package/orm/transaction.js +73 -0
  127. package/orm/types.d.ts +15 -8
  128. package/orm/types.js +3 -2
  129. package/package.json +22 -12
  130. package/{rxjs → rxjs-utils}/reject-error.d.ts +1 -1
  131. package/{rxjs → rxjs-utils}/retry-backoff.d.ts +2 -2
  132. package/{rxjs → rxjs-utils}/slow-array.d.ts +7 -7
  133. package/{rxjs → rxjs-utils}/slow-array.js +2 -2
  134. package/{rxjs → rxjs-utils}/start-with-provider.d.ts +1 -1
  135. package/{rxjs → rxjs-utils}/teardown.d.ts +1 -1
  136. package/{rxjs → rxjs-utils}/untrack.d.ts +1 -1
  137. package/schema/decorators/types.d.ts +2 -2
  138. package/schema/schemas/number.d.ts +1 -1
  139. package/signals/pipe.d.ts +1 -1
  140. package/signals/pipe.js +1 -2
  141. package/sse/server-sent-events.d.ts +54 -0
  142. package/sse/server-sent-events.js +54 -0
  143. package/types.d.ts +6 -2
  144. package/utils/comparison.d.ts +2 -1
  145. package/utils/comparison.js +4 -3
  146. package/utils/compression.d.ts +4 -4
  147. package/utils/compression.js +35 -43
  148. package/utils/object/dereference.d.ts +6 -4
  149. package/utils/object/dereference.js +20 -8
  150. package/utils/object/object.d.ts +2 -0
  151. package/utils/object/object.js +20 -0
  152. /package/{rxjs → rxjs-utils}/cast.d.ts +0 -0
  153. /package/{rxjs → rxjs-utils}/cast.js +0 -0
  154. /package/{rxjs → rxjs-utils}/index.d.ts +0 -0
  155. /package/{rxjs → rxjs-utils}/index.js +0 -0
  156. /package/{rxjs → rxjs-utils}/noop.d.ts +0 -0
  157. /package/{rxjs → rxjs-utils}/noop.js +0 -0
  158. /package/{rxjs → rxjs-utils}/reject-error.js +0 -0
  159. /package/{rxjs → rxjs-utils}/retry-backoff.js +0 -0
  160. /package/{rxjs → rxjs-utils}/start-with-provider.js +0 -0
  161. /package/{rxjs → rxjs-utils}/teardown.js +0 -0
  162. /package/{rxjs → rxjs-utils}/timing.d.ts +0 -0
  163. /package/{rxjs → rxjs-utils}/timing.js +0 -0
  164. /package/{rxjs → rxjs-utils}/untrack.js +0 -0
@@ -0,0 +1,50 @@
1
+ import { EntityMetadata } from '../../../orm/entity.js';
2
+ import { array, assign, nullable, object, omit, oneOrMany, optional, partial, pick, record, string, unknown } from '../../../schema/index.js';
3
+ import { DocumentCategory } from '../document-category.model.js';
4
+ import { DocumentCollectionDocument } from '../document-collection-document.model.js';
5
+ import { DocumentFile } from '../document-file.model.js';
6
+ import { DocumentPropertyValueBase } from '../document-property-value.model.js';
7
+ import { DocumentProperty } from '../document-property.model.js';
8
+ import { DocumentRequestFile } from '../document-request-file.model.js';
9
+ import { DocumentRequestTemplate } from '../document-request-template.js';
10
+ import { DocumentRequest } from '../document-request.model.js';
11
+ import { DocumentRequestsTemplate } from '../document-requests-template.js';
12
+ import { DocumentTypeProperty } from '../document-type-property.model.js';
13
+ import { DocumentType } from '../document-type.model.js';
14
+ import { Document } from '../document.model.js';
15
+ export const metadataParameterSchema = optional(partial(pick(EntityMetadata, 'attributes')));
16
+ export const metadataParameterObjectSchema = object({ metadata: metadataParameterSchema });
17
+ export const setDocumentPropertyParametersSchema = assign(pick(DocumentPropertyValueBase, ['documentId', 'propertyId']), object({ value: unknown() }), metadataParameterObjectSchema);
18
+ export const createDocumentParametersSchema = assign(pick(Document, ['typeId', 'addition', 'date', 'expiration']), pick(DocumentFile, ['originalFileName']), object({
19
+ collectionIds: oneOrMany(string()),
20
+ properties: optional(array(omit(setDocumentPropertyParametersSchema, ['documentId'])))
21
+ }), metadataParameterObjectSchema);
22
+ export const updateDocumentParametersSchema = assign(pick(Document, ['id']), partial(omit(Document, ['id', 'metadata'])), object({ properties: optional(array(omit(setDocumentPropertyParametersSchema, ['documentId']))) }), metadataParameterObjectSchema);
23
+ export const createDocumentRequestsTemplateParametersSchema = assign(pick(DocumentRequestsTemplate, ['label', 'description']), metadataParameterObjectSchema);
24
+ export const updateDocumentRequestsTemplateParametersSchema = assign(pick(DocumentRequestsTemplate, ['id']), partial(omit(DocumentRequestsTemplate, ['id', 'metadata'])), metadataParameterObjectSchema);
25
+ export const applyDocumentRequestsTemplateParametersSchema = assign(pick(DocumentRequestsTemplate, ['id']), object({ collectionIds: array(string()) }), metadataParameterObjectSchema);
26
+ export const deleteDocumentRequestsTemplateParametersSchema = assign(pick(DocumentRequestsTemplate, ['id']), metadataParameterObjectSchema);
27
+ export const createDocumentRequestTemplateParametersSchema = assign(pick(DocumentRequestTemplate, ['requestsTemplateId', 'typeId', 'requiredFilesCount', 'comment']), metadataParameterObjectSchema);
28
+ export const updateDocumentRequestTemplateParametersSchema = assign(pick(DocumentRequestTemplate, ['id']), partial(omit(DocumentRequestTemplate, ['id', 'requestsTemplateId', 'metadata'])), metadataParameterObjectSchema);
29
+ export const deleteDocumentRequestTemplateParametersSchema = assign(pick(DocumentRequestTemplate, ['id']), metadataParameterObjectSchema);
30
+ export const createDocumentRequestParametersSchema = assign(pick(DocumentRequest, ['typeId', 'requiredFilesCount', 'comment']), object({ collectionIds: array(string()) }), metadataParameterObjectSchema);
31
+ export const updateDocumentRequestParametersSchema = assign(pick(DocumentRequest, ['id']), partial(omit(DocumentRequest, ['id', 'metadata'])), metadataParameterObjectSchema);
32
+ export const deleteDocumentRequestParametersSchema = assign(pick(DocumentRequest, ['id']), metadataParameterObjectSchema);
33
+ export const updateDocumentRequestFileParametersSchema = assign(pick(DocumentRequestFile, ['id']), partial(omit(DocumentRequestFile, ['id', 'requestId', 'fileId', 'createdDocumentId', 'approval', 'metadata'])), metadataParameterObjectSchema);
34
+ export const deleteDocumentRequestFileParametersSchema = assign(pick(DocumentRequestFile, ['id']), metadataParameterObjectSchema);
35
+ export const loadDataCollectionMetadataParametersSchema = object({ name: optional(nullable(string())), group: optional(nullable(string())) });
36
+ export const loadDataCollectionsMetadataParametersSchema = record(string(), loadDataCollectionMetadataParametersSchema);
37
+ export const loadDataParametersSchema = object({ collectionIds: oneOrMany(string()), collectionsMetadata: loadDataCollectionsMetadataParametersSchema });
38
+ export const createCollectionParametersSchema = metadataParameterObjectSchema;
39
+ export const setDocumentPropertiesParametersSchema = array(setDocumentPropertyParametersSchema);
40
+ export const createDocumentCategoryParametersSchema = assign(pick(DocumentCategory, ['label']), metadataParameterObjectSchema);
41
+ export const createDocumentTypeParametersSchema = assign(pick(DocumentType, ['categoryId', 'group', 'label']), metadataParameterObjectSchema);
42
+ export const createDocumentRequestFileParametersSchema = assign(object({ requestId: string() }), pick(DocumentRequestFile, ['addition']), pick(DocumentFile, ['originalFileName']), metadataParameterObjectSchema);
43
+ export const approveDocumentRequestFileParametersSchema = assign(pick(DocumentRequestFile, ['id', 'approvalComment']), object({
44
+ documentMetadata: metadataParameterSchema,
45
+ requestFileMetadata: metadataParameterSchema
46
+ }));
47
+ export const rejectDocumentRequestFileParametersSchema = assign(pick(DocumentRequestFile, ['id', 'approvalComment']), metadataParameterObjectSchema);
48
+ export const createDocumentPropertyParametersSchema = assign(pick(DocumentProperty, ['label', 'dataType']), metadataParameterObjectSchema);
49
+ export const assignPropertyToTypeParametersSchema = assign(pick(DocumentTypeProperty, ['typeId', 'propertyId']), metadataParameterObjectSchema);
50
+ export const addOrArchiveDocumentToOrFromCollectionParametersSchema = assign(pick(DocumentCollectionDocument, ['collectionId', 'documentId']), metadataParameterObjectSchema);
@@ -0,0 +1,33 @@
1
+ import { Timestamp } from '../../../orm/types.js';
2
+ import { DocumentCategory } from '../document-category.model.js';
3
+ import { DocumentCollection } from '../document-collection.model.js';
4
+ import { DocumentFile } from '../document-file.model.js';
5
+ import { DocumentPropertyValue } from '../document-property-value.model.js';
6
+ import { DocumentRequestFile } from '../document-request-file.model.js';
7
+ import { DocumentRequest } from '../document-request.model.js';
8
+ import { DocumentType } from '../document-type.model.js';
9
+ import { Document } from '../document.model.js';
10
+ export declare class DocumentCollectionView extends DocumentCollection {
11
+ name: string | null;
12
+ group: string | null;
13
+ }
14
+ export declare class DocumentViewCollectionAssignment {
15
+ collectionId: string;
16
+ archiveTimestamp: Timestamp | null;
17
+ }
18
+ export declare class DocumentView extends Document {
19
+ collectionAssignments: DocumentViewCollectionAssignment[];
20
+ properties: DocumentPropertyValue[];
21
+ }
22
+ export declare class DocumentRequestView extends DocumentRequest {
23
+ collectionIds: string[];
24
+ requestFiles: DocumentRequestFile[];
25
+ }
26
+ export declare class DocumentManagementData {
27
+ collections: DocumentCollectionView[];
28
+ documents: DocumentView[];
29
+ requests: DocumentRequestView[];
30
+ files: DocumentFile[];
31
+ categories: DocumentCategory[];
32
+ types: DocumentType[];
33
+ }
@@ -0,0 +1,99 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Timestamp } from '../../../orm/types.js';
11
+ import { Array, StringProperty } from '../../../schema/index.js';
12
+ import { DocumentCategory } from '../document-category.model.js';
13
+ import { DocumentCollection } from '../document-collection.model.js';
14
+ import { DocumentFile } from '../document-file.model.js';
15
+ import { documentPropertyValueSchema } from '../document-property-value.model.js';
16
+ import { DocumentRequestFile } from '../document-request-file.model.js';
17
+ import { DocumentRequest } from '../document-request.model.js';
18
+ import { DocumentType } from '../document-type.model.js';
19
+ import { Document } from '../document.model.js';
20
+ export class DocumentCollectionView extends DocumentCollection {
21
+ name;
22
+ group;
23
+ }
24
+ __decorate([
25
+ StringProperty({ nullable: true }),
26
+ __metadata("design:type", Object)
27
+ ], DocumentCollectionView.prototype, "name", void 0);
28
+ __decorate([
29
+ StringProperty({ nullable: true }),
30
+ __metadata("design:type", Object)
31
+ ], DocumentCollectionView.prototype, "group", void 0);
32
+ export class DocumentViewCollectionAssignment {
33
+ collectionId;
34
+ archiveTimestamp;
35
+ }
36
+ __decorate([
37
+ StringProperty(),
38
+ __metadata("design:type", String)
39
+ ], DocumentViewCollectionAssignment.prototype, "collectionId", void 0);
40
+ __decorate([
41
+ Timestamp({ nullable: true }),
42
+ __metadata("design:type", Object)
43
+ ], DocumentViewCollectionAssignment.prototype, "archiveTimestamp", void 0);
44
+ export class DocumentView extends Document {
45
+ collectionAssignments;
46
+ properties;
47
+ }
48
+ __decorate([
49
+ Array(DocumentViewCollectionAssignment),
50
+ __metadata("design:type", Array)
51
+ ], DocumentView.prototype, "collectionAssignments", void 0);
52
+ __decorate([
53
+ Array(documentPropertyValueSchema),
54
+ __metadata("design:type", Array)
55
+ ], DocumentView.prototype, "properties", void 0);
56
+ export class DocumentRequestView extends DocumentRequest {
57
+ collectionIds;
58
+ requestFiles;
59
+ }
60
+ __decorate([
61
+ Array(String),
62
+ __metadata("design:type", Array)
63
+ ], DocumentRequestView.prototype, "collectionIds", void 0);
64
+ __decorate([
65
+ Array(DocumentRequestFile),
66
+ __metadata("design:type", Array)
67
+ ], DocumentRequestView.prototype, "requestFiles", void 0);
68
+ export class DocumentManagementData {
69
+ collections;
70
+ documents;
71
+ requests;
72
+ files;
73
+ categories;
74
+ types;
75
+ }
76
+ __decorate([
77
+ Array(DocumentCollectionView),
78
+ __metadata("design:type", Array)
79
+ ], DocumentManagementData.prototype, "collections", void 0);
80
+ __decorate([
81
+ Array(DocumentView),
82
+ __metadata("design:type", Array)
83
+ ], DocumentManagementData.prototype, "documents", void 0);
84
+ __decorate([
85
+ Array(DocumentRequestView),
86
+ __metadata("design:type", Array)
87
+ ], DocumentManagementData.prototype, "requests", void 0);
88
+ __decorate([
89
+ Array(DocumentFile),
90
+ __metadata("design:type", Array)
91
+ ], DocumentManagementData.prototype, "files", void 0);
92
+ __decorate([
93
+ Array(DocumentCategory),
94
+ __metadata("design:type", Array)
95
+ ], DocumentManagementData.prototype, "categories", void 0);
96
+ __decorate([
97
+ Array(DocumentType),
98
+ __metadata("design:type", Array)
99
+ ], DocumentManagementData.prototype, "types", void 0);
@@ -0,0 +1,8 @@
1
+ export * from './categories-and-types.view-model.js';
2
+ export * from './document-folders.view-model.js';
3
+ export * from './document-requests-template.view-model.js';
4
+ export * from './document.service-model.js';
5
+ export * from './document.view-model.js';
6
+ export * from './normalized-document-collection-view.model.js';
7
+ export * from './normalized-requests-template-data.model.js';
8
+ export * from './stats.view-model.js';
@@ -0,0 +1,8 @@
1
+ export * from './categories-and-types.view-model.js';
2
+ export * from './document-folders.view-model.js';
3
+ export * from './document-requests-template.view-model.js';
4
+ export * from './document.service-model.js';
5
+ export * from './document.view-model.js';
6
+ export * from './normalized-document-collection-view.model.js';
7
+ export * from './normalized-requests-template-data.model.js';
8
+ export * from './stats.view-model.js';
@@ -0,0 +1,73 @@
1
+ import type { TypedOmit } from '../../../types.js';
2
+ import type { DocumentCategory } from '../document-category.model.js';
3
+ import type { DocumentCollection } from '../document-collection.model.js';
4
+ import type { DocumentFile } from '../document-file.model.js';
5
+ import type { DocumentRequestFile } from '../document-request-file.model.js';
6
+ import type { DocumentType } from '../document-type.model.js';
7
+ import type { DocumentManagementData, DocumentRequestView, DocumentView } from './document.view-model.js';
8
+ export type RequestMetadata = {
9
+ pendingRequestFilesCount: number;
10
+ approvedRequestFilesCount: number;
11
+ rejectedRequestFilesCount: number;
12
+ requiredFilesLeft: number;
13
+ };
14
+ export type RequestsMetadata = RequestMetadata & {
15
+ requiredFilesCount: number;
16
+ };
17
+ export type GroupedCollectionsItem = RequestsMetadata & {
18
+ group: string | null;
19
+ collections: NormalizedDocumentCollectionView[];
20
+ };
21
+ export type NormalizedDocumentManagementData = TypedOmit<DocumentManagementData, 'collections' | 'documents' | 'requests' | 'categories' | 'types'> & RequestsMetadata & {
22
+ collections: NormalizedDocumentCollectionView[];
23
+ groupedCollections: GroupedCollectionsItem[];
24
+ documents: NormalizedDocumentView[];
25
+ requests: NormalizedDocumentRequestView[];
26
+ categories: NormalizedDocumentCategory[];
27
+ types: NormalizedDocumentType[];
28
+ };
29
+ export type GroupedRequestsItem = {
30
+ category: NormalizedDocumentCategory | null;
31
+ groups: ({
32
+ label: string | null;
33
+ requests: NormalizedDocumentRequestView[];
34
+ } & RequestsMetadata)[];
35
+ };
36
+ export type NormalizedDocumentCollectionView = DocumentCollection & RequestsMetadata & {
37
+ name: string | null;
38
+ group: string | null;
39
+ documents: NormalizedDocumentView[];
40
+ requests: NormalizedDocumentRequestView[];
41
+ groupedRequests: GroupedRequestsItem[];
42
+ };
43
+ export type NormalizedDocumentView = TypedOmit<DocumentView, 'typeId'> & {
44
+ type: NormalizedDocumentType | null;
45
+ file: DocumentFile;
46
+ };
47
+ export type NormalizedDocumentRequestView = TypedOmit<DocumentRequestView, 'typeId' | 'requestFiles'> & RequestMetadata & {
48
+ collections: NormalizedDocumentCollectionView[];
49
+ type: NormalizedDocumentType | null;
50
+ files: DocumentFile[];
51
+ requestFiles: NormalizedDocumentRequestFileView[];
52
+ };
53
+ export type NormalizedDocumentRequestFileView = TypedOmit<DocumentRequestFile, 'fileId'> & {
54
+ file: DocumentFile;
55
+ };
56
+ export type NormalizedDocumentTypeGroup = {
57
+ label: string | null;
58
+ types: NormalizedDocumentType[];
59
+ };
60
+ export type NormalizedDocumentCategory = DocumentCategory & {
61
+ groups: NormalizedDocumentTypeGroup[];
62
+ types: NormalizedDocumentType[];
63
+ };
64
+ export type NormalizedDocumentType = TypedOmit<DocumentType, 'categoryId'> & {
65
+ category: DocumentCategory;
66
+ };
67
+ /**
68
+ * @param primaryCollectionId - if a document request is for multiple collections, remove the primary collection from the request to avoid duplication
69
+ * @returns
70
+ */
71
+ export declare function toNormalizedDocumentManagementData(data: DocumentManagementData, options?: {
72
+ primaryCollectionId?: string | null;
73
+ }): NormalizedDocumentManagementData;
@@ -0,0 +1,110 @@
1
+ import { group, map } from '../../../utils/iterable-helpers/index.js';
2
+ import { assertDefinedPass, isNull, isString } from '../../../utils/type-guards.js';
3
+ import { distinct } from '../../../utils/array/array.js';
4
+ import { compareByValueSelection } from '../../../utils/comparison.js';
5
+ /**
6
+ * @param primaryCollectionId - if a document request is for multiple collections, remove the primary collection from the request to avoid duplication
7
+ * @returns
8
+ */
9
+ export function toNormalizedDocumentManagementData(data, options) {
10
+ const normalizedTypes = data.types.map((type) => ({
11
+ ...type,
12
+ category: assertDefinedPass(data.categories.find((category) => category.id == type.categoryId))
13
+ }));
14
+ const normalizedCategories = data.categories.map((category) => {
15
+ const categoryTypes = normalizedTypes.filter((type) => type.category.id == category.id);
16
+ const categoryGroups = [...group(categoryTypes, (type) => type.group)].map(([label, types]) => ({ label, types })).toSorted(compareByValueSelection(({ label }) => label));
17
+ return {
18
+ ...category,
19
+ types: categoryTypes,
20
+ groups: categoryGroups
21
+ };
22
+ });
23
+ const normalizedDocuments = data.documents.map((document) => ({
24
+ ...document,
25
+ file: assertDefinedPass(data.files.find((file) => file.id == document.fileId)),
26
+ type: isNull(document.typeId) ? null : assertDefinedPass(normalizedTypes.find((type) => type.id == document.typeId))
27
+ }));
28
+ const filteredRequests = isString(options?.primaryCollectionId)
29
+ ? data.requests.map((request) => ((request.collectionIds.length >= 2) && request.collectionIds.includes(options.primaryCollectionId))
30
+ ? { ...request, collectionIds: request.collectionIds.filter((collectionId) => collectionId != options.primaryCollectionId) }
31
+ : request)
32
+ : data.requests;
33
+ const normalizedDocumentRequests = filteredRequests.map((request) => ({
34
+ ...request,
35
+ collections: [],
36
+ type: isNull(request.typeId) ? null : assertDefinedPass(normalizedTypes.find((type) => type.id == request.typeId)),
37
+ files: request.requestFiles.map((requestFile) => assertDefinedPass(data.files.find((file) => file.id == requestFile.fileId))),
38
+ requestFiles: request.requestFiles.map((requestFile) => ({
39
+ ...requestFile,
40
+ file: assertDefinedPass(data.files.find((file) => file.id == requestFile.fileId))
41
+ })),
42
+ ...calculateRequestMetadata(request)
43
+ }));
44
+ const normalizedCollections = data.collections.map((collection) => {
45
+ const collectionRequests = normalizedDocumentRequests.filter((request) => request.collectionIds.includes(collection.id));
46
+ const groupedCollectionRequests = [...map(group(collectionRequests, (request) => request.type?.category.id), ([categoryId, requests]) => ({
47
+ category: normalizedCategories.find((c) => c.id == categoryId) ?? null,
48
+ groups: [...map(group(requests, (request) => request.type?.group), ([groupLabel, groupRequests]) => ({ label: groupLabel ?? null, requests: groupRequests, ...calculateRequestsMetadata(groupRequests) }))]
49
+ }))];
50
+ return {
51
+ ...collection,
52
+ documents: normalizedDocuments.filter((document) => document.collectionAssignments.some((assignment) => assignment.collectionId == collection.id)),
53
+ requests: collectionRequests,
54
+ groupedRequests: groupedCollectionRequests,
55
+ ...calculateRequestsMetadata(collectionRequests)
56
+ };
57
+ });
58
+ for (const collection of normalizedCollections) {
59
+ for (const request of collection.requests) {
60
+ request.collections.push(collection);
61
+ }
62
+ }
63
+ const groupedCollections = [
64
+ ...map(group(normalizedCollections, (collection) => collection.group), ([group, collections]) => {
65
+ const collectionsRequests = distinct(collections.flatMap((collection) => collection.requests), (request) => request.id);
66
+ return {
67
+ group,
68
+ collections,
69
+ ...calculateRequestsMetadata(collectionsRequests)
70
+ };
71
+ })
72
+ ];
73
+ return {
74
+ ...data,
75
+ collections: normalizedCollections,
76
+ groupedCollections,
77
+ requests: normalizedDocumentRequests,
78
+ documents: normalizedDocuments,
79
+ categories: normalizedCategories,
80
+ types: normalizedTypes,
81
+ ...calculateRequestsMetadata(filteredRequests)
82
+ };
83
+ }
84
+ function calculateRequestsMetadata(requests) {
85
+ const requestMetadatas = requests.map(calculateRequestMetadata);
86
+ const requiredFilesCount = requests.reduce((sum, request) => (sum + request.requiredFilesCount), 0);
87
+ const pendingRequestFilesCount = requestMetadatas.reduce((sum, metadata) => (sum + metadata.pendingRequestFilesCount), 0);
88
+ const approvedRequestFilesCount = requestMetadatas.reduce((sum, metadata) => (sum + metadata.approvedRequestFilesCount), 0);
89
+ const rejectedRequestFilesCount = requestMetadatas.reduce((sum, metadata) => (sum + metadata.rejectedRequestFilesCount), 0);
90
+ const requiredFilesLeft = requestMetadatas.reduce((sum, metadata) => (sum + metadata.requiredFilesLeft), 0);
91
+ return {
92
+ requiredFilesCount,
93
+ pendingRequestFilesCount,
94
+ approvedRequestFilesCount,
95
+ rejectedRequestFilesCount,
96
+ requiredFilesLeft
97
+ };
98
+ }
99
+ function calculateRequestMetadata(request) {
100
+ const pendingRequestFilesCount = request.completed ? 0 : request.requestFiles.reduce((sum, requestFile) => (sum + (isNull(requestFile.approval) ? 1 : 0)), 0);
101
+ const approvedRequestFilesCount = request.requestFiles.reduce((sum, requestFile) => (sum + ((requestFile.approval == true) ? 1 : 0)), 0);
102
+ const rejectedRequestFilesCount = request.requestFiles.reduce((sum, requestFile) => (sum + ((requestFile.approval == false) ? 1 : 0)), 0);
103
+ const requiredFilesLeft = request.completed ? 0 : Math.max(0, request.requiredFilesCount - approvedRequestFilesCount);
104
+ return {
105
+ pendingRequestFilesCount,
106
+ approvedRequestFilesCount,
107
+ rejectedRequestFilesCount,
108
+ requiredFilesLeft
109
+ };
110
+ }
@@ -0,0 +1,16 @@
1
+ import type { TypedOmit } from '../../../types.js';
2
+ import type { DocumentRequestTemplate } from '../document-request-template.js';
3
+ import type { DocumentRequestsTemplateData, DocumentRequestsTemplateView } from './document-requests-template.view-model.js';
4
+ import type { NormalizedDocumentCategory, NormalizedDocumentManagementData, NormalizedDocumentType } from './normalized-document-collection-view.model.js';
5
+ export type NormalizedDocumentRequestsTemplateData = TypedOmit<DocumentRequestsTemplateData, 'templates'> & {
6
+ templates: NormalizedDocumentRequestsTemplateView[];
7
+ categories: NormalizedDocumentCategory[];
8
+ types: NormalizedDocumentType[];
9
+ };
10
+ export type NormalizedDocumentRequestsTemplateView = TypedOmit<DocumentRequestsTemplateView, 'requestTemplates'> & {
11
+ requestTemplates: NormalizedDocumentRequestTemplate[];
12
+ };
13
+ export type NormalizedDocumentRequestTemplate = TypedOmit<DocumentRequestTemplate, 'typeId'> & {
14
+ type: NormalizedDocumentType | null;
15
+ };
16
+ export declare function toNormalizedDocumentRequestsTemplateData(templateData: DocumentRequestsTemplateData, documentManagementData: NormalizedDocumentManagementData): NormalizedDocumentRequestsTemplateData;
@@ -0,0 +1,13 @@
1
+ export function toNormalizedDocumentRequestsTemplateData(templateData, documentManagementData) {
2
+ return {
3
+ templates: templateData.templates.map((template) => ({
4
+ ...template,
5
+ requestTemplates: template.requestTemplates.map((requestTemplate) => ({
6
+ ...requestTemplate,
7
+ type: documentManagementData.types.find((type) => type.id == requestTemplate.typeId) ?? null
8
+ }))
9
+ })),
10
+ categories: documentManagementData.categories,
11
+ types: documentManagementData.types
12
+ };
13
+ }
@@ -0,0 +1,6 @@
1
+ export declare class RequestFilesStats {
2
+ requiredFilesCount: number;
3
+ requiredFilesLeft: number;
4
+ pendingFilesCount: number;
5
+ approvedFilesCount: number;
6
+ }
@@ -0,0 +1,32 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { NumberProperty } from '../../../schema/index.js';
11
+ export class RequestFilesStats {
12
+ requiredFilesCount;
13
+ requiredFilesLeft;
14
+ pendingFilesCount;
15
+ approvedFilesCount;
16
+ }
17
+ __decorate([
18
+ NumberProperty(),
19
+ __metadata("design:type", Number)
20
+ ], RequestFilesStats.prototype, "requiredFilesCount", void 0);
21
+ __decorate([
22
+ NumberProperty(),
23
+ __metadata("design:type", Number)
24
+ ], RequestFilesStats.prototype, "requiredFilesLeft", void 0);
25
+ __decorate([
26
+ NumberProperty(),
27
+ __metadata("design:type", Number)
28
+ ], RequestFilesStats.prototype, "pendingFilesCount", void 0);
29
+ __decorate([
30
+ NumberProperty(),
31
+ __metadata("design:type", Number)
32
+ ], RequestFilesStats.prototype, "approvedFilesCount", void 0);
@@ -0,0 +1,11 @@
1
+ import './models/schemas.js';
2
+ import { type InjectionToken } from '../injector/index.js';
3
+ import type { DatabaseConfig } from '../orm/module.js';
4
+ import { DocumentManagementService } from './services/document-management.service.js';
5
+ export declare class DocumentManagementConfig {
6
+ fileObjectStorageModule: string;
7
+ database: DatabaseConfig;
8
+ customService?: InjectionToken<DocumentManagementService>;
9
+ }
10
+ export declare function configureDocumentManagement(config: DocumentManagementConfig): void;
11
+ export declare function migrateDocumentManagementSchema(): Promise<void>;
@@ -0,0 +1,27 @@
1
+ import './models/schemas.js';
2
+ import { migrate } from 'drizzle-orm/node-postgres/migrator';
3
+ import { inject, Injector } from '../injector/index.js';
4
+ import { Database } from '../orm/database.js';
5
+ import { isDefined } from '../utils/type-guards.js';
6
+ import { DocumentManagementService } from './services/document-management.service.js';
7
+ export class DocumentManagementConfig {
8
+ fileObjectStorageModule;
9
+ database;
10
+ customService;
11
+ }
12
+ ;
13
+ export function configureDocumentManagement(config) {
14
+ Injector.register(DocumentManagementConfig, { useValue: config });
15
+ if (isDefined(config.customService)) {
16
+ Injector.register(DocumentManagementService, { useToken: config.customService });
17
+ }
18
+ }
19
+ export async function migrateDocumentManagementSchema() {
20
+ const config = inject(DocumentManagementConfig);
21
+ const database = inject(Database, config.database.connection);
22
+ await migrate(database, {
23
+ migrationsSchema: 'document_management',
24
+ migrationsTable: '_migrations',
25
+ migrationsFolder: import.meta.resolve('./drizzle').replace('file://', '')
26
+ });
27
+ }
@@ -0,0 +1,65 @@
1
+ import { Resolvable, resolveArgumentType } from '../../injector/index.js';
2
+ import { ObjectStorage } from '../../object-storage/index.js';
3
+ import { Query, Transaction } from '../../orm/index.js';
4
+ import { OneOrMany } from '../../types.js';
5
+ import { AddOrArchiveDocumentToOrFromCollectionParameters, ApplyDocumentRequestsTemplateParameters, ApproveDocumentRequestFileParameters, AssignPropertyToTypeParameters, CategoryAndTypesView, CreateCollectionParameters, CreateDocumentCategoryParameters, CreateDocumentParameters, CreateDocumentPropertyParameters, CreateDocumentRequestFileParameters, CreateDocumentRequestParameters, CreateDocumentRequestTemplateParameters, CreateDocumentRequestsTemplateParameters, CreateDocumentTypeParameters, DeleteDocumentRequestFileParameters, DeleteDocumentRequestParameters, DeleteDocumentRequestTemplateParameters, DeleteDocumentRequestsTemplateParameters, Document, DocumentCategory, DocumentCollection, DocumentCollectionDocument, DocumentFile, DocumentManagementData, DocumentProperty, DocumentPropertyBooleanValue, DocumentPropertyDataType, DocumentPropertyDecimalValue, DocumentPropertyIntegerValue, DocumentPropertyTextValue, DocumentRequest, DocumentRequestCollection, DocumentRequestFile, DocumentRequestTemplate, DocumentRequestsTemplate, DocumentRequestsTemplateData, DocumentType, DocumentTypeProperty, LoadDataCollectionsMetadataParameters, RejectDocumentRequestFileParameters, RequestFilesStats, SetDocumentPropertiesParameters, UpdateDocumentParameters, UpdateDocumentRequestFileParameters, UpdateDocumentRequestParameters, UpdateDocumentRequestTemplateParameters, UpdateDocumentRequestsTemplateParameters } from '../models/index.js';
6
+ import { DocumentManagementConfig } from '../module.js';
7
+ export type DocumentServiceArgument = DocumentManagementConfig;
8
+ export declare class DocumentManagementService implements Resolvable<DocumentServiceArgument> {
9
+ protected readonly documentService: import("../../orm/index.js").EntityRepository<Document>;
10
+ protected readonly documentFileService: import("../../orm/index.js").EntityRepository<DocumentFile>;
11
+ protected readonly documentCollectionService: import("../../orm/index.js").EntityRepository<DocumentCollection>;
12
+ protected readonly documentCategoryService: import("../../orm/index.js").EntityRepository<DocumentCategory>;
13
+ protected readonly documentTypeService: import("../../orm/index.js").EntityRepository<DocumentType>;
14
+ protected readonly documentRequestService: import("../../orm/index.js").EntityRepository<DocumentRequest>;
15
+ protected readonly documentRequestsTemplateService: import("../../orm/index.js").EntityRepository<DocumentRequestsTemplate>;
16
+ protected readonly documentRequestTemplateService: import("../../orm/index.js").EntityRepository<DocumentRequestTemplate>;
17
+ protected readonly documentRequestCollectionService: import("../../orm/index.js").EntityRepository<DocumentRequestCollection>;
18
+ protected readonly documentRequestFileService: import("../../orm/index.js").EntityRepository<DocumentRequestFile>;
19
+ protected readonly documentPropertyService: import("../../orm/index.js").EntityRepository<DocumentProperty>;
20
+ protected readonly documentTypePropertyService: import("../../orm/index.js").EntityRepository<DocumentTypeProperty>;
21
+ protected readonly documentPropertyTextValueService: import("../../orm/index.js").EntityRepository<DocumentPropertyTextValue>;
22
+ protected readonly documentPropertyIntegerValueService: import("../../orm/index.js").EntityRepository<DocumentPropertyIntegerValue>;
23
+ protected readonly documentPropertyDecimalValueService: import("../../orm/index.js").EntityRepository<DocumentPropertyDecimalValue>;
24
+ protected readonly documentPropertyBooleanValueService: import("../../orm/index.js").EntityRepository<DocumentPropertyBooleanValue>;
25
+ protected readonly documentCollectionDocumentService: import("../../orm/index.js").EntityRepository<DocumentCollectionDocument>;
26
+ protected readonly fileObjectStorage: ObjectStorage;
27
+ readonly [resolveArgumentType]: DocumentServiceArgument;
28
+ loadData(collectionIds: string[], collectionsMetadata?: LoadDataCollectionsMetadataParameters): Promise<DocumentManagementData>;
29
+ loadDocumentRequestsTemplateData(): Promise<DocumentRequestsTemplateData>;
30
+ loadCategoriesAndTypes(): Promise<CategoryAndTypesView>;
31
+ loadDocument(id: string): Promise<Document>;
32
+ loadDocumentFile(id: string): Promise<DocumentFile>;
33
+ loadType(id: string): Promise<DocumentType>;
34
+ getFileContentUrl(fileId: string, title: string | null, download?: boolean): Promise<string>;
35
+ createCategory(parameters: CreateDocumentCategoryParameters): Promise<DocumentCategory>;
36
+ createType(parameters: CreateDocumentTypeParameters): Promise<DocumentType>;
37
+ createCollection(parameters?: CreateCollectionParameters): Promise<DocumentCollection>;
38
+ collectionHasDocumentByFilter(collectionId: string, filter: Query<Document>): Promise<boolean>;
39
+ getRequestFilesStats(collectionIds: OneOrMany<string>): Promise<RequestFilesStats>;
40
+ createDocumentRequestsTemplate(parameters: CreateDocumentRequestsTemplateParameters): Promise<DocumentRequestsTemplate>;
41
+ updateDocumentRequestsTemplate({ id, label, metadata }: UpdateDocumentRequestsTemplateParameters): Promise<DocumentRequestsTemplate>;
42
+ applyDocumentRequestsTemplate({ id, collectionIds, metadata }: ApplyDocumentRequestsTemplateParameters): Promise<void>;
43
+ deleteDocumentRequestsTemplate(parameters: DeleteDocumentRequestsTemplateParameters): Promise<DocumentRequestsTemplate>;
44
+ createDocumentRequestTemplate(parameters: CreateDocumentRequestTemplateParameters): Promise<DocumentRequestTemplate>;
45
+ updateDocumentRequestTemplate({ id, typeId, requiredFilesCount, comment, metadata }: UpdateDocumentRequestTemplateParameters): Promise<DocumentRequestTemplate>;
46
+ deleteDocumentRequestTemplate(parameters: DeleteDocumentRequestTemplateParameters): Promise<DocumentRequestTemplate>;
47
+ createDocument({ typeId, addition, date, expiration, originalFileName, collectionIds, properties, metadata }: CreateDocumentParameters, content: Uint8Array | ReadableStream<Uint8Array>): Promise<Document>;
48
+ approveDocumentRequestFile({ id, approvalComment, documentMetadata, requestFileMetadata }: ApproveDocumentRequestFileParameters): Promise<Document>;
49
+ rejectDocumentRequestFile({ id, approvalComment, metadata }: RejectDocumentRequestFileParameters): Promise<void>;
50
+ updateDocumentRequestFile({ id, addition, approvalComment, metadata }: UpdateDocumentRequestFileParameters): Promise<DocumentRequestFile>;
51
+ deleteDocumentRequestFile({ id, metadata }: DeleteDocumentRequestFileParameters): Promise<void>;
52
+ createDocumentFile(content: Uint8Array | ReadableStream<Uint8Array>, originalFileName: string | null, dbTransaction?: Transaction): Promise<DocumentFile>;
53
+ createDocumentRequestFile({ requestId, addition, originalFileName, metadata }: CreateDocumentRequestFileParameters, content: Uint8Array | ReadableStream<Uint8Array>): Promise<DocumentRequestFile>;
54
+ createDocumentRequest(parameters: CreateDocumentRequestParameters, transaction?: Transaction): Promise<DocumentRequest>;
55
+ updateDocument(parameters: UpdateDocumentParameters, transaction?: Transaction): Promise<void>;
56
+ updateDocumentRequest(parameters: UpdateDocumentRequestParameters, transaction?: Transaction): Promise<void>;
57
+ deleteDocumentRequest({ id, metadata }: DeleteDocumentRequestParameters, transaction?: Transaction): Promise<void>;
58
+ setDocumentProperties(setDocumentPropertyItems: SetDocumentPropertiesParameters, transaction?: Transaction): Promise<void>;
59
+ addDocumentToCollection(parameters: AddOrArchiveDocumentToOrFromCollectionParameters, transaction?: Transaction): Promise<void>;
60
+ archiveDocument({ collectionId, documentId, metadata }: AddOrArchiveDocumentToOrFromCollectionParameters): Promise<void>;
61
+ createProperty(parameters: CreateDocumentPropertyParameters): Promise<DocumentProperty>;
62
+ assignPropertyToType(parameters: AssignPropertyToTypeParameters): Promise<void>;
63
+ protected getDocumentPropertyValueService(dataType: DocumentPropertyDataType): import("../../orm/index.js").EntityRepository<DocumentPropertyTextValue> | import("../../orm/index.js").EntityRepository<DocumentPropertyIntegerValue> | import("../../orm/index.js").EntityRepository<DocumentPropertyBooleanValue>;
64
+ protected getDocumentFileContentObjectUrl(title: string, file: DocumentFile, download: boolean): Promise<string>;
65
+ }