native-document 1.0.68 → 1.0.69

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.
@@ -0,0 +1,95 @@
1
+ import {createFilter, createMultiSourceFilter, getSecondsOfDay, isSameDay, toDate} from "./utils";
2
+
3
+ export const dateEquals = (observableOrValue) => {
4
+ return createFilter(observableOrValue, (value, target) => {
5
+ if (!value || !target) return false;
6
+ return isSameDay(value, target);
7
+ });
8
+ };
9
+
10
+ export const dateBefore = (observableOrValue) => {
11
+ return createFilter(observableOrValue, (value, target) => {
12
+ if (!value || !target) return false;
13
+ return toDate(value) < toDate(target);
14
+ });
15
+ };
16
+
17
+ export const dateAfter = (observableOrValue) => {
18
+ return createFilter(observableOrValue, (value, target) => {
19
+ if (!value || !target) return false;
20
+ return toDate(value) > toDate(target);
21
+ });
22
+ };
23
+
24
+ export const dateBetween = (startObservableOrValue, endObservableOrValue) => {
25
+ return createMultiSourceFilter(
26
+ [startObservableOrValue, endObservableOrValue],
27
+ (value, [start, end]) => {
28
+ if (!value || !start || !end) return false;
29
+ const date = toDate(value);
30
+ return date >= toDate(start) && date <= toDate(end);
31
+ }
32
+ );
33
+ };
34
+
35
+ export const timeEquals = (observableOrValue) => {
36
+ return createFilter(observableOrValue, (value, target) => {
37
+ if (!value || !target) return false;
38
+ const d1 = toDate(value);
39
+ const d2 = toDate(target);
40
+ return d1.getHours() === d2.getHours() &&
41
+ d1.getMinutes() === d2.getMinutes() &&
42
+ d1.getSeconds() === d2.getSeconds();
43
+ });
44
+ };
45
+
46
+ export const timeAfter = (observableOrValue) => {
47
+ return createFilter(observableOrValue, (value, target) => {
48
+ return getSecondsOfDay(value) > getSecondsOfDay(target);
49
+ });
50
+ };
51
+
52
+ export const timeBefore = (observableOrValue) => {
53
+ return createFilter(observableOrValue, (value, target) => {
54
+ return getSecondsOfDay(value) < getSecondsOfDay(target);
55
+ });
56
+ };
57
+
58
+ export const timeBetween = (startObservableOrValue, endObservableOrValue) => {
59
+ return createMultiSourceFilter([startObservableOrValue, endObservableOrValue],
60
+ (value, [start, end]) => {
61
+ if (!value || !start || !end) return false;
62
+ const date = getSecondsOfDay(value);
63
+ return date >= getSecondsOfDay(start) && date <= getSecondsOfDay(end);
64
+ }
65
+ );
66
+ };
67
+
68
+ export const dateTimeEquals = (observableOrValue) => {
69
+ return createFilter(observableOrValue, (value, target) => {
70
+ if (!value || !target) return false;
71
+ return toDate(value).getTime() === toDate(target).getTime();
72
+ });
73
+ };
74
+
75
+ export const dateTimeAfter = (observableOrValue) => {
76
+ return createFilter(observableOrValue, (value, target) => {
77
+ if (!value || !target) return false;
78
+ return toDate(value) > toDate(target);
79
+ });
80
+ };
81
+
82
+ export const dateTimeBefore = (observableOrValue) => {
83
+ return createFilter(observableOrValue, (value, target) => {
84
+ if (!value || !target) return false;
85
+ return toDate(value) < toDate(target);
86
+ });
87
+ };
88
+
89
+ export const dateTimeBetween = (startObservableOrValue, endObservableOrValue) => {
90
+ return createMultiSourceFilter([startObservableOrValue, endObservableOrValue], (value, [start, end]) => {
91
+ if (!value || !start || !end) return false;
92
+ const date = toDate(value);
93
+ return date >= toDate(start) && date <= toDate(end);
94
+ });
95
+ };
@@ -0,0 +1,4 @@
1
+ export * from './utils';
2
+ export * from './standard';
3
+ export * from './date';
4
+ export * from './strings';
@@ -0,0 +1,137 @@
1
+ import Validator from "../validator";
2
+ import { createFilter, createMultiSourceFilter } from "./utils";
3
+
4
+
5
+ export function equals(observableOrValue){
6
+ return createFilter(observableOrValue, (value, target) => value === target);
7
+ }
8
+
9
+ export function notEquals(observableOrValue){
10
+ return createFilter(observableOrValue, (value, target) => value !== target);
11
+ }
12
+
13
+ export function greaterThan(observableOrValue){
14
+ return createFilter(observableOrValue, (value, target) => value > target);
15
+ }
16
+
17
+ export function greaterThanOrEqual(observableOrValue){
18
+ return createFilter(observableOrValue, (value, target) => value >= target);
19
+ }
20
+
21
+ export function lessThan(observableOrValue){
22
+ return createFilter(observableOrValue, (value, target) => value < target);
23
+ }
24
+
25
+ export function lessThanOrEqual(observableOrValue){
26
+ return createFilter(observableOrValue, (value, target) => value <= target);
27
+ }
28
+
29
+ export function between(minObservableOrValue, maxObservableOrValue){
30
+ return createMultiSourceFilter(
31
+ [minObservableOrValue, maxObservableOrValue],
32
+ (value, [min, max]) => value >= min && value <= max
33
+ );
34
+ }
35
+
36
+ export function In(observableOrArray){
37
+ return createFilter(observableOrArray, (value, arr) => arr.includes(value));
38
+ }
39
+
40
+ export function notIn(observableOrArray){
41
+ return createFilter(observableOrArray, (value, arr) => !arr.includes(value));
42
+ }
43
+
44
+ export function isEmpty(observableOrValue = true){
45
+ return createFilter(observableOrValue, (value, shouldBeEmpty) => {
46
+ const isActuallyEmpty = !value || value === '' ||
47
+ (Array.isArray(value) && value.length === 0);
48
+
49
+ return shouldBeEmpty ? isActuallyEmpty : !isActuallyEmpty;
50
+ });
51
+ }
52
+
53
+ export function isNotEmpty(observableOrValue = true){
54
+ return createFilter(observableOrValue, (value, shouldBeNotEmpty) => {
55
+ const isActuallyNotEmpty = !!value && value !== '' &&
56
+ (!Array.isArray(value) || value.length > 0);
57
+
58
+ return shouldBeNotEmpty ? isActuallyNotEmpty : !isActuallyNotEmpty;
59
+ });
60
+ }
61
+
62
+ export function match(patternObservableOrValue, asRegexObservableOrValue = true, flagsObservableOrValue = ''){
63
+ return createMultiSourceFilter(
64
+ [patternObservableOrValue, asRegexObservableOrValue, flagsObservableOrValue],
65
+ (value, [pattern, asRegex, flags]) => {
66
+ if (!pattern) return true;
67
+
68
+ if (asRegex){
69
+ try {
70
+ const regex = new RegExp(pattern, flags);
71
+ return regex.test(String(value));
72
+ } catch (error){
73
+ console.warn('Invalid regex pattern:', pattern, error);
74
+ return false;
75
+ }
76
+ }
77
+
78
+ if (!flags || flags === ''){
79
+ return String(value).toLowerCase().includes(String(pattern).toLowerCase());
80
+ }
81
+ return String(value).includes(String(pattern));
82
+ }
83
+ );
84
+ }
85
+
86
+ export function and(...filters){
87
+ const dependencies = filters
88
+ .flatMap(f => f.dependencies ? (Array.isArray(f.dependencies) ? f.dependencies : [f.dependencies]) : [])
89
+ .filter(Validator.isObservable);
90
+
91
+ return {
92
+ dependencies: dependencies.length > 0 ? dependencies : null,
93
+ callback: (value) => filters.every(f => f.callback(value))
94
+ };
95
+ }
96
+
97
+ export function or(...filters){
98
+ const dependencies = filters
99
+ .flatMap(f => f.dependencies ? (Array.isArray(f.dependencies) ? f.dependencies : [f.dependencies]) : [])
100
+ .filter(Validator.isObservable);
101
+
102
+ return {
103
+ dependencies: dependencies.length > 0 ? dependencies : null,
104
+ callback: (value) => filters.some(f => f.callback(value))
105
+ };
106
+ }
107
+
108
+ export function not(filter){
109
+ return {
110
+ dependencies: filter.dependencies,
111
+ callback: (value) => !filter.callback(value)
112
+ };
113
+ }
114
+
115
+ export function custom(callbackFn, ...observables){
116
+ const dependencies = observables.filter(Validator.isObservable);
117
+
118
+ return {
119
+ dependencies: dependencies.length > 0 ? dependencies : null,
120
+ callback: (value) => {
121
+ const values = observables.map(o =>
122
+ Validator.isObservable(o) ? o.val() : o
123
+ );
124
+ return callbackFn(value, ...values);
125
+ }
126
+ };
127
+ }
128
+
129
+ export const gt = greaterThan;
130
+ export const gte = greaterThanOrEqual;
131
+ export const lt = lessThan;
132
+ export const lte = lessThanOrEqual;
133
+ export const eq = equals;
134
+ export const neq = notEquals;
135
+ export const all = and;
136
+ export const any = or;
137
+
@@ -0,0 +1,35 @@
1
+ import { createFilter, createMultiSourceFilter } from "./utils";
2
+
3
+
4
+ export function includes(observableOrValue, caseSensitive = false){
5
+ return createFilter(observableOrValue, (value, query) => {
6
+ if (!value) return false;
7
+ if (!query) return true;
8
+ if (!caseSensitive){
9
+ return String(value).toLowerCase().includes(String(query).toLowerCase());
10
+ }
11
+ return String(value).includes(String(query));
12
+ });
13
+ }
14
+
15
+ export const contains = includes;
16
+
17
+ export function startsWith(observableOrValue, caseSensitive = false){
18
+ return createFilter(observableOrValue, (value, query) => {
19
+ if (!query) return true;
20
+ if (!caseSensitive){
21
+ return String(value).toLowerCase().startsWith(String(query).toLowerCase());
22
+ }
23
+ return String(value).startsWith(String(query));
24
+ });
25
+ }
26
+
27
+ export function endsWith(observableOrValue, caseSensitive = false){
28
+ return createFilter(observableOrValue, (value, query) => {
29
+ if (!query) return true;
30
+ if (!caseSensitive){
31
+ return String(value).toLowerCase().endsWith(String(query).toLowerCase());
32
+ }
33
+ return String(value).endsWith(String(query));
34
+ });
35
+ }
@@ -0,0 +1,41 @@
1
+ import Validator from "../validator";
2
+
3
+ export function toDate(value) {
4
+ if (value instanceof Date) return value;
5
+ return new Date(value);
6
+ }
7
+
8
+ export function isSameDay(date1, date2) {
9
+ const d1 = toDate(date1);
10
+ const d2 = toDate(date2);
11
+ return d1.getFullYear() === d2.getFullYear() &&
12
+ d1.getMonth() === d2.getMonth() &&
13
+ d1.getDate() === d2.getDate();
14
+ }
15
+
16
+ export function getSecondsOfDay(date) {
17
+ const d = toDate(date);
18
+ return (d.getHours() * 3600) + (d.getMinutes() * 60) + d.getSeconds();
19
+ }
20
+
21
+ export function createFilter(observableOrValue, callbackFn){
22
+ const isObservable = Validator.isObservable(observableOrValue);
23
+
24
+ return {
25
+ dependencies: isObservable ? observableOrValue : null,
26
+ callback: (value) => callbackFn(value, isObservable ? observableOrValue.val() : observableOrValue)
27
+ };
28
+ }
29
+
30
+ export function createMultiSourceFilter(sources, callbackFn){
31
+ const observables = sources.filter(Validator.isObservable);
32
+
33
+ const getValues = () => sources.map(src =>
34
+ Validator.isObservable(src) ? src.val() : src
35
+ );
36
+
37
+ return {
38
+ dependencies: observables.length > 0 ? observables : null,
39
+ callback: (value) => callbackFn(value, getValues())
40
+ };
41
+ }
@@ -134,7 +134,7 @@ export interface ObservableConfig {
134
134
 
135
135
  export interface ObservableStatic {
136
136
  <T>(value: T, configs?: ObservableConfig | null): ObservableItem<T>;
137
- array<T>(target: T[], configs?: ObservableConfig | null): ObservableArray<T>;
137
+ array<T>(target: T[] | null, configs?: ObservableConfig | null): ObservableArray<T>;
138
138
 
139
139
  init<T extends Record<string, any>>(value: T, configs?: ObservableConfig | null): ObservableProxy<T>;
140
140
  object<T extends Record<string, any>>(value: T, configs?: ObservableConfig | null): ObservableProxy<T>;
package/utils.js CHANGED
@@ -1,8 +1,10 @@
1
1
  import NativeFetch from "./src/utils/fetch/NativeFetch";
2
2
  import { Service } from "./src/utils/service";
3
+ import * as Filters from "./src/utils/filters/index";
3
4
 
4
5
 
5
6
  export {
6
7
  NativeFetch,
7
- Service
8
+ Service,
9
+ Filters,
8
10
  };