@labdigital/commercetools-mock 0.7.1 → 0.9.1

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.
package/dist/index.mjs CHANGED
@@ -94,7 +94,7 @@ var resolveValue = (obj, val) => {
94
94
  return obj[val.value];
95
95
  };
96
96
  var getLexer = (value) => {
97
- return new perplex(value).token("AND", /and(?![-_a-z0-9]+)/i).token("OR", /or(?![-_a-z0-9]+)/i).token("NOT", /not(?![-_a-z0-9]+)/i).token("WITHIN", /within(?![-_a-z0-9]+)/i).token("IN", /in(?![-_a-z0-9]+)/i).token("MATCHES_IGNORE_CASE", /matches\s+ignore\s+case(?![-_a-z0-9]+)/i).token("CONTAINS", /contains(?![-_a-z0-9]+)/i).token("ALL", /all(?![-_a-z0-9]+)/i).token("ANY", /any(?![-_a-z0-9]+)/i).token("EMPTY", /empty(?![-_a-z0-9]+)/i).token("IS", /is(?![-_a-z0-9]+)/i).token("DEFINED", /defined(?![-_a-z0-9]+)/i).token("FLOAT", /\d+\.\d+/).token("INT", /\d+/).token("VARIABLE", /:([-_A-Za-z0-9]+)/).token("IDENTIFIER", /[-_A-Za-z0-9]+/).token("STRING", /"((?:\\.|[^"\\])*)"/).token("STRING", /'((?:\\.|[^'\\])*)'/).token("COMMA", ",").token("(", "(").token(")", ")").token(">=", ">=").token("<=", "<=").token(">", ">").token("<", "<").token("!=", "!=").token("=", "=").token('"', '"').token("WS", /\s+/, true);
97
+ return new perplex(value).token("AND", /and(?![-_a-z0-9]+)/i).token("OR", /or(?![-_a-z0-9]+)/i).token("NOT", /not(?![-_a-z0-9]+)/i).token("WITHIN", /within(?![-_a-z0-9]+)/i).token("IN", /in(?![-_a-z0-9]+)/i).token("MATCHES_IGNORE_CASE", /matches\s+ignore\s+case(?![-_a-z0-9]+)/i).token("CONTAINS", /contains(?![-_a-z0-9]+)/i).token("ALL", /all(?![-_a-z0-9]+)/i).token("ANY", /any(?![-_a-z0-9]+)/i).token("EMPTY", /empty(?![-_a-z0-9]+)/i).token("IS", /is(?![-_a-z0-9]+)/i).token("DEFINED", /defined(?![-_a-z0-9]+)/i).token("FLOAT", /\d+\.\d+/).token("INT", /\d+/).token("VARIABLE", /:([-_A-Za-z0-9]+)/).token("BOOLEAN", /(true|false)/).token("IDENTIFIER", /[-_A-Za-z0-9]+/).token("STRING", /"((?:\\.|[^"\\])*)"/).token("STRING", /'((?:\\.|[^'\\])*)'/).token("COMMA", ",").token("(", "(").token(")", ")").token(">=", ">=").token("<=", "<=").token(">", ">").token("<", "<").token("!=", "!=").token("=", "=").token('"', '"').token("WS", /\s+/, true);
98
98
  };
99
99
  var generateMatchFunc = (predicate) => {
100
100
  const lexer = getLexer(predicate);
@@ -104,6 +104,12 @@ var generateMatchFunc = (predicate) => {
104
104
  value: t.token.match,
105
105
  pos: t.token.strpos()
106
106
  };
107
+ }).nud("BOOLEAN", 1, (t) => {
108
+ return {
109
+ type: "boolean",
110
+ value: t.token.match === "true" ? true : false,
111
+ pos: t.token.strpos()
112
+ };
107
113
  }).nud("VARIABLE", 100, (t) => {
108
114
  return {
109
115
  type: "var",
@@ -787,6 +793,21 @@ var getBaseResourceProperties = () => {
787
793
  version: 0
788
794
  };
789
795
  };
796
+ var nestedLookup = (obj, path) => {
797
+ if (!path || path === "") {
798
+ return obj;
799
+ }
800
+ const parts = path.split(".");
801
+ let val = obj;
802
+ for (let i = 0; i < parts.length; i++) {
803
+ const part = parts[i];
804
+ if (val == void 0) {
805
+ return void 0;
806
+ }
807
+ val = val[part];
808
+ }
809
+ return val;
810
+ };
790
811
  var QueryParamsAsArray = (input) => {
791
812
  if (input == void 0) {
792
813
  return [];
@@ -896,10 +917,41 @@ var createPrice = (draft) => {
896
917
  };
897
918
  };
898
919
  var createTypedMoney = (value) => {
920
+ let fractionDigits = 2;
921
+ switch (value.currencyCode.toUpperCase()) {
922
+ case "BHD":
923
+ case "IQD":
924
+ case "JOD":
925
+ case "KWD":
926
+ case "LYD":
927
+ case "OMR":
928
+ case "TND":
929
+ fractionDigits = 3;
930
+ break;
931
+ case "CVE":
932
+ case "DJF":
933
+ case "GNF":
934
+ case "IDR":
935
+ case "JPY":
936
+ case "KMF":
937
+ case "KRW":
938
+ case "PYG":
939
+ case "RWF":
940
+ case "UGX":
941
+ case "VND":
942
+ case "VUV":
943
+ case "XAF":
944
+ case "XOF":
945
+ case "XPF":
946
+ fractionDigits = 0;
947
+ break;
948
+ default:
949
+ fractionDigits = 2;
950
+ }
899
951
  return {
900
952
  type: "centPrecision",
901
- fractionDigits: 2,
902
- ...value
953
+ ...value,
954
+ fractionDigits
903
955
  };
904
956
  };
905
957
  var resolveStoreReference = (ref, projectKey, storage) => {
@@ -1107,7 +1159,14 @@ var AbstractRepository = class {
1107
1159
  if (!deepEqual(modifiedResource, resource)) {
1108
1160
  this.save(context, modifiedResource);
1109
1161
  }
1110
- return modifiedResource;
1162
+ const result = this.postProcessResource(modifiedResource);
1163
+ if (!result) {
1164
+ throw new Error("invalid post process action");
1165
+ }
1166
+ return result;
1167
+ }
1168
+ postProcessResource(resource) {
1169
+ return resource;
1111
1170
  }
1112
1171
  };
1113
1172
  var AbstractResourceRepository = class extends AbstractRepository {
@@ -1116,31 +1175,36 @@ var AbstractResourceRepository = class extends AbstractRepository {
1116
1175
  this._storage.assertStorage(this.getTypeId());
1117
1176
  }
1118
1177
  query(context, params = {}) {
1119
- return this._storage.query(context.projectKey, this.getTypeId(), {
1178
+ const result = this._storage.query(context.projectKey, this.getTypeId(), {
1120
1179
  expand: params.expand,
1121
1180
  where: params.where,
1122
1181
  offset: params.offset,
1123
1182
  limit: params.limit
1124
1183
  });
1184
+ result.results = result.results.map(this.postProcessResource);
1185
+ return result;
1125
1186
  }
1126
1187
  get(context, id, params = {}) {
1127
- return this._storage.get(context.projectKey, this.getTypeId(), id, params);
1188
+ const resource = this._storage.get(context.projectKey, this.getTypeId(), id, params);
1189
+ return this.postProcessResource(resource);
1128
1190
  }
1129
1191
  getByKey(context, key, params = {}) {
1130
- return this._storage.getByKey(
1192
+ const resource = this._storage.getByKey(
1131
1193
  context.projectKey,
1132
1194
  this.getTypeId(),
1133
1195
  key,
1134
1196
  params
1135
1197
  );
1198
+ return this.postProcessResource(resource);
1136
1199
  }
1137
1200
  delete(context, id, params = {}) {
1138
- return this._storage.delete(
1201
+ const resource = this._storage.delete(
1139
1202
  context.projectKey,
1140
1203
  this.getTypeId(),
1141
1204
  id,
1142
1205
  params
1143
1206
  );
1207
+ return this.postProcessResource(resource);
1144
1208
  }
1145
1209
  save(context, resource) {
1146
1210
  const current = this.get(context, resource.id);
@@ -2424,6 +2488,25 @@ var DiscountCodeService = class extends AbstractService {
2424
2488
  }
2425
2489
  };
2426
2490
 
2491
+ // src/lib/masking.ts
2492
+ var maskSecretValue = (resource, path) => {
2493
+ const parts = path.split(".");
2494
+ const clone = JSON.parse(JSON.stringify(resource));
2495
+ let val = clone;
2496
+ const target = parts.pop();
2497
+ for (let i = 0; i < parts.length; i++) {
2498
+ const part = parts[i];
2499
+ val = val[part];
2500
+ if (val === void 0) {
2501
+ return resource;
2502
+ }
2503
+ }
2504
+ if (val && target && val[target]) {
2505
+ val[target] = "****";
2506
+ }
2507
+ return clone;
2508
+ };
2509
+
2427
2510
  // src/repositories/extension.ts
2428
2511
  var ExtensionRepository = class extends AbstractResourceRepository {
2429
2512
  constructor() {
@@ -2446,6 +2529,23 @@ var ExtensionRepository = class extends AbstractResourceRepository {
2446
2529
  getTypeId() {
2447
2530
  return "extension";
2448
2531
  }
2532
+ postProcessResource(resource) {
2533
+ var _a;
2534
+ if (resource) {
2535
+ if (resource.destination.type === "HTTP" && ((_a = resource.destination.authentication) == null ? void 0 : _a.type) === "AuthorizationHeader") {
2536
+ return maskSecretValue(
2537
+ resource,
2538
+ "destination.authentication.headerValue"
2539
+ );
2540
+ } else if (resource.destination.type == "AWSLambda") {
2541
+ return maskSecretValue(
2542
+ resource,
2543
+ "destination.accessSecret"
2544
+ );
2545
+ }
2546
+ }
2547
+ return resource;
2548
+ }
2449
2549
  create(context, draft) {
2450
2550
  const resource = {
2451
2551
  ...getBaseResourceProperties(),
@@ -2876,38 +2976,71 @@ var parseFilterExpression = (filter, staged) => {
2876
2976
  var getLexer2 = (value) => {
2877
2977
  return new perplex2(value).token("MISSING", /missing(?![-_a-z0-9]+)/i).token("EXISTS", /exists(?![-_a-z0-9]+)/i).token("RANGE", /range(?![-_a-z0-9]+)/i).token("TO", /to(?![-_a-z0-9]+)/i).token("IDENTIFIER", /[-_\.a-z]+/i).token("FLOAT", /\d+\.\d+/).token("INT", /\d+/).token("STRING", /"((?:\\.|[^"\\])*)"/).token("STRING", /'((?:\\.|[^'\\])*)'/).token("COMMA", ",").token("STAR", "*").token("(", "(").token(":", ":").token(")", ")").token('"', '"').token("WS", /\s+/, true);
2878
2978
  };
2879
- var generateMatchFunc2 = (filter) => {
2979
+ var parseFilter = (filter) => {
2880
2980
  const lexer = getLexer2(filter);
2881
2981
  const parser = new Parser2(lexer).builder().nud("IDENTIFIER", 100, (t) => {
2882
2982
  return t.token.match;
2883
2983
  }).led(":", 100, ({ left, bp }) => {
2884
- const expr = parser.parse({ terminals: [bp - 1] });
2885
- if (Array.isArray(expr)) {
2886
- return (obj) => {
2887
- return expr.includes(obj);
2888
- };
2984
+ let parsed = parser.parse({ terminals: [bp - 1] });
2985
+ let expressions;
2986
+ expressions = !Array.isArray(parsed) ? [parsed] : parsed;
2987
+ const unique = new Set(expressions.map((expr) => expr.type));
2988
+ if (unique.size > 1) {
2989
+ throw new Error("Invalid expression");
2889
2990
  }
2890
- if (typeof expr === "function") {
2891
- return (obj) => {
2892
- return expr(obj);
2991
+ if (expressions.some((expr) => expr.type == "Symbol")) {
2992
+ return {
2993
+ source: left,
2994
+ type: "FilterExpression",
2995
+ children: expressions.map((e) => {
2996
+ if (e.type != "Symbol") {
2997
+ throw new Error("Invalid expression");
2998
+ }
2999
+ return {
3000
+ type: "FilterExpression",
3001
+ match: (obj) => {
3002
+ return obj === e.value;
3003
+ }
3004
+ };
3005
+ })
2893
3006
  };
2894
3007
  }
2895
- return (obj) => {
2896
- return obj === expr;
3008
+ return {
3009
+ source: left,
3010
+ type: expressions[0].type,
3011
+ children: expressions
2897
3012
  };
2898
3013
  }).nud("STRING", 20, (t) => {
2899
- return t.token.groups[1];
3014
+ return {
3015
+ type: "Symbol",
3016
+ kind: "string",
3017
+ value: t.token.groups[1]
3018
+ };
2900
3019
  }).nud("INT", 5, (t) => {
2901
- return parseInt(t.token.match, 10);
3020
+ return {
3021
+ type: "Symbol",
3022
+ kind: "int",
3023
+ value: parseInt(t.token.match, 10)
3024
+ };
2902
3025
  }).nud("STAR", 5, (t) => {
2903
- return null;
3026
+ return {
3027
+ type: "Symbol",
3028
+ kind: "any",
3029
+ value: null
3030
+ };
2904
3031
  }).nud("EXISTS", 10, ({ bp }) => {
2905
- return (val) => {
2906
- return val !== void 0;
3032
+ return {
3033
+ type: "FilterExpression",
3034
+ match: (obj) => {
3035
+ return obj !== void 0;
3036
+ }
2907
3037
  };
2908
3038
  }).nud("MISSING", 10, ({ bp }) => {
2909
- return (val) => {
2910
- return val === void 0;
3039
+ return {
3040
+ type: "FilterExpression",
3041
+ match: (obj) => {
3042
+ return obj === void 0;
3043
+ }
2911
3044
  };
2912
3045
  }).led("COMMA", 200, ({ left, token, bp }) => {
2913
3046
  const expr = parser.parse({ terminals: [bp - 1] });
@@ -2916,38 +3049,74 @@ var generateMatchFunc2 = (filter) => {
2916
3049
  } else {
2917
3050
  return [left, expr];
2918
3051
  }
3052
+ }).nud("(", 100, (t) => {
3053
+ const expr = parser.parse({ terminals: [")"] });
3054
+ lexer.expect(")");
3055
+ return expr;
2919
3056
  }).bp(")", 0).led("TO", 20, ({ left, bp }) => {
2920
3057
  const expr = parser.parse({ terminals: [bp - 1] });
2921
- return [left, expr];
3058
+ return {
3059
+ start: left.value,
3060
+ stop: expr.value
3061
+ };
2922
3062
  }).nud("RANGE", 20, ({ bp }) => {
2923
- lexer.next();
2924
- const [start, stop] = parser.parse();
2925
- console.log(start, stop);
2926
- if (start !== null && stop !== null) {
2927
- return (obj) => {
2928
- return obj >= start && obj <= stop;
2929
- };
2930
- } else if (start === null && stop !== null) {
2931
- return (obj) => {
2932
- return obj <= stop;
2933
- };
2934
- } else if (start !== null && stop === null) {
2935
- return (obj) => {
2936
- return obj >= start;
2937
- };
2938
- } else {
2939
- return (obj) => {
2940
- return true;
2941
- };
3063
+ let ranges = parser.parse();
3064
+ if (!Array.isArray(ranges)) {
3065
+ ranges = [ranges];
2942
3066
  }
3067
+ return ranges.map((range) => {
3068
+ let func = void 0;
3069
+ if (range.start !== null && range.stop !== null) {
3070
+ func = (obj) => {
3071
+ return obj >= range.start && obj <= range.stop;
3072
+ };
3073
+ } else if (range.start === null && range.stop !== null) {
3074
+ func = (obj) => {
3075
+ return obj <= range.stop;
3076
+ };
3077
+ } else if (range.start !== null && range.stop === null) {
3078
+ func = (obj) => {
3079
+ return obj >= range.start;
3080
+ };
3081
+ } else {
3082
+ func = (obj) => {
3083
+ return true;
3084
+ };
3085
+ }
3086
+ return {
3087
+ type: "RangeExpression",
3088
+ start: range.start,
3089
+ stop: range.stop,
3090
+ match: func
3091
+ };
3092
+ });
2943
3093
  }).build();
2944
- const result = parser.parse();
2945
- if (typeof result !== "function") {
3094
+ return parser.parse();
3095
+ };
3096
+ var generateMatchFunc2 = (filter) => {
3097
+ const result = parseFilter(filter);
3098
+ if (!result) {
2946
3099
  const lines = filter.split("\n");
2947
3100
  const column = lines[lines.length - 1].length;
2948
3101
  throw new Error(`Syntax error while parsing '${filter}'.`);
2949
3102
  }
2950
- return result;
3103
+ if (result.type == "TermExpression") {
3104
+ throw new Error(`Syntax error while parsing '${filter}'.`);
3105
+ }
3106
+ return (obj) => {
3107
+ if (!result.children)
3108
+ return false;
3109
+ return result.children.some((c) => c.match(obj));
3110
+ };
3111
+ };
3112
+ var generateFacetFunc = (filter) => {
3113
+ if (!filter.includes(":")) {
3114
+ return {
3115
+ source: filter,
3116
+ type: "TermExpression"
3117
+ };
3118
+ }
3119
+ return parseFilter(filter);
2951
3120
  };
2952
3121
  var filterProduct = (source, exprFunc) => {
2953
3122
  return (p, markMatchingVariants) => {
@@ -2977,6 +3146,9 @@ var resolveVariantValue = (obj, path) => {
2977
3146
  if (path === void 0) {
2978
3147
  return obj;
2979
3148
  }
3149
+ if (path.startsWith("variants.")) {
3150
+ path = path.substring(path.indexOf(".") + 1);
3151
+ }
2980
3152
  if (path.startsWith("attributes.")) {
2981
3153
  const [, attrName, ...rest] = path.split(".");
2982
3154
  if (!obj.attributes) {
@@ -2993,21 +3165,6 @@ var resolveVariantValue = (obj, path) => {
2993
3165
  }
2994
3166
  return nestedLookup(obj, path);
2995
3167
  };
2996
- var nestedLookup = (obj, path) => {
2997
- if (!path || path === "") {
2998
- return obj;
2999
- }
3000
- const parts = path.split(".");
3001
- let val = obj;
3002
- for (let i = 0; i < parts.length; i++) {
3003
- const part = parts[i];
3004
- if (val == void 0) {
3005
- return void 0;
3006
- }
3007
- val = val[part];
3008
- }
3009
- return val;
3010
- };
3011
3168
  var getVariants = (p, staged) => {
3012
3169
  var _a, _b, _c, _d;
3013
3170
  return [
@@ -3100,6 +3257,7 @@ var ProductProjectionSearch = class {
3100
3257
  );
3101
3258
  }
3102
3259
  }
3260
+ const facets = this.getFacets(params, resources);
3103
3261
  if (params["filter.query"]) {
3104
3262
  try {
3105
3263
  const filters = params["filter.query"].map(
@@ -3133,7 +3291,7 @@ var ProductProjectionSearch = class {
3133
3291
  offset,
3134
3292
  limit,
3135
3293
  results: resources.map(this.transform),
3136
- facets: {}
3294
+ facets
3137
3295
  };
3138
3296
  }
3139
3297
  transform(product) {
@@ -3144,6 +3302,9 @@ var ProductProjectionSearch = class {
3144
3302
  lastModifiedAt: product.lastModifiedAt,
3145
3303
  version: product.version,
3146
3304
  name: obj.name,
3305
+ key: product.key,
3306
+ description: obj.description,
3307
+ metaDescription: obj.metaDescription,
3147
3308
  slug: obj.slug,
3148
3309
  categories: obj.categories,
3149
3310
  masterVariant: obj.masterVariant,
@@ -3151,6 +3312,145 @@ var ProductProjectionSearch = class {
3151
3312
  productType: product.productType
3152
3313
  };
3153
3314
  }
3315
+ getFacets(params, products) {
3316
+ if (!params.facet)
3317
+ return {};
3318
+ const staged = false;
3319
+ const result = {};
3320
+ for (const facet of params.facet) {
3321
+ const expression = generateFacetFunc(facet);
3322
+ if (expression.type === "TermExpression") {
3323
+ result[facet] = this.termFacet(expression.source, products, staged);
3324
+ }
3325
+ if (expression.type === "RangeExpression") {
3326
+ result[expression.source] = this.rangeFacet(
3327
+ expression.source,
3328
+ expression.children,
3329
+ products,
3330
+ staged
3331
+ );
3332
+ }
3333
+ if (expression.type === "FilterExpression") {
3334
+ result[expression.source] = this.filterFacet(
3335
+ expression.source,
3336
+ expression.children,
3337
+ products,
3338
+ staged
3339
+ );
3340
+ }
3341
+ }
3342
+ return result;
3343
+ }
3344
+ termFacet(facet, products, staged) {
3345
+ const result = {
3346
+ type: "terms",
3347
+ dataType: "text",
3348
+ missing: 0,
3349
+ total: 0,
3350
+ other: 0,
3351
+ terms: []
3352
+ };
3353
+ const terms = {};
3354
+ if (facet.startsWith("variants.")) {
3355
+ products.forEach((p) => {
3356
+ const variants = getVariants(p, staged);
3357
+ variants.forEach((v) => {
3358
+ result.total++;
3359
+ let value = resolveVariantValue(v, facet);
3360
+ if (value === void 0) {
3361
+ result.missing++;
3362
+ } else {
3363
+ if (typeof value === "number") {
3364
+ value = Number(value).toFixed(1);
3365
+ }
3366
+ terms[value] = value in terms ? terms[value] + 1 : 1;
3367
+ }
3368
+ });
3369
+ });
3370
+ } else {
3371
+ products.forEach((p) => {
3372
+ const value = nestedLookup(p, facet);
3373
+ result.total++;
3374
+ if (value === void 0) {
3375
+ result.missing++;
3376
+ } else {
3377
+ terms[value] = value in terms ? terms[value] + 1 : 1;
3378
+ }
3379
+ });
3380
+ }
3381
+ for (const term in terms) {
3382
+ result.terms.push({
3383
+ term,
3384
+ count: terms[term]
3385
+ });
3386
+ }
3387
+ return result;
3388
+ }
3389
+ filterFacet(source, filters, products, staged) {
3390
+ let count = 0;
3391
+ if (source.startsWith("variants.")) {
3392
+ for (const p of products) {
3393
+ for (const v of getVariants(p, staged)) {
3394
+ const val = resolveVariantValue(v, source);
3395
+ if (filters == null ? void 0 : filters.some((f) => f.match(val))) {
3396
+ count++;
3397
+ }
3398
+ }
3399
+ }
3400
+ } else {
3401
+ throw new Error("not supported");
3402
+ }
3403
+ return {
3404
+ type: "filter",
3405
+ count
3406
+ };
3407
+ }
3408
+ rangeFacet(source, ranges, products, staged) {
3409
+ const counts = (ranges == null ? void 0 : ranges.map((range) => {
3410
+ if (source.startsWith("variants.")) {
3411
+ const values = [];
3412
+ for (const p of products) {
3413
+ for (const v of getVariants(p, staged)) {
3414
+ const val = resolveVariantValue(v, source);
3415
+ if (val === void 0) {
3416
+ continue;
3417
+ }
3418
+ if (range.match(val)) {
3419
+ values.push(val);
3420
+ }
3421
+ }
3422
+ }
3423
+ const numValues = values.length;
3424
+ return {
3425
+ type: "double",
3426
+ from: range.start || 0,
3427
+ fromStr: range.start !== null ? Number(range.start).toFixed(1) : "",
3428
+ to: range.stop || 0,
3429
+ toStr: range.stop !== null ? Number(range.stop).toFixed(1) : "",
3430
+ count: numValues,
3431
+ total: values.reduce((a, b) => a + b, 0),
3432
+ min: numValues > 0 ? Math.min(...values) : 0,
3433
+ max: numValues > 0 ? Math.max(...values) : 0,
3434
+ mean: numValues > 0 ? mean(values) : 0
3435
+ };
3436
+ } else {
3437
+ throw new Error("not supported");
3438
+ }
3439
+ })) || [];
3440
+ const data = {
3441
+ type: "range",
3442
+ dataType: "number",
3443
+ ranges: counts
3444
+ };
3445
+ return data;
3446
+ }
3447
+ };
3448
+ var mean = (arr) => {
3449
+ let total = 0;
3450
+ for (let i = 0; i < arr.length; i++) {
3451
+ total += arr[i];
3452
+ }
3453
+ return total / arr.length;
3154
3454
  };
3155
3455
 
3156
3456
  // src/repositories/product-projection.ts
@@ -3178,6 +3478,7 @@ var ProductProjectionRepository = class extends AbstractResourceRepository {
3178
3478
  const results = this._searchService.search(context.projectKey, {
3179
3479
  filter: QueryParamsAsArray(query.filter),
3180
3480
  "filter.query": QueryParamsAsArray(query["filter.query"]),
3481
+ facet: QueryParamsAsArray(query.facet),
3181
3482
  offset: query.offset ? Number(query.offset) : void 0,
3182
3483
  limit: query.limit ? Number(query.limit) : void 0,
3183
3484
  expand: QueryParamsAsArray(query.expand)
@@ -3527,25 +3828,6 @@ var ProductTypeService = class extends AbstractService {
3527
3828
  }
3528
3829
  };
3529
3830
 
3530
- // src/lib/masking.ts
3531
- var maskSecretValue = (resource, path) => {
3532
- const parts = path.split(".");
3533
- const clone = JSON.parse(JSON.stringify(resource));
3534
- let val = clone;
3535
- const target = parts.pop();
3536
- for (let i = 0; i < parts.length; i++) {
3537
- const part = parts[i];
3538
- val = val[part];
3539
- if (val === void 0) {
3540
- return resource;
3541
- }
3542
- }
3543
- if (val && target && val[target]) {
3544
- val[target] = "****";
3545
- }
3546
- return clone;
3547
- };
3548
-
3549
3831
  // src/repositories/project.ts
3550
3832
  var ProjectRepository = class extends AbstractRepository {
3551
3833
  constructor() {
@@ -3603,11 +3885,16 @@ var ProjectRepository = class extends AbstractRepository {
3603
3885
  }
3604
3886
  get(context) {
3605
3887
  const resource = this._storage.getProject(context.projectKey);
3606
- const masked = maskSecretValue(
3607
- resource,
3608
- "externalOAuth.authorizationHeader"
3609
- );
3610
- return masked;
3888
+ return this.postProcessResource(resource);
3889
+ }
3890
+ postProcessResource(resource) {
3891
+ if (resource) {
3892
+ return maskSecretValue(
3893
+ resource,
3894
+ "externalOAuth.authorizationHeader"
3895
+ );
3896
+ }
3897
+ return resource;
3611
3898
  }
3612
3899
  save(context, resource) {
3613
3900
  const current = this.get(context);
@@ -3876,6 +4163,14 @@ var StateRepository = class extends AbstractResourceRepository {
3876
4163
  },
3877
4164
  setRoles: (context, resource, { roles }) => {
3878
4165
  resource.roles = roles;
4166
+ },
4167
+ setTransitions: (context, resource, { transitions }) => {
4168
+ resource.transitions = transitions == null ? void 0 : transitions.map((resourceId) => {
4169
+ return {
4170
+ id: resourceId.id || "",
4171
+ typeId: "state"
4172
+ };
4173
+ });
3879
4174
  }
3880
4175
  };
3881
4176
  }