@labdigital/commercetools-mock 2.30.1 → 2.31.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.
package/dist/index.cjs CHANGED
@@ -4544,19 +4544,346 @@ var PaymentRepository = class extends AbstractResourceRepository {
4544
4544
  }
4545
4545
  };
4546
4546
 
4547
- // src/lib/searchQueryTypeChecker.ts
4548
- var validateSearchQuery = (query) => {
4549
- if (isSearchAndExpression(query)) {
4550
- query.and.forEach((expr) => validateSearchQuery(expr));
4551
- } else if (isSearchOrExpression(query)) {
4552
- query.or.forEach((expr) => validateSearchQuery(expr));
4553
- } else if (isSearchNotExpression(query)) {
4554
- validateSearchQuery(query.not);
4555
- } else if (isSearchFilterExpression(query) || isSearchRangeExpression(query) || isSearchExactExpression(query) || isSearchExistsExpression(query) || isSearchFullTextExpression(query) || isSearchFullTextPrefixExpression(query) || isSearchPrefixExpression(query) || isSearchWildCardExpression(query) || isSearchAnyValue(query)) {
4556
- return;
4557
- } else {
4558
- throw new Error("Unsupported search query expression");
4547
+ // src/lib/projectionSearchFilter.ts
4548
+ var parseFilterExpression = (filter) => {
4549
+ const exprFunc = generateMatchFunc2(filter);
4550
+ const [source] = filter.split(":", 1);
4551
+ if (source.startsWith("variants.")) {
4552
+ return filterVariants(source, exprFunc);
4553
+ }
4554
+ return filterProduct(source, exprFunc);
4555
+ };
4556
+ var getLexer2 = (value) => new Lexer(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);
4557
+ var parseFilter = (filter) => {
4558
+ const lexer = getLexer2(filter);
4559
+ const parser = new Parser(lexer).builder().nud("IDENTIFIER", 100, (t) => t.token.match).led(":", 100, ({ left, bp }) => {
4560
+ const parsed = parser.parse({ terminals: [bp - 1] });
4561
+ const expressions = !Array.isArray(parsed) ? [parsed] : parsed;
4562
+ const unique = new Set(expressions.map((expr) => expr.type));
4563
+ if (unique.size > 1) {
4564
+ throw new Error("Invalid expression");
4565
+ }
4566
+ if (expressions.some((expr) => expr.type == "Symbol")) {
4567
+ return {
4568
+ source: left,
4569
+ type: "FilterExpression",
4570
+ children: expressions.map((e) => {
4571
+ if (e.type != "Symbol") {
4572
+ throw new Error("Invalid expression");
4573
+ }
4574
+ return {
4575
+ type: "FilterExpression",
4576
+ match: (obj) => obj === e.value
4577
+ };
4578
+ })
4579
+ };
4580
+ }
4581
+ return {
4582
+ source: left,
4583
+ type: expressions[0].type,
4584
+ children: expressions
4585
+ };
4586
+ }).nud(
4587
+ "STRING",
4588
+ 20,
4589
+ (t) => ({
4590
+ type: "Symbol",
4591
+ kind: "string",
4592
+ // @ts-ignore
4593
+ value: t.token.groups[1]
4594
+ })
4595
+ ).nud(
4596
+ "INT",
4597
+ 5,
4598
+ (t) => ({
4599
+ type: "Symbol",
4600
+ kind: "int",
4601
+ value: parseInt(t.token.match, 10)
4602
+ })
4603
+ ).nud("STAR", 5, (_) => ({
4604
+ type: "Symbol",
4605
+ kind: "any",
4606
+ value: null
4607
+ })).nud(
4608
+ "EXISTS",
4609
+ 10,
4610
+ ({ bp }) => ({
4611
+ type: "FilterExpression",
4612
+ match: (obj) => obj !== void 0
4613
+ })
4614
+ ).nud(
4615
+ "MISSING",
4616
+ 10,
4617
+ ({ bp }) => ({
4618
+ type: "FilterExpression",
4619
+ match: (obj) => obj === void 0
4620
+ })
4621
+ ).led("COMMA", 200, ({ left, token, bp }) => {
4622
+ const expr = parser.parse({ terminals: [bp - 1] });
4623
+ if (Array.isArray(expr)) {
4624
+ return [left, ...expr];
4625
+ } else {
4626
+ return [left, expr];
4627
+ }
4628
+ }).nud("(", 100, (t) => {
4629
+ const expr = parser.parse({ terminals: [")"] });
4630
+ lexer.expect(")");
4631
+ return expr;
4632
+ }).bp(")", 0).led("TO", 20, ({ left, bp }) => {
4633
+ const expr = parser.parse({ terminals: [bp - 1] });
4634
+ return {
4635
+ start: left.value,
4636
+ stop: expr.value
4637
+ };
4638
+ }).nud("RANGE", 20, ({ bp }) => {
4639
+ let ranges = parser.parse();
4640
+ if (!Array.isArray(ranges)) {
4641
+ ranges = [ranges];
4642
+ }
4643
+ return ranges.map((range) => {
4644
+ let func;
4645
+ if (range.start !== null && range.stop !== null) {
4646
+ func = (obj) => obj >= range.start && obj <= range.stop;
4647
+ } else if (range.start === null && range.stop !== null) {
4648
+ func = (obj) => obj <= range.stop;
4649
+ } else if (range.start !== null && range.stop === null) {
4650
+ func = (obj) => obj >= range.start;
4651
+ } else {
4652
+ func = (obj) => true;
4653
+ }
4654
+ return {
4655
+ type: "RangeExpression",
4656
+ start: range.start,
4657
+ stop: range.stop,
4658
+ match: func
4659
+ };
4660
+ });
4661
+ }).build();
4662
+ return parser.parse();
4663
+ };
4664
+ var generateMatchFunc2 = (filter) => {
4665
+ const result = parseFilter(filter);
4666
+ if (!result) {
4667
+ throw new Error(`Syntax error while parsing '${filter}'.`);
4668
+ }
4669
+ if (result.type == "TermExpression") {
4670
+ throw new Error(`Syntax error while parsing '${filter}'.`);
4671
+ }
4672
+ return (obj) => {
4673
+ if (!result.children)
4674
+ return false;
4675
+ return result.children.some((c) => c.match(obj));
4676
+ };
4677
+ };
4678
+ var generateFacetFunc = (filter) => {
4679
+ if (!filter.includes(":")) {
4680
+ return {
4681
+ source: filter,
4682
+ type: "TermExpression"
4683
+ };
4684
+ }
4685
+ return parseFilter(filter);
4686
+ };
4687
+ var filterProduct = (source, exprFunc) => (p, markMatchingVariants) => {
4688
+ const value = nestedLookup(p, source);
4689
+ return exprFunc(value);
4690
+ };
4691
+ var filterVariants = (source, exprFunc) => (p, markMatchingVariants) => {
4692
+ const [, ...paths] = source.split(".");
4693
+ const path = paths.join(".");
4694
+ const variants = getVariants(p);
4695
+ for (const variant of variants) {
4696
+ const value = resolveVariantValue(variant, path);
4697
+ if (exprFunc(value)) {
4698
+ if (markMatchingVariants) {
4699
+ for (const v of variants) {
4700
+ v.isMatchingVariant = false;
4701
+ }
4702
+ variant.isMatchingVariant = true;
4703
+ }
4704
+ return true;
4705
+ }
4706
+ }
4707
+ return false;
4708
+ };
4709
+ var resolveVariantValue = (obj, path) => {
4710
+ if (path === void 0) {
4711
+ return obj;
4712
+ }
4713
+ if (path.startsWith("variants.")) {
4714
+ path = path.substring(path.indexOf(".") + 1);
4559
4715
  }
4716
+ if (path.startsWith("attributes.")) {
4717
+ const [, attrName, ...rest] = path.split(".");
4718
+ if (!obj.attributes) {
4719
+ return void 0;
4720
+ }
4721
+ for (const attr of obj.attributes) {
4722
+ if (attr.name === attrName) {
4723
+ return nestedLookup(attr.value, rest.join("."));
4724
+ }
4725
+ }
4726
+ }
4727
+ if (path === "price.centAmount") {
4728
+ return obj.prices && obj.prices.length > 0 ? obj.prices[0].value.centAmount : void 0;
4729
+ }
4730
+ return nestedLookup(obj, path);
4731
+ };
4732
+ var getVariants = (p) => [
4733
+ p.masterVariant,
4734
+ ...p.variants ?? []
4735
+ ];
4736
+
4737
+ // src/lib/productSearchFilter.ts
4738
+ var parseSearchQuery = (searchQuery) => {
4739
+ if (isSearchAndExpression(searchQuery)) {
4740
+ return (obj, markMatchingVariant) => searchQuery.and.every((expr) => {
4741
+ const filterFunc = parseSearchQuery(expr);
4742
+ return filterFunc(obj, markMatchingVariant);
4743
+ });
4744
+ }
4745
+ if (isSearchOrExpression(searchQuery)) {
4746
+ return (obj, markMatchingVariant) => searchQuery.or.some((expr) => {
4747
+ const filterFunc = parseSearchQuery(expr);
4748
+ return filterFunc(obj, markMatchingVariant);
4749
+ });
4750
+ }
4751
+ if (isSearchNotExpression(searchQuery)) {
4752
+ return (obj, markMatchingVariant) => !parseSearchQuery(searchQuery.not)(obj, markMatchingVariant);
4753
+ }
4754
+ if (isSearchFilterExpression(searchQuery)) {
4755
+ return (obj, markMatchingVariant) => searchQuery.filter.every((expr) => {
4756
+ const filterFunc = parseSearchQuery(expr);
4757
+ return filterFunc(obj, markMatchingVariant);
4758
+ });
4759
+ }
4760
+ if (isSearchRangeExpression(searchQuery)) {
4761
+ const generateRangeMatchFunc = (value) => {
4762
+ const rangeFilters = [];
4763
+ if (searchQuery.range.gte) {
4764
+ rangeFilters.push(value >= searchQuery.range.gte);
4765
+ }
4766
+ if (searchQuery.range.gt) {
4767
+ rangeFilters.push(value > searchQuery.range.gt);
4768
+ }
4769
+ if (searchQuery.range.lte) {
4770
+ rangeFilters.push(value <= searchQuery.range.lte);
4771
+ }
4772
+ if (searchQuery.range.lt) {
4773
+ rangeFilters.push(value < searchQuery.range.lt);
4774
+ }
4775
+ return rangeFilters.every((filter) => filter);
4776
+ };
4777
+ return generateFieldMatchFunc(generateRangeMatchFunc, searchQuery.range);
4778
+ }
4779
+ if (isSearchExactExpression(searchQuery)) {
4780
+ return generateFieldMatchFunc(
4781
+ (value) => value === searchQuery.exact.value,
4782
+ searchQuery.exact
4783
+ );
4784
+ }
4785
+ if (isSearchExistsExpression(searchQuery)) {
4786
+ return generateFieldMatchFunc((value) => !!value, searchQuery.exists);
4787
+ }
4788
+ if (isSearchFullTextExpression(searchQuery)) {
4789
+ return generateFieldMatchFunc(
4790
+ (value) => value.includes(searchQuery.fullText.value),
4791
+ searchQuery.fullText
4792
+ );
4793
+ }
4794
+ if (isSearchFullTextPrefixExpression(searchQuery)) {
4795
+ return generateFieldMatchFunc(
4796
+ (value) => value.startsWith(searchQuery.fullTextPrefix.value),
4797
+ searchQuery.fullTextPrefix
4798
+ );
4799
+ }
4800
+ if (isSearchPrefixExpression(searchQuery)) {
4801
+ return generateFieldMatchFunc(
4802
+ (value) => value.startsWith(searchQuery.prefix.value),
4803
+ searchQuery.prefix
4804
+ );
4805
+ }
4806
+ if (isSearchWildCardExpression(searchQuery)) {
4807
+ const generateWildcardMatchFunc = (value) => {
4808
+ const wildCardValues = searchQuery.wildcard.value.split("*").filter((v) => !!v);
4809
+ if (searchQuery.wildcard.caseInsensitive) {
4810
+ return wildCardValues.every(
4811
+ (wildCardValue) => value.toLowerCase().includes(wildCardValue.toLowerCase())
4812
+ );
4813
+ }
4814
+ return wildCardValues.every(
4815
+ (wildCardValue) => value.includes(wildCardValue)
4816
+ );
4817
+ };
4818
+ return generateFieldMatchFunc(
4819
+ generateWildcardMatchFunc,
4820
+ searchQuery.wildcard
4821
+ );
4822
+ }
4823
+ throw new Error("Unsupported search query expression");
4824
+ };
4825
+ var generateFieldMatchFunc = (matchFunc, searchQuery) => {
4826
+ const generateMatchFunc3 = (obj, markMatchingVariants) => {
4827
+ if (searchQuery.field.startsWith("variants.")) {
4828
+ const variantField = searchQuery.field.substring(
4829
+ searchQuery.field.indexOf(".") + 1
4830
+ );
4831
+ const variants = getVariants(obj);
4832
+ for (const variant of variants) {
4833
+ const value = resolveFieldValue(variant, {
4834
+ ...searchQuery,
4835
+ field: variantField
4836
+ });
4837
+ if (matchFunc(value)) {
4838
+ if (markMatchingVariants) {
4839
+ for (const v of variants) {
4840
+ v.isMatchingVariant = false;
4841
+ }
4842
+ variant.isMatchingVariant = true;
4843
+ }
4844
+ return true;
4845
+ }
4846
+ }
4847
+ return false;
4848
+ }
4849
+ return matchFunc(resolveFieldValue(obj, searchQuery));
4850
+ };
4851
+ return generateMatchFunc3;
4852
+ };
4853
+ var resolveFieldValue = (obj, searchQuery) => {
4854
+ if (searchQuery.field === void 0) {
4855
+ throw new Error("Missing field path in query expression");
4856
+ }
4857
+ let fieldPath = searchQuery.field;
4858
+ const language = "language" in searchQuery ? searchQuery.language : void 0;
4859
+ if (fieldPath.startsWith("variants.")) {
4860
+ fieldPath = fieldPath.substring(fieldPath.indexOf(".") + 1);
4861
+ }
4862
+ if (fieldPath.startsWith("attributes.")) {
4863
+ const [, attrName, ...rest] = fieldPath.split(".");
4864
+ if (!obj.attributes) {
4865
+ return void 0;
4866
+ }
4867
+ for (const attr of obj.attributes) {
4868
+ if (attr.name === attrName) {
4869
+ return nestedLookupByLanguage(attr.value, rest.join("."), language);
4870
+ }
4871
+ }
4872
+ }
4873
+ if (fieldPath === "prices.currentCentAmount") {
4874
+ return obj.prices && obj.prices.length > 0 ? obj.prices[0].value.centAmount : void 0;
4875
+ }
4876
+ return nestedLookupByLanguage(obj, fieldPath, language);
4877
+ };
4878
+ var nestedLookupByLanguage = (obj, path, language) => {
4879
+ const value = nestedLookup(obj, path);
4880
+ if (language && value && typeof value === "object") {
4881
+ const matchingLanguageKey = Object.keys(value).find(
4882
+ (key) => key.toLowerCase().startsWith(language.toLowerCase())
4883
+ );
4884
+ return matchingLanguageKey ? value[matchingLanguageKey] : void 0;
4885
+ }
4886
+ return value;
4560
4887
  };
4561
4888
  var isSearchAndExpression = (expr) => expr.and !== void 0;
4562
4889
  var isSearchOrExpression = (expr) => expr.or !== void 0;
@@ -4569,6 +4896,32 @@ var isSearchFullTextExpression = (expr) => expr.fullText !== void 0;
4569
4896
  var isSearchFullTextPrefixExpression = (expr) => expr.fullTextPrefix !== void 0;
4570
4897
  var isSearchPrefixExpression = (expr) => expr.prefix !== void 0;
4571
4898
  var isSearchWildCardExpression = (expr) => expr.wildcard !== void 0;
4899
+
4900
+ // src/lib/searchQueryTypeChecker.ts
4901
+ var validateSearchQuery = (query) => {
4902
+ if (isSearchAndExpression2(query)) {
4903
+ query.and.forEach((expr) => validateSearchQuery(expr));
4904
+ } else if (isSearchOrExpression2(query)) {
4905
+ query.or.forEach((expr) => validateSearchQuery(expr));
4906
+ } else if (isSearchNotExpression2(query)) {
4907
+ validateSearchQuery(query.not);
4908
+ } else if (isSearchFilterExpression2(query) || isSearchRangeExpression2(query) || isSearchExactExpression2(query) || isSearchExistsExpression2(query) || isSearchFullTextExpression2(query) || isSearchFullTextPrefixExpression2(query) || isSearchPrefixExpression2(query) || isSearchWildCardExpression2(query) || isSearchAnyValue(query)) {
4909
+ return;
4910
+ } else {
4911
+ throw new Error("Unsupported search query expression");
4912
+ }
4913
+ };
4914
+ var isSearchAndExpression2 = (expr) => expr.and !== void 0;
4915
+ var isSearchOrExpression2 = (expr) => expr.or !== void 0;
4916
+ var isSearchNotExpression2 = (expr) => expr.not !== void 0;
4917
+ var isSearchFilterExpression2 = (expr) => expr.filter !== void 0;
4918
+ var isSearchRangeExpression2 = (expr) => expr.range !== void 0;
4919
+ var isSearchExactExpression2 = (expr) => expr.exact !== void 0;
4920
+ var isSearchExistsExpression2 = (expr) => expr.exists !== void 0;
4921
+ var isSearchFullTextExpression2 = (expr) => expr.fullText !== void 0;
4922
+ var isSearchFullTextPrefixExpression2 = (expr) => expr.fullTextPrefix !== void 0;
4923
+ var isSearchPrefixExpression2 = (expr) => expr.prefix !== void 0;
4924
+ var isSearchWildCardExpression2 = (expr) => expr.wildcard !== void 0;
4572
4925
  var isSearchAnyValue = (expr) => expr.value !== void 0;
4573
4926
 
4574
4927
  // src/priceSelector.ts
@@ -4629,7 +4982,7 @@ var ProductSearch = class {
4629
4982
  this._storage = storage;
4630
4983
  }
4631
4984
  search(projectKey, params) {
4632
- const resources = this._storage.all(projectKey, "product").map(
4985
+ let resources = this._storage.all(projectKey, "product").map(
4633
4986
  (r) => this.transform(r, params.productProjectionParameters?.staged ?? false)
4634
4987
  ).filter((p) => {
4635
4988
  if (!params.productProjectionParameters?.staged) {
@@ -4637,9 +4990,14 @@ var ProductSearch = class {
4637
4990
  }
4638
4991
  return true;
4639
4992
  });
4993
+ const markMatchingVariant = params.markMatchingVariants ?? false;
4640
4994
  if (params.query) {
4641
4995
  try {
4642
4996
  validateSearchQuery(params.query);
4997
+ const matchFunc = parseSearchQuery(params.query);
4998
+ resources = resources.filter(
4999
+ (resource) => matchFunc(resource, markMatchingVariant)
5000
+ );
4643
5001
  } catch (err) {
4644
5002
  console.error(err);
4645
5003
  throw new CommercetoolsError(
@@ -5616,196 +5974,6 @@ var ProductDiscountUpdateHandler = class extends AbstractUpdateHandler {
5616
5974
  }
5617
5975
  };
5618
5976
 
5619
- // src/lib/projectionSearchFilter.ts
5620
- var parseFilterExpression = (filter) => {
5621
- const exprFunc = generateMatchFunc2(filter);
5622
- const [source] = filter.split(":", 1);
5623
- if (source.startsWith("variants.")) {
5624
- return filterVariants(source, exprFunc);
5625
- }
5626
- return filterProduct(source, exprFunc);
5627
- };
5628
- var getLexer2 = (value) => new Lexer(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);
5629
- var parseFilter = (filter) => {
5630
- const lexer = getLexer2(filter);
5631
- const parser = new Parser(lexer).builder().nud("IDENTIFIER", 100, (t) => t.token.match).led(":", 100, ({ left, bp }) => {
5632
- const parsed = parser.parse({ terminals: [bp - 1] });
5633
- const expressions = !Array.isArray(parsed) ? [parsed] : parsed;
5634
- const unique = new Set(expressions.map((expr) => expr.type));
5635
- if (unique.size > 1) {
5636
- throw new Error("Invalid expression");
5637
- }
5638
- if (expressions.some((expr) => expr.type == "Symbol")) {
5639
- return {
5640
- source: left,
5641
- type: "FilterExpression",
5642
- children: expressions.map((e) => {
5643
- if (e.type != "Symbol") {
5644
- throw new Error("Invalid expression");
5645
- }
5646
- return {
5647
- type: "FilterExpression",
5648
- match: (obj) => obj === e.value
5649
- };
5650
- })
5651
- };
5652
- }
5653
- return {
5654
- source: left,
5655
- type: expressions[0].type,
5656
- children: expressions
5657
- };
5658
- }).nud(
5659
- "STRING",
5660
- 20,
5661
- (t) => ({
5662
- type: "Symbol",
5663
- kind: "string",
5664
- // @ts-ignore
5665
- value: t.token.groups[1]
5666
- })
5667
- ).nud(
5668
- "INT",
5669
- 5,
5670
- (t) => ({
5671
- type: "Symbol",
5672
- kind: "int",
5673
- value: parseInt(t.token.match, 10)
5674
- })
5675
- ).nud("STAR", 5, (_) => ({
5676
- type: "Symbol",
5677
- kind: "any",
5678
- value: null
5679
- })).nud(
5680
- "EXISTS",
5681
- 10,
5682
- ({ bp }) => ({
5683
- type: "FilterExpression",
5684
- match: (obj) => obj !== void 0
5685
- })
5686
- ).nud(
5687
- "MISSING",
5688
- 10,
5689
- ({ bp }) => ({
5690
- type: "FilterExpression",
5691
- match: (obj) => obj === void 0
5692
- })
5693
- ).led("COMMA", 200, ({ left, token, bp }) => {
5694
- const expr = parser.parse({ terminals: [bp - 1] });
5695
- if (Array.isArray(expr)) {
5696
- return [left, ...expr];
5697
- } else {
5698
- return [left, expr];
5699
- }
5700
- }).nud("(", 100, (t) => {
5701
- const expr = parser.parse({ terminals: [")"] });
5702
- lexer.expect(")");
5703
- return expr;
5704
- }).bp(")", 0).led("TO", 20, ({ left, bp }) => {
5705
- const expr = parser.parse({ terminals: [bp - 1] });
5706
- return {
5707
- start: left.value,
5708
- stop: expr.value
5709
- };
5710
- }).nud("RANGE", 20, ({ bp }) => {
5711
- let ranges = parser.parse();
5712
- if (!Array.isArray(ranges)) {
5713
- ranges = [ranges];
5714
- }
5715
- return ranges.map((range) => {
5716
- let func;
5717
- if (range.start !== null && range.stop !== null) {
5718
- func = (obj) => obj >= range.start && obj <= range.stop;
5719
- } else if (range.start === null && range.stop !== null) {
5720
- func = (obj) => obj <= range.stop;
5721
- } else if (range.start !== null && range.stop === null) {
5722
- func = (obj) => obj >= range.start;
5723
- } else {
5724
- func = (obj) => true;
5725
- }
5726
- return {
5727
- type: "RangeExpression",
5728
- start: range.start,
5729
- stop: range.stop,
5730
- match: func
5731
- };
5732
- });
5733
- }).build();
5734
- return parser.parse();
5735
- };
5736
- var generateMatchFunc2 = (filter) => {
5737
- const result = parseFilter(filter);
5738
- if (!result) {
5739
- throw new Error(`Syntax error while parsing '${filter}'.`);
5740
- }
5741
- if (result.type == "TermExpression") {
5742
- throw new Error(`Syntax error while parsing '${filter}'.`);
5743
- }
5744
- return (obj) => {
5745
- if (!result.children)
5746
- return false;
5747
- return result.children.some((c) => c.match(obj));
5748
- };
5749
- };
5750
- var generateFacetFunc = (filter) => {
5751
- if (!filter.includes(":")) {
5752
- return {
5753
- source: filter,
5754
- type: "TermExpression"
5755
- };
5756
- }
5757
- return parseFilter(filter);
5758
- };
5759
- var filterProduct = (source, exprFunc) => (p, markMatchingVariants) => {
5760
- const value = nestedLookup(p, source);
5761
- return exprFunc(value);
5762
- };
5763
- var filterVariants = (source, exprFunc) => (p, markMatchingVariants) => {
5764
- const [, ...paths] = source.split(".");
5765
- const path = paths.join(".");
5766
- const variants = getVariants(p);
5767
- for (const variant of variants) {
5768
- const value = resolveVariantValue(variant, path);
5769
- if (exprFunc(value)) {
5770
- if (markMatchingVariants) {
5771
- for (const v of variants) {
5772
- v.isMatchingVariant = false;
5773
- }
5774
- variant.isMatchingVariant = true;
5775
- }
5776
- return true;
5777
- }
5778
- }
5779
- return false;
5780
- };
5781
- var resolveVariantValue = (obj, path) => {
5782
- if (path === void 0) {
5783
- return obj;
5784
- }
5785
- if (path.startsWith("variants.")) {
5786
- path = path.substring(path.indexOf(".") + 1);
5787
- }
5788
- if (path.startsWith("attributes.")) {
5789
- const [, attrName, ...rest] = path.split(".");
5790
- if (!obj.attributes) {
5791
- return void 0;
5792
- }
5793
- for (const attr of obj.attributes) {
5794
- if (attr.name === attrName) {
5795
- return nestedLookup(attr.value, rest.join("."));
5796
- }
5797
- }
5798
- }
5799
- if (path === "price.centAmount") {
5800
- return obj.prices && obj.prices.length > 0 ? obj.prices[0].value.centAmount : void 0;
5801
- }
5802
- return nestedLookup(obj, path);
5803
- };
5804
- var getVariants = (p) => [
5805
- p.masterVariant,
5806
- ...p.variants ?? []
5807
- ];
5808
-
5809
5977
  // src/product-projection-search.ts
5810
5978
  var ProductProjectionSearch = class {
5811
5979
  _storage;