@bodil/dom 0.1.1 → 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.
@@ -53,6 +53,7 @@ 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
58
  $signal<K extends keyof this & string, V extends this[K]>(prop: K): Signal<V>;
58
59
  addController(controller: ReactiveController): void;
package/dist/component.js CHANGED
@@ -1,5 +1,5 @@
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";
@@ -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,6 +115,7 @@ 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
120
  const fields = this.constructor[Symbol.metadata]?.[reactiveFields] ?? [];
119
121
  for (const field of fields) {
@@ -133,6 +135,7 @@ export class Component extends EmitterElement {
133
135
  for (const init of this.constructor.initialisers) {
134
136
  init.call(this);
135
137
  }
138
+ this.#ignoreAttributeUpdates--;
136
139
  this.#initialised = false;
137
140
  }
138
141
  connectedCallback() {
@@ -172,14 +175,25 @@ export class Component extends EmitterElement {
172
175
  this.#controllers.forEach((c) => c.hostDisconnected?.());
173
176
  this.#connectedContext.dispose();
174
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
+ }
175
188
  attributeChangedCallback(name, old, valueString) {
176
- if (old === valueString) {
189
+ if (this.#ignoreAttributeUpdates > 0 || old === valueString) {
177
190
  return;
178
191
  }
179
192
  const attrConfig = this.constructor.attributeConfig.get(name);
180
- assert(attrConfig !== undefined);
181
- const value = fromAttribute(valueString, present(attrConfig.type, `@attribute decorator for ${this.constructor.name}.${name} needs a type declaration, eg. @attribute({type: String})`));
182
- this[attrConfig.property] = value;
193
+ if (attrConfig !== undefined) {
194
+ const value = fromAttribute(valueString, attrConfig.type);
195
+ this[attrConfig.property] = value;
196
+ }
183
197
  }
184
198
  $signal(prop) {
185
199
  const _value = this[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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"}
@@ -3,42 +3,46 @@ import type { ClassAccessorDecoratorFunction, ClassGetterDecoratorFunction, Clas
3
3
  export declare const attributeConfig: unique symbol;
4
4
  export type AttributeType = typeof String | typeof Number | typeof Boolean;
5
5
  export type AttributeGetterSetterOptions = {
6
- type: AttributeType | undefined;
7
- name: string | undefined;
8
- reflect: boolean;
6
+ type?: AttributeType;
7
+ name?: string;
9
8
  };
10
9
  export type AttributeOptions = AttributeGetterSetterOptions & {
11
- reactive: boolean;
10
+ reflect?: boolean;
11
+ reactive?: boolean;
12
12
  };
13
13
  export type AttributeConfig = {
14
+ type: AttributeType;
14
15
  property: string;
15
- } & AttributeOptions;
16
+ name: string;
17
+ reflect: boolean;
18
+ reactive: boolean;
19
+ };
16
20
  export declare function toAttribute(value: unknown, type: AttributeType): string | null;
17
21
  export declare function fromAttribute(value: string | null, type: typeof Number): number | undefined;
18
22
  export declare function fromAttribute(value: string | null, type: typeof Boolean): boolean;
19
23
  export declare function fromAttribute(value: string | null, type: typeof String): string | undefined;
20
24
  export declare function fromAttribute(value: string | null, type: AttributeType): string | number | boolean | undefined;
21
- export declare function attributeGetter<C extends Component, T extends number | undefined>(options: Partial<AttributeOptions> & {
25
+ export declare function attributeGetter<C extends Component, T extends number | undefined>(options: AttributeOptions & {
22
26
  type: typeof Number;
23
27
  }): ClassGetterDecoratorFunction<C, T>;
24
- export declare function attributeGetter<C extends Component, T extends boolean | undefined>(options: Partial<AttributeOptions> & {
28
+ export declare function attributeGetter<C extends Component, T extends boolean | undefined>(options: AttributeOptions & {
25
29
  type: typeof Boolean;
26
30
  }): ClassGetterDecoratorFunction<C, T>;
27
- export declare function attributeGetter<C extends Component, T extends string | undefined>(options: Partial<AttributeOptions>): ClassGetterDecoratorFunction<C, T>;
31
+ export declare function attributeGetter<C extends Component, T extends string | undefined>(options: AttributeOptions): ClassGetterDecoratorFunction<C, T>;
28
32
  export declare function attributeGetter<C extends Component, T extends string | undefined>(value: ClassGetterDecoratorTarget<C, T>, context: ClassGetterDecoratorContext<C, T>): ClassGetterDecoratorResult<C, T>;
29
- export declare function attributeSetter<C extends Component, T extends number | undefined>(options: Partial<AttributeOptions> & {
33
+ export declare function attributeSetter<C extends Component, T extends number | undefined>(options: AttributeOptions & {
30
34
  type: typeof Number;
31
35
  }): ClassSetterDecoratorFunction<C, T>;
32
- export declare function attributeSetter<C extends Component, T extends boolean | undefined>(options: Partial<AttributeOptions> & {
36
+ export declare function attributeSetter<C extends Component, T extends boolean | undefined>(options: AttributeOptions & {
33
37
  type: typeof Boolean;
34
38
  }): ClassSetterDecoratorFunction<C, T>;
35
- export declare function attributeSetter<C extends Component, T extends string | undefined>(options: Partial<AttributeOptions>): ClassSetterDecoratorFunction<C, T>;
39
+ export declare function attributeSetter<C extends Component, T extends string | undefined>(options: AttributeOptions): ClassSetterDecoratorFunction<C, T>;
36
40
  export declare function attributeSetter<C extends Component, T extends string | undefined>(value: ClassSetterDecoratorTarget<C, T>, context: ClassSetterDecoratorContext<C, T>): ClassSetterDecoratorResult<C, T>;
37
- export declare function attribute<C extends Component, T extends number | undefined>(options: Partial<AttributeOptions> & {
41
+ export declare function attribute<C extends Component, T extends number | undefined>(options: AttributeOptions & {
38
42
  type: typeof Number;
39
43
  }): ClassAccessorDecoratorFunction<C, T>;
40
- export declare function attribute<C extends Component, T extends boolean | undefined>(options: Partial<AttributeOptions> & {
44
+ export declare function attribute<C extends Component, T extends boolean | undefined>(options: AttributeOptions & {
41
45
  type: typeof Boolean;
42
46
  }): ClassAccessorDecoratorFunction<C, T>;
43
- export declare function attribute<C extends Component, T extends string | undefined>(options: Partial<AttributeOptions>): ClassAccessorDecoratorFunction<C, T>;
47
+ export declare function attribute<C extends Component, T extends string | undefined>(options: AttributeOptions): ClassAccessorDecoratorFunction<C, T>;
44
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 { assertNever, isNullish, present, 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");
@@ -60,7 +61,8 @@ export function attribute(valueOrOptions, context) {
60
61
  type: String,
61
62
  property: context.name,
62
63
  reactive: context.kind === "accessor",
63
- reflect: true,
64
+ reflect: context.kind === "accessor",
65
+ name: toKebabCase(context.name),
64
66
  },
65
67
  ...(valueOrOptions ?? {}),
66
68
  };
@@ -68,64 +70,43 @@ export function attribute(valueOrOptions, context) {
68
70
  if (attrs === undefined) {
69
71
  context.metadata[attributeConfig] = attrs = new Map();
70
72
  }
71
- const key = options.name ?? toKebabCase(context.name);
72
- 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);
73
80
  if (context.kind === "accessor") {
74
- return accessor(options, context, key, value);
81
+ return accessor(options, context, value);
75
82
  }
76
- // ensure getters/setters aren't configured as reactive
83
+ // ensure getters/setters aren't configured with reactive or reflect
77
84
  if (options.reactive) {
78
85
  throw new TypeError(`Getter/setter attributes cannot be declared with reactive: true (on ${JSON.stringify(context.name)})`);
79
86
  }
80
- if (context.kind === "setter") {
81
- return setter(options, context, key, value);
82
- }
83
- if (context.kind === "getter") {
84
- return getter(options, context, key);
87
+ if (options.reflect) {
88
+ throw new TypeError(`Getter/setter attributes cannot be declared with reflect: true (on ${JSON.stringify(context.name)})`);
85
89
  }
86
- assertNever(context);
87
90
  };
88
91
  }
89
- function syncAttribute(target, options, key, value) {
92
+ function syncAttribute(target, options, value, force = false) {
93
+ const key = present(options.name);
90
94
  const attributeValue = toAttribute(value, present(options.type));
91
- const oldValue = target.getAttribute(key);
92
- if (attributeValue !== oldValue) {
93
- if (attributeValue === null) {
94
- target.removeAttribute(key);
95
- }
96
- else {
97
- target.setAttribute(key, attributeValue);
98
- }
99
- }
100
- }
101
- function getter(options, context, key) {
102
- if (options.reflect) {
103
- context.addInitializer(function () {
104
- queueMicrotask(() => {
105
- syncAttribute(this, options, key, this[context.name]);
106
- });
107
- });
108
- }
109
- }
110
- function setter(options, context, key, value) {
111
- if (options.reflect) {
112
- return function set(newValue) {
113
- value.call(this, newValue);
114
- syncAttribute(this, options, key, this[context.name]);
115
- };
95
+ if (force || attributeValue !== target.getAttribute(key)) {
96
+ target.setAttributeQuietly(key, attributeValue);
116
97
  }
117
98
  }
118
- function accessor(options, context, key, value) {
99
+ function accessor(options, context, value) {
100
+ let initValue = None;
119
101
  const init = function init(value) {
102
+ initValue = Some(value);
120
103
  if (options.reflect) {
121
- queueMicrotask(() => {
122
- syncAttribute(this, options, key, value);
123
- });
104
+ syncAttribute(this, options, value, true);
124
105
  }
125
106
  return value;
126
107
  };
127
108
  if (options.reactive) {
128
- const getSig = (obj) => signalForObject(obj, context.name, () => Signal(value.get.call(obj), {
109
+ const getSig = (obj) => signalForObject(obj, context.name, () => Signal(initValue.unwrapExact(), {
129
110
  equals: Object.is,
130
111
  }));
131
112
  return {
@@ -135,7 +116,7 @@ function accessor(options, context, key, value) {
135
116
  set(newValue) {
136
117
  getSig(this).set(newValue);
137
118
  if (options.reflect) {
138
- syncAttribute(this, options, key, newValue);
119
+ syncAttribute(this, options, newValue);
139
120
  }
140
121
  },
141
122
  init,
@@ -148,7 +129,7 @@ function accessor(options, context, key, value) {
148
129
  set(newValue) {
149
130
  value.set.call(this, newValue);
150
131
  if (options.reflect) {
151
- syncAttribute(this, options, key, newValue);
132
+ syncAttribute(this, options, newValue);
152
133
  }
153
134
  },
154
135
  init,
@@ -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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"}
@@ -156,20 +156,20 @@ test("@attribute getter/setter", async () => {
156
156
  let _instanceExtraInitializers = [];
157
157
  let _get_value_decorators;
158
158
  let _set_value_decorators;
159
- let _get_unsynced_decorators;
160
- let _set_unsynced_decorators;
159
+ let _get_synced_decorators;
160
+ let _set_synced_decorators;
161
161
  var AttributeGetterTestClass = class extends _classSuper {
162
162
  static { _classThis = this; }
163
163
  static {
164
164
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
165
165
  _get_value_decorators = [attributeGetter];
166
166
  _set_value_decorators = [attributeSetter];
167
- _get_unsynced_decorators = [attributeGetter({ reflect: false })];
168
- _set_unsynced_decorators = [attributeSetter({ reflect: false })];
167
+ _get_synced_decorators = [attributeGetter({ reflect: false })];
168
+ _set_synced_decorators = [attributeSetter({ reflect: false })];
169
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
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_unsynced_decorators, { kind: "getter", name: "unsynced", static: false, private: false, access: { has: obj => "unsynced" in obj, get: obj => obj.unsynced }, metadata: _metadata }, null, _instanceExtraInitializers);
172
- __esDecorate(this, null, _set_unsynced_decorators, { kind: "setter", name: "unsynced", static: false, private: false, access: { has: obj => "unsynced" in obj, set: (obj, value) => { obj.unsynced = 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
173
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
174
174
  AttributeGetterTestClass = _classThis = _classDescriptor.value;
175
175
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
@@ -182,12 +182,13 @@ test("@attribute getter/setter", async () => {
182
182
  set value(value) {
183
183
  this.#value = value;
184
184
  }
185
- #unsynced = "Mike";
186
- get unsynced() {
187
- return this.#unsynced;
185
+ #synced = "Mike";
186
+ get synced() {
187
+ return this.#synced;
188
188
  }
189
- set unsynced(value) {
190
- this.#unsynced = value;
189
+ set synced(value) {
190
+ this.#synced = value;
191
+ this.setAttributeQuietly("synced", value);
191
192
  }
192
193
  };
193
194
  return AttributeGetterTestClass = _classThis;
@@ -196,20 +197,69 @@ test("@attribute getter/setter", async () => {
196
197
  document.body.append(t);
197
198
  await t.updateComplete;
198
199
  expect(t.value).toBe("Mike");
199
- expect(t.getAttribute("value")).toBe("Mike");
200
+ expect(t.getAttribute("value")).toBeNull();
200
201
  t.setAttribute("value", "Joe");
201
202
  expect(t.value).toBe("Joe");
202
203
  expect(t.getAttribute("value")).toBe("Joe");
203
204
  t.value = "Robert";
204
205
  expect(t.value).toBe("Robert");
205
- expect(t.getAttribute("value")).toBe("Robert");
206
- expect(t.unsynced).toBe("Mike");
207
- expect(t.getAttribute("unsynced")).toBe(null);
208
- t.setAttribute("unsynced", "Joe");
209
- expect(t.unsynced).toBe("Joe");
210
- expect(t.getAttribute("unsynced")).toBe("Joe");
211
- t.unsynced = "Robert";
212
- expect(t.unsynced).toBe("Robert");
213
- expect(t.getAttribute("unsynced")).toBe("Joe");
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");
214
264
  });
215
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bodil/dom",
3
- "version": "0.1.1",
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 {
@@ -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,6 +180,8 @@ 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
186
  const fields = this.constructor[Symbol.metadata]?.[reactiveFields] ?? [];
184
187
  for (const field of fields as Iterable<string | symbol>) {
@@ -202,6 +205,7 @@ export abstract class Component
202
205
  init.call(this);
203
206
  }
204
207
 
208
+ this.#ignoreAttributeUpdates--;
205
209
  this.#initialised = false;
206
210
  }
207
211
 
@@ -251,24 +255,29 @@ export abstract class Component
251
255
  this.#connectedContext.dispose();
252
256
  }
253
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
+
254
268
  protected attributeChangedCallback(
255
269
  name: string,
256
270
  old: string | null,
257
271
  valueString: string | null,
258
272
  ) {
259
- if (old === valueString) {
273
+ if (this.#ignoreAttributeUpdates > 0 || old === valueString) {
260
274
  return;
261
275
  }
262
276
  const attrConfig = (this.constructor as typeof Component).attributeConfig.get(name);
263
- assert(attrConfig !== undefined);
264
- const value = fromAttribute(
265
- valueString,
266
- present(
267
- attrConfig.type,
268
- `@attribute decorator for ${this.constructor.name}.${name} needs a type declaration, eg. @attribute({type: String})`,
269
- ),
270
- );
271
- this[attrConfig.property as keyof this] = value as any;
277
+ if (attrConfig !== undefined) {
278
+ const value = fromAttribute(valueString, attrConfig.type);
279
+ this[attrConfig.property as keyof this] = value as any;
280
+ }
272
281
  }
273
282
 
274
283
  $signal<K extends keyof this & string, V extends this[K]>(prop: K): Signal<V> {
@@ -88,12 +88,13 @@ test("@attribute getter/setter", async () => {
88
88
  this.#value = value;
89
89
  }
90
90
 
91
- #unsynced = "Mike";
92
- @attributeGetter({ reflect: false }) get unsynced(): string {
93
- return this.#unsynced;
91
+ #synced = "Mike";
92
+ @attributeGetter({ reflect: false }) get synced(): string {
93
+ return this.#synced;
94
94
  }
95
- @attributeSetter({ reflect: false }) set unsynced(value: string) {
96
- this.#unsynced = value;
95
+ @attributeSetter({ reflect: false }) set synced(value: string) {
96
+ this.#synced = value;
97
+ this.setAttributeQuietly("synced", value);
97
98
  }
98
99
  }
99
100
 
@@ -102,7 +103,7 @@ test("@attribute getter/setter", async () => {
102
103
  await t.updateComplete;
103
104
 
104
105
  expect(t.value).toBe("Mike");
105
- expect(t.getAttribute("value")).toBe("Mike");
106
+ expect(t.getAttribute("value")).toBeNull();
106
107
 
107
108
  t.setAttribute("value", "Joe");
108
109
  expect(t.value).toBe("Joe");
@@ -110,16 +111,43 @@ test("@attribute getter/setter", async () => {
110
111
 
111
112
  t.value = "Robert";
112
113
  expect(t.value).toBe("Robert");
113
- expect(t.getAttribute("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
+ });
114
127
 
115
- expect(t.unsynced).toBe("Mike");
116
- expect(t.getAttribute("unsynced")).toBe(null);
128
+ test("@attribute init ordering", async () => {
129
+ @customElement("attribute-init-test-class")
130
+ class AttributeInitTestClass extends Component {
131
+ @attribute accessor movieStar = "Joe";
117
132
 
118
- t.setAttribute("unsynced", "Joe");
119
- expect(t.unsynced).toBe("Joe");
120
- expect(t.getAttribute("unsynced")).toBe("Joe");
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
+ }
121
141
 
122
- t.unsynced = "Robert";
123
- expect(t.unsynced).toBe("Robert");
124
- expect(t.getAttribute("unsynced")).toBe("Joe");
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");
125
153
  });
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/unified-signatures */
2
2
 
3
- import { assertNever, isNullish, present, 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";
@@ -20,18 +21,22 @@ export const attributeConfig = Symbol("attributeConfig");
20
21
  export type AttributeType = typeof String | typeof Number | typeof Boolean;
21
22
 
22
23
  export type AttributeGetterSetterOptions = {
23
- type: AttributeType | undefined;
24
- name: string | undefined;
25
- reflect: boolean;
24
+ type?: AttributeType;
25
+ name?: string;
26
26
  };
27
27
 
28
28
  export type AttributeOptions = AttributeGetterSetterOptions & {
29
- reactive: boolean;
29
+ reflect?: boolean;
30
+ reactive?: boolean;
30
31
  };
31
32
 
32
33
  export type AttributeConfig = {
34
+ type: AttributeType;
33
35
  property: string;
34
- } & AttributeOptions;
36
+ name: string;
37
+ reflect: boolean;
38
+ reactive: boolean;
39
+ };
35
40
 
36
41
  export function toAttribute(value: unknown, type: AttributeType): string | null {
37
42
  if (isNullish(value)) {
@@ -105,17 +110,17 @@ type AttributeDecoratorFunction<C, T> =
105
110
 
106
111
  // Getter with number type
107
112
  export function attributeGetter<C extends Component, T extends number | undefined>(
108
- options: Partial<AttributeOptions> & { type: typeof Number },
113
+ options: AttributeOptions & { type: typeof Number },
109
114
  ): ClassGetterDecoratorFunction<C, T>;
110
115
 
111
116
  // Getter with boolean type
112
117
  export function attributeGetter<C extends Component, T extends boolean | undefined>(
113
- options: Partial<AttributeOptions> & { type: typeof Boolean },
118
+ options: AttributeOptions & { type: typeof Boolean },
114
119
  ): ClassGetterDecoratorFunction<C, T>;
115
120
 
116
121
  // Getter with string type
117
122
  export function attributeGetter<C extends Component, T extends string | undefined>(
118
- options: Partial<AttributeOptions>,
123
+ options: AttributeOptions,
119
124
  ): ClassGetterDecoratorFunction<C, T>;
120
125
 
121
126
  // Getter with no options
@@ -134,17 +139,17 @@ export function attributeGetter<C extends Component, T>(
134
139
 
135
140
  // Setter with number type
136
141
  export function attributeSetter<C extends Component, T extends number | undefined>(
137
- options: Partial<AttributeOptions> & { type: typeof Number },
142
+ options: AttributeOptions & { type: typeof Number },
138
143
  ): ClassSetterDecoratorFunction<C, T>;
139
144
 
140
145
  // Setter with boolean type
141
146
  export function attributeSetter<C extends Component, T extends boolean | undefined>(
142
- options: Partial<AttributeOptions> & { type: typeof Boolean },
147
+ options: AttributeOptions & { type: typeof Boolean },
143
148
  ): ClassSetterDecoratorFunction<C, T>;
144
149
 
145
150
  // Setter with string type
146
151
  export function attributeSetter<C extends Component, T extends string | undefined>(
147
- options: Partial<AttributeOptions>,
152
+ options: AttributeOptions,
148
153
  ): ClassSetterDecoratorFunction<C, T>;
149
154
 
150
155
  // Setter with no options
@@ -163,17 +168,17 @@ export function attributeSetter<C extends Component, T>(
163
168
 
164
169
  // Accessor with number type
165
170
  export function attribute<C extends Component, T extends number | undefined>(
166
- options: Partial<AttributeOptions> & { type: typeof Number },
171
+ options: AttributeOptions & { type: typeof Number },
167
172
  ): ClassAccessorDecoratorFunction<C, T>;
168
173
 
169
174
  // Accessor with boolean type
170
175
  export function attribute<C extends Component, T extends boolean | undefined>(
171
- options: Partial<AttributeOptions> & { type: typeof Boolean },
176
+ options: AttributeOptions & { type: typeof Boolean },
172
177
  ): ClassAccessorDecoratorFunction<C, T>;
173
178
 
174
179
  // Accessor with string type
175
180
  export function attribute<C extends Component, T extends string | undefined>(
176
- options: Partial<AttributeOptions>,
181
+ options: AttributeOptions,
177
182
  ): ClassAccessorDecoratorFunction<C, T>;
178
183
 
179
184
  // Accessor with no options
@@ -183,7 +188,7 @@ export function attribute<C extends Component, T extends string | undefined>(
183
188
  ): ClassAccessorDecoratorResult<C, T>;
184
189
 
185
190
  export function attribute<C extends Component, T extends string | number | boolean | undefined>(
186
- valueOrOptions?: AttributeDecoratorTarget<C, T> | Partial<AttributeOptions>,
191
+ valueOrOptions?: AttributeDecoratorTarget<C, T> | AttributeOptions,
187
192
  context?: AttributeDecoratorContext<C, T>,
188
193
  ): AttributeDecoratorResult<C, T> | AttributeDecoratorFunction<C, T> {
189
194
  if (context !== undefined) {
@@ -206,96 +211,67 @@ export function attribute<C extends Component, T extends string | number | boole
206
211
  type: String,
207
212
  property: context.name,
208
213
  reactive: context.kind === "accessor",
209
- reflect: true,
214
+ reflect: context.kind === "accessor",
215
+ name: toKebabCase(context.name),
210
216
  },
211
- ...((valueOrOptions as AttributeConfig) ?? {}),
217
+ ...((valueOrOptions as AttributeOptions) ?? {}),
212
218
  };
213
219
  let attrs = context.metadata[attributeConfig] as Map<string, AttributeConfig>;
214
220
  if (attrs === undefined) {
215
221
  context.metadata[attributeConfig] = attrs = new Map();
216
222
  }
217
- const key = options.name ?? toKebabCase(context.name);
218
- 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);
219
232
 
220
233
  if (context.kind === "accessor") {
221
- return accessor(options, context, key, value as ClassAccessorDecoratorTarget<C, T>);
234
+ return accessor(options, context, value as ClassAccessorDecoratorTarget<C, T>);
222
235
  }
223
236
 
224
- // ensure getters/setters aren't configured as reactive
237
+ // ensure getters/setters aren't configured with reactive or reflect
225
238
  if (options.reactive) {
226
239
  throw new TypeError(
227
240
  `Getter/setter attributes cannot be declared with reactive: true (on ${JSON.stringify(context.name)})`,
228
241
  );
229
242
  }
230
243
 
231
- if (context.kind === "setter") {
232
- return setter(options, context, key, value as ClassSetterDecoratorTarget<C, T>);
233
- }
234
-
235
- if (context.kind === "getter") {
236
- return getter(options, context, key);
244
+ if (options.reflect) {
245
+ throw new TypeError(
246
+ `Getter/setter attributes cannot be declared with reflect: true (on ${JSON.stringify(context.name)})`,
247
+ );
237
248
  }
238
-
239
- assertNever(context);
240
249
  };
241
250
  }
242
251
 
243
252
  function syncAttribute<C extends Component, T>(
244
253
  target: C,
245
254
  options: AttributeConfig,
246
- key: string,
247
255
  value: T,
256
+ force: boolean = false,
248
257
  ) {
258
+ const key = present(options.name);
249
259
  const attributeValue = toAttribute(value, present(options.type));
250
- const oldValue = target.getAttribute(key);
251
- if (attributeValue !== oldValue) {
252
- if (attributeValue === null) {
253
- target.removeAttribute(key);
254
- } else {
255
- target.setAttribute(key, attributeValue);
256
- }
257
- }
258
- }
259
-
260
- function getter<C extends Component, T>(
261
- options: AttributeConfig,
262
- context: ClassGetterDecoratorContext<C, T>,
263
- key: string,
264
- ): ClassGetterDecoratorResult<C, T> {
265
- if (options.reflect) {
266
- context.addInitializer(function (this: C) {
267
- queueMicrotask(() => {
268
- syncAttribute(this, options, key, (this as any)[context.name]);
269
- });
270
- });
271
- }
272
- }
273
-
274
- function setter<C extends Component, T>(
275
- options: AttributeConfig,
276
- context: ClassSetterDecoratorContext<C, T>,
277
- key: string,
278
- value: ClassSetterDecoratorTarget<C, T>,
279
- ): ClassSetterDecoratorResult<C, T> {
280
- if (options.reflect) {
281
- return function set(this: C, newValue: T) {
282
- value.call(this, newValue);
283
- syncAttribute(this, options, key, (this as any)[context.name] as T);
284
- };
260
+ if (force || attributeValue !== target.getAttribute(key)) {
261
+ target.setAttributeQuietly(key, attributeValue);
285
262
  }
286
263
  }
287
264
 
288
265
  function accessor<C extends Component, T>(
289
266
  options: AttributeConfig,
290
267
  context: ClassAccessorDecoratorContext<C, T>,
291
- key: string,
292
268
  value: ClassAccessorDecoratorTarget<C, T>,
293
269
  ): ClassAccessorDecoratorResult<C, T> {
270
+ let initValue: Option<T> = None;
294
271
  const init = function init(this: C, value: T): T {
272
+ initValue = Some(value);
295
273
  if (options.reflect) {
296
- queueMicrotask(() => {
297
- syncAttribute(this, options, key, value);
298
- });
274
+ syncAttribute(this, options, value, true);
299
275
  }
300
276
  return value;
301
277
  };
@@ -303,7 +279,7 @@ function accessor<C extends Component, T>(
303
279
  if (options.reactive) {
304
280
  const getSig = (obj: object) =>
305
281
  signalForObject(obj, context.name, () =>
306
- Signal((value as ClassAccessorDecoratorTarget<unknown, T>).get.call(obj), {
282
+ Signal(initValue.unwrapExact(), {
307
283
  equals: Object.is,
308
284
  }),
309
285
  ) as Signal.State<T>;
@@ -314,7 +290,7 @@ function accessor<C extends Component, T>(
314
290
  set(newValue: T) {
315
291
  getSig(this).set(newValue);
316
292
  if (options.reflect) {
317
- syncAttribute(this, options, key, newValue);
293
+ syncAttribute(this, options, newValue);
318
294
  }
319
295
  },
320
296
  init,
@@ -327,7 +303,7 @@ function accessor<C extends Component, T>(
327
303
  set(newValue: T) {
328
304
  value.set.call(this, newValue);
329
305
  if (options.reflect) {
330
- syncAttribute(this, options, key, newValue);
306
+ syncAttribute(this, options, newValue);
331
307
  }
332
308
  },
333
309
  init,