@vielzeug/fetchit 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fetchit.cjs +2 -0
- package/dist/fetchit.cjs.map +1 -0
- package/dist/fetchit.js +128 -0
- package/dist/fetchit.js.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +62 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/logit/dist/logit.cjs +2 -0
- package/dist/logit/dist/logit.cjs.map +1 -0
- package/dist/logit/dist/logit.js +178 -0
- package/dist/logit/dist/logit.js.map +1 -0
- package/package.json +38 -0
package/dist/fetchit.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("./logit/dist/logit.cjs"),R=5e3,T=12e4,C={ABORTED:499,BAD_REQUEST:400,CONFLICT:409,FORBIDDEN:403,NOT_ALLOWED:405,NOT_FOUND:404,PRE_CONDITION:412,TIMEOUT:408,UNAUTHORIZED:401},u={ERROR:"ERROR",PENDING:"PENDING",SUCCESS:"SUCCESS"},i=new Map;function y(e,t){if(t.id)return t.id;const{method:r="GET",body:n,headers:s}=t;return JSON.stringify({body:n,headers:s,method:r,url:e})}function d(e,t,r,n,s){const o=Date.now()-s,a=e.toLowerCase(),l=r.method?.toUpperCase()??"GET",c=p(t),h=e==="SUCCESS"?"✓":"✕";S.Logit[a](`HTTP::${l}(…/${c}) ${h} ${o}ms`,{req:r,res:n,url:t})}function p(e){return e.replace(/^https?:\/\//,"").split("/").slice(1).join("/")}async function f(e,t,{id:r,retries:n=2}){const s=Date.now();try{const o=await fetch(e,t),a=await O(o);return d("SUCCESS",e,t,a,s),E(r,u.SUCCESS),{data:a,ok:o.ok,status:o.status}}catch(o){if(d("ERROR",e,t,o,s),E(r,u.ERROR),n>0&&o instanceof TypeError)return f(e,t,{id:r,retries:n-1});throw o}finally{r&&t.method!=="GET"&&i.delete(r)}}async function O(e){const t=e.headers.get("content-type")??"";return t.includes("application/json")?e.json():t.includes("text")?e.text():e.blob()}function E(e,t){if(e){const r=i.get(e);r&&(r.status=t)}}async function U(e,t,r){const n=y(e,t);let s=i.get(n);if(b(t,s)&&(N(n,s),s=void 0),s&&D(s))return s.request;const o=new AbortController,a=I(e,r),l=g(t,r,o),c=f(a,l,{id:n});return i.set(n,{controller:o,expiresIn:Date.now()+(r?.expiresIn??T),request:c,status:u.PENDING}),c}function b(e,t){return e.invalidate?!0:t?e.cancelable&&t.status===u.PENDING?!0:t.status===u.ERROR:!1}function N(e,t){t&&(t.controller.abort("Request aborted"),i.delete(e))}function D(e){return Date.now()<=e.expiresIn}function I(e,t){return t?.url?`${t.url}/${e}`:e}function g(e,t,r){const n=t?.timeout??R,s=AbortSignal.any([r.signal,AbortSignal.timeout(n)]);return{...e,body:e.body?JSON.stringify(e.body):void 0,headers:m(t?.headers,e.headers),signal:s}}function m(e,t){return{...e??{},...t??{}}}function P(e,t){if(!t||Object.keys(t).length===0)return e;const r=new URL(e);for(const[n,s]of Object.entries(t))s!==void 0&&r.searchParams.append(n,String(s));return r.toString()}function v(e={url:""}){const t=r=>(n,s={})=>U(n,{...s,method:r},e);return{delete:t("DELETE"),get:t("GET"),patch:t("PATCH"),post:t("POST"),put:t("PUT"),setHeaders(r){e.headers={...e.headers,...r};for(const n in e.headers)e.headers[n]===void 0&&delete e.headers[n]}}}exports.RequestErrorType=C;exports.RequestStatus=u;exports.buildUrl=P;exports.createFetchService=v;
|
|
2
|
+
//# sourceMappingURL=fetchit.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchit.cjs","sources":["../src/fetchit.ts"],"sourcesContent":["import { Logit } from '@vielzeug/logit';\n\ntype RequestParams = Record<string, string | number | undefined>;\n\nexport type RequestResponse<T> = {\n data: T;\n ok: boolean;\n status: number;\n};\n\ntype RequestConfig = Omit<RequestInit, 'body'> & {\n id?: string;\n cancelable?: boolean;\n invalidate?: boolean;\n body?: unknown;\n};\n\ntype ContextProps = {\n expiresIn?: number;\n headers?: Record<string, string | undefined>;\n params?: RequestParams;\n timeout?: number;\n url: string;\n};\n\nconst REQUEST_TIMEOUT = 5000;\nconst CACHE_EXPIRES_IN = 120000;\n\nexport const RequestErrorType = {\n ABORTED: 499,\n BAD_REQUEST: 400,\n CONFLICT: 409,\n FORBIDDEN: 403,\n NOT_ALLOWED: 405,\n NOT_FOUND: 404,\n PRE_CONDITION: 412,\n TIMEOUT: 408,\n UNAUTHORIZED: 401,\n} as const;\n\nexport const RequestStatus = {\n ERROR: 'ERROR',\n PENDING: 'PENDING',\n SUCCESS: 'SUCCESS',\n} as const;\n\ntype RequestData<T> = {\n controller: AbortController;\n expiresIn: number;\n request: Promise<RequestResponse<T>>;\n status: (typeof RequestStatus)[keyof typeof RequestStatus];\n};\n\nconst HttpCache = new Map<string, RequestData<unknown>>();\n\n/**\n * Generates a unique cache key for a request.\n * Uses custom id if provided, otherwise creates a key from url and config.\n */\nfunction getCacheKey(url: string, config: RequestConfig): string {\n if (config.id) return config.id;\n\n // Create a stable cache key from url and relevant config properties\n const { method = 'GET', body, headers } = config;\n return JSON.stringify({ body, headers, method, url });\n}\n\n/**\n * Logs HTTP request results with elapsed time and details.\n */\nfunction log(type: 'SUCCESS' | 'ERROR', url: string, req: RequestInit, res: unknown, startTime: number): void {\n const elapsed = Date.now() - startTime;\n const logType = type.toLowerCase() as 'success' | 'error';\n const method = req.method?.toUpperCase() ?? 'GET';\n const shortUrl = formatUrlForLog(url);\n const icon = type === 'SUCCESS' ? '✓' : '✕';\n\n Logit[logType](`HTTP::${method}(…/${shortUrl}) ${icon} ${elapsed}ms`, {\n req,\n res,\n url,\n });\n}\n\n/**\n * Formats URL for logging by removing protocol and domain.\n */\nfunction formatUrlForLog(url: string): string {\n return url\n .replace(/^https?:\\/\\//, '')\n .split('/')\n .slice(1)\n .join('/');\n}\n\n/**\n * Core fetch function with retry logic and proper error handling.\n */\nasync function fetcher<T>(\n url: string,\n config: RequestInit,\n { id, retries = 2 }: { id?: string; retries?: number },\n): Promise<RequestResponse<T>> {\n const startTime = Date.now();\n\n try {\n const response = await fetch(url, config);\n const data = await parseResponse<T>(response);\n\n log('SUCCESS', url, config, data, startTime);\n updateCacheStatus(id, RequestStatus.SUCCESS);\n\n return { data, ok: response.ok, status: response.status };\n } catch (error) {\n log('ERROR', url, config, error, startTime);\n updateCacheStatus(id, RequestStatus.ERROR);\n\n // Retry on network errors\n if (retries > 0 && error instanceof TypeError) {\n return fetcher(url, config, { id, retries: retries - 1 });\n }\n\n throw error;\n } finally {\n // Clean up non-GET requests from cache\n if (id && config.method !== 'GET') {\n HttpCache.delete(id);\n }\n }\n}\n\n/**\n * Parses response based on content type.\n */\nasync function parseResponse<T>(response: Response): Promise<T> {\n const contentType = response.headers.get('content-type') ?? '';\n\n if (contentType.includes('application/json')) {\n return response.json();\n }\n\n if (contentType.includes('text')) {\n return response.text() as Promise<T>;\n }\n\n return response.blob() as Promise<T>;\n}\n\n/**\n * Updates cache entry status if it exists.\n */\nfunction updateCacheStatus(id: string | undefined, status: (typeof RequestStatus)[keyof typeof RequestStatus]): void {\n if (id) {\n const cached = HttpCache.get(id);\n if (cached) {\n cached.status = status;\n }\n }\n}\n\n/**\n * Makes an HTTP request with caching and cancellation support.\n */\nasync function makeRequest<T>(url: string, config: RequestConfig, context?: ContextProps): Promise<RequestResponse<T>> {\n const key = getCacheKey(url, config);\n let cached = HttpCache.get(key) as RequestData<T> | undefined;\n\n // Handle cache invalidation\n if (shouldInvalidateCache(config, cached)) {\n invalidateCacheEntry(key, cached);\n cached = undefined;\n }\n\n // Return cached response if valid\n if (cached && isCacheValid(cached)) {\n return cached.request;\n }\n\n // Create and execute new request\n const controller = new AbortController();\n const fullUrl = buildFullUrl(url, context);\n const requestConfig = buildRequestConfig(config, context, controller);\n const request = fetcher<T>(fullUrl, requestConfig, { id: key });\n\n // Store in cache\n HttpCache.set(key, {\n controller,\n expiresIn: Date.now() + (context?.expiresIn ?? CACHE_EXPIRES_IN),\n request,\n status: RequestStatus.PENDING,\n });\n\n return request;\n}\n\n/**\n * Checks if a cache should be invalidated.\n */\nfunction shouldInvalidateCache<T>(config: RequestConfig, cached: RequestData<T> | undefined): boolean {\n if (config.invalidate) return true;\n if (!cached) return false;\n\n if (config.cancelable && cached.status === RequestStatus.PENDING) return true;\n\n return cached.status === RequestStatus.ERROR;\n}\n\n/**\n * Invalidates a cache entry by aborting and deleting it.\n */\nfunction invalidateCacheEntry<T>(key: string, cached: RequestData<T> | undefined): void {\n if (cached) {\n cached.controller.abort('Request aborted');\n HttpCache.delete(key);\n }\n}\n\n/**\n * Checks if a cache entry is still valid.\n */\nfunction isCacheValid<T>(cached: RequestData<T>): boolean {\n return Date.now() <= cached.expiresIn;\n}\n\n/**\n * Builds the full URL with a context path.\n */\nfunction buildFullUrl(url: string, context?: ContextProps): string {\n return context?.url ? `${context.url}/${url}` : url;\n}\n\n/**\n * Builds the request configuration with merged headers and signal.\n */\nfunction buildRequestConfig(\n config: RequestConfig,\n context: ContextProps | undefined,\n controller: AbortController,\n): RequestInit {\n const timeout = context?.timeout ?? REQUEST_TIMEOUT;\n const signal = AbortSignal.any([controller.signal, AbortSignal.timeout(timeout)]);\n\n return {\n ...config,\n body: config.body ? JSON.stringify(config.body) : undefined,\n headers: mergeHeaders(context?.headers, config.headers),\n signal,\n };\n}\n\n/**\n * Merges context and config headers.\n */\nfunction mergeHeaders(\n contextHeaders?: Record<string, string | undefined>,\n configHeaders?: HeadersInit,\n): Record<string, string> {\n return {\n ...(contextHeaders ?? {}),\n ...(configHeaders ?? {}),\n } as Record<string, string>;\n}\n\n/**\n * Builds a URL with query parameters.\n */\nexport function buildUrl(baseUrl: string, params?: RequestParams): string {\n if (!params || Object.keys(params).length === 0) {\n return baseUrl;\n }\n\n const url = new URL(baseUrl);\n\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n url.searchParams.append(key, String(value));\n }\n }\n\n return url.toString();\n}\n\n/**\n * Creates a fetch service with pre-configured context.\n */\nexport function createFetchService(context: ContextProps = { url: '' }) {\n const createMethodHandler = (method: string) => {\n return <T>(url: string, config: RequestConfig = {}): Promise<RequestResponse<T>> => {\n return makeRequest<T>(url, { ...config, method }, context);\n };\n };\n\n return {\n delete: createMethodHandler('DELETE'),\n get: createMethodHandler('GET'),\n patch: createMethodHandler('PATCH'),\n post: createMethodHandler('POST'),\n put: createMethodHandler('PUT'),\n\n /**\n * Updates the service headers, removing any with undefined values.\n */\n setHeaders(payload: Record<string, string | undefined>): void {\n context.headers = { ...context.headers, ...payload };\n\n // Remove undefined headers\n for (const key in context.headers) {\n if (context.headers[key] === undefined) {\n delete context.headers[key];\n }\n }\n },\n };\n}\n"],"names":["REQUEST_TIMEOUT","CACHE_EXPIRES_IN","RequestErrorType","RequestStatus","HttpCache","getCacheKey","url","config","method","body","headers","log","type","req","res","startTime","elapsed","logType","shortUrl","formatUrlForLog","icon","Logit","fetcher","id","retries","response","data","parseResponse","updateCacheStatus","error","contentType","status","cached","makeRequest","context","key","shouldInvalidateCache","invalidateCacheEntry","isCacheValid","controller","fullUrl","buildFullUrl","requestConfig","buildRequestConfig","request","timeout","signal","mergeHeaders","contextHeaders","configHeaders","buildUrl","baseUrl","params","value","createFetchService","createMethodHandler","payload"],"mappings":"0HAyBMA,EAAkB,IAClBC,EAAmB,KAEZC,EAAmB,CAC9B,QAAS,IACT,YAAa,IACb,SAAU,IACV,UAAW,IACX,YAAa,IACb,UAAW,IACX,cAAe,IACf,QAAS,IACT,aAAc,GAChB,EAEaC,EAAgB,CAC3B,MAAO,QACP,QAAS,UACT,QAAS,SACX,EASMC,MAAgB,IAMtB,SAASC,EAAYC,EAAaC,EAA+B,CAC/D,GAAIA,EAAO,GAAI,OAAOA,EAAO,GAG7B,KAAM,CAAE,OAAAC,EAAS,MAAO,KAAAC,EAAM,QAAAC,GAAYH,EAC1C,OAAO,KAAK,UAAU,CAAE,KAAAE,EAAM,QAAAC,EAAS,OAAAF,EAAQ,IAAAF,EAAK,CACtD,CAKA,SAASK,EAAIC,EAA2BN,EAAaO,EAAkBC,EAAcC,EAAyB,CAC5G,MAAMC,EAAU,KAAK,IAAA,EAAQD,EACvBE,EAAUL,EAAK,YAAA,EACfJ,EAASK,EAAI,QAAQ,YAAA,GAAiB,MACtCK,EAAWC,EAAgBb,CAAG,EAC9Bc,EAAOR,IAAS,UAAY,IAAM,IAExCS,EAAAA,MAAMJ,CAAO,EAAE,SAAST,CAAM,MAAMU,CAAQ,KAAKE,CAAI,IAAIJ,CAAO,KAAM,CACpE,IAAAH,EACA,IAAAC,EACA,IAAAR,CAAA,CACD,CACH,CAKA,SAASa,EAAgBb,EAAqB,CAC5C,OAAOA,EACJ,QAAQ,eAAgB,EAAE,EAC1B,MAAM,GAAG,EACT,MAAM,CAAC,EACP,KAAK,GAAG,CACb,CAKA,eAAegB,EACbhB,EACAC,EACA,CAAE,GAAAgB,EAAI,QAAAC,EAAU,GACa,CAC7B,MAAMT,EAAY,KAAK,IAAA,EAEvB,GAAI,CACF,MAAMU,EAAW,MAAM,MAAMnB,EAAKC,CAAM,EAClCmB,EAAO,MAAMC,EAAiBF,CAAQ,EAE5C,OAAAd,EAAI,UAAWL,EAAKC,EAAQmB,EAAMX,CAAS,EAC3Ca,EAAkBL,EAAIpB,EAAc,OAAO,EAEpC,CAAE,KAAAuB,EAAM,GAAID,EAAS,GAAI,OAAQA,EAAS,MAAA,CACnD,OAASI,EAAO,CAKd,GAJAlB,EAAI,QAASL,EAAKC,EAAQsB,EAAOd,CAAS,EAC1Ca,EAAkBL,EAAIpB,EAAc,KAAK,EAGrCqB,EAAU,GAAKK,aAAiB,UAClC,OAAOP,EAAQhB,EAAKC,EAAQ,CAAE,GAAAgB,EAAI,QAASC,EAAU,EAAG,EAG1D,MAAMK,CACR,QAAA,CAEMN,GAAMhB,EAAO,SAAW,OAC1BH,EAAU,OAAOmB,CAAE,CAEvB,CACF,CAKA,eAAeI,EAAiBF,EAAgC,CAC9D,MAAMK,EAAcL,EAAS,QAAQ,IAAI,cAAc,GAAK,GAE5D,OAAIK,EAAY,SAAS,kBAAkB,EAClCL,EAAS,KAAA,EAGdK,EAAY,SAAS,MAAM,EACtBL,EAAS,KAAA,EAGXA,EAAS,KAAA,CAClB,CAKA,SAASG,EAAkBL,EAAwBQ,EAAkE,CACnH,GAAIR,EAAI,CACN,MAAMS,EAAS5B,EAAU,IAAImB,CAAE,EAC3BS,IACFA,EAAO,OAASD,EAEpB,CACF,CAKA,eAAeE,EAAe3B,EAAaC,EAAuB2B,EAAqD,CACrH,MAAMC,EAAM9B,EAAYC,EAAKC,CAAM,EACnC,IAAIyB,EAAS5B,EAAU,IAAI+B,CAAG,EAS9B,GANIC,EAAsB7B,EAAQyB,CAAM,IACtCK,EAAqBF,EAAKH,CAAM,EAChCA,EAAS,QAIPA,GAAUM,EAAaN,CAAM,EAC/B,OAAOA,EAAO,QAIhB,MAAMO,EAAa,IAAI,gBACjBC,EAAUC,EAAanC,EAAK4B,CAAO,EACnCQ,EAAgBC,EAAmBpC,EAAQ2B,EAASK,CAAU,EAC9DK,EAAUtB,EAAWkB,EAASE,EAAe,CAAE,GAAIP,EAAK,EAG9D,OAAA/B,EAAU,IAAI+B,EAAK,CACjB,WAAAI,EACA,UAAW,KAAK,IAAA,GAASL,GAAS,WAAajC,GAC/C,QAAA2C,EACA,OAAQzC,EAAc,OAAA,CACvB,EAEMyC,CACT,CAKA,SAASR,EAAyB7B,EAAuByB,EAA6C,CACpG,OAAIzB,EAAO,WAAmB,GACzByB,EAEDzB,EAAO,YAAcyB,EAAO,SAAW7B,EAAc,QAAgB,GAElE6B,EAAO,SAAW7B,EAAc,MAJnB,EAKtB,CAKA,SAASkC,EAAwBF,EAAaH,EAA0C,CAClFA,IACFA,EAAO,WAAW,MAAM,iBAAiB,EACzC5B,EAAU,OAAO+B,CAAG,EAExB,CAKA,SAASG,EAAgBN,EAAiC,CACxD,OAAO,KAAK,OAASA,EAAO,SAC9B,CAKA,SAASS,EAAanC,EAAa4B,EAAgC,CACjE,OAAOA,GAAS,IAAM,GAAGA,EAAQ,GAAG,IAAI5B,CAAG,GAAKA,CAClD,CAKA,SAASqC,EACPpC,EACA2B,EACAK,EACa,CACb,MAAMM,EAAUX,GAAS,SAAWlC,EAC9B8C,EAAS,YAAY,IAAI,CAACP,EAAW,OAAQ,YAAY,QAAQM,CAAO,CAAC,CAAC,EAEhF,MAAO,CACL,GAAGtC,EACH,KAAMA,EAAO,KAAO,KAAK,UAAUA,EAAO,IAAI,EAAI,OAClD,QAASwC,EAAab,GAAS,QAAS3B,EAAO,OAAO,EACtD,OAAAuC,CAAA,CAEJ,CAKA,SAASC,EACPC,EACAC,EACwB,CACxB,MAAO,CACL,GAAID,GAAkB,CAAA,EACtB,GAAIC,GAAiB,CAAA,CAAC,CAE1B,CAKO,SAASC,EAASC,EAAiBC,EAAgC,CACxE,GAAI,CAACA,GAAU,OAAO,KAAKA,CAAM,EAAE,SAAW,EAC5C,OAAOD,EAGT,MAAM7C,EAAM,IAAI,IAAI6C,CAAO,EAE3B,SAAW,CAAChB,EAAKkB,CAAK,IAAK,OAAO,QAAQD,CAAM,EAC1CC,IAAU,QACZ/C,EAAI,aAAa,OAAO6B,EAAK,OAAOkB,CAAK,CAAC,EAI9C,OAAO/C,EAAI,SAAA,CACb,CAKO,SAASgD,EAAmBpB,EAAwB,CAAE,IAAK,IAAM,CACtE,MAAMqB,EAAuB/C,GACpB,CAAIF,EAAaC,EAAwB,KACvC0B,EAAe3B,EAAK,CAAE,GAAGC,EAAQ,OAAAC,CAAA,EAAU0B,CAAO,EAI7D,MAAO,CACL,OAAQqB,EAAoB,QAAQ,EACpC,IAAKA,EAAoB,KAAK,EAC9B,MAAOA,EAAoB,OAAO,EAClC,KAAMA,EAAoB,MAAM,EAChC,IAAKA,EAAoB,KAAK,EAK9B,WAAWC,EAAmD,CAC5DtB,EAAQ,QAAU,CAAE,GAAGA,EAAQ,QAAS,GAAGsB,CAAA,EAG3C,UAAWrB,KAAOD,EAAQ,QACpBA,EAAQ,QAAQC,CAAG,IAAM,QAC3B,OAAOD,EAAQ,QAAQC,CAAG,CAGhC,CAAA,CAEJ"}
|
package/dist/fetchit.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Logit as R } from "./logit/dist/logit.js";
|
|
2
|
+
const S = 5e3, C = 12e4, P = {
|
|
3
|
+
ABORTED: 499,
|
|
4
|
+
BAD_REQUEST: 400,
|
|
5
|
+
CONFLICT: 409,
|
|
6
|
+
FORBIDDEN: 403,
|
|
7
|
+
NOT_ALLOWED: 405,
|
|
8
|
+
NOT_FOUND: 404,
|
|
9
|
+
PRE_CONDITION: 412,
|
|
10
|
+
TIMEOUT: 408,
|
|
11
|
+
UNAUTHORIZED: 401
|
|
12
|
+
}, u = {
|
|
13
|
+
ERROR: "ERROR",
|
|
14
|
+
PENDING: "PENDING",
|
|
15
|
+
SUCCESS: "SUCCESS"
|
|
16
|
+
}, i = /* @__PURE__ */ new Map();
|
|
17
|
+
function T(e, t) {
|
|
18
|
+
if (t.id) return t.id;
|
|
19
|
+
const { method: r = "GET", body: n, headers: s } = t;
|
|
20
|
+
return JSON.stringify({ body: n, headers: s, method: r, url: e });
|
|
21
|
+
}
|
|
22
|
+
function d(e, t, r, n, s) {
|
|
23
|
+
const o = Date.now() - s, a = e.toLowerCase(), l = r.method?.toUpperCase() ?? "GET", c = p(t), h = e === "SUCCESS" ? "✓" : "✕";
|
|
24
|
+
R[a](`HTTP::${l}(…/${c}) ${h} ${o}ms`, {
|
|
25
|
+
req: r,
|
|
26
|
+
res: n,
|
|
27
|
+
url: t
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function p(e) {
|
|
31
|
+
return e.replace(/^https?:\/\//, "").split("/").slice(1).join("/");
|
|
32
|
+
}
|
|
33
|
+
async function f(e, t, { id: r, retries: n = 2 }) {
|
|
34
|
+
const s = Date.now();
|
|
35
|
+
try {
|
|
36
|
+
const o = await fetch(e, t), a = await y(o);
|
|
37
|
+
return d("SUCCESS", e, t, a, s), E(r, u.SUCCESS), { data: a, ok: o.ok, status: o.status };
|
|
38
|
+
} catch (o) {
|
|
39
|
+
if (d("ERROR", e, t, o, s), E(r, u.ERROR), n > 0 && o instanceof TypeError)
|
|
40
|
+
return f(e, t, { id: r, retries: n - 1 });
|
|
41
|
+
throw o;
|
|
42
|
+
} finally {
|
|
43
|
+
r && t.method !== "GET" && i.delete(r);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function y(e) {
|
|
47
|
+
const t = e.headers.get("content-type") ?? "";
|
|
48
|
+
return t.includes("application/json") ? e.json() : t.includes("text") ? e.text() : e.blob();
|
|
49
|
+
}
|
|
50
|
+
function E(e, t) {
|
|
51
|
+
if (e) {
|
|
52
|
+
const r = i.get(e);
|
|
53
|
+
r && (r.status = t);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async function O(e, t, r) {
|
|
57
|
+
const n = T(e, t);
|
|
58
|
+
let s = i.get(n);
|
|
59
|
+
if (N(t, s) && (U(n, s), s = void 0), s && D(s))
|
|
60
|
+
return s.request;
|
|
61
|
+
const o = new AbortController(), a = I(e, r), l = b(t, r, o), c = f(a, l, { id: n });
|
|
62
|
+
return i.set(n, {
|
|
63
|
+
controller: o,
|
|
64
|
+
expiresIn: Date.now() + (r?.expiresIn ?? C),
|
|
65
|
+
request: c,
|
|
66
|
+
status: u.PENDING
|
|
67
|
+
}), c;
|
|
68
|
+
}
|
|
69
|
+
function N(e, t) {
|
|
70
|
+
return e.invalidate ? !0 : t ? e.cancelable && t.status === u.PENDING ? !0 : t.status === u.ERROR : !1;
|
|
71
|
+
}
|
|
72
|
+
function U(e, t) {
|
|
73
|
+
t && (t.controller.abort("Request aborted"), i.delete(e));
|
|
74
|
+
}
|
|
75
|
+
function D(e) {
|
|
76
|
+
return Date.now() <= e.expiresIn;
|
|
77
|
+
}
|
|
78
|
+
function I(e, t) {
|
|
79
|
+
return t?.url ? `${t.url}/${e}` : e;
|
|
80
|
+
}
|
|
81
|
+
function b(e, t, r) {
|
|
82
|
+
const n = t?.timeout ?? S, s = AbortSignal.any([r.signal, AbortSignal.timeout(n)]);
|
|
83
|
+
return {
|
|
84
|
+
...e,
|
|
85
|
+
body: e.body ? JSON.stringify(e.body) : void 0,
|
|
86
|
+
headers: m(t?.headers, e.headers),
|
|
87
|
+
signal: s
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function m(e, t) {
|
|
91
|
+
return {
|
|
92
|
+
...e ?? {},
|
|
93
|
+
...t ?? {}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function g(e, t) {
|
|
97
|
+
if (!t || Object.keys(t).length === 0)
|
|
98
|
+
return e;
|
|
99
|
+
const r = new URL(e);
|
|
100
|
+
for (const [n, s] of Object.entries(t))
|
|
101
|
+
s !== void 0 && r.searchParams.append(n, String(s));
|
|
102
|
+
return r.toString();
|
|
103
|
+
}
|
|
104
|
+
function v(e = { url: "" }) {
|
|
105
|
+
const t = (r) => (n, s = {}) => O(n, { ...s, method: r }, e);
|
|
106
|
+
return {
|
|
107
|
+
delete: t("DELETE"),
|
|
108
|
+
get: t("GET"),
|
|
109
|
+
patch: t("PATCH"),
|
|
110
|
+
post: t("POST"),
|
|
111
|
+
put: t("PUT"),
|
|
112
|
+
/**
|
|
113
|
+
* Updates the service headers, removing any with undefined values.
|
|
114
|
+
*/
|
|
115
|
+
setHeaders(r) {
|
|
116
|
+
e.headers = { ...e.headers, ...r };
|
|
117
|
+
for (const n in e.headers)
|
|
118
|
+
e.headers[n] === void 0 && delete e.headers[n];
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
export {
|
|
123
|
+
P as RequestErrorType,
|
|
124
|
+
u as RequestStatus,
|
|
125
|
+
g as buildUrl,
|
|
126
|
+
v as createFetchService
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=fetchit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchit.js","sources":["../src/fetchit.ts"],"sourcesContent":["import { Logit } from '@vielzeug/logit';\n\ntype RequestParams = Record<string, string | number | undefined>;\n\nexport type RequestResponse<T> = {\n data: T;\n ok: boolean;\n status: number;\n};\n\ntype RequestConfig = Omit<RequestInit, 'body'> & {\n id?: string;\n cancelable?: boolean;\n invalidate?: boolean;\n body?: unknown;\n};\n\ntype ContextProps = {\n expiresIn?: number;\n headers?: Record<string, string | undefined>;\n params?: RequestParams;\n timeout?: number;\n url: string;\n};\n\nconst REQUEST_TIMEOUT = 5000;\nconst CACHE_EXPIRES_IN = 120000;\n\nexport const RequestErrorType = {\n ABORTED: 499,\n BAD_REQUEST: 400,\n CONFLICT: 409,\n FORBIDDEN: 403,\n NOT_ALLOWED: 405,\n NOT_FOUND: 404,\n PRE_CONDITION: 412,\n TIMEOUT: 408,\n UNAUTHORIZED: 401,\n} as const;\n\nexport const RequestStatus = {\n ERROR: 'ERROR',\n PENDING: 'PENDING',\n SUCCESS: 'SUCCESS',\n} as const;\n\ntype RequestData<T> = {\n controller: AbortController;\n expiresIn: number;\n request: Promise<RequestResponse<T>>;\n status: (typeof RequestStatus)[keyof typeof RequestStatus];\n};\n\nconst HttpCache = new Map<string, RequestData<unknown>>();\n\n/**\n * Generates a unique cache key for a request.\n * Uses custom id if provided, otherwise creates a key from url and config.\n */\nfunction getCacheKey(url: string, config: RequestConfig): string {\n if (config.id) return config.id;\n\n // Create a stable cache key from url and relevant config properties\n const { method = 'GET', body, headers } = config;\n return JSON.stringify({ body, headers, method, url });\n}\n\n/**\n * Logs HTTP request results with elapsed time and details.\n */\nfunction log(type: 'SUCCESS' | 'ERROR', url: string, req: RequestInit, res: unknown, startTime: number): void {\n const elapsed = Date.now() - startTime;\n const logType = type.toLowerCase() as 'success' | 'error';\n const method = req.method?.toUpperCase() ?? 'GET';\n const shortUrl = formatUrlForLog(url);\n const icon = type === 'SUCCESS' ? '✓' : '✕';\n\n Logit[logType](`HTTP::${method}(…/${shortUrl}) ${icon} ${elapsed}ms`, {\n req,\n res,\n url,\n });\n}\n\n/**\n * Formats URL for logging by removing protocol and domain.\n */\nfunction formatUrlForLog(url: string): string {\n return url\n .replace(/^https?:\\/\\//, '')\n .split('/')\n .slice(1)\n .join('/');\n}\n\n/**\n * Core fetch function with retry logic and proper error handling.\n */\nasync function fetcher<T>(\n url: string,\n config: RequestInit,\n { id, retries = 2 }: { id?: string; retries?: number },\n): Promise<RequestResponse<T>> {\n const startTime = Date.now();\n\n try {\n const response = await fetch(url, config);\n const data = await parseResponse<T>(response);\n\n log('SUCCESS', url, config, data, startTime);\n updateCacheStatus(id, RequestStatus.SUCCESS);\n\n return { data, ok: response.ok, status: response.status };\n } catch (error) {\n log('ERROR', url, config, error, startTime);\n updateCacheStatus(id, RequestStatus.ERROR);\n\n // Retry on network errors\n if (retries > 0 && error instanceof TypeError) {\n return fetcher(url, config, { id, retries: retries - 1 });\n }\n\n throw error;\n } finally {\n // Clean up non-GET requests from cache\n if (id && config.method !== 'GET') {\n HttpCache.delete(id);\n }\n }\n}\n\n/**\n * Parses response based on content type.\n */\nasync function parseResponse<T>(response: Response): Promise<T> {\n const contentType = response.headers.get('content-type') ?? '';\n\n if (contentType.includes('application/json')) {\n return response.json();\n }\n\n if (contentType.includes('text')) {\n return response.text() as Promise<T>;\n }\n\n return response.blob() as Promise<T>;\n}\n\n/**\n * Updates cache entry status if it exists.\n */\nfunction updateCacheStatus(id: string | undefined, status: (typeof RequestStatus)[keyof typeof RequestStatus]): void {\n if (id) {\n const cached = HttpCache.get(id);\n if (cached) {\n cached.status = status;\n }\n }\n}\n\n/**\n * Makes an HTTP request with caching and cancellation support.\n */\nasync function makeRequest<T>(url: string, config: RequestConfig, context?: ContextProps): Promise<RequestResponse<T>> {\n const key = getCacheKey(url, config);\n let cached = HttpCache.get(key) as RequestData<T> | undefined;\n\n // Handle cache invalidation\n if (shouldInvalidateCache(config, cached)) {\n invalidateCacheEntry(key, cached);\n cached = undefined;\n }\n\n // Return cached response if valid\n if (cached && isCacheValid(cached)) {\n return cached.request;\n }\n\n // Create and execute new request\n const controller = new AbortController();\n const fullUrl = buildFullUrl(url, context);\n const requestConfig = buildRequestConfig(config, context, controller);\n const request = fetcher<T>(fullUrl, requestConfig, { id: key });\n\n // Store in cache\n HttpCache.set(key, {\n controller,\n expiresIn: Date.now() + (context?.expiresIn ?? CACHE_EXPIRES_IN),\n request,\n status: RequestStatus.PENDING,\n });\n\n return request;\n}\n\n/**\n * Checks if a cache should be invalidated.\n */\nfunction shouldInvalidateCache<T>(config: RequestConfig, cached: RequestData<T> | undefined): boolean {\n if (config.invalidate) return true;\n if (!cached) return false;\n\n if (config.cancelable && cached.status === RequestStatus.PENDING) return true;\n\n return cached.status === RequestStatus.ERROR;\n}\n\n/**\n * Invalidates a cache entry by aborting and deleting it.\n */\nfunction invalidateCacheEntry<T>(key: string, cached: RequestData<T> | undefined): void {\n if (cached) {\n cached.controller.abort('Request aborted');\n HttpCache.delete(key);\n }\n}\n\n/**\n * Checks if a cache entry is still valid.\n */\nfunction isCacheValid<T>(cached: RequestData<T>): boolean {\n return Date.now() <= cached.expiresIn;\n}\n\n/**\n * Builds the full URL with a context path.\n */\nfunction buildFullUrl(url: string, context?: ContextProps): string {\n return context?.url ? `${context.url}/${url}` : url;\n}\n\n/**\n * Builds the request configuration with merged headers and signal.\n */\nfunction buildRequestConfig(\n config: RequestConfig,\n context: ContextProps | undefined,\n controller: AbortController,\n): RequestInit {\n const timeout = context?.timeout ?? REQUEST_TIMEOUT;\n const signal = AbortSignal.any([controller.signal, AbortSignal.timeout(timeout)]);\n\n return {\n ...config,\n body: config.body ? JSON.stringify(config.body) : undefined,\n headers: mergeHeaders(context?.headers, config.headers),\n signal,\n };\n}\n\n/**\n * Merges context and config headers.\n */\nfunction mergeHeaders(\n contextHeaders?: Record<string, string | undefined>,\n configHeaders?: HeadersInit,\n): Record<string, string> {\n return {\n ...(contextHeaders ?? {}),\n ...(configHeaders ?? {}),\n } as Record<string, string>;\n}\n\n/**\n * Builds a URL with query parameters.\n */\nexport function buildUrl(baseUrl: string, params?: RequestParams): string {\n if (!params || Object.keys(params).length === 0) {\n return baseUrl;\n }\n\n const url = new URL(baseUrl);\n\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n url.searchParams.append(key, String(value));\n }\n }\n\n return url.toString();\n}\n\n/**\n * Creates a fetch service with pre-configured context.\n */\nexport function createFetchService(context: ContextProps = { url: '' }) {\n const createMethodHandler = (method: string) => {\n return <T>(url: string, config: RequestConfig = {}): Promise<RequestResponse<T>> => {\n return makeRequest<T>(url, { ...config, method }, context);\n };\n };\n\n return {\n delete: createMethodHandler('DELETE'),\n get: createMethodHandler('GET'),\n patch: createMethodHandler('PATCH'),\n post: createMethodHandler('POST'),\n put: createMethodHandler('PUT'),\n\n /**\n * Updates the service headers, removing any with undefined values.\n */\n setHeaders(payload: Record<string, string | undefined>): void {\n context.headers = { ...context.headers, ...payload };\n\n // Remove undefined headers\n for (const key in context.headers) {\n if (context.headers[key] === undefined) {\n delete context.headers[key];\n }\n }\n },\n };\n}\n"],"names":["REQUEST_TIMEOUT","CACHE_EXPIRES_IN","RequestErrorType","RequestStatus","HttpCache","getCacheKey","url","config","method","body","headers","log","type","req","res","startTime","elapsed","logType","shortUrl","formatUrlForLog","icon","Logit","fetcher","id","retries","response","data","parseResponse","updateCacheStatus","error","contentType","status","cached","makeRequest","context","key","shouldInvalidateCache","invalidateCacheEntry","isCacheValid","controller","fullUrl","buildFullUrl","requestConfig","buildRequestConfig","request","timeout","signal","mergeHeaders","contextHeaders","configHeaders","buildUrl","baseUrl","params","value","createFetchService","createMethodHandler","payload"],"mappings":"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"}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./fetchit.cjs");exports.RequestErrorType=e.RequestErrorType;exports.RequestStatus=e.RequestStatus;exports.buildUrl=e.buildUrl;exports.createFetchService=e.createFetchService;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds a URL with query parameters.
|
|
3
|
+
*/
|
|
4
|
+
export declare function buildUrl(baseUrl: string, params?: RequestParams): string;
|
|
5
|
+
|
|
6
|
+
declare type ContextProps = {
|
|
7
|
+
expiresIn?: number;
|
|
8
|
+
headers?: Record<string, string | undefined>;
|
|
9
|
+
params?: RequestParams;
|
|
10
|
+
timeout?: number;
|
|
11
|
+
url: string;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Creates a fetch service with pre-configured context.
|
|
16
|
+
*/
|
|
17
|
+
export declare function createFetchService(context?: ContextProps): {
|
|
18
|
+
delete: <T>(url: string, config?: RequestConfig) => Promise<RequestResponse<T>>;
|
|
19
|
+
get: <T>(url: string, config?: RequestConfig) => Promise<RequestResponse<T>>;
|
|
20
|
+
patch: <T>(url: string, config?: RequestConfig) => Promise<RequestResponse<T>>;
|
|
21
|
+
post: <T>(url: string, config?: RequestConfig) => Promise<RequestResponse<T>>;
|
|
22
|
+
put: <T>(url: string, config?: RequestConfig) => Promise<RequestResponse<T>>;
|
|
23
|
+
/**
|
|
24
|
+
* Updates the service headers, removing any with undefined values.
|
|
25
|
+
*/
|
|
26
|
+
setHeaders(payload: Record<string, string | undefined>): void;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
declare type RequestConfig = Omit<RequestInit, 'body'> & {
|
|
30
|
+
id?: string;
|
|
31
|
+
cancelable?: boolean;
|
|
32
|
+
invalidate?: boolean;
|
|
33
|
+
body?: unknown;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export declare const RequestErrorType: {
|
|
37
|
+
readonly ABORTED: 499;
|
|
38
|
+
readonly BAD_REQUEST: 400;
|
|
39
|
+
readonly CONFLICT: 409;
|
|
40
|
+
readonly FORBIDDEN: 403;
|
|
41
|
+
readonly NOT_ALLOWED: 405;
|
|
42
|
+
readonly NOT_FOUND: 404;
|
|
43
|
+
readonly PRE_CONDITION: 412;
|
|
44
|
+
readonly TIMEOUT: 408;
|
|
45
|
+
readonly UNAUTHORIZED: 401;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
declare type RequestParams = Record<string, string | number | undefined>;
|
|
49
|
+
|
|
50
|
+
export declare type RequestResponse<T> = {
|
|
51
|
+
data: T;
|
|
52
|
+
ok: boolean;
|
|
53
|
+
status: number;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export declare const RequestStatus: {
|
|
57
|
+
readonly ERROR: "ERROR";
|
|
58
|
+
readonly PENDING: "PENDING";
|
|
59
|
+
readonly SUCCESS: "SUCCESS";
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export { }
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w={},$={debug:"log",success:"log"},v=()=>w?.NODE_ENV==="production",x=typeof window<"u"&&window.matchMedia?.("(prefers-color-scheme: dark)").matches,m={debug:{bg:"#616161",border:"#424242",color:"#fff",icon:"☕",symbol:"🅳"},error:{bg:"#d32f2f",border:"#c62828",color:"#fff",icon:"✘",symbol:"🅴"},group:{bg:"#546e7a",border:"#455a64",color:"#fff",icon:"⚭",symbol:"🅶"},info:{bg:"#1976d2",border:"#1565c0",color:"#fff",icon:"ℹ",symbol:"🅸"},ns:x?{bg:"#fafafa",border:"#c7c7c7",color:"#000"}:{bg:"#424242",border:"#212121",color:"#fff"},success:{bg:"#689f38",border:"#558b2f",color:"#fff",icon:"✔",symbol:"🆂"},time:{bg:"#0097a7",border:"#00838f",color:"#fff",icon:"⏲",symbol:"🆃"},trace:{bg:"#d81b60",border:"#c2185b",color:"#fff",icon:"⛢",symbol:"🆃"},warn:{bg:"#ffb300",border:"#ffa000",color:"#fff",icon:"⚠",symbol:"🆆"}},f={debug:0,trace:1,time:2,table:3,info:4,success:5,warn:6,error:7,off:8},o={environment:!0,logLevel:"debug",namespace:"",remote:{handler:void 0,logLevel:"off"},timestamp:!0,variant:"symbol"},g=e=>f[o.logLevel]<=f[e],u=()=>new Date().toISOString().slice(11,23),p=()=>v()?"🄿":"🄳",y=(e,r)=>{o.remote.handler&&f[o.remote.logLevel]<=f[e]&&o.remote.handler(e,...r)},b=e=>$[e]||e,d=(e,r="")=>{const{bg:t,color:s,border:n}=m[e],c=`color: ${t}; border: 1px solid ${n}; border-radius: 4px;`;switch(o.variant){case"symbol":return`${c} padding: 1px 1px 0;${r};`;case"icon":return`${c} padding: 0 3px;${r};`;default:return`background: ${t}; color: ${s}; border: 1px solid ${n}; border-radius: 4px; font-weight: bold; padding: 0 3px;${r}`}};function L(e){const r=m[e],{namespace:t,variant:s,timestamp:n,environment:c}=o;let a=`%c${r[s]??e.toUpperCase()}%c`;const i=[d(e),""];return t&&(a+=` %c${t}%c`,i.push(d("ns"," border-radius: 8px; font: italic small-caps bold 12px; font-weight: lighter;"),"")),c&&(a+=` %c${p()}%c`,i.push("color: darkgray;","")),n&&(a+=` %c${u()}%c`,i.push("color: gray;","")),{format:a,parts:i}}const l=(e,...r)=>{if(typeof window>"u"){const c=m[e],{variant:a}=o,i=console[b(e)];i(`${c[a]??e.toUpperCase()} | ${p()} |`,...r);return}if(!g(e))return;const{format:t,parts:s}=L(e),n=console[b(e)];n(t,...s,...r),y(e,r)},E=e=>{const r=Math.floor(Date.now()-e);return r?`${r}ms`:""},h={assert:(e,r,t)=>console.assert(e,r,t),debug:(...e)=>l("debug",...e),error:(...e)=>l("error",...e),getLevel:()=>o.logLevel,getPrefix:()=>o.namespace,getTimestamp:()=>o.timestamp,groupCollapsed:(e,r="GROUP",t=Date.now())=>{if(!g("success"))return;const s=E(t),n=p();console.groupCollapsed(`%c${r}%c${o.namespace}%c${n}%c${o.timestamp?u():""}%c${s}%c${e}`,d("group","margin-right: 6px; padding: 1px 3px 0"),d("ns"," border-radius: 8px; font: italic small-caps bold 12px; font-weight: lighter;margin-right: 6px;"),"color: darkgray; margin-right: 6px;","color: gray;font-weight: lighter;margin-right: 6px;","color: gray; font-weight: lighter;margin-right: 6px;","color: inherit;font-weight: lighter;")},groupEnd:()=>{g("success")&&console.groupEnd()},info:(...e)=>l("info",...e),initialise:e=>{Object.assign(o,e)},setLogLevel:e=>{o.logLevel=e},setPrefix:e=>{o.namespace=e},setRemote:e=>{o.remote=e},setRemoteLogLevel:e=>{o.remote.logLevel=e},setVariant:e=>{o.variant=e},showEnvironment:e=>{o.environment=e},showTimestamp:e=>{o.timestamp=e},success:(...e)=>l("success",...e),table:(...e)=>{g("table")&&console.table(...e)},time:e=>{g("time")&&console.time(e)},timeEnd:e=>{g("time")&&console.timeEnd(e)},trace:(...e)=>l("trace",...e),warn:(...e)=>l("warn",...e)};typeof window<"u"&&(window.Logit=h);exports.Logit=h;
|
|
2
|
+
//# sourceMappingURL=logit.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logit.cjs","sources":["../../../../logit/dist/logit.js"],"sourcesContent":["const h = {};\nconst w = {\n debug: \"log\",\n success: \"log\"\n}, v = () => h?.NODE_ENV === \"production\", $ = typeof window < \"u\" && window.matchMedia?.(\"(prefers-color-scheme: dark)\").matches, m = {\n debug: { bg: \"#616161\", border: \"#424242\", color: \"#fff\", icon: \"☕\", symbol: \"🅳\" },\n error: { bg: \"#d32f2f\", border: \"#c62828\", color: \"#fff\", icon: \"✘\", symbol: \"🅴\" },\n group: { bg: \"#546e7a\", border: \"#455a64\", color: \"#fff\", icon: \"⚭\", symbol: \"🅶\" },\n info: { bg: \"#1976d2\", border: \"#1565c0\", color: \"#fff\", icon: \"ℹ\", symbol: \"🅸\" },\n ns: $ ? { bg: \"#fafafa\", border: \"#c7c7c7\", color: \"#000\" } : { bg: \"#424242\", border: \"#212121\", color: \"#fff\" },\n success: { bg: \"#689f38\", border: \"#558b2f\", color: \"#fff\", icon: \"✔\", symbol: \"🆂\" },\n time: { bg: \"#0097a7\", border: \"#00838f\", color: \"#fff\", icon: \"⏲\", symbol: \"🆃\" },\n trace: { bg: \"#d81b60\", border: \"#c2185b\", color: \"#fff\", icon: \"⛢\", symbol: \"🆃\" },\n warn: { bg: \"#ffb300\", border: \"#ffa000\", color: \"#fff\", icon: \"⚠\", symbol: \"🆆\" }\n}, f = {\n debug: 0,\n trace: 1,\n time: 2,\n table: 3,\n info: 4,\n success: 5,\n warn: 6,\n error: 7,\n off: 8\n}, e = {\n environment: !0,\n logLevel: \"debug\",\n namespace: \"\",\n remote: { handler: void 0, logLevel: \"off\" },\n timestamp: !0,\n variant: \"symbol\"\n}, d = (o) => f[e.logLevel] <= f[o], u = () => (/* @__PURE__ */ new Date()).toISOString().slice(11, 23), b = () => v() ? \"🄿\" : \"🄳\", x = (o, r) => {\n e.remote.handler && f[e.remote.logLevel] <= f[o] && e.remote.handler(o, ...r);\n}, p = (o) => w[o] || o, g = (o, r = \"\") => {\n const { bg: t, color: s, border: n } = m[o], c = `color: ${t}; border: 1px solid ${n}; border-radius: 4px;`;\n switch (e.variant) {\n case \"symbol\":\n return `${c} padding: 1px 1px 0;${r};`;\n case \"icon\":\n return `${c} padding: 0 3px;${r};`;\n default:\n return `background: ${t}; color: ${s}; border: 1px solid ${n}; border-radius: 4px; font-weight: bold; padding: 0 3px;${r}`;\n }\n};\nfunction L(o) {\n const r = m[o], { namespace: t, variant: s, timestamp: n, environment: c } = e;\n let i = `%c${r[s] ?? o.toUpperCase()}%c`;\n const a = [g(o), \"\"];\n return t && (i += ` %c${t}%c`, a.push(g(\"ns\", \" border-radius: 8px; font: italic small-caps bold 12px; font-weight: lighter;\"), \"\")), c && (i += ` %c${b()}%c`, a.push(\"color: darkgray;\", \"\")), n && (i += ` %c${u()}%c`, a.push(\"color: gray;\", \"\")), { format: i, parts: a };\n}\nconst l = (o, ...r) => {\n if (typeof window > \"u\") {\n const c = m[o], { variant: i } = e, a = console[p(o)];\n a(`${c[i] ?? o.toUpperCase()} | ${b()} |`, ...r);\n return;\n }\n if (!d(o)) return;\n const { format: t, parts: s } = L(o), n = console[p(o)];\n n(t, ...s, ...r), x(o, r);\n}, E = (o) => {\n const r = Math.floor(Date.now() - o);\n return r ? `${r}ms` : \"\";\n}, _ = {\n /**\n * Asserts a condition and logs an error if it's false.\n */\n assert: (o, r, t) => console.assert(o, r, t),\n debug: (...o) => l(\"debug\", ...o),\n error: (...o) => l(\"error\", ...o),\n /**\n * Gets the current log level.\n */\n getLevel: () => e.logLevel,\n /**\n * Gets the current namespace prefix.\n */\n getPrefix: () => e.namespace,\n /**\n * Gets whether timestamps are shown.\n */\n getTimestamp: () => e.timestamp,\n /**\n * Creates a collapsed group in the console.\n */\n groupCollapsed: (o, r = \"GROUP\", t = Date.now()) => {\n if (!d(\"success\")) return;\n const s = E(t), n = b();\n console.groupCollapsed(\n `%c${r}%c${e.namespace}%c${n}%c${e.timestamp ? u() : \"\"}%c${s}%c${o}`,\n g(\"group\", \"margin-right: 6px; padding: 1px 3px 0\"),\n g(\"ns\", \" border-radius: 8px; font: italic small-caps bold 12px; font-weight: lighter;margin-right: 6px;\"),\n \"color: darkgray; margin-right: 6px;\",\n \"color: gray;font-weight: lighter;margin-right: 6px;\",\n \"color: gray; font-weight: lighter;margin-right: 6px;\",\n \"color: inherit;font-weight: lighter;\"\n );\n },\n /**\n * Ends the current console group.\n */\n groupEnd: () => {\n d(\"success\") && console.groupEnd();\n },\n info: (...o) => l(\"info\", ...o),\n /**\n * Initializes Logit with custom options.\n */\n initialise: (o) => {\n Object.assign(e, o);\n },\n /**\n * Sets the minimum log level to display.\n */\n setLogLevel: (o) => {\n e.logLevel = o;\n },\n /**\n * Sets the namespace prefix for all logs.\n */\n setPrefix: (o) => {\n e.namespace = o;\n },\n /**\n * Configures remote logging options.\n */\n setRemote: (o) => {\n e.remote = o;\n },\n /**\n * Sets the log level for remote logging.\n */\n setRemoteLogLevel: (o) => {\n e.remote.logLevel = o;\n },\n /**\n * Sets the display variant (text, icon, or symbol).\n */\n setVariant: (o) => {\n e.variant = o;\n },\n /**\n * Shows or hides the environment indicator.\n */\n showEnvironment: (o) => {\n e.environment = o;\n },\n /**\n * Shows or hides timestamps in logs.\n */\n showTimestamp: (o) => {\n e.timestamp = o;\n },\n success: (...o) => l(\"success\", ...o),\n /**\n * Displays data in a table format.\n */\n table: (...o) => {\n d(\"table\") && console.table(...o);\n },\n /**\n * Starts a timer with the given label.\n */\n time: (o) => {\n d(\"time\") && console.time(o);\n },\n /**\n * Ends a timer with the given label.\n */\n timeEnd: (o) => {\n d(\"time\") && console.timeEnd(o);\n },\n trace: (...o) => l(\"trace\", ...o),\n warn: (...o) => l(\"warn\", ...o)\n};\ntypeof window < \"u\" && (window.Logit = _);\nexport {\n _ as Logit\n};\n//# sourceMappingURL=logit.js.map\n"],"names":["h","w","$","e","d","o","b","x","p","g","i","a","_"],"mappings":"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"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
const h = {}, w = {
|
|
2
|
+
debug: "log",
|
|
3
|
+
success: "log"
|
|
4
|
+
}, $ = () => h?.NODE_ENV === "production", x = typeof window < "u" && window.matchMedia?.("(prefers-color-scheme: dark)").matches, m = {
|
|
5
|
+
debug: { bg: "#616161", border: "#424242", color: "#fff", icon: "☕", symbol: "🅳" },
|
|
6
|
+
error: { bg: "#d32f2f", border: "#c62828", color: "#fff", icon: "✘", symbol: "🅴" },
|
|
7
|
+
group: { bg: "#546e7a", border: "#455a64", color: "#fff", icon: "⚭", symbol: "🅶" },
|
|
8
|
+
info: { bg: "#1976d2", border: "#1565c0", color: "#fff", icon: "ℹ", symbol: "🅸" },
|
|
9
|
+
ns: x ? { bg: "#fafafa", border: "#c7c7c7", color: "#000" } : { bg: "#424242", border: "#212121", color: "#fff" },
|
|
10
|
+
success: { bg: "#689f38", border: "#558b2f", color: "#fff", icon: "✔", symbol: "🆂" },
|
|
11
|
+
time: { bg: "#0097a7", border: "#00838f", color: "#fff", icon: "⏲", symbol: "🆃" },
|
|
12
|
+
trace: { bg: "#d81b60", border: "#c2185b", color: "#fff", icon: "⛢", symbol: "🆃" },
|
|
13
|
+
warn: { bg: "#ffb300", border: "#ffa000", color: "#fff", icon: "⚠", symbol: "🆆" }
|
|
14
|
+
}, f = {
|
|
15
|
+
debug: 0,
|
|
16
|
+
trace: 1,
|
|
17
|
+
time: 2,
|
|
18
|
+
table: 3,
|
|
19
|
+
info: 4,
|
|
20
|
+
success: 5,
|
|
21
|
+
warn: 6,
|
|
22
|
+
error: 7,
|
|
23
|
+
off: 8
|
|
24
|
+
}, o = {
|
|
25
|
+
environment: !0,
|
|
26
|
+
logLevel: "debug",
|
|
27
|
+
namespace: "",
|
|
28
|
+
remote: { handler: void 0, logLevel: "off" },
|
|
29
|
+
timestamp: !0,
|
|
30
|
+
variant: "symbol"
|
|
31
|
+
}, g = (e) => f[o.logLevel] <= f[e], u = () => (/* @__PURE__ */ new Date()).toISOString().slice(11, 23), p = () => $() ? "🄿" : "🄳", v = (e, r) => {
|
|
32
|
+
o.remote.handler && f[o.remote.logLevel] <= f[e] && o.remote.handler(e, ...r);
|
|
33
|
+
}, b = (e) => w[e] || e, d = (e, r = "") => {
|
|
34
|
+
const { bg: t, color: s, border: n } = m[e], c = `color: ${t}; border: 1px solid ${n}; border-radius: 4px;`;
|
|
35
|
+
switch (o.variant) {
|
|
36
|
+
case "symbol":
|
|
37
|
+
return `${c} padding: 1px 1px 0;${r};`;
|
|
38
|
+
case "icon":
|
|
39
|
+
return `${c} padding: 0 3px;${r};`;
|
|
40
|
+
default:
|
|
41
|
+
return `background: ${t}; color: ${s}; border: 1px solid ${n}; border-radius: 4px; font-weight: bold; padding: 0 3px;${r}`;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
function y(e) {
|
|
45
|
+
const r = m[e], { namespace: t, variant: s, timestamp: n, environment: c } = o;
|
|
46
|
+
let a = `%c${r[s] ?? e.toUpperCase()}%c`;
|
|
47
|
+
const i = [d(e), ""];
|
|
48
|
+
return t && (a += ` %c${t}%c`, i.push(d("ns", " border-radius: 8px; font: italic small-caps bold 12px; font-weight: lighter;"), "")), c && (a += ` %c${p()}%c`, i.push("color: darkgray;", "")), n && (a += ` %c${u()}%c`, i.push("color: gray;", "")), { format: a, parts: i };
|
|
49
|
+
}
|
|
50
|
+
const l = (e, ...r) => {
|
|
51
|
+
if (typeof window > "u") {
|
|
52
|
+
const c = m[e], { variant: a } = o, i = console[b(e)];
|
|
53
|
+
i(`${c[a] ?? e.toUpperCase()} | ${p()} |`, ...r);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (!g(e)) return;
|
|
57
|
+
const { format: t, parts: s } = y(e), n = console[b(e)];
|
|
58
|
+
n(t, ...s, ...r), v(e, r);
|
|
59
|
+
}, L = (e) => {
|
|
60
|
+
const r = Math.floor(Date.now() - e);
|
|
61
|
+
return r ? `${r}ms` : "";
|
|
62
|
+
}, E = {
|
|
63
|
+
/**
|
|
64
|
+
* Asserts a condition and logs an error if it's false.
|
|
65
|
+
*/
|
|
66
|
+
assert: (e, r, t) => console.assert(e, r, t),
|
|
67
|
+
debug: (...e) => l("debug", ...e),
|
|
68
|
+
error: (...e) => l("error", ...e),
|
|
69
|
+
/**
|
|
70
|
+
* Gets the current log level.
|
|
71
|
+
*/
|
|
72
|
+
getLevel: () => o.logLevel,
|
|
73
|
+
/**
|
|
74
|
+
* Gets the current namespace prefix.
|
|
75
|
+
*/
|
|
76
|
+
getPrefix: () => o.namespace,
|
|
77
|
+
/**
|
|
78
|
+
* Gets whether timestamps are shown.
|
|
79
|
+
*/
|
|
80
|
+
getTimestamp: () => o.timestamp,
|
|
81
|
+
/**
|
|
82
|
+
* Creates a collapsed group in the console.
|
|
83
|
+
*/
|
|
84
|
+
groupCollapsed: (e, r = "GROUP", t = Date.now()) => {
|
|
85
|
+
if (!g("success")) return;
|
|
86
|
+
const s = L(t), n = p();
|
|
87
|
+
console.groupCollapsed(
|
|
88
|
+
`%c${r}%c${o.namespace}%c${n}%c${o.timestamp ? u() : ""}%c${s}%c${e}`,
|
|
89
|
+
d("group", "margin-right: 6px; padding: 1px 3px 0"),
|
|
90
|
+
d("ns", " border-radius: 8px; font: italic small-caps bold 12px; font-weight: lighter;margin-right: 6px;"),
|
|
91
|
+
"color: darkgray; margin-right: 6px;",
|
|
92
|
+
"color: gray;font-weight: lighter;margin-right: 6px;",
|
|
93
|
+
"color: gray; font-weight: lighter;margin-right: 6px;",
|
|
94
|
+
"color: inherit;font-weight: lighter;"
|
|
95
|
+
);
|
|
96
|
+
},
|
|
97
|
+
/**
|
|
98
|
+
* Ends the current console group.
|
|
99
|
+
*/
|
|
100
|
+
groupEnd: () => {
|
|
101
|
+
g("success") && console.groupEnd();
|
|
102
|
+
},
|
|
103
|
+
info: (...e) => l("info", ...e),
|
|
104
|
+
/**
|
|
105
|
+
* Initializes Logit with custom options.
|
|
106
|
+
*/
|
|
107
|
+
initialise: (e) => {
|
|
108
|
+
Object.assign(o, e);
|
|
109
|
+
},
|
|
110
|
+
/**
|
|
111
|
+
* Sets the minimum log level to display.
|
|
112
|
+
*/
|
|
113
|
+
setLogLevel: (e) => {
|
|
114
|
+
o.logLevel = e;
|
|
115
|
+
},
|
|
116
|
+
/**
|
|
117
|
+
* Sets the namespace prefix for all logs.
|
|
118
|
+
*/
|
|
119
|
+
setPrefix: (e) => {
|
|
120
|
+
o.namespace = e;
|
|
121
|
+
},
|
|
122
|
+
/**
|
|
123
|
+
* Configures remote logging options.
|
|
124
|
+
*/
|
|
125
|
+
setRemote: (e) => {
|
|
126
|
+
o.remote = e;
|
|
127
|
+
},
|
|
128
|
+
/**
|
|
129
|
+
* Sets the log level for remote logging.
|
|
130
|
+
*/
|
|
131
|
+
setRemoteLogLevel: (e) => {
|
|
132
|
+
o.remote.logLevel = e;
|
|
133
|
+
},
|
|
134
|
+
/**
|
|
135
|
+
* Sets the display variant (text, icon, or symbol).
|
|
136
|
+
*/
|
|
137
|
+
setVariant: (e) => {
|
|
138
|
+
o.variant = e;
|
|
139
|
+
},
|
|
140
|
+
/**
|
|
141
|
+
* Shows or hides the environment indicator.
|
|
142
|
+
*/
|
|
143
|
+
showEnvironment: (e) => {
|
|
144
|
+
o.environment = e;
|
|
145
|
+
},
|
|
146
|
+
/**
|
|
147
|
+
* Shows or hides timestamps in logs.
|
|
148
|
+
*/
|
|
149
|
+
showTimestamp: (e) => {
|
|
150
|
+
o.timestamp = e;
|
|
151
|
+
},
|
|
152
|
+
success: (...e) => l("success", ...e),
|
|
153
|
+
/**
|
|
154
|
+
* Displays data in a table format.
|
|
155
|
+
*/
|
|
156
|
+
table: (...e) => {
|
|
157
|
+
g("table") && console.table(...e);
|
|
158
|
+
},
|
|
159
|
+
/**
|
|
160
|
+
* Starts a timer with the given label.
|
|
161
|
+
*/
|
|
162
|
+
time: (e) => {
|
|
163
|
+
g("time") && console.time(e);
|
|
164
|
+
},
|
|
165
|
+
/**
|
|
166
|
+
* Ends a timer with the given label.
|
|
167
|
+
*/
|
|
168
|
+
timeEnd: (e) => {
|
|
169
|
+
g("time") && console.timeEnd(e);
|
|
170
|
+
},
|
|
171
|
+
trace: (...e) => l("trace", ...e),
|
|
172
|
+
warn: (...e) => l("warn", ...e)
|
|
173
|
+
};
|
|
174
|
+
typeof window < "u" && (window.Logit = E);
|
|
175
|
+
export {
|
|
176
|
+
E as Logit
|
|
177
|
+
};
|
|
178
|
+
//# sourceMappingURL=logit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logit.js","sources":["../../../../logit/dist/logit.js"],"sourcesContent":["const h = {};\nconst w = {\n debug: \"log\",\n success: \"log\"\n}, v = () => h?.NODE_ENV === \"production\", $ = typeof window < \"u\" && window.matchMedia?.(\"(prefers-color-scheme: dark)\").matches, m = {\n debug: { bg: \"#616161\", border: \"#424242\", color: \"#fff\", icon: \"☕\", symbol: \"🅳\" },\n error: { bg: \"#d32f2f\", border: \"#c62828\", color: \"#fff\", icon: \"✘\", symbol: \"🅴\" },\n group: { bg: \"#546e7a\", border: \"#455a64\", color: \"#fff\", icon: \"⚭\", symbol: \"🅶\" },\n info: { bg: \"#1976d2\", border: \"#1565c0\", color: \"#fff\", icon: \"ℹ\", symbol: \"🅸\" },\n ns: $ ? { bg: \"#fafafa\", border: \"#c7c7c7\", color: \"#000\" } : { bg: \"#424242\", border: \"#212121\", color: \"#fff\" },\n success: { bg: \"#689f38\", border: \"#558b2f\", color: \"#fff\", icon: \"✔\", symbol: \"🆂\" },\n time: { bg: \"#0097a7\", border: \"#00838f\", color: \"#fff\", icon: \"⏲\", symbol: \"🆃\" },\n trace: { bg: \"#d81b60\", border: \"#c2185b\", color: \"#fff\", icon: \"⛢\", symbol: \"🆃\" },\n warn: { bg: \"#ffb300\", border: \"#ffa000\", color: \"#fff\", icon: \"⚠\", symbol: \"🆆\" }\n}, f = {\n debug: 0,\n trace: 1,\n time: 2,\n table: 3,\n info: 4,\n success: 5,\n warn: 6,\n error: 7,\n off: 8\n}, e = {\n environment: !0,\n logLevel: \"debug\",\n namespace: \"\",\n remote: { handler: void 0, logLevel: \"off\" },\n timestamp: !0,\n variant: \"symbol\"\n}, d = (o) => f[e.logLevel] <= f[o], u = () => (/* @__PURE__ */ new Date()).toISOString().slice(11, 23), b = () => v() ? \"🄿\" : \"🄳\", x = (o, r) => {\n e.remote.handler && f[e.remote.logLevel] <= f[o] && e.remote.handler(o, ...r);\n}, p = (o) => w[o] || o, g = (o, r = \"\") => {\n const { bg: t, color: s, border: n } = m[o], c = `color: ${t}; border: 1px solid ${n}; border-radius: 4px;`;\n switch (e.variant) {\n case \"symbol\":\n return `${c} padding: 1px 1px 0;${r};`;\n case \"icon\":\n return `${c} padding: 0 3px;${r};`;\n default:\n return `background: ${t}; color: ${s}; border: 1px solid ${n}; border-radius: 4px; font-weight: bold; padding: 0 3px;${r}`;\n }\n};\nfunction L(o) {\n const r = m[o], { namespace: t, variant: s, timestamp: n, environment: c } = e;\n let i = `%c${r[s] ?? o.toUpperCase()}%c`;\n const a = [g(o), \"\"];\n return t && (i += ` %c${t}%c`, a.push(g(\"ns\", \" border-radius: 8px; font: italic small-caps bold 12px; font-weight: lighter;\"), \"\")), c && (i += ` %c${b()}%c`, a.push(\"color: darkgray;\", \"\")), n && (i += ` %c${u()}%c`, a.push(\"color: gray;\", \"\")), { format: i, parts: a };\n}\nconst l = (o, ...r) => {\n if (typeof window > \"u\") {\n const c = m[o], { variant: i } = e, a = console[p(o)];\n a(`${c[i] ?? o.toUpperCase()} | ${b()} |`, ...r);\n return;\n }\n if (!d(o)) return;\n const { format: t, parts: s } = L(o), n = console[p(o)];\n n(t, ...s, ...r), x(o, r);\n}, E = (o) => {\n const r = Math.floor(Date.now() - o);\n return r ? `${r}ms` : \"\";\n}, _ = {\n /**\n * Asserts a condition and logs an error if it's false.\n */\n assert: (o, r, t) => console.assert(o, r, t),\n debug: (...o) => l(\"debug\", ...o),\n error: (...o) => l(\"error\", ...o),\n /**\n * Gets the current log level.\n */\n getLevel: () => e.logLevel,\n /**\n * Gets the current namespace prefix.\n */\n getPrefix: () => e.namespace,\n /**\n * Gets whether timestamps are shown.\n */\n getTimestamp: () => e.timestamp,\n /**\n * Creates a collapsed group in the console.\n */\n groupCollapsed: (o, r = \"GROUP\", t = Date.now()) => {\n if (!d(\"success\")) return;\n const s = E(t), n = b();\n console.groupCollapsed(\n `%c${r}%c${e.namespace}%c${n}%c${e.timestamp ? u() : \"\"}%c${s}%c${o}`,\n g(\"group\", \"margin-right: 6px; padding: 1px 3px 0\"),\n g(\"ns\", \" border-radius: 8px; font: italic small-caps bold 12px; font-weight: lighter;margin-right: 6px;\"),\n \"color: darkgray; margin-right: 6px;\",\n \"color: gray;font-weight: lighter;margin-right: 6px;\",\n \"color: gray; font-weight: lighter;margin-right: 6px;\",\n \"color: inherit;font-weight: lighter;\"\n );\n },\n /**\n * Ends the current console group.\n */\n groupEnd: () => {\n d(\"success\") && console.groupEnd();\n },\n info: (...o) => l(\"info\", ...o),\n /**\n * Initializes Logit with custom options.\n */\n initialise: (o) => {\n Object.assign(e, o);\n },\n /**\n * Sets the minimum log level to display.\n */\n setLogLevel: (o) => {\n e.logLevel = o;\n },\n /**\n * Sets the namespace prefix for all logs.\n */\n setPrefix: (o) => {\n e.namespace = o;\n },\n /**\n * Configures remote logging options.\n */\n setRemote: (o) => {\n e.remote = o;\n },\n /**\n * Sets the log level for remote logging.\n */\n setRemoteLogLevel: (o) => {\n e.remote.logLevel = o;\n },\n /**\n * Sets the display variant (text, icon, or symbol).\n */\n setVariant: (o) => {\n e.variant = o;\n },\n /**\n * Shows or hides the environment indicator.\n */\n showEnvironment: (o) => {\n e.environment = o;\n },\n /**\n * Shows or hides timestamps in logs.\n */\n showTimestamp: (o) => {\n e.timestamp = o;\n },\n success: (...o) => l(\"success\", ...o),\n /**\n * Displays data in a table format.\n */\n table: (...o) => {\n d(\"table\") && console.table(...o);\n },\n /**\n * Starts a timer with the given label.\n */\n time: (o) => {\n d(\"time\") && console.time(o);\n },\n /**\n * Ends a timer with the given label.\n */\n timeEnd: (o) => {\n d(\"time\") && console.timeEnd(o);\n },\n trace: (...o) => l(\"trace\", ...o),\n warn: (...o) => l(\"warn\", ...o)\n};\ntypeof window < \"u\" && (window.Logit = _);\nexport {\n _ as Logit\n};\n//# sourceMappingURL=logit.js.map\n"],"names":["v","$","e","d","o","b","x","p","g","L","i","a","E","_"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vielzeug/fetchit",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"files": [
|
|
6
|
+
"dist"
|
|
7
|
+
],
|
|
8
|
+
"main": "./dist/index.cjs",
|
|
9
|
+
"module": "./dist/index.js",
|
|
10
|
+
"types": "dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"require": "./dist/index.cjs"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc && vite build",
|
|
19
|
+
"fix": "biome check --write --unsafe src",
|
|
20
|
+
"lint": "biome check src",
|
|
21
|
+
"prepublishOnly": "npm run build",
|
|
22
|
+
"preview": "vite preview",
|
|
23
|
+
"test": "vitest"
|
|
24
|
+
},
|
|
25
|
+
"publishConfig": {
|
|
26
|
+
"access": "public",
|
|
27
|
+
"registry": "https://registry.npmjs.org/"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@vielzeug/logit": "workspace:*"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"typescript": "~5.9.3",
|
|
34
|
+
"vite": "^7.3.1",
|
|
35
|
+
"vite-plugin-dts": "^4.5.4",
|
|
36
|
+
"vitest": "^4.0.18"
|
|
37
|
+
}
|
|
38
|
+
}
|