@joist/templating 4.2.4-next.4 → 4.2.4-next.7

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.
Files changed (52) hide show
  1. package/README.md +0 -9
  2. package/package.json +1 -1
  3. package/src/lib/bind.test.ts +72 -0
  4. package/src/lib/bind.ts +7 -4
  5. package/src/lib/elements/async.element.ts +2 -2
  6. package/src/lib/elements/bind.element.test.ts +2 -2
  7. package/src/lib/elements/bind.element.ts +4 -4
  8. package/src/lib/elements/for.element.ts +16 -9
  9. package/src/lib/elements/if.element.test.ts +272 -238
  10. package/src/lib/elements/if.element.ts +5 -5
  11. package/src/lib/elements/scope.ts +1 -1
  12. package/src/lib/elements/value.element.test.ts +28 -0
  13. package/src/lib/elements/value.element.ts +9 -5
  14. package/src/lib/events.ts +5 -4
  15. package/src/lib/{token.test.ts → expression.test.ts} +51 -51
  16. package/src/lib/{token.ts → expression.ts} +20 -11
  17. package/target/lib/bind.js +6 -4
  18. package/target/lib/bind.js.map +1 -1
  19. package/target/lib/bind.test.js +76 -0
  20. package/target/lib/bind.test.js.map +1 -0
  21. package/target/lib/elements/async.element.js +2 -2
  22. package/target/lib/elements/async.element.js.map +1 -1
  23. package/target/lib/elements/bind.element.d.ts +2 -2
  24. package/target/lib/elements/bind.element.js +3 -3
  25. package/target/lib/elements/bind.element.js.map +1 -1
  26. package/target/lib/elements/bind.element.test.js +2 -2
  27. package/target/lib/elements/bind.element.test.js.map +1 -1
  28. package/target/lib/elements/for.element.d.ts +1 -1
  29. package/target/lib/elements/for.element.js +13 -7
  30. package/target/lib/elements/for.element.js.map +1 -1
  31. package/target/lib/elements/if.element.js +5 -5
  32. package/target/lib/elements/if.element.js.map +1 -1
  33. package/target/lib/elements/if.element.test.js +12 -210
  34. package/target/lib/elements/if.element.test.js.map +1 -1
  35. package/target/lib/elements/scope.js +1 -1
  36. package/target/lib/elements/scope.js.map +1 -1
  37. package/target/lib/elements/value.element.js +7 -5
  38. package/target/lib/elements/value.element.js.map +1 -1
  39. package/target/lib/elements/value.element.test.js +24 -0
  40. package/target/lib/elements/value.element.test.js.map +1 -1
  41. package/target/lib/events.d.ts +4 -3
  42. package/target/lib/events.js +3 -3
  43. package/target/lib/events.js.map +1 -1
  44. package/target/lib/{token.d.ts → expression.d.ts} +2 -2
  45. package/target/lib/{token.js → expression.js} +6 -3
  46. package/target/lib/expression.js.map +1 -0
  47. package/target/lib/expression.test.d.ts +1 -0
  48. package/target/lib/{token.test.js → expression.test.js} +52 -52
  49. package/target/lib/expression.test.js.map +1 -0
  50. package/target/lib/token.js.map +0 -1
  51. package/target/lib/token.test.js.map +0 -1
  52. /package/target/lib/{token.test.d.ts → bind.test.d.ts} +0 -0
@@ -1,74 +1,74 @@
1
1
  import { assert } from "chai";
2
2
 
3
- import { JToken } from "./token.js";
3
+ import { JExpression } from "./expression.js";
4
4
 
5
- describe("JToken", () => {
5
+ describe("JExpression", () => {
6
6
  describe("constructor", () => {
7
7
  it("should initialize with a raw token", () => {
8
- const token = new JToken("example.token");
8
+ const token = new JExpression("example.token");
9
9
  assert.equal(token.rawToken, "example.token");
10
10
  });
11
11
 
12
12
  it("should set isNegated to true if the token starts with '!'", () => {
13
- const token = new JToken("!example.token");
13
+ const token = new JExpression("!example.token");
14
14
  assert.isTrue(token.isNegated);
15
15
  });
16
16
 
17
17
  it("should set isNegated to false if the token does not start with '!'", () => {
18
- const token = new JToken("example.token");
18
+ const token = new JExpression("example.token");
19
19
  assert.isFalse(token.isNegated);
20
20
  });
21
21
 
22
22
  it("should correctly parse the bindTo property", () => {
23
- const token = new JToken("example.token");
23
+ const token = new JExpression("example.token");
24
24
  assert.equal(token.bindTo, "example");
25
25
  });
26
26
 
27
27
  it("should correctly parse the path property", () => {
28
- const token = new JToken("example.token.part");
28
+ const token = new JExpression("example.token.part");
29
29
  assert.deepEqual(token.path, ["token", "part"]);
30
30
  });
31
31
 
32
32
  it("should remove '!' from bindTo if present", () => {
33
- const token = new JToken("!example.token");
33
+ const token = new JExpression("!example.token");
34
34
  assert.equal(token.bindTo, "example");
35
35
  });
36
36
 
37
37
  it("should parse equals operator value", () => {
38
- const token = new JToken("example==value");
38
+ const token = new JExpression("example==value");
39
39
  assert.equal(token.equalsValue, "value");
40
40
  });
41
41
 
42
42
  it("should handle equals operator with negation", () => {
43
- const token = new JToken("!example == value");
43
+ const token = new JExpression("!example == value");
44
44
  assert.equal(token.equalsValue, "value");
45
45
  assert.isTrue(token.isNegated);
46
46
  });
47
47
 
48
48
  it("should handle equals operator with nested paths", () => {
49
- const token = new JToken("example.nested == value");
49
+ const token = new JExpression("example.nested == value");
50
50
  assert.equal(token.equalsValue, "value");
51
51
  assert.deepEqual(token.path, ["nested"]);
52
52
  });
53
53
 
54
54
  it("should parse greater than operator value", () => {
55
- const token = new JToken("example > 5");
55
+ const token = new JExpression("example > 5");
56
56
  assert.equal(token.gtValue, "5");
57
57
  });
58
58
 
59
59
  it("should parse less than operator value", () => {
60
- const token = new JToken("example < 10");
60
+ const token = new JExpression("example < 10");
61
61
  assert.equal(token.ltValue, "10");
62
62
  });
63
63
 
64
64
  it("should handle greater than operator with negation", () => {
65
- const token = new JToken("!example > 5");
65
+ const token = new JExpression("!example > 5");
66
66
  assert.equal(token.gtValue, "5");
67
67
  assert.isTrue(token.isNegated);
68
68
  });
69
69
 
70
70
  it("should handle less than operator with nested paths", () => {
71
- const token = new JToken("example.count < 10");
71
+ const token = new JExpression("example.count < 10");
72
72
  assert.equal(token.ltValue, "10");
73
73
  assert.deepEqual(token.path, ["count"]);
74
74
  });
@@ -76,128 +76,128 @@ describe("JToken", () => {
76
76
 
77
77
  describe("readTokenValueFrom", () => {
78
78
  it("should read the value from a nested object", () => {
79
- const token = new JToken("example.token.part");
79
+ const token = new JExpression("example.token.part");
80
80
  const obj = { token: { part: 42 } };
81
- const value = token.readTokenValueFrom<number>(obj);
81
+ const value = token.evaluate<number>(obj);
82
82
  assert.equal(value, 42);
83
83
  });
84
84
 
85
85
  it("should return undefined if the path does not exist", () => {
86
- const token = new JToken("example.nonexistent.path");
86
+ const token = new JExpression("example.nonexistent.path");
87
87
  const obj = { token: { part: 42 } };
88
- const value = token.readTokenValueFrom(obj);
88
+ const value = token.evaluate(obj);
89
89
  assert.isUndefined(value);
90
90
  });
91
91
 
92
92
  it("should handle empty paths gracefully", () => {
93
- const token = new JToken("example");
93
+ const token = new JExpression("example");
94
94
  const obj = { foo: 42 };
95
- const value = token.readTokenValueFrom(obj);
95
+ const value = token.evaluate(obj);
96
96
 
97
97
  assert.deepEqual(value, { foo: 42 });
98
98
  });
99
99
 
100
100
  it("should parse values from strings", () => {
101
- const token = new JToken("example.length");
102
- const value = token.readTokenValueFrom("42");
101
+ const token = new JExpression("example.length");
102
+ const value = token.evaluate("42");
103
103
 
104
104
  assert.equal(value, 2);
105
105
  });
106
106
 
107
107
  it("should return true when equals against primative", () => {
108
- const token = new JToken("example == active");
109
- const value = token.readTokenValueFrom<boolean>("active");
108
+ const token = new JExpression("example == active");
109
+ const value = token.evaluate<boolean>("active");
110
110
  assert.isTrue(value);
111
111
  });
112
112
 
113
113
  it("should return true when equals comparison matches", () => {
114
- const token = new JToken("example.status==active");
114
+ const token = new JExpression("example.status==active");
115
115
  const obj = { status: "active" };
116
- const value = token.readTokenValueFrom<boolean>(obj);
116
+ const value = token.evaluate<boolean>(obj);
117
117
  assert.isTrue(value);
118
118
  });
119
119
 
120
120
  it("should return false when equals comparison does not match", () => {
121
- const token = new JToken("example.status==active");
121
+ const token = new JExpression("example.status==active");
122
122
  const obj = { status: "inactive" };
123
- const value = token.readTokenValueFrom<boolean>(obj);
123
+ const value = token.evaluate<boolean>(obj);
124
124
  assert.isFalse(value);
125
125
  });
126
126
 
127
127
  it("should handle equals comparison with numbers", () => {
128
- const token = new JToken("example.count == 5");
128
+ const token = new JExpression("example.count == 5");
129
129
  const obj = { count: 5 };
130
- const value = token.readTokenValueFrom<boolean>(obj);
130
+ const value = token.evaluate<boolean>(obj);
131
131
  assert.isTrue(value);
132
132
  });
133
133
 
134
134
  it("should handle equals comparison with nested paths", () => {
135
- const token = new JToken("example.user.status == active");
135
+ const token = new JExpression("example.user.status == active");
136
136
  const obj = { user: { status: "active" } };
137
- const value = token.readTokenValueFrom<boolean>(obj);
137
+ const value = token.evaluate<boolean>(obj);
138
138
  assert.isTrue(value);
139
139
  });
140
140
 
141
141
  it("should handle equals comparison with undefined values", () => {
142
- const token = new JToken("example.status == active");
142
+ const token = new JExpression("example.status == active");
143
143
  const obj = { status: undefined };
144
- const value = token.readTokenValueFrom<boolean>(obj);
144
+ const value = token.evaluate<boolean>(obj);
145
145
  assert.isFalse(value);
146
146
  });
147
147
 
148
148
  it("should return true when greater than comparison matches", () => {
149
- const token = new JToken("example.count > 5");
149
+ const token = new JExpression("example.count > 5");
150
150
  const obj = { count: 10 };
151
- const value = token.readTokenValueFrom<boolean>(obj);
151
+ const value = token.evaluate<boolean>(obj);
152
152
  assert.isTrue(value);
153
153
  });
154
154
 
155
155
  it("should return false when greater than comparison does not match", () => {
156
- const token = new JToken("example.count > 5");
156
+ const token = new JExpression("example.count > 5");
157
157
  const obj = { count: 3 };
158
- const value = token.readTokenValueFrom<boolean>(obj);
158
+ const value = token.evaluate<boolean>(obj);
159
159
  assert.isFalse(value);
160
160
  });
161
161
 
162
162
  it("should return true when less than comparison matches", () => {
163
- const token = new JToken("example.count < 10");
163
+ const token = new JExpression("example.count < 10");
164
164
  const obj = { count: 5 };
165
- const value = token.readTokenValueFrom<boolean>(obj);
165
+ const value = token.evaluate<boolean>(obj);
166
166
  assert.isTrue(value);
167
167
  });
168
168
 
169
169
  it("should return false when less than comparison does not match", () => {
170
- const token = new JToken("example.count < 10");
170
+ const token = new JExpression("example.count < 10");
171
171
  const obj = { count: 15 };
172
- const value = token.readTokenValueFrom<boolean>(obj);
172
+ const value = token.evaluate<boolean>(obj);
173
173
  assert.isFalse(value);
174
174
  });
175
175
 
176
176
  it("should handle greater than comparison with string numbers", () => {
177
- const token = new JToken("example.count > 5");
177
+ const token = new JExpression("example.count > 5");
178
178
  const obj = { count: "10" };
179
- const value = token.readTokenValueFrom<boolean>(obj);
179
+ const value = token.evaluate<boolean>(obj);
180
180
  assert.isTrue(value);
181
181
  });
182
182
 
183
183
  it("should handle less than comparison with string numbers", () => {
184
- const token = new JToken("example.count < 10");
184
+ const token = new JExpression("example.count < 10");
185
185
  const obj = { count: "5" };
186
- const value = token.readTokenValueFrom<boolean>(obj);
186
+ const value = token.evaluate<boolean>(obj);
187
187
  assert.isTrue(value);
188
188
  });
189
189
 
190
190
  it("should handle greater than comparison with undefined values", () => {
191
- const token = new JToken("example.count > 5");
191
+ const token = new JExpression("example.count > 5");
192
192
  const obj = { count: undefined };
193
- const value = token.readTokenValueFrom<boolean>(obj);
193
+ const value = token.evaluate<boolean>(obj);
194
194
  assert.isFalse(value);
195
195
  });
196
196
 
197
197
  it("should handle less than comparison with undefined values", () => {
198
- const token = new JToken("example.count < 10");
198
+ const token = new JExpression("example.count < 10");
199
199
  const obj = { count: undefined };
200
- const value = token.readTokenValueFrom<boolean>(obj);
200
+ const value = token.evaluate<boolean>(obj);
201
201
  assert.isFalse(value);
202
202
  });
203
203
  });
@@ -7,7 +7,7 @@ interface TokenParts {
7
7
  }
8
8
 
9
9
  /**
10
- * JToken represents a token that can be used to extract and compare values from objects.
10
+ * JExpression represents a token that can be used to extract and compare values from objects.
11
11
  *
12
12
  * Supported operators:
13
13
  * - `==` : Equality comparison (e.g., "status==active")
@@ -18,28 +18,28 @@ interface TokenParts {
18
18
  * Examples:
19
19
  * ```typescript
20
20
  * // Basic path access
21
- * new JToken("user.name").readTokenValueFrom({ user: { name: "John" } }) // "John"
21
+ * new JExpression("user.name").readTokenValueFrom({ user: { name: "John" } }) // "John"
22
22
  *
23
23
  * // Equality comparison
24
- * new JToken("status == active").readTokenValueFrom({ status: "active" }) // true
24
+ * new JExpression("status == active").readTokenValueFrom({ status: "active" }) // true
25
25
  *
26
26
  * // Inequality comparison
27
- * new JToken("status != active").readTokenValueFrom({ status: "inactive" }) // true
27
+ * new JExpression("status != active").readTokenValueFrom({ status: "inactive" }) // true
28
28
  *
29
29
  * // Greater than comparison
30
- * new JToken("count > 5").readTokenValueFrom({ count: 10 }) // true
30
+ * new JExpression("count > 5").readTokenValueFrom({ count: 10 }) // true
31
31
  *
32
32
  * // Less than comparison
33
- * new JToken("count < 10").readTokenValueFrom({ count: 5 }) // true
33
+ * new JExpression("count < 10").readTokenValueFrom({ count: 5 }) // true
34
34
  *
35
35
  * // With negation
36
- * new JToken("!status == active").readTokenValueFrom({ status: "inactive" }) // true
36
+ * new JExpression("!status == active").readTokenValueFrom({ status: "inactive" }) // true
37
37
  *
38
38
  * // Nested paths
39
- * new JToken("user.score > 100").readTokenValueFrom({ user: { score: 150 } }) // true
39
+ * new JExpression("user.score > 100").readTokenValueFrom({ user: { score: 150 } }) // true
40
40
  * ```
41
41
  */
42
- export class JToken {
42
+ export class JExpression {
43
43
  /** The raw token string as provided to the constructor */
44
44
  rawToken: string;
45
45
  /** Whether the token is negated (starts with '!') */
@@ -58,7 +58,7 @@ export class JToken {
58
58
  ltValue: string | undefined;
59
59
 
60
60
  /**
61
- * Creates a new JToken instance.
61
+ * Creates a new JExpression instance.
62
62
  * @param rawToken - The token string to parse. Can include operators (==, !=, >, <) and negation (!)
63
63
  */
64
64
  constructor(rawToken: string) {
@@ -93,12 +93,13 @@ export class JToken {
93
93
  * @returns The value at the path, or the result of the comparison if an operator is present
94
94
  * @template T - The expected return type
95
95
  */
96
- readTokenValueFrom<T = unknown>(value: unknown): T {
96
+ evaluate<T = unknown>(value: unknown): T {
97
97
  if (typeof value !== "object" && typeof value !== "string") {
98
98
  return value as T;
99
99
  }
100
100
 
101
101
  const pathValue = this.#getValueAtPath(value);
102
+
102
103
  return this.#performComparison(pathValue) as T;
103
104
  }
104
105
 
@@ -131,11 +132,16 @@ export class JToken {
131
132
  * @returns The value at the path, or undefined if the path doesn't exist
132
133
  */
133
134
  #getValueAtPath(value: unknown): unknown {
135
+ if (value === null || value === undefined) {
136
+ return value;
137
+ }
138
+
134
139
  if (!this.path.length) {
135
140
  return value;
136
141
  }
137
142
 
138
143
  let pointer: any = value;
144
+
139
145
  for (const part of this.path) {
140
146
  pointer = pointer?.[part];
141
147
  if (pointer === undefined) {
@@ -155,12 +161,15 @@ export class JToken {
155
161
  if (this.equalsValue !== undefined) {
156
162
  return String(value) === this.equalsValue;
157
163
  }
164
+
158
165
  if (this.notEqualsValue !== undefined) {
159
166
  return String(value) !== this.notEqualsValue;
160
167
  }
168
+
161
169
  if (this.gtValue !== undefined) {
162
170
  return Number(value) > Number(this.gtValue);
163
171
  }
172
+
164
173
  if (this.ltValue !== undefined) {
165
174
  return Number(value) < Number(this.ltValue);
166
175
  }
@@ -5,19 +5,20 @@ export function bind(opts = {}) {
5
5
  return {
6
6
  init(value) {
7
7
  this.addEventListener("joist::value", (e) => {
8
- if (e.token.bindTo === ctx.name) {
8
+ if (e.expression.bindTo === ctx.name) {
9
9
  const instanceMeta = instanceMetadataStore.read(this);
10
10
  e.stopPropagation();
11
11
  e.update({
12
12
  oldValue: null,
13
13
  newValue: ctx.access.get(this),
14
14
  alwaysUpdate: opts.alwaysUpdate,
15
+ firstChange: true,
15
16
  });
17
+ const name = ctx.name;
16
18
  instanceMeta.bindings.add((changes) => {
17
- const key = ctx.name;
18
- const change = changes.get(key);
19
+ const change = changes.get(name);
19
20
  if (change) {
20
- e.update({ ...change, alwaysUpdate: opts.alwaysUpdate });
21
+ e.update({ ...change, alwaysUpdate: opts.alwaysUpdate, firstChange: false });
21
22
  }
22
23
  else if (opts.alwaysUpdate) {
23
24
  const value = ctx.access.get(this);
@@ -25,6 +26,7 @@ export function bind(opts = {}) {
25
26
  oldValue: value,
26
27
  newValue: value,
27
28
  alwaysUpdate: opts.alwaysUpdate,
29
+ firstChange: false,
28
30
  });
29
31
  }
30
32
  });
@@ -1 +1 @@
1
- {"version":3,"file":"bind.js","sourceRoot":"","sources":["../../src/lib/bind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAe,MAAM,mBAAmB,CAAC;AAUhF,MAAM,UAAU,IAAI,CAAkC,OAA8B,EAAE;IACpF,OAAO,SAAS,aAAa,CAC3B,IAA+C,EAC/C,GAA+C;QAE/C,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEjD,OAAO;YACL,IAAI,CAAC,KAAK;gBACR,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE;oBAC1C,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;wBAChC,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAO,IAAI,CAAC,CAAC;wBAE5D,CAAC,CAAC,eAAe,EAAE,CAAC;wBAEpB,CAAC,CAAC,MAAM,CAAC;4BACP,QAAQ,EAAE,IAAI;4BACd,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;4BAC9B,YAAY,EAAE,IAAI,CAAC,YAAY;yBAChC,CAAC,CAAC;wBAEH,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;4BACpC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAkB,CAAC;4BACnC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BAEhC,IAAI,MAAM,EAAE,CAAC;gCACX,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;4BAC3D,CAAC;iCAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gCAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gCAEnC,CAAC,CAAC,MAAM,CAAC;oCACP,QAAQ,EAAE,KAAK;oCACf,QAAQ,EAAE,KAAK;oCACf,YAAY,EAAE,IAAI,CAAC,YAAY;iCAChC,CAAC,CAAC;4BACL,CAAC;wBACH,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,IAAI,eAAe,CAAC,IAAI,EAAE,CAAC;oBACzB,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAU,CAAC;gBACzD,CAAC;gBAED,OAAO,KAAK,CAAC;YACf,CAAC;YACD,GAAG,EAAE,eAAe,CAAC,GAAG;YACxB,GAAG,EAAE,eAAe,CAAC,GAAG;SACzB,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"bind.js","sourceRoot":"","sources":["../../src/lib/bind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAe,MAAM,mBAAmB,CAAC;AAUhF,MAAM,UAAU,IAAI,CAAkC,OAA8B,EAAE;IACpF,OAAO,SAAS,aAAa,CAC3B,IAA+C,EAC/C,GAA+C;QAE/C,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEjD,OAAO;YACL,IAAI,CAAC,KAAK;gBACR,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE;oBAC1C,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;wBACrC,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAO,IAAI,CAAC,CAAC;wBAE5D,CAAC,CAAC,eAAe,EAAE,CAAC;wBAEpB,CAAC,CAAC,MAAM,CAAC;4BACP,QAAQ,EAAE,IAAI;4BACd,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;4BAC9B,YAAY,EAAE,IAAI,CAAC,YAAY;4BAC/B,WAAW,EAAE,IAAI;yBAClB,CAAC,CAAC;wBAEH,MAAM,IAAI,GAAG,GAAG,CAAC,IAAkB,CAAC;wBAEpC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;4BACpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;4BAEjC,IAAI,MAAM,EAAE,CAAC;gCACX,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;4BAC/E,CAAC;iCAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gCAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gCAEnC,CAAC,CAAC,MAAM,CAAC;oCACP,QAAQ,EAAE,KAAK;oCACf,QAAQ,EAAE,KAAK;oCACf,YAAY,EAAE,IAAI,CAAC,YAAY;oCAC/B,WAAW,EAAE,KAAK;iCACnB,CAAC,CAAC;4BACL,CAAC;wBACH,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,IAAI,eAAe,CAAC,IAAI,EAAE,CAAC;oBACzB,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAU,CAAC;gBACzD,CAAC;gBAED,OAAO,KAAK,CAAC;YACf,CAAC;YACD,GAAG,EAAE,eAAe,CAAC,GAAG;YACxB,GAAG,EAAE,eAAe,CAAC,GAAG;SACzB,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ import { assert } from "chai";
3
+ import { bind } from "./bind.js";
4
+ import { JoistValueEvent } from "./events.js";
5
+ import { JExpression } from "./expression.js";
6
+ describe("bind decorator", () => {
7
+ let TestElement = (() => {
8
+ let _classSuper = HTMLElement;
9
+ let _value_decorators;
10
+ let _value_initializers = [];
11
+ let _value_extraInitializers = [];
12
+ let _alwaysUpdateValue_decorators;
13
+ let _alwaysUpdateValue_initializers = [];
14
+ let _alwaysUpdateValue_extraInitializers = [];
15
+ return class TestElement extends _classSuper {
16
+ static {
17
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
18
+ _value_decorators = [bind()];
19
+ _alwaysUpdateValue_decorators = [bind({ alwaysUpdate: true })];
20
+ __esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _value_extraInitializers);
21
+ __esDecorate(this, null, _alwaysUpdateValue_decorators, { kind: "accessor", name: "alwaysUpdateValue", static: false, private: false, access: { has: obj => "alwaysUpdateValue" in obj, get: obj => obj.alwaysUpdateValue, set: (obj, value) => { obj.alwaysUpdateValue = value; } }, metadata: _metadata }, _alwaysUpdateValue_initializers, _alwaysUpdateValue_extraInitializers);
22
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
23
+ }
24
+ #value_accessor_storage = __runInitializers(this, _value_initializers, "initial");
25
+ get value() { return this.#value_accessor_storage; }
26
+ set value(value) { this.#value_accessor_storage = value; }
27
+ #alwaysUpdateValue_accessor_storage = (__runInitializers(this, _value_extraInitializers), __runInitializers(this, _alwaysUpdateValue_initializers, "initial"));
28
+ get alwaysUpdateValue() { return this.#alwaysUpdateValue_accessor_storage; }
29
+ set alwaysUpdateValue(value) { this.#alwaysUpdateValue_accessor_storage = value; }
30
+ constructor() {
31
+ super(...arguments);
32
+ __runInitializers(this, _alwaysUpdateValue_extraInitializers);
33
+ }
34
+ };
35
+ })();
36
+ customElements.define("test-element", TestElement);
37
+ it("should initialize with default value", () => {
38
+ const element = new TestElement();
39
+ assert.equal(element.value, "initial");
40
+ });
41
+ it("should update value and trigger binding", async () => {
42
+ const element = new TestElement();
43
+ let oldValue = null;
44
+ let newValue = null;
45
+ element.dispatchEvent(new JoistValueEvent(new JExpression("value"), (update) => {
46
+ oldValue = update.oldValue;
47
+ newValue = update.newValue;
48
+ }));
49
+ assert.equal(oldValue, null);
50
+ assert.equal(newValue, "initial");
51
+ element.value = "updated";
52
+ await Promise.resolve();
53
+ assert.equal(oldValue, "initial");
54
+ assert.equal(newValue, "updated");
55
+ });
56
+ it("should trigger binding on every change with alwaysUpdate option", async () => {
57
+ const element = new TestElement();
58
+ let bindingCount = 0;
59
+ let oldValue;
60
+ let newValue;
61
+ element.dispatchEvent(new JoistValueEvent(new JExpression("alwaysUpdateValue"), (update) => {
62
+ bindingCount++;
63
+ oldValue = update.oldValue;
64
+ newValue = update.newValue;
65
+ }));
66
+ assert.equal(bindingCount, 1);
67
+ assert.equal(oldValue, null);
68
+ assert.equal(newValue, "initial");
69
+ element.value = "something else";
70
+ await Promise.resolve();
71
+ assert.equal(bindingCount, 2);
72
+ assert.equal(oldValue, "initial");
73
+ assert.equal(newValue, "initial");
74
+ });
75
+ });
76
+ //# sourceMappingURL=bind.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bind.test.js","sourceRoot":"","sources":["../../src/lib/bind.test.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { __esDecorate, __runInitializers } from "tslib";
2
2
  import { attr, element, queryAll, css, html } from "@joist/element";
3
3
  import { bind } from "../bind.js";
4
4
  import { JoistValueEvent } from "../events.js";
5
- import { JToken } from "../token.js";
5
+ import { JExpression } from "../expression.js";
6
6
  let JoistAsyncElement = (() => {
7
7
  let _classDecorators = [element({
8
8
  tagName: "j-async",
@@ -52,7 +52,7 @@ let JoistAsyncElement = (() => {
52
52
  error: templates.find((t) => t.hasAttribute("error")),
53
53
  success: templates.find((t) => t.hasAttribute("success")),
54
54
  };
55
- const token = new JToken(this.bind);
55
+ const token = new JExpression(this.bind);
56
56
  this.dispatchEvent(new JoistValueEvent(token, ({ newValue, oldValue }) => {
57
57
  if (newValue !== oldValue) {
58
58
  if (newValue instanceof Promise) {
@@ -1 +1 @@
1
- {"version":3,"file":"async.element.js","sourceRoot":"","sources":["../../../src/lib/elements/async.element.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"async.element.js","sourceRoot":"","sources":["../../../src/lib/elements/async.element.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { JToken } from "../token.js";
1
+ import { JExpression } from "../expression.js";
2
2
  declare global {
3
3
  interface HTMLElementTagNameMap {
4
4
  "j-bind": JoistBindElement;
5
5
  }
6
6
  }
7
- export declare class JAttrToken extends JToken {
7
+ export declare class JAttrToken extends JExpression {
8
8
  mapTo: string;
9
9
  constructor(binding: string);
10
10
  }
@@ -1,8 +1,8 @@
1
1
  import { __esDecorate, __runInitializers } from "tslib";
2
2
  import { attr, element, css, html } from "@joist/element";
3
- import { JToken } from "../token.js";
3
+ import { JExpression } from "../expression.js";
4
4
  import { JoistValueEvent } from "../events.js";
5
- export class JAttrToken extends JToken {
5
+ export class JAttrToken extends JExpression {
6
6
  mapTo;
7
7
  constructor(binding) {
8
8
  const [mapTo, bindTo] = binding.split(":");
@@ -94,7 +94,7 @@ let JoistBindElement = (() => {
94
94
  if (newValue === oldValue && !alwaysUpdate) {
95
95
  return;
96
96
  }
97
- let valueToWrite = token.readTokenValueFrom(newValue);
97
+ let valueToWrite = token.evaluate(newValue);
98
98
  if (token.isNegated) {
99
99
  valueToWrite = !valueToWrite;
100
100
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bind.element.js","sourceRoot":"","sources":["../../../src/lib/elements/bind.element.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bind.element.js","sourceRoot":"","sources":["../../../src/lib/elements/bind.element.ts"],"names":[],"mappings":"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"}
@@ -5,13 +5,13 @@ it("should pass props to child", () => {
5
5
  const element = fixtureSync(html `
6
6
  <div
7
7
  @joist::value=${(e) => {
8
- if (e.token.bindTo === "href") {
8
+ if (e.expression.bindTo === "href") {
9
9
  e.update({
10
10
  oldValue: null,
11
11
  newValue: "$foo",
12
12
  });
13
13
  }
14
- if (e.token.bindTo === "target") {
14
+ if (e.expression.bindTo === "target") {
15
15
  e.update({
16
16
  oldValue: null,
17
17
  newValue: {
@@ -1 +1 @@
1
- {"version":3,"file":"bind.element.test.js","sourceRoot":"","sources":["../../../src/lib/elements/bind.element.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bind.element.test.js","sourceRoot":"","sources":["../../../src/lib/elements/bind.element.test.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ export interface EachCtx<T> {
11
11
  }
12
12
  export declare class JForScope<T = unknown> extends HTMLElement {
13
13
  accessor each: EachCtx<T>;
14
- accessor key: string;
14
+ accessor key: unknown;
15
15
  }
16
16
  export declare class JositForElement extends HTMLElement {
17
17
  #private;