@namiml/sdk-core 3.4.3-dev.202606120223 → 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 +56 -9
- package/dist/index.d.ts +5 -1
- package/dist/index.mjs +56 -9
- package/package.json +1 -1
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.
|
|
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 =>
|
|
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 ===
|
|
12715
|
+
return resolvedValue === expectedStr;
|
|
12694
12716
|
}
|
|
12695
12717
|
if (typeof resolvedValue === 'boolean') {
|
|
12696
|
-
const expectedBool =
|
|
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(
|
|
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 =
|
|
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 !==
|
|
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(
|
|
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(
|
|
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.
|
|
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 =>
|
|
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 ===
|
|
12713
|
+
return resolvedValue === expectedStr;
|
|
12692
12714
|
}
|
|
12693
12715
|
if (typeof resolvedValue === 'boolean') {
|
|
12694
|
-
const expectedBool =
|
|
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(
|
|
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 =
|
|
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 !==
|
|
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(
|
|
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(
|
|
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.
|
|
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",
|