@wcstack/fetch 1.6.4 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.esm.js +27 -27
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -185,6 +185,30 @@ class FetchCore extends EventTarget {
|
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
+
let registered = false;
|
|
189
|
+
function handleClick(event) {
|
|
190
|
+
const target = event.target;
|
|
191
|
+
if (!(target instanceof Element))
|
|
192
|
+
return;
|
|
193
|
+
const triggerElement = target.closest(`[${config.triggerAttribute}]`);
|
|
194
|
+
if (!triggerElement)
|
|
195
|
+
return;
|
|
196
|
+
const fetchId = triggerElement.getAttribute(config.triggerAttribute);
|
|
197
|
+
if (!fetchId)
|
|
198
|
+
return;
|
|
199
|
+
const fetchElement = document.getElementById(fetchId);
|
|
200
|
+
if (!fetchElement || !(fetchElement instanceof Fetch))
|
|
201
|
+
return;
|
|
202
|
+
event.preventDefault();
|
|
203
|
+
fetchElement.fetch();
|
|
204
|
+
}
|
|
205
|
+
function registerAutoTrigger() {
|
|
206
|
+
if (registered)
|
|
207
|
+
return;
|
|
208
|
+
registered = true;
|
|
209
|
+
document.addEventListener("click", handleClick);
|
|
210
|
+
}
|
|
211
|
+
|
|
188
212
|
class Fetch extends HTMLElement {
|
|
189
213
|
static hasConnectedCallbackPromise = true;
|
|
190
214
|
static wcBindable = {
|
|
@@ -338,6 +362,9 @@ class Fetch extends HTMLElement {
|
|
|
338
362
|
}
|
|
339
363
|
connectedCallback() {
|
|
340
364
|
this.style.display = "none";
|
|
365
|
+
if (config.autoTrigger) {
|
|
366
|
+
registerAutoTrigger();
|
|
367
|
+
}
|
|
341
368
|
if (!this.manual && this.url) {
|
|
342
369
|
this._connectedCallbackPromise = this.fetch().then(() => { });
|
|
343
370
|
}
|
|
@@ -385,38 +412,11 @@ function registerComponents() {
|
|
|
385
412
|
}
|
|
386
413
|
}
|
|
387
414
|
|
|
388
|
-
let registered = false;
|
|
389
|
-
function handleClick(event) {
|
|
390
|
-
const target = event.target;
|
|
391
|
-
if (!(target instanceof Element))
|
|
392
|
-
return;
|
|
393
|
-
const triggerElement = target.closest(`[${config.triggerAttribute}]`);
|
|
394
|
-
if (!triggerElement)
|
|
395
|
-
return;
|
|
396
|
-
const fetchId = triggerElement.getAttribute(config.triggerAttribute);
|
|
397
|
-
if (!fetchId)
|
|
398
|
-
return;
|
|
399
|
-
const fetchElement = document.getElementById(fetchId);
|
|
400
|
-
if (!fetchElement || !(fetchElement instanceof Fetch))
|
|
401
|
-
return;
|
|
402
|
-
event.preventDefault();
|
|
403
|
-
fetchElement.fetch();
|
|
404
|
-
}
|
|
405
|
-
function registerAutoTrigger() {
|
|
406
|
-
if (registered)
|
|
407
|
-
return;
|
|
408
|
-
registered = true;
|
|
409
|
-
document.addEventListener("click", handleClick);
|
|
410
|
-
}
|
|
411
|
-
|
|
412
415
|
function bootstrapFetch(userConfig) {
|
|
413
416
|
if (userConfig) {
|
|
414
417
|
setConfig(userConfig);
|
|
415
418
|
}
|
|
416
419
|
registerComponents();
|
|
417
|
-
if (config.autoTrigger) {
|
|
418
|
-
registerAutoTrigger();
|
|
419
|
-
}
|
|
420
420
|
}
|
|
421
421
|
|
|
422
422
|
export { FetchCore, bootstrapFetch, getConfig };
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/config.ts","../src/raiseError.ts","../src/core/FetchCore.ts","../src/components/Fetch.ts","../src/components/FetchHeader.ts","../src/components/FetchBody.ts","../src/registerComponents.ts","../src/autoTrigger.ts","../src/bootstrapFetch.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types.js\";\r\n\r\ninterface IInternalConfig extends IConfig {\r\n autoTrigger: boolean;\r\n triggerAttribute: string;\r\n tagNames: {\r\n fetch: string;\r\n fetchHeader: string;\r\n fetchBody: string;\r\n };\r\n}\r\n\r\nconst _config: IInternalConfig = {\r\n autoTrigger: true,\r\n triggerAttribute: \"data-fetchtarget\",\r\n tagNames: {\r\n fetch: \"wcs-fetch\",\r\n fetchHeader: \"wcs-fetch-header\",\r\n fetchBody: \"wcs-fetch-body\",\r\n },\r\n};\r\n\r\nfunction deepFreeze<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n Object.freeze(obj);\r\n for (const key of Object.keys(obj)) {\r\n deepFreeze((obj as Record<string, unknown>)[key]);\r\n }\r\n return obj;\r\n}\r\n\r\nfunction deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n const clone: Record<string, unknown> = {};\r\n for (const key of Object.keys(obj)) {\r\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\r\n }\r\n return clone as T;\r\n}\r\n\r\nlet frozenConfig: IConfig | null = null;\r\n\r\nexport const config: IConfig = _config as IConfig;\r\n\r\nexport function getConfig(): IConfig {\r\n if (!frozenConfig) {\r\n frozenConfig = deepFreeze(deepClone(_config));\r\n }\r\n return frozenConfig;\r\n}\r\n\r\nexport function setConfig(partialConfig: IWritableConfig): void {\r\n if (typeof partialConfig.autoTrigger === \"boolean\") {\r\n _config.autoTrigger = partialConfig.autoTrigger;\r\n }\r\n if (typeof partialConfig.triggerAttribute === \"string\") {\r\n _config.triggerAttribute = partialConfig.triggerAttribute;\r\n }\r\n if (partialConfig.tagNames) {\r\n Object.assign(_config.tagNames, partialConfig.tagNames);\r\n }\r\n frozenConfig = null;\r\n}\r\n","export function raiseError(message: string): never {\r\n throw new Error(`[@wcstack/fetch] ${message}`);\r\n}\r\n","import { raiseError } from \"../raiseError.js\";\r\nimport { IWcBindable } from \"../types.js\";\r\n\r\nexport interface FetchRequestOptions {\r\n method?: string;\r\n headers?: Record<string, string>;\r\n body?: BodyInit | null;\r\n contentType?: string | null;\r\n forceText?: boolean;\r\n}\r\n\r\nexport class FetchCore extends EventTarget {\r\n static wcBindable: IWcBindable = {\r\n protocol: \"wc-bindable\",\r\n version: 1,\r\n properties: [\r\n { name: \"value\", event: \"wcs-fetch:response\", getter: (e: Event) => (e as CustomEvent).detail.value },\r\n { name: \"loading\", event: \"wcs-fetch:loading-changed\" },\r\n { name: \"error\", event: \"wcs-fetch:error\" },\r\n { name: \"status\", event: \"wcs-fetch:response\", getter: (e: Event) => (e as CustomEvent).detail.status },\r\n ],\r\n };\r\n\r\n private _target: EventTarget;\r\n private _value: any = null;\r\n private _loading: boolean = false;\r\n private _error: any = null;\r\n private _status: number = 0;\r\n private _abortController: AbortController | null = null;\r\n private _promise: Promise<any> = Promise.resolve(null);\r\n\r\n constructor(target?: EventTarget) {\r\n super();\r\n this._target = target ?? this;\r\n }\r\n\r\n get value(): any {\r\n return this._value;\r\n }\r\n\r\n get loading(): boolean {\r\n return this._loading;\r\n }\r\n\r\n get error(): any {\r\n return this._error;\r\n }\r\n\r\n get status(): number {\r\n return this._status;\r\n }\r\n\r\n get promise(): Promise<any> {\r\n return this._promise;\r\n }\r\n\r\n private _setLoading(loading: boolean): void {\r\n this._loading = loading;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-fetch:loading-changed\", {\r\n detail: loading,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setError(error: any): void {\r\n this._error = error;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-fetch:error\", {\r\n detail: error,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setResponse(value: any, status: number): void {\r\n this._value = value;\r\n this._status = status;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-fetch:response\", {\r\n detail: { value, status },\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n abort(): void {\r\n if (this._abortController) {\r\n this._abortController.abort();\r\n this._abortController = null;\r\n }\r\n }\r\n\r\n async fetch(url: string, options: FetchRequestOptions = {}): Promise<any> {\r\n if (!url) {\r\n raiseError(\"url attribute is required.\");\r\n }\r\n\r\n const p = this._doFetch(url, options);\r\n this._promise = p;\r\n return p;\r\n }\r\n\r\n private async _doFetch(url: string, options: FetchRequestOptions): Promise<any> {\r\n // 進行中のリクエストをキャンセル\r\n this.abort();\r\n\r\n this._abortController = new AbortController();\r\n const { signal } = this._abortController;\r\n\r\n this._setLoading(true);\r\n this._error = null;\r\n\r\n const {\r\n method = \"GET\",\r\n headers = {},\r\n body = null,\r\n contentType = null,\r\n forceText = false,\r\n } = options;\r\n\r\n try {\r\n if (contentType && !headers[\"Content-Type\"]) {\r\n headers[\"Content-Type\"] = contentType;\r\n }\r\n\r\n const requestInit: RequestInit = {\r\n method,\r\n headers,\r\n signal,\r\n };\r\n\r\n if (method !== \"GET\" && method !== \"HEAD\" && body !== null) {\r\n requestInit.body = body;\r\n }\r\n\r\n const response = await globalThis.fetch(url, requestInit);\r\n this._status = response.status;\r\n\r\n if (!response.ok) {\r\n const errorBody = await response.text().catch(() => \"\");\r\n const error = { status: response.status, statusText: response.statusText, body: errorBody };\r\n this._setError(error);\r\n this._setLoading(false);\r\n return null;\r\n }\r\n\r\n if (forceText) {\r\n const text = await response.text();\r\n this._setResponse(text, response.status);\r\n } else {\r\n const responseContentType = response.headers.get(\"Content-Type\") || \"\";\r\n if (responseContentType.includes(\"application/json\")) {\r\n const data = await response.json();\r\n this._setResponse(data, response.status);\r\n } else {\r\n const text = await response.text();\r\n this._setResponse(text, response.status);\r\n }\r\n }\r\n\r\n this._setLoading(false);\r\n return this._value;\r\n } catch (e: any) {\r\n if (e.name === \"AbortError\") {\r\n this._setLoading(false);\r\n return null;\r\n }\r\n this._setError(e);\r\n this._setLoading(false);\r\n return null;\r\n } finally {\r\n this._abortController = null;\r\n }\r\n }\r\n}\r\n","import { config } from \"../config.js\";\r\nimport { IWcBindable } from \"../types.js\";\r\nimport { FetchCore } from \"../core/FetchCore.js\";\r\nimport { FetchHeader } from \"./FetchHeader.js\";\r\nimport { FetchBody } from \"./FetchBody.js\";\r\n\r\nexport class Fetch extends HTMLElement {\r\n static hasConnectedCallbackPromise = true;\r\n static wcBindable: IWcBindable = {\r\n ...FetchCore.wcBindable,\r\n properties: [\r\n ...FetchCore.wcBindable.properties,\r\n { name: \"trigger\", event: \"wcs-fetch:trigger-changed\" },\r\n ],\r\n };\r\n static get observedAttributes(): string[] { return [\"url\"]; }\r\n\r\n private _core: FetchCore;\r\n private _body: any = null;\r\n private _trigger: boolean = false;\r\n private _connectedCallbackPromise: Promise<void> = Promise.resolve();\r\n\r\n constructor() {\r\n super();\r\n this._core = new FetchCore(this);\r\n }\r\n\r\n get url(): string {\r\n return this.getAttribute(\"url\") || \"\";\r\n }\r\n\r\n set url(value: string) {\r\n this.setAttribute(\"url\", value);\r\n }\r\n\r\n get method(): string {\r\n return (this.getAttribute(\"method\") || \"GET\").toUpperCase();\r\n }\r\n\r\n set method(value: string) {\r\n this.setAttribute(\"method\", value);\r\n }\r\n\r\n get target(): string | null {\r\n return this.getAttribute(\"target\");\r\n }\r\n\r\n set target(value: string | null) {\r\n if (value === null) {\r\n this.removeAttribute(\"target\");\r\n } else {\r\n this.setAttribute(\"target\", value);\r\n }\r\n }\r\n\r\n get value(): any {\r\n return this._core.value;\r\n }\r\n\r\n get loading(): boolean {\r\n return this._core.loading;\r\n }\r\n\r\n get error(): any {\r\n return this._core.error;\r\n }\r\n\r\n get status(): number {\r\n return this._core.status;\r\n }\r\n\r\n get promise(): Promise<any> {\r\n return this._core.promise;\r\n }\r\n\r\n get connectedCallbackPromise(): Promise<void> {\r\n return this._connectedCallbackPromise;\r\n }\r\n\r\n get manual(): boolean {\r\n return this.hasAttribute(\"manual\");\r\n }\r\n\r\n set manual(value: boolean) {\r\n if (value) {\r\n this.setAttribute(\"manual\", \"\");\r\n } else {\r\n this.removeAttribute(\"manual\");\r\n }\r\n }\r\n\r\n get body(): any {\r\n return this._body;\r\n }\r\n\r\n set body(value: any) {\r\n this._body = value;\r\n }\r\n\r\n get trigger(): boolean {\r\n return this._trigger;\r\n }\r\n\r\n set trigger(value: boolean) {\r\n const v = !!value;\r\n if (v) {\r\n this._trigger = true;\r\n this.fetch().finally(() => {\r\n this._trigger = false;\r\n this.dispatchEvent(new CustomEvent(\"wcs-fetch:trigger-changed\", {\r\n detail: false,\r\n bubbles: true,\r\n }));\r\n });\r\n }\r\n }\r\n\r\n private _collectHeaders(): Record<string, string> {\r\n const headers: Record<string, string> = {};\r\n const headerElements = this.querySelectorAll<FetchHeader>(config.tagNames.fetchHeader);\r\n for (const el of headerElements) {\r\n const name = el.headerName;\r\n const value = el.headerValue;\r\n if (name) {\r\n headers[name] = value;\r\n }\r\n }\r\n return headers;\r\n }\r\n\r\n private _collectBody(): { body: BodyInit | null; contentType: string | null } {\r\n // JS API経由のbodyが優先\r\n if (this._body !== null) {\r\n return {\r\n body: typeof this._body === \"string\" ? this._body : JSON.stringify(this._body),\r\n contentType: typeof this._body === \"string\" ? null : \"application/json\",\r\n };\r\n }\r\n\r\n // サブタグからbodyを取得\r\n const bodyElement = this.querySelector<FetchBody>(config.tagNames.fetchBody);\r\n if (bodyElement) {\r\n return {\r\n body: bodyElement.bodyContent || null,\r\n contentType: bodyElement.contentType,\r\n };\r\n }\r\n\r\n return { body: null, contentType: null };\r\n }\r\n\r\n abort(): void {\r\n this._core.abort();\r\n }\r\n\r\n async fetch(): Promise<any> {\r\n const headers = this._collectHeaders();\r\n const { body, contentType } = this._collectBody();\r\n\r\n const result = await this._core.fetch(this.url, {\r\n method: this.method,\r\n headers,\r\n body,\r\n contentType,\r\n forceText: !!this.target,\r\n });\r\n\r\n // HTML置換モード\r\n if (this.target && result !== null) {\r\n const targetElement = document.getElementById(this.target);\r\n if (targetElement) {\r\n targetElement.innerHTML = result;\r\n }\r\n }\r\n\r\n // bodyをリセット(一回限りの使用)\r\n this._body = null;\r\n\r\n return result;\r\n }\r\n\r\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\r\n if (name === \"url\" && this.isConnected && !this.manual && newValue) {\r\n this.fetch();\r\n }\r\n }\r\n\r\n connectedCallback(): void {\r\n this.style.display = \"none\";\r\n if (!this.manual && this.url) {\r\n this._connectedCallbackPromise = this.fetch().then(() => {});\r\n }\r\n }\r\n\r\n disconnectedCallback(): void {\r\n this.abort();\r\n }\r\n}\r\n","export class FetchHeader extends HTMLElement {\r\n connectedCallback(): void {\r\n this.style.display = \"none\";\r\n }\r\n\r\n get headerName(): string {\r\n return this.getAttribute(\"name\") || \"\";\r\n }\r\n\r\n get headerValue(): string {\r\n return this.getAttribute(\"value\") || \"\";\r\n }\r\n}\r\n","export class FetchBody extends HTMLElement {\r\n constructor() {\r\n super();\r\n // スロットなしのShadow DOMでlight DOM(bodyテキスト)の描画を抑制\r\n this.attachShadow({ mode: \"open\" });\r\n }\r\n\r\n get contentType(): string {\r\n return this.getAttribute(\"type\") || \"application/json\";\r\n }\r\n\r\n get bodyContent(): string {\r\n return this.textContent?.trim() || \"\";\r\n }\r\n}\r\n","import { Fetch } from \"./components/Fetch.js\";\r\nimport { FetchHeader } from \"./components/FetchHeader.js\";\r\nimport { FetchBody } from \"./components/FetchBody.js\";\r\nimport { config } from \"./config.js\";\r\n\r\nexport function registerComponents(): void {\r\n if (!customElements.get(config.tagNames.fetch)) {\r\n customElements.define(config.tagNames.fetch, Fetch);\r\n }\r\n if (!customElements.get(config.tagNames.fetchHeader)) {\r\n customElements.define(config.tagNames.fetchHeader, FetchHeader);\r\n }\r\n if (!customElements.get(config.tagNames.fetchBody)) {\r\n customElements.define(config.tagNames.fetchBody, FetchBody);\r\n }\r\n}\r\n","import { config } from \"./config.js\";\r\nimport { Fetch } from \"./components/Fetch.js\";\r\n\r\nlet registered = false;\r\n\r\nfunction handleClick(event: Event): void {\r\n const target = event.target;\r\n if (!(target instanceof Element)) return;\r\n\r\n const triggerElement = target.closest<Element>(`[${config.triggerAttribute}]`);\r\n if (!triggerElement) return;\r\n\r\n const fetchId = triggerElement.getAttribute(config.triggerAttribute);\r\n if (!fetchId) return;\r\n\r\n const fetchElement = document.getElementById(fetchId) as Fetch | null;\r\n if (!fetchElement || !(fetchElement instanceof Fetch)) return;\r\n\r\n event.preventDefault();\r\n fetchElement.fetch();\r\n}\r\n\r\nexport function registerAutoTrigger(): void {\r\n if (registered) return;\r\n registered = true;\r\n document.addEventListener(\"click\", handleClick);\r\n}\r\n\r\nexport function unregisterAutoTrigger(): void {\r\n if (!registered) return;\r\n registered = false;\r\n document.removeEventListener(\"click\", handleClick);\r\n}\r\n","import { setConfig } from \"./config.js\";\r\nimport { config } from \"./config.js\";\r\nimport { registerComponents } from \"./registerComponents.js\";\r\nimport { registerAutoTrigger } from \"./autoTrigger.js\";\r\nimport { IWritableConfig } from \"./types.js\";\r\n\r\nexport function bootstrapFetch(userConfig?: IWritableConfig): void {\r\n if (userConfig) {\r\n setConfig(userConfig);\r\n }\r\n registerComponents();\r\n if (config.autoTrigger) {\r\n registerAutoTrigger();\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/config.ts","../src/raiseError.ts","../src/core/FetchCore.ts","../src/autoTrigger.ts","../src/components/Fetch.ts","../src/components/FetchHeader.ts","../src/components/FetchBody.ts","../src/registerComponents.ts","../src/bootstrapFetch.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types.js\";\r\n\r\ninterface IInternalConfig extends IConfig {\r\n autoTrigger: boolean;\r\n triggerAttribute: string;\r\n tagNames: {\r\n fetch: string;\r\n fetchHeader: string;\r\n fetchBody: string;\r\n };\r\n}\r\n\r\nconst _config: IInternalConfig = {\r\n autoTrigger: true,\r\n triggerAttribute: \"data-fetchtarget\",\r\n tagNames: {\r\n fetch: \"wcs-fetch\",\r\n fetchHeader: \"wcs-fetch-header\",\r\n fetchBody: \"wcs-fetch-body\",\r\n },\r\n};\r\n\r\nfunction deepFreeze<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n Object.freeze(obj);\r\n for (const key of Object.keys(obj)) {\r\n deepFreeze((obj as Record<string, unknown>)[key]);\r\n }\r\n return obj;\r\n}\r\n\r\nfunction deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n const clone: Record<string, unknown> = {};\r\n for (const key of Object.keys(obj)) {\r\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\r\n }\r\n return clone as T;\r\n}\r\n\r\nlet frozenConfig: IConfig | null = null;\r\n\r\nexport const config: IConfig = _config as IConfig;\r\n\r\nexport function getConfig(): IConfig {\r\n if (!frozenConfig) {\r\n frozenConfig = deepFreeze(deepClone(_config));\r\n }\r\n return frozenConfig;\r\n}\r\n\r\nexport function setConfig(partialConfig: IWritableConfig): void {\r\n if (typeof partialConfig.autoTrigger === \"boolean\") {\r\n _config.autoTrigger = partialConfig.autoTrigger;\r\n }\r\n if (typeof partialConfig.triggerAttribute === \"string\") {\r\n _config.triggerAttribute = partialConfig.triggerAttribute;\r\n }\r\n if (partialConfig.tagNames) {\r\n Object.assign(_config.tagNames, partialConfig.tagNames);\r\n }\r\n frozenConfig = null;\r\n}\r\n","export function raiseError(message: string): never {\r\n throw new Error(`[@wcstack/fetch] ${message}`);\r\n}\r\n","import { raiseError } from \"../raiseError.js\";\r\nimport { IWcBindable } from \"../types.js\";\r\n\r\nexport interface FetchRequestOptions {\r\n method?: string;\r\n headers?: Record<string, string>;\r\n body?: BodyInit | null;\r\n contentType?: string | null;\r\n forceText?: boolean;\r\n}\r\n\r\nexport class FetchCore extends EventTarget {\r\n static wcBindable: IWcBindable = {\r\n protocol: \"wc-bindable\",\r\n version: 1,\r\n properties: [\r\n { name: \"value\", event: \"wcs-fetch:response\", getter: (e: Event) => (e as CustomEvent).detail.value },\r\n { name: \"loading\", event: \"wcs-fetch:loading-changed\" },\r\n { name: \"error\", event: \"wcs-fetch:error\" },\r\n { name: \"status\", event: \"wcs-fetch:response\", getter: (e: Event) => (e as CustomEvent).detail.status },\r\n ],\r\n };\r\n\r\n private _target: EventTarget;\r\n private _value: any = null;\r\n private _loading: boolean = false;\r\n private _error: any = null;\r\n private _status: number = 0;\r\n private _abortController: AbortController | null = null;\r\n private _promise: Promise<any> = Promise.resolve(null);\r\n\r\n constructor(target?: EventTarget) {\r\n super();\r\n this._target = target ?? this;\r\n }\r\n\r\n get value(): any {\r\n return this._value;\r\n }\r\n\r\n get loading(): boolean {\r\n return this._loading;\r\n }\r\n\r\n get error(): any {\r\n return this._error;\r\n }\r\n\r\n get status(): number {\r\n return this._status;\r\n }\r\n\r\n get promise(): Promise<any> {\r\n return this._promise;\r\n }\r\n\r\n private _setLoading(loading: boolean): void {\r\n this._loading = loading;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-fetch:loading-changed\", {\r\n detail: loading,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setError(error: any): void {\r\n this._error = error;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-fetch:error\", {\r\n detail: error,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setResponse(value: any, status: number): void {\r\n this._value = value;\r\n this._status = status;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-fetch:response\", {\r\n detail: { value, status },\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n abort(): void {\r\n if (this._abortController) {\r\n this._abortController.abort();\r\n this._abortController = null;\r\n }\r\n }\r\n\r\n async fetch(url: string, options: FetchRequestOptions = {}): Promise<any> {\r\n if (!url) {\r\n raiseError(\"url attribute is required.\");\r\n }\r\n\r\n const p = this._doFetch(url, options);\r\n this._promise = p;\r\n return p;\r\n }\r\n\r\n private async _doFetch(url: string, options: FetchRequestOptions): Promise<any> {\r\n // 進行中のリクエストをキャンセル\r\n this.abort();\r\n\r\n this._abortController = new AbortController();\r\n const { signal } = this._abortController;\r\n\r\n this._setLoading(true);\r\n this._error = null;\r\n\r\n const {\r\n method = \"GET\",\r\n headers = {},\r\n body = null,\r\n contentType = null,\r\n forceText = false,\r\n } = options;\r\n\r\n try {\r\n if (contentType && !headers[\"Content-Type\"]) {\r\n headers[\"Content-Type\"] = contentType;\r\n }\r\n\r\n const requestInit: RequestInit = {\r\n method,\r\n headers,\r\n signal,\r\n };\r\n\r\n if (method !== \"GET\" && method !== \"HEAD\" && body !== null) {\r\n requestInit.body = body;\r\n }\r\n\r\n const response = await globalThis.fetch(url, requestInit);\r\n this._status = response.status;\r\n\r\n if (!response.ok) {\r\n const errorBody = await response.text().catch(() => \"\");\r\n const error = { status: response.status, statusText: response.statusText, body: errorBody };\r\n this._setError(error);\r\n this._setLoading(false);\r\n return null;\r\n }\r\n\r\n if (forceText) {\r\n const text = await response.text();\r\n this._setResponse(text, response.status);\r\n } else {\r\n const responseContentType = response.headers.get(\"Content-Type\") || \"\";\r\n if (responseContentType.includes(\"application/json\")) {\r\n const data = await response.json();\r\n this._setResponse(data, response.status);\r\n } else {\r\n const text = await response.text();\r\n this._setResponse(text, response.status);\r\n }\r\n }\r\n\r\n this._setLoading(false);\r\n return this._value;\r\n } catch (e: any) {\r\n if (e.name === \"AbortError\") {\r\n this._setLoading(false);\r\n return null;\r\n }\r\n this._setError(e);\r\n this._setLoading(false);\r\n return null;\r\n } finally {\r\n this._abortController = null;\r\n }\r\n }\r\n}\r\n","import { config } from \"./config.js\";\r\nimport { Fetch } from \"./components/Fetch.js\";\r\n\r\nlet registered = false;\r\n\r\nfunction handleClick(event: Event): void {\r\n const target = event.target;\r\n if (!(target instanceof Element)) return;\r\n\r\n const triggerElement = target.closest<Element>(`[${config.triggerAttribute}]`);\r\n if (!triggerElement) return;\r\n\r\n const fetchId = triggerElement.getAttribute(config.triggerAttribute);\r\n if (!fetchId) return;\r\n\r\n const fetchElement = document.getElementById(fetchId) as Fetch | null;\r\n if (!fetchElement || !(fetchElement instanceof Fetch)) return;\r\n\r\n event.preventDefault();\r\n fetchElement.fetch();\r\n}\r\n\r\nexport function registerAutoTrigger(): void {\r\n if (registered) return;\r\n registered = true;\r\n document.addEventListener(\"click\", handleClick);\r\n}\r\n\r\nexport function unregisterAutoTrigger(): void {\r\n if (!registered) return;\r\n registered = false;\r\n document.removeEventListener(\"click\", handleClick);\r\n}\r\n","import { config } from \"../config.js\";\r\nimport { IWcBindable } from \"../types.js\";\r\nimport { FetchCore } from \"../core/FetchCore.js\";\r\nimport { FetchHeader } from \"./FetchHeader.js\";\r\nimport { FetchBody } from \"./FetchBody.js\";\r\nimport { registerAutoTrigger } from \"../autoTrigger.js\";\r\n\r\nexport class Fetch extends HTMLElement {\r\n static hasConnectedCallbackPromise = true;\r\n static wcBindable: IWcBindable = {\r\n ...FetchCore.wcBindable,\r\n properties: [\r\n ...FetchCore.wcBindable.properties,\r\n { name: \"trigger\", event: \"wcs-fetch:trigger-changed\" },\r\n ],\r\n };\r\n static get observedAttributes(): string[] { return [\"url\"]; }\r\n\r\n private _core: FetchCore;\r\n private _body: any = null;\r\n private _trigger: boolean = false;\r\n private _connectedCallbackPromise: Promise<void> = Promise.resolve();\r\n\r\n constructor() {\r\n super();\r\n this._core = new FetchCore(this);\r\n }\r\n\r\n get url(): string {\r\n return this.getAttribute(\"url\") || \"\";\r\n }\r\n\r\n set url(value: string) {\r\n this.setAttribute(\"url\", value);\r\n }\r\n\r\n get method(): string {\r\n return (this.getAttribute(\"method\") || \"GET\").toUpperCase();\r\n }\r\n\r\n set method(value: string) {\r\n this.setAttribute(\"method\", value);\r\n }\r\n\r\n get target(): string | null {\r\n return this.getAttribute(\"target\");\r\n }\r\n\r\n set target(value: string | null) {\r\n if (value === null) {\r\n this.removeAttribute(\"target\");\r\n } else {\r\n this.setAttribute(\"target\", value);\r\n }\r\n }\r\n\r\n get value(): any {\r\n return this._core.value;\r\n }\r\n\r\n get loading(): boolean {\r\n return this._core.loading;\r\n }\r\n\r\n get error(): any {\r\n return this._core.error;\r\n }\r\n\r\n get status(): number {\r\n return this._core.status;\r\n }\r\n\r\n get promise(): Promise<any> {\r\n return this._core.promise;\r\n }\r\n\r\n get connectedCallbackPromise(): Promise<void> {\r\n return this._connectedCallbackPromise;\r\n }\r\n\r\n get manual(): boolean {\r\n return this.hasAttribute(\"manual\");\r\n }\r\n\r\n set manual(value: boolean) {\r\n if (value) {\r\n this.setAttribute(\"manual\", \"\");\r\n } else {\r\n this.removeAttribute(\"manual\");\r\n }\r\n }\r\n\r\n get body(): any {\r\n return this._body;\r\n }\r\n\r\n set body(value: any) {\r\n this._body = value;\r\n }\r\n\r\n get trigger(): boolean {\r\n return this._trigger;\r\n }\r\n\r\n set trigger(value: boolean) {\r\n const v = !!value;\r\n if (v) {\r\n this._trigger = true;\r\n this.fetch().finally(() => {\r\n this._trigger = false;\r\n this.dispatchEvent(new CustomEvent(\"wcs-fetch:trigger-changed\", {\r\n detail: false,\r\n bubbles: true,\r\n }));\r\n });\r\n }\r\n }\r\n\r\n private _collectHeaders(): Record<string, string> {\r\n const headers: Record<string, string> = {};\r\n const headerElements = this.querySelectorAll<FetchHeader>(config.tagNames.fetchHeader);\r\n for (const el of headerElements) {\r\n const name = el.headerName;\r\n const value = el.headerValue;\r\n if (name) {\r\n headers[name] = value;\r\n }\r\n }\r\n return headers;\r\n }\r\n\r\n private _collectBody(): { body: BodyInit | null; contentType: string | null } {\r\n // JS API経由のbodyが優先\r\n if (this._body !== null) {\r\n return {\r\n body: typeof this._body === \"string\" ? this._body : JSON.stringify(this._body),\r\n contentType: typeof this._body === \"string\" ? null : \"application/json\",\r\n };\r\n }\r\n\r\n // サブタグからbodyを取得\r\n const bodyElement = this.querySelector<FetchBody>(config.tagNames.fetchBody);\r\n if (bodyElement) {\r\n return {\r\n body: bodyElement.bodyContent || null,\r\n contentType: bodyElement.contentType,\r\n };\r\n }\r\n\r\n return { body: null, contentType: null };\r\n }\r\n\r\n abort(): void {\r\n this._core.abort();\r\n }\r\n\r\n async fetch(): Promise<any> {\r\n const headers = this._collectHeaders();\r\n const { body, contentType } = this._collectBody();\r\n\r\n const result = await this._core.fetch(this.url, {\r\n method: this.method,\r\n headers,\r\n body,\r\n contentType,\r\n forceText: !!this.target,\r\n });\r\n\r\n // HTML置換モード\r\n if (this.target && result !== null) {\r\n const targetElement = document.getElementById(this.target);\r\n if (targetElement) {\r\n targetElement.innerHTML = result;\r\n }\r\n }\r\n\r\n // bodyをリセット(一回限りの使用)\r\n this._body = null;\r\n\r\n return result;\r\n }\r\n\r\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\r\n if (name === \"url\" && this.isConnected && !this.manual && newValue) {\r\n this.fetch();\r\n }\r\n }\r\n\r\n connectedCallback(): void {\r\n this.style.display = \"none\";\r\n if (config.autoTrigger) {\r\n registerAutoTrigger();\r\n }\r\n if (!this.manual && this.url) {\r\n this._connectedCallbackPromise = this.fetch().then(() => {});\r\n }\r\n }\r\n\r\n disconnectedCallback(): void {\r\n this.abort();\r\n }\r\n}\r\n","export class FetchHeader extends HTMLElement {\r\n connectedCallback(): void {\r\n this.style.display = \"none\";\r\n }\r\n\r\n get headerName(): string {\r\n return this.getAttribute(\"name\") || \"\";\r\n }\r\n\r\n get headerValue(): string {\r\n return this.getAttribute(\"value\") || \"\";\r\n }\r\n}\r\n","export class FetchBody extends HTMLElement {\r\n constructor() {\r\n super();\r\n // スロットなしのShadow DOMでlight DOM(bodyテキスト)の描画を抑制\r\n this.attachShadow({ mode: \"open\" });\r\n }\r\n\r\n get contentType(): string {\r\n return this.getAttribute(\"type\") || \"application/json\";\r\n }\r\n\r\n get bodyContent(): string {\r\n return this.textContent?.trim() || \"\";\r\n }\r\n}\r\n","import { Fetch } from \"./components/Fetch.js\";\r\nimport { FetchHeader } from \"./components/FetchHeader.js\";\r\nimport { FetchBody } from \"./components/FetchBody.js\";\r\nimport { config } from \"./config.js\";\r\n\r\nexport function registerComponents(): void {\r\n if (!customElements.get(config.tagNames.fetch)) {\r\n customElements.define(config.tagNames.fetch, Fetch);\r\n }\r\n if (!customElements.get(config.tagNames.fetchHeader)) {\r\n customElements.define(config.tagNames.fetchHeader, FetchHeader);\r\n }\r\n if (!customElements.get(config.tagNames.fetchBody)) {\r\n customElements.define(config.tagNames.fetchBody, FetchBody);\r\n }\r\n}\r\n","import { setConfig } from \"./config.js\";\r\nimport { registerComponents } from \"./registerComponents.js\";\r\nimport { IWritableConfig } from \"./types.js\";\r\n\r\nexport function bootstrapFetch(userConfig?: IWritableConfig): void {\r\n if (userConfig) {\r\n setConfig(userConfig);\r\n }\r\n registerComponents();\r\n}\r\n"],"names":[],"mappings":"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"}
|
package/dist/index.esm.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const t={autoTrigger:!0,triggerAttribute:"data-fetchtarget",tagNames:{fetch:"wcs-fetch",fetchHeader:"wcs-fetch-header",fetchBody:"wcs-fetch-body"}};function e(t){if(null===t||"object"!=typeof t)return t;Object.freeze(t);for(const r of Object.keys(t))e(t[r]);return t}function r(t){if(null===t||"object"!=typeof t)return t;const e={};for(const s of Object.keys(t))e[s]=r(t[s]);return e}let s=null;const n=t;function o(){return s||(s=e(r(t))),s}class i extends EventTarget{static wcBindable={protocol:"wc-bindable",version:1,properties:[{name:"value",event:"wcs-fetch:response",getter:t=>t.detail.value},{name:"loading",event:"wcs-fetch:loading-changed"},{name:"error",event:"wcs-fetch:error"},{name:"status",event:"wcs-fetch:response",getter:t=>t.detail.status}]};_target;_value=null;_loading=!1;_error=null;_status=0;_abortController=null;_promise=Promise.resolve(null);constructor(t){super(),this._target=t??this}get value(){return this._value}get loading(){return this._loading}get error(){return this._error}get status(){return this._status}get promise(){return this._promise}_setLoading(t){this._loading=t,this._target.dispatchEvent(new CustomEvent("wcs-fetch:loading-changed",{detail:t,bubbles:!0}))}_setError(t){this._error=t,this._target.dispatchEvent(new CustomEvent("wcs-fetch:error",{detail:t,bubbles:!0}))}_setResponse(t,e){this._value=t,this._status=e,this._target.dispatchEvent(new CustomEvent("wcs-fetch:response",{detail:{value:t,status:e},bubbles:!0}))}abort(){this._abortController&&(this._abortController.abort(),this._abortController=null)}async fetch(t,e={}){t||function(t){throw new Error(`[@wcstack/fetch] ${t}`)}("url attribute is required.");const r=this._doFetch(t,e);return this._promise=r,r}async _doFetch(t,e){this.abort(),this._abortController=new AbortController;const{signal:r}=this._abortController;this._setLoading(!0),this._error=null;const{method:s="GET",headers:n={},body:o=null,contentType:i=null,forceText:a=!1}=e;try{i&&!n["Content-Type"]&&(n["Content-Type"]=i);const e={method:s,headers:n,signal:r};"GET"!==s&&"HEAD"!==s&&null!==o&&(e.body=o);const l=await globalThis.fetch(t,e);if(this._status=l.status,!l.ok){const t=await l.text().catch(()=>""),e={status:l.status,statusText:l.statusText,body:t};return this._setError(e),this._setLoading(!1),null}if(a){const t=await l.text();this._setResponse(t,l.status)}else{if((l.headers.get("Content-Type")||"").includes("application/json")){const t=await l.json();this._setResponse(t,l.status)}else{const t=await l.text();this._setResponse(t,l.status)}}return this._setLoading(!1),this._value}catch(t){return"AbortError"===t.name?(this._setLoading(!1),null):(this._setError(t),this._setLoading(!1),null)}finally{this._abortController=null}}}
|
|
1
|
+
const t={autoTrigger:!0,triggerAttribute:"data-fetchtarget",tagNames:{fetch:"wcs-fetch",fetchHeader:"wcs-fetch-header",fetchBody:"wcs-fetch-body"}};function e(t){if(null===t||"object"!=typeof t)return t;Object.freeze(t);for(const r of Object.keys(t))e(t[r]);return t}function r(t){if(null===t||"object"!=typeof t)return t;const e={};for(const s of Object.keys(t))e[s]=r(t[s]);return e}let s=null;const n=t;function o(){return s||(s=e(r(t))),s}class i extends EventTarget{static wcBindable={protocol:"wc-bindable",version:1,properties:[{name:"value",event:"wcs-fetch:response",getter:t=>t.detail.value},{name:"loading",event:"wcs-fetch:loading-changed"},{name:"error",event:"wcs-fetch:error"},{name:"status",event:"wcs-fetch:response",getter:t=>t.detail.status}]};_target;_value=null;_loading=!1;_error=null;_status=0;_abortController=null;_promise=Promise.resolve(null);constructor(t){super(),this._target=t??this}get value(){return this._value}get loading(){return this._loading}get error(){return this._error}get status(){return this._status}get promise(){return this._promise}_setLoading(t){this._loading=t,this._target.dispatchEvent(new CustomEvent("wcs-fetch:loading-changed",{detail:t,bubbles:!0}))}_setError(t){this._error=t,this._target.dispatchEvent(new CustomEvent("wcs-fetch:error",{detail:t,bubbles:!0}))}_setResponse(t,e){this._value=t,this._status=e,this._target.dispatchEvent(new CustomEvent("wcs-fetch:response",{detail:{value:t,status:e},bubbles:!0}))}abort(){this._abortController&&(this._abortController.abort(),this._abortController=null)}async fetch(t,e={}){t||function(t){throw new Error(`[@wcstack/fetch] ${t}`)}("url attribute is required.");const r=this._doFetch(t,e);return this._promise=r,r}async _doFetch(t,e){this.abort(),this._abortController=new AbortController;const{signal:r}=this._abortController;this._setLoading(!0),this._error=null;const{method:s="GET",headers:n={},body:o=null,contentType:i=null,forceText:a=!1}=e;try{i&&!n["Content-Type"]&&(n["Content-Type"]=i);const e={method:s,headers:n,signal:r};"GET"!==s&&"HEAD"!==s&&null!==o&&(e.body=o);const l=await globalThis.fetch(t,e);if(this._status=l.status,!l.ok){const t=await l.text().catch(()=>""),e={status:l.status,statusText:l.statusText,body:t};return this._setError(e),this._setLoading(!1),null}if(a){const t=await l.text();this._setResponse(t,l.status)}else{if((l.headers.get("Content-Type")||"").includes("application/json")){const t=await l.json();this._setResponse(t,l.status)}else{const t=await l.text();this._setResponse(t,l.status)}}return this._setLoading(!1),this._value}catch(t){return"AbortError"===t.name?(this._setLoading(!1),null):(this._setError(t),this._setLoading(!1),null)}finally{this._abortController=null}}}let a=!1;function l(t){const e=t.target;if(!(e instanceof Element))return;const r=e.closest(`[${n.triggerAttribute}]`);if(!r)return;const s=r.getAttribute(n.triggerAttribute);if(!s)return;const o=document.getElementById(s);o&&o instanceof c&&(t.preventDefault(),o.fetch())}class c extends HTMLElement{static hasConnectedCallbackPromise=!0;static wcBindable={...i.wcBindable,properties:[...i.wcBindable.properties,{name:"trigger",event:"wcs-fetch:trigger-changed"}]};static get observedAttributes(){return["url"]}_core;_body=null;_trigger=!1;_connectedCallbackPromise=Promise.resolve();constructor(){super(),this._core=new i(this)}get url(){return this.getAttribute("url")||""}set url(t){this.setAttribute("url",t)}get method(){return(this.getAttribute("method")||"GET").toUpperCase()}set method(t){this.setAttribute("method",t)}get target(){return this.getAttribute("target")}set target(t){null===t?this.removeAttribute("target"):this.setAttribute("target",t)}get value(){return this._core.value}get loading(){return this._core.loading}get error(){return this._core.error}get status(){return this._core.status}get promise(){return this._core.promise}get connectedCallbackPromise(){return this._connectedCallbackPromise}get manual(){return this.hasAttribute("manual")}set manual(t){t?this.setAttribute("manual",""):this.removeAttribute("manual")}get body(){return this._body}set body(t){this._body=t}get trigger(){return this._trigger}set trigger(t){!!t&&(this._trigger=!0,this.fetch().finally(()=>{this._trigger=!1,this.dispatchEvent(new CustomEvent("wcs-fetch:trigger-changed",{detail:!1,bubbles:!0}))}))}_collectHeaders(){const t={},e=this.querySelectorAll(n.tagNames.fetchHeader);for(const r of e){const e=r.headerName,s=r.headerValue;e&&(t[e]=s)}return t}_collectBody(){if(null!==this._body)return{body:"string"==typeof this._body?this._body:JSON.stringify(this._body),contentType:"string"==typeof this._body?null:"application/json"};const t=this.querySelector(n.tagNames.fetchBody);return t?{body:t.bodyContent||null,contentType:t.contentType}:{body:null,contentType:null}}abort(){this._core.abort()}async fetch(){const t=this._collectHeaders(),{body:e,contentType:r}=this._collectBody(),s=await this._core.fetch(this.url,{method:this.method,headers:t,body:e,contentType:r,forceText:!!this.target});if(this.target&&null!==s){const t=document.getElementById(this.target);t&&(t.innerHTML=s)}return this._body=null,s}attributeChangedCallback(t,e,r){"url"===t&&this.isConnected&&!this.manual&&r&&this.fetch()}connectedCallback(){this.style.display="none",n.autoTrigger&&(a||(a=!0,document.addEventListener("click",l))),!this.manual&&this.url&&(this._connectedCallbackPromise=this.fetch().then(()=>{}))}disconnectedCallback(){this.abort()}}class u extends HTMLElement{connectedCallback(){this.style.display="none"}get headerName(){return this.getAttribute("name")||""}get headerValue(){return this.getAttribute("value")||""}}class h extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"})}get contentType(){return this.getAttribute("type")||"application/json"}get bodyContent(){return this.textContent?.trim()||""}}function g(e){var r;e&&("boolean"==typeof(r=e).autoTrigger&&(t.autoTrigger=r.autoTrigger),"string"==typeof r.triggerAttribute&&(t.triggerAttribute=r.triggerAttribute),r.tagNames&&Object.assign(t.tagNames,r.tagNames),s=null),customElements.get(n.tagNames.fetch)||customElements.define(n.tagNames.fetch,c),customElements.get(n.tagNames.fetchHeader)||customElements.define(n.tagNames.fetchHeader,u),customElements.get(n.tagNames.fetchBody)||customElements.define(n.tagNames.fetchBody,h)}export{i as FetchCore,g as bootstrapFetch,o as getConfig};
|
|
2
2
|
//# sourceMappingURL=index.esm.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.min.js","sources":["../src/config.ts","../src/core/FetchCore.ts","../src/raiseError.ts","../src/components/Fetch.ts","../src/components/FetchHeader.ts","../src/components/FetchBody.ts","../src/autoTrigger.ts","../src/bootstrapFetch.ts","../src/registerComponents.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types.js\";\r\n\r\ninterface IInternalConfig extends IConfig {\r\n autoTrigger: boolean;\r\n triggerAttribute: string;\r\n tagNames: {\r\n fetch: string;\r\n fetchHeader: string;\r\n fetchBody: string;\r\n };\r\n}\r\n\r\nconst _config: IInternalConfig = {\r\n autoTrigger: true,\r\n triggerAttribute: \"data-fetchtarget\",\r\n tagNames: {\r\n fetch: \"wcs-fetch\",\r\n fetchHeader: \"wcs-fetch-header\",\r\n fetchBody: \"wcs-fetch-body\",\r\n },\r\n};\r\n\r\nfunction deepFreeze<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n Object.freeze(obj);\r\n for (const key of Object.keys(obj)) {\r\n deepFreeze((obj as Record<string, unknown>)[key]);\r\n }\r\n return obj;\r\n}\r\n\r\nfunction deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n const clone: Record<string, unknown> = {};\r\n for (const key of Object.keys(obj)) {\r\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\r\n }\r\n return clone as T;\r\n}\r\n\r\nlet frozenConfig: IConfig | null = null;\r\n\r\nexport const config: IConfig = _config as IConfig;\r\n\r\nexport function getConfig(): IConfig {\r\n if (!frozenConfig) {\r\n frozenConfig = deepFreeze(deepClone(_config));\r\n }\r\n return frozenConfig;\r\n}\r\n\r\nexport function setConfig(partialConfig: IWritableConfig): void {\r\n if (typeof partialConfig.autoTrigger === \"boolean\") {\r\n _config.autoTrigger = partialConfig.autoTrigger;\r\n }\r\n if (typeof partialConfig.triggerAttribute === \"string\") {\r\n _config.triggerAttribute = partialConfig.triggerAttribute;\r\n }\r\n if (partialConfig.tagNames) {\r\n Object.assign(_config.tagNames, partialConfig.tagNames);\r\n }\r\n frozenConfig = null;\r\n}\r\n","import { raiseError } from \"../raiseError.js\";\r\nimport { IWcBindable } from \"../types.js\";\r\n\r\nexport interface FetchRequestOptions {\r\n method?: string;\r\n headers?: Record<string, string>;\r\n body?: BodyInit | null;\r\n contentType?: string | null;\r\n forceText?: boolean;\r\n}\r\n\r\nexport class FetchCore extends EventTarget {\r\n static wcBindable: IWcBindable = {\r\n protocol: \"wc-bindable\",\r\n version: 1,\r\n properties: [\r\n { name: \"value\", event: \"wcs-fetch:response\", getter: (e: Event) => (e as CustomEvent).detail.value },\r\n { name: \"loading\", event: \"wcs-fetch:loading-changed\" },\r\n { name: \"error\", event: \"wcs-fetch:error\" },\r\n { name: \"status\", event: \"wcs-fetch:response\", getter: (e: Event) => (e as CustomEvent).detail.status },\r\n ],\r\n };\r\n\r\n private _target: EventTarget;\r\n private _value: any = null;\r\n private _loading: boolean = false;\r\n private _error: any = null;\r\n private _status: number = 0;\r\n private _abortController: AbortController | null = null;\r\n private _promise: Promise<any> = Promise.resolve(null);\r\n\r\n constructor(target?: EventTarget) {\r\n super();\r\n this._target = target ?? this;\r\n }\r\n\r\n get value(): any {\r\n return this._value;\r\n }\r\n\r\n get loading(): boolean {\r\n return this._loading;\r\n }\r\n\r\n get error(): any {\r\n return this._error;\r\n }\r\n\r\n get status(): number {\r\n return this._status;\r\n }\r\n\r\n get promise(): Promise<any> {\r\n return this._promise;\r\n }\r\n\r\n private _setLoading(loading: boolean): void {\r\n this._loading = loading;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-fetch:loading-changed\", {\r\n detail: loading,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setError(error: any): void {\r\n this._error = error;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-fetch:error\", {\r\n detail: error,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setResponse(value: any, status: number): void {\r\n this._value = value;\r\n this._status = status;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-fetch:response\", {\r\n detail: { value, status },\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n abort(): void {\r\n if (this._abortController) {\r\n this._abortController.abort();\r\n this._abortController = null;\r\n }\r\n }\r\n\r\n async fetch(url: string, options: FetchRequestOptions = {}): Promise<any> {\r\n if (!url) {\r\n raiseError(\"url attribute is required.\");\r\n }\r\n\r\n const p = this._doFetch(url, options);\r\n this._promise = p;\r\n return p;\r\n }\r\n\r\n private async _doFetch(url: string, options: FetchRequestOptions): Promise<any> {\r\n // 進行中のリクエストをキャンセル\r\n this.abort();\r\n\r\n this._abortController = new AbortController();\r\n const { signal } = this._abortController;\r\n\r\n this._setLoading(true);\r\n this._error = null;\r\n\r\n const {\r\n method = \"GET\",\r\n headers = {},\r\n body = null,\r\n contentType = null,\r\n forceText = false,\r\n } = options;\r\n\r\n try {\r\n if (contentType && !headers[\"Content-Type\"]) {\r\n headers[\"Content-Type\"] = contentType;\r\n }\r\n\r\n const requestInit: RequestInit = {\r\n method,\r\n headers,\r\n signal,\r\n };\r\n\r\n if (method !== \"GET\" && method !== \"HEAD\" && body !== null) {\r\n requestInit.body = body;\r\n }\r\n\r\n const response = await globalThis.fetch(url, requestInit);\r\n this._status = response.status;\r\n\r\n if (!response.ok) {\r\n const errorBody = await response.text().catch(() => \"\");\r\n const error = { status: response.status, statusText: response.statusText, body: errorBody };\r\n this._setError(error);\r\n this._setLoading(false);\r\n return null;\r\n }\r\n\r\n if (forceText) {\r\n const text = await response.text();\r\n this._setResponse(text, response.status);\r\n } else {\r\n const responseContentType = response.headers.get(\"Content-Type\") || \"\";\r\n if (responseContentType.includes(\"application/json\")) {\r\n const data = await response.json();\r\n this._setResponse(data, response.status);\r\n } else {\r\n const text = await response.text();\r\n this._setResponse(text, response.status);\r\n }\r\n }\r\n\r\n this._setLoading(false);\r\n return this._value;\r\n } catch (e: any) {\r\n if (e.name === \"AbortError\") {\r\n this._setLoading(false);\r\n return null;\r\n }\r\n this._setError(e);\r\n this._setLoading(false);\r\n return null;\r\n } finally {\r\n this._abortController = null;\r\n }\r\n }\r\n}\r\n","export function raiseError(message: string): never {\r\n throw new Error(`[@wcstack/fetch] ${message}`);\r\n}\r\n","import { config } from \"../config.js\";\r\nimport { IWcBindable } from \"../types.js\";\r\nimport { FetchCore } from \"../core/FetchCore.js\";\r\nimport { FetchHeader } from \"./FetchHeader.js\";\r\nimport { FetchBody } from \"./FetchBody.js\";\r\n\r\nexport class Fetch extends HTMLElement {\r\n static hasConnectedCallbackPromise = true;\r\n static wcBindable: IWcBindable = {\r\n ...FetchCore.wcBindable,\r\n properties: [\r\n ...FetchCore.wcBindable.properties,\r\n { name: \"trigger\", event: \"wcs-fetch:trigger-changed\" },\r\n ],\r\n };\r\n static get observedAttributes(): string[] { return [\"url\"]; }\r\n\r\n private _core: FetchCore;\r\n private _body: any = null;\r\n private _trigger: boolean = false;\r\n private _connectedCallbackPromise: Promise<void> = Promise.resolve();\r\n\r\n constructor() {\r\n super();\r\n this._core = new FetchCore(this);\r\n }\r\n\r\n get url(): string {\r\n return this.getAttribute(\"url\") || \"\";\r\n }\r\n\r\n set url(value: string) {\r\n this.setAttribute(\"url\", value);\r\n }\r\n\r\n get method(): string {\r\n return (this.getAttribute(\"method\") || \"GET\").toUpperCase();\r\n }\r\n\r\n set method(value: string) {\r\n this.setAttribute(\"method\", value);\r\n }\r\n\r\n get target(): string | null {\r\n return this.getAttribute(\"target\");\r\n }\r\n\r\n set target(value: string | null) {\r\n if (value === null) {\r\n this.removeAttribute(\"target\");\r\n } else {\r\n this.setAttribute(\"target\", value);\r\n }\r\n }\r\n\r\n get value(): any {\r\n return this._core.value;\r\n }\r\n\r\n get loading(): boolean {\r\n return this._core.loading;\r\n }\r\n\r\n get error(): any {\r\n return this._core.error;\r\n }\r\n\r\n get status(): number {\r\n return this._core.status;\r\n }\r\n\r\n get promise(): Promise<any> {\r\n return this._core.promise;\r\n }\r\n\r\n get connectedCallbackPromise(): Promise<void> {\r\n return this._connectedCallbackPromise;\r\n }\r\n\r\n get manual(): boolean {\r\n return this.hasAttribute(\"manual\");\r\n }\r\n\r\n set manual(value: boolean) {\r\n if (value) {\r\n this.setAttribute(\"manual\", \"\");\r\n } else {\r\n this.removeAttribute(\"manual\");\r\n }\r\n }\r\n\r\n get body(): any {\r\n return this._body;\r\n }\r\n\r\n set body(value: any) {\r\n this._body = value;\r\n }\r\n\r\n get trigger(): boolean {\r\n return this._trigger;\r\n }\r\n\r\n set trigger(value: boolean) {\r\n const v = !!value;\r\n if (v) {\r\n this._trigger = true;\r\n this.fetch().finally(() => {\r\n this._trigger = false;\r\n this.dispatchEvent(new CustomEvent(\"wcs-fetch:trigger-changed\", {\r\n detail: false,\r\n bubbles: true,\r\n }));\r\n });\r\n }\r\n }\r\n\r\n private _collectHeaders(): Record<string, string> {\r\n const headers: Record<string, string> = {};\r\n const headerElements = this.querySelectorAll<FetchHeader>(config.tagNames.fetchHeader);\r\n for (const el of headerElements) {\r\n const name = el.headerName;\r\n const value = el.headerValue;\r\n if (name) {\r\n headers[name] = value;\r\n }\r\n }\r\n return headers;\r\n }\r\n\r\n private _collectBody(): { body: BodyInit | null; contentType: string | null } {\r\n // JS API経由のbodyが優先\r\n if (this._body !== null) {\r\n return {\r\n body: typeof this._body === \"string\" ? this._body : JSON.stringify(this._body),\r\n contentType: typeof this._body === \"string\" ? null : \"application/json\",\r\n };\r\n }\r\n\r\n // サブタグからbodyを取得\r\n const bodyElement = this.querySelector<FetchBody>(config.tagNames.fetchBody);\r\n if (bodyElement) {\r\n return {\r\n body: bodyElement.bodyContent || null,\r\n contentType: bodyElement.contentType,\r\n };\r\n }\r\n\r\n return { body: null, contentType: null };\r\n }\r\n\r\n abort(): void {\r\n this._core.abort();\r\n }\r\n\r\n async fetch(): Promise<any> {\r\n const headers = this._collectHeaders();\r\n const { body, contentType } = this._collectBody();\r\n\r\n const result = await this._core.fetch(this.url, {\r\n method: this.method,\r\n headers,\r\n body,\r\n contentType,\r\n forceText: !!this.target,\r\n });\r\n\r\n // HTML置換モード\r\n if (this.target && result !== null) {\r\n const targetElement = document.getElementById(this.target);\r\n if (targetElement) {\r\n targetElement.innerHTML = result;\r\n }\r\n }\r\n\r\n // bodyをリセット(一回限りの使用)\r\n this._body = null;\r\n\r\n return result;\r\n }\r\n\r\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\r\n if (name === \"url\" && this.isConnected && !this.manual && newValue) {\r\n this.fetch();\r\n }\r\n }\r\n\r\n connectedCallback(): void {\r\n this.style.display = \"none\";\r\n if (!this.manual && this.url) {\r\n this._connectedCallbackPromise = this.fetch().then(() => {});\r\n }\r\n }\r\n\r\n disconnectedCallback(): void {\r\n this.abort();\r\n }\r\n}\r\n","export class FetchHeader extends HTMLElement {\r\n connectedCallback(): void {\r\n this.style.display = \"none\";\r\n }\r\n\r\n get headerName(): string {\r\n return this.getAttribute(\"name\") || \"\";\r\n }\r\n\r\n get headerValue(): string {\r\n return this.getAttribute(\"value\") || \"\";\r\n }\r\n}\r\n","export class FetchBody extends HTMLElement {\r\n constructor() {\r\n super();\r\n // スロットなしのShadow DOMでlight DOM(bodyテキスト)の描画を抑制\r\n this.attachShadow({ mode: \"open\" });\r\n }\r\n\r\n get contentType(): string {\r\n return this.getAttribute(\"type\") || \"application/json\";\r\n }\r\n\r\n get bodyContent(): string {\r\n return this.textContent?.trim() || \"\";\r\n }\r\n}\r\n","import { config } from \"./config.js\";\r\nimport { Fetch } from \"./components/Fetch.js\";\r\n\r\nlet registered = false;\r\n\r\nfunction handleClick(event: Event): void {\r\n const target = event.target;\r\n if (!(target instanceof Element)) return;\r\n\r\n const triggerElement = target.closest<Element>(`[${config.triggerAttribute}]`);\r\n if (!triggerElement) return;\r\n\r\n const fetchId = triggerElement.getAttribute(config.triggerAttribute);\r\n if (!fetchId) return;\r\n\r\n const fetchElement = document.getElementById(fetchId) as Fetch | null;\r\n if (!fetchElement || !(fetchElement instanceof Fetch)) return;\r\n\r\n event.preventDefault();\r\n fetchElement.fetch();\r\n}\r\n\r\nexport function registerAutoTrigger(): void {\r\n if (registered) return;\r\n registered = true;\r\n document.addEventListener(\"click\", handleClick);\r\n}\r\n\r\nexport function unregisterAutoTrigger(): void {\r\n if (!registered) return;\r\n registered = false;\r\n document.removeEventListener(\"click\", handleClick);\r\n}\r\n","import { setConfig } from \"./config.js\";\r\nimport { config } from \"./config.js\";\r\nimport { registerComponents } from \"./registerComponents.js\";\r\nimport { registerAutoTrigger } from \"./autoTrigger.js\";\r\nimport { IWritableConfig } from \"./types.js\";\r\n\r\nexport function bootstrapFetch(userConfig?: IWritableConfig): void {\r\n if (userConfig) {\r\n setConfig(userConfig);\r\n }\r\n registerComponents();\r\n if (config.autoTrigger) {\r\n registerAutoTrigger();\r\n }\r\n}\r\n","import { Fetch } from \"./components/Fetch.js\";\r\nimport { FetchHeader } from \"./components/FetchHeader.js\";\r\nimport { FetchBody } from \"./components/FetchBody.js\";\r\nimport { config } from \"./config.js\";\r\n\r\nexport function registerComponents(): void {\r\n if (!customElements.get(config.tagNames.fetch)) {\r\n customElements.define(config.tagNames.fetch, Fetch);\r\n }\r\n if (!customElements.get(config.tagNames.fetchHeader)) {\r\n customElements.define(config.tagNames.fetchHeader, FetchHeader);\r\n }\r\n if (!customElements.get(config.tagNames.fetchBody)) {\r\n customElements.define(config.tagNames.fetchBody, FetchBody);\r\n }\r\n}\r\n"],"names":["_config","autoTrigger","triggerAttribute","tagNames","fetch","fetchHeader","fetchBody","deepFreeze","obj","Object","freeze","key","keys","deepClone","clone","frozenConfig","config","getConfig","FetchCore","EventTarget","static","protocol","version","properties","name","event","getter","e","detail","value","status","_target","_value","_loading","_error","_status","_abortController","_promise","Promise","resolve","constructor","target","super","this","loading","error","promise","_setLoading","dispatchEvent","CustomEvent","bubbles","_setError","_setResponse","abort","url","options","message","Error","raiseError","p","_doFetch","AbortController","signal","method","headers","body","contentType","forceText","requestInit","response","globalThis","ok","errorBody","text","catch","statusText","get","includes","data","json","Fetch","HTMLElement","wcBindable","observedAttributes","_core","_body","_trigger","_connectedCallbackPromise","getAttribute","setAttribute","toUpperCase","removeAttribute","connectedCallbackPromise","manual","hasAttribute","trigger","finally","_collectHeaders","headerElements","querySelectorAll","el","headerName","headerValue","_collectBody","JSON","stringify","bodyElement","querySelector","bodyContent","result","targetElement","document","getElementById","innerHTML","attributeChangedCallback","_oldValue","newValue","isConnected","connectedCallback","style","display","then","disconnectedCallback","FetchHeader","FetchBody","attachShadow","mode","textContent","trim","registered","handleClick","Element","triggerElement","closest","fetchId","fetchElement","preventDefault","bootstrapFetch","userConfig","partialConfig","assign","customElements","define","addEventListener"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.min.js","sources":["../src/config.ts","../src/core/FetchCore.ts","../src/raiseError.ts","../src/autoTrigger.ts","../src/components/Fetch.ts","../src/components/FetchHeader.ts","../src/components/FetchBody.ts","../src/bootstrapFetch.ts","../src/registerComponents.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types.js\";\r\n\r\ninterface IInternalConfig extends IConfig {\r\n autoTrigger: boolean;\r\n triggerAttribute: string;\r\n tagNames: {\r\n fetch: string;\r\n fetchHeader: string;\r\n fetchBody: string;\r\n };\r\n}\r\n\r\nconst _config: IInternalConfig = {\r\n autoTrigger: true,\r\n triggerAttribute: \"data-fetchtarget\",\r\n tagNames: {\r\n fetch: \"wcs-fetch\",\r\n fetchHeader: \"wcs-fetch-header\",\r\n fetchBody: \"wcs-fetch-body\",\r\n },\r\n};\r\n\r\nfunction deepFreeze<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n Object.freeze(obj);\r\n for (const key of Object.keys(obj)) {\r\n deepFreeze((obj as Record<string, unknown>)[key]);\r\n }\r\n return obj;\r\n}\r\n\r\nfunction deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n const clone: Record<string, unknown> = {};\r\n for (const key of Object.keys(obj)) {\r\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\r\n }\r\n return clone as T;\r\n}\r\n\r\nlet frozenConfig: IConfig | null = null;\r\n\r\nexport const config: IConfig = _config as IConfig;\r\n\r\nexport function getConfig(): IConfig {\r\n if (!frozenConfig) {\r\n frozenConfig = deepFreeze(deepClone(_config));\r\n }\r\n return frozenConfig;\r\n}\r\n\r\nexport function setConfig(partialConfig: IWritableConfig): void {\r\n if (typeof partialConfig.autoTrigger === \"boolean\") {\r\n _config.autoTrigger = partialConfig.autoTrigger;\r\n }\r\n if (typeof partialConfig.triggerAttribute === \"string\") {\r\n _config.triggerAttribute = partialConfig.triggerAttribute;\r\n }\r\n if (partialConfig.tagNames) {\r\n Object.assign(_config.tagNames, partialConfig.tagNames);\r\n }\r\n frozenConfig = null;\r\n}\r\n","import { raiseError } from \"../raiseError.js\";\r\nimport { IWcBindable } from \"../types.js\";\r\n\r\nexport interface FetchRequestOptions {\r\n method?: string;\r\n headers?: Record<string, string>;\r\n body?: BodyInit | null;\r\n contentType?: string | null;\r\n forceText?: boolean;\r\n}\r\n\r\nexport class FetchCore extends EventTarget {\r\n static wcBindable: IWcBindable = {\r\n protocol: \"wc-bindable\",\r\n version: 1,\r\n properties: [\r\n { name: \"value\", event: \"wcs-fetch:response\", getter: (e: Event) => (e as CustomEvent).detail.value },\r\n { name: \"loading\", event: \"wcs-fetch:loading-changed\" },\r\n { name: \"error\", event: \"wcs-fetch:error\" },\r\n { name: \"status\", event: \"wcs-fetch:response\", getter: (e: Event) => (e as CustomEvent).detail.status },\r\n ],\r\n };\r\n\r\n private _target: EventTarget;\r\n private _value: any = null;\r\n private _loading: boolean = false;\r\n private _error: any = null;\r\n private _status: number = 0;\r\n private _abortController: AbortController | null = null;\r\n private _promise: Promise<any> = Promise.resolve(null);\r\n\r\n constructor(target?: EventTarget) {\r\n super();\r\n this._target = target ?? this;\r\n }\r\n\r\n get value(): any {\r\n return this._value;\r\n }\r\n\r\n get loading(): boolean {\r\n return this._loading;\r\n }\r\n\r\n get error(): any {\r\n return this._error;\r\n }\r\n\r\n get status(): number {\r\n return this._status;\r\n }\r\n\r\n get promise(): Promise<any> {\r\n return this._promise;\r\n }\r\n\r\n private _setLoading(loading: boolean): void {\r\n this._loading = loading;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-fetch:loading-changed\", {\r\n detail: loading,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setError(error: any): void {\r\n this._error = error;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-fetch:error\", {\r\n detail: error,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setResponse(value: any, status: number): void {\r\n this._value = value;\r\n this._status = status;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-fetch:response\", {\r\n detail: { value, status },\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n abort(): void {\r\n if (this._abortController) {\r\n this._abortController.abort();\r\n this._abortController = null;\r\n }\r\n }\r\n\r\n async fetch(url: string, options: FetchRequestOptions = {}): Promise<any> {\r\n if (!url) {\r\n raiseError(\"url attribute is required.\");\r\n }\r\n\r\n const p = this._doFetch(url, options);\r\n this._promise = p;\r\n return p;\r\n }\r\n\r\n private async _doFetch(url: string, options: FetchRequestOptions): Promise<any> {\r\n // 進行中のリクエストをキャンセル\r\n this.abort();\r\n\r\n this._abortController = new AbortController();\r\n const { signal } = this._abortController;\r\n\r\n this._setLoading(true);\r\n this._error = null;\r\n\r\n const {\r\n method = \"GET\",\r\n headers = {},\r\n body = null,\r\n contentType = null,\r\n forceText = false,\r\n } = options;\r\n\r\n try {\r\n if (contentType && !headers[\"Content-Type\"]) {\r\n headers[\"Content-Type\"] = contentType;\r\n }\r\n\r\n const requestInit: RequestInit = {\r\n method,\r\n headers,\r\n signal,\r\n };\r\n\r\n if (method !== \"GET\" && method !== \"HEAD\" && body !== null) {\r\n requestInit.body = body;\r\n }\r\n\r\n const response = await globalThis.fetch(url, requestInit);\r\n this._status = response.status;\r\n\r\n if (!response.ok) {\r\n const errorBody = await response.text().catch(() => \"\");\r\n const error = { status: response.status, statusText: response.statusText, body: errorBody };\r\n this._setError(error);\r\n this._setLoading(false);\r\n return null;\r\n }\r\n\r\n if (forceText) {\r\n const text = await response.text();\r\n this._setResponse(text, response.status);\r\n } else {\r\n const responseContentType = response.headers.get(\"Content-Type\") || \"\";\r\n if (responseContentType.includes(\"application/json\")) {\r\n const data = await response.json();\r\n this._setResponse(data, response.status);\r\n } else {\r\n const text = await response.text();\r\n this._setResponse(text, response.status);\r\n }\r\n }\r\n\r\n this._setLoading(false);\r\n return this._value;\r\n } catch (e: any) {\r\n if (e.name === \"AbortError\") {\r\n this._setLoading(false);\r\n return null;\r\n }\r\n this._setError(e);\r\n this._setLoading(false);\r\n return null;\r\n } finally {\r\n this._abortController = null;\r\n }\r\n }\r\n}\r\n","export function raiseError(message: string): never {\r\n throw new Error(`[@wcstack/fetch] ${message}`);\r\n}\r\n","import { config } from \"./config.js\";\r\nimport { Fetch } from \"./components/Fetch.js\";\r\n\r\nlet registered = false;\r\n\r\nfunction handleClick(event: Event): void {\r\n const target = event.target;\r\n if (!(target instanceof Element)) return;\r\n\r\n const triggerElement = target.closest<Element>(`[${config.triggerAttribute}]`);\r\n if (!triggerElement) return;\r\n\r\n const fetchId = triggerElement.getAttribute(config.triggerAttribute);\r\n if (!fetchId) return;\r\n\r\n const fetchElement = document.getElementById(fetchId) as Fetch | null;\r\n if (!fetchElement || !(fetchElement instanceof Fetch)) return;\r\n\r\n event.preventDefault();\r\n fetchElement.fetch();\r\n}\r\n\r\nexport function registerAutoTrigger(): void {\r\n if (registered) return;\r\n registered = true;\r\n document.addEventListener(\"click\", handleClick);\r\n}\r\n\r\nexport function unregisterAutoTrigger(): void {\r\n if (!registered) return;\r\n registered = false;\r\n document.removeEventListener(\"click\", handleClick);\r\n}\r\n","import { config } from \"../config.js\";\r\nimport { IWcBindable } from \"../types.js\";\r\nimport { FetchCore } from \"../core/FetchCore.js\";\r\nimport { FetchHeader } from \"./FetchHeader.js\";\r\nimport { FetchBody } from \"./FetchBody.js\";\r\nimport { registerAutoTrigger } from \"../autoTrigger.js\";\r\n\r\nexport class Fetch extends HTMLElement {\r\n static hasConnectedCallbackPromise = true;\r\n static wcBindable: IWcBindable = {\r\n ...FetchCore.wcBindable,\r\n properties: [\r\n ...FetchCore.wcBindable.properties,\r\n { name: \"trigger\", event: \"wcs-fetch:trigger-changed\" },\r\n ],\r\n };\r\n static get observedAttributes(): string[] { return [\"url\"]; }\r\n\r\n private _core: FetchCore;\r\n private _body: any = null;\r\n private _trigger: boolean = false;\r\n private _connectedCallbackPromise: Promise<void> = Promise.resolve();\r\n\r\n constructor() {\r\n super();\r\n this._core = new FetchCore(this);\r\n }\r\n\r\n get url(): string {\r\n return this.getAttribute(\"url\") || \"\";\r\n }\r\n\r\n set url(value: string) {\r\n this.setAttribute(\"url\", value);\r\n }\r\n\r\n get method(): string {\r\n return (this.getAttribute(\"method\") || \"GET\").toUpperCase();\r\n }\r\n\r\n set method(value: string) {\r\n this.setAttribute(\"method\", value);\r\n }\r\n\r\n get target(): string | null {\r\n return this.getAttribute(\"target\");\r\n }\r\n\r\n set target(value: string | null) {\r\n if (value === null) {\r\n this.removeAttribute(\"target\");\r\n } else {\r\n this.setAttribute(\"target\", value);\r\n }\r\n }\r\n\r\n get value(): any {\r\n return this._core.value;\r\n }\r\n\r\n get loading(): boolean {\r\n return this._core.loading;\r\n }\r\n\r\n get error(): any {\r\n return this._core.error;\r\n }\r\n\r\n get status(): number {\r\n return this._core.status;\r\n }\r\n\r\n get promise(): Promise<any> {\r\n return this._core.promise;\r\n }\r\n\r\n get connectedCallbackPromise(): Promise<void> {\r\n return this._connectedCallbackPromise;\r\n }\r\n\r\n get manual(): boolean {\r\n return this.hasAttribute(\"manual\");\r\n }\r\n\r\n set manual(value: boolean) {\r\n if (value) {\r\n this.setAttribute(\"manual\", \"\");\r\n } else {\r\n this.removeAttribute(\"manual\");\r\n }\r\n }\r\n\r\n get body(): any {\r\n return this._body;\r\n }\r\n\r\n set body(value: any) {\r\n this._body = value;\r\n }\r\n\r\n get trigger(): boolean {\r\n return this._trigger;\r\n }\r\n\r\n set trigger(value: boolean) {\r\n const v = !!value;\r\n if (v) {\r\n this._trigger = true;\r\n this.fetch().finally(() => {\r\n this._trigger = false;\r\n this.dispatchEvent(new CustomEvent(\"wcs-fetch:trigger-changed\", {\r\n detail: false,\r\n bubbles: true,\r\n }));\r\n });\r\n }\r\n }\r\n\r\n private _collectHeaders(): Record<string, string> {\r\n const headers: Record<string, string> = {};\r\n const headerElements = this.querySelectorAll<FetchHeader>(config.tagNames.fetchHeader);\r\n for (const el of headerElements) {\r\n const name = el.headerName;\r\n const value = el.headerValue;\r\n if (name) {\r\n headers[name] = value;\r\n }\r\n }\r\n return headers;\r\n }\r\n\r\n private _collectBody(): { body: BodyInit | null; contentType: string | null } {\r\n // JS API経由のbodyが優先\r\n if (this._body !== null) {\r\n return {\r\n body: typeof this._body === \"string\" ? this._body : JSON.stringify(this._body),\r\n contentType: typeof this._body === \"string\" ? null : \"application/json\",\r\n };\r\n }\r\n\r\n // サブタグからbodyを取得\r\n const bodyElement = this.querySelector<FetchBody>(config.tagNames.fetchBody);\r\n if (bodyElement) {\r\n return {\r\n body: bodyElement.bodyContent || null,\r\n contentType: bodyElement.contentType,\r\n };\r\n }\r\n\r\n return { body: null, contentType: null };\r\n }\r\n\r\n abort(): void {\r\n this._core.abort();\r\n }\r\n\r\n async fetch(): Promise<any> {\r\n const headers = this._collectHeaders();\r\n const { body, contentType } = this._collectBody();\r\n\r\n const result = await this._core.fetch(this.url, {\r\n method: this.method,\r\n headers,\r\n body,\r\n contentType,\r\n forceText: !!this.target,\r\n });\r\n\r\n // HTML置換モード\r\n if (this.target && result !== null) {\r\n const targetElement = document.getElementById(this.target);\r\n if (targetElement) {\r\n targetElement.innerHTML = result;\r\n }\r\n }\r\n\r\n // bodyをリセット(一回限りの使用)\r\n this._body = null;\r\n\r\n return result;\r\n }\r\n\r\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\r\n if (name === \"url\" && this.isConnected && !this.manual && newValue) {\r\n this.fetch();\r\n }\r\n }\r\n\r\n connectedCallback(): void {\r\n this.style.display = \"none\";\r\n if (config.autoTrigger) {\r\n registerAutoTrigger();\r\n }\r\n if (!this.manual && this.url) {\r\n this._connectedCallbackPromise = this.fetch().then(() => {});\r\n }\r\n }\r\n\r\n disconnectedCallback(): void {\r\n this.abort();\r\n }\r\n}\r\n","export class FetchHeader extends HTMLElement {\r\n connectedCallback(): void {\r\n this.style.display = \"none\";\r\n }\r\n\r\n get headerName(): string {\r\n return this.getAttribute(\"name\") || \"\";\r\n }\r\n\r\n get headerValue(): string {\r\n return this.getAttribute(\"value\") || \"\";\r\n }\r\n}\r\n","export class FetchBody extends HTMLElement {\r\n constructor() {\r\n super();\r\n // スロットなしのShadow DOMでlight DOM(bodyテキスト)の描画を抑制\r\n this.attachShadow({ mode: \"open\" });\r\n }\r\n\r\n get contentType(): string {\r\n return this.getAttribute(\"type\") || \"application/json\";\r\n }\r\n\r\n get bodyContent(): string {\r\n return this.textContent?.trim() || \"\";\r\n }\r\n}\r\n","import { setConfig } from \"./config.js\";\r\nimport { registerComponents } from \"./registerComponents.js\";\r\nimport { IWritableConfig } from \"./types.js\";\r\n\r\nexport function bootstrapFetch(userConfig?: IWritableConfig): void {\r\n if (userConfig) {\r\n setConfig(userConfig);\r\n }\r\n registerComponents();\r\n}\r\n","import { Fetch } from \"./components/Fetch.js\";\r\nimport { FetchHeader } from \"./components/FetchHeader.js\";\r\nimport { FetchBody } from \"./components/FetchBody.js\";\r\nimport { config } from \"./config.js\";\r\n\r\nexport function registerComponents(): void {\r\n if (!customElements.get(config.tagNames.fetch)) {\r\n customElements.define(config.tagNames.fetch, Fetch);\r\n }\r\n if (!customElements.get(config.tagNames.fetchHeader)) {\r\n customElements.define(config.tagNames.fetchHeader, FetchHeader);\r\n }\r\n if (!customElements.get(config.tagNames.fetchBody)) {\r\n customElements.define(config.tagNames.fetchBody, FetchBody);\r\n }\r\n}\r\n"],"names":["_config","autoTrigger","triggerAttribute","tagNames","fetch","fetchHeader","fetchBody","deepFreeze","obj","Object","freeze","key","keys","deepClone","clone","frozenConfig","config","getConfig","FetchCore","EventTarget","static","protocol","version","properties","name","event","getter","e","detail","value","status","_target","_value","_loading","_error","_status","_abortController","_promise","Promise","resolve","constructor","target","super","this","loading","error","promise","_setLoading","dispatchEvent","CustomEvent","bubbles","_setError","_setResponse","abort","url","options","message","Error","raiseError","p","_doFetch","AbortController","signal","method","headers","body","contentType","forceText","requestInit","response","globalThis","ok","errorBody","text","catch","statusText","get","includes","data","json","registered","handleClick","Element","triggerElement","closest","fetchId","getAttribute","fetchElement","document","getElementById","Fetch","preventDefault","HTMLElement","wcBindable","observedAttributes","_core","_body","_trigger","_connectedCallbackPromise","setAttribute","toUpperCase","removeAttribute","connectedCallbackPromise","manual","hasAttribute","trigger","finally","_collectHeaders","headerElements","querySelectorAll","el","headerName","headerValue","_collectBody","JSON","stringify","bodyElement","querySelector","bodyContent","result","targetElement","innerHTML","attributeChangedCallback","_oldValue","newValue","isConnected","connectedCallback","style","display","addEventListener","then","disconnectedCallback","FetchHeader","FetchBody","attachShadow","mode","textContent","trim","bootstrapFetch","userConfig","partialConfig","assign","customElements","define"],"mappings":"AAYA,MAAMA,EAA2B,CAC/BC,aAAa,EACbC,iBAAkB,mBAClBC,SAAU,CACRC,MAAO,YACPC,YAAa,mBACbC,UAAW,mBAIf,SAASC,EAAcC,GACrB,GAAY,OAARA,GAA+B,iBAARA,EAAkB,OAAOA,EACpDC,OAAOC,OAAOF,GACd,IAAK,MAAMG,KAAOF,OAAOG,KAAKJ,GAC5BD,EAAYC,EAAgCG,IAE9C,OAAOH,CACT,CAEA,SAASK,EAAaL,GACpB,GAAY,OAARA,GAA+B,iBAARA,EAAkB,OAAOA,EACpD,MAAMM,EAAiC,CAAA,EACvC,IAAK,MAAMH,KAAOF,OAAOG,KAAKJ,GAC5BM,EAAMH,GAAOE,EAAWL,EAAgCG,IAE1D,OAAOG,CACT,CAEA,IAAIC,EAA+B,KAE5B,MAAMC,EAAkBhB,WAEfiB,IAId,OAHKF,IACHA,EAAeR,EAAWM,EAAUb,KAE/Be,CACT,CCtCM,MAAOG,UAAkBC,YAC7BC,kBAAiC,CAC/BC,SAAU,cACVC,QAAS,EACTC,WAAY,CACV,CAAEC,KAAM,QAASC,MAAO,qBAAsBC,OAASC,GAAcA,EAAkBC,OAAOC,OAC9F,CAAEL,KAAM,UAAWC,MAAO,6BAC1B,CAAED,KAAM,QAASC,MAAO,mBACxB,CAAED,KAAM,SAAUC,MAAO,qBAAsBC,OAASC,GAAcA,EAAkBC,OAAOE,UAI3FC,QACAC,OAAc,KACdC,UAAoB,EACpBC,OAAc,KACdC,QAAkB,EAClBC,iBAA2C,KAC3CC,SAAyBC,QAAQC,QAAQ,MAEjD,WAAAC,CAAYC,GACVC,QACAC,KAAKZ,QAAUU,GAAUE,IAC3B,CAEA,SAAId,GACF,OAAOc,KAAKX,MACd,CAEA,WAAIY,GACF,OAAOD,KAAKV,QACd,CAEA,SAAIY,GACF,OAAOF,KAAKT,MACd,CAEA,UAAIJ,GACF,OAAOa,KAAKR,OACd,CAEA,WAAIW,GACF,OAAOH,KAAKN,QACd,CAEQ,WAAAU,CAAYH,GAClBD,KAAKV,SAAWW,EAChBD,KAAKZ,QAAQiB,cAAc,IAAIC,YAAY,4BAA6B,CACtErB,OAAQgB,EACRM,SAAS,IAEb,CAEQ,SAAAC,CAAUN,GAChBF,KAAKT,OAASW,EACdF,KAAKZ,QAAQiB,cAAc,IAAIC,YAAY,kBAAmB,CAC5DrB,OAAQiB,EACRK,SAAS,IAEb,CAEQ,YAAAE,CAAavB,EAAYC,GAC/Ba,KAAKX,OAASH,EACdc,KAAKR,QAAUL,EACfa,KAAKZ,QAAQiB,cAAc,IAAIC,YAAY,qBAAsB,CAC/DrB,OAAQ,CAAEC,QAAOC,UACjBoB,SAAS,IAEb,CAEA,KAAAG,GACMV,KAAKP,mBACPO,KAAKP,iBAAiBiB,QACtBV,KAAKP,iBAAmB,KAE5B,CAEA,WAAMhC,CAAMkD,EAAaC,EAA+B,IACjDD,GCzFH,SAAqBE,GACzB,MAAM,IAAIC,MAAM,oBAAoBD,IACtC,CDwFME,CAAW,8BAGb,MAAMC,EAAIhB,KAAKiB,SAASN,EAAKC,GAE7B,OADAZ,KAAKN,SAAWsB,EACTA,CACT,CAEQ,cAAMC,CAASN,EAAaC,GAElCZ,KAAKU,QAELV,KAAKP,iBAAmB,IAAIyB,gBAC5B,MAAMC,OAAEA,GAAWnB,KAAKP,iBAExBO,KAAKI,aAAY,GACjBJ,KAAKT,OAAS,KAEd,MAAM6B,OACJA,EAAS,MAAKC,QACdA,EAAU,CAAA,EAAEC,KACZA,EAAO,KAAIC,YACXA,EAAc,KAAIC,UAClBA,GAAY,GACVZ,EAEJ,IACMW,IAAgBF,EAAQ,kBAC1BA,EAAQ,gBAAkBE,GAG5B,MAAME,EAA2B,CAC/BL,SACAC,UACAF,UAGa,QAAXC,GAA+B,SAAXA,GAA8B,OAATE,IAC3CG,EAAYH,KAAOA,GAGrB,MAAMI,QAAiBC,WAAWlE,MAAMkD,EAAKc,GAG7C,GAFAzB,KAAKR,QAAUkC,EAASvC,QAEnBuC,EAASE,GAAI,CAChB,MAAMC,QAAkBH,EAASI,OAAOC,MAAM,IAAM,IAC9C7B,EAAQ,CAAEf,OAAQuC,EAASvC,OAAQ6C,WAAYN,EAASM,WAAYV,KAAMO,GAGhF,OAFA7B,KAAKQ,UAAUN,GACfF,KAAKI,aAAY,GACV,IACT,CAEA,GAAIoB,EAAW,CACb,MAAMM,QAAaJ,EAASI,OAC5B9B,KAAKS,aAAaqB,EAAMJ,EAASvC,OACnC,KAAO,CAEL,IAD4BuC,EAASL,QAAQY,IAAI,iBAAmB,IAC5CC,SAAS,oBAAqB,CACpD,MAAMC,QAAaT,EAASU,OAC5BpC,KAAKS,aAAa0B,EAAMT,EAASvC,OACnC,KAAO,CACL,MAAM2C,QAAaJ,EAASI,OAC5B9B,KAAKS,aAAaqB,EAAMJ,EAASvC,OACnC,CACF,CAGA,OADAa,KAAKI,aAAY,GACVJ,KAAKX,MACd,CAAE,MAAOL,GACP,MAAe,eAAXA,EAAEH,MACJmB,KAAKI,aAAY,GACV,OAETJ,KAAKQ,UAAUxB,GACfgB,KAAKI,aAAY,GACV,KACT,SACEJ,KAAKP,iBAAmB,IAC1B,CACF,EEtKF,IAAI4C,GAAa,EAEjB,SAASC,EAAYxD,GACnB,MAAMgB,EAAShB,EAAMgB,OACrB,KAAMA,aAAkByC,SAAU,OAElC,MAAMC,EAAiB1C,EAAO2C,QAAiB,IAAIpE,EAAOd,qBAC1D,IAAKiF,EAAgB,OAErB,MAAME,EAAUF,EAAeG,aAAatE,EAAOd,kBACnD,IAAKmF,EAAS,OAEd,MAAME,EAAeC,SAASC,eAAeJ,GACxCE,GAAkBA,aAAwBG,IAE/CjE,EAAMkE,iBACNJ,EAAanF,QACf,CCbM,MAAOsF,UAAcE,YACzBxE,oCAAqC,EACrCA,kBAAiC,IAC5BF,EAAU2E,WACbtE,WAAY,IACPL,EAAU2E,WAAWtE,WACxB,CAAEC,KAAM,UAAWC,MAAO,+BAG9B,6BAAWqE,GAAiC,MAAO,CAAC,MAAQ,CAEpDC,MACAC,MAAa,KACbC,UAAoB,EACpBC,0BAA2C5D,QAAQC,UAE3D,WAAAC,GACEE,QACAC,KAAKoD,MAAQ,IAAI7E,EAAUyB,KAC7B,CAEA,OAAIW,GACF,OAAOX,KAAK2C,aAAa,QAAU,EACrC,CAEA,OAAIhC,CAAIzB,GACNc,KAAKwD,aAAa,MAAOtE,EAC3B,CAEA,UAAIkC,GACF,OAAQpB,KAAK2C,aAAa,WAAa,OAAOc,aAChD,CAEA,UAAIrC,CAAOlC,GACTc,KAAKwD,aAAa,SAAUtE,EAC9B,CAEA,UAAIY,GACF,OAAOE,KAAK2C,aAAa,SAC3B,CAEA,UAAI7C,CAAOZ,GACK,OAAVA,EACFc,KAAK0D,gBAAgB,UAErB1D,KAAKwD,aAAa,SAAUtE,EAEhC,CAEA,SAAIA,GACF,OAAOc,KAAKoD,MAAMlE,KACpB,CAEA,WAAIe,GACF,OAAOD,KAAKoD,MAAMnD,OACpB,CAEA,SAAIC,GACF,OAAOF,KAAKoD,MAAMlD,KACpB,CAEA,UAAIf,GACF,OAAOa,KAAKoD,MAAMjE,MACpB,CAEA,WAAIgB,GACF,OAAOH,KAAKoD,MAAMjD,OACpB,CAEA,4BAAIwD,GACF,OAAO3D,KAAKuD,yBACd,CAEA,UAAIK,GACF,OAAO5D,KAAK6D,aAAa,SAC3B,CAEA,UAAID,CAAO1E,GACLA,EACFc,KAAKwD,aAAa,SAAU,IAE5BxD,KAAK0D,gBAAgB,SAEzB,CAEA,QAAIpC,GACF,OAAOtB,KAAKqD,KACd,CAEA,QAAI/B,CAAKpC,GACPc,KAAKqD,MAAQnE,CACf,CAEA,WAAI4E,GACF,OAAO9D,KAAKsD,QACd,CAEA,WAAIQ,CAAQ5E,KACEA,IAEVc,KAAKsD,UAAW,EAChBtD,KAAKvC,QAAQsG,QAAQ,KACnB/D,KAAKsD,UAAW,EAChBtD,KAAKK,cAAc,IAAIC,YAAY,4BAA6B,CAC9DrB,QAAQ,EACRsB,SAAS,OAIjB,CAEQ,eAAAyD,GACN,MAAM3C,EAAkC,CAAA,EAClC4C,EAAiBjE,KAAKkE,iBAA8B7F,EAAOb,SAASE,aAC1E,IAAK,MAAMyG,KAAMF,EAAgB,CAC/B,MAAMpF,EAAOsF,EAAGC,WACVlF,EAAQiF,EAAGE,YACbxF,IACFwC,EAAQxC,GAAQK,EAEpB,CACA,OAAOmC,CACT,CAEQ,YAAAiD,GAEN,GAAmB,OAAftE,KAAKqD,MACP,MAAO,CACL/B,KAA4B,iBAAftB,KAAKqD,MAAqBrD,KAAKqD,MAAQkB,KAAKC,UAAUxE,KAAKqD,OACxE9B,YAAmC,iBAAfvB,KAAKqD,MAAqB,KAAO,oBAKzD,MAAMoB,EAAczE,KAAK0E,cAAyBrG,EAAOb,SAASG,WAClE,OAAI8G,EACK,CACLnD,KAAMmD,EAAYE,aAAe,KACjCpD,YAAakD,EAAYlD,aAItB,CAAED,KAAM,KAAMC,YAAa,KACpC,CAEA,KAAAb,GACEV,KAAKoD,MAAM1C,OACb,CAEA,WAAMjD,GACJ,MAAM4D,EAAUrB,KAAKgE,mBACf1C,KAAEA,EAAIC,YAAEA,GAAgBvB,KAAKsE,eAE7BM,QAAe5E,KAAKoD,MAAM3F,MAAMuC,KAAKW,IAAK,CAC9CS,OAAQpB,KAAKoB,OACbC,UACAC,OACAC,cACAC,YAAaxB,KAAKF,SAIpB,GAAIE,KAAKF,QAAqB,OAAX8E,EAAiB,CAClC,MAAMC,EAAgBhC,SAASC,eAAe9C,KAAKF,QAC/C+E,IACFA,EAAcC,UAAYF,EAE9B,CAKA,OAFA5E,KAAKqD,MAAQ,KAENuB,CACT,CAEA,wBAAAG,CAAyBlG,EAAcmG,EAA0BC,GAClD,QAATpG,GAAkBmB,KAAKkF,cAAgBlF,KAAK4D,QAAUqB,GACxDjF,KAAKvC,OAET,CAEA,iBAAA0H,GACEnF,KAAKoF,MAAMC,QAAU,OACjBhH,EAAOf,cDvKT+E,IACJA,GAAa,EACbQ,SAASyC,iBAAiB,QAAShD,MCwK5BtC,KAAK4D,QAAU5D,KAAKW,MACvBX,KAAKuD,0BAA4BvD,KAAKvC,QAAQ8H,KAAK,QAEvD,CAEA,oBAAAC,GACExF,KAAKU,OACP,ECxMI,MAAO+E,UAAoBxC,YAC/B,iBAAAkC,GACEnF,KAAKoF,MAAMC,QAAU,MACvB,CAEA,cAAIjB,GACF,OAAOpE,KAAK2C,aAAa,SAAW,EACtC,CAEA,eAAI0B,GACF,OAAOrE,KAAK2C,aAAa,UAAY,EACvC,ECXI,MAAO+C,UAAkBzC,YAC7B,WAAApD,GACEE,QAEAC,KAAK2F,aAAa,CAAEC,KAAM,QAC5B,CAEA,eAAIrE,GACF,OAAOvB,KAAK2C,aAAa,SAAW,kBACtC,CAEA,eAAIgC,GACF,OAAO3E,KAAK6F,aAAaC,QAAU,EACrC,ECTI,SAAUC,EAAeC,GP+CzB,IAAoBC,EO9CpBD,IP+CqC,kBADjBC,EO7CZD,GP8Ca1I,cACvBD,EAAQC,YAAc2I,EAAc3I,aAEQ,iBAAnC2I,EAAc1I,mBACvBF,EAAQE,iBAAmB0I,EAAc1I,kBAEvC0I,EAAczI,UAChBM,OAAOoI,OAAO7I,EAAQG,SAAUyI,EAAczI,UAEhDY,EAAe,MQvDV+H,eAAelE,IAAI5D,EAAOb,SAASC,QACtC0I,eAAeC,OAAO/H,EAAOb,SAASC,MAAOsF,GAE1CoD,eAAelE,IAAI5D,EAAOb,SAASE,cACtCyI,eAAeC,OAAO/H,EAAOb,SAASE,YAAa+H,GAEhDU,eAAelE,IAAI5D,EAAOb,SAASG,YACtCwI,eAAeC,OAAO/H,EAAOb,SAASG,UAAW+H,EDJrD"}
|
package/package.json
CHANGED