@labdigital/commercetools-mock 2.30.0 → 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.js CHANGED
@@ -3953,6 +3953,9 @@ var OrderUpdateHandler = class extends AbstractUpdateHandler {
3953
3953
  changePaymentState(context, resource, { paymentState }) {
3954
3954
  resource.paymentState = paymentState;
3955
3955
  }
3956
+ changeShipmentState(context, resource, { shipmentState }) {
3957
+ resource.shipmentState = shipmentState;
3958
+ }
3956
3959
  setBillingAddress(context, resource, { address }) {
3957
3960
  resource.billingAddress = createAddress(
3958
3961
  address,
@@ -4504,19 +4507,346 @@ var PaymentRepository = class extends AbstractResourceRepository {
4504
4507
  }
4505
4508
  };
4506
4509
 
4507
- // src/lib/searchQueryTypeChecker.ts
4508
- var validateSearchQuery = (query) => {
4509
- if (isSearchAndExpression(query)) {
4510
- query.and.forEach((expr) => validateSearchQuery(expr));
4511
- } else if (isSearchOrExpression(query)) {
4512
- query.or.forEach((expr) => validateSearchQuery(expr));
4513
- } else if (isSearchNotExpression(query)) {
4514
- validateSearchQuery(query.not);
4515
- } else if (isSearchFilterExpression(query) || isSearchRangeExpression(query) || isSearchExactExpression(query) || isSearchExistsExpression(query) || isSearchFullTextExpression(query) || isSearchFullTextPrefixExpression(query) || isSearchPrefixExpression(query) || isSearchWildCardExpression(query) || isSearchAnyValue(query)) {
4516
- return;
4517
- } else {
4518
- throw new Error("Unsupported search query expression");
4510
+ // src/lib/projectionSearchFilter.ts
4511
+ var parseFilterExpression = (filter) => {
4512
+ const exprFunc = generateMatchFunc2(filter);
4513
+ const [source] = filter.split(":", 1);
4514
+ if (source.startsWith("variants.")) {
4515
+ return filterVariants(source, exprFunc);
4516
+ }
4517
+ return filterProduct(source, exprFunc);
4518
+ };
4519
+ 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);
4520
+ var parseFilter = (filter) => {
4521
+ const lexer = getLexer2(filter);
4522
+ const parser = new Parser(lexer).builder().nud("IDENTIFIER", 100, (t) => t.token.match).led(":", 100, ({ left, bp }) => {
4523
+ const parsed = parser.parse({ terminals: [bp - 1] });
4524
+ const expressions = !Array.isArray(parsed) ? [parsed] : parsed;
4525
+ const unique = new Set(expressions.map((expr) => expr.type));
4526
+ if (unique.size > 1) {
4527
+ throw new Error("Invalid expression");
4528
+ }
4529
+ if (expressions.some((expr) => expr.type == "Symbol")) {
4530
+ return {
4531
+ source: left,
4532
+ type: "FilterExpression",
4533
+ children: expressions.map((e) => {
4534
+ if (e.type != "Symbol") {
4535
+ throw new Error("Invalid expression");
4536
+ }
4537
+ return {
4538
+ type: "FilterExpression",
4539
+ match: (obj) => obj === e.value
4540
+ };
4541
+ })
4542
+ };
4543
+ }
4544
+ return {
4545
+ source: left,
4546
+ type: expressions[0].type,
4547
+ children: expressions
4548
+ };
4549
+ }).nud(
4550
+ "STRING",
4551
+ 20,
4552
+ (t) => ({
4553
+ type: "Symbol",
4554
+ kind: "string",
4555
+ // @ts-ignore
4556
+ value: t.token.groups[1]
4557
+ })
4558
+ ).nud(
4559
+ "INT",
4560
+ 5,
4561
+ (t) => ({
4562
+ type: "Symbol",
4563
+ kind: "int",
4564
+ value: parseInt(t.token.match, 10)
4565
+ })
4566
+ ).nud("STAR", 5, (_) => ({
4567
+ type: "Symbol",
4568
+ kind: "any",
4569
+ value: null
4570
+ })).nud(
4571
+ "EXISTS",
4572
+ 10,
4573
+ ({ bp }) => ({
4574
+ type: "FilterExpression",
4575
+ match: (obj) => obj !== void 0
4576
+ })
4577
+ ).nud(
4578
+ "MISSING",
4579
+ 10,
4580
+ ({ bp }) => ({
4581
+ type: "FilterExpression",
4582
+ match: (obj) => obj === void 0
4583
+ })
4584
+ ).led("COMMA", 200, ({ left, token, bp }) => {
4585
+ const expr = parser.parse({ terminals: [bp - 1] });
4586
+ if (Array.isArray(expr)) {
4587
+ return [left, ...expr];
4588
+ } else {
4589
+ return [left, expr];
4590
+ }
4591
+ }).nud("(", 100, (t) => {
4592
+ const expr = parser.parse({ terminals: [")"] });
4593
+ lexer.expect(")");
4594
+ return expr;
4595
+ }).bp(")", 0).led("TO", 20, ({ left, bp }) => {
4596
+ const expr = parser.parse({ terminals: [bp - 1] });
4597
+ return {
4598
+ start: left.value,
4599
+ stop: expr.value
4600
+ };
4601
+ }).nud("RANGE", 20, ({ bp }) => {
4602
+ let ranges = parser.parse();
4603
+ if (!Array.isArray(ranges)) {
4604
+ ranges = [ranges];
4605
+ }
4606
+ return ranges.map((range) => {
4607
+ let func;
4608
+ if (range.start !== null && range.stop !== null) {
4609
+ func = (obj) => obj >= range.start && obj <= range.stop;
4610
+ } else if (range.start === null && range.stop !== null) {
4611
+ func = (obj) => obj <= range.stop;
4612
+ } else if (range.start !== null && range.stop === null) {
4613
+ func = (obj) => obj >= range.start;
4614
+ } else {
4615
+ func = (obj) => true;
4616
+ }
4617
+ return {
4618
+ type: "RangeExpression",
4619
+ start: range.start,
4620
+ stop: range.stop,
4621
+ match: func
4622
+ };
4623
+ });
4624
+ }).build();
4625
+ return parser.parse();
4626
+ };
4627
+ var generateMatchFunc2 = (filter) => {
4628
+ const result = parseFilter(filter);
4629
+ if (!result) {
4630
+ throw new Error(`Syntax error while parsing '${filter}'.`);
4631
+ }
4632
+ if (result.type == "TermExpression") {
4633
+ throw new Error(`Syntax error while parsing '${filter}'.`);
4634
+ }
4635
+ return (obj) => {
4636
+ if (!result.children)
4637
+ return false;
4638
+ return result.children.some((c) => c.match(obj));
4639
+ };
4640
+ };
4641
+ var generateFacetFunc = (filter) => {
4642
+ if (!filter.includes(":")) {
4643
+ return {
4644
+ source: filter,
4645
+ type: "TermExpression"
4646
+ };
4647
+ }
4648
+ return parseFilter(filter);
4649
+ };
4650
+ var filterProduct = (source, exprFunc) => (p, markMatchingVariants) => {
4651
+ const value = nestedLookup(p, source);
4652
+ return exprFunc(value);
4653
+ };
4654
+ var filterVariants = (source, exprFunc) => (p, markMatchingVariants) => {
4655
+ const [, ...paths] = source.split(".");
4656
+ const path = paths.join(".");
4657
+ const variants = getVariants(p);
4658
+ for (const variant of variants) {
4659
+ const value = resolveVariantValue(variant, path);
4660
+ if (exprFunc(value)) {
4661
+ if (markMatchingVariants) {
4662
+ for (const v of variants) {
4663
+ v.isMatchingVariant = false;
4664
+ }
4665
+ variant.isMatchingVariant = true;
4666
+ }
4667
+ return true;
4668
+ }
4669
+ }
4670
+ return false;
4671
+ };
4672
+ var resolveVariantValue = (obj, path) => {
4673
+ if (path === void 0) {
4674
+ return obj;
4675
+ }
4676
+ if (path.startsWith("variants.")) {
4677
+ path = path.substring(path.indexOf(".") + 1);
4678
+ }
4679
+ if (path.startsWith("attributes.")) {
4680
+ const [, attrName, ...rest] = path.split(".");
4681
+ if (!obj.attributes) {
4682
+ return void 0;
4683
+ }
4684
+ for (const attr of obj.attributes) {
4685
+ if (attr.name === attrName) {
4686
+ return nestedLookup(attr.value, rest.join("."));
4687
+ }
4688
+ }
4689
+ }
4690
+ if (path === "price.centAmount") {
4691
+ return obj.prices && obj.prices.length > 0 ? obj.prices[0].value.centAmount : void 0;
4692
+ }
4693
+ return nestedLookup(obj, path);
4694
+ };
4695
+ var getVariants = (p) => [
4696
+ p.masterVariant,
4697
+ ...p.variants ?? []
4698
+ ];
4699
+
4700
+ // src/lib/productSearchFilter.ts
4701
+ var parseSearchQuery = (searchQuery) => {
4702
+ if (isSearchAndExpression(searchQuery)) {
4703
+ return (obj, markMatchingVariant) => searchQuery.and.every((expr) => {
4704
+ const filterFunc = parseSearchQuery(expr);
4705
+ return filterFunc(obj, markMatchingVariant);
4706
+ });
4707
+ }
4708
+ if (isSearchOrExpression(searchQuery)) {
4709
+ return (obj, markMatchingVariant) => searchQuery.or.some((expr) => {
4710
+ const filterFunc = parseSearchQuery(expr);
4711
+ return filterFunc(obj, markMatchingVariant);
4712
+ });
4713
+ }
4714
+ if (isSearchNotExpression(searchQuery)) {
4715
+ return (obj, markMatchingVariant) => !parseSearchQuery(searchQuery.not)(obj, markMatchingVariant);
4716
+ }
4717
+ if (isSearchFilterExpression(searchQuery)) {
4718
+ return (obj, markMatchingVariant) => searchQuery.filter.every((expr) => {
4719
+ const filterFunc = parseSearchQuery(expr);
4720
+ return filterFunc(obj, markMatchingVariant);
4721
+ });
4722
+ }
4723
+ if (isSearchRangeExpression(searchQuery)) {
4724
+ const generateRangeMatchFunc = (value) => {
4725
+ const rangeFilters = [];
4726
+ if (searchQuery.range.gte) {
4727
+ rangeFilters.push(value >= searchQuery.range.gte);
4728
+ }
4729
+ if (searchQuery.range.gt) {
4730
+ rangeFilters.push(value > searchQuery.range.gt);
4731
+ }
4732
+ if (searchQuery.range.lte) {
4733
+ rangeFilters.push(value <= searchQuery.range.lte);
4734
+ }
4735
+ if (searchQuery.range.lt) {
4736
+ rangeFilters.push(value < searchQuery.range.lt);
4737
+ }
4738
+ return rangeFilters.every((filter) => filter);
4739
+ };
4740
+ return generateFieldMatchFunc(generateRangeMatchFunc, searchQuery.range);
4741
+ }
4742
+ if (isSearchExactExpression(searchQuery)) {
4743
+ return generateFieldMatchFunc(
4744
+ (value) => value === searchQuery.exact.value,
4745
+ searchQuery.exact
4746
+ );
4747
+ }
4748
+ if (isSearchExistsExpression(searchQuery)) {
4749
+ return generateFieldMatchFunc((value) => !!value, searchQuery.exists);
4750
+ }
4751
+ if (isSearchFullTextExpression(searchQuery)) {
4752
+ return generateFieldMatchFunc(
4753
+ (value) => value.includes(searchQuery.fullText.value),
4754
+ searchQuery.fullText
4755
+ );
4756
+ }
4757
+ if (isSearchFullTextPrefixExpression(searchQuery)) {
4758
+ return generateFieldMatchFunc(
4759
+ (value) => value.startsWith(searchQuery.fullTextPrefix.value),
4760
+ searchQuery.fullTextPrefix
4761
+ );
4762
+ }
4763
+ if (isSearchPrefixExpression(searchQuery)) {
4764
+ return generateFieldMatchFunc(
4765
+ (value) => value.startsWith(searchQuery.prefix.value),
4766
+ searchQuery.prefix
4767
+ );
4768
+ }
4769
+ if (isSearchWildCardExpression(searchQuery)) {
4770
+ const generateWildcardMatchFunc = (value) => {
4771
+ const wildCardValues = searchQuery.wildcard.value.split("*").filter((v) => !!v);
4772
+ if (searchQuery.wildcard.caseInsensitive) {
4773
+ return wildCardValues.every(
4774
+ (wildCardValue) => value.toLowerCase().includes(wildCardValue.toLowerCase())
4775
+ );
4776
+ }
4777
+ return wildCardValues.every(
4778
+ (wildCardValue) => value.includes(wildCardValue)
4779
+ );
4780
+ };
4781
+ return generateFieldMatchFunc(
4782
+ generateWildcardMatchFunc,
4783
+ searchQuery.wildcard
4784
+ );
4785
+ }
4786
+ throw new Error("Unsupported search query expression");
4787
+ };
4788
+ var generateFieldMatchFunc = (matchFunc, searchQuery) => {
4789
+ const generateMatchFunc3 = (obj, markMatchingVariants) => {
4790
+ if (searchQuery.field.startsWith("variants.")) {
4791
+ const variantField = searchQuery.field.substring(
4792
+ searchQuery.field.indexOf(".") + 1
4793
+ );
4794
+ const variants = getVariants(obj);
4795
+ for (const variant of variants) {
4796
+ const value = resolveFieldValue(variant, {
4797
+ ...searchQuery,
4798
+ field: variantField
4799
+ });
4800
+ if (matchFunc(value)) {
4801
+ if (markMatchingVariants) {
4802
+ for (const v of variants) {
4803
+ v.isMatchingVariant = false;
4804
+ }
4805
+ variant.isMatchingVariant = true;
4806
+ }
4807
+ return true;
4808
+ }
4809
+ }
4810
+ return false;
4811
+ }
4812
+ return matchFunc(resolveFieldValue(obj, searchQuery));
4813
+ };
4814
+ return generateMatchFunc3;
4815
+ };
4816
+ var resolveFieldValue = (obj, searchQuery) => {
4817
+ if (searchQuery.field === void 0) {
4818
+ throw new Error("Missing field path in query expression");
4519
4819
  }
4820
+ let fieldPath = searchQuery.field;
4821
+ const language = "language" in searchQuery ? searchQuery.language : void 0;
4822
+ if (fieldPath.startsWith("variants.")) {
4823
+ fieldPath = fieldPath.substring(fieldPath.indexOf(".") + 1);
4824
+ }
4825
+ if (fieldPath.startsWith("attributes.")) {
4826
+ const [, attrName, ...rest] = fieldPath.split(".");
4827
+ if (!obj.attributes) {
4828
+ return void 0;
4829
+ }
4830
+ for (const attr of obj.attributes) {
4831
+ if (attr.name === attrName) {
4832
+ return nestedLookupByLanguage(attr.value, rest.join("."), language);
4833
+ }
4834
+ }
4835
+ }
4836
+ if (fieldPath === "prices.currentCentAmount") {
4837
+ return obj.prices && obj.prices.length > 0 ? obj.prices[0].value.centAmount : void 0;
4838
+ }
4839
+ return nestedLookupByLanguage(obj, fieldPath, language);
4840
+ };
4841
+ var nestedLookupByLanguage = (obj, path, language) => {
4842
+ const value = nestedLookup(obj, path);
4843
+ if (language && value && typeof value === "object") {
4844
+ const matchingLanguageKey = Object.keys(value).find(
4845
+ (key) => key.toLowerCase().startsWith(language.toLowerCase())
4846
+ );
4847
+ return matchingLanguageKey ? value[matchingLanguageKey] : void 0;
4848
+ }
4849
+ return value;
4520
4850
  };
4521
4851
  var isSearchAndExpression = (expr) => expr.and !== void 0;
4522
4852
  var isSearchOrExpression = (expr) => expr.or !== void 0;
@@ -4529,6 +4859,32 @@ var isSearchFullTextExpression = (expr) => expr.fullText !== void 0;
4529
4859
  var isSearchFullTextPrefixExpression = (expr) => expr.fullTextPrefix !== void 0;
4530
4860
  var isSearchPrefixExpression = (expr) => expr.prefix !== void 0;
4531
4861
  var isSearchWildCardExpression = (expr) => expr.wildcard !== void 0;
4862
+
4863
+ // src/lib/searchQueryTypeChecker.ts
4864
+ var validateSearchQuery = (query) => {
4865
+ if (isSearchAndExpression2(query)) {
4866
+ query.and.forEach((expr) => validateSearchQuery(expr));
4867
+ } else if (isSearchOrExpression2(query)) {
4868
+ query.or.forEach((expr) => validateSearchQuery(expr));
4869
+ } else if (isSearchNotExpression2(query)) {
4870
+ validateSearchQuery(query.not);
4871
+ } else if (isSearchFilterExpression2(query) || isSearchRangeExpression2(query) || isSearchExactExpression2(query) || isSearchExistsExpression2(query) || isSearchFullTextExpression2(query) || isSearchFullTextPrefixExpression2(query) || isSearchPrefixExpression2(query) || isSearchWildCardExpression2(query) || isSearchAnyValue(query)) {
4872
+ return;
4873
+ } else {
4874
+ throw new Error("Unsupported search query expression");
4875
+ }
4876
+ };
4877
+ var isSearchAndExpression2 = (expr) => expr.and !== void 0;
4878
+ var isSearchOrExpression2 = (expr) => expr.or !== void 0;
4879
+ var isSearchNotExpression2 = (expr) => expr.not !== void 0;
4880
+ var isSearchFilterExpression2 = (expr) => expr.filter !== void 0;
4881
+ var isSearchRangeExpression2 = (expr) => expr.range !== void 0;
4882
+ var isSearchExactExpression2 = (expr) => expr.exact !== void 0;
4883
+ var isSearchExistsExpression2 = (expr) => expr.exists !== void 0;
4884
+ var isSearchFullTextExpression2 = (expr) => expr.fullText !== void 0;
4885
+ var isSearchFullTextPrefixExpression2 = (expr) => expr.fullTextPrefix !== void 0;
4886
+ var isSearchPrefixExpression2 = (expr) => expr.prefix !== void 0;
4887
+ var isSearchWildCardExpression2 = (expr) => expr.wildcard !== void 0;
4532
4888
  var isSearchAnyValue = (expr) => expr.value !== void 0;
4533
4889
 
4534
4890
  // src/priceSelector.ts
@@ -4589,7 +4945,7 @@ var ProductSearch = class {
4589
4945
  this._storage = storage;
4590
4946
  }
4591
4947
  search(projectKey, params) {
4592
- const resources = this._storage.all(projectKey, "product").map(
4948
+ let resources = this._storage.all(projectKey, "product").map(
4593
4949
  (r) => this.transform(r, params.productProjectionParameters?.staged ?? false)
4594
4950
  ).filter((p) => {
4595
4951
  if (!params.productProjectionParameters?.staged) {
@@ -4597,9 +4953,14 @@ var ProductSearch = class {
4597
4953
  }
4598
4954
  return true;
4599
4955
  });
4956
+ const markMatchingVariant = params.markMatchingVariants ?? false;
4600
4957
  if (params.query) {
4601
4958
  try {
4602
4959
  validateSearchQuery(params.query);
4960
+ const matchFunc = parseSearchQuery(params.query);
4961
+ resources = resources.filter(
4962
+ (resource) => matchFunc(resource, markMatchingVariant)
4963
+ );
4603
4964
  } catch (err) {
4604
4965
  console.error(err);
4605
4966
  throw new CommercetoolsError(
@@ -5576,196 +5937,6 @@ var ProductDiscountUpdateHandler = class extends AbstractUpdateHandler {
5576
5937
  }
5577
5938
  };
5578
5939
 
5579
- // src/lib/projectionSearchFilter.ts
5580
- var parseFilterExpression = (filter) => {
5581
- const exprFunc = generateMatchFunc2(filter);
5582
- const [source] = filter.split(":", 1);
5583
- if (source.startsWith("variants.")) {
5584
- return filterVariants(source, exprFunc);
5585
- }
5586
- return filterProduct(source, exprFunc);
5587
- };
5588
- 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);
5589
- var parseFilter = (filter) => {
5590
- const lexer = getLexer2(filter);
5591
- const parser = new Parser(lexer).builder().nud("IDENTIFIER", 100, (t) => t.token.match).led(":", 100, ({ left, bp }) => {
5592
- const parsed = parser.parse({ terminals: [bp - 1] });
5593
- const expressions = !Array.isArray(parsed) ? [parsed] : parsed;
5594
- const unique = new Set(expressions.map((expr) => expr.type));
5595
- if (unique.size > 1) {
5596
- throw new Error("Invalid expression");
5597
- }
5598
- if (expressions.some((expr) => expr.type == "Symbol")) {
5599
- return {
5600
- source: left,
5601
- type: "FilterExpression",
5602
- children: expressions.map((e) => {
5603
- if (e.type != "Symbol") {
5604
- throw new Error("Invalid expression");
5605
- }
5606
- return {
5607
- type: "FilterExpression",
5608
- match: (obj) => obj === e.value
5609
- };
5610
- })
5611
- };
5612
- }
5613
- return {
5614
- source: left,
5615
- type: expressions[0].type,
5616
- children: expressions
5617
- };
5618
- }).nud(
5619
- "STRING",
5620
- 20,
5621
- (t) => ({
5622
- type: "Symbol",
5623
- kind: "string",
5624
- // @ts-ignore
5625
- value: t.token.groups[1]
5626
- })
5627
- ).nud(
5628
- "INT",
5629
- 5,
5630
- (t) => ({
5631
- type: "Symbol",
5632
- kind: "int",
5633
- value: parseInt(t.token.match, 10)
5634
- })
5635
- ).nud("STAR", 5, (_) => ({
5636
- type: "Symbol",
5637
- kind: "any",
5638
- value: null
5639
- })).nud(
5640
- "EXISTS",
5641
- 10,
5642
- ({ bp }) => ({
5643
- type: "FilterExpression",
5644
- match: (obj) => obj !== void 0
5645
- })
5646
- ).nud(
5647
- "MISSING",
5648
- 10,
5649
- ({ bp }) => ({
5650
- type: "FilterExpression",
5651
- match: (obj) => obj === void 0
5652
- })
5653
- ).led("COMMA", 200, ({ left, token, bp }) => {
5654
- const expr = parser.parse({ terminals: [bp - 1] });
5655
- if (Array.isArray(expr)) {
5656
- return [left, ...expr];
5657
- } else {
5658
- return [left, expr];
5659
- }
5660
- }).nud("(", 100, (t) => {
5661
- const expr = parser.parse({ terminals: [")"] });
5662
- lexer.expect(")");
5663
- return expr;
5664
- }).bp(")", 0).led("TO", 20, ({ left, bp }) => {
5665
- const expr = parser.parse({ terminals: [bp - 1] });
5666
- return {
5667
- start: left.value,
5668
- stop: expr.value
5669
- };
5670
- }).nud("RANGE", 20, ({ bp }) => {
5671
- let ranges = parser.parse();
5672
- if (!Array.isArray(ranges)) {
5673
- ranges = [ranges];
5674
- }
5675
- return ranges.map((range) => {
5676
- let func;
5677
- if (range.start !== null && range.stop !== null) {
5678
- func = (obj) => obj >= range.start && obj <= range.stop;
5679
- } else if (range.start === null && range.stop !== null) {
5680
- func = (obj) => obj <= range.stop;
5681
- } else if (range.start !== null && range.stop === null) {
5682
- func = (obj) => obj >= range.start;
5683
- } else {
5684
- func = (obj) => true;
5685
- }
5686
- return {
5687
- type: "RangeExpression",
5688
- start: range.start,
5689
- stop: range.stop,
5690
- match: func
5691
- };
5692
- });
5693
- }).build();
5694
- return parser.parse();
5695
- };
5696
- var generateMatchFunc2 = (filter) => {
5697
- const result = parseFilter(filter);
5698
- if (!result) {
5699
- throw new Error(`Syntax error while parsing '${filter}'.`);
5700
- }
5701
- if (result.type == "TermExpression") {
5702
- throw new Error(`Syntax error while parsing '${filter}'.`);
5703
- }
5704
- return (obj) => {
5705
- if (!result.children)
5706
- return false;
5707
- return result.children.some((c) => c.match(obj));
5708
- };
5709
- };
5710
- var generateFacetFunc = (filter) => {
5711
- if (!filter.includes(":")) {
5712
- return {
5713
- source: filter,
5714
- type: "TermExpression"
5715
- };
5716
- }
5717
- return parseFilter(filter);
5718
- };
5719
- var filterProduct = (source, exprFunc) => (p, markMatchingVariants) => {
5720
- const value = nestedLookup(p, source);
5721
- return exprFunc(value);
5722
- };
5723
- var filterVariants = (source, exprFunc) => (p, markMatchingVariants) => {
5724
- const [, ...paths] = source.split(".");
5725
- const path = paths.join(".");
5726
- const variants = getVariants(p);
5727
- for (const variant of variants) {
5728
- const value = resolveVariantValue(variant, path);
5729
- if (exprFunc(value)) {
5730
- if (markMatchingVariants) {
5731
- for (const v of variants) {
5732
- v.isMatchingVariant = false;
5733
- }
5734
- variant.isMatchingVariant = true;
5735
- }
5736
- return true;
5737
- }
5738
- }
5739
- return false;
5740
- };
5741
- var resolveVariantValue = (obj, path) => {
5742
- if (path === void 0) {
5743
- return obj;
5744
- }
5745
- if (path.startsWith("variants.")) {
5746
- path = path.substring(path.indexOf(".") + 1);
5747
- }
5748
- if (path.startsWith("attributes.")) {
5749
- const [, attrName, ...rest] = path.split(".");
5750
- if (!obj.attributes) {
5751
- return void 0;
5752
- }
5753
- for (const attr of obj.attributes) {
5754
- if (attr.name === attrName) {
5755
- return nestedLookup(attr.value, rest.join("."));
5756
- }
5757
- }
5758
- }
5759
- if (path === "price.centAmount") {
5760
- return obj.prices && obj.prices.length > 0 ? obj.prices[0].value.centAmount : void 0;
5761
- }
5762
- return nestedLookup(obj, path);
5763
- };
5764
- var getVariants = (p) => [
5765
- p.masterVariant,
5766
- ...p.variants ?? []
5767
- ];
5768
-
5769
5940
  // src/product-projection-search.ts
5770
5941
  var ProductProjectionSearch = class {
5771
5942
  _storage;