@nest-yalc-2/omnikernel-module 2.2.1 → 2.2.4

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 (74) hide show
  1. package/package.json +22 -14
  2. package/src/__tests__/omni-collection.entity.spec.ts +49 -49
  3. package/src/__tests__/omni-collection.service.spec.ts +83 -83
  4. package/src/__tests__/omni-document.entity.spec.ts +55 -55
  5. package/src/__tests__/omni-document.service.spec.ts +83 -83
  6. package/src/__tests__/omni-extension-projection-constraints.spec.ts +518 -518
  7. package/src/__tests__/omni-extension-projection.registration.spec.ts +947 -946
  8. package/src/__tests__/omni-extension-projection.service.spec.ts +806 -806
  9. package/src/__tests__/omni-external-ref.entity.spec.ts +36 -36
  10. package/src/__tests__/omni-external-ref.service.spec.ts +252 -252
  11. package/src/__tests__/omni-named.entity.spec.ts +33 -33
  12. package/src/__tests__/omni-record.entity.spec.ts +32 -32
  13. package/src/__tests__/omni-record.service.spec.ts +107 -107
  14. package/src/__tests__/omni-relation-semantics.spec.ts +102 -102
  15. package/src/__tests__/omni-relation.entity.spec.ts +38 -38
  16. package/src/__tests__/omni-scope-substrate.spec.ts +81 -81
  17. package/src/__tests__/omni-scoped.backend.spec.ts +115 -115
  18. package/src/__tests__/omni-scoped.service.spec.ts +354 -354
  19. package/src/__tests__/omnikernel.diagnostics.spec.ts +94 -94
  20. package/src/__tests__/omnikernel.module.spec.ts +38 -40
  21. package/src/__tests__/omnikernel.persistence.spec.ts +154 -154
  22. package/src/__tests__/omnikernel.public-api.spec.ts +238 -238
  23. package/src/__tests__/omnikernel.query.service.spec.ts +155 -155
  24. package/src/base/omni-base.entity.ts +41 -41
  25. package/src/base/omni-external-ref.entity.ts +53 -53
  26. package/src/base/omni-named.entity.ts +16 -16
  27. package/src/base/omni-record.entity.ts +51 -51
  28. package/src/base/omni-relation.entity.ts +72 -72
  29. package/src/index.ts +49 -49
  30. package/src/omni-collection-kind.enum.ts +10 -10
  31. package/src/omni-collection.backend.ts +16 -16
  32. package/src/omni-collection.dto.ts +170 -170
  33. package/src/omni-collection.entity.ts +21 -21
  34. package/src/omni-collection.service.ts +75 -75
  35. package/src/omni-document-kind.enum.ts +12 -12
  36. package/src/omni-document.backend.ts +16 -16
  37. package/src/omni-document.dto.ts +198 -198
  38. package/src/omni-document.entity.ts +30 -30
  39. package/src/omni-document.service.ts +75 -75
  40. package/src/omni-dto.helpers.ts +21 -21
  41. package/src/omni-extension-projection.definition.ts +294 -294
  42. package/src/omni-extension-projection.resource.ts +274 -274
  43. package/src/omni-extension-projection.service.ts +452 -452
  44. package/src/omni-external-ref-binding.validator.ts +53 -53
  45. package/src/omni-external-ref-internal-type.enum.ts +11 -11
  46. package/src/omni-external-ref.backend.ts +25 -25
  47. package/src/omni-external-ref.dto.ts +128 -128
  48. package/src/omni-external-ref.service.ts +255 -255
  49. package/src/omni-migration.ts +365 -365
  50. package/src/omni-named.backend.ts +11 -11
  51. package/src/omni-named.dto.ts +86 -86
  52. package/src/omni-projection.catalog.ts +345 -345
  53. package/src/omni-projection.lifecycle.ts +53 -53
  54. package/src/omni-record-status.enum.ts +11 -11
  55. package/src/omni-record.backend.ts +19 -19
  56. package/src/omni-record.dto.ts +157 -157
  57. package/src/omni-record.service.ts +113 -113
  58. package/src/omni-relation-kind.contract.ts +49 -49
  59. package/src/omni-relation-kind.enum.ts +12 -12
  60. package/src/omni-relation-projection.definition.ts +166 -166
  61. package/src/omni-relation-projection.resource.ts +360 -360
  62. package/src/omni-relation-projection.service.ts +610 -610
  63. package/src/omni-relation-semantics.ts +52 -52
  64. package/src/omni-relation-status.enum.ts +11 -11
  65. package/src/omni-relation.backend.ts +21 -21
  66. package/src/omni-relation.dto.ts +142 -142
  67. package/src/omni-relation.service.ts +159 -159
  68. package/src/omni-scope.ts +161 -161
  69. package/src/omni-scoped.backend.ts +110 -110
  70. package/src/omni-scoped.repository.ts +34 -34
  71. package/src/omni-scoped.service.ts +338 -338
  72. package/src/omnikernel.diagnostics.ts +83 -83
  73. package/src/omnikernel.module.ts +97 -97
  74. package/src/omnikernel.query.service.ts +108 -108
@@ -1,110 +1,110 @@
1
- import {
2
- Scope,
3
- type FactoryProvider,
4
- type InjectionToken,
5
- type Provider,
6
- } from '@nestjs/common';
7
- import { getRepositoryToken } from '@nestjs/typeorm';
8
- import { getProviderToken } from '@nest-yalc-2/crud-gen/crud-gen.helpers.js';
9
- import {
10
- getServiceToken,
11
- type GenericService,
12
- } from '@nest-yalc-2/crud-gen/typeorm/generic.service.js';
13
- import { CGExtendedRepositoryFactory } from '@nest-yalc-2/crud-gen/typeorm/generic.repository.js';
14
- import {
15
- GQLDataLoader,
16
- getDataloaderToken,
17
- getFn,
18
- } from '@nest-yalc-2/data-loader';
19
- import type { ClassType } from '@node-yalc/types/globals.js';
20
- import { EventEmitter2 } from '@nestjs/event-emitter';
21
- import type { ObjectLiteral } from 'typeorm';
22
- import type { GenericTypeORMRepository } from '@nest-yalc-2/crud-gen/typeorm/generic.repository.js';
23
- import {
24
- OMNI_KERNEL_OPTIONS,
25
- OmniScopeContext,
26
- normalizeOmniKernelRegistrationOptions,
27
- } from './omni-scope.js';
28
-
29
- export interface OmniScopedBackendFactoryOptions<Entity extends ObjectLiteral> {
30
- entityModel: ClassType<Entity>;
31
- dbConnection: string;
32
- serviceToken?: string;
33
- serviceProvider?: InjectionToken;
34
- additionalInject?: readonly InjectionToken[];
35
- createService: (
36
- repository: GenericTypeORMRepository<Entity>,
37
- scope: OmniScopeContext,
38
- options: ReturnType<typeof normalizeOmniKernelRegistrationOptions>,
39
- ...additionalDependencies: unknown[]
40
- ) => GenericService<Entity>;
41
- }
42
-
43
- export interface OmniScopedBackendFactoryResult<Entity extends ObjectLiteral> {
44
- providers: Provider[];
45
- repository: ClassType<GenericTypeORMRepository<Entity>>;
46
- }
47
-
48
- /**
49
- * Builds the normal CrudGen service/loader provider shape with a request
50
- * scope. The loader cache key carries the same scope as the service query.
51
- */
52
- export function omniScopedBackendProvidersFactory<Entity extends ObjectLiteral>(
53
- options: OmniScopedBackendFactoryOptions<Entity>,
54
- ): OmniScopedBackendFactoryResult<Entity> {
55
- const serviceToken =
56
- options.serviceToken ?? getServiceToken(options.entityModel);
57
- const serviceProviderToken = options.serviceProvider ?? serviceToken;
58
- const additionalInject = options.additionalInject ?? [];
59
- const serviceProvider: FactoryProvider = {
60
- provide: serviceProviderToken,
61
- scope: Scope.REQUEST,
62
- useFactory: (
63
- repository: GenericTypeORMRepository<Entity>,
64
- scope: OmniScopeContext,
65
- moduleOptions: ReturnType<typeof normalizeOmniKernelRegistrationOptions>,
66
- ...additionalDependencies: unknown[]
67
- ) =>
68
- options.createService(
69
- repository,
70
- scope,
71
- moduleOptions,
72
- ...additionalDependencies,
73
- ),
74
- inject: [
75
- getRepositoryToken(options.entityModel, options.dbConnection),
76
- OmniScopeContext,
77
- OMNI_KERNEL_OPTIONS,
78
- ...additionalInject,
79
- ],
80
- };
81
- const loaderProvider: FactoryProvider = {
82
- provide: getDataloaderToken(options.entityModel),
83
- scope: Scope.REQUEST,
84
- useFactory: (
85
- service: GenericService<Entity>,
86
- scope: OmniScopeContext,
87
- events: EventEmitter2,
88
- ) =>
89
- new GQLDataLoader(getFn(service), 'guid' as keyof Entity, events, {
90
- cacheKeyFn: (key) => scope.cacheKey(key),
91
- }),
92
- inject: [serviceToken, OmniScopeContext, EventEmitter2],
93
- };
94
-
95
- const serviceAlias: Provider[] =
96
- serviceProviderToken === serviceToken
97
- ? []
98
- : [{ provide: serviceToken, useExisting: serviceProviderToken }];
99
-
100
- return {
101
- providers: [serviceProvider, ...serviceAlias, loaderProvider],
102
- repository: CGExtendedRepositoryFactory(options.entityModel),
103
- };
104
- }
105
-
106
- export function omniBackendServiceToken(
107
- provider: Parameters<typeof getProviderToken>[0],
108
- ): string {
109
- return getProviderToken(provider);
110
- }
1
+ import {
2
+ Scope,
3
+ type FactoryProvider,
4
+ type InjectionToken,
5
+ type Provider,
6
+ } from '@nestjs/common';
7
+ import { getRepositoryToken } from '@nestjs/typeorm';
8
+ import { getProviderToken } from '@nest-yalc-2/crud-gen/crud-gen.helpers.js';
9
+ import {
10
+ getServiceToken,
11
+ type GenericService,
12
+ } from '@nest-yalc-2/crud-gen/typeorm/generic.service.js';
13
+ import { CGExtendedRepositoryFactory } from '@nest-yalc-2/crud-gen/typeorm/generic.repository.js';
14
+ import {
15
+ GQLDataLoader,
16
+ getDataloaderToken,
17
+ getFn,
18
+ } from '@nest-yalc-2/data-loader';
19
+ import type { ClassType } from '@node-yalc/types/globals.js';
20
+ import { EventEmitter2 } from '@nestjs/event-emitter';
21
+ import type { ObjectLiteral } from 'typeorm';
22
+ import type { GenericTypeORMRepository } from '@nest-yalc-2/crud-gen/typeorm/generic.repository.js';
23
+ import {
24
+ OMNI_KERNEL_OPTIONS,
25
+ OmniScopeContext,
26
+ normalizeOmniKernelRegistrationOptions,
27
+ } from './omni-scope.js';
28
+
29
+ export interface OmniScopedBackendFactoryOptions<Entity extends ObjectLiteral> {
30
+ entityModel: ClassType<Entity>;
31
+ dbConnection: string;
32
+ serviceToken?: string;
33
+ serviceProvider?: InjectionToken;
34
+ additionalInject?: readonly InjectionToken[];
35
+ createService: (
36
+ repository: GenericTypeORMRepository<Entity>,
37
+ scope: OmniScopeContext,
38
+ options: ReturnType<typeof normalizeOmniKernelRegistrationOptions>,
39
+ ...additionalDependencies: unknown[]
40
+ ) => GenericService<Entity>;
41
+ }
42
+
43
+ export interface OmniScopedBackendFactoryResult<Entity extends ObjectLiteral> {
44
+ providers: Provider[];
45
+ repository: ClassType<GenericTypeORMRepository<Entity>>;
46
+ }
47
+
48
+ /**
49
+ * Builds the normal CrudGen service/loader provider shape with a request
50
+ * scope. The loader cache key carries the same scope as the service query.
51
+ */
52
+ export function omniScopedBackendProvidersFactory<Entity extends ObjectLiteral>(
53
+ options: OmniScopedBackendFactoryOptions<Entity>,
54
+ ): OmniScopedBackendFactoryResult<Entity> {
55
+ const serviceToken =
56
+ options.serviceToken ?? getServiceToken(options.entityModel);
57
+ const serviceProviderToken = options.serviceProvider ?? serviceToken;
58
+ const additionalInject = options.additionalInject ?? [];
59
+ const serviceProvider: FactoryProvider = {
60
+ provide: serviceProviderToken,
61
+ scope: Scope.REQUEST,
62
+ useFactory: (
63
+ repository: GenericTypeORMRepository<Entity>,
64
+ scope: OmniScopeContext,
65
+ moduleOptions: ReturnType<typeof normalizeOmniKernelRegistrationOptions>,
66
+ ...additionalDependencies: unknown[]
67
+ ) =>
68
+ options.createService(
69
+ repository,
70
+ scope,
71
+ moduleOptions,
72
+ ...additionalDependencies,
73
+ ),
74
+ inject: [
75
+ getRepositoryToken(options.entityModel, options.dbConnection),
76
+ OmniScopeContext,
77
+ OMNI_KERNEL_OPTIONS,
78
+ ...additionalInject,
79
+ ],
80
+ };
81
+ const loaderProvider: FactoryProvider = {
82
+ provide: getDataloaderToken(options.entityModel),
83
+ scope: Scope.REQUEST,
84
+ useFactory: (
85
+ service: GenericService<Entity>,
86
+ scope: OmniScopeContext,
87
+ events: EventEmitter2,
88
+ ) =>
89
+ new GQLDataLoader(getFn(service), 'guid' as keyof Entity, events, {
90
+ cacheKeyFn: (key) => scope.cacheKey(key),
91
+ }),
92
+ inject: [serviceToken, OmniScopeContext, EventEmitter2],
93
+ };
94
+
95
+ const serviceAlias: Provider[] =
96
+ serviceProviderToken === serviceToken
97
+ ? []
98
+ : [{ provide: serviceToken, useExisting: serviceProviderToken }];
99
+
100
+ return {
101
+ providers: [serviceProvider, ...serviceAlias, loaderProvider],
102
+ repository: CGExtendedRepositoryFactory(options.entityModel),
103
+ };
104
+ }
105
+
106
+ export function omniBackendServiceToken(
107
+ provider: Parameters<typeof getProviderToken>[0],
108
+ ): string {
109
+ return getProviderToken(provider);
110
+ }
@@ -1,34 +1,34 @@
1
- import type { FindOptionsWhere, ObjectLiteral, Repository } from 'typeorm';
2
- import type { OmniScope } from './omni-scope.js';
3
-
4
- /**
5
- * Small repository facade for normal Omni lookups. It mechanically adds the
6
- * current scope and is the supported lower-level alternative to passing raw
7
- * repositories between application layers.
8
- */
9
- export class OmniScopedRepository<Entity extends ObjectLiteral> {
10
- constructor(
11
- private readonly repository: Repository<Entity>,
12
- private readonly scope: OmniScope,
13
- ) {}
14
-
15
- where(
16
- where: FindOptionsWhere<Entity> = {} as FindOptionsWhere<Entity>,
17
- ): FindOptionsWhere<Entity> {
18
- if ('scopeId' in (where as object)) {
19
- throw new TypeError('Omni scopeId is derived from server context.');
20
- }
21
- return {
22
- ...(where as object),
23
- scopeId: this.scope.scopeId,
24
- } as unknown as FindOptionsWhere<Entity>;
25
- }
26
-
27
- findOneByGuid(guid: string): Promise<Entity | null> {
28
- return this.repository.findOne({ where: this.where({ guid } as never) });
29
- }
30
-
31
- find(where: FindOptionsWhere<Entity> = {} as FindOptionsWhere<Entity>) {
32
- return this.repository.find({ where: this.where(where) });
33
- }
34
- }
1
+ import type { FindOptionsWhere, ObjectLiteral, Repository } from 'typeorm';
2
+ import type { OmniScope } from './omni-scope.js';
3
+
4
+ /**
5
+ * Small repository facade for normal Omni lookups. It mechanically adds the
6
+ * current scope and is the supported lower-level alternative to passing raw
7
+ * repositories between application layers.
8
+ */
9
+ export class OmniScopedRepository<Entity extends ObjectLiteral> {
10
+ constructor(
11
+ private readonly repository: Repository<Entity>,
12
+ private readonly scope: OmniScope,
13
+ ) {}
14
+
15
+ where(
16
+ where: FindOptionsWhere<Entity> = {} as FindOptionsWhere<Entity>,
17
+ ): FindOptionsWhere<Entity> {
18
+ if ('scopeId' in (where as object)) {
19
+ throw new TypeError('Omni scopeId is derived from server context.');
20
+ }
21
+ return {
22
+ ...(where as object),
23
+ scopeId: this.scope.scopeId,
24
+ } as unknown as FindOptionsWhere<Entity>;
25
+ }
26
+
27
+ findOneByGuid(guid: string): Promise<Entity | null> {
28
+ return this.repository.findOne({ where: this.where({ guid } as never) });
29
+ }
30
+
31
+ find(where: FindOptionsWhere<Entity> = {} as FindOptionsWhere<Entity>) {
32
+ return this.repository.find({ where: this.where(where) });
33
+ }
34
+ }