microtags 0.0.5 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/meta.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "format": "esm"
18
18
  },
19
19
  "src/util.ts": {
20
- "bytes": 1451,
20
+ "bytes": 2210,
21
21
  "imports": [
22
22
  {
23
23
  "path": "<runtime>",
@@ -44,7 +44,7 @@
44
44
  "format": "esm"
45
45
  },
46
46
  "src/setup-context.ts": {
47
- "bytes": 2877,
47
+ "bytes": 3331,
48
48
  "imports": [
49
49
  {
50
50
  "path": "src/reactivity.ts",
@@ -65,7 +65,7 @@
65
65
  "format": "esm"
66
66
  },
67
67
  "src/factory.ts": {
68
- "bytes": 7090,
68
+ "bytes": 7082,
69
69
  "imports": [
70
70
  {
71
71
  "path": "src/reactivity.ts",
@@ -117,7 +117,7 @@
117
117
  "format": "esm"
118
118
  },
119
119
  "src/index.ts": {
120
- "bytes": 89,
120
+ "bytes": 134,
121
121
  "imports": [
122
122
  {
123
123
  "path": "src/reactivity.ts",
@@ -149,7 +149,7 @@
149
149
  "imports": [],
150
150
  "exports": [],
151
151
  "inputs": {},
152
- "bytes": 25428
152
+ "bytes": 26056
153
153
  },
154
154
  "dist/index.js": {
155
155
  "imports": [
@@ -158,7 +158,7 @@
158
158
  "kind": "import-statement"
159
159
  },
160
160
  {
161
- "path": "dist/chunk-E7ZGOHL3.js",
161
+ "path": "dist/chunk-P4QHFKTJ.js",
162
162
  "kind": "import-statement"
163
163
  },
164
164
  {
@@ -177,7 +177,7 @@
177
177
  "bytesInOutput": 0
178
178
  },
179
179
  "src/setup-context.ts": {
180
- "bytesInOutput": 1747
180
+ "bytesInOutput": 1999
181
181
  },
182
182
  "src/factory.ts": {
183
183
  "bytesInOutput": 3594
@@ -186,7 +186,7 @@
186
186
  "bytesInOutput": 3646
187
187
  }
188
188
  },
189
- "bytes": 9416
189
+ "bytes": 9668
190
190
  },
191
191
  "dist/render.js.map": {
192
192
  "imports": [],
@@ -287,7 +287,7 @@
287
287
  "dist/util.js": {
288
288
  "imports": [
289
289
  {
290
- "path": "dist/chunk-E7ZGOHL3.js",
290
+ "path": "dist/chunk-P4QHFKTJ.js",
291
291
  "kind": "import-statement"
292
292
  },
293
293
  {
@@ -300,19 +300,20 @@
300
300
  "coerceJson",
301
301
  "coerceNumber",
302
302
  "coerceString",
303
- "runCleanups"
303
+ "runCleanups",
304
+ "toAttributes"
304
305
  ],
305
306
  "entryPoint": "src/util.ts",
306
307
  "inputs": {},
307
- "bytes": 268
308
+ "bytes": 300
308
309
  },
309
- "dist/chunk-E7ZGOHL3.js.map": {
310
+ "dist/chunk-P4QHFKTJ.js.map": {
310
311
  "imports": [],
311
312
  "exports": [],
312
313
  "inputs": {},
313
- "bytes": 2135
314
+ "bytes": 3311
314
315
  },
315
- "dist/chunk-E7ZGOHL3.js": {
316
+ "dist/chunk-P4QHFKTJ.js": {
316
317
  "imports": [
317
318
  {
318
319
  "path": "dist/chunk-7QVYU63E.js",
@@ -324,14 +325,15 @@
324
325
  "coerceJson",
325
326
  "coerceNumber",
326
327
  "coerceString",
327
- "runCleanups"
328
+ "runCleanups",
329
+ "toAttributes"
328
330
  ],
329
331
  "inputs": {
330
332
  "src/util.ts": {
331
- "bytesInOutput": 759
333
+ "bytesInOutput": 1188
332
334
  }
333
335
  },
334
- "bytes": 956
336
+ "bytes": 1401
335
337
  },
336
338
  "dist/chunk-7QVYU63E.js.map": {
337
339
  "imports": [],
@@ -1,8 +1,8 @@
1
- import type { SetupContext, Cleanup, PropsSignals, PropDef } from './types.js';
1
+ import type { SetupContext, PropsSignals, PropDef } from './types.js';
2
2
  /**
3
3
  * Build the ctx object passed to a component's setup() callback.
4
4
  * The cleanups array is mutated in place so factory.ts can drain it
5
5
  * on disconnect without copying.
6
6
  */
7
- export declare function makeSetupContext<Props extends Record<string, PropDef> = Record<string, PropDef>>(host: HTMLElement, props: PropsSignals<Props>, refs: Record<string, Element | Element[]>, contexts: Record<string, unknown>, cleanups: Cleanup[]): SetupContext<Props, any, any>;
7
+ export declare function makeSetupContext<Props extends Record<string, PropDef> = Record<string, PropDef>>(host: HTMLElement, props: PropsSignals<Props>, refs: Record<string, Element | Element[]>, contexts: Record<string, unknown>, cleanups: (() => void)[]): SetupContext<Props, any, any>;
8
8
  //# sourceMappingURL=setup-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup-context.d.ts","sourceRoot":"","sources":["../src/setup-context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,YAAY,EACZ,OAAO,EAEP,YAAY,EACZ,OAAO,EAEV,MAAM,YAAY,CAAA;AAEnB;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC5B,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAE/D,IAAI,EAAC,WAAW,EAChB,KAAK,EAAC,YAAY,CAAC,KAAK,CAAC,EACzB,IAAI,EAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC,EACxC,QAAQ,EAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAC,OAAO,EAAE,GACpB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CA2E9B"}
1
+ {"version":3,"file":"setup-context.d.ts","sourceRoot":"","sources":["../src/setup-context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,YAAY,EAEZ,YAAY,EACZ,OAAO,EAEV,MAAM,YAAY,CAAA;AAEnB;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC5B,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAE/D,IAAI,EAAC,WAAW,EAChB,KAAK,EAAC,YAAY,CAAC,KAAK,CAAC,EACzB,IAAI,EAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC,EACxC,QAAQ,EAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAC,CAAC,MAAM,IAAI,CAAC,EAAE,GACzB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CA0F9B"}
package/dist/types.d.ts CHANGED
@@ -77,13 +77,19 @@ export interface MultipleRefDef<T extends HTMLElement = HTMLElement> extends Ref
77
77
  export type RefsMap<Defs extends Record<string, RefDef>> = {
78
78
  [K in keyof Defs]: Defs[K] extends MultipleRefDef<infer T> ? T[] : Defs[K] extends SingleRefDef<infer T> ? T : never;
79
79
  };
80
- /** A teardown function registered via ctx.onCleanup or ctx.on. */
81
- export type Cleanup = () => void;
82
80
  /** Options for ctx.bind. Omit `event` for a one-way binding. */
83
81
  export type BindOptions = {
84
82
  prop?: string;
85
83
  event?: string;
86
84
  };
85
+ /**
86
+ * A type-only helper that narrows `CustomEvent` to a specific `target`
87
+ * and `detail`. Combine with `HTMLElementEventMap` augmentation for
88
+ * app-wide type-safe events that flow through `ctx.emit` and `ctx.on`.
89
+ */
90
+ export type TypedEvent<T extends EventTarget, D = unknown> = CustomEvent<D> & {
91
+ target: T;
92
+ };
87
93
  /**
88
94
  * The setup context (ctx) passed to every component's setup() callback.
89
95
  * This is the shape declaration so factory.ts and define.ts can typecheck
@@ -106,11 +112,20 @@ export interface SetupContext<Props extends Record<string, PropDef> = Record<str
106
112
  /** Add a DOM event listener that is auto-removed on disconnect. */
107
113
  on<K extends keyof HTMLElementEventMap>(target: EventTarget, type: K, handler: (event: HTMLElementEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;
108
114
  on(target: EventTarget, type: string, handler: EventListener, options?: boolean | AddEventListenerOptions): void;
115
+ /**
116
+ * Dispatch an event from the host. Pass a pre-built `Event` to
117
+ * dispatch it as-is, or a name (plus optional `detail` and
118
+ * `CustomEventInit` options) to construct and dispatch a
119
+ * bubbling `CustomEvent`. Returns `dispatchEvent`'s result:
120
+ * `false` when a cancelable event had `preventDefault()` called.
121
+ */
122
+ emit(event: Event): boolean;
123
+ emit<D>(name: string, detail?: D, options?: Omit<CustomEventInit<D>, 'detail'>): boolean;
109
124
  /**
110
125
  * Run an alien-signals effect that auto-tracks the signals it reads.
111
126
  * The effect is auto-disposed on disconnect.
112
127
  */
113
- effect(fn: () => void | Cleanup): void;
128
+ effect(fn: () => void | (() => void)): void;
114
129
  /**
115
130
  * Bind a signal to a DOM element. The signal is the source of
116
131
  * truth: the element property is set from the signal on bind and
@@ -126,7 +141,7 @@ export interface SetupContext<Props extends Record<string, PropDef> = Record<str
126
141
  */
127
142
  bind<T>(signal: Signal<T>, element: Element, options?: BindOptions): void;
128
143
  /** Register custom teardown to run on disconnect. */
129
- onCleanup(fn: Cleanup): void;
144
+ onCleanup(fn: () => void): void;
130
145
  /** Read an optional context value. */
131
146
  consume<T>(token: ContextToken<T>): T | undefined;
132
147
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/util.cjs CHANGED
@@ -25,7 +25,8 @@ __export(util_exports, {
25
25
  coerceJson: () => coerceJson,
26
26
  coerceNumber: () => coerceNumber,
27
27
  coerceString: () => coerceString,
28
- runCleanups: () => runCleanups
28
+ runCleanups: () => runCleanups,
29
+ toAttributes: () => toAttributes
29
30
  });
30
31
  module.exports = __toCommonJS(util_exports);
31
32
  function coerceNumber(raw) {
@@ -65,4 +66,19 @@ function runCleanups(fns) {
65
66
  if (caught) throw firstError;
66
67
  }
67
68
  __name(runCleanups, "runCleanups");
69
+ function toAttributes(attrs) {
70
+ return Object.keys(attrs).reduce((acc, k) => {
71
+ const value = attrs[k];
72
+ if (!value) return acc;
73
+ if (typeof value === "boolean") {
74
+ if (value) return (acc + ` ${k}`).trim();
75
+ return acc;
76
+ }
77
+ if (Array.isArray(value)) {
78
+ return acc + ` ${k}="${value.join(" ")}"`;
79
+ }
80
+ return (acc + ` ${k}="${value}"`).trim();
81
+ }, "");
82
+ }
83
+ __name(toAttributes, "toAttributes");
68
84
  //# sourceMappingURL=util.cjs.map
package/dist/util.cjs.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/util.ts"],
4
- "sourcesContent": ["import type { Cleanup } from './types.js'\n\n/**\n * Coerce a raw attribute string to a number.\n * Returns NaN if the value cannot be parsed.\n */\nexport function coerceNumber (raw:string | null):number {\n return raw === null ? NaN : Number(raw)\n}\n\n/**\n * Coerce a raw attribute string to a string.\n * Converts null to empty string.\n */\nexport function coerceString (raw:string | null):string {\n return raw ?? ''\n}\n\n/**\n * Coerce a raw attribute string to a boolean.\n * Absence (null) is false; presence of any value (including '') is true.\n */\nexport function coerceBoolean (raw:string | null):boolean {\n return raw !== null\n}\n\n/**\n * Coerce a raw attribute string to a parsed JSON value.\n * Returns undefined if the value is null or cannot be parsed.\n */\nexport function coerceJson<T = unknown> (raw:string | null):T | undefined {\n if (raw === null) return undefined\n try {\n return JSON.parse(raw) as T\n } catch {\n return undefined\n }\n}\n\n/**\n * Run every cleanup in the list, ensuring all run even if some throw.\n * After all have run, re-throws the first error encountered.\n */\nexport function runCleanups (fns:Cleanup[]):void {\n let firstError:unknown\n let caught = false\n for (const fn of fns) {\n try {\n fn()\n } catch (err) {\n if (!caught) {\n firstError = err\n caught = true\n }\n }\n }\n if (caught) throw firstError\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,SAAS,aAAc,KAA0B;AACpD,SAAO,QAAQ,OAAO,MAAM,OAAO,GAAG;AAC1C;AAFgB;AAQT,SAAS,aAAc,KAA0B;AACpD,SAAO,OAAO;AAClB;AAFgB;AAQT,SAAS,cAAe,KAA2B;AACtD,SAAO,QAAQ;AACnB;AAFgB;AAQT,SAAS,WAAyB,KAAiC;AACtE,MAAI,QAAQ,KAAM,QAAO;AACzB,MAAI;AACA,WAAO,KAAK,MAAM,GAAG;AAAA,EACzB,QAAQ;AACJ,WAAO;AAAA,EACX;AACJ;AAPgB;AAaT,SAAS,YAAa,KAAoB;AAC7C,MAAI;AACJ,MAAI,SAAS;AACb,aAAW,MAAM,KAAK;AAClB,QAAI;AACA,SAAG;AAAA,IACP,SAAS,KAAK;AACV,UAAI,CAAC,QAAQ;AACT,qBAAa;AACb,iBAAS;AAAA,MACb;AAAA,IACJ;AAAA,EACJ;AACA,MAAI,OAAQ,OAAM;AACtB;AAdgB;",
4
+ "sourcesContent": ["/**\n * Coerce a raw attribute string to a number.\n * Returns NaN if the value cannot be parsed.\n */\nexport function coerceNumber (raw:string | null):number {\n return raw === null ? NaN : Number(raw)\n}\n\n/**\n * Coerce a raw attribute string to a string.\n * Converts null to empty string.\n */\nexport function coerceString (raw:string | null):string {\n return raw ?? ''\n}\n\n/**\n * Coerce a raw attribute string to a boolean.\n * Absence (null) is false; presence of any value (including '') is true.\n */\nexport function coerceBoolean (raw:string | null):boolean {\n return raw !== null\n}\n\n/**\n * Coerce a raw attribute string to a parsed JSON value.\n * Returns undefined if the value is null or cannot be parsed.\n */\nexport function coerceJson<T = unknown> (raw:string | null):T | undefined {\n if (raw === null) return undefined\n try {\n return JSON.parse(raw) as T\n } catch {\n return undefined\n }\n}\n\n/**\n * Run every cleanup in the list, ensuring all run even if some throw.\n * After all have run, re-throws the first error encountered.\n */\nexport function runCleanups (fns:(() => void)[]):void {\n let firstError:unknown\n let caught = false\n for (const fn of fns) {\n try {\n fn()\n } catch (err) {\n if (!caught) {\n firstError = err\n caught = true\n }\n }\n }\n if (caught) throw firstError\n}\n\nexport type Attrs = Record<string, undefined|null|string|number|boolean|(string|number)[]>\n\n/**\n * Transform an object into an HTML attributes string. The object should be\n * like `{ attributeName: value }`.\n *\n * @param {Attrs} attrs An object for the attributes.\n * @returns {string} A string suitable for use as HTML attributes.\n */\nexport function toAttributes (attrs:Attrs):string {\n return Object.keys(attrs).reduce((acc, k) => {\n const value = attrs[k]\n if (!value) return acc\n\n if (typeof value === 'boolean') {\n if (value) return (acc + ` ${k}`).trim()\n return acc\n }\n\n if (Array.isArray(value)) {\n return (acc + ` ${k}=\"${value.join(' ')}\"`)\n }\n\n return (acc + ` ${k}=\"${value}\"`).trim()\n }, '')\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIO,SAAS,aAAc,KAA0B;AACpD,SAAO,QAAQ,OAAO,MAAM,OAAO,GAAG;AAC1C;AAFgB;AAQT,SAAS,aAAc,KAA0B;AACpD,SAAO,OAAO;AAClB;AAFgB;AAQT,SAAS,cAAe,KAA2B;AACtD,SAAO,QAAQ;AACnB;AAFgB;AAQT,SAAS,WAAyB,KAAiC;AACtE,MAAI,QAAQ,KAAM,QAAO;AACzB,MAAI;AACA,WAAO,KAAK,MAAM,GAAG;AAAA,EACzB,QAAQ;AACJ,WAAO;AAAA,EACX;AACJ;AAPgB;AAaT,SAAS,YAAa,KAAyB;AAClD,MAAI;AACJ,MAAI,SAAS;AACb,aAAW,MAAM,KAAK;AAClB,QAAI;AACA,SAAG;AAAA,IACP,SAAS,KAAK;AACV,UAAI,CAAC,QAAQ;AACT,qBAAa;AACb,iBAAS;AAAA,MACb;AAAA,IACJ;AAAA,EACJ;AACA,MAAI,OAAQ,OAAM;AACtB;AAdgB;AAyBT,SAAS,aAAc,OAAoB;AAC9C,SAAO,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,KAAK,MAAM;AACzC,UAAM,QAAQ,MAAM,CAAC;AACrB,QAAI,CAAC,MAAO,QAAO;AAEnB,QAAI,OAAO,UAAU,WAAW;AAC5B,UAAI,MAAO,SAAQ,MAAM,IAAI,CAAC,IAAI,KAAK;AACvC,aAAO;AAAA,IACX;AAEA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,aAAQ,MAAM,IAAI,CAAC,KAAK,MAAM,KAAK,GAAG,CAAC;AAAA,IAC3C;AAEA,YAAQ,MAAM,IAAI,CAAC,KAAK,KAAK,KAAK,KAAK;AAAA,EAC3C,GAAG,EAAE;AACT;AAhBgB;",
6
6
  "names": []
7
7
  }
package/dist/util.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { Cleanup } from './types.js';
2
1
  /**
3
2
  * Coerce a raw attribute string to a number.
4
3
  * Returns NaN if the value cannot be parsed.
@@ -23,5 +22,14 @@ export declare function coerceJson<T = unknown>(raw: string | null): T | undefin
23
22
  * Run every cleanup in the list, ensuring all run even if some throw.
24
23
  * After all have run, re-throws the first error encountered.
25
24
  */
26
- export declare function runCleanups(fns: Cleanup[]): void;
25
+ export declare function runCleanups(fns: (() => void)[]): void;
26
+ export type Attrs = Record<string, undefined | null | string | number | boolean | (string | number)[]>;
27
+ /**
28
+ * Transform an object into an HTML attributes string. The object should be
29
+ * like `{ attributeName: value }`.
30
+ *
31
+ * @param {Attrs} attrs An object for the attributes.
32
+ * @returns {string} A string suitable for use as HTML attributes.
33
+ */
34
+ export declare function toAttributes(attrs: Attrs): string;
27
35
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC;;;GAGG;AACH,wBAAgB,YAAY,CAAE,GAAG,EAAC,MAAM,GAAG,IAAI,GAAE,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAE,GAAG,EAAC,MAAM,GAAG,IAAI,GAAE,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAE,GAAG,EAAC,MAAM,GAAG,IAAI,GAAE,OAAO,CAExD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAG,GAAG,EAAC,MAAM,GAAG,IAAI,GAAE,CAAC,GAAG,SAAS,CAOxE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAE,GAAG,EAAC,OAAO,EAAE,GAAE,IAAI,CAc/C"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,YAAY,CAAE,GAAG,EAAC,MAAM,GAAG,IAAI,GAAE,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAE,GAAG,EAAC,MAAM,GAAG,IAAI,GAAE,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAE,GAAG,EAAC,MAAM,GAAG,IAAI,GAAE,OAAO,CAExD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAG,GAAG,EAAC,MAAM,GAAG,IAAI,GAAE,CAAC,GAAG,SAAS,CAOxE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAE,GAAG,EAAC,CAAC,MAAM,IAAI,CAAC,EAAE,GAAE,IAAI,CAcpD;AAED,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAC,IAAI,GAAC,MAAM,GAAC,MAAM,GAAC,OAAO,GAAC,CAAC,MAAM,GAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAE1F;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAE,KAAK,EAAC,KAAK,GAAE,MAAM,CAgBhD"}
package/dist/util.js CHANGED
@@ -3,14 +3,16 @@ import {
3
3
  coerceJson,
4
4
  coerceNumber,
5
5
  coerceString,
6
- runCleanups
7
- } from "./chunk-E7ZGOHL3.js";
6
+ runCleanups,
7
+ toAttributes
8
+ } from "./chunk-P4QHFKTJ.js";
8
9
  import "./chunk-7QVYU63E.js";
9
10
  export {
10
11
  coerceBoolean,
11
12
  coerceJson,
12
13
  coerceNumber,
13
14
  coerceString,
14
- runCleanups
15
+ runCleanups,
16
+ toAttributes
15
17
  };
16
18
  //# sourceMappingURL=util.js.map
package/dist/util.min.js CHANGED
@@ -1,2 +1,2 @@
1
- var l=Object.defineProperty;var r=(n,e)=>l(n,"name",{value:e,configurable:!0});function c(n){return n===null?NaN:Number(n)}r(c,"coerceNumber");function f(n){return n??""}r(f,"coerceString");function s(n){return n!==null}r(s,"coerceBoolean");function p(n){if(n!==null)try{return JSON.parse(n)}catch{return}}r(p,"coerceJson");function a(n){let e,t=!1;for(let u of n)try{u()}catch(o){t||(e=o,t=!0)}if(t)throw e}r(a,"runCleanups");export{s as coerceBoolean,p as coerceJson,c as coerceNumber,f as coerceString,a as runCleanups};
1
+ var i=Object.defineProperty;var u=(r,n)=>i(r,"name",{value:n,configurable:!0});function f(r){return r===null?NaN:Number(r)}u(f,"coerceNumber");function s(r){return r??""}u(s,"coerceString");function c(r){return r!==null}u(c,"coerceBoolean");function d(r){if(r!==null)try{return JSON.parse(r)}catch{return}}u(d,"coerceJson");function g(r){let n,e=!1;for(let t of r)try{t()}catch(o){e||(n=o,e=!0)}if(e)throw n}u(g,"runCleanups");function p(r){return Object.keys(r).reduce((n,e)=>{let t=r[e];return t?typeof t=="boolean"?t?(n+` ${e}`).trim():n:Array.isArray(t)?n+` ${e}="${t.join(" ")}"`:(n+` ${e}="${t}"`).trim():n},"")}u(p,"toAttributes");export{c as coerceBoolean,d as coerceJson,f as coerceNumber,s as coerceString,g as runCleanups,p as toAttributes};
2
2
  //# sourceMappingURL=util.min.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/util.ts"],
4
- "sourcesContent": ["import type { Cleanup } from './types.js'\n\n/**\n * Coerce a raw attribute string to a number.\n * Returns NaN if the value cannot be parsed.\n */\nexport function coerceNumber (raw:string | null):number {\n return raw === null ? NaN : Number(raw)\n}\n\n/**\n * Coerce a raw attribute string to a string.\n * Converts null to empty string.\n */\nexport function coerceString (raw:string | null):string {\n return raw ?? ''\n}\n\n/**\n * Coerce a raw attribute string to a boolean.\n * Absence (null) is false; presence of any value (including '') is true.\n */\nexport function coerceBoolean (raw:string | null):boolean {\n return raw !== null\n}\n\n/**\n * Coerce a raw attribute string to a parsed JSON value.\n * Returns undefined if the value is null or cannot be parsed.\n */\nexport function coerceJson<T = unknown> (raw:string | null):T | undefined {\n if (raw === null) return undefined\n try {\n return JSON.parse(raw) as T\n } catch {\n return undefined\n }\n}\n\n/**\n * Run every cleanup in the list, ensuring all run even if some throw.\n * After all have run, re-throws the first error encountered.\n */\nexport function runCleanups (fns:Cleanup[]):void {\n let firstError:unknown\n let caught = false\n for (const fn of fns) {\n try {\n fn()\n } catch (err) {\n if (!caught) {\n firstError = err\n caught = true\n }\n }\n }\n if (caught) throw firstError\n}\n"],
5
- "mappings": "+EAMO,SAASA,EAAcC,EAA0B,CACpD,OAAOA,IAAQ,KAAO,IAAM,OAAOA,CAAG,CAC1C,CAFgBC,EAAAF,EAAA,gBAQT,SAASG,EAAcF,EAA0B,CACpD,OAAOA,GAAO,EAClB,CAFgBC,EAAAC,EAAA,gBAQT,SAASC,EAAeH,EAA2B,CACtD,OAAOA,IAAQ,IACnB,CAFgBC,EAAAE,EAAA,iBAQT,SAASC,EAAyBJ,EAAiC,CACtE,GAAIA,IAAQ,KACZ,GAAI,CACA,OAAO,KAAK,MAAMA,CAAG,CACzB,MAAQ,CACJ,MACJ,CACJ,CAPgBC,EAAAG,EAAA,cAaT,SAASC,EAAaC,EAAoB,CAC7C,IAAIC,EACAC,EAAS,GACb,QAAWC,KAAMH,EACb,GAAI,CACAG,EAAG,CACP,OAASC,EAAK,CACLF,IACDD,EAAaG,EACbF,EAAS,GAEjB,CAEJ,GAAIA,EAAQ,MAAMD,CACtB,CAdgBN,EAAAI,EAAA",
6
- "names": ["coerceNumber", "raw", "__name", "coerceString", "coerceBoolean", "coerceJson", "runCleanups", "fns", "firstError", "caught", "fn", "err"]
4
+ "sourcesContent": ["/**\n * Coerce a raw attribute string to a number.\n * Returns NaN if the value cannot be parsed.\n */\nexport function coerceNumber (raw:string | null):number {\n return raw === null ? NaN : Number(raw)\n}\n\n/**\n * Coerce a raw attribute string to a string.\n * Converts null to empty string.\n */\nexport function coerceString (raw:string | null):string {\n return raw ?? ''\n}\n\n/**\n * Coerce a raw attribute string to a boolean.\n * Absence (null) is false; presence of any value (including '') is true.\n */\nexport function coerceBoolean (raw:string | null):boolean {\n return raw !== null\n}\n\n/**\n * Coerce a raw attribute string to a parsed JSON value.\n * Returns undefined if the value is null or cannot be parsed.\n */\nexport function coerceJson<T = unknown> (raw:string | null):T | undefined {\n if (raw === null) return undefined\n try {\n return JSON.parse(raw) as T\n } catch {\n return undefined\n }\n}\n\n/**\n * Run every cleanup in the list, ensuring all run even if some throw.\n * After all have run, re-throws the first error encountered.\n */\nexport function runCleanups (fns:(() => void)[]):void {\n let firstError:unknown\n let caught = false\n for (const fn of fns) {\n try {\n fn()\n } catch (err) {\n if (!caught) {\n firstError = err\n caught = true\n }\n }\n }\n if (caught) throw firstError\n}\n\nexport type Attrs = Record<string, undefined|null|string|number|boolean|(string|number)[]>\n\n/**\n * Transform an object into an HTML attributes string. The object should be\n * like `{ attributeName: value }`.\n *\n * @param {Attrs} attrs An object for the attributes.\n * @returns {string} A string suitable for use as HTML attributes.\n */\nexport function toAttributes (attrs:Attrs):string {\n return Object.keys(attrs).reduce((acc, k) => {\n const value = attrs[k]\n if (!value) return acc\n\n if (typeof value === 'boolean') {\n if (value) return (acc + ` ${k}`).trim()\n return acc\n }\n\n if (Array.isArray(value)) {\n return (acc + ` ${k}=\"${value.join(' ')}\"`)\n }\n\n return (acc + ` ${k}=\"${value}\"`).trim()\n }, '')\n}\n"],
5
+ "mappings": "+EAIO,SAASA,EAAcC,EAA0B,CACpD,OAAOA,IAAQ,KAAO,IAAM,OAAOA,CAAG,CAC1C,CAFgBC,EAAAF,EAAA,gBAQT,SAASG,EAAcF,EAA0B,CACpD,OAAOA,GAAO,EAClB,CAFgBC,EAAAC,EAAA,gBAQT,SAASC,EAAeH,EAA2B,CACtD,OAAOA,IAAQ,IACnB,CAFgBC,EAAAE,EAAA,iBAQT,SAASC,EAAyBJ,EAAiC,CACtE,GAAIA,IAAQ,KACZ,GAAI,CACA,OAAO,KAAK,MAAMA,CAAG,CACzB,MAAQ,CACJ,MACJ,CACJ,CAPgBC,EAAAG,EAAA,cAaT,SAASC,EAAaC,EAAyB,CAClD,IAAIC,EACAC,EAAS,GACb,QAAWC,KAAMH,EACb,GAAI,CACAG,EAAG,CACP,OAASC,EAAK,CACLF,IACDD,EAAaG,EACbF,EAAS,GAEjB,CAEJ,GAAIA,EAAQ,MAAMD,CACtB,CAdgBN,EAAAI,EAAA,eAyBT,SAASM,EAAcC,EAAoB,CAC9C,OAAO,OAAO,KAAKA,CAAK,EAAE,OAAO,CAACC,EAAKC,IAAM,CACzC,IAAMC,EAAQH,EAAME,CAAC,EACrB,OAAKC,EAED,OAAOA,GAAU,UACbA,GAAeF,EAAM,IAAIC,CAAC,IAAI,KAAK,EAChCD,EAGP,MAAM,QAAQE,CAAK,EACXF,EAAM,IAAIC,CAAC,KAAKC,EAAM,KAAK,GAAG,CAAC,KAGnCF,EAAM,IAAIC,CAAC,KAAKC,CAAK,KAAK,KAAK,EAXpBF,CAYvB,EAAG,EAAE,CACT,CAhBgBZ,EAAAU,EAAA",
6
+ "names": ["coerceNumber", "raw", "__name", "coerceString", "coerceBoolean", "coerceJson", "runCleanups", "fns", "firstError", "caught", "fn", "err", "toAttributes", "attrs", "acc", "k", "value"]
7
7
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "microtags",
3
3
  "type": "module",
4
- "version": "0.0.5",
4
+ "version": "0.0.9",
5
5
  "sideEffects": [
6
6
  "./example/**"
7
7
  ],
@@ -23,11 +23,12 @@
23
23
  "build": "mkdir -p ./dist && rm -rf ./dist/* && npm run build-cjs && npm run build-esm && npm run build-esm:min",
24
24
  "build-html": "npm run --silent ssr > example/index.html",
25
25
  "size": "size-limit",
26
+ "inject-size": "esbuild ./scripts/inject-size.ts --bundle --platform=node --format=cjs | node",
26
27
  "start": "npm run build-html && vite",
27
28
  "ssr": "esbuild ./example/ssr.ts --bundle --platform=node --format=cjs | node ",
28
29
  "toc": "markdown-toc --maxdepth 4 -i README.md",
29
30
  "preversion": "npm run lint",
30
- "version": "npm run toc && auto-changelog -p --template keepachangelog --breaking-pattern 'BREAKING CHANGE:' && git add CHANGELOG.md README.md",
31
+ "version": "npm run toc && auto-changelog -p --template keepachangelog --breaking-pattern 'BREAKING CHANGE:' && npm run inject-size && git add CHANGELOG.md README.md",
31
32
  "postversion": "git push --follow-tags && npm publish",
32
33
  "prepublishOnly": "npm run build"
33
34
  },
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/util.ts"],
4
- "sourcesContent": ["import type { Cleanup } from './types.js'\n\n/**\n * Coerce a raw attribute string to a number.\n * Returns NaN if the value cannot be parsed.\n */\nexport function coerceNumber (raw:string | null):number {\n return raw === null ? NaN : Number(raw)\n}\n\n/**\n * Coerce a raw attribute string to a string.\n * Converts null to empty string.\n */\nexport function coerceString (raw:string | null):string {\n return raw ?? ''\n}\n\n/**\n * Coerce a raw attribute string to a boolean.\n * Absence (null) is false; presence of any value (including '') is true.\n */\nexport function coerceBoolean (raw:string | null):boolean {\n return raw !== null\n}\n\n/**\n * Coerce a raw attribute string to a parsed JSON value.\n * Returns undefined if the value is null or cannot be parsed.\n */\nexport function coerceJson<T = unknown> (raw:string | null):T | undefined {\n if (raw === null) return undefined\n try {\n return JSON.parse(raw) as T\n } catch {\n return undefined\n }\n}\n\n/**\n * Run every cleanup in the list, ensuring all run even if some throw.\n * After all have run, re-throws the first error encountered.\n */\nexport function runCleanups (fns:Cleanup[]):void {\n let firstError:unknown\n let caught = false\n for (const fn of fns) {\n try {\n fn()\n } catch (err) {\n if (!caught) {\n firstError = err\n caught = true\n }\n }\n }\n if (caught) throw firstError\n}\n"],
5
- "mappings": ";;;;;AAMO,SAAS,aAAc,KAA0B;AACpD,SAAO,QAAQ,OAAO,MAAM,OAAO,GAAG;AAC1C;AAFgB;AAQT,SAAS,aAAc,KAA0B;AACpD,SAAO,OAAO;AAClB;AAFgB;AAQT,SAAS,cAAe,KAA2B;AACtD,SAAO,QAAQ;AACnB;AAFgB;AAQT,SAAS,WAAyB,KAAiC;AACtE,MAAI,QAAQ,KAAM,QAAO;AACzB,MAAI;AACA,WAAO,KAAK,MAAM,GAAG;AAAA,EACzB,QAAQ;AACJ,WAAO;AAAA,EACX;AACJ;AAPgB;AAaT,SAAS,YAAa,KAAoB;AAC7C,MAAI;AACJ,MAAI,SAAS;AACb,aAAW,MAAM,KAAK;AAClB,QAAI;AACA,SAAG;AAAA,IACP,SAAS,KAAK;AACV,UAAI,CAAC,QAAQ;AACT,qBAAa;AACb,iBAAS;AAAA,MACb;AAAA,IACJ;AAAA,EACJ;AACA,MAAI,OAAQ,OAAM;AACtB;AAdgB;",
6
- "names": []
7
- }