@cratis/chronicle 6.3.2 → 6.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/EventStore.ts +3 -0
  2. package/README.md +13 -2
  3. package/artifacts/validateArtifactSchemas.spec.ts +61 -0
  4. package/artifacts/validateArtifactSchemas.ts +39 -0
  5. package/compliance/pii.ts +7 -6
  6. package/compliance/subject.ts +6 -5
  7. package/confidentiality/encrypted.ts +7 -6
  8. package/dist/EventStore.d.ts.map +1 -1
  9. package/dist/EventStore.js +2 -0
  10. package/dist/EventStore.js.map +1 -1
  11. package/dist/artifacts/validateArtifactSchemas.d.ts +4 -0
  12. package/dist/artifacts/validateArtifactSchemas.d.ts.map +1 -0
  13. package/dist/artifacts/validateArtifactSchemas.js +38 -0
  14. package/dist/artifacts/validateArtifactSchemas.js.map +1 -0
  15. package/dist/compliance/pii.d.ts +2 -1
  16. package/dist/compliance/pii.d.ts.map +1 -1
  17. package/dist/compliance/pii.js +6 -5
  18. package/dist/compliance/pii.js.map +1 -1
  19. package/dist/compliance/subject.d.ts +2 -1
  20. package/dist/compliance/subject.d.ts.map +1 -1
  21. package/dist/compliance/subject.js +5 -4
  22. package/dist/compliance/subject.js.map +1 -1
  23. package/dist/confidentiality/encrypted.d.ts +2 -1
  24. package/dist/confidentiality/encrypted.d.ts.map +1 -1
  25. package/dist/confidentiality/encrypted.js +6 -5
  26. package/dist/confidentiality/encrypted.js.map +1 -1
  27. package/dist/events/eventTypeDecorator.d.ts +8 -7
  28. package/dist/events/eventTypeDecorator.d.ts.map +1 -1
  29. package/dist/events/eventTypeDecorator.js +22 -5
  30. package/dist/events/eventTypeDecorator.js.map +1 -1
  31. package/dist/events/index.d.ts +1 -0
  32. package/dist/events/index.d.ts.map +1 -1
  33. package/dist/events/index.js +1 -0
  34. package/dist/events/index.js.map +1 -1
  35. package/dist/projections/modelBound/addFrom.d.ts +2 -1
  36. package/dist/projections/modelBound/addFrom.d.ts.map +1 -1
  37. package/dist/projections/modelBound/addFrom.js +4 -3
  38. package/dist/projections/modelBound/addFrom.js.map +1 -1
  39. package/dist/projections/modelBound/childrenFrom.d.ts +2 -1
  40. package/dist/projections/modelBound/childrenFrom.d.ts.map +1 -1
  41. package/dist/projections/modelBound/childrenFrom.js +4 -3
  42. package/dist/projections/modelBound/childrenFrom.js.map +1 -1
  43. package/dist/projections/modelBound/clearWith.d.ts +2 -1
  44. package/dist/projections/modelBound/clearWith.d.ts.map +1 -1
  45. package/dist/projections/modelBound/clearWith.js +4 -3
  46. package/dist/projections/modelBound/clearWith.js.map +1 -1
  47. package/dist/projections/modelBound/count.d.ts +2 -1
  48. package/dist/projections/modelBound/count.d.ts.map +1 -1
  49. package/dist/projections/modelBound/count.js +4 -3
  50. package/dist/projections/modelBound/count.js.map +1 -1
  51. package/dist/projections/modelBound/decrement.d.ts +2 -1
  52. package/dist/projections/modelBound/decrement.d.ts.map +1 -1
  53. package/dist/projections/modelBound/decrement.js +4 -3
  54. package/dist/projections/modelBound/decrement.js.map +1 -1
  55. package/dist/projections/modelBound/fromAll.d.ts +2 -1
  56. package/dist/projections/modelBound/fromAll.d.ts.map +1 -1
  57. package/dist/projections/modelBound/fromAll.js +4 -3
  58. package/dist/projections/modelBound/fromAll.js.map +1 -1
  59. package/dist/projections/modelBound/fromEvery.d.ts +2 -1
  60. package/dist/projections/modelBound/fromEvery.d.ts.map +1 -1
  61. package/dist/projections/modelBound/fromEvery.js +4 -3
  62. package/dist/projections/modelBound/fromEvery.js.map +1 -1
  63. package/dist/projections/modelBound/increment.d.ts +2 -1
  64. package/dist/projections/modelBound/increment.d.ts.map +1 -1
  65. package/dist/projections/modelBound/increment.js +4 -3
  66. package/dist/projections/modelBound/increment.js.map +1 -1
  67. package/dist/projections/modelBound/join.d.ts +2 -1
  68. package/dist/projections/modelBound/join.d.ts.map +1 -1
  69. package/dist/projections/modelBound/join.js +4 -3
  70. package/dist/projections/modelBound/join.js.map +1 -1
  71. package/dist/projections/modelBound/nested.d.ts +1 -6
  72. package/dist/projections/modelBound/nested.d.ts.map +1 -1
  73. package/dist/projections/modelBound/nested.js +6 -2
  74. package/dist/projections/modelBound/nested.js.map +1 -1
  75. package/dist/projections/modelBound/noAutoMap.d.ts +4 -11
  76. package/dist/projections/modelBound/noAutoMap.d.ts.map +1 -1
  77. package/dist/projections/modelBound/noAutoMap.js +6 -2
  78. package/dist/projections/modelBound/noAutoMap.js.map +1 -1
  79. package/dist/projections/modelBound/removedWith.d.ts +2 -1
  80. package/dist/projections/modelBound/removedWith.d.ts.map +1 -1
  81. package/dist/projections/modelBound/removedWith.js +4 -3
  82. package/dist/projections/modelBound/removedWith.js.map +1 -1
  83. package/dist/projections/modelBound/removedWithJoin.d.ts +2 -1
  84. package/dist/projections/modelBound/removedWithJoin.d.ts.map +1 -1
  85. package/dist/projections/modelBound/removedWithJoin.js +4 -3
  86. package/dist/projections/modelBound/removedWithJoin.js.map +1 -1
  87. package/dist/projections/modelBound/setFrom.d.ts +2 -1
  88. package/dist/projections/modelBound/setFrom.d.ts.map +1 -1
  89. package/dist/projections/modelBound/setFrom.js +4 -3
  90. package/dist/projections/modelBound/setFrom.js.map +1 -1
  91. package/dist/projections/modelBound/setFromContext.d.ts +3 -2
  92. package/dist/projections/modelBound/setFromContext.d.ts.map +1 -1
  93. package/dist/projections/modelBound/setFromContext.js +4 -3
  94. package/dist/projections/modelBound/setFromContext.js.map +1 -1
  95. package/dist/projections/modelBound/setValue.d.ts +2 -1
  96. package/dist/projections/modelBound/setValue.d.ts.map +1 -1
  97. package/dist/projections/modelBound/setValue.js +4 -3
  98. package/dist/projections/modelBound/setValue.js.map +1 -1
  99. package/dist/projections/modelBound/subtractFrom.d.ts +2 -1
  100. package/dist/projections/modelBound/subtractFrom.d.ts.map +1 -1
  101. package/dist/projections/modelBound/subtractFrom.js +4 -3
  102. package/dist/projections/modelBound/subtractFrom.js.map +1 -1
  103. package/dist/readModels/readModel.d.ts +2 -1
  104. package/dist/readModels/readModel.d.ts.map +1 -1
  105. package/dist/readModels/readModel.js +22 -5
  106. package/dist/readModels/readModel.js.map +1 -1
  107. package/dist/schemas/JsonSchemaGenerator.d.ts +6 -1
  108. package/dist/schemas/JsonSchemaGenerator.d.ts.map +1 -1
  109. package/dist/schemas/JsonSchemaGenerator.js +41 -31
  110. package/dist/schemas/JsonSchemaGenerator.js.map +1 -1
  111. package/dist/schemas/createDeferredSchema.d.ts +7 -0
  112. package/dist/schemas/createDeferredSchema.d.ts.map +1 -0
  113. package/dist/schemas/createDeferredSchema.js +19 -0
  114. package/dist/schemas/createDeferredSchema.js.map +1 -0
  115. package/dist/schemas/index.d.ts +1 -0
  116. package/dist/schemas/index.d.ts.map +1 -1
  117. package/dist/schemas/index.js.map +1 -1
  118. package/dist/schemas/jsonSchemaProperty.d.ts +2 -1
  119. package/dist/schemas/jsonSchemaProperty.d.ts.map +1 -1
  120. package/dist/schemas/jsonSchemaProperty.js +3 -2
  121. package/dist/schemas/jsonSchemaProperty.js.map +1 -1
  122. package/dist/tsconfig.tsbuildinfo +1 -1
  123. package/dist/types/TypeIntrospector.d.ts.map +1 -1
  124. package/dist/types/TypeIntrospector.js +9 -3
  125. package/dist/types/TypeIntrospector.js.map +1 -1
  126. package/dist/types/index.d.ts +2 -0
  127. package/dist/types/index.d.ts.map +1 -1
  128. package/dist/types/propertyDecoratorMetadata.d.ts +17 -0
  129. package/dist/types/propertyDecoratorMetadata.d.ts.map +1 -0
  130. package/dist/types/propertyDecoratorMetadata.js +76 -0
  131. package/dist/types/propertyDecoratorMetadata.js.map +1 -0
  132. package/dist/types/standardDecoratorMetadata.d.ts +9 -0
  133. package/dist/types/standardDecoratorMetadata.d.ts.map +1 -0
  134. package/dist/types/standardDecoratorMetadata.js +20 -0
  135. package/dist/types/standardDecoratorMetadata.js.map +1 -0
  136. package/events/classDecorators.standard.spec.ts +77 -0
  137. package/events/eventTypeDecorator.ts +31 -13
  138. package/events/index.ts +2 -0
  139. package/package.json +3 -1
  140. package/projections/modelBound/addFrom.ts +5 -4
  141. package/projections/modelBound/childrenFrom.ts +5 -4
  142. package/projections/modelBound/clearWith.ts +5 -4
  143. package/projections/modelBound/count.ts +5 -4
  144. package/projections/modelBound/decorators.standard.spec.ts +71 -0
  145. package/projections/modelBound/decrement.ts +5 -4
  146. package/projections/modelBound/fromAll.ts +5 -4
  147. package/projections/modelBound/fromEvery.ts +5 -4
  148. package/projections/modelBound/increment.ts +5 -4
  149. package/projections/modelBound/join.ts +5 -4
  150. package/projections/modelBound/nested.ts +9 -2
  151. package/projections/modelBound/noAutoMap.ts +11 -2
  152. package/projections/modelBound/removedWith.ts +5 -4
  153. package/projections/modelBound/removedWithJoin.ts +5 -4
  154. package/projections/modelBound/setFrom.ts +5 -4
  155. package/projections/modelBound/setFromContext.ts +7 -6
  156. package/projections/modelBound/setValue.ts +5 -4
  157. package/projections/modelBound/subtractFrom.ts +5 -4
  158. package/readModels/readModel.ts +24 -6
  159. package/readModels/standardFallbacks.standard.spec.ts +39 -0
  160. package/schemas/JsonSchemaGenerator.confidentiality.spec.ts +2 -0
  161. package/schemas/JsonSchemaGenerator.spec.ts +28 -1
  162. package/schemas/JsonSchemaGenerator.ts +45 -30
  163. package/schemas/createDeferredSchema.ts +21 -0
  164. package/schemas/decorators.expected.fixture.ts +24 -0
  165. package/schemas/decorators.legacy.spec.ts +62 -0
  166. package/schemas/decorators.standard.spec.ts +235 -0
  167. package/schemas/index.ts +1 -0
  168. package/schemas/jsonSchemaProperty.ts +4 -3
  169. package/schemas/legacyDesignMetadata.spec.ts +39 -0
  170. package/types/TypeIntrospector.ts +8 -3
  171. package/types/index.ts +2 -0
  172. package/types/propertyDecoratorMetadata.ts +80 -0
  173. package/types/standardDecoratorMetadata.spec.ts +31 -0
  174. package/types/standardDecoratorMetadata.ts +26 -0
  175. package/vitest.config.ts +17 -0
package/EventStore.ts CHANGED
@@ -30,6 +30,7 @@ import { EventSeeding } from './seeding/EventSeeding.js';
30
30
  import { IEventSeeding } from './seeding/IEventSeeding.js';
31
31
  import { ChronicleTracer } from './Tracing.js';
32
32
  import { DefaultClientArtifactsProvider } from './artifacts/DefaultClientArtifactsProvider.js';
33
+ import { validateArtifactSchemas } from './artifacts/validateArtifactSchemas.js';
33
34
  import { IUnitOfWorkManager } from './transactions/IUnitOfWorkManager.js';
34
35
  import { UnitOfWorkManager } from './transactions/UnitOfWorkManager.js';
35
36
  import { IJobs } from './jobs/IJobs.js';
@@ -125,6 +126,8 @@ export class EventStore implements IEventStore {
125
126
  this.seeding.discover()
126
127
  ]);
127
128
 
129
+ validateArtifactSchemas(DefaultClientArtifactsProvider.default);
130
+
128
131
  this._logger.debug('Registering discovered artifacts', {
129
132
  eventStore: this.name.value,
130
133
  namespace: this.namespace.value
package/README.md CHANGED
@@ -28,7 +28,7 @@ Beyond appending and observing events, the client covers the full Chronicle surf
28
28
  ## Installation
29
29
 
30
30
  ```bash
31
- npm install @cratis/chronicle reflect-metadata
31
+ npm install @cratis/chronicle @cratis/fundamentals reflect-metadata
32
32
  ```
33
33
 
34
34
  You need a Chronicle Kernel available. The easiest local setup is the development Docker image:
@@ -41,11 +41,18 @@ docker run -p 35000:35000 cratis/chronicle:latest-development
41
41
 
42
42
  ```typescript
43
43
  import 'reflect-metadata';
44
+ import { field } from '@cratis/fundamentals';
44
45
  import { ChronicleClient, ChronicleOptions, eventType } from '@cratis/chronicle';
45
46
 
46
47
  @eventType()
47
48
  class EmployeeHired {
48
- constructor(readonly firstName: string, readonly lastName: string) {}
49
+ @field(String) firstName!: string;
50
+ @field(String) lastName!: string;
51
+
52
+ constructor(firstName: string, lastName: string) {
53
+ this.firstName = firstName;
54
+ this.lastName = lastName;
55
+ }
49
56
  }
50
57
 
51
58
  const client = new ChronicleClient(ChronicleOptions.development());
@@ -55,6 +62,10 @@ console.log(`Appended at sequence number ${result.sequenceNumber.value}`);
55
62
  client.dispose();
56
63
  ```
57
64
 
65
+ ## Decorators and TypeScript configuration
66
+
67
+ Chronicle decorators work with both TC39 standard decorators (TypeScript 5.2+; do not enable `experimentalDecorators`) and legacy decorators (`experimentalDecorators: true`). Keep `reflect-metadata` imported at your entry point for Chronicle's runtime metadata storage. In standard mode, TypeScript does not emit `design:type` or `design:paramtypes`; declare event and read-model fields with `@field(Type)` from `@cratis/fundamentals` so Chronicle can generate their schemas. For arrays, provide an element type with `@field(Array, { genericArguments: [ItemType] })`. For a `ConceptAs<string>` or `ConceptAs<number>`, declare `static readonly valueType = String`, `Number`, `Boolean`, `Guid`, or `Date` on the concept class. Member-less event types and read models are valid. Unresolved standard-mode types fail on first schema read or during connection before Kernel registration; property decorators support public instance fields, not standard accessors or getters.
68
+
58
69
  ## Documentation
59
70
 
60
71
  See the [getting started guide](https://github.com/Cratis/Chronicle.TypeScript/blob/main/Documentation/getting-started.md) and the rest of the [documentation](https://github.com/Cratis/Chronicle.TypeScript/tree/main/Documentation) for installation and usage instructions, or visit [cratis.io](https://www.cratis.io/chronicle/).
@@ -0,0 +1,61 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import { field } from '@cratis/fundamentals';
5
+ import { describe, expect, it, vi } from 'vitest';
6
+ import { eventType } from '../events/eventTypeDecorator.js';
7
+ import { readModel } from '../readModels/readModel.js';
8
+ import { IClientArtifactsProvider } from './IClientArtifactsProvider.js';
9
+ import { validateArtifactSchemas } from './validateArtifactSchemas.js';
10
+ import { EventStore } from '../EventStore.js';
11
+ import { EventStoreName } from '../EventStoreName.js';
12
+ import { EventStoreNamespaceName } from '../EventStoreNamespaceName.js';
13
+ import { ChronicleConnection } from '../connection/ChronicleConnection.js';
14
+ import { ConnectionLifecycle } from '../connection/ConnectionLifecycle.js';
15
+
16
+ @eventType('bad-event')
17
+ class BadEvent {
18
+ @field(Array) items!: string[];
19
+ }
20
+
21
+ @readModel('bad-read-model')
22
+ class BadReadModel {
23
+ constructor(readonly name: string) {}
24
+ }
25
+
26
+ @eventType('good-event')
27
+ class GoodEvent {}
28
+
29
+ const artifacts = {
30
+ eventTypes: [BadEvent, GoodEvent],
31
+ readModels: [BadReadModel]
32
+ } as unknown as IClientArtifactsProvider;
33
+
34
+ describe('artifact schema preflight', () => {
35
+ it('blocks every Kernel registration when preflight fails', async () => {
36
+ const register = vi.fn();
37
+ const connection = new Proxy({}, {
38
+ get: () => new Proxy({}, { get: () => register })
39
+ }) as ChronicleConnection;
40
+ const lifecycle = { onDisconnected: vi.fn(), onConnected: vi.fn() } as unknown as ConnectionLifecycle;
41
+ const store = new EventStore(new EventStoreName('Test'), EventStoreNamespaceName.default, connection, lifecycle, 'sink');
42
+
43
+ await expect(store.registerArtifacts()).rejects.toBeInstanceOf(AggregateError);
44
+ expect(register).not.toHaveBeenCalled();
45
+ });
46
+
47
+ it('collects all schema failures before registration', () => {
48
+ try {
49
+ validateArtifactSchemas(artifacts);
50
+ throw new Error('Expected schema validation to fail');
51
+ } catch (error) {
52
+ expect(error).toBeInstanceOf(AggregateError);
53
+ const aggregate = error as AggregateError;
54
+ expect(aggregate.errors).toHaveLength(2);
55
+ expect(aggregate.errors.map((failure: Error) => failure.message)).toEqual([
56
+ expect.stringContaining('Event type BadEvent:'),
57
+ expect.stringContaining('Read model BadReadModel:')
58
+ ]);
59
+ }
60
+ });
61
+ });
@@ -0,0 +1,39 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import { IClientArtifactsProvider } from './IClientArtifactsProvider.js';
5
+ import { getEventTypeMetadata } from '../events/eventTypeDecorator.js';
6
+ import { getReadModelMetadata } from '../readModels/readModel.js';
7
+ import { JsonSchemaGenerator } from '../schemas/JsonSchemaGenerator.js';
8
+
9
+ /** Resolves every discovered schema before any registration can reach the Kernel. */
10
+ export function validateArtifactSchemas(artifacts: IClientArtifactsProvider): void {
11
+ const failures: Error[] = [];
12
+
13
+ for (const type of artifacts.eventTypes) {
14
+ try {
15
+ const metadata = getEventTypeMetadata(type);
16
+ if (!metadata) throw new TypeError(`Missing event type metadata for ${type.name}.`);
17
+ void metadata.schema;
18
+ } catch (error) {
19
+ failures.push(new Error(`Event type ${type.name}: ${String(error)}`, { cause: error }));
20
+ }
21
+ }
22
+
23
+ for (const type of artifacts.readModels) {
24
+ try {
25
+ const metadata = getReadModelMetadata(type);
26
+ if (metadata) {
27
+ void metadata.schema;
28
+ } else {
29
+ JsonSchemaGenerator.generate(type);
30
+ }
31
+ } catch (error) {
32
+ failures.push(new Error(`Read model ${type.name}: ${String(error)}`, { cause: error }));
33
+ }
34
+ }
35
+
36
+ if (failures.length) {
37
+ throw new AggregateError(failures, `Cannot register artifacts: ${failures.length} schema error(s).`);
38
+ }
39
+ }
package/compliance/pii.ts CHANGED
@@ -6,6 +6,7 @@ import type { ComplianceMetadata } from './ComplianceMetadata.js';
6
6
  import { ComplianceMetadataType } from './ComplianceMetadataType.js';
7
7
  import { PIINotSupportedOnEventSourceId } from './PIINotSupportedOnEventSourceId.js';
8
8
  import { TypeIntrospector } from '../types/index.js';
9
+ import { ChronicleClassOrPropertyDecorator, decorateClassOrProperty, getPropertyMetadata, hasPropertyMetadata } from '../types/propertyDecoratorMetadata.js';
9
10
 
10
11
  /** The property name this client uses everywhere for the event source identifier. */
11
12
  const EVENT_SOURCE_ID_PROPERTY = 'eventSourceId';
@@ -55,8 +56,8 @@ const PII_TYPE_METADATA_KEY = 'chronicle:compliance:pii:type';
55
56
  * }
56
57
  * ```
57
58
  */
58
- export function pii(details?: string): PropertyDecorator & ClassDecorator {
59
- return (target: object | Function, propertyKey?: string | symbol) => {
59
+ export function pii(details?: string): ChronicleClassOrPropertyDecorator {
60
+ return decorateClassOrProperty((target: object | Function, propertyKey?: string | symbol) => {
60
61
  // Class decorator usage (for types like ConceptAs)
61
62
  if (typeof target === 'function' && propertyKey === undefined) {
62
63
  const metadata: ComplianceMetadata = {
@@ -78,7 +79,7 @@ export function pii(details?: string): PropertyDecorator & ClassDecorator {
78
79
  // PIINotSupportedOnEventSourceId guard, which throws for the same reason when
79
80
  // [PII] is applied to an EventSourceId/EventSourceId<T> type.
80
81
  if (key === EVENT_SOURCE_ID_PROPERTY) {
81
- throw new PIINotSupportedOnEventSourceId(declaringType.name);
82
+ throw new PIINotSupportedOnEventSourceId(declaringType.name || 'the decorated class');
82
83
  }
83
84
 
84
85
  TypeIntrospector.trackProperty(declaringType, key);
@@ -88,7 +89,7 @@ export function pii(details?: string): PropertyDecorator & ClassDecorator {
88
89
  };
89
90
  Reflect.defineMetadata(PII_PROPERTY_METADATA_KEY, metadata, target, key);
90
91
  }
91
- };
92
+ });
92
93
  }
93
94
 
94
95
  /**
@@ -98,7 +99,7 @@ export function pii(details?: string): PropertyDecorator & ClassDecorator {
98
99
  * @returns The compliance metadata, or undefined if not decorated with @pii.
99
100
  */
100
101
  export function getPIIMetadata(target: object, propertyKey: string): ComplianceMetadata | undefined {
101
- return Reflect.getMetadata(PII_PROPERTY_METADATA_KEY, target, propertyKey);
102
+ return getPropertyMetadata<ComplianceMetadata>(PII_PROPERTY_METADATA_KEY, target, propertyKey);
102
103
  }
103
104
 
104
105
  /**
@@ -108,7 +109,7 @@ export function getPIIMetadata(target: object, propertyKey: string): ComplianceM
108
109
  * @returns True if the property has @pii decorator; false otherwise.
109
110
  */
110
111
  export function hasPIIMetadata(target: object, propertyKey: string): boolean {
111
- return Reflect.hasMetadata(PII_PROPERTY_METADATA_KEY, target, propertyKey);
112
+ return hasPropertyMetadata(PII_PROPERTY_METADATA_KEY, target, propertyKey);
112
113
  }
113
114
 
114
115
  /**
@@ -3,6 +3,7 @@
3
3
 
4
4
  import 'reflect-metadata';
5
5
  import { TypeIntrospector } from '../types/index.js';
6
+ import { ChroniclePropertyDecorator, decorateProperty, getTypeOrFieldMetadata, hasPropertyMetadata } from '../types/propertyDecoratorMetadata.js';
6
7
 
7
8
  /** Metadata key for the subject decorator on a property. */
8
9
  const SUBJECT_PROPERTY_METADATA_KEY = 'chronicle:compliance:subject:property';
@@ -33,15 +34,15 @@ const SUBJECT_TYPE_METADATA_KEY = 'chronicle:compliance:subject:type';
33
34
  * }
34
35
  * ```
35
36
  */
36
- export function subject(): PropertyDecorator {
37
- return (target: object, propertyKey: string | symbol) => {
37
+ export function subject(): ChroniclePropertyDecorator {
38
+ return decorateProperty((target: object, propertyKey: string | symbol) => {
38
39
  const key = propertyKey.toString();
39
40
  const declaringType = (target as { constructor: Function }).constructor;
40
41
 
41
42
  TypeIntrospector.trackProperty(declaringType, key);
42
43
  Reflect.defineMetadata(SUBJECT_PROPERTY_METADATA_KEY, true, target, key);
43
44
  Reflect.defineMetadata(SUBJECT_TYPE_METADATA_KEY, key, declaringType);
44
- };
45
+ });
45
46
  }
46
47
 
47
48
  /**
@@ -51,7 +52,7 @@ export function subject(): PropertyDecorator {
51
52
  * @returns True if the property has the @subject decorator; false otherwise.
52
53
  */
53
54
  export function hasSubjectMetadata(target: object, propertyKey: string): boolean {
54
- return Reflect.hasMetadata(SUBJECT_PROPERTY_METADATA_KEY, target, propertyKey);
55
+ return hasPropertyMetadata(SUBJECT_PROPERTY_METADATA_KEY, target, propertyKey);
55
56
  }
56
57
 
57
58
  /**
@@ -60,5 +61,5 @@ export function hasSubjectMetadata(target: object, propertyKey: string): boolean
60
61
  * @returns The decorated property name, or undefined when no property is decorated.
61
62
  */
62
63
  export function getSubjectPropertyName(type: Function): string | undefined {
63
- return Reflect.getMetadata(SUBJECT_TYPE_METADATA_KEY, type);
64
+ return getTypeOrFieldMetadata<string>(SUBJECT_TYPE_METADATA_KEY, type);
64
65
  }
@@ -7,6 +7,7 @@ import { SecurityMetadataType } from './SecurityMetadataType.js';
7
7
  import { EncryptionScope } from './EncryptionScope.js';
8
8
  import { EncryptedNotSupportedOnEventSourceId } from './EncryptedNotSupportedOnEventSourceId.js';
9
9
  import { TypeIntrospector } from '../types/index.js';
10
+ import { ChronicleClassOrPropertyDecorator, decorateClassOrProperty, getPropertyMetadata, hasPropertyMetadata } from '../types/propertyDecoratorMetadata.js';
10
11
 
11
12
  /** The property name this client uses everywhere for the event source identifier. */
12
13
  const EVENT_SOURCE_ID_PROPERTY = 'eventSourceId';
@@ -69,8 +70,8 @@ function metadataTypeFor(scope: EncryptionScope): SecurityMetadataType {
69
70
  * }
70
71
  * ```
71
72
  */
72
- export function encrypted(scope: EncryptionScope = EncryptionScope.Subject, details?: string): PropertyDecorator & ClassDecorator {
73
- return (target: object | Function, propertyKey?: string | symbol) => {
73
+ export function encrypted(scope: EncryptionScope = EncryptionScope.Subject, details?: string): ChronicleClassOrPropertyDecorator {
74
+ return decorateClassOrProperty((target: object | Function, propertyKey?: string | symbol) => {
74
75
  // Class decorator usage (for types like ConceptAs)
75
76
  if (typeof target === 'function' && propertyKey === undefined) {
76
77
  const metadata: SecurityMetadata = {
@@ -91,7 +92,7 @@ export function encrypted(scope: EncryptionScope = EncryptionScope.Subject, deta
91
92
  // look up the key that protects everything else. Mirrors @pii()'s
92
93
  // PIINotSupportedOnEventSourceId guard, for the same reason.
93
94
  if (key === EVENT_SOURCE_ID_PROPERTY) {
94
- throw new EncryptedNotSupportedOnEventSourceId(declaringType.name);
95
+ throw new EncryptedNotSupportedOnEventSourceId(declaringType.name || 'the decorated class');
95
96
  }
96
97
 
97
98
  TypeIntrospector.trackProperty(declaringType, key);
@@ -101,7 +102,7 @@ export function encrypted(scope: EncryptionScope = EncryptionScope.Subject, deta
101
102
  };
102
103
  Reflect.defineMetadata(ENCRYPTED_PROPERTY_METADATA_KEY, metadata, target, key);
103
104
  }
104
- };
105
+ });
105
106
  }
106
107
 
107
108
  /**
@@ -111,7 +112,7 @@ export function encrypted(scope: EncryptionScope = EncryptionScope.Subject, deta
111
112
  * @returns The security metadata, or undefined if not decorated with @encrypted.
112
113
  */
113
114
  export function getEncryptedMetadata(target: object, propertyKey: string): SecurityMetadata | undefined {
114
- return Reflect.getMetadata(ENCRYPTED_PROPERTY_METADATA_KEY, target, propertyKey);
115
+ return getPropertyMetadata<SecurityMetadata>(ENCRYPTED_PROPERTY_METADATA_KEY, target, propertyKey);
115
116
  }
116
117
 
117
118
  /**
@@ -121,7 +122,7 @@ export function getEncryptedMetadata(target: object, propertyKey: string): Secur
121
122
  * @returns True if the property has @encrypted decorator; false otherwise.
122
123
  */
123
124
  export function hasEncryptedMetadata(target: object, propertyKey: string): boolean {
124
- return Reflect.hasMetadata(ENCRYPTED_PROPERTY_METADATA_KEY, target, propertyKey);
125
+ return hasPropertyMetadata(ENCRYPTED_PROPERTY_METADATA_KEY, target, propertyKey);
125
126
  }
126
127
 
127
128
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"EventStore.d.ts","sourceRoot":"","sources":["../EventStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EventStore.d.ts","sourceRoot":"","sources":["../EventStore.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ import { ReadModels } from './readModels/ReadModels.js';
16
16
  import { EventSeeding } from './seeding/EventSeeding.js';
17
17
  import { ChronicleTracer } from './Tracing.js';
18
18
  import { DefaultClientArtifactsProvider } from './artifacts/DefaultClientArtifactsProvider.js';
19
+ import { validateArtifactSchemas } from './artifacts/validateArtifactSchemas.js';
19
20
  import { UnitOfWorkManager } from './transactions/UnitOfWorkManager.js';
20
21
  import { Jobs } from './jobs/Jobs.js';
21
22
  import { Webhooks } from './webhooks/Webhooks.js';
@@ -94,6 +95,7 @@ export class EventStore {
94
95
  this.webhooks.discover(),
95
96
  this.seeding.discover()
96
97
  ]);
98
+ validateArtifactSchemas(DefaultClientArtifactsProvider.default);
97
99
  this._logger.debug('Registering discovered artifacts', {
98
100
  eventStore: this.name.value,
99
101
  namespace: this.namespace.value
@@ -1 +1 @@
1
- {"version":3,"file":"EventStore.js","sourceRoot":"","sources":["../EventStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EventStore.js","sourceRoot":"","sources":["../EventStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { IClientArtifactsProvider } from './IClientArtifactsProvider.js';
2
+ /** Resolves every discovered schema before any registration can reach the Kernel. */
3
+ export declare function validateArtifactSchemas(artifacts: IClientArtifactsProvider): void;
4
+ //# sourceMappingURL=validateArtifactSchemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateArtifactSchemas.d.ts","sourceRoot":"","sources":["../../artifacts/validateArtifactSchemas.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAKzE,qFAAqF;AACrF,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,wBAAwB,GAAG,IAAI,CA6BjF"}
@@ -0,0 +1,38 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ import { getEventTypeMetadata } from '../events/eventTypeDecorator.js';
4
+ import { getReadModelMetadata } from '../readModels/readModel.js';
5
+ import { JsonSchemaGenerator } from '../schemas/JsonSchemaGenerator.js';
6
+ /** Resolves every discovered schema before any registration can reach the Kernel. */
7
+ export function validateArtifactSchemas(artifacts) {
8
+ const failures = [];
9
+ for (const type of artifacts.eventTypes) {
10
+ try {
11
+ const metadata = getEventTypeMetadata(type);
12
+ if (!metadata)
13
+ throw new TypeError(`Missing event type metadata for ${type.name}.`);
14
+ void metadata.schema;
15
+ }
16
+ catch (error) {
17
+ failures.push(new Error(`Event type ${type.name}: ${String(error)}`, { cause: error }));
18
+ }
19
+ }
20
+ for (const type of artifacts.readModels) {
21
+ try {
22
+ const metadata = getReadModelMetadata(type);
23
+ if (metadata) {
24
+ void metadata.schema;
25
+ }
26
+ else {
27
+ JsonSchemaGenerator.generate(type);
28
+ }
29
+ }
30
+ catch (error) {
31
+ failures.push(new Error(`Read model ${type.name}: ${String(error)}`, { cause: error }));
32
+ }
33
+ }
34
+ if (failures.length) {
35
+ throw new AggregateError(failures, `Cannot register artifacts: ${failures.length} schema error(s).`);
36
+ }
37
+ }
38
+ //# sourceMappingURL=validateArtifactSchemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateArtifactSchemas.js","sourceRoot":"","sources":["../../artifacts/validateArtifactSchemas.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAGrG,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,qFAAqF;AACrF,MAAM,UAAU,uBAAuB,CAAC,SAAmC;IACvE,MAAM,QAAQ,GAAY,EAAE,CAAC;IAE7B,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACpF,KAAK,QAAQ,CAAC,MAAM,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC;IACL,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,QAAQ,EAAE,CAAC;gBACX,KAAK,QAAQ,CAAC,MAAM,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACJ,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACvC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,8BAA8B,QAAQ,CAAC,MAAM,mBAAmB,CAAC,CAAC;IACzG,CAAC;AACL,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import 'reflect-metadata';
2
2
  import type { ComplianceMetadata } from './ComplianceMetadata.js';
3
+ import { ChronicleClassOrPropertyDecorator } from '../types/propertyDecoratorMetadata.js';
3
4
  /**
4
5
  * Decorator that marks a property or type as containing Personal Identifiable Information (PII)
5
6
  * according to the GDPR definition. When applied to read model properties or ConceptAs types,
@@ -39,7 +40,7 @@ import type { ComplianceMetadata } from './ComplianceMetadata.js';
39
40
  * }
40
41
  * ```
41
42
  */
42
- export declare function pii(details?: string): PropertyDecorator & ClassDecorator;
43
+ export declare function pii(details?: string): ChronicleClassOrPropertyDecorator;
43
44
  /**
44
45
  * Gets the PII compliance metadata for a property.
45
46
  * @param target - The class prototype.
@@ -1 +1 @@
1
- {"version":3,"file":"pii.d.ts","sourceRoot":"","sources":["../../compliance/pii.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAclE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,cAAc,CAkCxE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAElG;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,kBAAkB,GAAG,SAAS,CAEjF;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAE7C"}
1
+ {"version":3,"file":"pii.d.ts","sourceRoot":"","sources":["../../compliance/pii.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,OAAO,EAAE,iCAAiC,EAAqE,MAAM,uCAAuC,CAAC;AAW7J;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,iCAAiC,CAkCvE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAElG;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,kBAAkB,GAAG,SAAS,CAEjF;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAE7C"}
@@ -4,6 +4,7 @@ import 'reflect-metadata';
4
4
  import { ComplianceMetadataType } from './ComplianceMetadataType.js';
5
5
  import { PIINotSupportedOnEventSourceId } from './PIINotSupportedOnEventSourceId.js';
6
6
  import { TypeIntrospector } from '../types/index.js';
7
+ import { decorateClassOrProperty, getPropertyMetadata, hasPropertyMetadata } from '../types/propertyDecoratorMetadata.js';
7
8
  /** The property name this client uses everywhere for the event source identifier. */
8
9
  const EVENT_SOURCE_ID_PROPERTY = 'eventSourceId';
9
10
  /** Metadata key for PII decorator on properties. */
@@ -50,7 +51,7 @@ const PII_TYPE_METADATA_KEY = 'chronicle:compliance:pii:type';
50
51
  * ```
51
52
  */
52
53
  export function pii(details) {
53
- return (target, propertyKey) => {
54
+ return decorateClassOrProperty((target, propertyKey) => {
54
55
  // Class decorator usage (for types like ConceptAs)
55
56
  if (typeof target === 'function' && propertyKey === undefined) {
56
57
  const metadata = {
@@ -70,7 +71,7 @@ export function pii(details) {
70
71
  // PIINotSupportedOnEventSourceId guard, which throws for the same reason when
71
72
  // [PII] is applied to an EventSourceId/EventSourceId<T> type.
72
73
  if (key === EVENT_SOURCE_ID_PROPERTY) {
73
- throw new PIINotSupportedOnEventSourceId(declaringType.name);
74
+ throw new PIINotSupportedOnEventSourceId(declaringType.name || 'the decorated class');
74
75
  }
75
76
  TypeIntrospector.trackProperty(declaringType, key);
76
77
  const metadata = {
@@ -79,7 +80,7 @@ export function pii(details) {
79
80
  };
80
81
  Reflect.defineMetadata(PII_PROPERTY_METADATA_KEY, metadata, target, key);
81
82
  }
82
- };
83
+ });
83
84
  }
84
85
  /**
85
86
  * Gets the PII compliance metadata for a property.
@@ -88,7 +89,7 @@ export function pii(details) {
88
89
  * @returns The compliance metadata, or undefined if not decorated with @pii.
89
90
  */
90
91
  export function getPIIMetadata(target, propertyKey) {
91
- return Reflect.getMetadata(PII_PROPERTY_METADATA_KEY, target, propertyKey);
92
+ return getPropertyMetadata(PII_PROPERTY_METADATA_KEY, target, propertyKey);
92
93
  }
93
94
  /**
94
95
  * Checks whether a property has been decorated with @pii.
@@ -97,7 +98,7 @@ export function getPIIMetadata(target, propertyKey) {
97
98
  * @returns True if the property has @pii decorator; false otherwise.
98
99
  */
99
100
  export function hasPIIMetadata(target, propertyKey) {
100
- return Reflect.hasMetadata(PII_PROPERTY_METADATA_KEY, target, propertyKey);
101
+ return hasPropertyMetadata(PII_PROPERTY_METADATA_KEY, target, propertyKey);
101
102
  }
102
103
  /**
103
104
  * Gets the PII compliance metadata for a type.
@@ -1 +1 @@
1
- {"version":3,"file":"pii.js","sourceRoot":"","sources":["../../compliance/pii.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,qFAAqF;AACrF,MAAM,wBAAwB,GAAG,eAAe,CAAC;AAEjD,oDAAoD;AACpD,MAAM,yBAAyB,GAAG,mCAAmC,CAAC;AAEtE,+CAA+C;AAC/C,MAAM,qBAAqB,GAAG,+BAA+B,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,UAAU,GAAG,CAAC,OAAgB;IAChC,OAAO,CAAC,MAAyB,EAAE,WAA6B,EAAE,EAAE;QAChE,mDAAmD;QACnD,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5D,MAAM,QAAQ,GAAuB;gBACjC,YAAY,EAAE,sBAAsB,CAAC,GAAG;gBACxC,OAAO,EAAE,OAAO,IAAI,EAAE;aACzB,CAAC;YACF,OAAO,CAAC,cAAc,CAAC,qBAAqB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChE,OAAO;QACX,CAAC;QAED,2BAA2B;QAC3B,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,aAAa,GAAI,MAAoC,CAAC,WAAW,CAAC;YAExE,2EAA2E;YAC3E,iFAAiF;YACjF,8DAA8D;YAC9D,8EAA8E;YAC9E,8DAA8D;YAC9D,IAAI,GAAG,KAAK,wBAAwB,EAAE,CAAC;gBACnC,MAAM,IAAI,8BAA8B,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACjE,CAAC;YAED,gBAAgB,CAAC,aAAa,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAuB;gBACjC,YAAY,EAAE,sBAAsB,CAAC,GAAG;gBACxC,OAAO,EAAE,OAAO,IAAI,EAAE;aACzB,CAAC;YACF,OAAO,CAAC,cAAc,CAAC,yBAAyB,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,WAAmB;IAC9D,OAAO,OAAO,CAAC,WAAW,CAAC,yBAAyB,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,WAAmB;IAC9D,OAAO,OAAO,CAAC,WAAW,CAAC,yBAAyB,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAC/E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAc;IAC7C,OAAO,OAAO,CAAC,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,IAAc;IAChC,OAAO,OAAO,CAAC,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"pii.js","sourceRoot":"","sources":["../../compliance/pii.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAqC,uBAAuB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAE7J,qFAAqF;AACrF,MAAM,wBAAwB,GAAG,eAAe,CAAC;AAEjD,oDAAoD;AACpD,MAAM,yBAAyB,GAAG,mCAAmC,CAAC;AAEtE,+CAA+C;AAC/C,MAAM,qBAAqB,GAAG,+BAA+B,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,UAAU,GAAG,CAAC,OAAgB;IAChC,OAAO,uBAAuB,CAAC,CAAC,MAAyB,EAAE,WAA6B,EAAE,EAAE;QACxF,mDAAmD;QACnD,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5D,MAAM,QAAQ,GAAuB;gBACjC,YAAY,EAAE,sBAAsB,CAAC,GAAG;gBACxC,OAAO,EAAE,OAAO,IAAI,EAAE;aACzB,CAAC;YACF,OAAO,CAAC,cAAc,CAAC,qBAAqB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChE,OAAO;QACX,CAAC;QAED,2BAA2B;QAC3B,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,aAAa,GAAI,MAAoC,CAAC,WAAW,CAAC;YAExE,2EAA2E;YAC3E,iFAAiF;YACjF,8DAA8D;YAC9D,8EAA8E;YAC9E,8DAA8D;YAC9D,IAAI,GAAG,KAAK,wBAAwB,EAAE,CAAC;gBACnC,MAAM,IAAI,8BAA8B,CAAC,aAAa,CAAC,IAAI,IAAI,qBAAqB,CAAC,CAAC;YAC1F,CAAC;YAED,gBAAgB,CAAC,aAAa,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAuB;gBACjC,YAAY,EAAE,sBAAsB,CAAC,GAAG;gBACxC,OAAO,EAAE,OAAO,IAAI,EAAE;aACzB,CAAC;YACF,OAAO,CAAC,cAAc,CAAC,yBAAyB,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,WAAmB;IAC9D,OAAO,mBAAmB,CAAqB,yBAAyB,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACnG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,WAAmB;IAC9D,OAAO,mBAAmB,CAAC,yBAAyB,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAC/E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAc;IAC7C,OAAO,OAAO,CAAC,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,IAAc;IAChC,OAAO,OAAO,CAAC,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;AAC5D,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import 'reflect-metadata';
2
+ import { ChroniclePropertyDecorator } from '../types/propertyDecoratorMetadata.js';
2
3
  /**
3
4
  * Decorator that marks a property as the compliance subject - the natural person whose Personal
4
5
  * Identifiable Information (PII) a read model or event carries. The subject selects which
@@ -22,7 +23,7 @@ import 'reflect-metadata';
22
23
  * }
23
24
  * ```
24
25
  */
25
- export declare function subject(): PropertyDecorator;
26
+ export declare function subject(): ChroniclePropertyDecorator;
26
27
  /**
27
28
  * Checks whether a property has been decorated with @subject.
28
29
  * @param target - The class prototype.
@@ -1 +1 @@
1
- {"version":3,"file":"subject.d.ts","sourceRoot":"","sources":["../../compliance/subject.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAS1B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,OAAO,IAAI,iBAAiB,CAS3C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAE/E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAEzE"}
1
+ {"version":3,"file":"subject.d.ts","sourceRoot":"","sources":["../../compliance/subject.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,0BAA0B,EAAiE,MAAM,uCAAuC,CAAC;AAQlJ;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,OAAO,IAAI,0BAA0B,CASpD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAE/E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAEzE"}
@@ -2,6 +2,7 @@
2
2
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
3
  import 'reflect-metadata';
4
4
  import { TypeIntrospector } from '../types/index.js';
5
+ import { decorateProperty, getTypeOrFieldMetadata, hasPropertyMetadata } from '../types/propertyDecoratorMetadata.js';
5
6
  /** Metadata key for the subject decorator on a property. */
6
7
  const SUBJECT_PROPERTY_METADATA_KEY = 'chronicle:compliance:subject:property';
7
8
  /** Metadata key for the name of the subject property recorded on the declaring type. */
@@ -30,13 +31,13 @@ const SUBJECT_TYPE_METADATA_KEY = 'chronicle:compliance:subject:type';
30
31
  * ```
31
32
  */
32
33
  export function subject() {
33
- return (target, propertyKey) => {
34
+ return decorateProperty((target, propertyKey) => {
34
35
  const key = propertyKey.toString();
35
36
  const declaringType = target.constructor;
36
37
  TypeIntrospector.trackProperty(declaringType, key);
37
38
  Reflect.defineMetadata(SUBJECT_PROPERTY_METADATA_KEY, true, target, key);
38
39
  Reflect.defineMetadata(SUBJECT_TYPE_METADATA_KEY, key, declaringType);
39
- };
40
+ });
40
41
  }
41
42
  /**
42
43
  * Checks whether a property has been decorated with @subject.
@@ -45,7 +46,7 @@ export function subject() {
45
46
  * @returns True if the property has the @subject decorator; false otherwise.
46
47
  */
47
48
  export function hasSubjectMetadata(target, propertyKey) {
48
- return Reflect.hasMetadata(SUBJECT_PROPERTY_METADATA_KEY, target, propertyKey);
49
+ return hasPropertyMetadata(SUBJECT_PROPERTY_METADATA_KEY, target, propertyKey);
49
50
  }
50
51
  /**
51
52
  * Gets the name of the property decorated with @subject on a type, if any.
@@ -53,6 +54,6 @@ export function hasSubjectMetadata(target, propertyKey) {
53
54
  * @returns The decorated property name, or undefined when no property is decorated.
54
55
  */
55
56
  export function getSubjectPropertyName(type) {
56
- return Reflect.getMetadata(SUBJECT_TYPE_METADATA_KEY, type);
57
+ return getTypeOrFieldMetadata(SUBJECT_TYPE_METADATA_KEY, type);
57
58
  }
58
59
  //# sourceMappingURL=subject.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subject.js","sourceRoot":"","sources":["../../compliance/subject.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,4DAA4D;AAC5D,MAAM,6BAA6B,GAAG,uCAAuC,CAAC;AAE9E,wFAAwF;AACxF,MAAM,yBAAyB,GAAG,mCAAmC,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,OAAO;IACnB,OAAO,CAAC,MAAc,EAAE,WAA4B,EAAE,EAAE;QACpD,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,aAAa,GAAI,MAAoC,CAAC,WAAW,CAAC;QAExE,gBAAgB,CAAC,aAAa,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACnD,OAAO,CAAC,cAAc,CAAC,6BAA6B,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QACzE,OAAO,CAAC,cAAc,CAAC,yBAAyB,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;IAC1E,CAAC,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,WAAmB;IAClE,OAAO,OAAO,CAAC,WAAW,CAAC,6BAA6B,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACnF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAc;IACjD,OAAO,OAAO,CAAC,WAAW,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"subject.js","sourceRoot":"","sources":["../../compliance/subject.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAA8B,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAElJ,4DAA4D;AAC5D,MAAM,6BAA6B,GAAG,uCAAuC,CAAC;AAE9E,wFAAwF;AACxF,MAAM,yBAAyB,GAAG,mCAAmC,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,OAAO;IACnB,OAAO,gBAAgB,CAAC,CAAC,MAAc,EAAE,WAA4B,EAAE,EAAE;QACrE,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,aAAa,GAAI,MAAoC,CAAC,WAAW,CAAC;QAExE,gBAAgB,CAAC,aAAa,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACnD,OAAO,CAAC,cAAc,CAAC,6BAA6B,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QACzE,OAAO,CAAC,cAAc,CAAC,yBAAyB,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,WAAmB;IAClE,OAAO,mBAAmB,CAAC,6BAA6B,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACnF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAc;IACjD,OAAO,sBAAsB,CAAS,yBAAyB,EAAE,IAAI,CAAC,CAAC;AAC3E,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import 'reflect-metadata';
2
2
  import type { SecurityMetadata } from './SecurityMetadata.js';
3
3
  import { EncryptionScope } from './EncryptionScope.js';
4
+ import { ChronicleClassOrPropertyDecorator } from '../types/propertyDecoratorMetadata.js';
4
5
  /**
5
6
  * Decorator that marks a property or type as needing plain-confidentiality encryption at rest - a
6
7
  * security measure, not a compliance one.
@@ -42,7 +43,7 @@ import { EncryptionScope } from './EncryptionScope.js';
42
43
  * }
43
44
  * ```
44
45
  */
45
- export declare function encrypted(scope?: EncryptionScope, details?: string): PropertyDecorator & ClassDecorator;
46
+ export declare function encrypted(scope?: EncryptionScope, details?: string): ChronicleClassOrPropertyDecorator;
46
47
  /**
47
48
  * Gets the encrypted security metadata for a property.
48
49
  * @param target - The class prototype.
@@ -1 +1 @@
1
- {"version":3,"file":"encrypted.d.ts","sourceRoot":"","sources":["../../confidentiality/encrypted.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAwBvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,SAAS,CAAC,KAAK,GAAE,eAAyC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,cAAc,CAiChI;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEtG;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAEjF;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,GAAG,gBAAgB,GAAG,SAAS,CAErF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEnD"}
1
+ {"version":3,"file":"encrypted.d.ts","sourceRoot":"","sources":["../../confidentiality/encrypted.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAAE,iCAAiC,EAAqE,MAAM,uCAAuC,CAAC;AAsB7J;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,SAAS,CAAC,KAAK,GAAE,eAAyC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,iCAAiC,CAiC/H;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEtG;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAEjF;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,GAAG,gBAAgB,GAAG,SAAS,CAErF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEnD"}