UNPKG

@rxap/open-api

Version:

This package provides tools for working with OpenAPI specifications in Angular applications. It includes services for configuring and loading OpenAPI definitions, validating requests and responses against schemas, and handling errors. It also offers utili

1 lines 21.8 kB
{"version":3,"file":"rxap-open-api-remote-method.mjs","sources":["../../../../../packages/angular/open-api/remote-method/src/lib/error.ts","../../../../../packages/angular/open-api/remote-method/src/lib/get-page-adapter.factory.ts","../../../../../packages/angular/open-api/remote-method/src/lib/open-api.remote-method.ts","../../../../../packages/angular/open-api/remote-method/src/lib/open-api-remote-method.loader.ts","../../../../../packages/angular/open-api/remote-method/src/index.ts","../../../../../packages/angular/open-api/remote-method/src/rxap-open-api-remote-method.ts"],"sourcesContent":["import { RxapOpenApiError } from '@rxap/open-api';\n\nexport class RxapOpenApiRemoteMethodError extends RxapOpenApiError {\n\n constructor(message: string, code?: string, scope?: string) {\n super(message, code, scope);\n this.addSubPackageName('remote-method');\n }\n\n}\n","import { BaseRemoteMethod } from '@rxap/remote-method';\nimport { TableEvent } from '@rxap/data-source/table';\nimport { coerceString } from '@rxap/utilities';\nimport type { OpenApiRemoteMethod } from './open-api.remote-method';\nimport { PaginatorLike } from '@rxap/data-source/pagination';\n\nexport interface GetPageRemoteMethodParameters {\n pageIndex: number;\n pageSize: number;\n sortBy?: string;\n sortDirection?: 'desc' | 'asc' | undefined | '' | string;\n filter: string[];\n}\n\nexport interface GetPageResponse<Data extends Record<string, any>> {\n total: number;\n rows: Data[];\n [key: string]: any;\n}\n\nexport interface GetPageAdapterDefaultOptions {\n sortBy?: string;\n sortDirection?: 'asc' | 'desc' | string;\n}\n\nexport class GetPageAdapterRemoteMethod<Data extends Record<string, any>>\n extends BaseRemoteMethod<Data[], TableEvent> {\n\n constructor(\n private readonly remoteMethod: OpenApiRemoteMethod<GetPageResponse<Data>, GetPageRemoteMethodParameters>,\n private readonly paginator?: PaginatorLike,\n private readonly options?: GetPageAdapterDefaultOptions,\n ) {\n super(null, remoteMethod.metadata);\n }\n\n public static BuildFilter(filterEvent?: string | Record<string, any> | null): string[] {\n const filter: string[] = [];\n if (filterEvent && typeof filterEvent !== 'string') {\n for (const [ key, value ] of Object.entries(filterEvent)) {\n if (value !== null && value !== undefined && `${ value }` !== '') {\n const valueString = coerceString(value);\n if (valueString) {\n filter.push([ key, valueString ].join('|'));\n }\n }\n }\n }\n return filter;\n }\n\n protected async _call(event: TableEvent): Promise<Data[]> {\n const parameters: GetPageRemoteMethodParameters = {\n pageIndex: event.page?.pageIndex ?? 0,\n pageSize: event.page?.pageSize ?? 10,\n sortBy: event.sort?.active ?? this.options?.sortBy ?? undefined,\n // use the || operator to set the default sort direction if the sort direction is undefined or an empty string\n sortDirection: event.sort?.direction ?? this.options?.sortDirection ?? undefined,\n filter: GetPageAdapterRemoteMethod.BuildFilter(event.filter),\n ...(event.parameters ?? {}),\n };\n const response = await this.remoteMethod.call({ parameters });\n\n if (event.setTotalLength) {\n event.setTotalLength(response.total);\n }\n\n if (this.paginator) {\n this.paginator.length = response.total;\n }\n\n return response.rows;\n }\n\n}\n\nexport function GetPageAdapterFactory(remoteMethod: OpenApiRemoteMethod, paginator?: PaginatorLike) {\n return new GetPageAdapterRemoteMethod(remoteMethod, paginator);\n}\n\nexport function GetPageAdapterFactoryWithOptions(options: GetPageAdapterDefaultOptions = {}) {\n return (remoteMethod: OpenApiRemoteMethod, paginator?: PaginatorLike) => {\n return new GetPageAdapterRemoteMethod(remoteMethod, paginator, options);\n };\n}\n","import { HttpClient, HttpErrorResponse, HttpEventType, HttpResponse } from '@angular/common/http';\nimport {\n Inject,\n Injectable,\n Injector,\n isDevMode,\n Optional,\n} from '@angular/core';\nimport { Mixin } from '@rxap/mixin';\nimport {\n DEFAULT_OPEN_API_REMOTE_METHOD_META_DATA,\n DISABLE_SCHEMA_VALIDATION,\n DISABLE_VALIDATION,\n OpenApiConfigService,\n OpenApiHttpResponseError,\n OpenApiMetaData,\n OperationObjectWithMetadata,\n RXAP_OPEN_API_STRICT_VALIDATOR,\n SchemaValidationMixin,\n} from '@rxap/open-api';\nimport { RxapRemoteMethod } from '@rxap/remote-method';\nimport { BaseHttpRemoteMethod } from '@rxap/remote-method/http';\nimport { firstValueFrom } from 'rxjs';\nimport {\n filter,\n retry,\n take,\n tap,\n timeout,\n} from 'rxjs/operators';\n\nexport interface OperationForMetadata {\n operation: OperationObjectWithMetadata;\n /**\n * used to specify the target server for the reset api operation\n */\n serverId?: string;\n /**\n * the fallback id used if the operation does not have a operationId\n */\n fallbackId?: string;\n}\n\nexport interface OperationFromMetadataInline {\n operationId: string;\n operation: string;\n /**\n * used to specify the target server for the reset api operation\n */\n serverId?: string;\n}\n\nexport function IsOperationFromMetadataInline(metadata: OperationForMetadata | OperationFromMetadataInline): metadata is OperationFromMetadataInline {\n return typeof metadata.operation === 'string';\n}\n\nexport function RxapOpenApiRemoteMethod(\n operationOrId: string | OperationForMetadata | OperationFromMetadataInline,\n serverIndex = 0,\n) {\n return function (target: any) {\n const id = typeof operationOrId === 'string' ?\n operationOrId :\n (IsOperationFromMetadataInline(operationOrId) ?\n operationOrId.operationId :\n operationOrId.operation.operationId ?? operationOrId.fallbackId);\n if (!id) {\n throw new Error('The operationId for the open api remote method is not defined');\n }\n const metadata: OpenApiRemoteMethodMetadata = {\n id,\n serverIndex,\n };\n if (typeof operationOrId !== 'string') {\n metadata.operation = operationOrId.operation;\n metadata.serverId = operationOrId.serverId;\n }\n RxapRemoteMethod(metadata)(target);\n };\n}\n\nexport type OpenApiRemoteMethodMetadata = OpenApiMetaData\n\nexport interface OpenApiRemoteMethodParameter<Parameters extends Record<string, any> | void = any, RequestBody = any> {\n parameters?: Parameters,\n requestBody?: RequestBody\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface OpenApiRemoteMethod<Response = any, Parameters extends Record<string, any> | void = any, RequestBody = any>\n extends SchemaValidationMixin<Response, Parameters, RequestBody> {\n}\n\n@Mixin(SchemaValidationMixin)\n@Injectable()\nexport class OpenApiRemoteMethod<Response = any, Parameters extends Record<string, any> | void = any, RequestBody = any>\n extends BaseHttpRemoteMethod<Response, any, OpenApiRemoteMethodParameter<Parameters, RequestBody>> {\n\n protected readonly disableSchemaValidation: boolean = false;\n protected readonly disableValidation: boolean = false;\n private readonly strict: boolean = false;\n\n constructor(\n @Inject(HttpClient) http: HttpClient,\n @Inject(Injector) injector: Injector,\n @Inject(OpenApiConfigService) openApiConfigService: OpenApiConfigService,\n @Optional()\n @Inject(DEFAULT_OPEN_API_REMOTE_METHOD_META_DATA)\n metadata: OpenApiRemoteMethodMetadata | null = null,\n @Optional()\n @Inject(RXAP_OPEN_API_STRICT_VALIDATOR)\n strict: boolean | null = null,\n @Optional()\n @Inject(DISABLE_SCHEMA_VALIDATION)\n disableSchemaValidation: boolean | null = null,\n @Optional()\n @Inject(DISABLE_VALIDATION)\n disableValidation: boolean | null = null,\n ) {\n super(http, injector, metadata);\n this.metadata['operation'] ??= openApiConfigService.getOperation(this.metadata.id);\n if (typeof this.metadata['operation'] === 'string') {\n try {\n this.metadata['operation'] = JSON.parse(this.metadata['operation']);\n } catch (e: any) {\n throw new Error(`could not parse the remote method operation string into an object: ${ this.constructor.name }`);\n }\n }\n const operation: OperationObjectWithMetadata & { serverId?: string } = this.metadata['operation'];\n this.applyMetadata({\n id: operation.operationId,\n url: () => openApiConfigService.getBaseUrl(this.metadata['serverIndex'], this.metadata['serverId']) +\n operation.path,\n method: operation.method as any,\n withCredentials: this.metadata.withCredentials ?? true,\n ignoreUndefined: this.metadata['ignoreUndefined'] ?? true,\n });\n this.strict = strict || this.metadata['strict'] || false;\n this.disableSchemaValidation = disableSchemaValidation || this.metadata['disableSchemaValidation'] || false;\n this.disableValidation = disableValidation || this.metadata['disableValidation'] || false;\n }\n\n public get operation(): OperationObjectWithMetadata {\n return this.metadata['operation'];\n }\n\n /**\n * Instead of returning the response body the full response object is returned\n */\n public async callWithResponse(args: OpenApiRemoteMethodParameter<Parameters, RequestBody> = {}): Promise<HttpResponse<Response>> {\n this.init();\n this.executionsInProgress$.increase();\n const result = await this._callWithResponse(args);\n this.executionsInProgress$.decrease();\n if (result.body) {\n this.executed$.next(result.body);\n this.executed(result.body);\n }\n return result;\n }\n\n // TODO : update to the new call method concept (the remove of the _call method concept)\n public _callWithResponse(args: OpenApiRemoteMethodParameter<Parameters, RequestBody> = {}): Promise<HttpResponse<Response>> {\n\n if (!this.disableValidation) {\n this.validateParameters(this.operation, args.parameters, this.strict);\n this.validateRequestBody(this.operation, args.requestBody, this.strict);\n }\n\n return firstValueFrom(this.http.request<Response>(this.updateRequest(this.buildHttpOptions(\n this.operation,\n args.parameters,\n args.requestBody,\n this.metadata['ignoreUndefined'],\n ))).pipe(\n retry(this.metadata.retry ?? 0),\n tap({\n error: (error) => {\n if (error instanceof HttpErrorResponse) {\n this.interceptors?.forEach(interceptor => interceptor\n .next({\n response: error,\n parameters: args.parameters,\n requestBody: args.requestBody,\n }),\n );\n }\n },\n }),\n filter((event: any) => event.type === HttpEventType.Response),\n tap((response: HttpResponse<Response>) => {\n if (!this.disableValidation) {\n this.validateResponse(this.operation, response, this.strict);\n }\n }),\n tap((response: HttpResponse<Response>) => {\n this.interceptors?.forEach(interceptor => interceptor\n .next({\n response,\n parameters: args.parameters,\n requestBody: args.requestBody,\n }),\n );\n }),\n take(1),\n timeout(this.timeout),\n ));\n\n }\n\n protected async _call(args: OpenApiRemoteMethodParameter<Parameters, RequestBody> = {}): Promise<Response> {\n\n if (!this.disableValidation) {\n this.validateParameters(this.operation, args.parameters, this.strict);\n this.validateRequestBody(this.operation, args.requestBody, this.strict);\n }\n\n let response: HttpResponse<Response>;\n\n try {\n response = await this._callWithResponse(args);\n } catch (error: any) {\n if (error instanceof HttpErrorResponse) {\n throw new OpenApiHttpResponseError(\n error,\n this.metadata,\n );\n } else {\n throw error;\n }\n }\n\n if (response.body) {\n return response.body;\n }\n\n if (isDevMode()) {\n console.warn('The response body is empty!');\n }\n return null as any;\n }\n\n}\n","import {\n Inject,\n Injectable,\n Injector,\n} from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { OpenApiRemoteMethod } from './open-api.remote-method';\nimport { OpenApiConfigService } from '@rxap/open-api';\n\n@Injectable({ providedIn: 'root' })\nexport class OpenApiRemoteMethodLoader {\n\n constructor(\n @Inject(OpenApiConfigService) public readonly openApiConfig: OpenApiConfigService,\n @Inject(HttpClient) public readonly http: HttpClient,\n public readonly injector: Injector,\n ) {\n }\n\n public load(definitionId: string): OpenApiRemoteMethod | null {\n const operation = this.openApiConfig.getOperation(definitionId);\n\n if (operation) {\n\n return new OpenApiRemoteMethod(\n this.http,\n this.injector,\n this.openApiConfig,\n {\n id: definitionId,\n operation,\n },\n );\n\n }\n\n return null;\n\n }\n\n}\n","// region \nexport * from './lib/error';\nexport * from './lib/get-page-adapter.factory';\nexport * from './lib/open-api-remote-method.loader';\nexport * from './lib/open-api.remote-method';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}