@bodil/dom 0.1.0 → 0.1.2

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.
@@ -6,7 +6,7 @@ import { type AttributeConfig } from "./decorators/attribute";
6
6
  import { EmitterElement } from "./emitter";
7
7
  import { type QuerySlotOptions } from "./slot";
8
8
  export type { ReactiveController, ReactiveControllerHost } from "lit";
9
- export { attribute, type AttributeOptions } from "./decorators/attribute";
9
+ export { attribute, attributeGetter, attributeSetter, type AttributeOptions, type AttributeGetterSetterOptions, } from "./decorators/attribute";
10
10
  export { connect, connectEffect, type ConnectFunction, type ConnectFunctionReturnValue, } from "./decorators/connect";
11
11
  export { reactive } from "./decorators/reactive";
12
12
  export { require } from "./decorators/require";
@@ -53,8 +53,8 @@ export declare abstract class Component extends EmitterElement implements Reacti
53
53
  constructor();
54
54
  protected connectedCallback(): void;
55
55
  protected disconnectedCallback(): void;
56
+ setAttributeQuietly(name: string, value: string | null): void;
56
57
  protected attributeChangedCallback(name: string, old: string | null, valueString: string | null): void;
57
- private syncAttribute;
58
58
  $signal<K extends keyof this & string, V extends this[K]>(prop: K): Signal<V>;
59
59
  addController(controller: ReactiveController): void;
60
60
  removeController(controller: ReactiveController): void;
package/dist/component.js CHANGED
@@ -1,9 +1,9 @@
1
1
  var _a;
2
- import { assert, isIterable, isNullish, present } from "@bodil/core/assert";
2
+ import { isIterable, isNullish } from "@bodil/core/assert";
3
3
  import { DisposableContext, toDisposable } from "@bodil/core/disposable";
4
4
  import { Signal } from "@bodil/signal";
5
5
  import { adoptStyles, getCompatibleStyle, nothing, render, unsafeCSS, } from "lit";
6
- import { attributeConfig, detectAttributeType, fromAttribute, toAttribute, } from "./decorators/attribute";
6
+ import { attributeConfig, fromAttribute } from "./decorators/attribute";
7
7
  import { connectedJobs } from "./decorators/connect";
8
8
  import { reactiveFields, signalForObject } from "./decorators/reactive";
9
9
  import { requiredProperties } from "./decorators/require";
@@ -12,7 +12,7 @@ import { EmitterElement } from "./emitter";
12
12
  import { eventListener } from "./event";
13
13
  import { scheduler } from "./scheduler";
14
14
  import { findSlot, getOrSetQuery, getOrSetSignal, SlotChangeController, } from "./slot";
15
- export { attribute } from "./decorators/attribute";
15
+ export { attribute, attributeGetter, attributeSetter, } from "./decorators/attribute";
16
16
  export { connect, connectEffect, } from "./decorators/connect";
17
17
  export { reactive } from "./decorators/reactive";
18
18
  export { require } from "./decorators/require";
@@ -46,6 +46,7 @@ export class Component extends EmitterElement {
46
46
  #firstUpdate;
47
47
  #initialised;
48
48
  #viewTransitionRequested;
49
+ #ignoreAttributeUpdates;
49
50
  get isUpdatePending() {
50
51
  return this.#isUpdatePending;
51
52
  }
@@ -114,8 +115,10 @@ export class Component extends EmitterElement {
114
115
  this.#viewTransitionRequested = false;
115
116
  this.renderRoot = this.createRenderRoot();
116
117
  this.#abortController = new AbortController();
118
+ this.#ignoreAttributeUpdates = 1;
117
119
  // set up reactive fields, because decorators can't do this themselves
118
- for (const field of this.constructor[Symbol.metadata]?.[reactiveFields] ?? []) {
120
+ const fields = this.constructor[Symbol.metadata]?.[reactiveFields] ?? [];
121
+ for (const field of fields) {
119
122
  const sig = signalForObject(this, field, () => Signal(undefined, { equals: Object.is }));
120
123
  Object.defineProperty(this, field, {
121
124
  get() {
@@ -132,17 +135,13 @@ export class Component extends EmitterElement {
132
135
  for (const init of this.constructor.initialisers) {
133
136
  init.call(this);
134
137
  }
138
+ this.#ignoreAttributeUpdates--;
135
139
  this.#initialised = false;
136
140
  }
137
141
  connectedCallback() {
138
142
  this.#connectedContext.dispose();
139
143
  this.#controllers.forEach((c) => c.hostConnected?.());
140
144
  this.#rootPart?.setConnected(true);
141
- for (const [key, config] of this.constructor.attributeConfig.entries()) {
142
- if (config.reflect) {
143
- this.syncAttribute(key, config);
144
- }
145
- }
146
145
  for (const job of connectedJobs(this)) {
147
146
  const result = job.call(this);
148
147
  const items = isNullish(result)
@@ -176,33 +175,24 @@ export class Component extends EmitterElement {
176
175
  this.#controllers.forEach((c) => c.hostDisconnected?.());
177
176
  this.#connectedContext.dispose();
178
177
  }
178
+ setAttributeQuietly(name, value) {
179
+ this.#ignoreAttributeUpdates++;
180
+ if (value === null) {
181
+ this.removeAttribute(name);
182
+ }
183
+ else {
184
+ this.setAttribute(name, value);
185
+ }
186
+ this.#ignoreAttributeUpdates--;
187
+ }
179
188
  attributeChangedCallback(name, old, valueString) {
180
- if (old === valueString) {
189
+ if (this.#ignoreAttributeUpdates > 0 || old === valueString) {
181
190
  return;
182
191
  }
183
192
  const attrConfig = this.constructor.attributeConfig.get(name);
184
- assert(attrConfig !== undefined);
185
- const value = fromAttribute(valueString, present(attrConfig.type, `@attribute decorator for ${this.constructor.name}.${name} needs a type declaration, eg. @attribute({type: String})`));
186
- this[attrConfig.property] = value;
187
- }
188
- syncAttribute(name, config) {
189
- if (this.isConnected) {
190
- config ??= this.constructor.attributeConfig.get(name);
191
- assert(config !== undefined);
192
- if (config.reflect) {
193
- const realValue = this[config.property];
194
- config.type ??= detectAttributeType(realValue);
195
- const value = toAttribute(realValue, present(config.type));
196
- const oldValue = this.getAttribute(name);
197
- if (value !== oldValue) {
198
- if (value === null) {
199
- this.removeAttribute(name);
200
- }
201
- else {
202
- this.setAttribute(name, value);
203
- }
204
- }
205
- }
193
+ if (attrConfig !== undefined) {
194
+ const value = fromAttribute(valueString, attrConfig.type);
195
+ this[attrConfig.property] = value;
206
196
  }
207
197
  }
208
198
  $signal(prop) {
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,48 @@
1
1
  import type { Component } from "../component";
2
+ import type { ClassAccessorDecoratorFunction, ClassGetterDecoratorFunction, ClassGetterDecoratorResult, ClassGetterDecoratorTarget, ClassSetterDecoratorFunction, ClassSetterDecoratorResult, ClassSetterDecoratorTarget } from "./types";
2
3
  export declare const attributeConfig: unique symbol;
3
4
  export type AttributeType = typeof String | typeof Number | typeof Boolean;
4
- export type AttributeOptions = {
5
- name: string | undefined;
6
- reflect: boolean;
7
- reactive: boolean;
5
+ export type AttributeGetterSetterOptions = {
6
+ type?: AttributeType;
7
+ name?: string;
8
+ };
9
+ export type AttributeOptions = AttributeGetterSetterOptions & {
10
+ reflect?: boolean;
11
+ reactive?: boolean;
8
12
  };
9
13
  export type AttributeConfig = {
10
- type: AttributeType | undefined;
14
+ type: AttributeType;
11
15
  property: string;
12
- } & AttributeOptions;
16
+ name: string;
17
+ reflect: boolean;
18
+ reactive: boolean;
19
+ };
13
20
  export declare function toAttribute(value: unknown, type: AttributeType): string | null;
14
21
  export declare function fromAttribute(value: string | null, type: typeof Number): number | undefined;
15
22
  export declare function fromAttribute(value: string | null, type: typeof Boolean): boolean;
16
23
  export declare function fromAttribute(value: string | null, type: typeof String): string | undefined;
17
24
  export declare function fromAttribute(value: string | null, type: AttributeType): string | number | boolean | undefined;
18
- export declare function detectAttributeType(value: unknown): AttributeType | undefined;
19
- export declare function attribute<C extends Component, T extends number | undefined>(options: Partial<AttributeOptions> & {
25
+ export declare function attributeGetter<C extends Component, T extends number | undefined>(options: AttributeOptions & {
26
+ type: typeof Number;
27
+ }): ClassGetterDecoratorFunction<C, T>;
28
+ export declare function attributeGetter<C extends Component, T extends boolean | undefined>(options: AttributeOptions & {
29
+ type: typeof Boolean;
30
+ }): ClassGetterDecoratorFunction<C, T>;
31
+ export declare function attributeGetter<C extends Component, T extends string | undefined>(options: AttributeOptions): ClassGetterDecoratorFunction<C, T>;
32
+ export declare function attributeGetter<C extends Component, T extends string | undefined>(value: ClassGetterDecoratorTarget<C, T>, context: ClassGetterDecoratorContext<C, T>): ClassGetterDecoratorResult<C, T>;
33
+ export declare function attributeSetter<C extends Component, T extends number | undefined>(options: AttributeOptions & {
34
+ type: typeof Number;
35
+ }): ClassSetterDecoratorFunction<C, T>;
36
+ export declare function attributeSetter<C extends Component, T extends boolean | undefined>(options: AttributeOptions & {
37
+ type: typeof Boolean;
38
+ }): ClassSetterDecoratorFunction<C, T>;
39
+ export declare function attributeSetter<C extends Component, T extends string | undefined>(options: AttributeOptions): ClassSetterDecoratorFunction<C, T>;
40
+ export declare function attributeSetter<C extends Component, T extends string | undefined>(value: ClassSetterDecoratorTarget<C, T>, context: ClassSetterDecoratorContext<C, T>): ClassSetterDecoratorResult<C, T>;
41
+ export declare function attribute<C extends Component, T extends number | undefined>(options: AttributeOptions & {
20
42
  type: typeof Number;
21
- }): (value: ClassAccessorDecoratorTarget<C, T>, context: ClassAccessorDecoratorContext<C, T>) => ClassAccessorDecoratorResult<C, T>;
22
- export declare function attribute<C extends Component, T extends boolean | undefined>(options: Partial<AttributeOptions> & {
43
+ }): ClassAccessorDecoratorFunction<C, T>;
44
+ export declare function attribute<C extends Component, T extends boolean | undefined>(options: AttributeOptions & {
23
45
  type: typeof Boolean;
24
- }): (value: ClassAccessorDecoratorTarget<C, T>, context: ClassAccessorDecoratorContext<C, T>) => ClassAccessorDecoratorResult<C, T>;
25
- export declare function attribute<C extends Component, T extends string | undefined>(options: Partial<AttributeOptions>): (value: ClassAccessorDecoratorTarget<C, T>, context: ClassAccessorDecoratorContext<C, T>) => ClassAccessorDecoratorResult<C, T>;
46
+ }): ClassAccessorDecoratorFunction<C, T>;
47
+ export declare function attribute<C extends Component, T extends string | undefined>(options: AttributeOptions): ClassAccessorDecoratorFunction<C, T>;
26
48
  export declare function attribute<C extends Component, T extends string | undefined>(value: ClassAccessorDecoratorTarget<C, T>, context: ClassAccessorDecoratorContext<C, T>): ClassAccessorDecoratorResult<C, T>;
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/unified-signatures */
2
- import { isNullish, unreachable } from "@bodil/core/assert";
2
+ import { isDeepEqual, isNullish, present, unreachable } from "@bodil/core/assert";
3
+ import { None, Some } from "@bodil/opt";
3
4
  import { Signal } from "@bodil/signal";
4
5
  import { signalForObject } from "./reactive";
5
6
  export const attributeConfig = Symbol("attributeConfig");
@@ -35,23 +36,20 @@ export function fromAttribute(value, type) {
35
36
  unreachable();
36
37
  }
37
38
  }
38
- export function detectAttributeType(value) {
39
- switch (typeof value) {
40
- case "string":
41
- return String;
42
- case "number":
43
- return Number;
44
- case "boolean":
45
- return Boolean;
46
- default:
47
- return undefined;
48
- }
49
- }
50
39
  function toKebabCase(s) {
51
40
  return s.replace(/((?<=[a-z\d])[A-Z]|(?<=[A-Z\d])[A-Z](?=[a-z]))/g, "-$1").toLowerCase();
52
41
  }
42
+ export function attributeGetter(valueOrOptions, context) {
43
+ //@ts-ignore
44
+ return attribute(valueOrOptions, context);
45
+ }
46
+ export function attributeSetter(valueOrOptions, context) {
47
+ //@ts-ignore
48
+ return attribute(valueOrOptions, context);
49
+ }
53
50
  export function attribute(valueOrOptions, context) {
54
51
  if (context !== undefined) {
52
+ //@ts-ignore
55
53
  return attribute({})(valueOrOptions, context);
56
54
  }
57
55
  return (value, context) => {
@@ -62,8 +60,9 @@ export function attribute(valueOrOptions, context) {
62
60
  ...{
63
61
  type: String,
64
62
  property: context.name,
65
- reactive: true,
66
- reflect: true,
63
+ reactive: context.kind === "accessor",
64
+ reflect: context.kind === "accessor",
65
+ name: toKebabCase(context.name),
67
66
  },
68
67
  ...(valueOrOptions ?? {}),
69
68
  };
@@ -71,45 +70,69 @@ export function attribute(valueOrOptions, context) {
71
70
  if (attrs === undefined) {
72
71
  context.metadata[attributeConfig] = attrs = new Map();
73
72
  }
74
- const key = options.name ?? toKebabCase(context.name);
75
- attrs.set(key, options);
73
+ if (context.kind === "getter" || context.kind === "setter") {
74
+ const oldOpts = attrs.get(options.name);
75
+ if (oldOpts !== undefined && !isDeepEqual(oldOpts, options)) {
76
+ throw new TypeError(`Attribute options for ${JSON.stringify(context.name)} must be identical for getters and setters`);
77
+ }
78
+ }
79
+ attrs.set(options.name, options);
80
+ if (context.kind === "accessor") {
81
+ return accessor(options, context, value);
82
+ }
83
+ // ensure getters/setters aren't configured with reactive or reflect
76
84
  if (options.reactive) {
77
- const getSig = (obj) => signalForObject(obj, context.name, () => Signal(value.get.call(obj), {
78
- equals: Object.is,
79
- }));
80
- return {
81
- get() {
82
- return getSig(this).get();
83
- },
84
- set(newValue) {
85
- options.type ??= detectAttributeType(newValue);
86
- getSig(this).set(newValue);
87
- if (options.reflect) {
88
- this.syncAttribute(key);
89
- }
90
- },
91
- init(newValue) {
92
- options.type ??= detectAttributeType(newValue);
93
- return newValue;
94
- },
95
- };
85
+ throw new TypeError(`Getter/setter attributes cannot be declared with reactive: true (on ${JSON.stringify(context.name)})`);
86
+ }
87
+ if (options.reflect) {
88
+ throw new TypeError(`Getter/setter attributes cannot be declared with reflect: true (on ${JSON.stringify(context.name)})`);
96
89
  }
90
+ };
91
+ }
92
+ function syncAttribute(target, options, value, force = false) {
93
+ const key = present(options.name);
94
+ const attributeValue = toAttribute(value, present(options.type));
95
+ if (force || attributeValue !== target.getAttribute(key)) {
96
+ target.setAttributeQuietly(key, attributeValue);
97
+ }
98
+ }
99
+ function accessor(options, context, value) {
100
+ let initValue = None;
101
+ const init = function init(value) {
102
+ initValue = Some(value);
103
+ if (options.reflect) {
104
+ syncAttribute(this, options, value, true);
105
+ }
106
+ return value;
107
+ };
108
+ if (options.reactive) {
109
+ const getSig = (obj) => signalForObject(obj, context.name, () => Signal(initValue.unwrapExact(), {
110
+ equals: Object.is,
111
+ }));
97
112
  return {
98
113
  get() {
99
- return value.get.call(this);
114
+ return getSig(this).get();
100
115
  },
101
116
  set(newValue) {
102
- options.type ??= detectAttributeType(newValue);
103
- value.set.call(this, newValue);
117
+ getSig(this).set(newValue);
104
118
  if (options.reflect) {
105
- this.syncAttribute(key);
119
+ syncAttribute(this, options, newValue);
106
120
  }
107
121
  },
108
- init(newValue) {
109
- options.type ??= detectAttributeType(newValue);
110
- return newValue;
111
- },
122
+ init,
112
123
  };
124
+ }
125
+ return {
126
+ get() {
127
+ return value.get.call(this);
128
+ },
129
+ set(newValue) {
130
+ value.set.call(this, newValue);
131
+ if (options.reflect) {
132
+ syncAttribute(this, options, newValue);
133
+ }
134
+ },
135
+ init,
113
136
  };
114
137
  }
115
138
  //# sourceMappingURL=attribute.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attribute.js","sourceRoot":"","sources":["../../src/decorators/attribute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attribute.js","sourceRoot":"","sources":["../../src/decorators/attribute.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,7 @@ import { customElement } from "lit/decorators.js";
36
36
  import { expect, test } from "vitest";
37
37
  import { attribute, Component } from "../component";
38
38
  import { Signal } from "@bodil/signal";
39
+ import { attributeGetter, attributeSetter } from "./attribute";
39
40
  test("@attribute", async () => {
40
41
  let AttributeTestClass = (() => {
41
42
  let _classDecorators = [customElement("attribute-test-class")];
@@ -145,4 +146,120 @@ test("@attribute", async () => {
145
146
  expect(t.hide).toBe("yes");
146
147
  expect(t.getAttribute("hide")).toBe("yes");
147
148
  });
149
+ test("@attribute getter/setter", async () => {
150
+ let AttributeGetterTestClass = (() => {
151
+ let _classDecorators = [customElement("attribute-getter-test-class")];
152
+ let _classDescriptor;
153
+ let _classExtraInitializers = [];
154
+ let _classThis;
155
+ let _classSuper = Component;
156
+ let _instanceExtraInitializers = [];
157
+ let _get_value_decorators;
158
+ let _set_value_decorators;
159
+ let _get_synced_decorators;
160
+ let _set_synced_decorators;
161
+ var AttributeGetterTestClass = class extends _classSuper {
162
+ static { _classThis = this; }
163
+ static {
164
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
165
+ _get_value_decorators = [attributeGetter];
166
+ _set_value_decorators = [attributeSetter];
167
+ _get_synced_decorators = [attributeGetter({ reflect: false })];
168
+ _set_synced_decorators = [attributeSetter({ reflect: false })];
169
+ __esDecorate(this, null, _get_value_decorators, { kind: "getter", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value }, metadata: _metadata }, null, _instanceExtraInitializers);
170
+ __esDecorate(this, null, _set_value_decorators, { kind: "setter", name: "value", static: false, private: false, access: { has: obj => "value" in obj, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, null, _instanceExtraInitializers);
171
+ __esDecorate(this, null, _get_synced_decorators, { kind: "getter", name: "synced", static: false, private: false, access: { has: obj => "synced" in obj, get: obj => obj.synced }, metadata: _metadata }, null, _instanceExtraInitializers);
172
+ __esDecorate(this, null, _set_synced_decorators, { kind: "setter", name: "synced", static: false, private: false, access: { has: obj => "synced" in obj, set: (obj, value) => { obj.synced = value; } }, metadata: _metadata }, null, _instanceExtraInitializers);
173
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
174
+ AttributeGetterTestClass = _classThis = _classDescriptor.value;
175
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
176
+ __runInitializers(_classThis, _classExtraInitializers);
177
+ }
178
+ #value = (__runInitializers(this, _instanceExtraInitializers), "Mike");
179
+ get value() {
180
+ return this.#value;
181
+ }
182
+ set value(value) {
183
+ this.#value = value;
184
+ }
185
+ #synced = "Mike";
186
+ get synced() {
187
+ return this.#synced;
188
+ }
189
+ set synced(value) {
190
+ this.#synced = value;
191
+ this.setAttributeQuietly("synced", value);
192
+ }
193
+ };
194
+ return AttributeGetterTestClass = _classThis;
195
+ })();
196
+ const t = document.createElement("attribute-getter-test-class");
197
+ document.body.append(t);
198
+ await t.updateComplete;
199
+ expect(t.value).toBe("Mike");
200
+ expect(t.getAttribute("value")).toBeNull();
201
+ t.setAttribute("value", "Joe");
202
+ expect(t.value).toBe("Joe");
203
+ expect(t.getAttribute("value")).toBe("Joe");
204
+ t.value = "Robert";
205
+ expect(t.value).toBe("Robert");
206
+ expect(t.getAttribute("value")).toBe("Joe");
207
+ expect(t.synced).toBe("Mike");
208
+ expect(t.getAttribute("synced")).toBeNull();
209
+ t.setAttribute("synced", "Joe");
210
+ expect(t.synced).toBe("Joe");
211
+ expect(t.getAttribute("synced")).toBe("Joe");
212
+ t.synced = "Robert";
213
+ expect(t.synced).toBe("Robert");
214
+ expect(t.getAttribute("synced")).toBe("Robert");
215
+ });
216
+ test("@attribute init ordering", async () => {
217
+ let AttributeInitTestClass = (() => {
218
+ let _classDecorators = [customElement("attribute-init-test-class")];
219
+ let _classDescriptor;
220
+ let _classExtraInitializers = [];
221
+ let _classThis;
222
+ let _classSuper = Component;
223
+ let _instanceExtraInitializers = [];
224
+ let _movieStar_decorators;
225
+ let _movieStar_initializers = [];
226
+ let _movieStar_extraInitializers = [];
227
+ let _get_wibble_decorators;
228
+ let _set_wibble_decorators;
229
+ var AttributeInitTestClass = class extends _classSuper {
230
+ static { _classThis = this; }
231
+ static {
232
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
233
+ _movieStar_decorators = [attribute];
234
+ _get_wibble_decorators = [attributeGetter];
235
+ _set_wibble_decorators = [attributeSetter];
236
+ __esDecorate(this, null, _movieStar_decorators, { kind: "accessor", name: "movieStar", static: false, private: false, access: { has: obj => "movieStar" in obj, get: obj => obj.movieStar, set: (obj, value) => { obj.movieStar = value; } }, metadata: _metadata }, _movieStar_initializers, _movieStar_extraInitializers);
237
+ __esDecorate(this, null, _get_wibble_decorators, { kind: "getter", name: "wibble", static: false, private: false, access: { has: obj => "wibble" in obj, get: obj => obj.wibble }, metadata: _metadata }, null, _instanceExtraInitializers);
238
+ __esDecorate(this, null, _set_wibble_decorators, { kind: "setter", name: "wibble", static: false, private: false, access: { has: obj => "wibble" in obj, set: (obj, value) => { obj.wibble = value; } }, metadata: _metadata }, null, _instanceExtraInitializers);
239
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
240
+ AttributeInitTestClass = _classThis = _classDescriptor.value;
241
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
242
+ __runInitializers(_classThis, _classExtraInitializers);
243
+ }
244
+ accessor movieStar = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _movieStar_initializers, "Joe"));
245
+ #wibble = (__runInitializers(this, _movieStar_extraInitializers), "Joe");
246
+ get wibble() {
247
+ return this.#wibble;
248
+ }
249
+ set wibble(value) {
250
+ this.#wibble = value;
251
+ }
252
+ };
253
+ return AttributeInitTestClass = _classThis;
254
+ })();
255
+ const t = document.createElement("attribute-init-test-class");
256
+ t.setAttribute("movie-star", "Mike");
257
+ t.setAttribute("wibble", "Robert");
258
+ document.body.append(t);
259
+ await t.updateComplete;
260
+ expect(t.movieStar).toBe("Mike");
261
+ expect(t.getAttribute("movie-star")).toBe("Mike");
262
+ expect(t.wibble).toBe("Robert");
263
+ expect(t.getAttribute("wibble")).toBe("Robert");
264
+ });
148
265
  //# sourceMappingURL=attribute.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attribute.test.js","sourceRoot":"","sources":["../../src/decorators/attribute.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attribute.test.js","sourceRoot":"","sources":["../../src/decorators/attribute.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { Signal } from "@bodil/signal";
2
2
  import type { Component } from "../component";
3
+ import type { ClassGetterDecoratorResult, ClassGetterDecoratorTarget } from "./types";
3
4
  export declare const reactiveFields: unique symbol;
4
5
  export declare function signalForObject(obj: object, key: string | symbol, createSignal: () => Signal<unknown>): Signal<unknown>;
5
6
  export declare function reactive<C extends object, T>(value: ClassAccessorDecoratorTarget<C, T>, context: ClassAccessorDecoratorContext<C, T>): ClassAccessorDecoratorResult<C, T>;
6
- export declare function reactive<C extends object, T>(value: () => T, context: ClassGetterDecoratorContext<C, T>): () => T;
7
+ export declare function reactive<C extends object, T>(value: ClassGetterDecoratorTarget<C, T>, context: ClassGetterDecoratorContext<C, T>): ClassGetterDecoratorResult<C, T>;
7
8
  export declare function reactive<C extends Component, T>(value: undefined, context: ClassFieldDecoratorContext<C, T>): undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"reactive.js","sourceRoot":"","sources":["../../src/decorators/reactive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAIvC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAEvD,MAAM,WAAW,GAAG,IAAI,OAAO,EAAgD,CAAC;AAEhF,MAAM,UAAU,eAAe,CAC3B,GAAW,EACX,GAAoB,EACpB,YAAmC;IAEnC,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,IAAI,GAAG,EAAE,CAAC;QACV,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAChB,OAAO,GAAG,CAAC;AACf,CAAC;AAcD,MAAM,UAAU,QAAQ,CACpB,KAAiE,EACjE,OAGsC;IAEtC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAC3B,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CACpC,MAAM,CAAE,KAAkD,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACtE,MAAM,EAAE,MAAM,CAAC,EAAE;aACpB,CAAC,CACc,CAAC;YACzB,OAAO;gBACH,GAAG;oBACC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC9B,CAAC;gBACD,GAAG,CAAC,KAAQ;oBACR,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC5B,CAAC;aACJ,CAAC;QACN,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAC3B,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CACpC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAE,KAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAC7E,CAAC;YACN,OAAO,SAAS,GAAG;gBACf,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAO,CAAC;YACnC,CAAC,CAAC;QACN,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,IAAI,GAAG,EAAmB,CAAC;YAC/D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7E,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"reactive.js","sourceRoot":"","sources":["../../src/decorators/reactive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAKvC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAEvD,MAAM,WAAW,GAAG,IAAI,OAAO,EAAgD,CAAC;AAEhF,MAAM,UAAU,eAAe,CAC3B,GAAW,EACX,GAAoB,EACpB,YAAmC;IAEnC,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,IAAI,GAAG,EAAE,CAAC;QACV,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAChB,OAAO,GAAG,CAAC;AACf,CAAC;AAcD,MAAM,UAAU,QAAQ,CACpB,KAAiE,EACjE,OAGsC;IAEtC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAC3B,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CACpC,MAAM,CAAE,KAAkD,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACtE,MAAM,EAAE,MAAM,CAAC,EAAE;aACpB,CAAC,CACc,CAAC;YACzB,OAAO;gBACH,GAAG;oBACC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC9B,CAAC;gBACD,GAAG,CAAC,KAAQ;oBACR,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC5B,CAAC;aACJ,CAAC;QACN,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAC3B,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CACpC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAE,KAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAC7E,CAAC;YACN,OAAO,SAAS,GAAG;gBACf,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAO,CAAC;YACnC,CAAC,CAAC;QACN,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,IAAI,GAAG,EAAmB,CAAC;YAC/D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7E,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type ClassGetterDecoratorTarget<_C, T> = () => T;
2
+ export type ClassGetterDecoratorResult<_C, T> = (() => T) | void;
3
+ export type ClassSetterDecoratorTarget<_C, T> = (value: T) => void;
4
+ export type ClassSetterDecoratorResult<_C, T> = ((value: T) => void) | void;
5
+ export type ClassAccessorDecoratorFunction<C, T> = (value: ClassAccessorDecoratorTarget<C, T>, context: ClassAccessorDecoratorContext<C, T>) => ClassAccessorDecoratorResult<C, T>;
6
+ export type ClassGetterDecoratorFunction<C, T> = (value: ClassGetterDecoratorTarget<C, T>, context: ClassGetterDecoratorContext<C, T>) => ClassGetterDecoratorResult<C, T>;
7
+ export type ClassSetterDecoratorFunction<C, T> = (value: ClassSetterDecoratorTarget<C, T>, context: ClassSetterDecoratorContext<C, T>) => ClassSetterDecoratorResult<C, T>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/decorators/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bodil/dom",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "DOM and web component tools",
5
5
  "homepage": "https://codeberg.org/bodil/dom",
6
6
  "repository": {
package/src/component.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { assert, isIterable, isNullish, present } from "@bodil/core/assert";
1
+ import { isIterable, isNullish } from "@bodil/core/assert";
2
2
  import { DisposableContext, toDisposable, type Disposifiable } from "@bodil/core/disposable";
3
3
  import { Signal } from "@bodil/signal";
4
4
  import {
@@ -16,13 +16,7 @@ import {
16
16
  } from "lit";
17
17
  import type { Constructor } from "type-fest";
18
18
 
19
- import {
20
- attributeConfig,
21
- detectAttributeType,
22
- fromAttribute,
23
- toAttribute,
24
- type AttributeConfig,
25
- } from "./decorators/attribute";
19
+ import { attributeConfig, fromAttribute, type AttributeConfig } from "./decorators/attribute";
26
20
  import { connectedJobs } from "./decorators/connect";
27
21
  import { reactiveFields, signalForObject } from "./decorators/reactive";
28
22
  import { requiredProperties } from "./decorators/require";
@@ -39,7 +33,13 @@ import {
39
33
  } from "./slot";
40
34
 
41
35
  export type { ReactiveController, ReactiveControllerHost } from "lit";
42
- export { attribute, type AttributeOptions } from "./decorators/attribute";
36
+ export {
37
+ attribute,
38
+ attributeGetter,
39
+ attributeSetter,
40
+ type AttributeOptions,
41
+ type AttributeGetterSetterOptions,
42
+ } from "./decorators/attribute";
43
43
  export {
44
44
  connect,
45
45
  connectEffect,
@@ -112,6 +112,7 @@ export abstract class Component
112
112
  #firstUpdate = false;
113
113
  #initialised = false;
114
114
  #viewTransitionRequested = false;
115
+ #ignoreAttributeUpdates: number;
115
116
 
116
117
  readonly renderRoot: ShadowRoot | HTMLElement = this.createRenderRoot();
117
118
 
@@ -179,10 +180,11 @@ export abstract class Component
179
180
  constructor() {
180
181
  super();
181
182
 
183
+ this.#ignoreAttributeUpdates = 1;
184
+
182
185
  // set up reactive fields, because decorators can't do this themselves
183
- for (const field of (this.constructor[Symbol.metadata]?.[reactiveFields] as Set<
184
- string | symbol
185
- >) ?? []) {
186
+ const fields = this.constructor[Symbol.metadata]?.[reactiveFields] ?? [];
187
+ for (const field of fields as Iterable<string | symbol>) {
186
188
  const sig = signalForObject(this, field, () =>
187
189
  Signal(undefined, { equals: Object.is }),
188
190
  ) as Signal.State<unknown>;
@@ -203,6 +205,7 @@ export abstract class Component
203
205
  init.call(this);
204
206
  }
205
207
 
208
+ this.#ignoreAttributeUpdates--;
206
209
  this.#initialised = false;
207
210
  }
208
211
 
@@ -211,14 +214,6 @@ export abstract class Component
211
214
  this.#controllers.forEach((c) => c.hostConnected?.());
212
215
  this.#rootPart?.setConnected(true);
213
216
 
214
- for (const [key, config] of (
215
- this.constructor as typeof Component
216
- ).attributeConfig.entries()) {
217
- if (config.reflect) {
218
- this.syncAttribute(key, config);
219
- }
220
- }
221
-
222
217
  for (const job of connectedJobs(this)) {
223
218
  const result = job.call(this);
224
219
  const items = isNullish(result)
@@ -260,43 +255,28 @@ export abstract class Component
260
255
  this.#connectedContext.dispose();
261
256
  }
262
257
 
258
+ setAttributeQuietly(name: string, value: string | null) {
259
+ this.#ignoreAttributeUpdates++;
260
+ if (value === null) {
261
+ this.removeAttribute(name);
262
+ } else {
263
+ this.setAttribute(name, value);
264
+ }
265
+ this.#ignoreAttributeUpdates--;
266
+ }
267
+
263
268
  protected attributeChangedCallback(
264
269
  name: string,
265
270
  old: string | null,
266
271
  valueString: string | null,
267
272
  ) {
268
- if (old === valueString) {
273
+ if (this.#ignoreAttributeUpdates > 0 || old === valueString) {
269
274
  return;
270
275
  }
271
276
  const attrConfig = (this.constructor as typeof Component).attributeConfig.get(name);
272
- assert(attrConfig !== undefined);
273
- const value = fromAttribute(
274
- valueString,
275
- present(
276
- attrConfig.type,
277
- `@attribute decorator for ${this.constructor.name}.${name} needs a type declaration, eg. @attribute({type: String})`,
278
- ),
279
- );
280
- this[attrConfig.property as keyof this] = value as any;
281
- }
282
-
283
- private syncAttribute(name: string, config?: AttributeConfig) {
284
- if (this.isConnected) {
285
- config ??= (this.constructor as typeof Component).attributeConfig.get(name);
286
- assert(config !== undefined);
287
- if (config.reflect) {
288
- const realValue = this[config.property as keyof this];
289
- config.type ??= detectAttributeType(realValue);
290
- const value = toAttribute(realValue, present(config.type));
291
- const oldValue = this.getAttribute(name);
292
- if (value !== oldValue) {
293
- if (value === null) {
294
- this.removeAttribute(name);
295
- } else {
296
- this.setAttribute(name, value);
297
- }
298
- }
299
- }
277
+ if (attrConfig !== undefined) {
278
+ const value = fromAttribute(valueString, attrConfig.type);
279
+ this[attrConfig.property as keyof this] = value as any;
300
280
  }
301
281
  }
302
282
 
@@ -3,6 +3,7 @@ import { expect, test } from "vitest";
3
3
 
4
4
  import { attribute, Component } from "../component";
5
5
  import { Signal } from "@bodil/signal";
6
+ import { attributeGetter, attributeSetter } from "./attribute";
6
7
 
7
8
  test("@attribute", async () => {
8
9
  @customElement("attribute-test-class")
@@ -75,3 +76,78 @@ test("@attribute", async () => {
75
76
  expect(t.hide).toBe("yes");
76
77
  expect(t.getAttribute("hide")).toBe("yes");
77
78
  });
79
+
80
+ test("@attribute getter/setter", async () => {
81
+ @customElement("attribute-getter-test-class")
82
+ class AttributeGetterTestClass extends Component {
83
+ #value = "Mike";
84
+ @attributeGetter get value(): string {
85
+ return this.#value;
86
+ }
87
+ @attributeSetter set value(value: string) {
88
+ this.#value = value;
89
+ }
90
+
91
+ #synced = "Mike";
92
+ @attributeGetter({ reflect: false }) get synced(): string {
93
+ return this.#synced;
94
+ }
95
+ @attributeSetter({ reflect: false }) set synced(value: string) {
96
+ this.#synced = value;
97
+ this.setAttributeQuietly("synced", value);
98
+ }
99
+ }
100
+
101
+ const t = document.createElement("attribute-getter-test-class") as AttributeGetterTestClass;
102
+ document.body.append(t);
103
+ await t.updateComplete;
104
+
105
+ expect(t.value).toBe("Mike");
106
+ expect(t.getAttribute("value")).toBeNull();
107
+
108
+ t.setAttribute("value", "Joe");
109
+ expect(t.value).toBe("Joe");
110
+ expect(t.getAttribute("value")).toBe("Joe");
111
+
112
+ t.value = "Robert";
113
+ expect(t.value).toBe("Robert");
114
+ expect(t.getAttribute("value")).toBe("Joe");
115
+
116
+ expect(t.synced).toBe("Mike");
117
+ expect(t.getAttribute("synced")).toBeNull();
118
+
119
+ t.setAttribute("synced", "Joe");
120
+ expect(t.synced).toBe("Joe");
121
+ expect(t.getAttribute("synced")).toBe("Joe");
122
+
123
+ t.synced = "Robert";
124
+ expect(t.synced).toBe("Robert");
125
+ expect(t.getAttribute("synced")).toBe("Robert");
126
+ });
127
+
128
+ test("@attribute init ordering", async () => {
129
+ @customElement("attribute-init-test-class")
130
+ class AttributeInitTestClass extends Component {
131
+ @attribute accessor movieStar = "Joe";
132
+
133
+ #wibble = "Joe";
134
+ @attributeGetter get wibble(): string {
135
+ return this.#wibble;
136
+ }
137
+ @attributeSetter set wibble(value: string) {
138
+ this.#wibble = value;
139
+ }
140
+ }
141
+
142
+ const t = document.createElement("attribute-init-test-class") as AttributeInitTestClass;
143
+ t.setAttribute("movie-star", "Mike");
144
+ t.setAttribute("wibble", "Robert");
145
+ document.body.append(t);
146
+ await t.updateComplete;
147
+
148
+ expect(t.movieStar).toBe("Mike");
149
+ expect(t.getAttribute("movie-star")).toBe("Mike");
150
+
151
+ expect(t.wibble).toBe("Robert");
152
+ expect(t.getAttribute("wibble")).toBe("Robert");
153
+ });
@@ -1,25 +1,42 @@
1
1
  /* eslint-disable @typescript-eslint/unified-signatures */
2
2
 
3
- import { isNullish, unreachable } from "@bodil/core/assert";
3
+ import { isDeepEqual, isNullish, present, unreachable } from "@bodil/core/assert";
4
+ import { None, Some, type Option } from "@bodil/opt";
4
5
  import { Signal } from "@bodil/signal";
5
6
 
6
7
  import type { Component } from "../component";
7
8
  import { signalForObject } from "./reactive";
9
+ import type {
10
+ ClassAccessorDecoratorFunction,
11
+ ClassGetterDecoratorFunction,
12
+ ClassGetterDecoratorResult,
13
+ ClassGetterDecoratorTarget,
14
+ ClassSetterDecoratorFunction,
15
+ ClassSetterDecoratorResult,
16
+ ClassSetterDecoratorTarget,
17
+ } from "./types";
8
18
 
9
19
  export const attributeConfig = Symbol("attributeConfig");
10
20
 
11
21
  export type AttributeType = typeof String | typeof Number | typeof Boolean;
12
22
 
13
- export type AttributeOptions = {
14
- name: string | undefined;
15
- reflect: boolean;
16
- reactive: boolean;
23
+ export type AttributeGetterSetterOptions = {
24
+ type?: AttributeType;
25
+ name?: string;
26
+ };
27
+
28
+ export type AttributeOptions = AttributeGetterSetterOptions & {
29
+ reflect?: boolean;
30
+ reactive?: boolean;
17
31
  };
18
32
 
19
33
  export type AttributeConfig = {
20
- type: AttributeType | undefined;
34
+ type: AttributeType;
21
35
  property: string;
22
- } & AttributeOptions;
36
+ name: string;
37
+ reflect: boolean;
38
+ reactive: boolean;
39
+ };
23
40
 
24
41
  export function toAttribute(value: unknown, type: AttributeType): string | null {
25
42
  if (isNullish(value)) {
@@ -67,46 +84,102 @@ export function fromAttribute(
67
84
  }
68
85
  }
69
86
 
70
- export function detectAttributeType(value: unknown): AttributeType | undefined {
71
- switch (typeof value) {
72
- case "string":
73
- return String;
74
- case "number":
75
- return Number;
76
- case "boolean":
77
- return Boolean;
78
- default:
79
- return undefined;
80
- }
81
- }
82
-
83
87
  function toKebabCase(s: string): string {
84
88
  return s.replace(/((?<=[a-z\d])[A-Z]|(?<=[A-Z\d])[A-Z](?=[a-z]))/g, "-$1").toLowerCase();
85
89
  }
86
90
 
91
+ type AttributeDecoratorTarget<C, T> =
92
+ | ClassAccessorDecoratorTarget<C, T>
93
+ | ClassGetterDecoratorTarget<C, T>
94
+ | ClassSetterDecoratorTarget<C, T>;
95
+
96
+ type AttributeDecoratorResult<C, T> =
97
+ | ClassAccessorDecoratorResult<C, T>
98
+ | ClassGetterDecoratorResult<C, T>
99
+ | ClassSetterDecoratorResult<C, T>;
100
+
101
+ type AttributeDecoratorContext<C, T> =
102
+ | ClassAccessorDecoratorContext<C, T>
103
+ | ClassGetterDecoratorContext<C, T>
104
+ | ClassSetterDecoratorContext<C, T>;
105
+
106
+ type AttributeDecoratorFunction<C, T> =
107
+ | ClassAccessorDecoratorFunction<C, T>
108
+ | ClassGetterDecoratorFunction<C, T>
109
+ | ClassSetterDecoratorFunction<C, T>;
110
+
111
+ // Getter with number type
112
+ export function attributeGetter<C extends Component, T extends number | undefined>(
113
+ options: AttributeOptions & { type: typeof Number },
114
+ ): ClassGetterDecoratorFunction<C, T>;
115
+
116
+ // Getter with boolean type
117
+ export function attributeGetter<C extends Component, T extends boolean | undefined>(
118
+ options: AttributeOptions & { type: typeof Boolean },
119
+ ): ClassGetterDecoratorFunction<C, T>;
120
+
121
+ // Getter with string type
122
+ export function attributeGetter<C extends Component, T extends string | undefined>(
123
+ options: AttributeOptions,
124
+ ): ClassGetterDecoratorFunction<C, T>;
125
+
126
+ // Getter with no options
127
+ export function attributeGetter<C extends Component, T extends string | undefined>(
128
+ value: ClassGetterDecoratorTarget<C, T>,
129
+ context: ClassGetterDecoratorContext<C, T>,
130
+ ): ClassGetterDecoratorResult<C, T>;
131
+
132
+ export function attributeGetter<C extends Component, T>(
133
+ valueOrOptions?: ClassGetterDecoratorTarget<C, T> | Partial<AttributeGetterSetterOptions>,
134
+ context?: ClassGetterDecoratorContext<C, T>,
135
+ ): ClassGetterDecoratorResult<C, T> | ClassGetterDecoratorFunction<C, T> {
136
+ //@ts-ignore
137
+ return attribute(valueOrOptions, context);
138
+ }
139
+
140
+ // Setter with number type
141
+ export function attributeSetter<C extends Component, T extends number | undefined>(
142
+ options: AttributeOptions & { type: typeof Number },
143
+ ): ClassSetterDecoratorFunction<C, T>;
144
+
145
+ // Setter with boolean type
146
+ export function attributeSetter<C extends Component, T extends boolean | undefined>(
147
+ options: AttributeOptions & { type: typeof Boolean },
148
+ ): ClassSetterDecoratorFunction<C, T>;
149
+
150
+ // Setter with string type
151
+ export function attributeSetter<C extends Component, T extends string | undefined>(
152
+ options: AttributeOptions,
153
+ ): ClassSetterDecoratorFunction<C, T>;
154
+
155
+ // Setter with no options
156
+ export function attributeSetter<C extends Component, T extends string | undefined>(
157
+ value: ClassSetterDecoratorTarget<C, T>,
158
+ context: ClassSetterDecoratorContext<C, T>,
159
+ ): ClassSetterDecoratorResult<C, T>;
160
+
161
+ export function attributeSetter<C extends Component, T>(
162
+ valueOrOptions?: ClassSetterDecoratorTarget<C, T> | Partial<AttributeGetterSetterOptions>,
163
+ context?: ClassSetterDecoratorContext<C, T>,
164
+ ): ClassSetterDecoratorResult<C, T> | ClassSetterDecoratorFunction<C, T> {
165
+ //@ts-ignore
166
+ return attribute(valueOrOptions, context);
167
+ }
168
+
87
169
  // Accessor with number type
88
170
  export function attribute<C extends Component, T extends number | undefined>(
89
- options: Partial<AttributeOptions> & { type: typeof Number },
90
- ): (
91
- value: ClassAccessorDecoratorTarget<C, T>,
92
- context: ClassAccessorDecoratorContext<C, T>,
93
- ) => ClassAccessorDecoratorResult<C, T>;
171
+ options: AttributeOptions & { type: typeof Number },
172
+ ): ClassAccessorDecoratorFunction<C, T>;
94
173
 
95
174
  // Accessor with boolean type
96
175
  export function attribute<C extends Component, T extends boolean | undefined>(
97
- options: Partial<AttributeOptions> & { type: typeof Boolean },
98
- ): (
99
- value: ClassAccessorDecoratorTarget<C, T>,
100
- context: ClassAccessorDecoratorContext<C, T>,
101
- ) => ClassAccessorDecoratorResult<C, T>;
176
+ options: AttributeOptions & { type: typeof Boolean },
177
+ ): ClassAccessorDecoratorFunction<C, T>;
102
178
 
103
179
  // Accessor with string type
104
180
  export function attribute<C extends Component, T extends string | undefined>(
105
- options: Partial<AttributeOptions>,
106
- ): (
107
- value: ClassAccessorDecoratorTarget<C, T>,
108
- context: ClassAccessorDecoratorContext<C, T>,
109
- ) => ClassAccessorDecoratorResult<C, T>;
181
+ options: AttributeOptions,
182
+ ): ClassAccessorDecoratorFunction<C, T>;
110
183
 
111
184
  // Accessor with no options
112
185
  export function attribute<C extends Component, T extends string | undefined>(
@@ -115,22 +188,18 @@ export function attribute<C extends Component, T extends string | undefined>(
115
188
  ): ClassAccessorDecoratorResult<C, T>;
116
189
 
117
190
  export function attribute<C extends Component, T extends string | number | boolean | undefined>(
118
- valueOrOptions?: ClassAccessorDecoratorTarget<C, T> | Partial<AttributeOptions>,
119
- context?: ClassAccessorDecoratorContext<C, T>,
120
- ):
121
- | ClassAccessorDecoratorResult<C, T>
122
- | ((
123
- value: ClassAccessorDecoratorTarget<C, T>,
124
- context: ClassAccessorDecoratorContext<C, T>,
125
- ) => ClassAccessorDecoratorResult<C, T>) {
191
+ valueOrOptions?: AttributeDecoratorTarget<C, T> | AttributeOptions,
192
+ context?: AttributeDecoratorContext<C, T>,
193
+ ): AttributeDecoratorResult<C, T> | AttributeDecoratorFunction<C, T> {
126
194
  if (context !== undefined) {
127
- return attribute({})(valueOrOptions as any, context as any) as ClassAccessorDecoratorResult<
128
- C,
129
- T
130
- >;
195
+ //@ts-ignore
196
+ return attribute({})(valueOrOptions, context);
131
197
  }
132
198
 
133
- return (value, context) => {
199
+ return (
200
+ value: AttributeDecoratorTarget<C, T>,
201
+ context: AttributeDecoratorContext<C, T>,
202
+ ): any => {
134
203
  if (typeof context.name !== "string") {
135
204
  throw new TypeError(
136
205
  `Can't declare a ${typeof context.name} as an attribute (${JSON.stringify(context.name)})`,
@@ -141,57 +210,102 @@ export function attribute<C extends Component, T extends string | number | boole
141
210
  ...{
142
211
  type: String,
143
212
  property: context.name,
144
- reactive: true,
145
- reflect: true,
213
+ reactive: context.kind === "accessor",
214
+ reflect: context.kind === "accessor",
215
+ name: toKebabCase(context.name),
146
216
  },
147
- ...((valueOrOptions as AttributeConfig) ?? {}),
217
+ ...((valueOrOptions as AttributeOptions) ?? {}),
148
218
  };
149
219
  let attrs = context.metadata[attributeConfig] as Map<string, AttributeConfig>;
150
220
  if (attrs === undefined) {
151
221
  context.metadata[attributeConfig] = attrs = new Map();
152
222
  }
153
- const key = options.name ?? toKebabCase(context.name);
154
- attrs.set(key, options);
223
+ if (context.kind === "getter" || context.kind === "setter") {
224
+ const oldOpts = attrs.get(options.name);
225
+ if (oldOpts !== undefined && !isDeepEqual(oldOpts, options)) {
226
+ throw new TypeError(
227
+ `Attribute options for ${JSON.stringify(context.name)} must be identical for getters and setters`,
228
+ );
229
+ }
230
+ }
231
+ attrs.set(options.name, options);
155
232
 
233
+ if (context.kind === "accessor") {
234
+ return accessor(options, context, value as ClassAccessorDecoratorTarget<C, T>);
235
+ }
236
+
237
+ // ensure getters/setters aren't configured with reactive or reflect
156
238
  if (options.reactive) {
157
- const getSig = (obj: object) =>
158
- signalForObject(obj, context.name, () =>
159
- Signal((value as ClassAccessorDecoratorTarget<unknown, T>).get.call(obj), {
160
- equals: Object.is,
161
- }),
162
- ) as Signal.State<T>;
163
- return {
164
- get(): T {
165
- return getSig(this).get();
166
- },
167
- set(newValue: T) {
168
- options.type ??= detectAttributeType(newValue);
169
- getSig(this).set(newValue);
170
- if (options.reflect) {
171
- (this as any).syncAttribute(key);
172
- }
173
- },
174
- init(newValue: T): T {
175
- options.type ??= detectAttributeType(newValue);
176
- return newValue;
177
- },
178
- } as ClassAccessorDecoratorResult<C, T>;
239
+ throw new TypeError(
240
+ `Getter/setter attributes cannot be declared with reactive: true (on ${JSON.stringify(context.name)})`,
241
+ );
242
+ }
243
+
244
+ if (options.reflect) {
245
+ throw new TypeError(
246
+ `Getter/setter attributes cannot be declared with reflect: true (on ${JSON.stringify(context.name)})`,
247
+ );
179
248
  }
249
+ };
250
+ }
251
+
252
+ function syncAttribute<C extends Component, T>(
253
+ target: C,
254
+ options: AttributeConfig,
255
+ value: T,
256
+ force: boolean = false,
257
+ ) {
258
+ const key = present(options.name);
259
+ const attributeValue = toAttribute(value, present(options.type));
260
+ if (force || attributeValue !== target.getAttribute(key)) {
261
+ target.setAttributeQuietly(key, attributeValue);
262
+ }
263
+ }
264
+
265
+ function accessor<C extends Component, T>(
266
+ options: AttributeConfig,
267
+ context: ClassAccessorDecoratorContext<C, T>,
268
+ value: ClassAccessorDecoratorTarget<C, T>,
269
+ ): ClassAccessorDecoratorResult<C, T> {
270
+ let initValue: Option<T> = None;
271
+ const init = function init(this: C, value: T): T {
272
+ initValue = Some(value);
273
+ if (options.reflect) {
274
+ syncAttribute(this, options, value, true);
275
+ }
276
+ return value;
277
+ };
278
+
279
+ if (options.reactive) {
280
+ const getSig = (obj: object) =>
281
+ signalForObject(obj, context.name, () =>
282
+ Signal(initValue.unwrapExact(), {
283
+ equals: Object.is,
284
+ }),
285
+ ) as Signal.State<T>;
180
286
  return {
181
287
  get(): T {
182
- return value.get.call(this);
288
+ return getSig(this).get();
183
289
  },
184
290
  set(newValue: T) {
185
- options.type ??= detectAttributeType(newValue);
186
- value.set.call(this, newValue);
291
+ getSig(this).set(newValue);
187
292
  if (options.reflect) {
188
- (this as any).syncAttribute(key);
293
+ syncAttribute(this, options, newValue);
189
294
  }
190
295
  },
191
- init(newValue: T): T {
192
- options.type ??= detectAttributeType(newValue);
193
- return newValue;
194
- },
195
- } as ClassAccessorDecoratorResult<C, T>;
296
+ init,
297
+ };
298
+ }
299
+ return {
300
+ get(): T {
301
+ return value.get.call(this);
302
+ },
303
+ set(newValue: T) {
304
+ value.set.call(this, newValue);
305
+ if (options.reflect) {
306
+ syncAttribute(this, options, newValue);
307
+ }
308
+ },
309
+ init,
196
310
  };
197
311
  }
@@ -1,6 +1,7 @@
1
1
  import { Signal } from "@bodil/signal";
2
2
 
3
3
  import type { Component } from "../component";
4
+ import type { ClassGetterDecoratorResult, ClassGetterDecoratorTarget } from "./types";
4
5
 
5
6
  export const reactiveFields = Symbol("reactiveFields");
6
7
 
@@ -29,9 +30,9 @@ export function reactive<C extends object, T>(
29
30
  context: ClassAccessorDecoratorContext<C, T>,
30
31
  ): ClassAccessorDecoratorResult<C, T>;
31
32
  export function reactive<C extends object, T>(
32
- value: () => T,
33
+ value: ClassGetterDecoratorTarget<C, T>,
33
34
  context: ClassGetterDecoratorContext<C, T>,
34
- ): () => T;
35
+ ): ClassGetterDecoratorResult<C, T>;
35
36
  export function reactive<C extends Component, T>(
36
37
  value: undefined,
37
38
  context: ClassFieldDecoratorContext<C, T>,
@@ -42,7 +43,7 @@ export function reactive<C extends object, T>(
42
43
  | ClassAccessorDecoratorContext<C, T>
43
44
  | ClassGetterDecoratorContext<C, T>
44
45
  | ClassFieldDecoratorContext<C, T>,
45
- ): ClassAccessorDecoratorResult<C, T> | ((this: C) => T) | undefined {
46
+ ): ClassAccessorDecoratorResult<C, T> | ClassGetterDecoratorResult<C, T> | undefined {
46
47
  switch (context.kind) {
47
48
  case "accessor": {
48
49
  const getSig = (obj: object) =>
@@ -0,0 +1,20 @@
1
+ export type ClassGetterDecoratorTarget<_C, T> = () => T;
2
+ export type ClassGetterDecoratorResult<_C, T> = (() => T) | void;
3
+
4
+ export type ClassSetterDecoratorTarget<_C, T> = (value: T) => void;
5
+ export type ClassSetterDecoratorResult<_C, T> = ((value: T) => void) | void;
6
+
7
+ export type ClassAccessorDecoratorFunction<C, T> = (
8
+ value: ClassAccessorDecoratorTarget<C, T>,
9
+ context: ClassAccessorDecoratorContext<C, T>,
10
+ ) => ClassAccessorDecoratorResult<C, T>;
11
+
12
+ export type ClassGetterDecoratorFunction<C, T> = (
13
+ value: ClassGetterDecoratorTarget<C, T>,
14
+ context: ClassGetterDecoratorContext<C, T>,
15
+ ) => ClassGetterDecoratorResult<C, T>;
16
+
17
+ export type ClassSetterDecoratorFunction<C, T> = (
18
+ value: ClassSetterDecoratorTarget<C, T>,
19
+ context: ClassSetterDecoratorContext<C, T>,
20
+ ) => ClassSetterDecoratorResult<C, T>;