@nvwa-app/nvwa-http-polyfill 0.1.0

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.
@@ -0,0 +1,123 @@
1
+ declare class Headers {
2
+ private readonly headerMap;
3
+ constructor(init?: Headers | Record<string, string> | [string, string][]);
4
+ append(name: string, value: string): void;
5
+ set(name: string, value: string): void;
6
+ get(name: string): string | null;
7
+ has(name: string): boolean;
8
+ delete(name: string): void;
9
+ forEach(callback: (value: string, key: string, parent: Headers) => void): void;
10
+ entries(): IterableIterator<[string, string]>;
11
+ keys(): IterableIterator<string>;
12
+ values(): IterableIterator<string>;
13
+ [Symbol.iterator](): IterableIterator<[string, string]>;
14
+ }
15
+ declare class URLSearchParams {
16
+ private params;
17
+ constructor(init?: string | URLSearchParams | Record<string, string> | [string, string][] | Iterable<[string, string]>);
18
+ private parseString;
19
+ append(name: string, value: string): void;
20
+ delete(name: string): void;
21
+ get(name: string): string | null;
22
+ getAll(name: string): string[];
23
+ has(name: string): boolean;
24
+ set(name: string, value: string): void;
25
+ sort(): void;
26
+ toString(): string;
27
+ forEach(callback: (value: string, key: string, parent: URLSearchParams) => void): void;
28
+ keys(): IterableIterator<string>;
29
+ values(): IterableIterator<string>;
30
+ entries(): IterableIterator<[string, string]>;
31
+ [Symbol.iterator](): IterableIterator<[string, string]>;
32
+ get size(): number;
33
+ }
34
+ declare class URL$1 {
35
+ readonly href: string;
36
+ readonly origin: string;
37
+ readonly protocol: string;
38
+ readonly username: string;
39
+ readonly password: string;
40
+ readonly host: string;
41
+ readonly hostname: string;
42
+ readonly port: string;
43
+ readonly pathname: string;
44
+ readonly search: string;
45
+ readonly searchParams: URLSearchParams;
46
+ readonly hash: string;
47
+ constructor(url: string | URL$1, base?: string | URL$1);
48
+ private resolve;
49
+ private parseUrl;
50
+ toString(): string;
51
+ toJSON(): string;
52
+ }
53
+
54
+ /** 与标准 fetch 的 RequestInit 对齐,便于 AuthClient 等传入 credentials / headers 对象 */
55
+ interface RequestInit {
56
+ method?: string;
57
+ /** Headers 实例或可被 Headers 构造器接受的格式 */
58
+ headers?: Headers | Record<string, string> | [string, string][];
59
+ body?: any;
60
+ /** 与标准 fetch 一致,AuthClient 传 "omit" 等 */
61
+ credentials?: "omit" | "same-origin" | "include";
62
+ timeout?: number;
63
+ signal?: {
64
+ aborted: boolean;
65
+ addEventListener: Function;
66
+ } | null;
67
+ }
68
+ type RequestInfo = string | {
69
+ url?: string;
70
+ } | URL;
71
+ declare class Request {
72
+ readonly url: string;
73
+ readonly method: string;
74
+ readonly headers: Headers;
75
+ readonly body?: any;
76
+ readonly timeout?: number;
77
+ readonly signal?: any;
78
+ constructor(input: RequestInfo, init?: RequestInit);
79
+ clone(): Request;
80
+ toString(): string;
81
+ }
82
+
83
+ interface ResponseInit {
84
+ status?: number;
85
+ statusText?: string;
86
+ headers?: Headers;
87
+ }
88
+ declare class Response {
89
+ private readonly bodyData;
90
+ readonly status: number;
91
+ readonly statusText: string;
92
+ readonly headers: Headers;
93
+ readonly ok: boolean;
94
+ constructor(body?: any, init?: ResponseInit);
95
+ text(): Promise<string>;
96
+ json<T = unknown>(): Promise<T>;
97
+ arrayBuffer(): Promise<ArrayBuffer>;
98
+ }
99
+
100
+ type AbortListener = () => void;
101
+ declare class AbortSignal {
102
+ private _aborted;
103
+ private listeners;
104
+ onabort: AbortListener | null;
105
+ get aborted(): boolean;
106
+ _trigger(): void;
107
+ addEventListener(_: "abort", listener: AbortListener): void;
108
+ removeEventListener(_: "abort", listener: AbortListener): void;
109
+ toString(): string;
110
+ }
111
+ declare class AbortController {
112
+ private _signal;
113
+ constructor();
114
+ get signal(): AbortSignal;
115
+ abort(): void;
116
+ toString(): string;
117
+ }
118
+
119
+ declare function polyfill(_global: any | undefined): void;
120
+
121
+ type NvwaFetch = (input: string | URL$1 | RequestInfo, init?: RequestInit) => Promise<Response>;
122
+
123
+ export { AbortController, AbortSignal, Headers, type NvwaFetch, Request, type RequestInfo, type RequestInit, Response, type ResponseInit, URL$1 as URL, URLSearchParams, polyfill };
@@ -0,0 +1,123 @@
1
+ declare class Headers {
2
+ private readonly headerMap;
3
+ constructor(init?: Headers | Record<string, string> | [string, string][]);
4
+ append(name: string, value: string): void;
5
+ set(name: string, value: string): void;
6
+ get(name: string): string | null;
7
+ has(name: string): boolean;
8
+ delete(name: string): void;
9
+ forEach(callback: (value: string, key: string, parent: Headers) => void): void;
10
+ entries(): IterableIterator<[string, string]>;
11
+ keys(): IterableIterator<string>;
12
+ values(): IterableIterator<string>;
13
+ [Symbol.iterator](): IterableIterator<[string, string]>;
14
+ }
15
+ declare class URLSearchParams {
16
+ private params;
17
+ constructor(init?: string | URLSearchParams | Record<string, string> | [string, string][] | Iterable<[string, string]>);
18
+ private parseString;
19
+ append(name: string, value: string): void;
20
+ delete(name: string): void;
21
+ get(name: string): string | null;
22
+ getAll(name: string): string[];
23
+ has(name: string): boolean;
24
+ set(name: string, value: string): void;
25
+ sort(): void;
26
+ toString(): string;
27
+ forEach(callback: (value: string, key: string, parent: URLSearchParams) => void): void;
28
+ keys(): IterableIterator<string>;
29
+ values(): IterableIterator<string>;
30
+ entries(): IterableIterator<[string, string]>;
31
+ [Symbol.iterator](): IterableIterator<[string, string]>;
32
+ get size(): number;
33
+ }
34
+ declare class URL$1 {
35
+ readonly href: string;
36
+ readonly origin: string;
37
+ readonly protocol: string;
38
+ readonly username: string;
39
+ readonly password: string;
40
+ readonly host: string;
41
+ readonly hostname: string;
42
+ readonly port: string;
43
+ readonly pathname: string;
44
+ readonly search: string;
45
+ readonly searchParams: URLSearchParams;
46
+ readonly hash: string;
47
+ constructor(url: string | URL$1, base?: string | URL$1);
48
+ private resolve;
49
+ private parseUrl;
50
+ toString(): string;
51
+ toJSON(): string;
52
+ }
53
+
54
+ /** 与标准 fetch 的 RequestInit 对齐,便于 AuthClient 等传入 credentials / headers 对象 */
55
+ interface RequestInit {
56
+ method?: string;
57
+ /** Headers 实例或可被 Headers 构造器接受的格式 */
58
+ headers?: Headers | Record<string, string> | [string, string][];
59
+ body?: any;
60
+ /** 与标准 fetch 一致,AuthClient 传 "omit" 等 */
61
+ credentials?: "omit" | "same-origin" | "include";
62
+ timeout?: number;
63
+ signal?: {
64
+ aborted: boolean;
65
+ addEventListener: Function;
66
+ } | null;
67
+ }
68
+ type RequestInfo = string | {
69
+ url?: string;
70
+ } | URL;
71
+ declare class Request {
72
+ readonly url: string;
73
+ readonly method: string;
74
+ readonly headers: Headers;
75
+ readonly body?: any;
76
+ readonly timeout?: number;
77
+ readonly signal?: any;
78
+ constructor(input: RequestInfo, init?: RequestInit);
79
+ clone(): Request;
80
+ toString(): string;
81
+ }
82
+
83
+ interface ResponseInit {
84
+ status?: number;
85
+ statusText?: string;
86
+ headers?: Headers;
87
+ }
88
+ declare class Response {
89
+ private readonly bodyData;
90
+ readonly status: number;
91
+ readonly statusText: string;
92
+ readonly headers: Headers;
93
+ readonly ok: boolean;
94
+ constructor(body?: any, init?: ResponseInit);
95
+ text(): Promise<string>;
96
+ json<T = unknown>(): Promise<T>;
97
+ arrayBuffer(): Promise<ArrayBuffer>;
98
+ }
99
+
100
+ type AbortListener = () => void;
101
+ declare class AbortSignal {
102
+ private _aborted;
103
+ private listeners;
104
+ onabort: AbortListener | null;
105
+ get aborted(): boolean;
106
+ _trigger(): void;
107
+ addEventListener(_: "abort", listener: AbortListener): void;
108
+ removeEventListener(_: "abort", listener: AbortListener): void;
109
+ toString(): string;
110
+ }
111
+ declare class AbortController {
112
+ private _signal;
113
+ constructor();
114
+ get signal(): AbortSignal;
115
+ abort(): void;
116
+ toString(): string;
117
+ }
118
+
119
+ declare function polyfill(_global: any | undefined): void;
120
+
121
+ type NvwaFetch = (input: string | URL$1 | RequestInfo, init?: RequestInit) => Promise<Response>;
122
+
123
+ export { AbortController, AbortSignal, Headers, type NvwaFetch, Request, type RequestInfo, type RequestInit, Response, type ResponseInit, URL$1 as URL, URLSearchParams, polyfill };
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";var b=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var A=(o,t)=>{for(var r in t)b(o,r,{get:t[r],enumerable:!0})},k=(o,t,r,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of U(t))!M.call(o,s)&&s!==r&&b(o,s,{get:()=>t[s],enumerable:!(e=L(t,s))||e.enumerable});return o};var P=o=>k(b({},"__esModule",{value:!0}),o);var q={};A(q,{AbortController:()=>g,AbortSignal:()=>h,Headers:()=>a,Request:()=>d,Response:()=>u,URL:()=>l,URLSearchParams:()=>i,polyfill:()=>E});module.exports=P(q);var a=class o{constructor(t){this.headerMap=new Map;if(t){if(t instanceof o)t.forEach((r,e)=>this.set(e,r));else if(Array.isArray(t))for(let[r,e]of t)this.set(r,String(e));else if(typeof t=="object")for(let r of Object.keys(t))this.set(r,String(t[r]))}}append(t,r){let e=t.toLowerCase(),s=this.headerMap.get(e);this.headerMap.set(e,s?`${s}, ${r}`:r)}set(t,r){this.headerMap.set(t.toLowerCase(),String(r))}get(t){let r=this.headerMap.get(t.toLowerCase());return r??null}has(t){return this.headerMap.has(t.toLowerCase())}delete(t){this.headerMap.delete(t.toLowerCase())}forEach(t){for(let[r,e]of this.headerMap.entries())t(e,r,this)}entries(){return this.headerMap.entries()}keys(){return this.headerMap.keys()}values(){return this.headerMap.values()}[Symbol.iterator](){return this.entries()}},i=class o{constructor(t){this.params=new Map;if(t){if(typeof t=="string")this.parseString(t);else if(t instanceof o)this.params=new Map(t.params);else if(Array.isArray(t))for(let[r,e]of t)this.append(r,e);else if(t&&typeof t=="object")for(let[r,e]of Object.entries(t))this.set(r,e)}}parseString(t){t.startsWith("?")&&(t=t.slice(1));let r=t.split("&");for(let e of r)if(e){let[s,n]=e.split("=");s&&this.append(decodeURIComponent(s),n?decodeURIComponent(n):"")}}append(t,r){let e=this.params.get(t)||[];e.push(r),this.params.set(t,e)}delete(t){this.params.delete(t)}get(t){let r=this.params.get(t);return r?r[0]:null}getAll(t){return this.params.get(t)||[]}has(t){return this.params.has(t)}set(t,r){this.params.set(t,[r])}sort(){let t=Array.from(this.params.entries()).sort(([r],[e])=>r.localeCompare(e));this.params=new Map(t)}toString(){let t=[];for(let[r,e]of this.params.entries())for(let s of e)t.push(`${encodeURIComponent(r)}=${encodeURIComponent(s)}`);return t.join("&")}forEach(t){for(let[r,e]of this.params.entries())for(let s of e)t(s,r,this)}keys(){return this.params.keys()}values(){let t=[];for(let r of this.params.values())t.push(...r);return t[Symbol.iterator]()}entries(){let t=[];for(let[r,e]of this.params.entries())for(let s of e)t.push([r,s]);return t[Symbol.iterator]()}[Symbol.iterator](){return this.entries()}get size(){return this.params.size}},l=class o{constructor(t,r){let e;if(t instanceof o)e=t.href;else if(r){let n=r instanceof o?r.href:r;e=this.resolve(n,t)}else e=t;let s=this.parseUrl(e);this.href=e,this.origin=`${s.protocol}//${s.host}`,this.protocol=s.protocol,this.username=s.username,this.password=s.password,this.host=s.host,this.hostname=s.hostname,this.port=s.port,this.pathname=s.pathname,this.search=s.search,this.searchParams=new i(s.search),this.hash=s.hash}resolve(t,r){if(r.startsWith("http://")||r.startsWith("https://"))return r;if(r.startsWith("//"))return`${this.parseUrl(t).protocol}${r}`;if(r.startsWith("/")){let n=this.parseUrl(t);return`${n.protocol}//${n.host}${r}`}let e=this.parseUrl(t),s=e.pathname.endsWith("/")?e.pathname:e.pathname+"/";return`${e.protocol}//${e.host}${s}${r}`}parseUrl(t){let r=t.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!r)throw new TypeError("Invalid URL");let e=r[2]||"",s=r[4]||"",n=r[5]||"/",I=r[7]?`?${r[7]}`:"",R=r[9]?`#${r[9]}`:"";if(!e&&!s&&!n.startsWith("/")&&!n.includes("/")&&!n.includes("."))throw new TypeError("Invalid URL");let m=s.match(/^([^@]*)@(.+)$/),v="",S="",f=s;if(m){let $=m[1];f=m[2];let y=$.match(/^([^:]*):?(.*)$/);y&&(v=y[1]||"",S=y[2]||"")}let p=f.match(/^([^:]+):?(\d*)$/),w=p?p[1]:f,x=p&&p[2]?p[2]:"";return{protocol:e?`${e}:`:"",username:v,password:S,host:f,hostname:w,port:x,pathname:n,search:I,hash:R}}toString(){let t=this.searchParams.toString(),r=t?`?${t}`:"";return`${this.protocol}//${this.host}${this.pathname}${r}${this.hash}`}toJSON(){return this.toString()}};var d=class o{constructor(t,r){if(typeof t=="string")this.url=t;else if(t?.url)this.url=String(t.url);else if(typeof t?.toString=="function")this.url=String(t.toString());else throw new Error("Invalid input for Request");this.method=(r?.method||"GET").toUpperCase(),this.headers=r?.headers instanceof a?r.headers:new a(r?.headers),this.body=r?.body,this.timeout=r?.timeout,this.signal=r?.signal||void 0}clone(){return new o(this.url,{method:this.method,headers:this.headers,body:this.body,timeout:this.timeout})}toString(){return this.url}};var u=class{constructor(t,r){this.bodyData=t,this.status=r?.status??200,this.statusText=r?.statusText??"",this.headers=C(r?.headers),this.ok=this.status>=200&&this.status<300}async text(){return typeof this.bodyData=="string"?this.bodyData:this.bodyData==null?"":typeof this.bodyData=="object"?JSON.stringify(this.bodyData):String(this.bodyData)}async json(){if(typeof this.bodyData=="string")try{return JSON.parse(this.bodyData)}catch{}return this.bodyData}async arrayBuffer(){let t=await this.text();return new TextEncoder().encode(t).buffer}};function C(o){return o?new a(o):new a}var h=class{constructor(){this._aborted=!1;this.listeners=new Set;this.onabort=null}get aborted(){return this._aborted}_trigger(){if(!this._aborted){if(this._aborted=!0,typeof this.onabort=="function")try{this.onabort()}catch{}for(let t of Array.from(this.listeners))try{t()}catch{}this.listeners.clear()}}addEventListener(t,r){if(this._aborted){try{r()}catch{}return}this.listeners.add(r)}removeEventListener(t,r){this.listeners.delete(r)}toString(){return"[object AbortSignal]"}},g=class{constructor(){this._signal=new h}get signal(){return this._signal}abort(){this._signal._trigger()}toString(){return"[object AbortController]"}};function E(o){o!==void 0&&(o.URL=l,o.URLSearchParams=i,o.Headers=a,o.Request=d,o.Response=u,o.AbortController=g,o.AbortSignal=h)}0&&(module.exports={AbortController,AbortSignal,Headers,Request,Response,URL,URLSearchParams,polyfill});
package/dist/index.mjs ADDED
@@ -0,0 +1 @@
1
+ var a=class o{constructor(t){this.headerMap=new Map;if(t){if(t instanceof o)t.forEach((r,e)=>this.set(e,r));else if(Array.isArray(t))for(let[r,e]of t)this.set(r,String(e));else if(typeof t=="object")for(let r of Object.keys(t))this.set(r,String(t[r]))}}append(t,r){let e=t.toLowerCase(),s=this.headerMap.get(e);this.headerMap.set(e,s?`${s}, ${r}`:r)}set(t,r){this.headerMap.set(t.toLowerCase(),String(r))}get(t){let r=this.headerMap.get(t.toLowerCase());return r??null}has(t){return this.headerMap.has(t.toLowerCase())}delete(t){this.headerMap.delete(t.toLowerCase())}forEach(t){for(let[r,e]of this.headerMap.entries())t(e,r,this)}entries(){return this.headerMap.entries()}keys(){return this.headerMap.keys()}values(){return this.headerMap.values()}[Symbol.iterator](){return this.entries()}},h=class o{constructor(t){this.params=new Map;if(t){if(typeof t=="string")this.parseString(t);else if(t instanceof o)this.params=new Map(t.params);else if(Array.isArray(t))for(let[r,e]of t)this.append(r,e);else if(t&&typeof t=="object")for(let[r,e]of Object.entries(t))this.set(r,e)}}parseString(t){t.startsWith("?")&&(t=t.slice(1));let r=t.split("&");for(let e of r)if(e){let[s,n]=e.split("=");s&&this.append(decodeURIComponent(s),n?decodeURIComponent(n):"")}}append(t,r){let e=this.params.get(t)||[];e.push(r),this.params.set(t,e)}delete(t){this.params.delete(t)}get(t){let r=this.params.get(t);return r?r[0]:null}getAll(t){return this.params.get(t)||[]}has(t){return this.params.has(t)}set(t,r){this.params.set(t,[r])}sort(){let t=Array.from(this.params.entries()).sort(([r],[e])=>r.localeCompare(e));this.params=new Map(t)}toString(){let t=[];for(let[r,e]of this.params.entries())for(let s of e)t.push(`${encodeURIComponent(r)}=${encodeURIComponent(s)}`);return t.join("&")}forEach(t){for(let[r,e]of this.params.entries())for(let s of e)t(s,r,this)}keys(){return this.params.keys()}values(){let t=[];for(let r of this.params.values())t.push(...r);return t[Symbol.iterator]()}entries(){let t=[];for(let[r,e]of this.params.entries())for(let s of e)t.push([r,s]);return t[Symbol.iterator]()}[Symbol.iterator](){return this.entries()}get size(){return this.params.size}},u=class o{constructor(t,r){let e;if(t instanceof o)e=t.href;else if(r){let n=r instanceof o?r.href:r;e=this.resolve(n,t)}else e=t;let s=this.parseUrl(e);this.href=e,this.origin=`${s.protocol}//${s.host}`,this.protocol=s.protocol,this.username=s.username,this.password=s.password,this.host=s.host,this.hostname=s.hostname,this.port=s.port,this.pathname=s.pathname,this.search=s.search,this.searchParams=new h(s.search),this.hash=s.hash}resolve(t,r){if(r.startsWith("http://")||r.startsWith("https://"))return r;if(r.startsWith("//"))return`${this.parseUrl(t).protocol}${r}`;if(r.startsWith("/")){let n=this.parseUrl(t);return`${n.protocol}//${n.host}${r}`}let e=this.parseUrl(t),s=e.pathname.endsWith("/")?e.pathname:e.pathname+"/";return`${e.protocol}//${e.host}${s}${r}`}parseUrl(t){let r=t.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!r)throw new TypeError("Invalid URL");let e=r[2]||"",s=r[4]||"",n=r[5]||"/",I=r[7]?`?${r[7]}`:"",R=r[9]?`#${r[9]}`:"";if(!e&&!s&&!n.startsWith("/")&&!n.includes("/")&&!n.includes("."))throw new TypeError("Invalid URL");let y=s.match(/^([^@]*)@(.+)$/),v="",S="",d=s;if(y){let $=y[1];d=y[2];let b=$.match(/^([^:]*):?(.*)$/);b&&(v=b[1]||"",S=b[2]||"")}let i=d.match(/^([^:]+):?(\d*)$/),w=i?i[1]:d,x=i&&i[2]?i[2]:"";return{protocol:e?`${e}:`:"",username:v,password:S,host:d,hostname:w,port:x,pathname:n,search:I,hash:R}}toString(){let t=this.searchParams.toString(),r=t?`?${t}`:"";return`${this.protocol}//${this.host}${this.pathname}${r}${this.hash}`}toJSON(){return this.toString()}};var g=class o{constructor(t,r){if(typeof t=="string")this.url=t;else if(t?.url)this.url=String(t.url);else if(typeof t?.toString=="function")this.url=String(t.toString());else throw new Error("Invalid input for Request");this.method=(r?.method||"GET").toUpperCase(),this.headers=r?.headers instanceof a?r.headers:new a(r?.headers),this.body=r?.body,this.timeout=r?.timeout,this.signal=r?.signal||void 0}clone(){return new o(this.url,{method:this.method,headers:this.headers,body:this.body,timeout:this.timeout})}toString(){return this.url}};var f=class{constructor(t,r){this.bodyData=t,this.status=r?.status??200,this.statusText=r?.statusText??"",this.headers=L(r?.headers),this.ok=this.status>=200&&this.status<300}async text(){return typeof this.bodyData=="string"?this.bodyData:this.bodyData==null?"":typeof this.bodyData=="object"?JSON.stringify(this.bodyData):String(this.bodyData)}async json(){if(typeof this.bodyData=="string")try{return JSON.parse(this.bodyData)}catch{}return this.bodyData}async arrayBuffer(){let t=await this.text();return new TextEncoder().encode(t).buffer}};function L(o){return o?new a(o):new a}var c=class{constructor(){this._aborted=!1;this.listeners=new Set;this.onabort=null}get aborted(){return this._aborted}_trigger(){if(!this._aborted){if(this._aborted=!0,typeof this.onabort=="function")try{this.onabort()}catch{}for(let t of Array.from(this.listeners))try{t()}catch{}this.listeners.clear()}}addEventListener(t,r){if(this._aborted){try{r()}catch{}return}this.listeners.add(r)}removeEventListener(t,r){this.listeners.delete(r)}toString(){return"[object AbortSignal]"}},m=class{constructor(){this._signal=new c}get signal(){return this._signal}abort(){this._signal._trigger()}toString(){return"[object AbortController]"}};function N(o){o!==void 0&&(o.URL=u,o.URLSearchParams=h,o.Headers=a,o.Request=g,o.Response=f,o.AbortController=m,o.AbortSignal=c)}export{m as AbortController,c as AbortSignal,a as Headers,g as Request,f as Response,u as URL,h as URLSearchParams,N as polyfill};
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@nvwa-app/nvwa-http-polyfill",
3
+ "version": "0.1.0",
4
+ "description": "NVWA HTTP 请求 polyfill",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.mjs",
11
+ "require": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist/**/*"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsup",
20
+ "dev": "tsup --watch",
21
+ "prepublishOnly": "npm run build"
22
+ },
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "https://github.com/nvwa-project/nvwa-http-polyfill.git"
29
+ },
30
+ "devDependencies": {
31
+ "@types/node": "^24.3.0",
32
+ "tsup": "^8.1.0",
33
+ "typescript": "^5.9.2"
34
+ },
35
+ "tsup": {
36
+ "entry": [
37
+ "src/index.ts"
38
+ ],
39
+ "outDir": "dist",
40
+ "clean": true,
41
+ "dts": true,
42
+ "format": [
43
+ "esm",
44
+ "cjs"
45
+ ],
46
+ "minify": true,
47
+ "splitting": false,
48
+ "shims": true
49
+ },
50
+ "keywords": [
51
+ "nvwa",
52
+ "cross-platform",
53
+ "utils",
54
+ "interfaces"
55
+ ],
56
+ "author": "",
57
+ "license": "ISC"
58
+ }