@namiml/sdk-core 3.4.3-dev.202606112157 → 3.4.3-dev.202606120301

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
@@ -98,7 +98,7 @@ const {
98
98
  // version — stamped by scripts/version.sh
99
99
  NAMI_SDK_VERSION: exports.NAMI_SDK_VERSION = "3.4.3",
100
100
  // full package version including dev suffix — stamped by scripts/version.sh
101
- NAMI_SDK_PACKAGE_VERSION: exports.NAMI_SDK_PACKAGE_VERSION = "3.4.3-dev.202606112157",
101
+ NAMI_SDK_PACKAGE_VERSION: exports.NAMI_SDK_PACKAGE_VERSION = "3.4.3-dev.202606120301",
102
102
  // environments
103
103
  PRODUCTION: exports.PRODUCTION = "production", DEVELOPMENT: exports.DEVELOPMENT = "development",
104
104
  // error messages
@@ -12582,8 +12582,26 @@ const FilterOperator = {
12582
12582
  NOT_CONTAINS: 'not_contains',
12583
12583
  SET: 'set',
12584
12584
  NOT_SET: 'notSet',
12585
+ GREATER_THAN: 'greater_than',
12586
+ GREATER_THAN_OR_EQUAL_TO: 'greater_than_or_equal_to',
12587
+ LESS_THAN: 'less_than',
12588
+ LESS_THAN_OR_EQUAL_TO: 'less_than_or_equal_to',
12585
12589
  };
12586
12590
 
12591
+ function toComparableNumber(value) {
12592
+ if (typeof value === 'boolean')
12593
+ return null;
12594
+ if (typeof value === 'number')
12595
+ return Number.isFinite(value) ? value : null;
12596
+ if (typeof value === 'string') {
12597
+ const trimmed = value.trim();
12598
+ if (trimmed === '')
12599
+ return null;
12600
+ const n = Number(trimmed);
12601
+ return Number.isFinite(n) ? n : null;
12602
+ }
12603
+ return null;
12604
+ }
12587
12605
  class NamiConditionEvaluator {
12588
12606
  constructor() {
12589
12607
  this.resolvers = new Map();
@@ -12680,7 +12698,10 @@ class NamiConditionEvaluator {
12680
12698
  switch (filter.operator) {
12681
12699
  case FilterOperator.I_CONTAINS:
12682
12700
  if (Array.isArray(resolvedValue)) {
12683
- const result = filter.values.some(expected => resolvedValue.some(item => item.localeCompare(expected, undefined, { sensitivity: 'accent' }) === 0));
12701
+ const result = filter.values.some(expected => {
12702
+ const expectedStr = String(expected);
12703
+ return resolvedValue.some(item => item.localeCompare(expectedStr, undefined, { sensitivity: 'accent' }) === 0);
12704
+ });
12684
12705
  // this.log(`i_contains evaluation result: ${result}`);
12685
12706
  return result;
12686
12707
  }
@@ -12688,12 +12709,13 @@ class NamiConditionEvaluator {
12688
12709
  return false;
12689
12710
  case FilterOperator.EQUALS: {
12690
12711
  const result = filter.values.some(expected => {
12712
+ const expectedStr = String(expected);
12691
12713
  if (typeof resolvedValue === 'string') {
12692
12714
  // this.log(`Comparing string ${resolvedValue} == ${expected}`);
12693
- return resolvedValue === expected;
12715
+ return resolvedValue === expectedStr;
12694
12716
  }
12695
12717
  if (typeof resolvedValue === 'boolean') {
12696
- const expectedBool = expected.toLowerCase() === 'true';
12718
+ const expectedBool = expectedStr.toLowerCase() === 'true';
12697
12719
  // this.log(`Comparing boolean ${resolvedValue} == ${expectedBool}`);
12698
12720
  return resolvedValue === expectedBool;
12699
12721
  }
@@ -12705,13 +12727,14 @@ class NamiConditionEvaluator {
12705
12727
  }
12706
12728
  case FilterOperator.I_EQUALS: {
12707
12729
  const result = filter.values.some(expected => {
12730
+ const expectedStr = String(expected);
12708
12731
  if (typeof resolvedValue === 'string') {
12709
- const match = resolvedValue.localeCompare(expected, undefined, { sensitivity: 'accent' }) === 0;
12732
+ const match = resolvedValue.localeCompare(expectedStr, undefined, { sensitivity: 'accent' }) === 0;
12710
12733
  // this.log(`Comparing string ${resolvedValue} ~= ${expected}: ${match}`);
12711
12734
  return match;
12712
12735
  }
12713
12736
  if (typeof resolvedValue === 'boolean') {
12714
- const expectedBool = expected.toLowerCase() === 'true';
12737
+ const expectedBool = expectedStr.toLowerCase() === 'true';
12715
12738
  // this.log(`Comparing boolean ${resolvedValue} ~= ${expectedBool}`);
12716
12739
  return resolvedValue === expectedBool;
12717
12740
  }
@@ -12723,8 +12746,9 @@ class NamiConditionEvaluator {
12723
12746
  }
12724
12747
  case FilterOperator.NOT_EQUALS: {
12725
12748
  const result = filter.values.every(expected => {
12749
+ const expectedStr = String(expected);
12726
12750
  if (typeof resolvedValue === 'string') {
12727
- return resolvedValue !== expected;
12751
+ return resolvedValue !== expectedStr;
12728
12752
  }
12729
12753
  return true;
12730
12754
  });
@@ -12733,8 +12757,9 @@ class NamiConditionEvaluator {
12733
12757
  }
12734
12758
  case FilterOperator.NOT_I_EQUALS: {
12735
12759
  const result = filter.values.every(expected => {
12760
+ const expectedStr = String(expected);
12736
12761
  if (typeof resolvedValue === 'string') {
12737
- return (resolvedValue.localeCompare(expected, undefined, { sensitivity: 'accent' }) !== 0);
12762
+ return (resolvedValue.localeCompare(expectedStr, undefined, { sensitivity: 'accent' }) !== 0);
12738
12763
  }
12739
12764
  return true;
12740
12765
  });
@@ -12743,14 +12768,36 @@ class NamiConditionEvaluator {
12743
12768
  }
12744
12769
  case FilterOperator.NOT_CONTAINS: {
12745
12770
  const result = filter.values.every(expected => {
12771
+ const expectedStr = String(expected);
12746
12772
  if (typeof resolvedValue === 'string') {
12747
- return !resolvedValue.includes(expected);
12773
+ return !resolvedValue.includes(expectedStr);
12748
12774
  }
12749
12775
  return true;
12750
12776
  });
12751
12777
  // this.log(`not_contains evaluation result: ${result}`);
12752
12778
  return result;
12753
12779
  }
12780
+ case FilterOperator.GREATER_THAN:
12781
+ case FilterOperator.GREATER_THAN_OR_EQUAL_TO:
12782
+ case FilterOperator.LESS_THAN:
12783
+ case FilterOperator.LESS_THAN_OR_EQUAL_TO: {
12784
+ const lhs = toComparableNumber(resolvedValue);
12785
+ if (lhs === null) {
12786
+ this.log(`Resolved value is not numerically comparable for ${filter.operator}`);
12787
+ return false;
12788
+ }
12789
+ return filter.values.some(expected => {
12790
+ const rhs = toComparableNumber(expected);
12791
+ if (rhs === null)
12792
+ return false;
12793
+ switch (filter.operator) {
12794
+ case FilterOperator.GREATER_THAN: return lhs > rhs;
12795
+ case FilterOperator.GREATER_THAN_OR_EQUAL_TO: return lhs >= rhs;
12796
+ case FilterOperator.LESS_THAN: return lhs < rhs;
12797
+ default: return lhs <= rhs;
12798
+ }
12799
+ });
12800
+ }
12754
12801
  default:
12755
12802
  this.log(`Unsupported operator: ${filter.operator}`);
12756
12803
  return false;
package/dist/index.d.ts CHANGED
@@ -93,12 +93,16 @@ declare const FilterOperator: {
93
93
  readonly NOT_CONTAINS: "not_contains";
94
94
  readonly SET: "set";
95
95
  readonly NOT_SET: "notSet";
96
+ readonly GREATER_THAN: "greater_than";
97
+ readonly GREATER_THAN_OR_EQUAL_TO: "greater_than_or_equal_to";
98
+ readonly LESS_THAN: "less_than";
99
+ readonly LESS_THAN_OR_EQUAL_TO: "less_than_or_equal_to";
96
100
  };
97
101
  type FilterOperator = (typeof FilterOperator)[keyof typeof FilterOperator];
98
102
  interface NamiConditionFilter {
99
103
  identifier: string;
100
104
  operator: FilterOperator;
101
- values: string[];
105
+ values: (string | number)[];
102
106
  }
103
107
  interface NamiConditions {
104
108
  filter?: NamiConditionFilter[];
package/dist/index.mjs CHANGED
@@ -96,7 +96,7 @@ const {
96
96
  // version — stamped by scripts/version.sh
97
97
  NAMI_SDK_VERSION = "3.4.3",
98
98
  // full package version including dev suffix — stamped by scripts/version.sh
99
- NAMI_SDK_PACKAGE_VERSION = "3.4.3-dev.202606112157",
99
+ NAMI_SDK_PACKAGE_VERSION = "3.4.3-dev.202606120301",
100
100
  // environments
101
101
  PRODUCTION = "production", DEVELOPMENT = "development",
102
102
  // error messages
@@ -12580,8 +12580,26 @@ const FilterOperator = {
12580
12580
  NOT_CONTAINS: 'not_contains',
12581
12581
  SET: 'set',
12582
12582
  NOT_SET: 'notSet',
12583
+ GREATER_THAN: 'greater_than',
12584
+ GREATER_THAN_OR_EQUAL_TO: 'greater_than_or_equal_to',
12585
+ LESS_THAN: 'less_than',
12586
+ LESS_THAN_OR_EQUAL_TO: 'less_than_or_equal_to',
12583
12587
  };
12584
12588
 
12589
+ function toComparableNumber(value) {
12590
+ if (typeof value === 'boolean')
12591
+ return null;
12592
+ if (typeof value === 'number')
12593
+ return Number.isFinite(value) ? value : null;
12594
+ if (typeof value === 'string') {
12595
+ const trimmed = value.trim();
12596
+ if (trimmed === '')
12597
+ return null;
12598
+ const n = Number(trimmed);
12599
+ return Number.isFinite(n) ? n : null;
12600
+ }
12601
+ return null;
12602
+ }
12585
12603
  class NamiConditionEvaluator {
12586
12604
  constructor() {
12587
12605
  this.resolvers = new Map();
@@ -12678,7 +12696,10 @@ class NamiConditionEvaluator {
12678
12696
  switch (filter.operator) {
12679
12697
  case FilterOperator.I_CONTAINS:
12680
12698
  if (Array.isArray(resolvedValue)) {
12681
- const result = filter.values.some(expected => resolvedValue.some(item => item.localeCompare(expected, undefined, { sensitivity: 'accent' }) === 0));
12699
+ const result = filter.values.some(expected => {
12700
+ const expectedStr = String(expected);
12701
+ return resolvedValue.some(item => item.localeCompare(expectedStr, undefined, { sensitivity: 'accent' }) === 0);
12702
+ });
12682
12703
  // this.log(`i_contains evaluation result: ${result}`);
12683
12704
  return result;
12684
12705
  }
@@ -12686,12 +12707,13 @@ class NamiConditionEvaluator {
12686
12707
  return false;
12687
12708
  case FilterOperator.EQUALS: {
12688
12709
  const result = filter.values.some(expected => {
12710
+ const expectedStr = String(expected);
12689
12711
  if (typeof resolvedValue === 'string') {
12690
12712
  // this.log(`Comparing string ${resolvedValue} == ${expected}`);
12691
- return resolvedValue === expected;
12713
+ return resolvedValue === expectedStr;
12692
12714
  }
12693
12715
  if (typeof resolvedValue === 'boolean') {
12694
- const expectedBool = expected.toLowerCase() === 'true';
12716
+ const expectedBool = expectedStr.toLowerCase() === 'true';
12695
12717
  // this.log(`Comparing boolean ${resolvedValue} == ${expectedBool}`);
12696
12718
  return resolvedValue === expectedBool;
12697
12719
  }
@@ -12703,13 +12725,14 @@ class NamiConditionEvaluator {
12703
12725
  }
12704
12726
  case FilterOperator.I_EQUALS: {
12705
12727
  const result = filter.values.some(expected => {
12728
+ const expectedStr = String(expected);
12706
12729
  if (typeof resolvedValue === 'string') {
12707
- const match = resolvedValue.localeCompare(expected, undefined, { sensitivity: 'accent' }) === 0;
12730
+ const match = resolvedValue.localeCompare(expectedStr, undefined, { sensitivity: 'accent' }) === 0;
12708
12731
  // this.log(`Comparing string ${resolvedValue} ~= ${expected}: ${match}`);
12709
12732
  return match;
12710
12733
  }
12711
12734
  if (typeof resolvedValue === 'boolean') {
12712
- const expectedBool = expected.toLowerCase() === 'true';
12735
+ const expectedBool = expectedStr.toLowerCase() === 'true';
12713
12736
  // this.log(`Comparing boolean ${resolvedValue} ~= ${expectedBool}`);
12714
12737
  return resolvedValue === expectedBool;
12715
12738
  }
@@ -12721,8 +12744,9 @@ class NamiConditionEvaluator {
12721
12744
  }
12722
12745
  case FilterOperator.NOT_EQUALS: {
12723
12746
  const result = filter.values.every(expected => {
12747
+ const expectedStr = String(expected);
12724
12748
  if (typeof resolvedValue === 'string') {
12725
- return resolvedValue !== expected;
12749
+ return resolvedValue !== expectedStr;
12726
12750
  }
12727
12751
  return true;
12728
12752
  });
@@ -12731,8 +12755,9 @@ class NamiConditionEvaluator {
12731
12755
  }
12732
12756
  case FilterOperator.NOT_I_EQUALS: {
12733
12757
  const result = filter.values.every(expected => {
12758
+ const expectedStr = String(expected);
12734
12759
  if (typeof resolvedValue === 'string') {
12735
- return (resolvedValue.localeCompare(expected, undefined, { sensitivity: 'accent' }) !== 0);
12760
+ return (resolvedValue.localeCompare(expectedStr, undefined, { sensitivity: 'accent' }) !== 0);
12736
12761
  }
12737
12762
  return true;
12738
12763
  });
@@ -12741,14 +12766,36 @@ class NamiConditionEvaluator {
12741
12766
  }
12742
12767
  case FilterOperator.NOT_CONTAINS: {
12743
12768
  const result = filter.values.every(expected => {
12769
+ const expectedStr = String(expected);
12744
12770
  if (typeof resolvedValue === 'string') {
12745
- return !resolvedValue.includes(expected);
12771
+ return !resolvedValue.includes(expectedStr);
12746
12772
  }
12747
12773
  return true;
12748
12774
  });
12749
12775
  // this.log(`not_contains evaluation result: ${result}`);
12750
12776
  return result;
12751
12777
  }
12778
+ case FilterOperator.GREATER_THAN:
12779
+ case FilterOperator.GREATER_THAN_OR_EQUAL_TO:
12780
+ case FilterOperator.LESS_THAN:
12781
+ case FilterOperator.LESS_THAN_OR_EQUAL_TO: {
12782
+ const lhs = toComparableNumber(resolvedValue);
12783
+ if (lhs === null) {
12784
+ this.log(`Resolved value is not numerically comparable for ${filter.operator}`);
12785
+ return false;
12786
+ }
12787
+ return filter.values.some(expected => {
12788
+ const rhs = toComparableNumber(expected);
12789
+ if (rhs === null)
12790
+ return false;
12791
+ switch (filter.operator) {
12792
+ case FilterOperator.GREATER_THAN: return lhs > rhs;
12793
+ case FilterOperator.GREATER_THAN_OR_EQUAL_TO: return lhs >= rhs;
12794
+ case FilterOperator.LESS_THAN: return lhs < rhs;
12795
+ default: return lhs <= rhs;
12796
+ }
12797
+ });
12798
+ }
12752
12799
  default:
12753
12800
  this.log(`Unsupported operator: ${filter.operator}`);
12754
12801
  return false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@namiml/sdk-core",
3
- "version": "3.4.3-dev.202606112157",
3
+ "version": "3.4.3-dev.202606120301",
4
4
  "description": "Platform-agnostic core for the Nami SDK — business logic, API, types, and state management",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",