@composite-fetcher/core
Advanced tools
Comparing version 0.1.4 to 0.1.5
@@ -13,2 +13,3 @@ // src/interfaces/index.ts | ||
modifiedRequest; | ||
processingContext = /* @__PURE__ */ new Map(); | ||
modifiedResponse; | ||
@@ -36,54 +37,39 @@ processedHooks = /* @__PURE__ */ new Map(); | ||
} | ||
processPlugins(requestId, hook, context, resolve) { | ||
let index = 0; | ||
const isPreRequestContext = this.isPreRequestContext(context); | ||
const isPostRequestContext = this.isPostRequestContext(context); | ||
const next = async () => { | ||
if (index >= this.plugins.length) { | ||
if (isPreRequestContext) { | ||
resolve(context.request); | ||
} else if (isPostRequestContext) { | ||
resolve(context.response); | ||
} | ||
return; | ||
} | ||
async processPlugins(requestId, hook, context, resolve) { | ||
for (let index = 0; index < this.plugins.length; index++) { | ||
const plugin = this.plugins[index]; | ||
if (this.hasBeenProcessed(requestId, plugin, hook)) { | ||
index++; | ||
next(); | ||
return; | ||
continue; | ||
} | ||
index++; | ||
this.processedHooks.get(requestId)[hook].add(plugin); | ||
const timeout = setTimeout(() => { | ||
console.error(`Plugin timed out: ${plugin.constructor.name}`); | ||
context.next(); | ||
}, plugin.pluginTimeout || 3e3); | ||
const method = isPreRequestContext ? "onPreRequest" : "onPostRequest"; | ||
context.next = () => { | ||
clearTimeout(timeout); | ||
next(); | ||
}; | ||
const result = await plugin[method]?.(context).catch((error) => { | ||
const method = this.isPreRequestContext(context) ? "onPreRequest" : "onPostRequest"; | ||
try { | ||
const result = await plugin[method]?.(context); | ||
if (result instanceof Response) { | ||
resolve(result); | ||
return; | ||
} | ||
if (this.isPreRequestContext(context)) { | ||
context.request = this.processingContext.get(requestId).request; | ||
} else if (this.isPostRequestContext(context)) { | ||
context.response = this.processingContext.get(requestId).response; | ||
} | ||
} catch (error) { | ||
console.error(`Error in plugin: ${error}`); | ||
clearTimeout(timeout); | ||
context.next(); | ||
}); | ||
if (result instanceof Response) { | ||
clearTimeout(timeout); | ||
resolve(result); | ||
return; | ||
continue; | ||
} | ||
context.next(); | ||
}; | ||
next(); | ||
} | ||
if (this.isPreRequestContext(context)) { | ||
resolve(context.request); | ||
} else if (this.isPostRequestContext(context)) { | ||
resolve(context.response); | ||
} | ||
} | ||
runPreRequestHooks(requestId, request) { | ||
return new Promise((resolve) => { | ||
this.modifiedRequest = request.clone(); | ||
const modifiedRequest = request.clone(); | ||
this.processingContext.set(requestId, { request: modifiedRequest }); | ||
const context = { | ||
request: this.modifiedRequest, | ||
request: modifiedRequest, | ||
originalRequest: request, | ||
next: () => { | ||
}, | ||
pluginManager: this | ||
@@ -101,8 +87,10 @@ }; | ||
return new Promise((resolve) => { | ||
this.modifiedResponse = response.clone(); | ||
const modifiedResponse = response.clone(); | ||
if (!this.processingContext.has(requestId)) { | ||
this.processingContext.set(requestId, {}); | ||
} | ||
this.processingContext.get(requestId).response = modifiedResponse; | ||
const context = { | ||
response: this.modifiedResponse, | ||
response: modifiedResponse, | ||
originalRequest, | ||
next: () => { | ||
}, | ||
pluginManager: this | ||
@@ -118,7 +106,7 @@ }; | ||
} | ||
getModifiedRequest() { | ||
return this.modifiedRequest; | ||
getModifiedRequest(requestId) { | ||
return this.processingContext.get(requestId)?.request; | ||
} | ||
getModifiedResponse() { | ||
return this.modifiedResponse; | ||
getModifiedResponse(requestId) { | ||
return this.processingContext.get(requestId)?.response; | ||
} | ||
@@ -171,8 +159,5 @@ getPlugins() { | ||
var BasePlugin = class { | ||
pluginTimeout = 3e3; | ||
async onPreRequest(context) { | ||
context.next(); | ||
} | ||
async onPostRequest(context) { | ||
context.next(); | ||
} | ||
@@ -179,0 +164,0 @@ }; |
@@ -5,2 +5,3 @@ declare class PluginManager { | ||
private modifiedRequest; | ||
private processingContext; | ||
private modifiedResponse; | ||
@@ -15,4 +16,4 @@ private processedHooks; | ||
runPostRequestHooks(requestId: number, response: Response, originalRequest: Request): Promise<Response>; | ||
getModifiedRequest(): Request; | ||
getModifiedResponse(): Response; | ||
getModifiedRequest(requestId: number): Request; | ||
getModifiedResponse(requestId: number): Response; | ||
getPlugins(): Plugin[]; | ||
@@ -30,3 +31,2 @@ generateNewRequestId(): number; | ||
originalRequest: Request; | ||
next: () => void; | ||
pluginManager: PluginManager; | ||
@@ -37,3 +37,2 @@ }; | ||
originalRequest: Request; | ||
next: () => void; | ||
pluginManager: PluginManager; | ||
@@ -43,3 +42,2 @@ }; | ||
interface Plugin { | ||
pluginTimeout?: number; | ||
onPreRequest?: (context: PluginHandlerContext<PluginLifecycleHook.PRE_REQUEST>) => Promise<void | Response>; | ||
@@ -56,3 +54,2 @@ onPostRequest?: (context: PluginHandlerContext<PluginLifecycleHook.POST_REQUEST>) => Promise<void | Response>; | ||
declare abstract class BasePlugin implements Plugin { | ||
pluginTimeout?: number; | ||
onPreRequest(context: PluginHandlerContext<PluginLifecycleHook.PRE_REQUEST>): Promise<void | Response>; | ||
@@ -59,0 +56,0 @@ onPostRequest(context: PluginHandlerContext<PluginLifecycleHook.POST_REQUEST>): Promise<void | Response>; |
@@ -13,2 +13,3 @@ // src/interfaces/index.ts | ||
modifiedRequest; | ||
processingContext = /* @__PURE__ */ new Map(); | ||
modifiedResponse; | ||
@@ -36,54 +37,39 @@ processedHooks = /* @__PURE__ */ new Map(); | ||
} | ||
processPlugins(requestId, hook, context, resolve) { | ||
let index = 0; | ||
const isPreRequestContext = this.isPreRequestContext(context); | ||
const isPostRequestContext = this.isPostRequestContext(context); | ||
const next = async () => { | ||
if (index >= this.plugins.length) { | ||
if (isPreRequestContext) { | ||
resolve(context.request); | ||
} else if (isPostRequestContext) { | ||
resolve(context.response); | ||
} | ||
return; | ||
} | ||
async processPlugins(requestId, hook, context, resolve) { | ||
for (let index = 0; index < this.plugins.length; index++) { | ||
const plugin = this.plugins[index]; | ||
if (this.hasBeenProcessed(requestId, plugin, hook)) { | ||
index++; | ||
next(); | ||
return; | ||
continue; | ||
} | ||
index++; | ||
this.processedHooks.get(requestId)[hook].add(plugin); | ||
const timeout = setTimeout(() => { | ||
console.error(`Plugin timed out: ${plugin.constructor.name}`); | ||
context.next(); | ||
}, plugin.pluginTimeout || 3e3); | ||
const method = isPreRequestContext ? "onPreRequest" : "onPostRequest"; | ||
context.next = () => { | ||
clearTimeout(timeout); | ||
next(); | ||
}; | ||
const result = await plugin[method]?.(context).catch((error) => { | ||
const method = this.isPreRequestContext(context) ? "onPreRequest" : "onPostRequest"; | ||
try { | ||
const result = await plugin[method]?.(context); | ||
if (result instanceof Response) { | ||
resolve(result); | ||
return; | ||
} | ||
if (this.isPreRequestContext(context)) { | ||
context.request = this.processingContext.get(requestId).request; | ||
} else if (this.isPostRequestContext(context)) { | ||
context.response = this.processingContext.get(requestId).response; | ||
} | ||
} catch (error) { | ||
console.error(`Error in plugin: ${error}`); | ||
clearTimeout(timeout); | ||
context.next(); | ||
}); | ||
if (result instanceof Response) { | ||
clearTimeout(timeout); | ||
resolve(result); | ||
return; | ||
continue; | ||
} | ||
context.next(); | ||
}; | ||
next(); | ||
} | ||
if (this.isPreRequestContext(context)) { | ||
resolve(context.request); | ||
} else if (this.isPostRequestContext(context)) { | ||
resolve(context.response); | ||
} | ||
} | ||
runPreRequestHooks(requestId, request) { | ||
return new Promise((resolve) => { | ||
this.modifiedRequest = request.clone(); | ||
const modifiedRequest = request.clone(); | ||
this.processingContext.set(requestId, { request: modifiedRequest }); | ||
const context = { | ||
request: this.modifiedRequest, | ||
request: modifiedRequest, | ||
originalRequest: request, | ||
next: () => { | ||
}, | ||
pluginManager: this | ||
@@ -101,8 +87,10 @@ }; | ||
return new Promise((resolve) => { | ||
this.modifiedResponse = response.clone(); | ||
const modifiedResponse = response.clone(); | ||
if (!this.processingContext.has(requestId)) { | ||
this.processingContext.set(requestId, {}); | ||
} | ||
this.processingContext.get(requestId).response = modifiedResponse; | ||
const context = { | ||
response: this.modifiedResponse, | ||
response: modifiedResponse, | ||
originalRequest, | ||
next: () => { | ||
}, | ||
pluginManager: this | ||
@@ -118,7 +106,7 @@ }; | ||
} | ||
getModifiedRequest() { | ||
return this.modifiedRequest; | ||
getModifiedRequest(requestId) { | ||
return this.processingContext.get(requestId)?.request; | ||
} | ||
getModifiedResponse() { | ||
return this.modifiedResponse; | ||
getModifiedResponse(requestId) { | ||
return this.processingContext.get(requestId)?.response; | ||
} | ||
@@ -171,8 +159,5 @@ getPlugins() { | ||
var BasePlugin = class { | ||
pluginTimeout = 3e3; | ||
async onPreRequest(context) { | ||
context.next(); | ||
} | ||
async onPostRequest(context) { | ||
context.next(); | ||
} | ||
@@ -179,0 +164,0 @@ }; |
{ | ||
"name": "@composite-fetcher/core", | ||
"description": "Fetcher core", | ||
"version": "0.1.4", | ||
"version": "0.1.5", | ||
"author": "Teofanis Papadopulos", | ||
@@ -33,2 +33,3 @@ "type": "module", | ||
"dependencies": { | ||
"encoding": "^0.1.13", | ||
"isomorphic-fetch": "^3.0.0" | ||
@@ -35,0 +36,0 @@ }, |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
23495
2
569
+ Addedencoding@^0.1.13
+ Addedencoding@0.1.13(transitive)
+ Addediconv-lite@0.6.3(transitive)
+ Addedsafer-buffer@2.1.2(transitive)