id-codec.service.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { Injectable } from '@nestjs/common';
  2. import { ConfigurableOperation, ConfigurableOperationInput } from '@vendure/common/lib/generated-types';
  3. import { ConfigService } from '../../config/config.service';
  4. import { IdCodec } from './id-codec';
  5. @Injectable()
  6. export class IdCodecService {
  7. private idCodec: IdCodec;
  8. constructor(configService: ConfigService) {
  9. this.idCodec = new IdCodec(configService.entityIdStrategy);
  10. }
  11. encode<T extends string | number | boolean | object | undefined>(target: T, transformKeys?: string[]): T {
  12. return this.idCodec.encode(target, transformKeys);
  13. }
  14. decode<T extends string | number | object | undefined>(target: T, transformKeys?: string[]): T {
  15. return this.idCodec.decode(target, transformKeys);
  16. }
  17. /**
  18. * Decodes any entity IDs used in ConfigurableOperation arguments, e.g. when specifying
  19. * facetValueIds.
  20. */
  21. decodeConfigurableOperation(input: ConfigurableOperationInput): ConfigurableOperationInput;
  22. decodeConfigurableOperation(input: ConfigurableOperationInput[]): ConfigurableOperationInput[];
  23. decodeConfigurableOperation(
  24. input: ConfigurableOperationInput | ConfigurableOperationInput[],
  25. ): ConfigurableOperationInput | ConfigurableOperationInput[] {
  26. const inputArray = Array.isArray(input) ? input : [input];
  27. for (const operationInput of inputArray) {
  28. for (const arg of operationInput.arguments) {
  29. if (arg.type === 'facetValueIds' && arg.value) {
  30. const ids = JSON.parse(arg.value) as string[];
  31. const decodedIds = ids.map(id => this.decode(id));
  32. arg.value = JSON.stringify(decodedIds);
  33. }
  34. }
  35. }
  36. return Array.isArray(input) ? inputArray : inputArray[0];
  37. }
  38. /**
  39. * Encodes any entity IDs used in ConfigurableOperation arguments, e.g. when specifying
  40. * facetValueIds.
  41. */
  42. encodeConfigurableOperation(input: ConfigurableOperation): ConfigurableOperation;
  43. encodeConfigurableOperation(input: ConfigurableOperation[]): ConfigurableOperation[];
  44. encodeConfigurableOperation(
  45. input: ConfigurableOperation | ConfigurableOperation[],
  46. ): ConfigurableOperation | ConfigurableOperation[] {
  47. const inputArray = Array.isArray(input) ? input : [input];
  48. for (const operation of inputArray) {
  49. for (const arg of operation.args) {
  50. if (arg.type === 'facetValueIds' && arg.value) {
  51. const ids = JSON.parse(arg.value) as string[];
  52. const encoded = ids.map(id => this.encode(id));
  53. arg.value = JSON.stringify(encoded);
  54. }
  55. }
  56. }
  57. return Array.isArray(input) ? inputArray : inputArray[0];
  58. }
  59. }