@joist/templating 4.2.4-next.2 → 4.2.4-next.4
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/README.md +43 -155
- package/package.json +1 -1
- package/src/lib/elements/bind.element.ts +1 -5
- package/src/lib/elements/if.element.test.ts +176 -0
- package/src/lib/elements/if.element.ts +1 -5
- package/src/lib/elements/value.element.ts +1 -7
- package/src/lib/token.test.ts +141 -11
- package/src/lib/token.ts +143 -7
- package/target/lib/elements/bind.element.js +1 -4
- package/target/lib/elements/bind.element.js.map +1 -1
- package/target/lib/elements/if.element.js +1 -6
- package/target/lib/elements/if.element.js.map +1 -1
- package/target/lib/elements/if.element.test.js +154 -0
- package/target/lib/elements/if.element.test.js.map +1 -1
- package/target/lib/elements/value.element.js +1 -7
- package/target/lib/elements/value.element.js.map +1 -1
- package/target/lib/token.d.ts +6 -1
- package/target/lib/token.js +62 -5
- package/target/lib/token.js.map +1 -1
- package/target/lib/token.test.js +119 -4
- package/target/lib/token.test.js.map +1 -1
package/src/lib/token.ts
CHANGED
|
@@ -1,29 +1,143 @@
|
|
|
1
|
+
type ComparisonOperator = "==" | "!=" | ">" | "<";
|
|
2
|
+
|
|
3
|
+
interface TokenParts {
|
|
4
|
+
path: string[];
|
|
5
|
+
value?: string;
|
|
6
|
+
operator?: ComparisonOperator;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* JToken represents a token that can be used to extract and compare values from objects.
|
|
11
|
+
*
|
|
12
|
+
* Supported operators:
|
|
13
|
+
* - `==` : Equality comparison (e.g., "status==active")
|
|
14
|
+
* - `!=` : Inequality comparison (e.g., "status!=active")
|
|
15
|
+
* - `>` : Greater than comparison (e.g., "count>5")
|
|
16
|
+
* - `<` : Less than comparison (e.g., "count<10")
|
|
17
|
+
*
|
|
18
|
+
* Examples:
|
|
19
|
+
* ```typescript
|
|
20
|
+
* // Basic path access
|
|
21
|
+
* new JToken("user.name").readTokenValueFrom({ user: { name: "John" } }) // "John"
|
|
22
|
+
*
|
|
23
|
+
* // Equality comparison
|
|
24
|
+
* new JToken("status == active").readTokenValueFrom({ status: "active" }) // true
|
|
25
|
+
*
|
|
26
|
+
* // Inequality comparison
|
|
27
|
+
* new JToken("status != active").readTokenValueFrom({ status: "inactive" }) // true
|
|
28
|
+
*
|
|
29
|
+
* // Greater than comparison
|
|
30
|
+
* new JToken("count > 5").readTokenValueFrom({ count: 10 }) // true
|
|
31
|
+
*
|
|
32
|
+
* // Less than comparison
|
|
33
|
+
* new JToken("count < 10").readTokenValueFrom({ count: 5 }) // true
|
|
34
|
+
*
|
|
35
|
+
* // With negation
|
|
36
|
+
* new JToken("!status == active").readTokenValueFrom({ status: "inactive" }) // true
|
|
37
|
+
*
|
|
38
|
+
* // Nested paths
|
|
39
|
+
* new JToken("user.score > 100").readTokenValueFrom({ user: { score: 150 } }) // true
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
1
42
|
export class JToken {
|
|
43
|
+
/** The raw token string as provided to the constructor */
|
|
2
44
|
rawToken: string;
|
|
45
|
+
/** Whether the token is negated (starts with '!') */
|
|
3
46
|
isNegated = false;
|
|
47
|
+
/** The first part of the path (before the first dot) */
|
|
4
48
|
bindTo: string;
|
|
49
|
+
/** The remaining parts of the path (after the first dot) */
|
|
5
50
|
path: string[] = [];
|
|
51
|
+
/** The value to compare against for equality (==) */
|
|
52
|
+
equalsValue: string | undefined;
|
|
53
|
+
/** The value to compare against for inequality (!=) */
|
|
54
|
+
notEqualsValue: string | undefined;
|
|
55
|
+
/** The value to compare against for greater than (>) */
|
|
56
|
+
gtValue: string | undefined;
|
|
57
|
+
/** The value to compare against for less than (<) */
|
|
58
|
+
ltValue: string | undefined;
|
|
6
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Creates a new JToken instance.
|
|
62
|
+
* @param rawToken - The token string to parse. Can include operators (==, !=, >, <) and negation (!)
|
|
63
|
+
*/
|
|
7
64
|
constructor(rawToken: string) {
|
|
8
65
|
this.rawToken = rawToken;
|
|
9
|
-
|
|
10
66
|
this.isNegated = this.rawToken.startsWith("!");
|
|
11
67
|
|
|
12
|
-
|
|
68
|
+
const { path, value, operator } = this.#parseToken();
|
|
69
|
+
this.path = path;
|
|
13
70
|
this.bindTo = this.path.shift() ?? "";
|
|
14
71
|
this.bindTo = this.bindTo.replaceAll("!", "");
|
|
72
|
+
|
|
73
|
+
// Set the appropriate comparison value based on the operator
|
|
74
|
+
switch (operator) {
|
|
75
|
+
case "==":
|
|
76
|
+
this.equalsValue = value;
|
|
77
|
+
break;
|
|
78
|
+
case "!=":
|
|
79
|
+
this.notEqualsValue = value;
|
|
80
|
+
break;
|
|
81
|
+
case ">":
|
|
82
|
+
this.gtValue = value;
|
|
83
|
+
break;
|
|
84
|
+
case "<":
|
|
85
|
+
this.ltValue = value;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Reads a value from the provided object using the token's path and performs any comparison.
|
|
92
|
+
* @param value - The object to read from
|
|
93
|
+
* @returns The value at the path, or the result of the comparison if an operator is present
|
|
94
|
+
* @template T - The expected return type
|
|
95
|
+
*/
|
|
96
|
+
readTokenValueFrom<T = unknown>(value: unknown): T {
|
|
97
|
+
if (typeof value !== "object" && typeof value !== "string") {
|
|
98
|
+
return value as T;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const pathValue = this.#getValueAtPath(value);
|
|
102
|
+
return this.#performComparison(pathValue) as T;
|
|
15
103
|
}
|
|
16
104
|
|
|
17
|
-
|
|
18
|
-
|
|
105
|
+
/**
|
|
106
|
+
* Parses the raw token into its components.
|
|
107
|
+
* @returns An object containing the path parts and any comparison operator/value
|
|
108
|
+
*/
|
|
109
|
+
#parseToken(): TokenParts {
|
|
110
|
+
const operators: ComparisonOperator[] = ["==", "!=", ">", "<"];
|
|
19
111
|
|
|
112
|
+
for (const operator of operators) {
|
|
113
|
+
if (this.rawToken.includes(operator)) {
|
|
114
|
+
const [tokenPart, value] = this.rawToken.split(operator).map((part) => part.trim());
|
|
115
|
+
return {
|
|
116
|
+
path: tokenPart.split("."),
|
|
117
|
+
value,
|
|
118
|
+
operator,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return {
|
|
124
|
+
path: this.rawToken.split("."),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Gets the value at the token's path in the provided object.
|
|
130
|
+
* @param value - The object to read from
|
|
131
|
+
* @returns The value at the path, or undefined if the path doesn't exist
|
|
132
|
+
*/
|
|
133
|
+
#getValueAtPath(value: unknown): unknown {
|
|
20
134
|
if (!this.path.length) {
|
|
21
|
-
return
|
|
135
|
+
return value;
|
|
22
136
|
}
|
|
23
137
|
|
|
138
|
+
let pointer: any = value;
|
|
24
139
|
for (const part of this.path) {
|
|
25
|
-
pointer = pointer[part];
|
|
26
|
-
|
|
140
|
+
pointer = pointer?.[part];
|
|
27
141
|
if (pointer === undefined) {
|
|
28
142
|
break;
|
|
29
143
|
}
|
|
@@ -31,4 +145,26 @@ export class JToken {
|
|
|
31
145
|
|
|
32
146
|
return pointer;
|
|
33
147
|
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Performs the comparison operation if an operator is present.
|
|
151
|
+
* @param value - The value to compare
|
|
152
|
+
* @returns The result of the comparison, or the original value if no operator is present
|
|
153
|
+
*/
|
|
154
|
+
#performComparison(value: unknown): boolean | unknown {
|
|
155
|
+
if (this.equalsValue !== undefined) {
|
|
156
|
+
return String(value) === this.equalsValue;
|
|
157
|
+
}
|
|
158
|
+
if (this.notEqualsValue !== undefined) {
|
|
159
|
+
return String(value) !== this.notEqualsValue;
|
|
160
|
+
}
|
|
161
|
+
if (this.gtValue !== undefined) {
|
|
162
|
+
return Number(value) > Number(this.gtValue);
|
|
163
|
+
}
|
|
164
|
+
if (this.ltValue !== undefined) {
|
|
165
|
+
return Number(value) < Number(this.ltValue);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return value;
|
|
169
|
+
}
|
|
34
170
|
}
|
|
@@ -94,10 +94,7 @@ let JoistBindElement = (() => {
|
|
|
94
94
|
if (newValue === oldValue && !alwaysUpdate) {
|
|
95
95
|
return;
|
|
96
96
|
}
|
|
97
|
-
let valueToWrite = newValue;
|
|
98
|
-
if (typeof newValue === "object" && newValue !== null) {
|
|
99
|
-
valueToWrite = token.readTokenValueFrom(newValue);
|
|
100
|
-
}
|
|
97
|
+
let valueToWrite = token.readTokenValueFrom(newValue);
|
|
101
98
|
if (token.isNegated) {
|
|
102
99
|
valueToWrite = !valueToWrite;
|
|
103
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bind.element.js","sourceRoot":"","sources":["../../../src/lib/elements/bind.element.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQ/C,MAAM,OAAO,UAAW,SAAQ,MAAM;IACpC,KAAK,CAAS;IAEd,YAAY,OAAe;QACzB,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE3C,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;QAEvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;IAOY,gBAAgB;4BAL5B,OAAO,CAAC;YACP,OAAO,EAAE,QAAQ;YAEjB,SAAS,EAAE,CAAC,GAAG,CAAA,2BAA2B,EAAE,IAAI,CAAA,eAAe,CAAC;SACjE,CAAC;;;;sBACoC,WAAW;;;;;;;;;;gCAAnB,SAAQ,WAAW;;;;iCAC9C,IAAI,EAAE;iCAGN,IAAI,EAAE;kCAGN,IAAI,EAAE;YALP,oKAAS,KAAK,6BAAL,KAAK,qFAAM;YAGpB,oKAAS,KAAK,6BAAL,KAAK,qFAAM;YAGpB,uKAAS,MAAM,6BAAN,MAAM,uFAAM;YARvB,
|
|
1
|
+
{"version":3,"file":"bind.element.js","sourceRoot":"","sources":["../../../src/lib/elements/bind.element.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,12 +47,7 @@ let JoistIfElement = (() => {
|
|
|
47
47
|
const token = new JToken(this.bind);
|
|
48
48
|
this.dispatchEvent(new JoistValueEvent(token, ({ newValue, oldValue }) => {
|
|
49
49
|
if (newValue !== oldValue) {
|
|
50
|
-
|
|
51
|
-
this.apply(token.readTokenValueFrom(newValue), token.isNegated);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
this.apply(newValue, token.isNegated);
|
|
55
|
-
}
|
|
50
|
+
this.apply(token.readTokenValueFrom(newValue), token.isNegated);
|
|
56
51
|
}
|
|
57
52
|
}));
|
|
58
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"if.element.js","sourceRoot":"","sources":["../../../src/lib/elements/if.element.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;IAaxB,cAAc;4BAL1B,OAAO,CAAC;YACP,OAAO,EAAE,MAAM;YAEf,SAAS,EAAE,CAAC,GAAG,CAAA,2BAA2B,EAAE,IAAI,CAAA,eAAe,CAAC;SACjE,CAAC;;;;sBACkC,WAAW;;;;8BAAnB,SAAQ,WAAW;;;;gCAC5C,IAAI,EAAE;YACP,iKAAS,IAAI,6BAAJ,IAAI,mFAAM;YAFrB,
|
|
1
|
+
{"version":3,"file":"if.element.js","sourceRoot":"","sources":["../../../src/lib/elements/if.element.ts"],"names":[],"mappings":"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"}
|
|
@@ -75,4 +75,158 @@ it("should switch between if and else templates", () => {
|
|
|
75
75
|
`);
|
|
76
76
|
assert.equal(element.textContent?.trim(), "If Content");
|
|
77
77
|
});
|
|
78
|
+
it("should handle equality comparison", () => {
|
|
79
|
+
const element = fixtureSync(html `
|
|
80
|
+
<div
|
|
81
|
+
@joist::value=${(e) => {
|
|
82
|
+
e.update({ oldValue: null, newValue: { status: "active" } });
|
|
83
|
+
}}
|
|
84
|
+
>
|
|
85
|
+
<j-if bind="example.status == active">
|
|
86
|
+
<template>Status is Active</template>
|
|
87
|
+
</j-if>
|
|
88
|
+
</div>
|
|
89
|
+
`);
|
|
90
|
+
assert.equal(element.textContent?.trim(), "Status is Active");
|
|
91
|
+
});
|
|
92
|
+
it("should handle greater than comparison", () => {
|
|
93
|
+
const element = fixtureSync(html `
|
|
94
|
+
<div
|
|
95
|
+
@joist::value=${(e) => {
|
|
96
|
+
e.update({ oldValue: null, newValue: { count: 10 } });
|
|
97
|
+
}}
|
|
98
|
+
>
|
|
99
|
+
<j-if bind="example.count > 5">
|
|
100
|
+
<template>Count is Greater Than 5</template>
|
|
101
|
+
</j-if>
|
|
102
|
+
</div>
|
|
103
|
+
`);
|
|
104
|
+
assert.equal(element.textContent?.trim(), "Count is Greater Than 5");
|
|
105
|
+
});
|
|
106
|
+
it("should handle less than comparison", () => {
|
|
107
|
+
const element = fixtureSync(html `
|
|
108
|
+
<div
|
|
109
|
+
@joist::value=${(e) => {
|
|
110
|
+
e.update({ oldValue: null, newValue: { score: 75 } });
|
|
111
|
+
}}
|
|
112
|
+
>
|
|
113
|
+
<j-if bind="example.score < 100">
|
|
114
|
+
<template>Score is Less Than 100</template>
|
|
115
|
+
</j-if>
|
|
116
|
+
</div>
|
|
117
|
+
`);
|
|
118
|
+
assert.equal(element.textContent?.trim(), "Score is Less Than 100");
|
|
119
|
+
});
|
|
120
|
+
it("should handle nested path comparisons", () => {
|
|
121
|
+
const element = fixtureSync(html `
|
|
122
|
+
<div
|
|
123
|
+
@joist::value=${(e) => {
|
|
124
|
+
e.update({ oldValue: null, newValue: { user: { score: 150 } } });
|
|
125
|
+
}}
|
|
126
|
+
>
|
|
127
|
+
<j-if bind="example.user.score > 100">
|
|
128
|
+
<template>User Score is Above 100</template>
|
|
129
|
+
</j-if>
|
|
130
|
+
</div>
|
|
131
|
+
`);
|
|
132
|
+
assert.equal(element.textContent?.trim(), "User Score is Above 100");
|
|
133
|
+
});
|
|
134
|
+
it("should handle negated comparisons", () => {
|
|
135
|
+
const element = fixtureSync(html `
|
|
136
|
+
<div
|
|
137
|
+
@joist::value=${(e) => {
|
|
138
|
+
e.update({ oldValue: null, newValue: { status: "inactive" } });
|
|
139
|
+
}}
|
|
140
|
+
>
|
|
141
|
+
<j-if bind="!example.status == active">
|
|
142
|
+
<template>Status is Not Active</template>
|
|
143
|
+
</j-if>
|
|
144
|
+
</div>
|
|
145
|
+
`);
|
|
146
|
+
assert.equal(element.textContent?.trim(), "Status is Not Active");
|
|
147
|
+
});
|
|
148
|
+
it("should handle string number comparisons", () => {
|
|
149
|
+
const element = fixtureSync(html `
|
|
150
|
+
<div
|
|
151
|
+
@joist::value=${(e) => {
|
|
152
|
+
e.update({ oldValue: null, newValue: { count: "10" } });
|
|
153
|
+
}}
|
|
154
|
+
>
|
|
155
|
+
<j-if bind="example.count > 5">
|
|
156
|
+
<template>String Count is Greater Than 5</template>
|
|
157
|
+
</j-if>
|
|
158
|
+
</div>
|
|
159
|
+
`);
|
|
160
|
+
assert.equal(element.textContent?.trim(), "String Count is Greater Than 5");
|
|
161
|
+
});
|
|
162
|
+
it("should handle undefined values in comparisons", () => {
|
|
163
|
+
const element = fixtureSync(html `
|
|
164
|
+
<div
|
|
165
|
+
@joist::value=${(e) => {
|
|
166
|
+
e.update({ oldValue: null, newValue: { count: undefined } });
|
|
167
|
+
}}
|
|
168
|
+
>
|
|
169
|
+
<j-if bind="example.count > 5">
|
|
170
|
+
<template>Count is Greater Than 5</template>
|
|
171
|
+
</j-if>
|
|
172
|
+
</div>
|
|
173
|
+
`);
|
|
174
|
+
assert.equal(element.textContent?.trim(), "");
|
|
175
|
+
});
|
|
176
|
+
it("should handle not equal comparison", () => {
|
|
177
|
+
const element = fixtureSync(html `
|
|
178
|
+
<div
|
|
179
|
+
@joist::value=${(e) => {
|
|
180
|
+
e.update({ oldValue: null, newValue: { status: "inactive" } });
|
|
181
|
+
}}
|
|
182
|
+
>
|
|
183
|
+
<j-if bind="example.status != active">
|
|
184
|
+
<template>Status is Not Active</template>
|
|
185
|
+
</j-if>
|
|
186
|
+
</div>
|
|
187
|
+
`);
|
|
188
|
+
assert.equal(element.textContent?.trim(), "Status is Not Active");
|
|
189
|
+
});
|
|
190
|
+
it("should handle not equal comparison with matching value", () => {
|
|
191
|
+
const element = fixtureSync(html `
|
|
192
|
+
<div
|
|
193
|
+
@joist::value=${(e) => {
|
|
194
|
+
e.update({ oldValue: null, newValue: { status: "active" } });
|
|
195
|
+
}}
|
|
196
|
+
>
|
|
197
|
+
<j-if bind="example.status != active">
|
|
198
|
+
<template>Status is Not Active</template>
|
|
199
|
+
</j-if>
|
|
200
|
+
</div>
|
|
201
|
+
`);
|
|
202
|
+
assert.equal(element.textContent?.trim(), "");
|
|
203
|
+
});
|
|
204
|
+
it("should handle not equal comparison with string numbers", () => {
|
|
205
|
+
const element = fixtureSync(html `
|
|
206
|
+
<div
|
|
207
|
+
@joist::value=${(e) => {
|
|
208
|
+
e.update({ oldValue: null, newValue: { count: "10" } });
|
|
209
|
+
}}
|
|
210
|
+
>
|
|
211
|
+
<j-if bind="example.count != 5">
|
|
212
|
+
<template>Count is Not 5</template>
|
|
213
|
+
</j-if>
|
|
214
|
+
</div>
|
|
215
|
+
`);
|
|
216
|
+
assert.equal(element.textContent?.trim(), "Count is Not 5");
|
|
217
|
+
});
|
|
218
|
+
it("should handle not equal comparison with undefined", () => {
|
|
219
|
+
const element = fixtureSync(html `
|
|
220
|
+
<div
|
|
221
|
+
@joist::value=${(e) => {
|
|
222
|
+
e.update({ oldValue: null, newValue: { status: undefined } });
|
|
223
|
+
}}
|
|
224
|
+
>
|
|
225
|
+
<j-if bind="example.status != active">
|
|
226
|
+
<template>Status is Not Active</template>
|
|
227
|
+
</j-if>
|
|
228
|
+
</div>
|
|
229
|
+
`);
|
|
230
|
+
assert.equal(element.textContent?.trim(), "Status is Not Active");
|
|
231
|
+
});
|
|
78
232
|
//# sourceMappingURL=if.element.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"if.element.test.js","sourceRoot":"","sources":["../../../src/lib/elements/if.element.test.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAI9B,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC7D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAA;;sBAEZ,CAAC,CAAkB,EAAE,EAAE;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;;;;;;GAMJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,iBAAiB,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;IAChE,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAA;;sBAEZ,CAAC,CAAkB,EAAE,EAAE;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;;;;;;GAMJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;IAChD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAA;;sBAEZ,CAAC,CAAkB,EAAE,EAAE;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;;;;;;GAMJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,iBAAiB,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC7D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAA;;sBAEZ,CAAC,CAAkB,EAAE,EAAE;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;;;;;;;GAOJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;AAC5D,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACrD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAA;;sBAEZ,CAAC,CAAkB,EAAE,EAAE;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;;;;;;;GAOJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"if.element.test.js","sourceRoot":"","sources":["../../../src/lib/elements/if.element.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,13 +31,7 @@ let JoistValueElement = (() => {
|
|
|
31
31
|
connectedCallback() {
|
|
32
32
|
const token = new JToken(this.bind);
|
|
33
33
|
this.dispatchEvent(new JoistValueEvent(token, (value) => {
|
|
34
|
-
|
|
35
|
-
if (typeof value.newValue === "object" && value.newValue !== null) {
|
|
36
|
-
valueToWrite = String(token.readTokenValueFrom(value.newValue));
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
valueToWrite = String(value.newValue);
|
|
40
|
-
}
|
|
34
|
+
const valueToWrite = String(token.readTokenValueFrom(value.newValue));
|
|
41
35
|
if (this.textContent !== valueToWrite) {
|
|
42
36
|
this.textContent = valueToWrite;
|
|
43
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value.element.js","sourceRoot":"","sources":["../../../src/lib/elements/value.element.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;IAaxB,iBAAiB;4BAL7B,OAAO,CAAC;YACP,OAAO,EAAE,OAAO;YAEhB,SAAS,EAAE,CAAC,GAAG,CAAA,2BAA2B,EAAE,IAAI,CAAA,eAAe,CAAC;SACjE,CAAC;;;;sBACqC,WAAW;;;;iCAAnB,SAAQ,WAAW;;;;gCAC/C,IAAI,EAAE;YACP,iKAAS,IAAI,6BAAJ,IAAI,mFAAM;YAFrB,
|
|
1
|
+
{"version":3,"file":"value.element.js","sourceRoot":"","sources":["../../../src/lib/elements/value.element.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;IAaxB,iBAAiB;4BAL7B,OAAO,CAAC;YACP,OAAO,EAAE,OAAO;YAEhB,SAAS,EAAE,CAAC,GAAG,CAAA,2BAA2B,EAAE,IAAI,CAAA,eAAe,CAAC;SACjE,CAAC;;;;sBACqC,WAAW;;;;iCAAnB,SAAQ,WAAW;;;;gCAC/C,IAAI,EAAE;YACP,iKAAS,IAAI,6BAAJ,IAAI,mFAAM;YAFrB,6KAiBC;;;YAjBY,uDAAiB;;QAE5B,qEAAgB,EAAE,EAAC;QAAnB,IAAS,IAAI,0CAAM;QAAnB,IAAS,IAAI,gDAAM;QAEnB,iBAAiB;YACf,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEpC,IAAI,CAAC,aAAa,CAChB,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAEtE,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;oBACtC,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC;gBAClC,CAAC;YACH,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;;;;;;;;SAhBU,iBAAiB"}
|
package/target/lib/token.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
export declare class JToken {
|
|
2
|
+
#private;
|
|
2
3
|
rawToken: string;
|
|
3
4
|
isNegated: boolean;
|
|
4
5
|
bindTo: string;
|
|
5
6
|
path: string[];
|
|
7
|
+
equalsValue: string | undefined;
|
|
8
|
+
notEqualsValue: string | undefined;
|
|
9
|
+
gtValue: string | undefined;
|
|
10
|
+
ltValue: string | undefined;
|
|
6
11
|
constructor(rawToken: string);
|
|
7
|
-
readTokenValueFrom<T = unknown>(
|
|
12
|
+
readTokenValueFrom<T = unknown>(value: unknown): T;
|
|
8
13
|
}
|
package/target/lib/token.js
CHANGED
|
@@ -3,25 +3,82 @@ export class JToken {
|
|
|
3
3
|
isNegated = false;
|
|
4
4
|
bindTo;
|
|
5
5
|
path = [];
|
|
6
|
+
equalsValue;
|
|
7
|
+
notEqualsValue;
|
|
8
|
+
gtValue;
|
|
9
|
+
ltValue;
|
|
6
10
|
constructor(rawToken) {
|
|
7
11
|
this.rawToken = rawToken;
|
|
8
12
|
this.isNegated = this.rawToken.startsWith("!");
|
|
9
|
-
|
|
13
|
+
const { path, value, operator } = this.#parseToken();
|
|
14
|
+
this.path = path;
|
|
10
15
|
this.bindTo = this.path.shift() ?? "";
|
|
11
16
|
this.bindTo = this.bindTo.replaceAll("!", "");
|
|
17
|
+
switch (operator) {
|
|
18
|
+
case "==":
|
|
19
|
+
this.equalsValue = value;
|
|
20
|
+
break;
|
|
21
|
+
case "!=":
|
|
22
|
+
this.notEqualsValue = value;
|
|
23
|
+
break;
|
|
24
|
+
case ">":
|
|
25
|
+
this.gtValue = value;
|
|
26
|
+
break;
|
|
27
|
+
case "<":
|
|
28
|
+
this.ltValue = value;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
readTokenValueFrom(value) {
|
|
33
|
+
if (typeof value !== "object" && typeof value !== "string") {
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
const pathValue = this.#getValueAtPath(value);
|
|
37
|
+
return this.#performComparison(pathValue);
|
|
12
38
|
}
|
|
13
|
-
|
|
14
|
-
|
|
39
|
+
#parseToken() {
|
|
40
|
+
const operators = ["==", "!=", ">", "<"];
|
|
41
|
+
for (const operator of operators) {
|
|
42
|
+
if (this.rawToken.includes(operator)) {
|
|
43
|
+
const [tokenPart, value] = this.rawToken.split(operator).map((part) => part.trim());
|
|
44
|
+
return {
|
|
45
|
+
path: tokenPart.split("."),
|
|
46
|
+
value,
|
|
47
|
+
operator,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
path: this.rawToken.split("."),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
#getValueAtPath(value) {
|
|
15
56
|
if (!this.path.length) {
|
|
16
|
-
return
|
|
57
|
+
return value;
|
|
17
58
|
}
|
|
59
|
+
let pointer = value;
|
|
18
60
|
for (const part of this.path) {
|
|
19
|
-
pointer = pointer[part];
|
|
61
|
+
pointer = pointer?.[part];
|
|
20
62
|
if (pointer === undefined) {
|
|
21
63
|
break;
|
|
22
64
|
}
|
|
23
65
|
}
|
|
24
66
|
return pointer;
|
|
25
67
|
}
|
|
68
|
+
#performComparison(value) {
|
|
69
|
+
if (this.equalsValue !== undefined) {
|
|
70
|
+
return String(value) === this.equalsValue;
|
|
71
|
+
}
|
|
72
|
+
if (this.notEqualsValue !== undefined) {
|
|
73
|
+
return String(value) !== this.notEqualsValue;
|
|
74
|
+
}
|
|
75
|
+
if (this.gtValue !== undefined) {
|
|
76
|
+
return Number(value) > Number(this.gtValue);
|
|
77
|
+
}
|
|
78
|
+
if (this.ltValue !== undefined) {
|
|
79
|
+
return Number(value) < Number(this.ltValue);
|
|
80
|
+
}
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
26
83
|
}
|
|
27
84
|
//# sourceMappingURL=token.js.map
|
package/target/lib/token.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/lib/token.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/lib/token.ts"],"names":[],"mappings":"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"}
|