@opra/core 0.14.0 → 0.16.0

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.
Files changed (105) hide show
  1. package/cjs/adapter/adapter.js +89 -293
  2. package/cjs/adapter/http/express-adapter.js +27 -0
  3. package/cjs/adapter/http/http-adapter.js +467 -0
  4. package/cjs/adapter/http/http-request-context.host.js +28 -0
  5. package/cjs/adapter/http/http-request.host.js +14 -0
  6. package/cjs/adapter/http/http-response.host.js +14 -0
  7. package/cjs/adapter/internal/metadata.resource.js +27 -0
  8. package/cjs/adapter/request-context.host.js +30 -0
  9. package/cjs/adapter/request.host.js +19 -0
  10. package/cjs/adapter/response.host.js +20 -0
  11. package/cjs/augmentation/resource.augmentation.js +26 -0
  12. package/cjs/index.js +7 -8
  13. package/esm/adapter/adapter.js +97 -297
  14. package/esm/adapter/http/express-adapter.js +27 -0
  15. package/esm/adapter/http/http-adapter.js +467 -0
  16. package/esm/adapter/http/http-request-context.host.js +28 -0
  17. package/esm/adapter/http/http-request.host.js +14 -0
  18. package/esm/adapter/http/http-response.host.js +14 -0
  19. package/esm/adapter/interfaces/request-context.interface.js +2 -0
  20. package/esm/adapter/interfaces/request.interface.js +2 -0
  21. package/esm/adapter/interfaces/response.interface.js +2 -0
  22. package/esm/adapter/internal/metadata.resource.js +27 -0
  23. package/esm/adapter/request-context.host.js +30 -0
  24. package/esm/adapter/request.host.js +19 -0
  25. package/esm/adapter/response.host.js +20 -0
  26. package/esm/augmentation/resource.augmentation.js +26 -0
  27. package/esm/index.js +13 -11
  28. package/esm/types.js +2 -1
  29. package/i18n/en/error.json +2 -2
  30. package/package.json +11 -8
  31. package/types/adapter/adapter.d.ts +63 -0
  32. package/types/adapter/http/express-adapter.d.ts +11 -0
  33. package/types/adapter/http/http-adapter.d.ts +37 -0
  34. package/types/adapter/http/http-request-context.host.d.ts +16 -0
  35. package/types/adapter/http/http-request.host.d.ts +7 -0
  36. package/types/adapter/http/http-response.host.d.ts +7 -0
  37. package/{esm → types/adapter}/interfaces/logger.interface.d.ts +1 -0
  38. package/types/adapter/interfaces/request-context.interface.d.ts +25 -0
  39. package/types/adapter/interfaces/request.interface.d.ts +13 -0
  40. package/types/adapter/interfaces/response.interface.d.ts +22 -0
  41. package/types/adapter/internal/metadata.resource.d.ts +7 -0
  42. package/types/adapter/request-context.host.d.ts +19 -0
  43. package/types/adapter/request.host.d.ts +26 -0
  44. package/types/adapter/response.host.d.ts +20 -0
  45. package/types/augmentation/resource.augmentation.d.ts +33 -0
  46. package/types/index.d.ts +10 -0
  47. package/cjs/adapter/classes/execution-context.host.js +0 -16
  48. package/cjs/adapter/classes/express-request-wrapper.host.js +0 -36
  49. package/cjs/adapter/classes/express-response-wrapper.host.js +0 -55
  50. package/cjs/adapter/classes/http-execution-context.host.js +0 -28
  51. package/cjs/adapter/classes/metadata.resource.js +0 -22
  52. package/cjs/adapter/express-adapter.js +0 -26
  53. package/cjs/adapter/http-adapter.js +0 -443
  54. package/cjs/adapter/request-contexts/batch-request-context.js +0 -11
  55. package/cjs/adapter/request-contexts/request-context.js +0 -25
  56. package/cjs/adapter/request-contexts/single-request-context.js +0 -14
  57. package/cjs/services/data-service.js +0 -9
  58. package/cjs/services/json-singleton-service.js +0 -96
  59. package/cjs/utils/create-i18n.js +0 -21
  60. package/cjs/utils/get-caller-file.util.js +0 -24
  61. package/esm/adapter/adapter.d.ts +0 -38
  62. package/esm/adapter/classes/execution-context.host.d.ts +0 -10
  63. package/esm/adapter/classes/execution-context.host.js +0 -12
  64. package/esm/adapter/classes/express-request-wrapper.host.d.ts +0 -19
  65. package/esm/adapter/classes/express-request-wrapper.host.js +0 -32
  66. package/esm/adapter/classes/express-response-wrapper.host.d.ts +0 -22
  67. package/esm/adapter/classes/express-response-wrapper.host.js +0 -51
  68. package/esm/adapter/classes/http-execution-context.host.d.ts +0 -13
  69. package/esm/adapter/classes/http-execution-context.host.js +0 -24
  70. package/esm/adapter/classes/metadata.resource.d.ts +0 -8
  71. package/esm/adapter/classes/metadata.resource.js +0 -19
  72. package/esm/adapter/express-adapter.d.ts +0 -11
  73. package/esm/adapter/express-adapter.js +0 -21
  74. package/esm/adapter/http-adapter.d.ts +0 -37
  75. package/esm/adapter/http-adapter.js +0 -439
  76. package/esm/adapter/request-contexts/batch-request-context.d.ts +0 -7
  77. package/esm/adapter/request-contexts/batch-request-context.js +0 -7
  78. package/esm/adapter/request-contexts/request-context.d.ts +0 -22
  79. package/esm/adapter/request-contexts/request-context.js +0 -21
  80. package/esm/adapter/request-contexts/single-request-context.d.ts +0 -10
  81. package/esm/adapter/request-contexts/single-request-context.js +0 -10
  82. package/esm/enums/issue-severity.enum.d.ts +0 -1
  83. package/esm/enums/issue-severity.enum.js +0 -1
  84. package/esm/index.d.ts +0 -11
  85. package/esm/interfaces/execution-context.interface.d.ts +0 -47
  86. package/esm/interfaces/execution-context.interface.js +0 -1
  87. package/esm/interfaces/i18n-options.interface.d.ts +0 -28
  88. package/esm/interfaces/i18n-options.interface.js +0 -1
  89. package/esm/interfaces/logger.interface.js +0 -1
  90. package/esm/interfaces/resource.interface.d.ts +0 -23
  91. package/esm/interfaces/resource.interface.js +0 -1
  92. package/esm/services/data-service.d.ts +0 -2
  93. package/esm/services/data-service.js +0 -5
  94. package/esm/services/json-singleton-service.d.ts +0 -39
  95. package/esm/services/json-singleton-service.js +0 -91
  96. package/esm/utils/create-i18n.d.ts +0 -3
  97. package/esm/utils/create-i18n.js +0 -16
  98. package/esm/utils/get-caller-file.util.d.ts +0 -1
  99. package/esm/utils/get-caller-file.util.js +0 -20
  100. /package/cjs/{interfaces → adapter/interfaces}/logger.interface.js +0 -0
  101. /package/cjs/{enums/issue-severity.enum.js → adapter/interfaces/request-context.interface.js} +0 -0
  102. /package/cjs/{interfaces/execution-context.interface.js → adapter/interfaces/request.interface.js} +0 -0
  103. /package/cjs/{interfaces/i18n-options.interface.js → adapter/interfaces/response.interface.js} +0 -0
  104. /package/{cjs/interfaces/resource.interface.js → esm/adapter/interfaces/logger.interface.js} +0 -0
  105. /package/{esm → types}/types.d.ts +0 -0
@@ -1,38 +0,0 @@
1
- import { Task } from 'power-tasks';
2
- import { CollectionGetQuery, CollectionResourceInfo, ComplexType, DataType, FieldGetQuery, I18n, OpraDocument, OpraException, ResourceInfo, ResponsiveMap, SingletonGetQuery, SingletonResourceInfo } from '@opra/common';
3
- import { IExecutionContext } from '../interfaces/execution-context.interface.js';
4
- import { I18nOptions } from '../interfaces/i18n-options.interface.js';
5
- import { ILogger } from '../interfaces/logger.interface.js';
6
- import { RequestContext } from './request-contexts/request-context.js';
7
- import { SingleRequestContext } from './request-contexts/single-request-context.js';
8
- export declare namespace OpraAdapter {
9
- type UserContextResolver = (executionContext: IExecutionContext) => object | Promise<object>;
10
- interface Options {
11
- i18n?: I18n | I18nOptions | (() => Promise<I18n>);
12
- userContext?: UserContextResolver;
13
- logger?: ILogger;
14
- }
15
- }
16
- export declare abstract class OpraAdapter<TExecutionContext extends IExecutionContext> {
17
- readonly document: OpraDocument;
18
- protected userContextResolver?: OpraAdapter.UserContextResolver;
19
- protected _internalResources: ResponsiveMap<string, ResourceInfo>;
20
- i18n: I18n;
21
- logger?: ILogger;
22
- constructor(document: OpraDocument);
23
- close(): Promise<void>;
24
- protected abstract parse(executionContext: TExecutionContext): Promise<RequestContext>;
25
- protected abstract sendResponse(executionContext: TExecutionContext, requestContext: RequestContext): Promise<void>;
26
- protected abstract sendError(executionContext: TExecutionContext, error: OpraException): Promise<void>;
27
- protected handler(executionContext: TExecutionContext): Promise<void>;
28
- protected _requestContextToTask(executionContext: TExecutionContext, requestContext: RequestContext): Task;
29
- protected _init(options?: OpraAdapter.Options): Promise<void>;
30
- protected _executeResourceQuery(document: OpraDocument, resource: ResourceInfo, context: SingleRequestContext): Promise<void>;
31
- protected _executeCollectionResource(document: OpraDocument, resource: CollectionResourceInfo, context: SingleRequestContext): Promise<any>;
32
- protected _executeSingletonResource(document: OpraDocument, resource: SingletonResourceInfo, context: SingleRequestContext): Promise<any>;
33
- protected _pathWalkThrough(query: CollectionGetQuery | SingletonGetQuery | FieldGetQuery, dataType: ComplexType, value: any, parentPath: string): Promise<{
34
- value?: any;
35
- dataType?: DataType;
36
- path: string;
37
- }>;
38
- }
@@ -1,10 +0,0 @@
1
- import { AsyncEventEmitter } from 'strict-typed-events';
2
- import { ContextType, IExecutionContext, IHttpExecutionContext } from '../../interfaces/execution-context.interface.js';
3
- export declare abstract class ExecutionContextHost extends AsyncEventEmitter implements IExecutionContext {
4
- userContext: any;
5
- protected constructor();
6
- abstract getType(): ContextType;
7
- abstract getPlatform(): string;
8
- switchToHttp(): IHttpExecutionContext;
9
- onFinish(fn: (...args: any[]) => (void | Promise<void>)): void;
10
- }
@@ -1,12 +0,0 @@
1
- import { AsyncEventEmitter } from 'strict-typed-events';
2
- export class ExecutionContextHost extends AsyncEventEmitter {
3
- constructor() {
4
- super();
5
- }
6
- switchToHttp() {
7
- throw new Error(`This is not an http context`);
8
- }
9
- onFinish(fn) {
10
- this.on('finish', fn);
11
- }
12
- }
@@ -1,19 +0,0 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import type { Request } from 'express';
4
- import type { IncomingHttpHeaders } from 'http';
5
- import { Readable } from 'stream';
6
- import type { IHttpRequestWrapper } from '../../interfaces/execution-context.interface.js';
7
- export declare class ExpressRequestWrapperHost implements IHttpRequestWrapper {
8
- readonly instance: Request;
9
- constructor(instance: Request);
10
- getInstance(): any;
11
- getMethod(): string;
12
- getUrl(): string;
13
- getHeaderNames(): string[];
14
- getHeader(name: string): string | string[] | undefined;
15
- getHeaders(): IncomingHttpHeaders;
16
- getBody(): any;
17
- isCompleted(): boolean;
18
- getStream(): Readable;
19
- }
@@ -1,32 +0,0 @@
1
- export class ExpressRequestWrapperHost {
2
- constructor(instance) {
3
- this.instance = instance;
4
- }
5
- getInstance() {
6
- return this.instance;
7
- }
8
- getMethod() {
9
- return this.instance.method;
10
- }
11
- getUrl() {
12
- return this.instance.url;
13
- }
14
- getHeaderNames() {
15
- return Object.keys(this.instance.headers);
16
- }
17
- getHeader(name) {
18
- return this.instance.get(name);
19
- }
20
- getHeaders() {
21
- return this.instance.headers;
22
- }
23
- getBody() {
24
- return this.instance.body;
25
- }
26
- isCompleted() {
27
- return this.instance.complete;
28
- }
29
- getStream() {
30
- return this.instance;
31
- }
32
- }
@@ -1,22 +0,0 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import { Response } from 'express';
4
- import { OutgoingHttpHeaders } from 'http';
5
- import { Writable } from 'stream';
6
- import { IHttpResponseWrapper } from '../../interfaces/execution-context.interface.js';
7
- export declare class ExpressResponseWrapperHost implements IHttpResponseWrapper {
8
- readonly instance: Response;
9
- constructor(instance: Response);
10
- getInstance(): any;
11
- getHeader(name: string): number | string | string[] | undefined;
12
- getHeaders(): OutgoingHttpHeaders;
13
- getHeaderNames(): string[];
14
- hasHeader(name: string): boolean;
15
- removeHeader(name: string): void;
16
- setHeader(name: string, value: number | string | string[]): this;
17
- getStatus(): number | undefined;
18
- setStatus(value: number): this;
19
- getStream(): Writable;
20
- send(body: any): this;
21
- end(): this;
22
- }
@@ -1,51 +0,0 @@
1
- export class ExpressResponseWrapperHost {
2
- constructor(instance) {
3
- this.instance = instance;
4
- }
5
- getInstance() {
6
- return this.instance;
7
- }
8
- getHeader(name) {
9
- return this.instance.get(name);
10
- }
11
- getHeaders() {
12
- return this.instance.getHeaders();
13
- }
14
- getHeaderNames() {
15
- return this.instance.getHeaderNames();
16
- }
17
- hasHeader(name) {
18
- return this.instance.hasHeader(name);
19
- }
20
- removeHeader(name) {
21
- return this.instance.removeHeader(name);
22
- }
23
- setHeader(name, value) {
24
- this.instance.setHeader(name, value);
25
- return this;
26
- }
27
- getStatus() {
28
- return this.instance.statusCode;
29
- }
30
- setStatus(value) {
31
- // noinspection SuspiciousTypeOfGuard
32
- this.instance.status(typeof value === 'number'
33
- ? value
34
- : parseInt(value, 10) || 500);
35
- return this;
36
- }
37
- getStream() {
38
- return this.instance;
39
- }
40
- send(body) {
41
- if (typeof body === 'string' || Buffer.isBuffer(body))
42
- this.instance.send(body);
43
- else
44
- this.instance.json(body);
45
- return this;
46
- }
47
- end() {
48
- this.instance.end();
49
- return this;
50
- }
51
- }
@@ -1,13 +0,0 @@
1
- import { ContextType, IHttpExecutionContext, IHttpRequestWrapper, IHttpResponseWrapper } from '../../interfaces/execution-context.interface.js';
2
- import { ExecutionContextHost } from './execution-context.host.js';
3
- export declare class HttpExecutionContextHost extends ExecutionContextHost implements IHttpExecutionContext {
4
- protected readonly _platform: string;
5
- protected readonly _request: IHttpRequestWrapper;
6
- protected readonly _response: IHttpResponseWrapper;
7
- constructor(_platform: string, _request: IHttpRequestWrapper, _response: IHttpResponseWrapper);
8
- getType(): ContextType;
9
- getPlatform(): string;
10
- getRequest(): IHttpRequestWrapper;
11
- getResponse(): IHttpResponseWrapper;
12
- switchToHttp(): IHttpExecutionContext;
13
- }
@@ -1,24 +0,0 @@
1
- import { ExecutionContextHost } from './execution-context.host.js';
2
- export class HttpExecutionContextHost extends ExecutionContextHost {
3
- constructor(_platform, _request, _response) {
4
- super();
5
- this._platform = _platform;
6
- this._request = _request;
7
- this._response = _response;
8
- }
9
- getType() {
10
- return 'http';
11
- }
12
- getPlatform() {
13
- return this._platform;
14
- }
15
- getRequest() {
16
- return this._request;
17
- }
18
- getResponse() {
19
- return this._response;
20
- }
21
- switchToHttp() {
22
- return this;
23
- }
24
- }
@@ -1,8 +0,0 @@
1
- import { SingletonResourceInfo } from '@opra/common';
2
- import { ISingletonResource } from '../../interfaces/resource.interface.js';
3
- import { JsonSingletonService } from '../../services/json-singleton-service.js';
4
- export declare class MetadataResource implements ISingletonResource<any> {
5
- service: JsonSingletonService<any>;
6
- init(resource: SingletonResourceInfo): void;
7
- get(): any;
8
- }
@@ -1,19 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { OprSingletonResource } from '@opra/common';
3
- import { JsonSingletonService } from '../../services/json-singleton-service.js';
4
- let MetadataResource = class MetadataResource {
5
- init(resource) {
6
- this.service = new JsonSingletonService(resource.dataType, {
7
- data: resource.document.getMetadata(true)
8
- });
9
- }
10
- get() {
11
- return this.service.get();
12
- }
13
- };
14
- MetadataResource = __decorate([
15
- OprSingletonResource(Object, {
16
- name: '$metadata'
17
- })
18
- ], MetadataResource);
19
- export { MetadataResource };
@@ -1,11 +0,0 @@
1
- import type { Application } from 'express';
2
- import { OpraDocument } from '@opra/common';
3
- import type { IHttpExecutionContext } from '../interfaces/execution-context.interface';
4
- import { OpraHttpAdapter } from './http-adapter.js';
5
- export declare namespace OpraExpressAdapter {
6
- interface Options extends OpraHttpAdapter.Options {
7
- }
8
- }
9
- export declare class OpraExpressAdapter extends OpraHttpAdapter<IHttpExecutionContext> {
10
- static init(app: Application, document: OpraDocument, options?: OpraExpressAdapter.Options): Promise<OpraExpressAdapter>;
11
- }
@@ -1,21 +0,0 @@
1
- import bodyParser from 'body-parser';
2
- import { normalizePath } from '@opra/common';
3
- import { ExpressRequestWrapperHost } from './classes/express-request-wrapper.host.js';
4
- import { ExpressResponseWrapperHost } from './classes/express-response-wrapper.host.js';
5
- import { HttpExecutionContextHost } from './classes/http-execution-context.host.js';
6
- import { OpraHttpAdapter } from './http-adapter.js';
7
- export class OpraExpressAdapter extends OpraHttpAdapter {
8
- static async init(app, document, options) {
9
- const adapter = new OpraExpressAdapter(document);
10
- await adapter._init(options);
11
- const prefix = '/' + normalizePath(options?.prefix, true);
12
- app.use(prefix, bodyParser.json());
13
- app.use(prefix, (request, response, next) => {
14
- (async () => {
15
- const executionContext = new HttpExecutionContextHost('express', new ExpressRequestWrapperHost(request), new ExpressResponseWrapperHost(response));
16
- await adapter.handler(executionContext);
17
- })().catch(e => next(e));
18
- });
19
- return adapter;
20
- }
21
- }
@@ -1,37 +0,0 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- /// <reference types="node" />
4
- import { IncomingHttpHeaders, OutgoingHttpHeaders } from 'http';
5
- import { Readable } from 'stream';
6
- import { OpraException, OpraQuery, OpraURL } from '@opra/common';
7
- import { IHttpExecutionContext } from '../interfaces/execution-context.interface.js';
8
- import { OpraAdapter } from './adapter.js';
9
- import { RequestContext } from './request-contexts/request-context.js';
10
- import { SingleRequestContext } from './request-contexts/single-request-context.js';
11
- export declare namespace OpraHttpAdapter {
12
- type Options = OpraAdapter.Options & {
13
- prefix?: string;
14
- };
15
- }
16
- interface PreparedOutput {
17
- status: number;
18
- headers: OutgoingHttpHeaders;
19
- body?: string | Readable | Buffer;
20
- }
21
- export declare class OpraHttpAdapter<TExecutionContext extends IHttpExecutionContext = IHttpExecutionContext> extends OpraAdapter<TExecutionContext> {
22
- parse(executionContext: TExecutionContext): Promise<RequestContext>;
23
- parseSingleQuery(args: {
24
- executionContext: IHttpExecutionContext;
25
- url: OpraURL;
26
- method: string;
27
- headers: IncomingHttpHeaders;
28
- body?: any;
29
- contentId?: string;
30
- }): SingleRequestContext;
31
- buildQuery(url: OpraURL, method: string, body?: any): OpraQuery | undefined;
32
- protected sendResponse(executionContext: TExecutionContext, requestContext: RequestContext): Promise<void>;
33
- protected sendSingleResponse(executionContext: TExecutionContext, requestContext: SingleRequestContext): Promise<void>;
34
- protected createOutput(ctx: SingleRequestContext): PreparedOutput;
35
- protected sendError(executionContext: TExecutionContext, error: OpraException): Promise<void>;
36
- }
37
- export {};