larapi 0.2.45 → 0.2.46
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.mts +258 -0
- package/dist/index.d.ts +258 -0
- package/dist/index.js +981 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +952 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +17 -10
- package/dist/index.js.LICENSE.txt +0 -6
- package/lib/Core.d.ts +0 -39
- package/lib/Http.d.ts +0 -44
- package/lib/Queue.d.ts +0 -13
- package/lib/index.d.ts +0 -72
- package/lib/types.d.ts +0 -130
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Core.ts","../src/Http.ts","../src/Queue.ts","../src/index.ts"],"sourcesContent":["import EventEmitter,{\n\tEvents\n} from 'easy-event-emitter';\nimport type {\n\tTConfig,\n\tTCache,\n\tTCacheBody,\n\tTData,\n\tTGroupsData,\n\tTCoreRviverObject,\n\tTRequestHeaders,\n\tFieldRevivers,\n\tObjectReviverRule\n} from './types';\n\nabstract class Core {\n\tprivate cache: TCache;\n\t\tinitData: TGroupsData;\n\tprotected readonly events: EventEmitter;\n\tprotected config: TConfig;\n\tprotected headers: TRequestHeaders = {};\n\t\t\n\tconstructor(context?: Core) {\n\t\tthis.events = new EventEmitter();\n\t\tthis.config = {\n\t\t\thost: 'http://127.0.0.1/',\n\t\t};\n\t\tthis.cache = {};\n\t\tthis.initData = {};\n\n\t\tthis.setConfig = this.setConfig.bind(this);\n\t\tthis.getConfig = this.getConfig.bind(this);\n\t\tthis.setHost = this.setHost.bind(this);\n\t\tthis.setInitData = this.setInitData.bind(this);\n\t\tthis.triggerByCacheGroup = this.triggerByCacheGroup.bind(this);\n\t\tthis.clearCacheGroup = this.clearCacheGroup.bind(this);\n\t\tthis.updateCacheGroup = this.updateCacheGroup.bind(this);\n\t\tthis.setGlobalInitData = this.setGlobalInitData.bind(this);\n\t\tif (context) {\n\t\t\tObject.assign(this, {\n\t\t\t\tconfig: context?.config,\n\t\t\t\tevents: context?.events,\n\t\t\t\tcache: context?.cache,\n\t\t\t\tinitData: context?.initData,\n\t\t\t\theaders: context.headers\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected setConfig(config: TConfig) {\n\t\tthis.config = config;\n\t}\n\n\tprotected getConfig() {\n\t\treturn this.config;\n\t}\n\n\tprotected getCache(key: string): TData | undefined {\n\t\tif (this.cache[key]) {\n\t\t\tif ((new Date()).getTime() <= (this.cache[key].time + 3600000000)) {\n\t\t\t\treturn this.cache[key].data;\n\t\t\t}else{\n\t\t\t\tdelete this.cache[key];\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected isJsonString(str: string) {\n\t\ttry {\n\t\t\tJSON.parse(str);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tprivate compileRevivers() {\n\t\tconst fieldRevivers: FieldRevivers = {};\n\t\tconst objectRevivers: ObjectReviverRule[] = [];\n\n\t\tconst replace = this.config.dataReviver;\n\t\tif (!replace) return { fieldRevivers, objectRevivers };\n\n\t\tfor (const [key, fn] of Object.entries(replace)) {\n\t\t\tif (typeof fn !== 'function') continue;\n\n\t\t\tif (key.includes('&')) {\n\t\t\t\tobjectRevivers.push({\n\t\t\t\t\tkeys: new Set(key.split('&')),\n\t\t\t\t\tfn\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tfieldRevivers[key] = fn;\n\t\t\t}\n\t\t}\n\n\t\treturn { fieldRevivers, objectRevivers };\n\t}\n\n\tprivate applyObjectRevivers(\n\t\tvalue: unknown,\n\t\tobjectRevivers: ObjectReviverRule[],\n\t\tdepth = 0,\n\t\tisArrayItem = false\n\t): unknown {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn value;\n\t\t}\n\n\t\t// 👇 массив\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\t\tvalue[i] = this.applyObjectRevivers(value[i], objectRevivers, depth + 1, true);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\n\t\tlet obj = value as Record<string, any>;\n\n\t\tconst shouldApply = depth === 0 || isArrayItem;\n\n\t\tif (shouldApply) {\n\t\t\tfor (const rule of objectRevivers) {\n\t\t\t\tconst keys = Object.keys(obj);\n\n\t\t\t\tif (rule.keys.size > keys.length) continue;\n\n\t\t\t\tlet match = true;\n\t\t\t\tfor (const k of rule.keys) {\n\t\t\t\t\tif (!(k in obj)) {\n\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (match) {\n\t\t\t\t\tobj = rule.fn(obj);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 👇 дальше всегда идём вглубь как \"не массивный элемент\"\n\t\tfor (const k of Object.keys(obj)) {\n\t\t\tobj[k] = this.applyObjectRevivers(obj[k], objectRevivers, depth + 1, false);\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\n\tpublic dataPrepare(data: unknown) {\n\t\tconst json = JSON.stringify(data);\n\t\treturn this.jsonParse(json);\n\t}\n\n\tpublic jsonParse(str: string) {\n\t\tif (typeof this.config.reviver === 'function') {\n\t\t\treturn JSON.parse(str, this.config.reviver);\n\t\t}\n\n\t\tconst { fieldRevivers, objectRevivers } = this.compileRevivers();\n\n\t\tconst data = JSON.parse(str, (key, value) => {\n\t\t\tconst reviver = fieldRevivers[key];\n\t\t\treturn reviver ? reviver(value) : value;\n\t\t});\n\n\t\treturn this.applyObjectRevivers(data, objectRevivers);\n\t}\n\n\n\tpublic setHost(host: string): void {\n\t\tthis.config.host = host;\n\t}\n\n\tpublic setHeader(name: string, value: string) {\n\t\tthis.headers[name] = value;\n\t\tthis.events.emit('header-update', {\n\t\t\tname,\n\t\t\tvalue\n\t\t});\n\t}\n\n\tpublic getHeader(name: string) {\n\t\treturn this.headers[name];\n\t}\n\n\tpublic getHeaders() {\n\t\treturn Object.entries(this.headers).map(([name, value]) => ({name, value}));\n\t}\n\n\tpublic hasHeader(name: string) {\n\t\treturn this.headers[name] ? true : false;\n\t}\n\n\tpublic deleteHeader(name: string) {\n\t\tdelete this.headers[name];\n\t}\n\n\tprotected setCache(key: string, data: TData, group?: string): void {\n\t\tthis.cache[key] = {\n\t\t\ttime: (new Date()).getTime(),\n\t\t\tdata: data,\n\t\t\tgroup: group\n\t\t};\n\t}\n\n\tprotected groupFromArray<T = string>(groups: T | T[], callback: (group: T, params?: string[]) => void, withoutSplit: boolean = false): void {\n\t\tconst currentCallback = (group: T) => {\n\t\t\tif (typeof group === 'string' && !withoutSplit) {\n\t\t\t\tconst params = group.split('.');\n\t\t\t\tconst current = params.shift() as T;\n\t\t\t\tcallback(current, params);\n\t\t\t}else{\n\t\t\t\tcallback(group);\n\t\t\t}\n\t\t};\n\n\t\tif (Array.isArray(groups)) {\n\t\t\tgroups.map(currentCallback);\n\t\t}else if (typeof groups === 'string') {\n\t\t\tcurrentCallback(groups);\n\t\t}\n\t}\n\n\tpublic triggerByCacheGroup(groups: string | string[]): void {\n\t\tthis.groupFromArray(groups, (group) => this.events.emit('trigger-request-by-cache-' + group, undefined));\n\t}\n\n\tpublic clearCacheGroup(groups: string | string[], data?: TData, fieldKey: string | null = 'id'): void {\n\t\tthis.groupFromArray(groups, (group) => {\n\t\t\tif (data) {\n\n\t\t\t\tconst clear = (cacheData: any) => {\n\t\t\t\t\tif ((fieldKey && cacheData?.[fieldKey] === data?.[fieldKey]) || fieldKey === null) {\n\t\t\t\t\t\tfor(const key in cacheData) {\n\t\t\t\t\t\t\tif (key in data) {\n\t\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t};\n\t\n\t\n\t\t\t\tfor(const key in this.cache) {\n\t\t\t\t\tif (this.cache[key].group === group) {\n\t\t\t\t\t\tif (Array.isArray(this.cache[key].data)) {\n\t\t\t\t\t\t\tthis.cache[key].data = Object.values(this.cache[key].data).filter(clear);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif (!clear(this.cache[key].data))\n\t\t\t\t\t\t\t\tdelete this.cache[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tfor(const key in this.cache) {\n\t\t\t\t\tif (this.cache[key].group === group) {\n\t\t\t\t\t\tdelete this.cache[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate setDataTree(obj: any, path: string, val: any) { \n\t\tconst keys = path.split('.');\n\t\tconst lastKey = keys.pop();\n\t\tconst lastObj = keys.reduce((obj, key) => \n\t\t\tobj[key] = obj[key] || {}, \n\t\t\tobj);\n\t\tif (typeof lastKey === 'string') {\n\t\t\tlastObj[lastKey] = val;\n\t\t}\n\t\treturn obj;\n\t};\n\n\tpublic updateCacheGroup(groups: string | string[], data: TData, fieldKey: string | null = 'id'): void {\n\t\tconst update = (cacheData: any) => {\n\t\t\tconst retData = cacheData;\n\t\t\t\n\t\t\tconst fieldList = fieldKey!.split('.');\n\t\t\tif (fieldList.length > 1) {\n\t\t\t\tfor(const key of fieldList) {\n\t\t\t\t\tcacheData = cacheData[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif ((fieldKey && cacheData[fieldKey] === data[fieldKey]) || fieldKey === null) {\n\t\t\t\tfor(const key in cacheData) {\n\t\t\t\t\tif (key in data) {\n\t\t\t\t\t\tcacheData[key] = data[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn retData;\n\t\t};\n\t\t\n\t\tthis.groupFromArray(groups, (group, params) => {\n\t\t\tfor(const key in this.cache) {\n\t\t\t\tif (this.cache[key].group === group) {\n\t\t\t\t\tif (Array.isArray(this.cache[key].data)) {\n\t\t\t\t\t\tthis.cache[key].data = Object.values(this.cache[key].data).map(update);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.cache[key].data = update(this.cache[key].data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic appendCacheGroup(group: string, data: TData): void {\n\t\t\n\n\t\t// for(const key in this.cache) {\n\t\t// \tif (this.cache[key].group === group) {\n\t\t// \t\tconsole.log(this.setDataTree(this.cache[key].data, 'data.test', 'tttttt'));\n\t\t// \t}\n\t\t// }\n\t\t//console.log(this.cache);\n\t}\n\n\tprotected getCacheByIndex(index: string): TCacheBody {\n\t\treturn this.cache[index];\n\t}\n\n\tprotected deleteCache(key: string): void {\n\t\tif (!this.cache[key])\n\t\t\treturn;\n\n\t\tconst group = this.cache[key].group;\n\t\tif (group) {\n\t\t\tthis.clearCacheGroup(group);\n\t\t}\n\t\tdelete this.cache[key];\n\t}\n\n\tpublic setGlobalInitData(name: string, data: TGroupsData): void {\n\t\tthis.initData[name] = data;\n\t}\n\n\tpublic setInitData(data: TGroupsData): void {\n\t\tthis.initData = data;\n\t}\n}\n\nexport default Core;","import md5 from 'md5';\nimport Core from \"./Core\";\nimport Queue from './Queue';\nimport EventEmitter,{\n\tEventListener\n} from \"easy-event-emitter\";\nimport type {\n\tTMethod,\n\tTParams,\n\tTData,\n\tTRequestParams,\n\tTListenerEvents,\n\tTCacheControll,\n\tTRequestProgress,\n\tTResponseData,\n\tTRequestHeaders\n} from \"./types\";\n\nclass Http<D extends TResponseData = TResponseData, PATH = any, DATA = any> extends Core {\n\tprivate cacheIndex: string;\n\tprivate currentCache?: TData;\n\tprivate currentEvents: EventEmitter\n\tprivate requestParams: TRequestParams;\n\tprivate method: TMethod;\n\tprivate params: TParams<PATH, DATA>;\n\tprivate path: string;\n\tprivate queue: Queue<D>;\n\tprivate queueName: string;\n\tprivate _promise: Promise<DATA>;\n\tprivate xhr?: XMLHttpRequest;\n\tprivate tryRequestCount = 0;\n\tprivate tryRequestTimeout?: NodeJS.Timeout;\n\n\tconstructor(method: TMethod, params: TParams<PATH, DATA>, context?: Core) {\n\t\tsuper(context);\n\t\tthis.currentEvents = new EventEmitter();\n\t\tthis._promise = new Promise<DATA>(() => {});\n\t\tthis.queue = new Queue<D>(this);\n\t\tthis.cacheIndex = '';\n\t\tthis.queueName = '';\n\t\tthis.method = method;\n\n\t\tthis.headers = {\n\t\t\t...this.headers,\n\t\t\t...params.headers\n\t\t};\n\t\tthis.params = {\n\t\t\t...this.config,\n\t\t\theaders: this.headers,\n\t\t\t...params,\n\t\t};\n\t\tthis.path = this.params.path as string;\n\t\tthis.requestParams = {\n\t\t\tmethod: this.method\n\t\t};\n\t\t\n\t\tthis.handleSuccess = this.handleSuccess.bind(this);\n\t\tthis.handleAbort = this.handleAbort.bind(this);\n\t\tthis.handleFail = this.handleFail.bind(this);\n\t\tthis.handleError = this.handleError.bind(this);\n\t\tthis.handleComplete = this.handleComplete.bind(this);\n\t\tthis.handleProgress = this.handleProgress.bind(this);\n\t\tthis.setEmit = this.setEmit.bind(this);\n\t\tthis.request = this.request.bind(this);\n\t\tthis.httpRequest = this.httpRequest.bind(this);\n\t\tthis.tryHttpRequest = this.tryHttpRequest.bind(this);\n\n\t\tthis.initRequest();\n\t\tthis.initCache();\n\t\tthis.initQueue();\n\t}\n\n\tprivate initRequest(): void {\n\t\t\n\t\tif (typeof XMLHttpRequest !== 'undefined') {\n\t\t\tthis.xhr = new XMLHttpRequest();\n\t\t}\n\t\t\n\t\tif (this.params.clearUndifinedData)\n\t\t\tthis.params.data = this.params.data ? this.cuteUndifinedParams(this.params.data) : this.params.data;\n\n\t\tif ((['GET', 'HEAD'] as TMethod[]).includes(this.method)) {\n\t\t\tif (this.params.data)\n\t\t\t\tthis.path = (this.params.path as string) + '?' + this.encodeUrlParams(this.params.data);\n\n\t\t\tif (this.method === 'HEAD') {\n\t\t\t\tthis.requestParams.withoutResponse = true;\n\t\t\t}\n\t\t}\n\n\t\tif ((['POST', 'PUT', 'CONNECT', 'PATH'] as TMethod[]).includes(this.method)) {\n\t\t\tthis.requestParams.body = this.params.body ?? JSON.stringify(this.params.data);\n\t\t}\n\n\t\tif ((['PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE'] as TMethod[]).includes(this.method)) {\n\t\t\tthis.params.cache = false;\n\t\t}\n\t}\n\n\tprivate initCache(): void {\n\t\tthis.cacheIndex = md5(this.path + JSON.stringify(this.params.data));\n\n\t\tif (this.params.globalName) {\n\t\t\tif (this.initData[this.params.globalName]) {\n\t\t\t\tconst data = this.config.globalDataWithoutDataPrepare ? this.initData[this.params.globalName] : this.dataPrepare(this.initData[this.params.globalName]);\n\t\t\t\tthis.setCache(this.cacheIndex, data, (typeof this.params.cache === 'boolean' ? undefined : this.params.cache));\n\t\t\t\tthis.params.cache = this.params.cache ?? true;\n\t\t\t\tdelete this.initData[this.params.globalName];\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (this.params.cache) {\n\t\t\tif (typeof this.params.cache === 'string') {\n\t\t\t\tthis.events.addListener('trigger-request-by-cache-' + this.params.cache, this.request);\n\t\t\t}\n\t\t\tthis._promise = new Promise(async (resolve) => {\n\t\t\t\tif (this.currentCache = this.getCache(this.cacheIndex)) {\n\t\t\t\t\tresolve(this.currentCache as DATA);\n\t\t\t\t\tthis.handleSuccess(this.currentCache);\n\t\t\t\t\tthis.handleComplete(this.currentCache);\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tthis.deleteCache(this.cacheIndex);\n\t\t}\n\t}\n\n\tpublic get host() {\n\t\treturn this.params.host;\n\t}\n\n\tpublic get promise() {\n\t\treturn this._promise;\n\t}\n\n\tpublic get url() {\n\t\treturn this.params.host + this.path;\n\t}\n\n\tprivate initQueue(): void {\n\t\tthis.queueName = this.params.queueThrottling ? md5(this.path) : this.cacheIndex;\n\t}\n\n\tprivate setEmit<EVENT extends keyof TListenerEvents, DATA extends TListenerEvents[EVENT]>(event: EVENT, data: DATA) {\n\t\tthis.currentEvents.emit(event, data);\n\t\tthis.events.emit(event, {\n\t\t\tcacheIndex: this.cacheIndex,\n\t\t\tdata\n\t\t});\n\t}\n\n\t//Заголовки от 200 до 299\n\tpublic handleSuccess(data: any) {\n\t\tif (typeof this.params.success === 'function' && this.xhr)\n\t\t\tthis.params.success(data, this.xhr);\n\t\tif (this.params.cacheUpdate && this.params.data) {\n\t\t\tthis.groupFromArray<TCacheControll>(this.params.cacheUpdate, (cacheUpdate, params) => {\n\t\t\t\tthis.updateCacheGroup(\n\t\t\t\t\ttypeof cacheUpdate === 'string' ? cacheUpdate : cacheUpdate.group,\n\t\t\t\t\tthis.params.data ?? {},\n\t\t\t\t\ttypeof cacheUpdate === 'string' ? undefined : cacheUpdate.fieldKey);\n\t\t\t}, true);\n\t\t}\n\t\t\n\t\tif (this.params.cacheClear && this.params.data) {\n\t\t\tthis.groupFromArray<TCacheControll>(this.params.cacheClear, (cacheClear) => {\n\t\t\t\tthis.clearCacheGroup(\n\t\t\t\t\ttypeof cacheClear === 'string' ? cacheClear : cacheClear.group,\n\t\t\t\t\tthis.params.data,\n\t\t\t\t\ttypeof cacheClear === 'string' ? undefined : cacheClear.fieldKey);\n\t\t\t});\n\t\t}\n\t\tthis.setEmit('api-request-success', data);\n\t}\n\n\tpublic handleAbort(data: any) {\n\t\tif (typeof this.params.abort === 'function') {\n\t\t\tthis.params.abort(data);\n\t\t}\n\t\t\n\t\tthis.setEmit('api-request-abort', data);\n\t}\n\n\t//Заголовки от 400 до 499\n\tpublic handleFail(data: any) {\n\t\tif (typeof this.params.fail === 'function') {\n\t\t\tthis.params.fail(data);\n\t\t}\n\t\t\n\t\tthis.setEmit('api-request-fail', data);\n\t}\n\n\t//Все остальные\n\tpublic handleError(data: any) {\n\t\tif (this.xhr?.status === 0 && this.xhr.readyState === 4) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof this.params.error === 'function') {\n\t\t\tthis.params.error(data);\n\t\t}\n\t\t\n\t\tthis.setEmit('api-request-error', data);\n\t}\n\n\tpublic handleComplete(data: any) {\n\t\tif (typeof this.params.complete === 'function') {\n\t\t\tthis.params.complete(data);\n\t\t}\t\n\n\t\tthis.setEmit('api-request-complete', data);\n\t}\n\n\tpublic handleProgress(progress: TRequestProgress) {\n\t\tif (typeof this.params.progress === 'function') {\n\t\t\tthis.params.progress(progress);\n\t\t}\t\n\n\t\tthis.setEmit('api-request-progress', progress);\n\t}\n\n\tprivate encodeUrlParams(data: TData, prefix = ''): string {\n\t\treturn Object.entries(data)\n\t\t\t.filter(([_, value]) => value !== undefined && value !== null)\n\t\t\t.map(([key, value]) => {\n\t\t\t\t// Если есть префикс (мы внутри объекта), формируем ключ как key[subKey]\n\t\t\t\tconst encodedKey = prefix ? `${prefix}[${encodeURIComponent(key)}]` : encodeURIComponent(key);\n\n\t\t\t\t// 1. Обработка массивов (как у тебя)\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tif (value.length === 0) return `${encodedKey}[]=`;\n\t\t\t\t\treturn value\n\t\t\t\t\t\t.map((val) => `${encodedKey}[]=${encodeURIComponent(String(val))}`)\n\t\t\t\t\t\t.join('&');\n\t\t\t\t}\n\n\t\t\t\t// 2. Обработка объектов (вместо JSON.stringify делаем рекурсию)\n\t\t\t\t// Важно: проверяем на null, т.к. typeof null === 'object'\n\t\t\t\tif (typeof value === 'object' && value !== null) {\n\t\t\t\t\treturn this.encodeUrlParams(value, encodedKey);\n\t\t\t\t}\n\n\t\t\t\t// 3. Обычные значения\n\t\t\t\treturn `${encodedKey}=${encodeURIComponent(String(value))}`;\n\t\t\t})\n\t\t\t.filter(str => str !== \"\")\n\t\t\t.join('&');\n\t}\n\n\tprivate cuteUndifinedParams<T extends TData>(data: T): T {\n\t\tif (typeof data !== 'object' || data === null) {\n\t\t\treturn data;\n\t\t}\n\t\tfor(const key in data) {\n\t\t\tif (typeof data[key] === 'undefined') {\n\t\t\t\tdelete data[key];\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tprivate tryHttpRequest() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (this.params.tryRequest && this.params.tryRequest > this.tryRequestCount) {\n\t\t\t\tif (this.tryRequestTimeout) {\n\t\t\t\t\tclearTimeout(this.tryRequestTimeout);\n\t\t\t\t}\n\t\t\t\tthis.tryRequestTimeout = setTimeout(() => {\n\t\t\t\t\tthis.xhr?.abort();\n\t\t\t\t\tthis.httpRequest()\n\t\t\t\t\t.then((value) => {\n\t\t\t\t\t\tresolve(value);\n\t\t\t\t\t\tthis.tryRequestCount = 0;\n\t\t\t\t\t})\n\t\t\t\t\t.catch(reject);\n\t\t\t\t}, this.params.tryRequestDelay ?? 1000);\n\t\t\t\t++this.tryRequestCount;\n\t\t\t}else{\n\t\t\t\treject();\n\t\t\t}\n\t\t})\n\t}\n\n\tprivate fileRequest() {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!this.params.file) return;\n\n\t\t\tconst data = this.params.file;\n\t\t\tconst chunkSize = this.params.fileSizeChunk ? this.params.fileSizeChunk * 1024 * 1024 : this.params.file.byteLength;\n\t\t\tconst totalChunks = Math.ceil(this.params.file.byteLength / chunkSize);\n\t\t\tlet fileId: string | undefined = this.params.fileIdByServer ? undefined : `file-${new Date().getTime()}`;\n\t\t\t\n\t\t\tfor (let i = 0; i < totalChunks; i++) {\n\t\t\t\ttry {\n\t\t\t\t\tconst start = i * chunkSize;\n\t\t\t\t\tconst end = Math.min(start + chunkSize, data.byteLength);\n\t\t\t\t\tconst chunk = data.slice(start, end);\n\t\t\t\t\t\n\t\t\t\t\tconst headers: TRequestHeaders = {\n\t\t\t\t\t\t...this.headers\n\t\t\t\t\t};\n\n\t\t\t\t\tlet body = undefined;\n\t\t\t\t\t\n\t\t\t\t\tif (this.params.fileType === 'binary') {\n\t\t\t\t\t\tconst u8 = chunk instanceof Uint8Array ? chunk : new Uint8Array(chunk);\n\n\t\t\t\t\t\theaders['Content-Type'] = 'application/octet-stream';\n\t\t\t\t\t\theaders['Content-Range'] = `bytes ${start}-${end - 1}/${this.params.file.byteLength}`;\n\t\t\t\t\t\theaders['X-Chunk-Index'] = String(i);\n\t\t\t\t\t\theaders['X-Chunk-Total'] = String(totalChunks);\n\t\t\t\t\t\tif (fileId && (!this.params.fileIdByServer || (this.params.fileIdByServer && i > 0))) {\n\t\t\t\t\t\t\theaders[typeof this.params.fileIdByServer === 'string' ? this.params.fileIdByServer : 'X-File-ID'] = fileId;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbody = u8;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconst formData = new FormData();\n\t\t\t\t\t\tformData.append(\"file\", new Blob([chunk]));\n\t\t\t\t\t\tif (fileId && (!this.params.fileIdByServer || (this.params.fileIdByServer && i > 0))) {\n\t\t\t\t\t\t\tformData.append(typeof this.params.fileIdByServer === 'string' ? this.params.fileIdByServer : \"file_id\", fileId);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tformData.append(\"chunk_index\", String(i));\n\t\t\t\t\t\tformData.append(\"total_chunks\", String(totalChunks));\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (this.params.data && (totalChunks - 1) === i) {\n\t\t\t\t\t\t\tfor (const key in this.params.data) {\n\t\t\t\t\t\t\t\tformData.append(key, this.params.data[key]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete headers['Content-Type'];\n\t\t\t\t\t\tbody = formData;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tdelete headers['Accept'];\n\t\t\t\t\t\n\t\t\t\t\tconst http = new Http(this.method, {\n\t\t\t\t\t\t...this.params,\n\t\t\t\t\t\tfile: undefined,\n\t\t\t\t\t\theaders,\n\t\t\t\t\t\tdata: undefined,\n\t\t\t\t\t\tfileSizeChunk: undefined,\n\t\t\t\t\t\tbody,\n\t\t\t\t\t\tsuccess: (totalChunks - 1 > i) ? undefined : (data) => {\n\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t\tthis.handleSuccess(data);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcomplete: (totalChunks - 1 > i) ? undefined : (e) => {\n\t\t\t\t\t\t\tthis.handleComplete(e);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tprogress: (progres) => {\n\t\t\t\t\t\t\tconst loaded = start + progres.loaded;\n\t\t\t\t\t\t\tthis.handleProgress({\n\t\t\t\t\t\t\t\tpercent: (loaded / data.byteLength * 100),\n\t\t\t\t\t\t\t\ttotal: data.byteLength,\n\t\t\t\t\t\t\t\tloaded\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfail: reject,\n\t\t\t\t\t\terror: reject\n\t\t\t\t\t}, this);\n\t\t\t\t\t\n\t\t\t\t\tthis.xhr = http.xhr;\n\t\t\t\t\n\t\t\t\t\tconst result = await http.request(true).promise;\n\t\t\t\t\tif (result?.file_id) {\n\t\t\t\t\t\tfileId = result?.file_id;\n\t\t\t\t\t}\n\t\t\t\t}catch(e){\n\t\t\t\t\treject(e);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tprivate httpRequest() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (typeof this.xhr === 'undefined') return;\n\t\t\ttry {\n\t\t\t\tthis.xhr.open(this.method, this.url, this.params.requestAsync ?? true);\n\t\t\t\t\n\t\t\t\tif (this.params.timeout) {\n\t\t\t\t\tthis.xhr.timeout = this.params.timeout;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor(const header in this.headers) {\n\t\t\t\t\tthis.xhr.setRequestHeader(header, this.headers[header]);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (this.xhr.upload) {\n\t\t\t\t\tthis.xhr.upload.onprogress = ({lengthComputable, loaded, total}) => {\n\t\t\t\t\t\tif (lengthComputable) {\n\t\t\t\t\t\t\tthis.handleProgress({\n\t\t\t\t\t\t\t\tpercent: (loaded / total * 100),\n\t\t\t\t\t\t\t\ttotal,\n\t\t\t\t\t\t\t\tloaded\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.xhr.onabort = () => {\n\t\t\t\t\treject({\n\t\t\t\t\t\ttype: 'abort',\n\t\t\t\t\t\tmessage: 'request abort'\n\t\t\t\t\t});\n\t\t\t\t\tthis.handleAbort({\n\t\t\t\t\t\tmessage: 'request abort'\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tthis.xhr.ontimeout = () => {\n\t\t\t\t\tthis.tryHttpRequest()\n\t\t\t\t\t.then(resolve)\n\t\t\t\t\t.catch(reject);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tthis.xhr.onerror = async (event) => {\n\t\t\t\t\tawait this.tryHttpRequest()\n\t\t\t\t\t\t.then(resolve)\n\t\t\t\t\t\t.catch(reject);\n\t\t\t\t\treject({\n\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\tmessage: 'request error',\n\t\t\t\t\t\tevent\n\t\t\t\t\t});\n\t\t\t\t\tthis.handleError({\n\t\t\t\t\t\tmessage: 'request error',\n\t\t\t\t\t\tevent\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tthis.xhr.onreadystatechange = () => {\n\t\t\t\t\tif (this.xhr?.readyState !== XMLHttpRequest.DONE) return;\n\t\t\t\t\t\n\t\t\t\t\tconst result = (!this.requestParams.withoutResponse && this.isJsonString(this.xhr.responseText)) ? this.jsonParse(this.xhr.responseText) : {};\n\t\t\t\t\t\n\t\t\t\t\tif (this.xhr?.status >= 200 && this.xhr.status <= 299) {\n\t\t\t\t\t\tif (this.params.cache) {\n\t\t\t\t\t\t\tthis.setCache(this.cacheIndex, result, (typeof this.params.cache === 'boolean' ? undefined : this.params.cache));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t\tthis.handleSuccess(result);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif (this.xhr.status >= 100 && this.xhr.status <= 500) {\n\t\t\t\t\t\t\treject(result);\n\t\t\t\t\t\t\tthis.handleFail(result);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.handleComplete(result);\n\t\t\t\t\tthis.queue.clear(this.queueName);\n\t\t\t\t}\n\t\t\t\tthis.xhr.send(this.requestParams.body);\n\t\t\t}catch(e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tprivate streamRequest() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tfetch(this.url, {\n\t\t\t\tmethod: this.method,\n\t\t\t\theaders: this.headers,\n\t\t\t\tbody: this.requestParams.body,\n\t\t\t}).then((response) => {\n\t\t\t\tthis.handleSuccess(response);\n\t\t\t\tresolve(response);\n\t\t\t}).catch((e) => {\n\t\t\t\tthis.handleFail(e);\n\t\t\t\treject(e)\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic request(force?: boolean): this {\n\t\t\n\t\tif (!force && !this.params.forceRequest && (this.currentCache || this.queue.push(this.queueName))) return this;\n\t\tthis._promise = new Promise(async (resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tlet result;\n\t\t\t\tif (this.params.stream) {\n\t\t\t\t\tresult = await this.streamRequest() as DATA;\n\t\t\t\t}else if (this.params.file) {\n\t\t\t\t\tresult = await this.fileRequest() as DATA;\n\t\t\t\t}else{\n\t\t\t\t\tresult = await this.httpRequest() as DATA;\n\t\t\t\t}\n\t\t\t\tresolve(result);\n\t\t\t}catch(e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn this\n\t}\n\n\tpublic abort() {\n\t\tthis.xhr?.abort();\n\t}\n\n\tpublic addListener<EVENT extends keyof TListenerEvents, DATA extends TListenerEvents[EVENT]>(event: EVENT, callback: (data: DATA) => void): EventListener {\n\t\treturn this.currentEvents.addListener(event, callback);\n\t}\n\n\tpublic updateCache(data: TData, fieldKey: string | null = 'id'): void {\n\t\tconst cache = this.getCacheByIndex(this.cacheIndex);\n\t\tif (cache && cache.group) {\n\t\t\tthis.updateCacheGroup(cache.group, data, fieldKey);\n\t\t}\n\t}\n\n\tpublic clearCache(data?: TData, fieldKey: string | null = 'id'): void {\n\t\tif (data) {\n\t\t\tconst cache = this.getCacheByIndex(this.cacheIndex);\n\t\t\tif (cache && cache.group) {\n\t\t\t\tthis.clearCacheGroup(cache.group, data, fieldKey);\n\t\t\t}\n\t\t}else{\n\t\t\tthis.deleteCache(this.cacheIndex);\n\t\t}\n\t}\n}\n\nexport default Http;","import Http from \"./Http\";\nimport type { TResponseData } from \"./types\";\n\ntype TQueue = {\n\t[index: string]: Http;\n};\n\nclass Queue<D extends TResponseData = TResponseData> {\n\tprivate static _Queue: TQueue = {};\n\tprivate queue = Queue._Queue;\n\t\thttp: Http<D>;\n\n\tconstructor(http: Http<D>) {\n\t\tthis.http = http;\n\t\tthis.has = this.has.bind(this);\n\t\tthis.get = this.get.bind(this);\n\t\tthis.clear = this.clear.bind(this);\n\t\tthis.push = this.push.bind(this);\n\t}\n\n\tpublic has(request: string) {\n\t\treturn request in this.queue;\n\t}\n\n\tpublic get(request: string) {\n\t\treturn this.has(request) ? this.queue[request] : undefined;\n\t}\n\n\tpublic clear(request: string) {\n\t\tif (this.has(request)) {\n\t\t\tdelete this.queue[request];\n\t\t}\n\t}\n\n\tpublic push(request: string): boolean {\n\t\tconst refInstance = this.get(request);\n\t\tif (!refInstance) {\n\t\t\t(this.queue[request] as any) = this.http;\n\t\t}else{\n\t\t\trefInstance?.addListener('api-request-success', this.http.handleSuccess);\n\t\t\trefInstance?.addListener('api-request-error', this.http.handleError);\n\t\t\trefInstance?.addListener('api-request-fail', this.http.handleFail);\n\t\t\trefInstance?.addListener('api-request-complete', this.http.handleComplete);\n\t\t\trefInstance?.addListener('api-request-abort', this.http.handleAbort);\n\t\t}\n\t\treturn refInstance instanceof Http;\n\t}\n}\n\nexport default Queue;","import Core from \"./Core\";\nimport type {\n\tTUser,\n\tTConfig,\n\tTMethod,\n\tTParams,\n\tTResponseData,\n\tTListenerEvents,\n\tTData\n} from \"./types\";\nimport type {\n\tEventListener\n} from \"easy-event-emitter\";\nimport Http from \"./Http\";\n\n\n/** Laravel API Client */\nclass API<D extends TResponseData = TResponseData, U extends TUser = TUser, S extends D['success'] = D['success']> extends Core {\n\tprivate static instance = new API({\n\t\thost: ''\n\t});\n\tprivate _user: U;\n\tprivate token?: string;\n\tprivate csrfToken?: string;\n\n\tconstructor(config: TConfig) {\n\t\tsuper();\n\t\tthis.headers = {\n\t\t\t'Accept': 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...config.headers\n\t\t};\n\t\tthis.setConfig(config);\n\t\tthis._user = {} as U;\n\n\t\tthis.setToken = this.setToken.bind(this);\n\t\tthis.setCSRFToken = this.setCSRFToken.bind(this);\n\t\tthis.setLogin = this.setLogin.bind(this);\n\t\tthis.setUser = this.setUser.bind(this);\n\t\tthis.updateUser = this.updateUser.bind(this);\n\t\tthis.logout = this.logout.bind(this);\n\t\tthis.getToken = this.getToken.bind(this);\n\t\tthis.getCSRFToken = this.getCSRFToken.bind(this);\n\t\tthis.http = this.http.bind(this);\n\t\tthis.get = this.get.bind(this);\n\t\tthis.head = this.head.bind(this);\n\t\tthis.post = this.post.bind(this);\n\t\tthis.put = this.put.bind(this);\n\t\tthis.patch = this.patch.bind(this);\n\t\tthis.delete = this.delete.bind(this);\n\t\tthis.options = this.options.bind(this);\n\t\tthis.connect = this.connect.bind(this);\n\t\tthis.trace = this.trace.bind(this);\n\t\tthis.getUid = this.getUid.bind(this);\n\t\tthis.getUser = this.getUser.bind(this);\n\t\tthis.addListener = this.addListener.bind(this);\n\t\tthis.getConfig = this.getConfig.bind(this);\n\t}\n\n\tpublic http<DATA extends S[PATH]['?'], PATH extends keyof S = keyof S>(method: TMethod, params: TParams<PATH, DATA>) {\n\t\tconst http = new Http<D, PATH, DATA>(method, params, this);\n\t\tif (this.token) http.setHeader('Authorization', `Bearer ${this.token}`);\n\t\tif (this.csrfToken) http.setHeader('X-CSRF-TOKEN', this.csrfToken);\n\t\treturn http;\n\t}\n\n\tpublic get<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA, 'GET'>) {\n\t\treturn this.http<DATA, PATH>('GET', params).request();\n\t}\n\n\tpublic head<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>) {\n\t\treturn this.http<DATA, PATH>('HEAD', params).request();\n\t}\n\n\tpublic post<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>) {\n\t\treturn this.http<DATA, PATH>('POST', params).request();\n\t}\n\n\tpublic put<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>) {\n\t\treturn this.http<DATA, PATH>('PUT', params).request();\n\t}\n\n\tpublic patch<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>) {\n\t\treturn this.http<DATA, PATH>('PATCH', params).request();\n\t}\n\n\tpublic delete<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>) {\n\t\treturn this.http<DATA, PATH>('DELETE', params).request();\n\t}\n\n\tpublic options<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>) {\n\t\treturn this.http<DATA, PATH>('OPTIONS', params).request();\n\t}\n\n\tpublic connect<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>) {\n\t\treturn this.http<DATA, PATH>('CONNECT', params).request();\n\t}\n\n\tpublic trace<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>) {\n\t\treturn this.http<DATA, PATH>('TRACE', params).request();\n\t}\n\n\tpublic addListener<EVENT extends keyof TListenerEvents, DATA extends TListenerEvents[EVENT]>(event: EVENT, callback: (data: DATA) => void): EventListener {\n\t\treturn this.events.addListener(event, callback);\n\t}\n\n\tpublic setToken(token: string) {\n\t\tthis.token = token;\n\t\tthis.events.emit('token-update', token);\n\t}\n\n\tpublic setCSRFToken(csrfToken: string) {\n\t\tthis.csrfToken = csrfToken;\n\t\tthis.events.emit('csrf-token-update', csrfToken);\n\t}\n\n\tpublic getConfig() {\n\t\treturn this.config;\n\t}\n\n\tpublic getToken() {\n\t\treturn this.token;\n\t}\n\n\tpublic getCSRFToken() {\n\t\treturn this.csrfToken;\n\t}\n\n\tpublic getUid(): number {\n\t\treturn (typeof this._user === 'object' && 'id' in this._user) ? Number(this._user.id) : 0;\n\t}\n\n\tpublic getUser(): U {\n\t\treturn this._user;\n\t}\n\n\tpublic get uid(): number {\n\t\treturn this.getUid();\n\t}\n\n\tpublic get user(): U {\n\t\treturn this.getUser();\n\t}\n\n\tpublic get host() {\n\t\treturn this.config.host;\n\t}\n\n\tpublic setLogin(user: U, token: string = '') {\n\t\tthis.setUser(user);\n\t\tthis.setToken(token);\n\t\tthis.events.emit('login', {\n\t\t\tuser,\n\t\t\ttoken\n\t\t});\n\t}\n\n\tpublic setUser(user: U) {\n\t\tthis._user = user;\n\t\tthis.events.emit('user-set', user);\n\t}\n\n\tpublic updateUser(user: U) {\n\t\tconst updatedUser = {...this.user, ...user};\n\t\tthis.setUser(updatedUser);\n\t\tthis.events.emit('user-update', updatedUser);\n\t}\n\n\tpublic async logout() {\n\t\tconst user = this.user;\n\t\tthis.setUser({} as U);\n\t\tthis.setToken('');\n\t\tthis.events.emit('logout', user);\n\t}\n\n\tpublic static http = this.instance.http;\n\tpublic static get = this.instance.get;\n\tpublic static head = this.instance.head;\n\tpublic static post = this.instance.post;\n\tpublic static put = this.instance.put;\n\tpublic static patch = this.instance.patch;\n\tpublic static delete = this.instance.delete;\n\tpublic static options = this.instance.options;\n\tpublic static connect = this.instance.connect;\n\tpublic static trace = this.instance.trace;\n\tpublic static setConfig = this.instance.setConfig;\n\tpublic static setHost = this.instance.setHost;\n\tpublic static setUser = this.instance.setUser;\n\tpublic static updateUser = this.instance.updateUser;\n\tpublic static logout = this.instance.logout;\n\tpublic static setToken = this.instance.setToken;\n\tpublic static setLogin = this.instance.setLogin;\n\tpublic static addListener = this.instance.addListener;\n\tpublic static setInitData = this.instance.setInitData;\n\tpublic static setCSRFToken = this.instance.setCSRFToken;\n\tpublic static getCSRFToken = this.instance.getCSRFToken;\n\tpublic static triggerByCacheGroup = this.instance.triggerByCacheGroup;\n\tpublic static clearCacheGroup = this.instance.clearCacheGroup;\n\tpublic static updateCacheGroup = this.instance.updateCacheGroup;\n\tpublic static getToken = this.instance.getToken;\n\tpublic static getUid = this.instance.getUid;\n\tpublic static getUser = this.instance.getUser;\n\tpublic static user = this.instance.user;\n\tpublic static uid = this.instance.uid;\n\n\t/**\n\t * @deprecated The method should not be used\n\t */\n\tpublic static deleteCacheGroup = this.instance.clearCacheGroup;\n}\n\n(globalThis as any).apiSetInitData = API.setInitData;\nexport type {\n\tEventListener,\n\tTResponseData\n};\nexport default API;"],"mappings":"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","names":["obj","EventEmitter","EventEmitter","_a","data"]}
|
package/package.json
CHANGED
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "larapi",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.46",
|
|
4
4
|
"description": "API client for laravel",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
"
|
|
10
|
-
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
11
15
|
"scripts": {
|
|
12
16
|
"test": "jest",
|
|
13
|
-
"build": "
|
|
17
|
+
"build": "tsup",
|
|
14
18
|
"prepublishOnly": "npm test && npm run build"
|
|
15
19
|
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist"
|
|
22
|
+
],
|
|
16
23
|
"jest": {
|
|
17
24
|
"transform": {
|
|
18
25
|
"^.+\\.ts?$": "ts-jest",
|
|
@@ -44,8 +51,8 @@
|
|
|
44
51
|
"ts-jest": "^29.1.1",
|
|
45
52
|
"ts-loader": "^9.5.0",
|
|
46
53
|
"ts-node": "^10.9.2",
|
|
47
|
-
"
|
|
48
|
-
"
|
|
54
|
+
"tsup": "^8.5.1",
|
|
55
|
+
"typescript": "^5.1.6"
|
|
49
56
|
},
|
|
50
57
|
"peerDependencies": {
|
|
51
58
|
"easy-event-emitter": "^1.2.2",
|
package/lib/Core.d.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import EventEmitter from 'easy-event-emitter';
|
|
2
|
-
import type { TConfig, TCacheBody, TData, TGroupsData, TRequestHeaders } from './types';
|
|
3
|
-
declare abstract class Core {
|
|
4
|
-
private cache;
|
|
5
|
-
initData: TGroupsData;
|
|
6
|
-
protected readonly events: EventEmitter;
|
|
7
|
-
protected config: TConfig;
|
|
8
|
-
protected headers: TRequestHeaders;
|
|
9
|
-
constructor(context?: Core);
|
|
10
|
-
protected setConfig(config: TConfig): void;
|
|
11
|
-
protected getConfig(): TConfig;
|
|
12
|
-
protected getCache(key: string): TData | undefined;
|
|
13
|
-
protected isJsonString(str: string): boolean;
|
|
14
|
-
private compileRevivers;
|
|
15
|
-
private applyObjectRevivers;
|
|
16
|
-
dataPrepare(data: unknown): any;
|
|
17
|
-
jsonParse(str: string): any;
|
|
18
|
-
setHost(host: string): void;
|
|
19
|
-
setHeader(name: string, value: string): void;
|
|
20
|
-
getHeader(name: string): string;
|
|
21
|
-
getHeaders(): {
|
|
22
|
-
name: string;
|
|
23
|
-
value: string;
|
|
24
|
-
}[];
|
|
25
|
-
hasHeader(name: string): boolean;
|
|
26
|
-
deleteHeader(name: string): void;
|
|
27
|
-
protected setCache(key: string, data: TData, group?: string): void;
|
|
28
|
-
protected groupFromArray<T = string>(groups: T | T[], callback: (group: T, params?: string[]) => void, withoutSplit?: boolean): void;
|
|
29
|
-
triggerByCacheGroup(groups: string | string[]): void;
|
|
30
|
-
clearCacheGroup(groups: string | string[], data?: TData, fieldKey?: string | null): void;
|
|
31
|
-
private setDataTree;
|
|
32
|
-
updateCacheGroup(groups: string | string[], data: TData, fieldKey?: string | null): void;
|
|
33
|
-
appendCacheGroup(group: string, data: TData): void;
|
|
34
|
-
protected getCacheByIndex(index: string): TCacheBody;
|
|
35
|
-
protected deleteCache(key: string): void;
|
|
36
|
-
setGlobalInitData(name: string, data: TGroupsData): void;
|
|
37
|
-
setInitData(data: TGroupsData): void;
|
|
38
|
-
}
|
|
39
|
-
export default Core;
|
package/lib/Http.d.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import Core from "./Core";
|
|
2
|
-
import { EventListener } from "easy-event-emitter";
|
|
3
|
-
import type { TMethod, TParams, TData, TListenerEvents, TRequestProgress, TResponseData } from "./types";
|
|
4
|
-
declare class Http<D extends TResponseData = TResponseData, PATH = any, DATA = any> extends Core {
|
|
5
|
-
private cacheIndex;
|
|
6
|
-
private currentCache?;
|
|
7
|
-
private currentEvents;
|
|
8
|
-
private requestParams;
|
|
9
|
-
private method;
|
|
10
|
-
private params;
|
|
11
|
-
private path;
|
|
12
|
-
private queue;
|
|
13
|
-
private queueName;
|
|
14
|
-
private _promise;
|
|
15
|
-
private xhr?;
|
|
16
|
-
private tryRequestCount;
|
|
17
|
-
private tryRequestTimeout?;
|
|
18
|
-
constructor(method: TMethod, params: TParams<PATH, DATA>, context?: Core);
|
|
19
|
-
private initRequest;
|
|
20
|
-
private initCache;
|
|
21
|
-
get host(): string | undefined;
|
|
22
|
-
get promise(): Promise<DATA>;
|
|
23
|
-
get url(): string;
|
|
24
|
-
private initQueue;
|
|
25
|
-
private setEmit;
|
|
26
|
-
handleSuccess(data: any): void;
|
|
27
|
-
handleAbort(data: any): void;
|
|
28
|
-
handleFail(data: any): void;
|
|
29
|
-
handleError(data: any): void;
|
|
30
|
-
handleComplete(data: any): void;
|
|
31
|
-
handleProgress(progress: TRequestProgress): void;
|
|
32
|
-
private encodeUrlParams;
|
|
33
|
-
private cuteUndifinedParams;
|
|
34
|
-
private tryHttpRequest;
|
|
35
|
-
private fileRequest;
|
|
36
|
-
private httpRequest;
|
|
37
|
-
private streamRequest;
|
|
38
|
-
request(force?: boolean): this;
|
|
39
|
-
abort(): void;
|
|
40
|
-
addListener<EVENT extends keyof TListenerEvents, DATA extends TListenerEvents[EVENT]>(event: EVENT, callback: (data: DATA) => void): EventListener;
|
|
41
|
-
updateCache(data: TData, fieldKey?: string | null): void;
|
|
42
|
-
clearCache(data?: TData, fieldKey?: string | null): void;
|
|
43
|
-
}
|
|
44
|
-
export default Http;
|
package/lib/Queue.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import Http from "./Http";
|
|
2
|
-
import type { TResponseData } from "./types";
|
|
3
|
-
declare class Queue<D extends TResponseData = TResponseData> {
|
|
4
|
-
private static _Queue;
|
|
5
|
-
private queue;
|
|
6
|
-
http: Http<D>;
|
|
7
|
-
constructor(http: Http<D>);
|
|
8
|
-
has(request: string): boolean;
|
|
9
|
-
get(request: string): Http<TResponseData, any, any> | undefined;
|
|
10
|
-
clear(request: string): void;
|
|
11
|
-
push(request: string): boolean;
|
|
12
|
-
}
|
|
13
|
-
export default Queue;
|
package/lib/index.d.ts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import Core from "./Core";
|
|
2
|
-
import type { TUser, TConfig, TMethod, TParams, TResponseData, TListenerEvents, TData } from "./types";
|
|
3
|
-
import type { EventListener } from "easy-event-emitter";
|
|
4
|
-
import Http from "./Http";
|
|
5
|
-
/** Laravel API Client */
|
|
6
|
-
declare class API<D extends TResponseData = TResponseData, U extends TUser = TUser, S extends D['success'] = D['success']> extends Core {
|
|
7
|
-
private static instance;
|
|
8
|
-
private _user;
|
|
9
|
-
private token?;
|
|
10
|
-
private csrfToken?;
|
|
11
|
-
constructor(config: TConfig);
|
|
12
|
-
http<DATA extends S[PATH]['?'], PATH extends keyof S = keyof S>(method: TMethod, params: TParams<PATH, DATA>): Http<D, PATH, DATA>;
|
|
13
|
-
get<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA, 'GET'>): Http<D, PATH, DATA>;
|
|
14
|
-
head<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>): Http<D, PATH, DATA>;
|
|
15
|
-
post<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>): Http<D, PATH, DATA>;
|
|
16
|
-
put<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>): Http<D, PATH, DATA>;
|
|
17
|
-
patch<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>): Http<D, PATH, DATA>;
|
|
18
|
-
delete<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>): Http<D, PATH, DATA>;
|
|
19
|
-
options<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>): Http<D, PATH, DATA>;
|
|
20
|
-
connect<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>): Http<D, PATH, DATA>;
|
|
21
|
-
trace<DATA extends S[PATH]['?'] = any, PATH extends keyof S = keyof S>(params: TParams<PATH, DATA>): Http<D, PATH, DATA>;
|
|
22
|
-
addListener<EVENT extends keyof TListenerEvents, DATA extends TListenerEvents[EVENT]>(event: EVENT, callback: (data: DATA) => void): EventListener;
|
|
23
|
-
setToken(token: string): void;
|
|
24
|
-
setCSRFToken(csrfToken: string): void;
|
|
25
|
-
getConfig(): TConfig;
|
|
26
|
-
getToken(): string | undefined;
|
|
27
|
-
getCSRFToken(): string | undefined;
|
|
28
|
-
getUid(): number;
|
|
29
|
-
getUser(): U;
|
|
30
|
-
get uid(): number;
|
|
31
|
-
get user(): U;
|
|
32
|
-
get host(): string;
|
|
33
|
-
setLogin(user: U, token?: string): void;
|
|
34
|
-
setUser(user: U): void;
|
|
35
|
-
updateUser(user: U): void;
|
|
36
|
-
logout(): Promise<void>;
|
|
37
|
-
static http: <DATA extends any, PATH extends string = string>(method: TMethod, params: TParams<PATH, DATA>) => Http<TResponseData, PATH, DATA>;
|
|
38
|
-
static get: <DATA extends any = any, PATH extends string = string>(params: TParams<PATH, DATA, "GET">) => Http<TResponseData, PATH, DATA>;
|
|
39
|
-
static head: <DATA extends any = any, PATH extends string = string>(params: TParams<PATH, DATA>) => Http<TResponseData, PATH, DATA>;
|
|
40
|
-
static post: <DATA extends any = any, PATH extends string = string>(params: TParams<PATH, DATA>) => Http<TResponseData, PATH, DATA>;
|
|
41
|
-
static put: <DATA extends any = any, PATH extends string = string>(params: TParams<PATH, DATA>) => Http<TResponseData, PATH, DATA>;
|
|
42
|
-
static patch: <DATA extends any = any, PATH extends string = string>(params: TParams<PATH, DATA>) => Http<TResponseData, PATH, DATA>;
|
|
43
|
-
static delete: <DATA extends any = any, PATH extends string = string>(params: TParams<PATH, DATA>) => Http<TResponseData, PATH, DATA>;
|
|
44
|
-
static options: <DATA extends any = any, PATH extends string = string>(params: TParams<PATH, DATA>) => Http<TResponseData, PATH, DATA>;
|
|
45
|
-
static connect: <DATA extends any = any, PATH extends string = string>(params: TParams<PATH, DATA>) => Http<TResponseData, PATH, DATA>;
|
|
46
|
-
static trace: <DATA extends any = any, PATH extends string = string>(params: TParams<PATH, DATA>) => Http<TResponseData, PATH, DATA>;
|
|
47
|
-
static setConfig: (config: TConfig) => void;
|
|
48
|
-
static setHost: (host: string) => void;
|
|
49
|
-
static setUser: (user: TUser) => void;
|
|
50
|
-
static updateUser: (user: TUser) => void;
|
|
51
|
-
static logout: () => Promise<void>;
|
|
52
|
-
static setToken: (token: string) => void;
|
|
53
|
-
static setLogin: (user: TUser, token?: string) => void;
|
|
54
|
-
static addListener: <EVENT extends keyof TListenerEvents, DATA extends TListenerEvents[EVENT]>(event: EVENT, callback: (data: DATA) => void) => EventListener;
|
|
55
|
-
static setInitData: (data: import("./types").TGroupsData) => void;
|
|
56
|
-
static setCSRFToken: (csrfToken: string) => void;
|
|
57
|
-
static getCSRFToken: () => string | undefined;
|
|
58
|
-
static triggerByCacheGroup: (groups: string | string[]) => void;
|
|
59
|
-
static clearCacheGroup: (groups: string | string[], data?: TData | undefined, fieldKey?: string | null) => void;
|
|
60
|
-
static updateCacheGroup: (groups: string | string[], data: TData, fieldKey?: string | null) => void;
|
|
61
|
-
static getToken: () => string | undefined;
|
|
62
|
-
static getUid: () => number;
|
|
63
|
-
static getUser: () => TUser;
|
|
64
|
-
static user: TUser;
|
|
65
|
-
static uid: number;
|
|
66
|
-
/**
|
|
67
|
-
* @deprecated The method should not be used
|
|
68
|
-
*/
|
|
69
|
-
static deleteCacheGroup: (groups: string | string[], data?: TData | undefined, fieldKey?: string | null) => void;
|
|
70
|
-
}
|
|
71
|
-
export type { EventListener, TResponseData };
|
|
72
|
-
export default API;
|
package/lib/types.d.ts
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
export type TCacheBody = {
|
|
2
|
-
data: any;
|
|
3
|
-
group?: string;
|
|
4
|
-
time: number;
|
|
5
|
-
};
|
|
6
|
-
export type TUser = {
|
|
7
|
-
id: number;
|
|
8
|
-
[index: string]: any;
|
|
9
|
-
};
|
|
10
|
-
export type TCache = {
|
|
11
|
-
[index: string]: TCacheBody;
|
|
12
|
-
};
|
|
13
|
-
export type TError = {
|
|
14
|
-
message?: string;
|
|
15
|
-
};
|
|
16
|
-
export type TData = Record<string, any>;
|
|
17
|
-
export type TGroupsData = {
|
|
18
|
-
[index: string]: TData;
|
|
19
|
-
};
|
|
20
|
-
export type TRequestHeaders = Record<string, string>;
|
|
21
|
-
export type TMethod = 'GET' | 'HEAD' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'CONNECT' | 'TRACE';
|
|
22
|
-
export type TCacheControll = string | {
|
|
23
|
-
group: string;
|
|
24
|
-
fieldKey: string;
|
|
25
|
-
};
|
|
26
|
-
export type TRequestProgress = {
|
|
27
|
-
percent: number;
|
|
28
|
-
total: number;
|
|
29
|
-
loaded: number;
|
|
30
|
-
};
|
|
31
|
-
export type TCoreRviverObject = {
|
|
32
|
-
and?: {
|
|
33
|
-
[index: string]: string[];
|
|
34
|
-
};
|
|
35
|
-
or?: {
|
|
36
|
-
[index: string]: string[];
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
export type TConfigDataReviver = {
|
|
40
|
-
[index: string]: (value: any) => any;
|
|
41
|
-
};
|
|
42
|
-
export type FieldRevivers = Record<string, (v: any) => any>;
|
|
43
|
-
export type ObjectReviverRule = {
|
|
44
|
-
keys: Set<string>;
|
|
45
|
-
fn: (obj: any) => any;
|
|
46
|
-
};
|
|
47
|
-
export type TConfig = {
|
|
48
|
-
host: string;
|
|
49
|
-
reviver?: (this: any, key: string, value: any) => any;
|
|
50
|
-
tryRequest?: number;
|
|
51
|
-
tryRequestDelay?: number;
|
|
52
|
-
dataReviver?: TConfigDataReviver;
|
|
53
|
-
headers?: TRequestHeaders;
|
|
54
|
-
clearUndifinedData?: boolean;
|
|
55
|
-
timeout?: number;
|
|
56
|
-
globalDataWithoutDataPrepare?: boolean;
|
|
57
|
-
};
|
|
58
|
-
export type TResponseData = {
|
|
59
|
-
success: TData;
|
|
60
|
-
error?: TError;
|
|
61
|
-
fail?: TError;
|
|
62
|
-
};
|
|
63
|
-
export type TInferRequest<D> = D extends (...args: infer A) => any ? (A extends [infer R, ...any[]] ? R : any) : any;
|
|
64
|
-
export type TInferResponse<D> = D extends (...args: any[]) => infer R ? R : D;
|
|
65
|
-
export type TParams<P = string | keyof TResponseData['success'], D = TResponseData['success']['?'], M extends TMethod = TMethod, E extends TError = TError, F extends TError = TError> = Partial<TConfig> & {
|
|
66
|
-
path: P;
|
|
67
|
-
data?: TInferRequest<D>;
|
|
68
|
-
/**
|
|
69
|
-
* FileReader file object.
|
|
70
|
-
* If present, the file will be sent in chunks.
|
|
71
|
-
*/
|
|
72
|
-
file?: ArrayBuffer;
|
|
73
|
-
/**
|
|
74
|
-
* When uploading a file, get the ID from the server.
|
|
75
|
-
* You can pass `true` — then the variable will be named `file_id`,
|
|
76
|
-
* or pass a string like `id_file`, `filename`, etc.
|
|
77
|
-
*/
|
|
78
|
-
fileIdByServer?: boolean | string;
|
|
79
|
-
fileSizeChunk?: number;
|
|
80
|
-
fileType?: 'binary' | 'multipart';
|
|
81
|
-
/**
|
|
82
|
-
* default true
|
|
83
|
-
*/
|
|
84
|
-
requestAsync?: boolean;
|
|
85
|
-
/**
|
|
86
|
-
* Receive data as a stream.
|
|
87
|
-
* On success, the response will contain the object `body?.getReader()`.
|
|
88
|
-
*/
|
|
89
|
-
stream?: boolean;
|
|
90
|
-
body?: XMLHttpRequestBodyInit;
|
|
91
|
-
/**
|
|
92
|
-
* Enable data caching.
|
|
93
|
-
* You can pass `true`, or a string key to work with the cache later.
|
|
94
|
-
*/
|
|
95
|
-
cache?: string | boolean;
|
|
96
|
-
cacheUpdate?: TCacheControll | TCacheControll[];
|
|
97
|
-
cacheClear?: TCacheControll | TCacheControll[];
|
|
98
|
-
forceRequest?: boolean;
|
|
99
|
-
globalName?: string;
|
|
100
|
-
queueThrottling?: boolean;
|
|
101
|
-
success?: (data: TInferResponse<D>, xhr: XMLHttpRequest) => void;
|
|
102
|
-
error?: (error: E) => void;
|
|
103
|
-
fail?: (fail: F) => void;
|
|
104
|
-
complete?: (complete: any) => void;
|
|
105
|
-
progress?: (progress: TRequestProgress) => void;
|
|
106
|
-
abort?: (error: E) => void;
|
|
107
|
-
};
|
|
108
|
-
export type TRequestParams = {
|
|
109
|
-
method: TMethod;
|
|
110
|
-
headers?: TRequestHeaders;
|
|
111
|
-
body?: XMLHttpRequestBodyInit;
|
|
112
|
-
withoutResponse?: boolean;
|
|
113
|
-
};
|
|
114
|
-
export type TListenerEvents = {
|
|
115
|
-
'api-request-success': any;
|
|
116
|
-
'api-request-abort': any;
|
|
117
|
-
'api-request-fail': any;
|
|
118
|
-
'api-request-error': any;
|
|
119
|
-
'api-request-complete': any;
|
|
120
|
-
'api-request-progress': any;
|
|
121
|
-
'login': {
|
|
122
|
-
user: any;
|
|
123
|
-
token: string;
|
|
124
|
-
};
|
|
125
|
-
'logout': any;
|
|
126
|
-
'user-set': any;
|
|
127
|
-
'user-update': any;
|
|
128
|
-
'token-update': string;
|
|
129
|
-
'csrf-token-update': string;
|
|
130
|
-
};
|