@joist/templating 4.7.0 → 4.7.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.
Files changed (77) hide show
  1. package/package.json +1 -1
  2. package/target/lib/bind.d.ts +10 -0
  3. package/target/lib/bind.d.ts.map +1 -0
  4. package/target/lib/bind.js +50 -0
  5. package/target/lib/bind.js.map +1 -0
  6. package/target/lib/bind.test.d.ts +2 -0
  7. package/target/lib/bind.test.d.ts.map +1 -0
  8. package/target/lib/bind.test.js +110 -0
  9. package/target/lib/bind.test.js.map +1 -0
  10. package/target/lib/define.d.ts +17 -0
  11. package/target/lib/define.d.ts.map +1 -0
  12. package/target/lib/define.js +14 -0
  13. package/target/lib/define.js.map +1 -0
  14. package/target/lib/elements/async.element.d.ts +14 -0
  15. package/target/lib/elements/async.element.d.ts.map +1 -0
  16. package/target/lib/elements/async.element.js +168 -0
  17. package/target/lib/elements/async.element.js.map +1 -0
  18. package/target/lib/elements/async.element.test.d.ts +2 -0
  19. package/target/lib/elements/async.element.test.d.ts.map +1 -0
  20. package/target/lib/elements/async.element.test.js +191 -0
  21. package/target/lib/elements/async.element.test.js.map +1 -0
  22. package/target/lib/elements/bind.element.d.ts +14 -0
  23. package/target/lib/elements/bind.element.d.ts.map +1 -0
  24. package/target/lib/elements/bind.element.js +180 -0
  25. package/target/lib/elements/bind.element.js.map +1 -0
  26. package/target/lib/elements/bind.element.test.d.ts +2 -0
  27. package/target/lib/elements/bind.element.test.d.ts.map +1 -0
  28. package/target/lib/elements/bind.element.test.js +153 -0
  29. package/target/lib/elements/bind.element.test.js.map +1 -0
  30. package/target/lib/elements/for.element.d.ts +16 -0
  31. package/target/lib/elements/for.element.d.ts.map +1 -0
  32. package/target/lib/elements/for.element.js +259 -0
  33. package/target/lib/elements/for.element.js.map +1 -0
  34. package/target/lib/elements/for.element.test.d.ts +2 -0
  35. package/target/lib/elements/for.element.test.d.ts.map +1 -0
  36. package/target/lib/elements/for.element.test.js +232 -0
  37. package/target/lib/elements/for.element.test.js.map +1 -0
  38. package/target/lib/elements/if.element.d.ts +10 -0
  39. package/target/lib/elements/if.element.d.ts.map +1 -0
  40. package/target/lib/elements/if.element.js +145 -0
  41. package/target/lib/elements/if.element.js.map +1 -0
  42. package/target/lib/elements/if.element.test.d.ts +2 -0
  43. package/target/lib/elements/if.element.test.d.ts.map +1 -0
  44. package/target/lib/elements/if.element.test.js +309 -0
  45. package/target/lib/elements/if.element.test.js.map +1 -0
  46. package/target/lib/elements/scope.element.d.ts +4 -0
  47. package/target/lib/elements/scope.element.d.ts.map +1 -0
  48. package/target/lib/elements/scope.element.js +71 -0
  49. package/target/lib/elements/scope.element.js.map +1 -0
  50. package/target/lib/elements/scope.element.test.d.ts +2 -0
  51. package/target/lib/elements/scope.element.test.d.ts.map +1 -0
  52. package/target/lib/elements/scope.element.test.js +25 -0
  53. package/target/lib/elements/scope.element.test.js.map +1 -0
  54. package/target/lib/elements/value.element.d.ts +6 -0
  55. package/target/lib/elements/value.element.d.ts.map +1 -0
  56. package/target/lib/elements/value.element.js +96 -0
  57. package/target/lib/elements/value.element.js.map +1 -0
  58. package/target/lib/elements/value.element.test.d.ts +2 -0
  59. package/target/lib/elements/value.element.test.d.ts.map +1 -0
  60. package/target/lib/elements/value.element.test.js +68 -0
  61. package/target/lib/elements/value.element.test.js.map +1 -0
  62. package/target/lib/events.d.ts +17 -0
  63. package/target/lib/events.d.ts.map +1 -0
  64. package/target/lib/events.js +10 -0
  65. package/target/lib/events.js.map +1 -0
  66. package/target/lib/expression.d.ts +65 -0
  67. package/target/lib/expression.d.ts.map +1 -0
  68. package/target/lib/expression.js +153 -0
  69. package/target/lib/expression.js.map +1 -0
  70. package/target/lib/expression.test.d.ts +2 -0
  71. package/target/lib/expression.test.d.ts.map +1 -0
  72. package/target/lib/expression.test.js +171 -0
  73. package/target/lib/expression.test.js.map +1 -0
  74. package/target/lib.d.ts +3 -0
  75. package/target/lib.d.ts.map +1 -0
  76. package/target/lib.js +3 -0
  77. package/target/lib.js.map +1 -0
@@ -0,0 +1,96 @@
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ import { attr, element, css, html } from "@joist/element";
36
+ import { JoistValueEvent } from "../events.js";
37
+ import { JExpression } from "../expression.js";
38
+ let JoistValueElement = (() => {
39
+ let _classDecorators = [element({
40
+ // prettier-ignore
41
+ shadowDom: [css `:host{display: contents;}`, html `<slot></slot>`],
42
+ })];
43
+ let _classDescriptor;
44
+ let _classExtraInitializers = [];
45
+ let _classThis;
46
+ let _classSuper = HTMLElement;
47
+ let _bind_decorators;
48
+ let _bind_initializers = [];
49
+ let _bind_extraInitializers = [];
50
+ let _dependsOn_decorators;
51
+ let _dependsOn_initializers = [];
52
+ let _dependsOn_extraInitializers = [];
53
+ var JoistValueElement = class extends _classSuper {
54
+ static { _classThis = this; }
55
+ static {
56
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
57
+ _bind_decorators = [attr()];
58
+ _dependsOn_decorators = [attr({
59
+ name: "depends-on",
60
+ })];
61
+ __esDecorate(this, null, _bind_decorators, { kind: "accessor", name: "bind", static: false, private: false, access: { has: obj => "bind" in obj, get: obj => obj.bind, set: (obj, value) => { obj.bind = value; } }, metadata: _metadata }, _bind_initializers, _bind_extraInitializers);
62
+ __esDecorate(this, null, _dependsOn_decorators, { kind: "accessor", name: "dependsOn", static: false, private: false, access: { has: obj => "dependsOn" in obj, get: obj => obj.dependsOn, set: (obj, value) => { obj.dependsOn = value; } }, metadata: _metadata }, _dependsOn_initializers, _dependsOn_extraInitializers);
63
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
64
+ JoistValueElement = _classThis = _classDescriptor.value;
65
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
66
+ __runInitializers(_classThis, _classExtraInitializers);
67
+ }
68
+ #bind_accessor_storage = __runInitializers(this, _bind_initializers, "");
69
+ get bind() { return this.#bind_accessor_storage; }
70
+ set bind(value) { this.#bind_accessor_storage = value; }
71
+ #dependsOn_accessor_storage = (__runInitializers(this, _bind_extraInitializers), __runInitializers(this, _dependsOn_initializers, ""));
72
+ get dependsOn() { return this.#dependsOn_accessor_storage; }
73
+ set dependsOn(value) { this.#dependsOn_accessor_storage = value; }
74
+ async connectedCallback() {
75
+ const token = new JExpression(this.bind);
76
+ if (this.dependsOn) {
77
+ await Promise.all(this.dependsOn.split(",").map((tag) => window.customElements.whenDefined(tag)));
78
+ }
79
+ this.dispatchEvent(new JoistValueEvent(token, (value) => {
80
+ const valueToWrite = token.evaluate(value.newValue);
81
+ if (valueToWrite !== null &&
82
+ valueToWrite !== undefined &&
83
+ this.textContent !== valueToWrite) {
84
+ this.textContent = String(valueToWrite);
85
+ }
86
+ }));
87
+ }
88
+ constructor() {
89
+ super(...arguments);
90
+ __runInitializers(this, _dependsOn_extraInitializers);
91
+ }
92
+ };
93
+ return JoistValueElement = _classThis;
94
+ })();
95
+ export { JoistValueElement };
96
+ //# sourceMappingURL=value.element.js.map
@@ -0,0 +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;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;IAMlC,iBAAiB;4BAJ7B,OAAO,CAAC;YACP,kBAAkB;YAClB,SAAS,EAAE,CAAC,GAAG,CAAA,2BAA2B,EAAE,IAAI,CAAA,eAAe,CAAC;SACjE,CAAC;;;;sBACqC,WAAW;;;;;;;iCAAnB,SAAQ,WAAW;;;;gCAC/C,IAAI,EAAE;qCAGN,IAAI,CAAC;oBACJ,IAAI,EAAE,YAAY;iBACnB,CAAC;YAJF,iKAAS,IAAI,6BAAJ,IAAI,mFAAM;YAKnB,gLAAS,SAAS,6BAAT,SAAS,6FAAM;YAP1B,6KAgCC;;;YAhCY,uDAAiB;;QAE5B,qEAAgB,EAAE,EAAC;QAAnB,IAAS,IAAI,0CAAM;QAAnB,IAAS,IAAI,gDAAM;QAKnB,kIAAqB,EAAE,GAAC;QAAxB,IAAS,SAAS,+CAAM;QAAxB,IAAS,SAAS,qDAAM;QAExB,KAAK,CAAC,iBAAiB;YACrB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAC/E,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,aAAa,CAChB,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAEpD,IACE,YAAY,KAAK,IAAI;oBACrB,YAAY,KAAK,SAAS;oBAC1B,IAAI,CAAC,WAAW,KAAK,YAAY,EACjC,CAAC;oBACD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;;;;;;;;SA/BU,iBAAiB"}
@@ -0,0 +1,2 @@
1
+ import "../define.js";
2
+ //# sourceMappingURL=value.element.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value.element.test.d.ts","sourceRoot":"","sources":["../../../src/lib/elements/value.element.test.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC"}
@@ -0,0 +1,68 @@
1
+ import "../define.js";
2
+ import { fixtureSync, html } from "@open-wc/testing";
3
+ import { assert } from "chai";
4
+ it("should render content when the bind value is truthy", () => {
5
+ const element = fixtureSync(html `
6
+ <div
7
+ @joist::value=${(e) => {
8
+ e.update({ oldValue: null, newValue: "Hello World" });
9
+ }}
10
+ >
11
+ <j-val bind="test"></j-val>
12
+ </div>
13
+ `);
14
+ assert.equal(element.textContent?.trim(), "Hello World");
15
+ });
16
+ it("should not write null values to textContent", () => {
17
+ const element = fixtureSync(html `
18
+ <div
19
+ @joist::value=${(e) => {
20
+ e.update({ oldValue: "Hello", newValue: null });
21
+ }}
22
+ >
23
+ <j-val bind="test">Hello World</j-val>
24
+ </div>
25
+ `);
26
+ assert.equal(element.textContent?.trim(), "Hello World");
27
+ });
28
+ it("should not write undefined values to textContent", () => {
29
+ const element = fixtureSync(html `
30
+ <div
31
+ @joist::value=${(e) => {
32
+ e.update({ oldValue: "Hello", newValue: undefined });
33
+ }}
34
+ >
35
+ <j-val bind="test">Hello World</j-val>
36
+ </div>
37
+ `);
38
+ assert.equal(element.textContent?.trim(), "Hello World");
39
+ });
40
+ it("should wait for depends-on before dispatching events", async () => {
41
+ let eventDispatched = false;
42
+ customElements.define("dependency-1", class extends HTMLElement {
43
+ });
44
+ customElements.define("dependency-2", class extends HTMLElement {
45
+ });
46
+ fixtureSync(html `
47
+ <div
48
+ @joist::value=${(e) => {
49
+ if (e.expression.bindTo === "test") {
50
+ eventDispatched = true;
51
+ e.update({ oldValue: null, newValue: "Hello World" });
52
+ }
53
+ }}
54
+ >
55
+ <j-val bind="test" depends-on="dependency-1,dependency-2"></j-val>
56
+ </div>
57
+ `);
58
+ // Initially, no event should be dispatched
59
+ assert.isFalse(eventDispatched);
60
+ // Wait for the custom elements to be defined
61
+ await Promise.all([
62
+ customElements.whenDefined("dependency-1"),
63
+ customElements.whenDefined("dependency-2"),
64
+ ]);
65
+ // Now the event should be dispatched
66
+ assert.isTrue(eventDispatched);
67
+ });
68
+ //# sourceMappingURL=value.element.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value.element.test.js","sourceRoot":"","sources":["../../../src/lib/elements/value.element.test.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAEtB,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,aAAa,EAAE,CAAC,CAAC;IACxD,CAAC;;;;GAIJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3D,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,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;;;;GAIJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAC1D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAA;;sBAEZ,CAAC,CAAkB,EAAE,EAAE;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC;;;;GAIJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;IACpE,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,KAAM,SAAQ,WAAW;KAAG,CAAC,CAAC;IACpE,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,KAAM,SAAQ,WAAW;KAAG,CAAC,CAAC;IAEpE,WAAW,CAAC,IAAI,CAAA;;sBAEI,CAAC,CAAkB,EAAE,EAAE;QACrC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACnC,eAAe,GAAG,IAAI,CAAC;YACvB,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;;;;GAIJ,CAAC,CAAC;IAEH,2CAA2C;IAC3C,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAEhC,6CAA6C;IAC7C,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC;QAC1C,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC;KAC3C,CAAC,CAAC;IAEH,qCAAqC;IACrC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { Change } from "@joist/observable";
2
+ import type { JExpression } from "./expression.js";
3
+ declare global {
4
+ interface ElementEventMap {
5
+ "joist::value": JoistValueEvent;
6
+ }
7
+ }
8
+ export interface BindChange<T> extends Change<T> {
9
+ alwaysUpdate?: boolean | undefined;
10
+ firstChange?: boolean | undefined;
11
+ }
12
+ export declare class JoistValueEvent extends Event {
13
+ readonly expression: JExpression;
14
+ readonly update: (value: BindChange<unknown>) => void;
15
+ constructor(expression: JExpression, update: (value: BindChange<unknown>) => void);
16
+ }
17
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/lib/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,eAAe;QACvB,cAAc,EAAE,eAAe,CAAC;KACjC;CACF;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAC9C,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACnC;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;gBAE1C,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI;CAMlF"}
@@ -0,0 +1,10 @@
1
+ export class JoistValueEvent extends Event {
2
+ expression;
3
+ update;
4
+ constructor(expression, update) {
5
+ super("joist::value", { bubbles: true, composed: true });
6
+ this.expression = expression;
7
+ this.update = update;
8
+ }
9
+ }
10
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/lib/events.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,UAAU,CAAc;IACxB,MAAM,CAAuC;IAEtD,YAAY,UAAuB,EAAE,MAA4C;QAC/E,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * JExpression represents a token that can be used to extract and compare values from objects.
3
+ *
4
+ * Supported operators:
5
+ * - `==` : Equality comparison (e.g., "status==active")
6
+ * - `!=` : Inequality comparison (e.g., "status!=active")
7
+ * - `>` : Greater than comparison (e.g., "count>5")
8
+ * - `<` : Less than comparison (e.g., "count<10")
9
+ *
10
+ * Examples:
11
+ * ```typescript
12
+ * // Basic path access
13
+ * new JExpression("user.name").readTokenValueFrom({ user: { name: "John" } }) // "John"
14
+ *
15
+ * // Equality comparison
16
+ * new JExpression("status == active").readTokenValueFrom({ status: "active" }) // true
17
+ *
18
+ * // Inequality comparison
19
+ * new JExpression("status != active").readTokenValueFrom({ status: "inactive" }) // true
20
+ *
21
+ * // Greater than comparison
22
+ * new JExpression("count > 5").readTokenValueFrom({ count: 10 }) // true
23
+ *
24
+ * // Less than comparison
25
+ * new JExpression("count < 10").readTokenValueFrom({ count: 5 }) // true
26
+ *
27
+ * // With negation
28
+ * new JExpression("!status == active").readTokenValueFrom({ status: "inactive" }) // true
29
+ *
30
+ * // Nested paths
31
+ * new JExpression("user.score > 100").readTokenValueFrom({ user: { score: 150 } }) // true
32
+ * ```
33
+ */
34
+ export declare class JExpression {
35
+ #private;
36
+ /** The raw token string as provided to the constructor */
37
+ rawToken: string;
38
+ /** Whether the token is negated (starts with '!') */
39
+ isNegated: boolean;
40
+ /** The first part of the path (before the first dot) */
41
+ bindTo: string;
42
+ /** The remaining parts of the path (after the first dot) */
43
+ path: string[];
44
+ /** The value to compare against for equality (==) */
45
+ equalsValue: string | undefined;
46
+ /** The value to compare against for inequality (!=) */
47
+ notEqualsValue: string | undefined;
48
+ /** The value to compare against for greater than (>) */
49
+ gtValue: string | undefined;
50
+ /** The value to compare against for less than (<) */
51
+ ltValue: string | undefined;
52
+ /**
53
+ * Creates a new JExpression instance.
54
+ * @param rawToken - The token string to parse. Can include operators (==, !=, >, <) and negation (!)
55
+ */
56
+ constructor(rawToken: string);
57
+ /**
58
+ * Reads a value from the provided object using the token's path and performs any comparison.
59
+ * @param value - The object to read from
60
+ * @returns The value at the path, or the result of the comparison if an operator is present
61
+ * @template T - The expected return type
62
+ */
63
+ evaluate<T = unknown>(value: unknown): T;
64
+ }
65
+ //# sourceMappingURL=expression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../src/lib/expression.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,WAAW;;IACtB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,SAAS,UAAS;IAClB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,IAAI,EAAE,MAAM,EAAE,CAAM;IACpB,qDAAqD;IACrD,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,uDAAuD;IACvD,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,wDAAwD;IACxD,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,qDAAqD;IACrD,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B;;;OAGG;gBACS,QAAQ,EAAE,MAAM;IA0B5B;;;;;OAKG;IACH,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC;CAoFzC"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * JExpression represents a token that can be used to extract and compare values from objects.
3
+ *
4
+ * Supported operators:
5
+ * - `==` : Equality comparison (e.g., "status==active")
6
+ * - `!=` : Inequality comparison (e.g., "status!=active")
7
+ * - `>` : Greater than comparison (e.g., "count>5")
8
+ * - `<` : Less than comparison (e.g., "count<10")
9
+ *
10
+ * Examples:
11
+ * ```typescript
12
+ * // Basic path access
13
+ * new JExpression("user.name").readTokenValueFrom({ user: { name: "John" } }) // "John"
14
+ *
15
+ * // Equality comparison
16
+ * new JExpression("status == active").readTokenValueFrom({ status: "active" }) // true
17
+ *
18
+ * // Inequality comparison
19
+ * new JExpression("status != active").readTokenValueFrom({ status: "inactive" }) // true
20
+ *
21
+ * // Greater than comparison
22
+ * new JExpression("count > 5").readTokenValueFrom({ count: 10 }) // true
23
+ *
24
+ * // Less than comparison
25
+ * new JExpression("count < 10").readTokenValueFrom({ count: 5 }) // true
26
+ *
27
+ * // With negation
28
+ * new JExpression("!status == active").readTokenValueFrom({ status: "inactive" }) // true
29
+ *
30
+ * // Nested paths
31
+ * new JExpression("user.score > 100").readTokenValueFrom({ user: { score: 150 } }) // true
32
+ * ```
33
+ */
34
+ export class JExpression {
35
+ /** The raw token string as provided to the constructor */
36
+ rawToken;
37
+ /** Whether the token is negated (starts with '!') */
38
+ isNegated = false;
39
+ /** The first part of the path (before the first dot) */
40
+ bindTo;
41
+ /** The remaining parts of the path (after the first dot) */
42
+ path = [];
43
+ /** The value to compare against for equality (==) */
44
+ equalsValue;
45
+ /** The value to compare against for inequality (!=) */
46
+ notEqualsValue;
47
+ /** The value to compare against for greater than (>) */
48
+ gtValue;
49
+ /** The value to compare against for less than (<) */
50
+ ltValue;
51
+ /**
52
+ * Creates a new JExpression instance.
53
+ * @param rawToken - The token string to parse. Can include operators (==, !=, >, <) and negation (!)
54
+ */
55
+ constructor(rawToken) {
56
+ this.rawToken = rawToken;
57
+ this.isNegated = this.rawToken.startsWith("!");
58
+ const { path, value, operator } = this.#parseToken();
59
+ this.path = path;
60
+ this.bindTo = this.path.shift() ?? "";
61
+ this.bindTo = this.bindTo.replaceAll("!", "");
62
+ // Set the appropriate comparison value based on the operator
63
+ switch (operator) {
64
+ case "==":
65
+ this.equalsValue = value;
66
+ break;
67
+ case "!=":
68
+ this.notEqualsValue = value;
69
+ break;
70
+ case ">":
71
+ this.gtValue = value;
72
+ break;
73
+ case "<":
74
+ this.ltValue = value;
75
+ break;
76
+ }
77
+ }
78
+ /**
79
+ * Reads a value from the provided object using the token's path and performs any comparison.
80
+ * @param value - The object to read from
81
+ * @returns The value at the path, or the result of the comparison if an operator is present
82
+ * @template T - The expected return type
83
+ */
84
+ evaluate(value) {
85
+ if (typeof value !== "object" && typeof value !== "string") {
86
+ return value;
87
+ }
88
+ const pathValue = this.#getValueAtPath(value);
89
+ return this.#performComparison(pathValue);
90
+ }
91
+ /**
92
+ * Parses the raw token into its components.
93
+ * @returns An object containing the path parts and any comparison operator/value
94
+ */
95
+ #parseToken() {
96
+ const operators = ["==", "!=", ">", "<"];
97
+ for (const operator of operators) {
98
+ if (this.rawToken.includes(operator)) {
99
+ const [tokenPart, value] = this.rawToken.split(operator).map((part) => part.trim());
100
+ return {
101
+ path: tokenPart?.split(".") ?? [],
102
+ value,
103
+ operator,
104
+ };
105
+ }
106
+ }
107
+ return {
108
+ path: this.rawToken.split("."),
109
+ };
110
+ }
111
+ /**
112
+ * Gets the value at the token's path in the provided object.
113
+ * @param value - The object to read from
114
+ * @returns The value at the path, or undefined if the path doesn't exist
115
+ */
116
+ #getValueAtPath(value) {
117
+ if (value === null || value === undefined) {
118
+ return value;
119
+ }
120
+ if (!this.path.length) {
121
+ return value;
122
+ }
123
+ let pointer = value;
124
+ for (const part of this.path) {
125
+ pointer = pointer?.[part];
126
+ if (pointer === undefined) {
127
+ break;
128
+ }
129
+ }
130
+ return pointer;
131
+ }
132
+ /**
133
+ * Performs the comparison operation if an operator is present.
134
+ * @param value - The value to compare
135
+ * @returns The result of the comparison, or the original value if no operator is present
136
+ */
137
+ #performComparison(value) {
138
+ if (this.equalsValue !== undefined) {
139
+ return String(value) === this.equalsValue;
140
+ }
141
+ if (this.notEqualsValue !== undefined) {
142
+ return String(value) !== this.notEqualsValue;
143
+ }
144
+ if (this.gtValue !== undefined) {
145
+ return Number(value) > Number(this.gtValue);
146
+ }
147
+ if (this.ltValue !== undefined) {
148
+ return Number(value) < Number(this.ltValue);
149
+ }
150
+ return value;
151
+ }
152
+ }
153
+ //# sourceMappingURL=expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../src/lib/expression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=expression.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.test.d.ts","sourceRoot":"","sources":["../../src/lib/expression.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,171 @@
1
+ import { assert } from "chai";
2
+ import { JExpression } from "./expression.js";
3
+ describe("JExpression", () => {
4
+ describe("constructor", () => {
5
+ it("should initialize with a raw token", () => {
6
+ const token = new JExpression("example.token");
7
+ assert.equal(token.rawToken, "example.token");
8
+ });
9
+ it("should set isNegated to true if the token starts with '!'", () => {
10
+ const token = new JExpression("!example.token");
11
+ assert.isTrue(token.isNegated);
12
+ });
13
+ it("should set isNegated to false if the token does not start with '!'", () => {
14
+ const token = new JExpression("example.token");
15
+ assert.isFalse(token.isNegated);
16
+ });
17
+ it("should correctly parse the bindTo property", () => {
18
+ const token = new JExpression("example.token");
19
+ assert.equal(token.bindTo, "example");
20
+ });
21
+ it("should correctly parse the path property", () => {
22
+ const token = new JExpression("example.token.part");
23
+ assert.deepEqual(token.path, ["token", "part"]);
24
+ });
25
+ it("should remove '!' from bindTo if present", () => {
26
+ const token = new JExpression("!example.token");
27
+ assert.equal(token.bindTo, "example");
28
+ });
29
+ it("should parse equals operator value", () => {
30
+ const token = new JExpression("example==value");
31
+ assert.equal(token.equalsValue, "value");
32
+ });
33
+ it("should handle equals operator with negation", () => {
34
+ const token = new JExpression("!example == value");
35
+ assert.equal(token.equalsValue, "value");
36
+ assert.isTrue(token.isNegated);
37
+ });
38
+ it("should handle equals operator with nested paths", () => {
39
+ const token = new JExpression("example.nested == value");
40
+ assert.equal(token.equalsValue, "value");
41
+ assert.deepEqual(token.path, ["nested"]);
42
+ });
43
+ it("should parse greater than operator value", () => {
44
+ const token = new JExpression("example > 5");
45
+ assert.equal(token.gtValue, "5");
46
+ });
47
+ it("should parse less than operator value", () => {
48
+ const token = new JExpression("example < 10");
49
+ assert.equal(token.ltValue, "10");
50
+ });
51
+ it("should handle greater than operator with negation", () => {
52
+ const token = new JExpression("!example > 5");
53
+ assert.equal(token.gtValue, "5");
54
+ assert.isTrue(token.isNegated);
55
+ });
56
+ it("should handle less than operator with nested paths", () => {
57
+ const token = new JExpression("example.count < 10");
58
+ assert.equal(token.ltValue, "10");
59
+ assert.deepEqual(token.path, ["count"]);
60
+ });
61
+ });
62
+ describe("readTokenValueFrom", () => {
63
+ it("should read the value from a nested object", () => {
64
+ const token = new JExpression("example.token.part");
65
+ const obj = { token: { part: 42 } };
66
+ const value = token.evaluate(obj);
67
+ assert.equal(value, 42);
68
+ });
69
+ it("should return undefined if the path does not exist", () => {
70
+ const token = new JExpression("example.nonexistent.path");
71
+ const obj = { token: { part: 42 } };
72
+ const value = token.evaluate(obj);
73
+ assert.isUndefined(value);
74
+ });
75
+ it("should handle empty paths gracefully", () => {
76
+ const token = new JExpression("example");
77
+ const obj = { foo: 42 };
78
+ const value = token.evaluate(obj);
79
+ assert.deepEqual(value, { foo: 42 });
80
+ });
81
+ it("should parse values from strings", () => {
82
+ const token = new JExpression("example.length");
83
+ const value = token.evaluate("42");
84
+ assert.equal(value, 2);
85
+ });
86
+ it("should return true when equals against primative", () => {
87
+ const token = new JExpression("example == active");
88
+ const value = token.evaluate("active");
89
+ assert.isTrue(value);
90
+ });
91
+ it("should return true when equals comparison matches", () => {
92
+ const token = new JExpression("example.status==active");
93
+ const obj = { status: "active" };
94
+ const value = token.evaluate(obj);
95
+ assert.isTrue(value);
96
+ });
97
+ it("should return false when equals comparison does not match", () => {
98
+ const token = new JExpression("example.status==active");
99
+ const obj = { status: "inactive" };
100
+ const value = token.evaluate(obj);
101
+ assert.isFalse(value);
102
+ });
103
+ it("should handle equals comparison with numbers", () => {
104
+ const token = new JExpression("example.count == 5");
105
+ const obj = { count: 5 };
106
+ const value = token.evaluate(obj);
107
+ assert.isTrue(value);
108
+ });
109
+ it("should handle equals comparison with nested paths", () => {
110
+ const token = new JExpression("example.user.status == active");
111
+ const obj = { user: { status: "active" } };
112
+ const value = token.evaluate(obj);
113
+ assert.isTrue(value);
114
+ });
115
+ it("should handle equals comparison with undefined values", () => {
116
+ const token = new JExpression("example.status == active");
117
+ const obj = { status: undefined };
118
+ const value = token.evaluate(obj);
119
+ assert.isFalse(value);
120
+ });
121
+ it("should return true when greater than comparison matches", () => {
122
+ const token = new JExpression("example.count > 5");
123
+ const obj = { count: 10 };
124
+ const value = token.evaluate(obj);
125
+ assert.isTrue(value);
126
+ });
127
+ it("should return false when greater than comparison does not match", () => {
128
+ const token = new JExpression("example.count > 5");
129
+ const obj = { count: 3 };
130
+ const value = token.evaluate(obj);
131
+ assert.isFalse(value);
132
+ });
133
+ it("should return true when less than comparison matches", () => {
134
+ const token = new JExpression("example.count < 10");
135
+ const obj = { count: 5 };
136
+ const value = token.evaluate(obj);
137
+ assert.isTrue(value);
138
+ });
139
+ it("should return false when less than comparison does not match", () => {
140
+ const token = new JExpression("example.count < 10");
141
+ const obj = { count: 15 };
142
+ const value = token.evaluate(obj);
143
+ assert.isFalse(value);
144
+ });
145
+ it("should handle greater than comparison with string numbers", () => {
146
+ const token = new JExpression("example.count > 5");
147
+ const obj = { count: "10" };
148
+ const value = token.evaluate(obj);
149
+ assert.isTrue(value);
150
+ });
151
+ it("should handle less than comparison with string numbers", () => {
152
+ const token = new JExpression("example.count < 10");
153
+ const obj = { count: "5" };
154
+ const value = token.evaluate(obj);
155
+ assert.isTrue(value);
156
+ });
157
+ it("should handle greater than comparison with undefined values", () => {
158
+ const token = new JExpression("example.count > 5");
159
+ const obj = { count: undefined };
160
+ const value = token.evaluate(obj);
161
+ assert.isFalse(value);
162
+ });
163
+ it("should handle less than comparison with undefined values", () => {
164
+ const token = new JExpression("example.count < 10");
165
+ const obj = { count: undefined };
166
+ const value = token.evaluate(obj);
167
+ assert.isFalse(value);
168
+ });
169
+ });
170
+ });
171
+ //# sourceMappingURL=expression.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.test.js","sourceRoot":"","sources":["../../src/lib/expression.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { bind } from "./lib/bind.js";
2
+ export { JoistValueEvent } from "./lib/events.js";
3
+ //# sourceMappingURL=lib.d.ts.map