@wcstack/fetch 1.5.2 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +16 -1
- package/dist/index.esm.js +45 -2
- 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.d.ts
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
|
+
interface ITagNames {
|
|
2
|
+
readonly fetch: string;
|
|
3
|
+
readonly fetchHeader: string;
|
|
4
|
+
readonly fetchBody: string;
|
|
5
|
+
}
|
|
1
6
|
interface IWritableTagNames {
|
|
2
7
|
fetch?: string;
|
|
3
8
|
fetchHeader?: string;
|
|
4
9
|
fetchBody?: string;
|
|
5
10
|
}
|
|
11
|
+
interface IConfig {
|
|
12
|
+
readonly autoTrigger: boolean;
|
|
13
|
+
readonly triggerAttribute: string;
|
|
14
|
+
readonly tagNames: ITagNames;
|
|
15
|
+
}
|
|
6
16
|
interface IWritableConfig {
|
|
7
17
|
autoTrigger?: boolean;
|
|
8
18
|
triggerAttribute?: string;
|
|
@@ -62,6 +72,8 @@ interface WcsFetchValues<T = unknown> extends WcsFetchCoreValues<T> {
|
|
|
62
72
|
|
|
63
73
|
declare function bootstrapFetch(userConfig?: IWritableConfig): void;
|
|
64
74
|
|
|
75
|
+
declare function getConfig(): IConfig;
|
|
76
|
+
|
|
65
77
|
interface FetchRequestOptions {
|
|
66
78
|
method?: string;
|
|
67
79
|
headers?: Record<string, string>;
|
|
@@ -77,17 +89,20 @@ declare class FetchCore extends EventTarget {
|
|
|
77
89
|
private _error;
|
|
78
90
|
private _status;
|
|
79
91
|
private _abortController;
|
|
92
|
+
private _promise;
|
|
80
93
|
constructor(target?: EventTarget);
|
|
81
94
|
get value(): any;
|
|
82
95
|
get loading(): boolean;
|
|
83
96
|
get error(): any;
|
|
84
97
|
get status(): number;
|
|
98
|
+
get promise(): Promise<any>;
|
|
85
99
|
private _setLoading;
|
|
86
100
|
private _setError;
|
|
87
101
|
private _setResponse;
|
|
88
102
|
abort(): void;
|
|
89
103
|
fetch(url: string, options?: FetchRequestOptions): Promise<any>;
|
|
104
|
+
private _doFetch;
|
|
90
105
|
}
|
|
91
106
|
|
|
92
|
-
export { FetchCore, bootstrapFetch };
|
|
107
|
+
export { FetchCore, bootstrapFetch, getConfig };
|
|
93
108
|
export type { FetchRequestOptions, IWritableConfig, IWritableTagNames, WcsFetchCoreValues, WcsFetchHttpError, WcsFetchValues };
|
package/dist/index.esm.js
CHANGED
|
@@ -7,7 +7,32 @@ const _config = {
|
|
|
7
7
|
fetchBody: "wcs-fetch-body",
|
|
8
8
|
},
|
|
9
9
|
};
|
|
10
|
+
function deepFreeze(obj) {
|
|
11
|
+
if (obj === null || typeof obj !== "object")
|
|
12
|
+
return obj;
|
|
13
|
+
Object.freeze(obj);
|
|
14
|
+
for (const key of Object.keys(obj)) {
|
|
15
|
+
deepFreeze(obj[key]);
|
|
16
|
+
}
|
|
17
|
+
return obj;
|
|
18
|
+
}
|
|
19
|
+
function deepClone(obj) {
|
|
20
|
+
if (obj === null || typeof obj !== "object")
|
|
21
|
+
return obj;
|
|
22
|
+
const clone = {};
|
|
23
|
+
for (const key of Object.keys(obj)) {
|
|
24
|
+
clone[key] = deepClone(obj[key]);
|
|
25
|
+
}
|
|
26
|
+
return clone;
|
|
27
|
+
}
|
|
28
|
+
let frozenConfig = null;
|
|
10
29
|
const config = _config;
|
|
30
|
+
function getConfig() {
|
|
31
|
+
if (!frozenConfig) {
|
|
32
|
+
frozenConfig = deepFreeze(deepClone(_config));
|
|
33
|
+
}
|
|
34
|
+
return frozenConfig;
|
|
35
|
+
}
|
|
11
36
|
function setConfig(partialConfig) {
|
|
12
37
|
if (typeof partialConfig.autoTrigger === "boolean") {
|
|
13
38
|
_config.autoTrigger = partialConfig.autoTrigger;
|
|
@@ -18,6 +43,7 @@ function setConfig(partialConfig) {
|
|
|
18
43
|
if (partialConfig.tagNames) {
|
|
19
44
|
Object.assign(_config.tagNames, partialConfig.tagNames);
|
|
20
45
|
}
|
|
46
|
+
frozenConfig = null;
|
|
21
47
|
}
|
|
22
48
|
|
|
23
49
|
function raiseError(message) {
|
|
@@ -41,6 +67,7 @@ class FetchCore extends EventTarget {
|
|
|
41
67
|
_error = null;
|
|
42
68
|
_status = 0;
|
|
43
69
|
_abortController = null;
|
|
70
|
+
_promise = Promise.resolve(null);
|
|
44
71
|
constructor(target) {
|
|
45
72
|
super();
|
|
46
73
|
this._target = target ?? this;
|
|
@@ -57,6 +84,9 @@ class FetchCore extends EventTarget {
|
|
|
57
84
|
get status() {
|
|
58
85
|
return this._status;
|
|
59
86
|
}
|
|
87
|
+
get promise() {
|
|
88
|
+
return this._promise;
|
|
89
|
+
}
|
|
60
90
|
_setLoading(loading) {
|
|
61
91
|
this._loading = loading;
|
|
62
92
|
this._target.dispatchEvent(new CustomEvent("wcs-fetch:loading-changed", {
|
|
@@ -89,6 +119,11 @@ class FetchCore extends EventTarget {
|
|
|
89
119
|
if (!url) {
|
|
90
120
|
raiseError("url attribute is required.");
|
|
91
121
|
}
|
|
122
|
+
const p = this._doFetch(url, options);
|
|
123
|
+
this._promise = p;
|
|
124
|
+
return p;
|
|
125
|
+
}
|
|
126
|
+
async _doFetch(url, options) {
|
|
92
127
|
// 進行中のリクエストをキャンセル
|
|
93
128
|
this.abort();
|
|
94
129
|
this._abortController = new AbortController();
|
|
@@ -151,6 +186,7 @@ class FetchCore extends EventTarget {
|
|
|
151
186
|
}
|
|
152
187
|
|
|
153
188
|
class Fetch extends HTMLElement {
|
|
189
|
+
static hasConnectedCallbackPromise = true;
|
|
154
190
|
static wcBindable = {
|
|
155
191
|
...FetchCore.wcBindable,
|
|
156
192
|
properties: [
|
|
@@ -162,6 +198,7 @@ class Fetch extends HTMLElement {
|
|
|
162
198
|
_core;
|
|
163
199
|
_body = null;
|
|
164
200
|
_trigger = false;
|
|
201
|
+
_connectedCallbackPromise = Promise.resolve();
|
|
165
202
|
constructor() {
|
|
166
203
|
super();
|
|
167
204
|
this._core = new FetchCore(this);
|
|
@@ -201,6 +238,12 @@ class Fetch extends HTMLElement {
|
|
|
201
238
|
get status() {
|
|
202
239
|
return this._core.status;
|
|
203
240
|
}
|
|
241
|
+
get promise() {
|
|
242
|
+
return this._core.promise;
|
|
243
|
+
}
|
|
244
|
+
get connectedCallbackPromise() {
|
|
245
|
+
return this._connectedCallbackPromise;
|
|
246
|
+
}
|
|
204
247
|
get manual() {
|
|
205
248
|
return this.hasAttribute("manual");
|
|
206
249
|
}
|
|
@@ -296,7 +339,7 @@ class Fetch extends HTMLElement {
|
|
|
296
339
|
connectedCallback() {
|
|
297
340
|
this.style.display = "none";
|
|
298
341
|
if (!this.manual && this.url) {
|
|
299
|
-
this.fetch();
|
|
342
|
+
this._connectedCallbackPromise = this.fetch().then(() => { });
|
|
300
343
|
}
|
|
301
344
|
}
|
|
302
345
|
disconnectedCallback() {
|
|
@@ -376,5 +419,5 @@ function bootstrapFetch(userConfig) {
|
|
|
376
419
|
}
|
|
377
420
|
}
|
|
378
421
|
|
|
379
|
-
export { FetchCore, bootstrapFetch };
|
|
422
|
+
export { FetchCore, bootstrapFetch, getConfig };
|
|
380
423
|
//# sourceMappingURL=index.esm.js.map
|
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\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 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 // 進行中のリクエストをキャンセル\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 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\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 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.fetch();\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/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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"}
|
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"}}
|
|
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}}}class a 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",!this.manual&&this.url&&(this._connectedCallbackPromise=this.fetch().then(()=>{}))}disconnectedCallback(){this.abort()}}class l extends HTMLElement{connectedCallback(){this.style.display="none"}get headerName(){return this.getAttribute("name")||""}get headerValue(){return this.getAttribute("value")||""}}class c extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"})}get contentType(){return this.getAttribute("type")||"application/json"}get bodyContent(){return this.textContent?.trim()||""}}let u=!1;function h(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 a&&(t.preventDefault(),o.fetch())}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,a),customElements.get(n.tagNames.fetchHeader)||customElements.define(n.tagNames.fetchHeader,l),customElements.get(n.tagNames.fetchBody)||customElements.define(n.tagNames.fetchBody,c),n.autoTrigger&&(u||(u=!0,document.addEventListener("click",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\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 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 // 進行中のリクエストをキャンセル\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 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\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 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.fetch();\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","config","FetchCore","EventTarget","static","protocol","version","properties","name","event","getter","e","detail","value","status","_target","_value","_loading","_error","_status","_abortController","constructor","target","super","this","loading","error","_setLoading","dispatchEvent","CustomEvent","bubbles","_setError","_setResponse","abort","url","options","message","Error","raiseError","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","getAttribute","setAttribute","toUpperCase","removeAttribute","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","disconnectedCallback","FetchHeader","FetchBody","attachShadow","mode","textContent","trim","registered","handleClick","Element","triggerElement","closest","fetchId","fetchElement","preventDefault","bootstrapFetch","userConfig","partialConfig","Object","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/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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"}
|
package/package.json
CHANGED