svelte-common 4.21.30 → 4.22.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svelte-common",
3
- "version": "4.21.30",
3
+ "version": "4.22.1",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -23,7 +23,7 @@
23
23
  "prepare": "vite build",
24
24
  "start": "vite",
25
25
  "test": "npm run test:ava && npm run test:cafe",
26
- "test:cafe": "testcafe $BROWSER:headless tests/cafe/*.js -s build/test --page-request-timeout 6000 --app-init-delay 10000 --app \"vite\"",
26
+ "test:cafe": "testcafe $BROWSER:headless tests/cafe/*.js -s build/test --page-request-timeout 5000 --app-init-delay 9000 --app \"vite\"",
27
27
  "test:ava": "ava --timeout 2m tests/*-ava.mjs tests/*-ava-node.mjs",
28
28
  "cover": "c8 -x 'tests/**/*' --temp-directory build/tmp ava --timeout 2m tests/*-ava.mjs tests/*-ava-node.mjs && c8 report -r lcov -o build/coverage --temp-directory build/tmp",
29
29
  "docs": "documentation readme --section=API ./src/**/*.mjs",
@@ -33,8 +33,8 @@
33
33
  "preview": "vite preview"
34
34
  },
35
35
  "dependencies": {
36
- "svelte-command": "^1.1.35",
37
- "svelte-entitlement": "^1.2.47"
36
+ "svelte-command": "^1.1.37",
37
+ "svelte-entitlement": "^1.2.48"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@semantic-release/commit-analyzer": "^9.0.2",
@@ -44,14 +44,14 @@
44
44
  "ava": "^5.1.1",
45
45
  "c8": "^7.12.0",
46
46
  "documentation": "^14.0.1",
47
- "mf-styling": "^1.7.42",
47
+ "mf-styling": "^1.7.43",
48
48
  "npm-pkgbuild": "^11.1.14",
49
49
  "semantic-release": "^20.1.0",
50
50
  "stylelint": "^14.16.1",
51
51
  "stylelint-config-standard": "^29.0.0",
52
52
  "svelte": "^3.55.1",
53
53
  "testcafe": "^2.3.0",
54
- "vite": "^4.0.4"
54
+ "vite": "^4.1.1"
55
55
  },
56
56
  "optionalDependencies": {
57
57
  "mf-hosting-cloudflare": "^1.0.5",
package/src/attribute.mjs CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  /**
3
2
  * Split property path into tokens
4
3
  * @param {string} string
@@ -102,3 +101,36 @@ export function getAttribute(object, name) {
102
101
 
103
102
  return object;
104
103
  }
104
+
105
+ /**
106
+ * Deliver attribute value.
107
+ * The name may be a property path like 'a.b.c'.
108
+ * @param {Object} object
109
+ * @param {string} name
110
+ * @returns {any} value associated with the given property name
111
+ */
112
+ export function getAttributeAndOperator(object, name) {
113
+ let op = "=";
114
+
115
+ for (const token of tokens(name)) {
116
+ switch (token) {
117
+ case ">":
118
+ case "<":
119
+ op = token;
120
+ break;
121
+ case ".":
122
+ case "[":
123
+ case "]":
124
+ break;
125
+
126
+ default:
127
+ if (object === undefined) {
128
+ break;
129
+ }
130
+
131
+ object = object[token];
132
+ }
133
+ }
134
+
135
+ return [object, op];
136
+ }
package/src/filter.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { getAttribute } from "./attribute.mjs";
1
+ import { getAttributeAndOperator } from "./attribute.mjs";
2
2
 
3
3
  /**
4
4
  * Generate filter function.
@@ -9,23 +9,45 @@ import { getAttribute } from "./attribute.mjs";
9
9
  export function filter(filterBy, getters = {}) {
10
10
  if (filterBy) {
11
11
  const filters = Object.entries(filterBy).map(([key, value]) => {
12
- const getter = getters[key] || getAttribute;
12
+ const getter = () => [getters[key], "="] || getAttributeAndOperator;
13
+
13
14
  return a => {
14
- const av = getter(a, key);
15
+ const [av, op] = getAttributeAndOperator(a, key);
15
16
 
16
- if (value instanceof RegExp) {
17
- return value.test(av);
18
- }
19
- if (value instanceof Date) {
20
- switch (typeof av) {
21
- case "object":
22
- if (av instanceof Date) {
23
- return av.getTime() == value.getTime();
17
+ // console.log("KEY", key, op, value, av);
18
+
19
+ switch (typeof value) {
20
+ case "number":
21
+ switch (op) {
22
+ case "=":
23
+ return av == value;
24
+ case ">":
25
+ return av > value;
26
+ case "<":
27
+ return av < value;
28
+ }
29
+ case "object":
30
+ if (value instanceof RegExp) {
31
+ return value.test(av);
32
+ }
33
+ if (value instanceof Date) {
34
+ switch (typeof av) {
35
+ case "object":
36
+ if (av instanceof Date) {
37
+ switch (op) {
38
+ case "=":
39
+ return av.getTime() == value.getTime();
40
+ case ">":
41
+ return av.getTime() > value.getTime();
42
+ case "<":
43
+ return av.getTime() < value.getTime();
44
+ }
45
+ }
46
+ break;
47
+ case "string":
48
+ return value.toString().match(av);
24
49
  }
25
- break;
26
- case "string":
27
- return value.toString().match(av);
28
- }
50
+ }
29
51
  }
30
52
 
31
53
  switch (typeof av) {
@@ -35,6 +57,14 @@ export function filter(filterBy, getters = {}) {
35
57
  return av.match(value);
36
58
  case "bigint":
37
59
  case "number":
60
+ switch (op) {
61
+ case "=":
62
+ return av == value;
63
+ case ">":
64
+ return av > value;
65
+ case "<":
66
+ return av < value;
67
+ }
38
68
  case "boolean":
39
69
  return av == value;
40
70
  }