mappersmith
Version:
It is a lightweight rest client for node.js and the browser
1 lines • 8.84 kB
Source Map (JSON)
{"version":3,"sources":["../../src/manifest.ts"],"sourcesContent":["import { MethodDescriptor, MethodDescriptorParams } from './method-descriptor'\nimport { assign } from './utils/index'\nimport type { ParameterEncoderFn } from './types'\nimport type { GatewayConfiguration } from './gateway/types'\nimport type { Gateway } from './gateway/index'\nimport { Context, Middleware, MiddlewareDescriptor, MiddlewareParams } from './middleware/index'\n\nexport interface GlobalConfigs {\n context: Context\n middleware: Middleware[]\n Promise: PromiseConstructor | null\n fetch: typeof fetch | null\n gateway: typeof Gateway | null\n gatewayConfigs: GatewayConfiguration\n maxMiddlewareStackExecutionAllowed: number\n}\n\nexport type ResourceTypeConstraint = {\n [resourceName: string]: {\n [methodName: string]: Omit<MethodDescriptorParams, 'host'> & { host?: string }\n }\n}\n\nexport interface ManifestOptions<Resources extends ResourceTypeConstraint> {\n allowResourceHostOverride?: boolean\n authAttr?: string\n bodyAttr?: string\n clientId?: string\n gatewayConfigs?: Partial<GatewayConfiguration>\n headersAttr?: string\n host: string\n hostAttr?: string\n middleware?: Middleware[]\n parameterEncoder?: ParameterEncoderFn\n resources?: Resources\n signalAttr?: string\n timeoutAttr?: string\n /**\n * @deprecated - use `middleware` instead\n */\n middlewares?: Middleware[]\n ignoreGlobalMiddleware?: boolean\n}\n\nexport type Method = { name: string; descriptor: MethodDescriptor }\ntype EachResourceCallbackFn = (name: string, methods: Method[]) => void\ntype EachMethodCallbackFn = (name: string) => Method\ntype CreateMiddlewareParams = Partial<Omit<MiddlewareParams, 'resourceName' | 'resourceMethod'>> &\n Pick<MiddlewareParams, 'resourceName' | 'resourceMethod'>\n/**\n * @typedef Manifest\n * @param {Object} obj\n * @param {Object} obj.gatewayConfigs - default: base values from mappersmith\n * @param {Object} obj.ignoreGlobalMiddleware - default: false\n * @param {Object} obj.resources - default: {}\n * @param {Array} obj.middleware or obj.middlewares - default: []\n * @param {Object} globalConfigs\n */\nexport class Manifest<Resources extends ResourceTypeConstraint> {\n public allowResourceHostOverride: boolean\n public authAttr?: string\n public bodyAttr?: string\n public clientId: string | null\n public context: Context\n public gatewayConfigs: GatewayConfiguration\n public headersAttr?: string\n public host: string\n public hostAttr?: string\n public middleware: Middleware[]\n public parameterEncoder: ParameterEncoderFn\n public resources: Resources\n public signalAttr?: string\n public timeoutAttr?: string\n\n constructor(\n options: ManifestOptions<Resources>,\n { gatewayConfigs, middleware = [], context = {} }: GlobalConfigs\n ) {\n this.allowResourceHostOverride = options.allowResourceHostOverride || false\n this.authAttr = options.authAttr\n this.bodyAttr = options.bodyAttr\n this.clientId = options.clientId || null\n this.context = context\n this.gatewayConfigs = assign({}, gatewayConfigs, options.gatewayConfigs)\n this.headersAttr = options.headersAttr\n this.host = options.host\n this.hostAttr = options.hostAttr\n this.parameterEncoder = options.parameterEncoder || encodeURIComponent\n this.resources = options.resources || ({} as Resources)\n this.signalAttr = options.signalAttr\n this.timeoutAttr = options.timeoutAttr\n\n // TODO: deprecate obj.middlewares in favor of obj.middleware\n const clientMiddleware = options.middleware || options.middlewares || []\n\n if (options.ignoreGlobalMiddleware) {\n this.middleware = clientMiddleware\n } else {\n this.middleware = [...clientMiddleware, ...middleware]\n }\n }\n\n public eachResource(callback: EachResourceCallbackFn) {\n Object.keys(this.resources).forEach((resourceName) => {\n const methods = this.eachMethod(resourceName, (methodName) => ({\n name: methodName,\n descriptor: this.createMethodDescriptor(resourceName, methodName),\n }))\n\n callback(resourceName, methods)\n })\n }\n\n private eachMethod(resourceName: string, callback: EachMethodCallbackFn) {\n return Object.keys(this.resources[resourceName]).map(callback)\n }\n\n public createMethodDescriptor(resourceName: string, methodName: string) {\n const definition = this.resources[resourceName][methodName]\n if (!definition || !['string', 'function'].includes(typeof definition.path)) {\n throw new Error(\n `[Mappersmith] path is undefined for resource \"${resourceName}\" method \"${methodName}\"`\n )\n }\n return new MethodDescriptor(\n assign(\n {\n host: this.host,\n allowResourceHostOverride: this.allowResourceHostOverride,\n parameterEncoder: this.parameterEncoder,\n bodyAttr: this.bodyAttr,\n headersAttr: this.headersAttr,\n authAttr: this.authAttr,\n timeoutAttr: this.timeoutAttr,\n hostAttr: this.hostAttr,\n signalAttr: this.signalAttr,\n },\n definition\n )\n )\n }\n\n /**\n * @param {Object} args\n * @param {String|Null} args.clientId\n * @param {String} args.resourceName\n * @param {String} args.resourceMethod\n * @param {Object} args.context\n * @param {Boolean} args.mockRequest\n *\n * @return {Array<Object>}\n */\n public createMiddleware(args: CreateMiddlewareParams) {\n const createInstance = (middlewareFactory: Middleware) => {\n const defaultDescriptor: MiddlewareDescriptor = {\n __name: middlewareFactory.name || middlewareFactory.toString(),\n response(next) {\n return next()\n },\n /**\n * @since 2.27.0\n * Replaced the request method\n */\n prepareRequest(next) {\n return this.request ? next().then((req) => this.request?.(req)) : next()\n },\n }\n\n const middlewareParams = assign(args, {\n clientId: this.clientId,\n context: assign({}, this.context),\n })\n\n return assign(defaultDescriptor, middlewareFactory(middlewareParams))\n }\n\n const { resourceName: name, resourceMethod: method } = args\n const resourceMiddleware = this.createMethodDescriptor(name, method).middleware\n const middlewares = [...resourceMiddleware, ...this.middleware]\n\n return middlewares.map(createInstance)\n }\n}\n\nexport default Manifest\n"],"mappings":"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","names":[]}