@zero-dependency/dom 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es.js CHANGED
@@ -11,17 +11,20 @@ function a(n, e, t = document.body) {
11
11
  subtree: !0
12
12
  }), r;
13
13
  }
14
- function m(n, e) {
14
+ function m(n, e = document.body) {
15
15
  return new Promise((t) => {
16
- const r = document.querySelector(n);
17
- r && t(r);
18
- const s = a(
19
- n,
20
- (o) => {
21
- s.disconnect(), t(o);
22
- },
23
- e
24
- );
16
+ const r = e.querySelector(n);
17
+ if (r)
18
+ t(r);
19
+ else {
20
+ const s = a(
21
+ n,
22
+ (o) => {
23
+ s.disconnect(), t(o);
24
+ },
25
+ e
26
+ );
27
+ }
25
28
  });
26
29
  }
27
30
  async function h() {
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/observeElement.ts","../src/waitObserveElement.ts","../src/domReady.ts","../src/debounce.ts","../src/html.ts","../src/fetcher.ts"],"sourcesContent":["export function observeElement<T extends Element = Element>(\n selector: string,\n callback: (el: T) => void,\n target: Node = document.body\n): MutationObserver {\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n const el = mutation.target as T\n if (el.matches?.(selector)) {\n callback(el)\n }\n }\n })\n\n observer.observe(target, {\n attributes: true,\n childList: true,\n subtree: true\n })\n\n return observer\n}\n","import { observeElement } from './observeElement.js'\n\nexport function waitObserveElement<T extends Element = Element>(\n selector: string,\n target?: Node\n): Promise<T> {\n return new Promise((resolve) => {\n const el = document.querySelector<T>(selector)\n if (el) {\n resolve(el)\n }\n\n const observer = observeElement<T>(\n selector,\n (el) => {\n observer.disconnect()\n resolve(el)\n },\n target\n )\n })\n}\n","export async function domReady(): Promise<void> {\n if (document.readyState == 'loading') {\n return new Promise((resolve) => {\n document.addEventListener('DOMContentLoaded', () => resolve(), {\n once: true\n })\n })\n }\n}\n","export function debounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 500\n): (this: ThisParameterType<T>, ...args: Parameters<T>) => void {\n let timeoutId: ReturnType<typeof setTimeout>\n\n return (...args) => {\n if (timeoutId) {\n clearTimeout(timeoutId)\n }\n\n timeoutId = setTimeout(() => {\n fn(...args)\n }, delay)\n }\n}\n","// prettier-ignore\ntype Attributes<T extends keyof HTMLElementTagNameMap> = Partial<{\n style: Partial<CSSStyleDeclaration>\n} & Omit<HTMLElementTagNameMap[T], 'style'>>\n\ntype Children = (string | Node | HTMLElement)[]\n\nexport function el<T extends keyof HTMLElementTagNameMap>(\n tag: T,\n attributes?: Children | Attributes<T>,\n ...children: Children\n): HTMLElementTagNameMap[T] {\n const el = document.createElement(tag)\n if (Array.isArray(attributes)) {\n el.append(...attributes)\n } else {\n Object.assign(el, attributes)\n el.append(...children)\n }\n\n return el\n}\n\nexport function text(str: string): Text {\n return document.createTextNode(str)\n}\n\nexport function nbsp(): Text {\n return text('\\u00a0')\n}\n","interface FetcherInit\n extends Pick<\n RequestInit,\n 'headers' | 'credentials' | 'mode' | 'cache' | 'redirect' | 'referrerPolicy'\n > {}\n\ninterface FetcherRequest extends Omit<RequestInit, 'method'> {}\n\ntype RequestMethods = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n\nexport class Fetcher {\n constructor(\n private readonly baseURL: string,\n private readonly baseInit: FetcherInit\n ) {}\n\n async request<T>(\n path: string,\n init: FetcherRequest & { method: RequestMethods }\n ): Promise<T> {\n const url = new URL(path, this.baseURL)\n return await fetcher<T>(url, { ...this.baseInit, ...init })\n }\n\n async get<T>(path: string, init?: FetcherRequest): Promise<T> {\n return await this.request(path, { ...init, method: 'GET' })\n }\n\n async post<T>(path: string, init?: FetcherRequest): Promise<T> {\n return await this.request(path, { ...init, method: 'POST' })\n }\n}\n\nexport async function fetcher<T = unknown>(\n ...args: Parameters<typeof fetch>\n): Promise<T> {\n const response = await fetch(...args)\n const data = (await response.json()) as T\n\n if (response.ok) {\n return data\n }\n\n throw new FetcherError({\n response,\n data\n })\n}\n\nexport class FetcherError<T> extends Error {\n response: Response\n data: T\n\n constructor({ response, data }: { response: Response; data: T }) {\n super(response.statusText)\n\n this.name = 'FetcherError'\n this.response = response\n this.data = data\n }\n}\n"],"names":["observeElement","selector","callback","target","observer","mutations","mutation","el","waitObserveElement","resolve","domReady","debounce","fn","delay","timeoutId","args","tag","attributes","children","text","str","nbsp","Fetcher","baseURL","baseInit","path","init","url","fetcher","response","data","FetcherError"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/observeElement.ts","../src/waitObserveElement.ts","../src/domReady.ts","../src/debounce.ts","../src/html.ts","../src/fetcher.ts"],"sourcesContent":["export function observeElement<T extends Element = Element>(\n selector: string,\n callback: (el: T) => void,\n target = document.body\n): MutationObserver {\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n const el = mutation.target as T\n if (el.matches?.(selector)) {\n callback(el)\n }\n }\n })\n\n observer.observe(target, {\n attributes: true,\n childList: true,\n subtree: true\n })\n\n return observer\n}\n","import { observeElement } from './observeElement.js'\n\nexport function waitObserveElement<T extends Element = Element>(\n selector: string,\n target = document.body\n): Promise<T> {\n return new Promise((resolve) => {\n const el = target.querySelector<T>(selector)\n if (el) {\n resolve(el)\n } else {\n const observer = observeElement<T>(\n selector,\n (el) => {\n observer.disconnect()\n resolve(el)\n },\n target\n )\n }\n })\n}\n","export async function domReady(): Promise<void> {\n if (document.readyState == 'loading') {\n return new Promise((resolve) => {\n document.addEventListener('DOMContentLoaded', () => resolve(), {\n once: true\n })\n })\n }\n}\n","export function debounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 500\n): (this: ThisParameterType<T>, ...args: Parameters<T>) => void {\n let timeoutId: ReturnType<typeof setTimeout>\n\n return (...args) => {\n if (timeoutId) {\n clearTimeout(timeoutId)\n }\n\n timeoutId = setTimeout(() => {\n fn(...args)\n }, delay)\n }\n}\n","// prettier-ignore\ntype Attributes<T extends keyof HTMLElementTagNameMap> = Partial<{\n style: Partial<CSSStyleDeclaration>\n} & Omit<HTMLElementTagNameMap[T], 'style'>>\n\ntype Children = (string | Node | HTMLElement)[]\n\nexport function el<T extends keyof HTMLElementTagNameMap>(\n tag: T,\n attributes?: Children | Attributes<T>,\n ...children: Children\n): HTMLElementTagNameMap[T] {\n const el = document.createElement(tag)\n if (Array.isArray(attributes)) {\n el.append(...attributes)\n } else {\n Object.assign(el, attributes)\n el.append(...children)\n }\n\n return el\n}\n\nexport function text(str: string): Text {\n return document.createTextNode(str)\n}\n\nexport function nbsp(): Text {\n return text('\\u00a0')\n}\n","interface FetcherInit\n extends Pick<\n RequestInit,\n 'headers' | 'credentials' | 'mode' | 'cache' | 'redirect' | 'referrerPolicy'\n > {}\n\ninterface FetcherRequest extends Omit<RequestInit, 'method'> {}\n\ntype RequestMethods = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n\nexport class Fetcher {\n constructor(\n private readonly baseURL: string,\n private readonly baseInit: FetcherInit\n ) {}\n\n async request<T>(\n path: string,\n init: FetcherRequest & { method: RequestMethods }\n ): Promise<T> {\n const url = new URL(path, this.baseURL)\n return await fetcher<T>(url, { ...this.baseInit, ...init })\n }\n\n async get<T>(path: string, init?: FetcherRequest): Promise<T> {\n return await this.request(path, { ...init, method: 'GET' })\n }\n\n async post<T>(path: string, init?: FetcherRequest): Promise<T> {\n return await this.request(path, { ...init, method: 'POST' })\n }\n}\n\nexport async function fetcher<T = unknown>(\n ...args: Parameters<typeof fetch>\n): Promise<T> {\n const response = await fetch(...args)\n const data = (await response.json()) as T\n\n if (response.ok) {\n return data\n }\n\n throw new FetcherError({\n response,\n data\n })\n}\n\nexport class FetcherError<T> extends Error {\n response: Response\n data: T\n\n constructor({ response, data }: { response: Response; data: T }) {\n super(response.statusText)\n\n this.name = 'FetcherError'\n this.response = response\n this.data = data\n }\n}\n"],"names":["observeElement","selector","callback","target","observer","mutations","mutation","el","waitObserveElement","resolve","domReady","debounce","fn","delay","timeoutId","args","tag","attributes","children","text","str","nbsp","Fetcher","baseURL","baseInit","path","init","url","fetcher","response","data","FetcherError"],"mappings":"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"}
package/dist/index.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- (function(r,s){typeof exports=="object"&&typeof module<"u"?s(exports):typeof define=="function"&&define.amd?define(["exports"],s):(r=typeof globalThis<"u"?globalThis:r||self,s(r["@zero-dependency/dom"]={}))})(this,function(r){"use strict";function s(n,e,t=document.body){const o=new MutationObserver(i=>{for(const c of i){const f=c.target;f.matches?.(n)&&e(f)}});return o.observe(t,{attributes:!0,childList:!0,subtree:!0}),o}function m(n,e){return new Promise(t=>{const o=document.querySelector(n);o&&t(o);const i=s(n,c=>{i.disconnect(),t(c)},e)})}async function h(){if(document.readyState=="loading")return new Promise(n=>{document.addEventListener("DOMContentLoaded",()=>n(),{once:!0})})}function l(n,e=500){let t;return(...o)=>{t&&clearTimeout(t),t=setTimeout(()=>{n(...o)},e)}}function b(n,e,...t){const o=document.createElement(n);return Array.isArray(e)?o.append(...e):(Object.assign(o,e),o.append(...t)),o}function u(n){return document.createTextNode(n)}function y(){return u("\xA0")}class w{constructor(e,t){this.baseURL=e,this.baseInit=t}async request(e,t){const o=new URL(e,this.baseURL);return await a(o,{...this.baseInit,...t})}async get(e,t){return await this.request(e,{...t,method:"GET"})}async post(e,t){return await this.request(e,{...t,method:"POST"})}}async function a(...n){const e=await fetch(...n),t=await e.json();if(e.ok)return t;throw new d({response:e,data:t})}class d extends Error{response;data;constructor({response:e,data:t}){super(e.statusText),this.name="FetcherError",this.response=e,this.data=t}}r.Fetcher=w,r.FetcherError=d,r.debounce=l,r.domReady=h,r.el=b,r.fetcher=a,r.nbsp=y,r.observeElement=s,r.text=u,r.waitObserveElement=m,Object.defineProperties(r,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
1
+ (function(r,s){typeof exports=="object"&&typeof module<"u"?s(exports):typeof define=="function"&&define.amd?define(["exports"],s):(r=typeof globalThis<"u"?globalThis:r||self,s(r["@zero-dependency/dom"]={}))})(this,function(r){"use strict";function s(n,e,t=document.body){const o=new MutationObserver(i=>{for(const c of i){const f=c.target;f.matches?.(n)&&e(f)}});return o.observe(t,{attributes:!0,childList:!0,subtree:!0}),o}function m(n,e=document.body){return new Promise(t=>{const o=e.querySelector(n);if(o)t(o);else{const i=s(n,c=>{i.disconnect(),t(c)},e)}})}async function h(){if(document.readyState=="loading")return new Promise(n=>{document.addEventListener("DOMContentLoaded",()=>n(),{once:!0})})}function l(n,e=500){let t;return(...o)=>{t&&clearTimeout(t),t=setTimeout(()=>{n(...o)},e)}}function b(n,e,...t){const o=document.createElement(n);return Array.isArray(e)?o.append(...e):(Object.assign(o,e),o.append(...t)),o}function u(n){return document.createTextNode(n)}function y(){return u("\xA0")}class w{constructor(e,t){this.baseURL=e,this.baseInit=t}async request(e,t){const o=new URL(e,this.baseURL);return await a(o,{...this.baseInit,...t})}async get(e,t){return await this.request(e,{...t,method:"GET"})}async post(e,t){return await this.request(e,{...t,method:"POST"})}}async function a(...n){const e=await fetch(...n),t=await e.json();if(e.ok)return t;throw new d({response:e,data:t})}class d extends Error{response;data;constructor({response:e,data:t}){super(e.statusText),this.name="FetcherError",this.response=e,this.data=t}}r.Fetcher=w,r.FetcherError=d,r.debounce=l,r.domReady=h,r.el=b,r.fetcher=a,r.nbsp=y,r.observeElement=s,r.text=u,r.waitObserveElement=m,Object.defineProperties(r,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
2
2
  //# sourceMappingURL=index.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/observeElement.ts","../src/waitObserveElement.ts","../src/domReady.ts","../src/debounce.ts","../src/html.ts","../src/fetcher.ts"],"sourcesContent":["export function observeElement<T extends Element = Element>(\n selector: string,\n callback: (el: T) => void,\n target: Node = document.body\n): MutationObserver {\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n const el = mutation.target as T\n if (el.matches?.(selector)) {\n callback(el)\n }\n }\n })\n\n observer.observe(target, {\n attributes: true,\n childList: true,\n subtree: true\n })\n\n return observer\n}\n","import { observeElement } from './observeElement.js'\n\nexport function waitObserveElement<T extends Element = Element>(\n selector: string,\n target?: Node\n): Promise<T> {\n return new Promise((resolve) => {\n const el = document.querySelector<T>(selector)\n if (el) {\n resolve(el)\n }\n\n const observer = observeElement<T>(\n selector,\n (el) => {\n observer.disconnect()\n resolve(el)\n },\n target\n )\n })\n}\n","export async function domReady(): Promise<void> {\n if (document.readyState == 'loading') {\n return new Promise((resolve) => {\n document.addEventListener('DOMContentLoaded', () => resolve(), {\n once: true\n })\n })\n }\n}\n","export function debounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 500\n): (this: ThisParameterType<T>, ...args: Parameters<T>) => void {\n let timeoutId: ReturnType<typeof setTimeout>\n\n return (...args) => {\n if (timeoutId) {\n clearTimeout(timeoutId)\n }\n\n timeoutId = setTimeout(() => {\n fn(...args)\n }, delay)\n }\n}\n","// prettier-ignore\ntype Attributes<T extends keyof HTMLElementTagNameMap> = Partial<{\n style: Partial<CSSStyleDeclaration>\n} & Omit<HTMLElementTagNameMap[T], 'style'>>\n\ntype Children = (string | Node | HTMLElement)[]\n\nexport function el<T extends keyof HTMLElementTagNameMap>(\n tag: T,\n attributes?: Children | Attributes<T>,\n ...children: Children\n): HTMLElementTagNameMap[T] {\n const el = document.createElement(tag)\n if (Array.isArray(attributes)) {\n el.append(...attributes)\n } else {\n Object.assign(el, attributes)\n el.append(...children)\n }\n\n return el\n}\n\nexport function text(str: string): Text {\n return document.createTextNode(str)\n}\n\nexport function nbsp(): Text {\n return text('\\u00a0')\n}\n","interface FetcherInit\n extends Pick<\n RequestInit,\n 'headers' | 'credentials' | 'mode' | 'cache' | 'redirect' | 'referrerPolicy'\n > {}\n\ninterface FetcherRequest extends Omit<RequestInit, 'method'> {}\n\ntype RequestMethods = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n\nexport class Fetcher {\n constructor(\n private readonly baseURL: string,\n private readonly baseInit: FetcherInit\n ) {}\n\n async request<T>(\n path: string,\n init: FetcherRequest & { method: RequestMethods }\n ): Promise<T> {\n const url = new URL(path, this.baseURL)\n return await fetcher<T>(url, { ...this.baseInit, ...init })\n }\n\n async get<T>(path: string, init?: FetcherRequest): Promise<T> {\n return await this.request(path, { ...init, method: 'GET' })\n }\n\n async post<T>(path: string, init?: FetcherRequest): Promise<T> {\n return await this.request(path, { ...init, method: 'POST' })\n }\n}\n\nexport async function fetcher<T = unknown>(\n ...args: Parameters<typeof fetch>\n): Promise<T> {\n const response = await fetch(...args)\n const data = (await response.json()) as T\n\n if (response.ok) {\n return data\n }\n\n throw new FetcherError({\n response,\n data\n })\n}\n\nexport class FetcherError<T> extends Error {\n response: Response\n data: T\n\n constructor({ response, data }: { response: Response; data: T }) {\n super(response.statusText)\n\n this.name = 'FetcherError'\n this.response = response\n this.data = data\n }\n}\n"],"names":["observeElement","selector","callback","target","observer","mutations","mutation","el","waitObserveElement","resolve","domReady","debounce","fn","delay","timeoutId","args","tag","attributes","children","text","str","nbsp","Fetcher","baseURL","baseInit","path","init","url","fetcher","response","data","FetcherError"],"mappings":"+OAAO,SAASA,EACdC,EACAC,EACAC,EAAe,SAAS,KACN,CAClB,MAAMC,EAAW,IAAI,iBAAkBC,GAAc,CACnD,UAAWC,KAAYD,EAAW,CAChC,MAAME,EAAKD,EAAS,OAChBC,EAAG,UAAUN,CAAQ,GACvBC,EAASK,CAAE,CAEf,CAAA,CACD,EAED,OAAAH,EAAS,QAAQD,EAAQ,CACvB,WAAY,GACZ,UAAW,GACX,QAAS,EAAA,CACV,EAEMC,CACT,CCnBgB,SAAAI,EACdP,EACAE,EACY,CACL,OAAA,IAAI,QAASM,GAAY,CACxB,MAAAF,EAAK,SAAS,cAAiBN,CAAQ,EACzCM,GACFE,EAAQF,CAAE,EAGZ,MAAMH,EAAWJ,EACfC,EACCM,GAAO,CACNH,EAAS,WAAW,EACpBK,EAAQF,CAAE,CACZ,EACAJ,CAAA,CACF,CACD,CACH,CCrBA,eAAsBO,GAA0B,CAC1C,GAAA,SAAS,YAAc,UAClB,OAAA,IAAI,QAASD,GAAY,CAC9B,SAAS,iBAAiB,mBAAoB,IAAMA,EAAA,EAAW,CAC7D,KAAM,EAAA,CACP,CAAA,CACF,CAEL,CCRgB,SAAAE,EACdC,EACAC,EAAQ,IACsD,CAC1D,IAAAC,EAEJ,MAAO,IAAIC,IAAS,CACdD,GACF,aAAaA,CAAS,EAGxBA,EAAY,WAAW,IAAM,CAC3BF,EAAG,GAAGG,CAAI,GACTF,CAAK,CAAA,CAEZ,CCRgB,SAAAN,EACdS,EACAC,KACGC,EACuB,CACpBX,MAAAA,EAAK,SAAS,cAAcS,CAAG,EACjC,OAAA,MAAM,QAAQC,CAAU,EAC1BV,EAAG,OAAO,GAAGU,CAAU,GAEhB,OAAA,OAAOV,EAAIU,CAAU,EAC5BV,EAAG,OAAO,GAAGW,CAAQ,GAGhBX,CACT,CAEO,SAASY,EAAKC,EAAmB,CAC/B,OAAA,SAAS,eAAeA,CAAG,CACpC,CAEO,SAASC,GAAa,CAC3B,OAAOF,EAAK,MAAQ,CACtB,CCnBO,MAAMG,CAAQ,CACnB,YACmBC,EACAC,EACjB,CAFiB,KAAA,QAAAD,EACA,KAAA,SAAAC,CAChB,CAEH,MAAM,QACJC,EACAC,EACY,CACZ,MAAMC,EAAM,IAAI,IAAIF,EAAM,KAAK,OAAO,EAC/B,OAAA,MAAMG,EAAWD,EAAK,CAAE,GAAG,KAAK,SAAU,GAAGD,CAAA,CAAM,CAC5D,CAEA,MAAM,IAAOD,EAAcC,EAAmC,CACrD,OAAA,MAAM,KAAK,QAAQD,EAAM,CAAE,GAAGC,EAAM,OAAQ,KAAA,CAAO,CAC5D,CAEA,MAAM,KAAQD,EAAcC,EAAmC,CACtD,OAAA,MAAM,KAAK,QAAQD,EAAM,CAAE,GAAGC,EAAM,OAAQ,MAAA,CAAQ,CAC7D,CACF,CAEA,eAAsBE,KACjBb,EACS,CACZ,MAAMc,EAAW,MAAM,MAAM,GAAGd,CAAI,EAC9Be,EAAQ,MAAMD,EAAS,OAE7B,GAAIA,EAAS,GACJ,OAAAC,EAGT,MAAM,IAAIC,EAAa,CACrB,SAAAF,EACA,KAAAC,CAAA,CACD,CACH,CAEO,MAAMC,UAAwB,KAAM,CACzC,SACA,KAEA,YAAY,CAAE,SAAAF,EAAU,KAAAC,GAAyC,CAC/D,MAAMD,EAAS,UAAU,EAEzB,KAAK,KAAO,eACZ,KAAK,SAAWA,EAChB,KAAK,KAAOC,CACd,CACF"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/observeElement.ts","../src/waitObserveElement.ts","../src/domReady.ts","../src/debounce.ts","../src/html.ts","../src/fetcher.ts"],"sourcesContent":["export function observeElement<T extends Element = Element>(\n selector: string,\n callback: (el: T) => void,\n target = document.body\n): MutationObserver {\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n const el = mutation.target as T\n if (el.matches?.(selector)) {\n callback(el)\n }\n }\n })\n\n observer.observe(target, {\n attributes: true,\n childList: true,\n subtree: true\n })\n\n return observer\n}\n","import { observeElement } from './observeElement.js'\n\nexport function waitObserveElement<T extends Element = Element>(\n selector: string,\n target = document.body\n): Promise<T> {\n return new Promise((resolve) => {\n const el = target.querySelector<T>(selector)\n if (el) {\n resolve(el)\n } else {\n const observer = observeElement<T>(\n selector,\n (el) => {\n observer.disconnect()\n resolve(el)\n },\n target\n )\n }\n })\n}\n","export async function domReady(): Promise<void> {\n if (document.readyState == 'loading') {\n return new Promise((resolve) => {\n document.addEventListener('DOMContentLoaded', () => resolve(), {\n once: true\n })\n })\n }\n}\n","export function debounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 500\n): (this: ThisParameterType<T>, ...args: Parameters<T>) => void {\n let timeoutId: ReturnType<typeof setTimeout>\n\n return (...args) => {\n if (timeoutId) {\n clearTimeout(timeoutId)\n }\n\n timeoutId = setTimeout(() => {\n fn(...args)\n }, delay)\n }\n}\n","// prettier-ignore\ntype Attributes<T extends keyof HTMLElementTagNameMap> = Partial<{\n style: Partial<CSSStyleDeclaration>\n} & Omit<HTMLElementTagNameMap[T], 'style'>>\n\ntype Children = (string | Node | HTMLElement)[]\n\nexport function el<T extends keyof HTMLElementTagNameMap>(\n tag: T,\n attributes?: Children | Attributes<T>,\n ...children: Children\n): HTMLElementTagNameMap[T] {\n const el = document.createElement(tag)\n if (Array.isArray(attributes)) {\n el.append(...attributes)\n } else {\n Object.assign(el, attributes)\n el.append(...children)\n }\n\n return el\n}\n\nexport function text(str: string): Text {\n return document.createTextNode(str)\n}\n\nexport function nbsp(): Text {\n return text('\\u00a0')\n}\n","interface FetcherInit\n extends Pick<\n RequestInit,\n 'headers' | 'credentials' | 'mode' | 'cache' | 'redirect' | 'referrerPolicy'\n > {}\n\ninterface FetcherRequest extends Omit<RequestInit, 'method'> {}\n\ntype RequestMethods = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n\nexport class Fetcher {\n constructor(\n private readonly baseURL: string,\n private readonly baseInit: FetcherInit\n ) {}\n\n async request<T>(\n path: string,\n init: FetcherRequest & { method: RequestMethods }\n ): Promise<T> {\n const url = new URL(path, this.baseURL)\n return await fetcher<T>(url, { ...this.baseInit, ...init })\n }\n\n async get<T>(path: string, init?: FetcherRequest): Promise<T> {\n return await this.request(path, { ...init, method: 'GET' })\n }\n\n async post<T>(path: string, init?: FetcherRequest): Promise<T> {\n return await this.request(path, { ...init, method: 'POST' })\n }\n}\n\nexport async function fetcher<T = unknown>(\n ...args: Parameters<typeof fetch>\n): Promise<T> {\n const response = await fetch(...args)\n const data = (await response.json()) as T\n\n if (response.ok) {\n return data\n }\n\n throw new FetcherError({\n response,\n data\n })\n}\n\nexport class FetcherError<T> extends Error {\n response: Response\n data: T\n\n constructor({ response, data }: { response: Response; data: T }) {\n super(response.statusText)\n\n this.name = 'FetcherError'\n this.response = response\n this.data = data\n }\n}\n"],"names":["observeElement","selector","callback","target","observer","mutations","mutation","el","waitObserveElement","resolve","domReady","debounce","fn","delay","timeoutId","args","tag","attributes","children","text","str","nbsp","Fetcher","baseURL","baseInit","path","init","url","fetcher","response","data","FetcherError"],"mappings":"+OAAO,SAASA,EACdC,EACAC,EACAC,EAAS,SAAS,KACA,CAClB,MAAMC,EAAW,IAAI,iBAAkBC,GAAc,CACnD,UAAWC,KAAYD,EAAW,CAChC,MAAME,EAAKD,EAAS,OAChBC,EAAG,UAAUN,CAAQ,GACvBC,EAASK,CAAE,CAEf,CAAA,CACD,EAED,OAAAH,EAAS,QAAQD,EAAQ,CACvB,WAAY,GACZ,UAAW,GACX,QAAS,EAAA,CACV,EAEMC,CACT,CCnBO,SAASI,EACdP,EACAE,EAAS,SAAS,KACN,CACL,OAAA,IAAI,QAASM,GAAY,CACxB,MAAAF,EAAKJ,EAAO,cAAiBF,CAAQ,EAC3C,GAAIM,EACFE,EAAQF,CAAE,MACL,CACL,MAAMH,EAAWJ,EACfC,EACCM,GAAO,CACNH,EAAS,WAAW,EACpBK,EAAQF,CAAE,CACZ,EACAJ,CAAA,CAEJ,CAAA,CACD,CACH,CCrBA,eAAsBO,GAA0B,CAC1C,GAAA,SAAS,YAAc,UAClB,OAAA,IAAI,QAASD,GAAY,CAC9B,SAAS,iBAAiB,mBAAoB,IAAMA,EAAA,EAAW,CAC7D,KAAM,EAAA,CACP,CAAA,CACF,CAEL,CCRgB,SAAAE,EACdC,EACAC,EAAQ,IACsD,CAC1D,IAAAC,EAEJ,MAAO,IAAIC,IAAS,CACdD,GACF,aAAaA,CAAS,EAGxBA,EAAY,WAAW,IAAM,CAC3BF,EAAG,GAAGG,CAAI,GACTF,CAAK,CAAA,CAEZ,CCRgB,SAAAN,EACdS,EACAC,KACGC,EACuB,CACpBX,MAAAA,EAAK,SAAS,cAAcS,CAAG,EACjC,OAAA,MAAM,QAAQC,CAAU,EAC1BV,EAAG,OAAO,GAAGU,CAAU,GAEhB,OAAA,OAAOV,EAAIU,CAAU,EAC5BV,EAAG,OAAO,GAAGW,CAAQ,GAGhBX,CACT,CAEO,SAASY,EAAKC,EAAmB,CAC/B,OAAA,SAAS,eAAeA,CAAG,CACpC,CAEO,SAASC,GAAa,CAC3B,OAAOF,EAAK,MAAQ,CACtB,CCnBO,MAAMG,CAAQ,CACnB,YACmBC,EACAC,EACjB,CAFiB,KAAA,QAAAD,EACA,KAAA,SAAAC,CAChB,CAEH,MAAM,QACJC,EACAC,EACY,CACZ,MAAMC,EAAM,IAAI,IAAIF,EAAM,KAAK,OAAO,EAC/B,OAAA,MAAMG,EAAWD,EAAK,CAAE,GAAG,KAAK,SAAU,GAAGD,CAAA,CAAM,CAC5D,CAEA,MAAM,IAAOD,EAAcC,EAAmC,CACrD,OAAA,MAAM,KAAK,QAAQD,EAAM,CAAE,GAAGC,EAAM,OAAQ,KAAA,CAAO,CAC5D,CAEA,MAAM,KAAQD,EAAcC,EAAmC,CACtD,OAAA,MAAM,KAAK,QAAQD,EAAM,CAAE,GAAGC,EAAM,OAAQ,MAAA,CAAQ,CAC7D,CACF,CAEA,eAAsBE,KACjBb,EACS,CACZ,MAAMc,EAAW,MAAM,MAAM,GAAGd,CAAI,EAC9Be,EAAQ,MAAMD,EAAS,OAE7B,GAAIA,EAAS,GACJ,OAAAC,EAGT,MAAM,IAAIC,EAAa,CACrB,SAAAF,EACA,KAAAC,CAAA,CACD,CACH,CAEO,MAAMC,UAAwB,KAAM,CACzC,SACA,KAEA,YAAY,CAAE,SAAAF,EAAU,KAAAC,GAAyC,CAC/D,MAAMD,EAAS,UAAU,EAEzB,KAAK,KAAO,eACZ,KAAK,SAAWA,EAChB,KAAK,KAAOC,CACd,CACF"}
@@ -1 +1 @@
1
- export declare function observeElement<T extends Element = Element>(selector: string, callback: (el: T) => void, target?: Node): MutationObserver;
1
+ export declare function observeElement<T extends Element = Element>(selector: string, callback: (el: T) => void, target?: HTMLElement): MutationObserver;
@@ -1 +1 @@
1
- export declare function waitObserveElement<T extends Element = Element>(selector: string, target?: Node): Promise<T>;
1
+ export declare function waitObserveElement<T extends Element = Element>(selector: string, target?: HTMLElement): Promise<T>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zero-dependency/dom",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "type": "module",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/index.umd.js",