mm-share-lib 0.0.7 → 0.0.9

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 (110) hide show
  1. package/dist/src/lib/index.d.ts +0 -1
  2. package/dist/src/lib/index.js +0 -1
  3. package/dist/src/lib/index.js.map +1 -1
  4. package/dist/src/lib/search-engine/index.d.ts +1 -1
  5. package/dist/src/lib/search-engine/index.js +1 -1
  6. package/dist/src/lib/search-engine/index.js.map +1 -1
  7. package/dist/src/lib/search-engine/typesense/metadata/schema.metadata.d.ts +5 -4
  8. package/dist/src/lib/search-engine/typesense/metadata/typesense.metadata-registry.d.ts +1 -1
  9. package/dist/src/lib/search-engine/typesense/metadata/typesense.metadata-registry.js.map +1 -1
  10. package/dist/src/lib/search-engine/typesense/typesense.module.test.js.map +1 -1
  11. package/dist/tsconfig.build.tsbuildinfo +1 -1
  12. package/package.json +1 -2
  13. package/src/lib/index.ts +0 -1
  14. package/src/lib/search-engine/index.ts +1 -1
  15. package/src/lib/search-engine/typesense/metadata/index.ts +2 -2
  16. package/src/lib/search-engine/typesense/metadata/schema.metadata.ts +18 -13
  17. package/src/lib/search-engine/typesense/metadata/typesense.metadata-registry.ts +28 -28
  18. package/src/lib/search-engine/typesense/service/index.ts +1 -1
  19. package/src/lib/search-engine/typesense/typesense-module.interface.ts +36 -36
  20. package/src/lib/search-engine/typesense/typesense.constants.ts +1 -1
  21. package/src/lib/search-engine/typesense/typesense.module.test.ts +92 -94
  22. package/src/lib/search-engine/typesense/typesense.module.ts +76 -76
  23. package/src/lib/search-engine/typesense/typesense.providers.ts +42 -42
  24. package/dist/src/lib/search-engine/schema/generic.schema.d.ts +0 -2
  25. package/dist/src/lib/search-engine/schema/generic.schema.js +0 -7
  26. package/dist/src/lib/search-engine/schema/generic.schema.js.map +0 -1
  27. package/dist/src/lib/search-engine/schema/index.d.ts +0 -1
  28. package/dist/src/lib/search-engine/schema/index.js +0 -18
  29. package/dist/src/lib/search-engine/schema/index.js.map +0 -1
  30. package/dist/src/lib/typesense/client/index.d.ts +0 -1
  31. package/dist/src/lib/typesense/client/index.js +0 -6
  32. package/dist/src/lib/typesense/client/index.js.map +0 -1
  33. package/dist/src/lib/typesense/collection/index.d.ts +0 -1
  34. package/dist/src/lib/typesense/collection/index.js +0 -18
  35. package/dist/src/lib/typesense/collection/index.js.map +0 -1
  36. package/dist/src/lib/typesense/collection/typesense-colletctions.creator.d.ts +0 -10
  37. package/dist/src/lib/typesense/collection/typesense-colletctions.creator.js +0 -42
  38. package/dist/src/lib/typesense/collection/typesense-colletctions.creator.js.map +0 -1
  39. package/dist/src/lib/typesense/decorator/field.decorator.d.ts +0 -9
  40. package/dist/src/lib/typesense/decorator/field.decorator.js +0 -15
  41. package/dist/src/lib/typesense/decorator/field.decorator.js.map +0 -1
  42. package/dist/src/lib/typesense/decorator/index.d.ts +0 -2
  43. package/dist/src/lib/typesense/decorator/index.js +0 -19
  44. package/dist/src/lib/typesense/decorator/index.js.map +0 -1
  45. package/dist/src/lib/typesense/decorator/schema.decorator.d.ts +0 -7
  46. package/dist/src/lib/typesense/decorator/schema.decorator.js +0 -16
  47. package/dist/src/lib/typesense/decorator/schema.decorator.js.map +0 -1
  48. package/dist/src/lib/typesense/document/base.document.d.ts +0 -3
  49. package/dist/src/lib/typesense/document/base.document.js +0 -7
  50. package/dist/src/lib/typesense/document/base.document.js.map +0 -1
  51. package/dist/src/lib/typesense/document/index.d.ts +0 -1
  52. package/dist/src/lib/typesense/document/index.js +0 -18
  53. package/dist/src/lib/typesense/document/index.js.map +0 -1
  54. package/dist/src/lib/typesense/index.d.ts +0 -4
  55. package/dist/src/lib/typesense/index.js +0 -21
  56. package/dist/src/lib/typesense/index.js.map +0 -1
  57. package/dist/src/lib/typesense/metadata/index.d.ts +0 -4
  58. package/dist/src/lib/typesense/metadata/index.js +0 -21
  59. package/dist/src/lib/typesense/metadata/index.js.map +0 -1
  60. package/dist/src/lib/typesense/metadata/schema.metadata.d.ts +0 -19
  61. package/dist/src/lib/typesense/metadata/schema.metadata.js +0 -3
  62. package/dist/src/lib/typesense/metadata/schema.metadata.js.map +0 -1
  63. package/dist/src/lib/typesense/metadata/typesense.metadata-accessor.d.ts +0 -7
  64. package/dist/src/lib/typesense/metadata/typesense.metadata-accessor.js +0 -47
  65. package/dist/src/lib/typesense/metadata/typesense.metadata-accessor.js.map +0 -1
  66. package/dist/src/lib/typesense/metadata/typesense.metadata-explorer.d.ts +0 -14
  67. package/dist/src/lib/typesense/metadata/typesense.metadata-explorer.js +0 -50
  68. package/dist/src/lib/typesense/metadata/typesense.metadata-explorer.js.map +0 -1
  69. package/dist/src/lib/typesense/metadata/typesense.metadata-registry.d.ts +0 -10
  70. package/dist/src/lib/typesense/metadata/typesense.metadata-registry.js +0 -33
  71. package/dist/src/lib/typesense/metadata/typesense.metadata-registry.js.map +0 -1
  72. package/dist/src/lib/typesense/module/index.d.ts +0 -4
  73. package/dist/src/lib/typesense/module/index.js +0 -21
  74. package/dist/src/lib/typesense/module/index.js.map +0 -1
  75. package/dist/src/lib/typesense/module/interface.module.d.ts +0 -27
  76. package/dist/src/lib/typesense/module/interface.module.js +0 -3
  77. package/dist/src/lib/typesense/module/interface.module.js.map +0 -1
  78. package/dist/src/lib/typesense/module/typesense.constant.d.ts +0 -1
  79. package/dist/src/lib/typesense/module/typesense.constant.js +0 -5
  80. package/dist/src/lib/typesense/module/typesense.constant.js.map +0 -1
  81. package/dist/src/lib/typesense/module/typesense.module.d.ts +0 -8
  82. package/dist/src/lib/typesense/module/typesense.module.js +0 -74
  83. package/dist/src/lib/typesense/module/typesense.module.js.map +0 -1
  84. package/dist/src/lib/typesense/module/typesense.provider.d.ts +0 -5
  85. package/dist/src/lib/typesense/module/typesense.provider.js +0 -48
  86. package/dist/src/lib/typesense/module/typesense.provider.js.map +0 -1
  87. package/src/lib/search-engine/schema/generic.schema.ts +0 -1
  88. package/src/lib/search-engine/schema/index.ts +0 -1
  89. package/src/lib/typesense/client/index.ts +0 -1
  90. package/src/lib/typesense/collection/index.ts +0 -1
  91. package/src/lib/typesense/collection/typesense-colletctions.creator.ts +0 -29
  92. package/src/lib/typesense/decorator/field.decorator.spec.ts +0 -89
  93. package/src/lib/typesense/decorator/field.decorator.ts +0 -44
  94. package/src/lib/typesense/decorator/index.ts +0 -2
  95. package/src/lib/typesense/decorator/schema.decorator.ts +0 -23
  96. package/src/lib/typesense/document/base.document.ts +0 -3
  97. package/src/lib/typesense/document/index.ts +0 -1
  98. package/src/lib/typesense/index.ts +0 -6
  99. package/src/lib/typesense/metadata/index.ts +0 -4
  100. package/src/lib/typesense/metadata/schema.metadata.ts +0 -21
  101. package/src/lib/typesense/metadata/typesense.metadata-accessor.ts +0 -37
  102. package/src/lib/typesense/metadata/typesense.metadata-explorer.spec.ts +0 -56
  103. package/src/lib/typesense/metadata/typesense.metadata-explorer.ts +0 -41
  104. package/src/lib/typesense/metadata/typesense.metadata-registry.ts +0 -28
  105. package/src/lib/typesense/module/index.ts +0 -4
  106. package/src/lib/typesense/module/interface.module.ts +0 -36
  107. package/src/lib/typesense/module/typesense.constant.ts +0 -1
  108. package/src/lib/typesense/module/typesense.module.spec.ts +0 -94
  109. package/src/lib/typesense/module/typesense.module.ts +0 -87
  110. package/src/lib/typesense/module/typesense.provider.ts +0 -54
@@ -1,8 +0,0 @@
1
- import { DynamicModule } from '@nestjs/common';
2
- import { TypesenseModuleAsyncOptions, TypesenseModuleOptions } from './interface.module';
3
- export declare class TypesenseModule {
4
- static register(options?: TypesenseModuleOptions): DynamicModule;
5
- static registerAsync(options: TypesenseModuleAsyncOptions): DynamicModule;
6
- private static createAsyncProviders;
7
- private static createAsyncOptionsProvider;
8
- }
@@ -1,74 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var TypesenseModule_1;
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.TypesenseModule = void 0;
11
- const common_1 = require("@nestjs/common");
12
- const core_1 = require("@nestjs/core");
13
- const typesense_constant_1 = require("./typesense.constant");
14
- const typesense_provider_1 = require("./typesense.provider");
15
- let TypesenseModule = exports.TypesenseModule = TypesenseModule_1 = class TypesenseModule {
16
- static register(options = {}) {
17
- const optionsProviders = (0, typesense_provider_1.createTypesenseOptionsProvider)(options);
18
- const exportsProviders = (0, typesense_provider_1.createTypesenseExportsProvider)();
19
- const providers = (0, typesense_provider_1.createTypesenseProvider)();
20
- return {
21
- global: true,
22
- module: TypesenseModule_1,
23
- providers: [...optionsProviders, ...providers, ...exportsProviders],
24
- exports: exportsProviders,
25
- };
26
- }
27
- static registerAsync(options) {
28
- const exportsProviders = (0, typesense_provider_1.createTypesenseExportsProvider)();
29
- const providers = (0, typesense_provider_1.createTypesenseProvider)();
30
- return {
31
- global: true,
32
- module: TypesenseModule_1,
33
- imports: options.imports || [],
34
- providers: [
35
- ...this.createAsyncProviders(options),
36
- ...providers,
37
- ...exportsProviders,
38
- ],
39
- exports: exportsProviders,
40
- };
41
- }
42
- static createAsyncProviders(options) {
43
- if (options.useExisting || options.useFactory) {
44
- return [this.createAsyncOptionsProvider(options)];
45
- }
46
- return [
47
- this.createAsyncOptionsProvider(options),
48
- {
49
- provide: options.useClass,
50
- useClass: options.useClass,
51
- },
52
- ];
53
- }
54
- static createAsyncOptionsProvider(options) {
55
- if (options.useFactory) {
56
- return {
57
- provide: typesense_constant_1.TYPESENSE_MODULE_OPTIONS,
58
- useFactory: options.useFactory,
59
- inject: options.inject || [],
60
- };
61
- }
62
- return {
63
- provide: typesense_constant_1.TYPESENSE_MODULE_OPTIONS,
64
- useFactory: (optionsFactory) => optionsFactory.createTypesenseOptions(),
65
- inject: [options.useExisting || options.useClass],
66
- };
67
- }
68
- };
69
- exports.TypesenseModule = TypesenseModule = TypesenseModule_1 = __decorate([
70
- (0, common_1.Module)({
71
- imports: [core_1.DiscoveryModule],
72
- })
73
- ], TypesenseModule);
74
- //# sourceMappingURL=typesense.module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typesense.module.js","sourceRoot":"","sources":["../../../../../src/lib/typesense/module/typesense.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAiE;AACjE,uCAA+C;AAO/C,6DAAgE;AAChE,6DAI8B;AAKvB,IAAM,eAAe,iDAArB,MAAM,eAAe;IAC1B,MAAM,CAAC,QAAQ,CAAC,UAAkC,EAAE;QAClD,MAAM,gBAAgB,GAAG,IAAA,mDAA8B,EAAC,OAAO,CAAC,CAAC;QACjE,MAAM,gBAAgB,GAAG,IAAA,mDAA8B,GAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAA,4CAAuB,GAAE,CAAC;QAE5C,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,iBAAe;YACvB,SAAS,EAAE,CAAC,GAAG,gBAAgB,EAAE,GAAG,SAAS,EAAE,GAAG,gBAAgB,CAAC;YACnE,OAAO,EAAE,gBAAgB;SAC1B,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,OAAoC;QACvD,MAAM,gBAAgB,GAAG,IAAA,mDAA8B,GAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAA,4CAAuB,GAAE,CAAC;QAE5C,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,iBAAe;YACvB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,SAAS,EAAE;gBACT,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBACrC,GAAG,SAAS;gBACZ,GAAG,gBAAgB;aACpB;YACD,OAAO,EAAE,gBAAgB;SAC1B,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,oBAAoB,CACjC,OAAoC;QAEpC,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE;YAC7C,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;SACnD;QAED,OAAO;YACL,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;YACxC;gBAEE,OAAO,EAAE,OAAO,CAAC,QAAS;gBAE1B,QAAQ,EAAE,OAAO,CAAC,QAAS;aAC5B;SACF,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,0BAA0B,CACvC,OAAoC;QAEpC,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,OAAO;gBACL,OAAO,EAAE,6CAAwB;gBACjC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;aAC7B,CAAC;SACH;QAED,OAAO;YACL,OAAO,EAAE,6CAAwB;YACjC,UAAU,EAAE,CAAC,cAAuC,EAAE,EAAE,CACtD,cAAc,CAAC,sBAAsB,EAAE;YAEzC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAY,IAAI,OAAO,CAAC,QAAS,CAAC;SACpD,CAAC;IACJ,CAAC;CACF,CAAA;0BApEY,eAAe;IAH3B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,sBAAe,CAAC;KAC3B,CAAC;GACW,eAAe,CAoE3B"}
@@ -1,5 +0,0 @@
1
- import { Provider } from '@nestjs/common';
2
- import { TypesenseModuleOptions } from './interface.module';
3
- export declare const createTypesenseOptionsProvider: (options?: TypesenseModuleOptions) => Provider[];
4
- export declare const createTypesenseProvider: () => Provider[];
5
- export declare const createTypesenseExportsProvider: () => Provider[];
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createTypesenseExportsProvider = exports.createTypesenseProvider = exports.createTypesenseOptionsProvider = void 0;
4
- const typesense_1 = require("typesense");
5
- const collection_1 = require("../collection");
6
- const metadata_1 = require("../metadata");
7
- const typesense_constant_1 = require("./typesense.constant");
8
- const createTypesenseOptionsProvider = (options = {}) => [
9
- {
10
- provide: typesense_constant_1.TYPESENSE_MODULE_OPTIONS,
11
- useValue: options,
12
- },
13
- ];
14
- exports.createTypesenseOptionsProvider = createTypesenseOptionsProvider;
15
- const createTypesenseProvider = () => [
16
- metadata_1.TypesenseMetadataAccessor,
17
- metadata_1.TypesenseMetadataExplorer,
18
- metadata_1.TypesenseMetadataRegistry,
19
- collection_1.TypesenseCollectionsCreator,
20
- ];
21
- exports.createTypesenseProvider = createTypesenseProvider;
22
- const createTypesenseExportsProvider = () => [
23
- metadata_1.TypesenseMetadataRegistry,
24
- {
25
- provide: typesense_1.Client,
26
- useFactory: (options) => new typesense_1.Client({
27
- nodes: options.nodes || [
28
- {
29
- host: process.env.TYPESENSE_HOST ||
30
- process.env.NODE_ENV === 'production'
31
- ? 'ts.typesense.svc.cluster.local'
32
- : 'localhost',
33
- port: 8108,
34
- protocol: 'http',
35
- },
36
- ],
37
- numRetries: options.numRetries || 10,
38
- apiKey: options.apiKey || process.env.TYPESENSE_API_KEY,
39
- connectionTimeoutSeconds: options.connectionTimeoutSeconds || 10,
40
- retryIntervalSeconds: options.retryIntervalSeconds || 0.1,
41
- healthcheckIntervalSeconds: options.healthcheckIntervalSeconds || 2,
42
- logLevel: options.logLevel || 'info',
43
- }),
44
- inject: [typesense_constant_1.TYPESENSE_MODULE_OPTIONS],
45
- },
46
- ];
47
- exports.createTypesenseExportsProvider = createTypesenseExportsProvider;
48
- //# sourceMappingURL=typesense.provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typesense.provider.js","sourceRoot":"","sources":["../../../../../src/lib/typesense/module/typesense.provider.ts"],"names":[],"mappings":";;;AAAA,yCAAmC;AAEnC,8CAA4D;AAC5D,0CAIqB;AAErB,6DAAgE;AAEzD,MAAM,8BAA8B,GAAG,CAC5C,UAAkC,EAAE,EACxB,EAAE,CAAC;IACf;QACE,OAAO,EAAE,6CAAwB;QACjC,QAAQ,EAAE,OAAO;KAClB;CACF,CAAC;AAPW,QAAA,8BAA8B,kCAOzC;AAEK,MAAM,uBAAuB,GAAG,GAAe,EAAE,CAAC;IACvD,oCAAyB;IACzB,oCAAyB;IACzB,oCAAyB;IACzB,wCAA2B;CAC5B,CAAC;AALW,QAAA,uBAAuB,2BAKlC;AAEK,MAAM,8BAA8B,GAAG,GAAe,EAAE,CAAC;IAC9D,oCAAyB;IACzB;QACE,OAAO,EAAE,kBAAM;QACf,UAAU,EAAE,CAAC,OAA+B,EAAE,EAAE,CAC9C,IAAI,kBAAM,CAAC;YACT,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI;gBACtB;oBACE,IAAI,EACF,OAAO,CAAC,GAAG,CAAC,cAAc;wBAC1B,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;wBACnC,CAAC,CAAC,gCAAgC;wBAClC,CAAC,CAAC,WAAW;oBACjB,IAAI,EAAE,IAAI;oBACV,QAAQ,EAAE,MAAM;iBACjB;aACF;YACD,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;YACpC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;YACvD,wBAAwB,EAAE,OAAO,CAAC,wBAAwB,IAAI,EAAE;YAChE,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,IAAI,GAAG;YACzD,0BAA0B,EAAE,OAAO,CAAC,0BAA0B,IAAI,CAAC;YACnE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM;SACrC,CAAC;QACJ,MAAM,EAAE,CAAC,6CAAwB,CAAC;KACnC;CACF,CAAC;AA1BW,QAAA,8BAA8B,kCA0BzC"}
@@ -1 +0,0 @@
1
- export class GenericSchema {}
@@ -1 +0,0 @@
1
- export * from './generic.schema';
@@ -1 +0,0 @@
1
- export { Client } from 'typesense';
@@ -1 +0,0 @@
1
- export * from './typesense-colletctions.creator';
@@ -1,29 +0,0 @@
1
- import { Client } from 'typesense';
2
- import { OnModuleInit, Logger, Injectable } from '@nestjs/common';
3
- import { TypesenseMetadataRegistry } from '../metadata';
4
-
5
- @Injectable()
6
- export class TypesenseCollectionsCreator implements OnModuleInit {
7
- private readonly logger = new Logger(TypesenseCollectionsCreator.name);
8
-
9
- constructor(
10
- private readonly registry: TypesenseMetadataRegistry,
11
- private readonly typesense: Client,
12
- ) {}
13
-
14
- async onModuleInit() {
15
- for (const target of this.registry.getTargets()) {
16
- const schema = this.registry.getSchemaByTarget(target);
17
-
18
- try {
19
- // eslint-disable-next-line no-await-in-loop
20
- await this.typesense.collections(schema!.name).retrieve();
21
- } catch (error) {
22
- if ((error as any).httpStatus === 404) {
23
- // eslint-disable-next-line no-await-in-loop
24
- await this.typesense.collections().create(schema);
25
- }
26
- }
27
- }
28
- }
29
- }
@@ -1,89 +0,0 @@
1
- /* eslint-disable max-classes-per-file */
2
-
3
- import { Field } from './field.decorator';
4
- import { FIELD_METADATA } from './field.decorator';
5
- import { Schema } from './schema.decorator';
6
-
7
- describe('typesense', () => {
8
- describe('decorators', () => {
9
- describe('field', () => {
10
- it('should enhance field with metadata', () => {
11
- @Schema()
12
- class Test {
13
- @Field('string')
14
- field!: string;
15
- }
16
-
17
- expect(Reflect.getMetadata(FIELD_METADATA, Test)).toEqual(
18
- expect.arrayContaining([
19
- expect.objectContaining({
20
- name: 'field',
21
- type: 'string',
22
- }),
23
- ]),
24
- );
25
- });
26
-
27
- it('should enhance field with custom name metadata', () => {
28
- @Schema()
29
- class Test {
30
- @Field('string', { name: 'custom' })
31
- field!: string;
32
- }
33
-
34
- expect(Reflect.getMetadata(FIELD_METADATA, Test)).toEqual(
35
- expect.arrayContaining([
36
- expect.objectContaining({
37
- name: 'custom',
38
- type: 'string',
39
- }),
40
- ]),
41
- );
42
- });
43
- });
44
-
45
- it('should enhance field with options metadata', () => {
46
- @Schema()
47
- class Test {
48
- @Field('string', { facet: true, index: true, optional: true })
49
- field!: string;
50
- }
51
-
52
- expect(Reflect.getMetadata(FIELD_METADATA, Test)).toEqual(
53
- expect.arrayContaining([
54
- expect.objectContaining({
55
- name: 'field',
56
- type: 'string',
57
- facet: true,
58
- index: true,
59
- optional: true,
60
- }),
61
- ]),
62
- );
63
- });
64
-
65
- it('should enhance field with multiple fields metadata', () => {
66
- @Schema()
67
- class Test {
68
- @Field('string')
69
- field!: string;
70
-
71
- @Field('string')
72
- field2!: string;
73
- }
74
-
75
- expect(Reflect.getMetadata(FIELD_METADATA, Test)).toEqual(
76
- expect.arrayContaining([
77
- expect.objectContaining({
78
- name: 'field',
79
- type: 'string',
80
- }),
81
- expect.objectContaining({
82
- name: 'field2',
83
- type: 'string',
84
- }),
85
- ]),
86
- );
87
- });
88
- });
89
- });
@@ -1,44 +0,0 @@
1
- import { SetMetadata } from '@nestjs/common';
2
- import { applyDecorators } from '@nestjs/common';
3
-
4
- export interface FieldMetadata {
5
- name?: string;
6
- facet?: boolean;
7
- index?: boolean;
8
- optional?: boolean;
9
- }
10
-
11
- export type FieldType =
12
- | 'string'
13
- | 'int32'
14
- | 'int64'
15
- | 'float'
16
- | 'bool'
17
- | 'geopoint'
18
- | 'geopoint[]'
19
- | 'string[]'
20
- | 'int32[]'
21
- | 'int64[]'
22
- | 'float[]'
23
- | 'bool[]'
24
- | 'object'
25
- | 'object[]'
26
- | 'auto'
27
- | 'string*';
28
-
29
- export const FIELD_METADATA = '__fieldMetadata__';
30
-
31
- export const Field = (type: FieldType, options: FieldMetadata = {}) =>
32
- applyDecorators((target: object, key?: any, descriptor?: any) => {
33
- const exists =
34
- Reflect.getMetadata(FIELD_METADATA, target.constructor) || [];
35
-
36
- return SetMetadata(FIELD_METADATA, [
37
- ...exists,
38
- {
39
- ...options,
40
- type,
41
- name: options.name || key,
42
- },
43
- ])(target.constructor, key, descriptor);
44
- });
@@ -1,2 +0,0 @@
1
- export * from './field.decorator';
2
- export * from './schema.decorator';
@@ -1,23 +0,0 @@
1
- import decamelize from 'decamelize';
2
- import { SetMetadata, applyDecorators } from '@nestjs/common';
3
-
4
- export interface Schema {
5
- name?: string;
6
- defaultSortingField?: string;
7
- auto?: boolean;
8
- }
9
-
10
- export const SCHEMA_METADATA = '__schemaMetadata__';
11
-
12
- export const Schema = (options: Schema = {}): ClassDecorator =>
13
- applyDecorators((target: object, key?: any, descriptor?: any) =>
14
- SetMetadata(SCHEMA_METADATA, {
15
- name:
16
- options.name ||
17
- decamelize((target as any).name, {
18
- separator: '-',
19
- preserveConsecutiveUppercase: false,
20
- }),
21
- defaultSortingField: options.defaultSortingField,
22
- })(target, key, descriptor),
23
- );
@@ -1,3 +0,0 @@
1
- export class BaseDocument {
2
- id?: string;
3
- }
@@ -1 +0,0 @@
1
- export * from './base.document';
@@ -1,6 +0,0 @@
1
- export * from './client';
2
- // export * from './collection';
3
- // export * from './decorator';
4
- export * from './document';
5
- export * from './metadata';
6
- export * from './module';
@@ -1,4 +0,0 @@
1
- export * from './schema.metadata';
2
- export * from './typesense.metadata-accessor';
3
- export * from './typesense.metadata-explorer';
4
- export * from './typesense.metadata-registry';
@@ -1,21 +0,0 @@
1
- import type { FieldType } from '../decorator/field.decorator';
2
-
3
- export interface SchemaField {
4
- name: string;
5
- type: FieldType;
6
- optional?: boolean;
7
- facet?: boolean;
8
- index?: boolean;
9
- sort?: boolean;
10
- locale?: string;
11
- infix?: boolean;
12
- num_dim?: number;
13
- [t: string]: unknown;
14
- }
15
-
16
- export interface Schema {
17
- name: string;
18
- fields: Array<SchemaField>;
19
- enable_nested_fields?: boolean;
20
- defaultSortingField?: string;
21
- }
@@ -1,37 +0,0 @@
1
- import { Injectable } from '@nestjs/common';
2
- import { Reflector } from '@nestjs/core';
3
-
4
- import { SCHEMA_METADATA } from '../decorator';
5
- import { FIELD_METADATA } from '../decorator';
6
- import { Schema } from './schema.metadata';
7
-
8
- @Injectable()
9
- export class TypesenseMetadataAccessor {
10
- constructor(private readonly reflector: Reflector) {}
11
-
12
- getTypesenseMetadata(target): Schema | undefined {
13
- if (target.constructor) {
14
- const schema = this.reflector.get(SCHEMA_METADATA, target.constructor);
15
- const fields = this.reflector.get(FIELD_METADATA, target.constructor);
16
-
17
- if (!schema) {
18
- return undefined;
19
- }
20
-
21
- if (!(fields || schema.auto)) {
22
- return undefined;
23
- }
24
-
25
- return {
26
- name: schema.name,
27
- defaultSortingField: schema.defaultSortingField,
28
- fields: [
29
- ...(schema.auto ? [{ name: '.*', type: 'auto' }] : []),
30
- ...(fields || []),
31
- ],
32
- };
33
- }
34
-
35
- return undefined;
36
- }
37
- }
@@ -1,56 +0,0 @@
1
- /* eslint-disable max-classes-per-file */
2
-
3
- import 'reflect-metadata';
4
-
5
- import { Module } from '@nestjs/common';
6
- import { DiscoveryModule } from '@nestjs/core';
7
- import { Test } from '@nestjs/testing';
8
-
9
- import { Schema } from '../decorators';
10
- import { Field } from '../decorators';
11
- import { TypesenseMetadataAccessor } from './typesense.metadata-accessor';
12
- import { TypesenseMetadataExplorer } from './typesense.metadata-explorer';
13
- import { TypesenseMetadataRegistry } from './typesense.metadata-registry';
14
-
15
- describe('typesense', () => {
16
- describe('metadata', () => {
17
- describe('explorer', () => {
18
- let module;
19
-
20
- @Module({
21
- imports: [DiscoveryModule],
22
- providers: [
23
- TypesenseMetadataAccessor,
24
- TypesenseMetadataExplorer,
25
- TypesenseMetadataRegistry,
26
- ],
27
- })
28
- class TestMetadataModule {}
29
-
30
- @Schema()
31
- class TestSchema {
32
- @Field('string')
33
- field!: string;
34
- }
35
-
36
- beforeEach(async () => {
37
- module = await Test.createTestingModule({
38
- imports: [TestMetadataModule],
39
- providers: [TestSchema],
40
- }).compile();
41
-
42
- await module.init();
43
- });
44
-
45
- afterEach(async () => {
46
- await module.close();
47
- });
48
-
49
- it('should store schema metadata', () => {
50
- expect(
51
- module.get(TypesenseMetadataRegistry).getSchemaByTarget(TestSchema),
52
- ).toBeDefined();
53
- });
54
- });
55
- });
56
- });
@@ -1,41 +0,0 @@
1
- import { Injectable, Logger, OnModuleInit } from '@nestjs/common';
2
- import { DiscoveryService } from '@nestjs/core';
3
- import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';
4
-
5
- import { TypesenseMetadataAccessor } from './typesense.metadata-accessor';
6
- import { TypesenseMetadataRegistry } from './typesense.metadata-registry';
7
-
8
- @Injectable()
9
- export class TypesenseMetadataExplorer implements OnModuleInit {
10
- private readonly logger = new Logger(TypesenseMetadataExplorer.name);
11
-
12
- constructor(
13
- private readonly discoveryService: DiscoveryService,
14
- private readonly metadataAccessor: TypesenseMetadataAccessor,
15
- private readonly metadataRegistry: TypesenseMetadataRegistry,
16
- ) {}
17
-
18
- onModuleInit() {
19
- this.explore();
20
- }
21
-
22
- explore() {
23
- this.discoveryService.getProviders().forEach((wrapper: InstanceWrapper) => {
24
- const { instance } = wrapper;
25
-
26
- if (!instance || !Object.getPrototypeOf(instance)) {
27
- return;
28
- }
29
-
30
- this.lookupSchema(instance);
31
- });
32
- }
33
-
34
- lookupSchema(instance) {
35
- const metadata = this.metadataAccessor.getTypesenseMetadata(instance);
36
-
37
- if (metadata) {
38
- this.metadataRegistry.addSchema(instance.constructor, metadata);
39
- }
40
- }
41
- }
@@ -1,28 +0,0 @@
1
- import { Injectable, Logger } from '@nestjs/common';
2
-
3
- import { Schema } from './schema.metadata';
4
-
5
- type Constructor = new (...args: any[]) => unknown;
6
-
7
- @Injectable()
8
- export class TypesenseMetadataRegistry {
9
- private logger = new Logger(TypesenseMetadataRegistry.name);
10
-
11
- private schemas: Map<Constructor, Schema> = new Map();
12
-
13
- addSchema(target: Constructor, schema: Schema) {
14
- if (this.schemas.has(target)) {
15
- this.logger.warn(`Schema ${target} already exists`);
16
- }
17
-
18
- this.schemas.set(target, schema);
19
- }
20
-
21
- getSchemaByTarget(target: Constructor) {
22
- return this.schemas.get(target);
23
- }
24
-
25
- getTargets() {
26
- return this.schemas.keys();
27
- }
28
- }
@@ -1,4 +0,0 @@
1
- export * from './interface.module';
2
- export * from './typesense.module';
3
- export * from './typesense.constant';
4
- export * from './typesense.provider';
@@ -1,36 +0,0 @@
1
- import { ModuleMetadata } from '@nestjs/common/interfaces';
2
- import { Type } from '@nestjs/common/interfaces';
3
-
4
- export interface TypesenseNodeOptions {
5
- host: string;
6
- port: number;
7
- protocol: string;
8
- }
9
-
10
- type LogLevelNames = 'trace' | 'debug' | 'info' | 'warn' | 'error';
11
-
12
- export interface TypesenseModuleOptions {
13
- nodes?: Array<TypesenseNodeOptions>;
14
- numRetries?: number;
15
- apiKey?: string;
16
- connectionTimeoutSeconds?: number;
17
- retryIntervalSeconds?: number;
18
- healthcheckIntervalSeconds?: number;
19
- logLevel?: LogLevelNames;
20
- }
21
-
22
- export interface TypesenseOptionsFactory {
23
- createTypesenseOptions():
24
- | Promise<TypesenseModuleOptions>
25
- | TypesenseModuleOptions;
26
- }
27
-
28
- export interface TypesenseModuleAsyncOptions
29
- extends Pick<ModuleMetadata, 'imports'> {
30
- useExisting?: Type<TypesenseOptionsFactory>;
31
- useClass?: Type<TypesenseOptionsFactory>;
32
- useFactory?: (
33
- ...args: any[]
34
- ) => Promise<TypesenseModuleOptions> | TypesenseModuleOptions;
35
- inject?: any[];
36
- }
@@ -1 +0,0 @@
1
- export const TYPESENSE_MODULE_OPTIONS = 'TYPESENSE_MODULE_OPTIONS';