@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
package/esm/index.js CHANGED
@@ -1,11 +1,13 @@
1
- import "reflect-metadata";
2
- export * from './types.js';
3
- export * from './interfaces/execution-context.interface.js';
4
- export * from './interfaces/resource.interface.js';
5
- export * from './interfaces/i18n-options.interface.js';
6
- export * from './adapter/request-contexts/single-request-context.js';
7
- export * from './adapter/adapter.js';
8
- export * from './adapter/http-adapter.js';
9
- export * from './adapter/express-adapter.js';
10
- export * from './services/data-service.js';
11
- export * from './services/json-singleton-service.js';
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ require("reflect-metadata");
5
+ require("./augmentation/resource.augmentation.js");
6
+ tslib_1.__exportStar(require("./types.js"), exports);
7
+ tslib_1.__exportStar(require("./adapter/adapter.js"), exports);
8
+ tslib_1.__exportStar(require("./adapter/http/express-adapter.js"), exports);
9
+ tslib_1.__exportStar(require("./adapter/http/http-adapter.js"), exports);
10
+ tslib_1.__exportStar(require("./adapter/interfaces/request-context.interface.js"), exports);
11
+ tslib_1.__exportStar(require("./adapter/interfaces/logger.interface.js"), exports);
12
+ tslib_1.__exportStar(require("./adapter/interfaces/request.interface.js"), exports);
13
+ tslib_1.__exportStar(require("./adapter/interfaces/response.interface.js"), exports);
package/esm/types.js CHANGED
@@ -1 +1,2 @@
1
- export {};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -8,8 +8,8 @@
8
8
  "NOT_FOUND": "Not found",
9
9
  "UNAUTHORIZED": "You have not been authenticated to perform this action",
10
10
  "UNPROCESSABLE_ENTITY": "Unprocessable entity",
11
- "RESOURCE_NOT_FOUND": "The resource '{{resource}}' could not be found",
11
+ "RESOURCE_NOT_FOUND": "Resource not found: '{{resource}}'",
12
12
  "RESOURCE_CONFLICT": "There is already an other {{resource}} resource with same field values ({{fields}})",
13
- "RESOLVER_FORBIDDEN": "The resource endpoint does not accept '{{method}}' operations",
13
+ "RESOLVER_FORBIDDEN": "The resource endpoint does not accept '{{operation}}' operations",
14
14
  "UNACCEPTED_SORT_FIELD": "Field '{{field}}' is not available for sort operation"
15
15
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opra/core",
3
- "version": "0.14.0",
3
+ "version": "0.16.0",
4
4
  "description": "Opra schema package",
5
5
  "author": "Panates",
6
6
  "license": "MIT",
@@ -19,36 +19,38 @@
19
19
  "_copy_pkg_files": "cp README.md package.json ../../LICENSE ../../build/core && cp ../../package.cjs.json ../../build/core/cjs/package.json",
20
20
  "_copyi18n": "cp -R i18n ../../build/core/i18n",
21
21
  "lint": "eslint . --max-warnings=0",
22
- "test": "NODE_OPTIONS=--experimental-vm-modules npx jest",
23
- "cover": "NODE_OPTIONS=--experimental-vm-modules npx jest --collect-coverage",
22
+ "test": "jest",
23
+ "cover": "jest --collect-coverage",
24
24
  "clean": "npm run clean:src && npm run clean:dist && npm run clean:cover",
25
25
  "clean:src": "ts-cleanup -s src --all && ts-cleanup -s test --all",
26
26
  "clean:dist": "rimraf ../../build/core",
27
27
  "clean:cover": "rimraf ../../coverage/core"
28
28
  },
29
29
  "dependencies": {
30
- "@opra/common": "^0.14.0",
30
+ "@opra/common": "^0.16.0",
31
+ "content-type": "^1.0.5",
31
32
  "lodash.isnil": "^4.0.0",
32
33
  "lodash.omitby": "^4.6.0",
33
34
  "power-tasks": "^1.6.4",
34
35
  "putil-isplainobject": "^1.1.5",
35
- "putil-merge": "^3.10.1",
36
+ "putil-merge": "^3.10.3",
36
37
  "putil-varhelpers": "^1.6.5",
37
38
  "strict-typed-events": "^2.3.1"
38
39
  },
39
40
  "peerDependencies": {
40
- "body-parser": ">= 1.0.0",
41
+ "body-parser": "^1.20.2",
41
42
  "express": "^4.x.x || ^5.x.x"
42
43
  },
43
44
  "devDependencies": {
44
45
  "@faker-js/faker": "^7.6.0",
46
+ "@types/content-type": "^1.1.5",
45
47
  "@types/dicer": "^0.2.2",
46
- "@types/express": "^4.17.16",
48
+ "@types/express": "^4.17.17",
47
49
  "cors": "^2.8.5",
48
50
  "ts-gems": "^2.3.0"
49
51
  },
50
52
  "type": "module",
51
- "types": "esm/index.d.ts",
53
+ "types": "types/index.d.ts",
52
54
  "exports": {
53
55
  ".": {
54
56
  "require": "./cjs/index.js",
@@ -66,6 +68,7 @@
66
68
  "cjs/",
67
69
  "esm/",
68
70
  "i18n/",
71
+ "types/",
69
72
  "LICENSE",
70
73
  "README.md"
71
74
  ],
@@ -0,0 +1,63 @@
1
+ import { AsyncEventEmitter } from 'strict-typed-events';
2
+ import { ApiDocument, FallbackLng, I18n, LanguageResource } from '@opra/common';
3
+ import { ILogger } from './interfaces/logger.interface.js';
4
+ import { RequestContext } from './interfaces/request-context.interface.js';
5
+ /**
6
+ * @namespace OpraAdapter
7
+ */
8
+ export declare namespace OpraAdapter {
9
+ interface Options {
10
+ i18n?: I18n | I18nOptions | (() => Promise<I18n>);
11
+ logger?: ILogger;
12
+ onRequest?: (ctx: RequestContext) => void | Promise<void>;
13
+ }
14
+ interface I18nOptions {
15
+ /**
16
+ * Language to use
17
+ * @default undefined
18
+ */
19
+ lng?: string;
20
+ /**
21
+ * Language to use if translations in user language are not available.
22
+ * @default 'dev'
23
+ */
24
+ fallbackLng?: false | FallbackLng;
25
+ /**
26
+ * Default namespace used if not passed to translation function
27
+ * @default 'translation'
28
+ */
29
+ defaultNS?: string;
30
+ /**
31
+ * Resources to initialize with
32
+ * @default undefined
33
+ */
34
+ resources?: LanguageResource;
35
+ /**
36
+ * Resource directories to initialize with (if not using loading or not appending using addResourceBundle)
37
+ * @default undefined
38
+ */
39
+ resourceDirs?: string[];
40
+ }
41
+ }
42
+ /**
43
+ * @class OpraAdapter
44
+ */
45
+ export declare abstract class OpraAdapter extends AsyncEventEmitter {
46
+ readonly api: ApiDocument;
47
+ protected _internalDoc: ApiDocument;
48
+ i18n: I18n;
49
+ logger?: ILogger;
50
+ protected constructor(api: ApiDocument);
51
+ /**
52
+ * Initializes the adapter
53
+ * @param options
54
+ * @protected
55
+ */
56
+ protected init(options?: OpraAdapter.Options): Promise<void>;
57
+ /**
58
+ * Calls shutDown hook for all resources
59
+ */
60
+ close(): Promise<void>;
61
+ protected executeRequest(context: RequestContext): Promise<void>;
62
+ protected _createI18n(options?: OpraAdapter.I18nOptions): Promise<I18n>;
63
+ }
@@ -0,0 +1,11 @@
1
+ import type { Application } from 'express';
2
+ import { ApiDocument } from '@opra/common';
3
+ import { OpraHttpAdapter } from './http-adapter.js';
4
+ export declare namespace OpraExpressAdapter {
5
+ interface Options extends OpraHttpAdapter.Options {
6
+ }
7
+ }
8
+ export declare class OpraExpressAdapter extends OpraHttpAdapter {
9
+ protected platform: string;
10
+ static create(app: Application, document: ApiDocument, options?: OpraExpressAdapter.Options): Promise<OpraExpressAdapter>;
11
+ }
@@ -0,0 +1,37 @@
1
+ import { HttpRequestMessage, HttpResponseMessage } from '@opra/common';
2
+ import { OpraAdapter } from '../adapter.js';
3
+ import { ILogger } from '../interfaces/logger.interface.js';
4
+ import { Request } from '../interfaces/request.interface.js';
5
+ import { RequestContext } from '../interfaces/request-context.interface.js';
6
+ /**
7
+ * @namespace OpraHttpAdapter
8
+ */
9
+ export declare namespace OpraHttpAdapter {
10
+ type Options = OpraAdapter.Options & {
11
+ prefix?: string;
12
+ };
13
+ }
14
+ /**
15
+ *
16
+ * @class OpraHttpAdapter
17
+ */
18
+ export declare abstract class OpraHttpAdapter extends OpraAdapter {
19
+ protected abstract platform: string;
20
+ /**
21
+ * Main http request handler
22
+ * @param incoming
23
+ * @param outgoing
24
+ * @protected
25
+ */
26
+ protected handler(incoming: HttpRequestMessage, outgoing: HttpResponseMessage): Promise<void>;
27
+ protected errorHandler(incoming: HttpRequestMessage, outgoing: HttpResponseMessage, errors: any[]): Promise<void>;
28
+ protected log(logType: keyof ILogger, incoming: HttpRequestMessage, message: string, ...optionalParams: any[]): void;
29
+ protected executeRequest(context: RequestContext): Promise<void>;
30
+ /**
31
+ *
32
+ * @param incoming
33
+ * @protected
34
+ */
35
+ protected parseRequest(incoming: HttpRequestMessage): Promise<Request>;
36
+ protected sendResponse(context: RequestContext): Promise<void>;
37
+ }
@@ -0,0 +1,16 @@
1
+ import { ApiDocument } from '@opra/common';
2
+ import { Request } from '../interfaces/request.interface.js';
3
+ import { HttpRequestContext, RpcRequestContext, WsRequestContext } from '../interfaces/request-context.interface.js';
4
+ import { Response } from '../interfaces/response.interface.js';
5
+ import { RequestContextHost } from '../request-context.host.js';
6
+ export declare class HttpRequestContextHost extends RequestContextHost {
7
+ readonly platform: string;
8
+ readonly api: ApiDocument;
9
+ protected _request: Request;
10
+ protected _response: Response;
11
+ user?: any;
12
+ constructor(platform: string, api: ApiDocument, _request: Request, _response: Response);
13
+ switchToHttp(): HttpRequestContext;
14
+ switchToWs(): WsRequestContext;
15
+ switchToRpc(): RpcRequestContext;
16
+ }
@@ -0,0 +1,7 @@
1
+ import { HttpRequestMessage } from '@opra/common';
2
+ import { RequestHost } from '../request.host.js';
3
+ export declare class HttpRequestHost extends RequestHost {
4
+ protected _incoming: HttpRequestMessage;
5
+ constructor(init: RequestHost.Initiator, _incoming: HttpRequestMessage);
6
+ switchToHttp(): HttpRequestMessage;
7
+ }
@@ -0,0 +1,7 @@
1
+ import { HttpResponseMessage } from '@opra/common';
2
+ import { ResponseHost } from '../response.host.js';
3
+ export declare class HttpResponseHost extends ResponseHost {
4
+ protected _outgoing: HttpResponseMessage;
5
+ constructor(init: ResponseHost.Initiator, _outgoing: HttpResponseMessage);
6
+ switchToHttp(): HttpResponseMessage;
7
+ }
@@ -1,6 +1,7 @@
1
1
  export interface ILogger {
2
2
  log(message: any, ...optionalParams: any[]): any;
3
3
  error(message: any, ...optionalParams: any[]): any;
4
+ fatal?(message: any, ...optionalParams: any[]): any;
4
5
  warn(message: any, ...optionalParams: any[]): any;
5
6
  debug?(message: any, ...optionalParams: any[]): any;
6
7
  verbose?(message: any, ...optionalParams: any[]): any;
@@ -0,0 +1,25 @@
1
+ import { ApiDocument, HttpRequestMessage, HttpResponseMessage } from '@opra/common';
2
+ import { Request } from './request.interface.js';
3
+ import { Response } from './response.interface.js';
4
+ export declare namespace RequestContext {
5
+ type Protocol = 'http' | 'ws' | 'rpc';
6
+ }
7
+ export interface RequestContext {
8
+ readonly protocol: RequestContext.Protocol;
9
+ readonly platform: string;
10
+ readonly api: ApiDocument;
11
+ readonly request: Request;
12
+ readonly response: Response;
13
+ user?: any;
14
+ switchToHttp(): HttpRequestContext;
15
+ switchToWs(): WsRequestContext;
16
+ switchToRpc(): RpcRequestContext;
17
+ }
18
+ export interface HttpRequestContext extends Omit<RequestContext, 'request' | 'response'> {
19
+ readonly request: HttpRequestMessage;
20
+ readonly response: HttpResponseMessage;
21
+ }
22
+ export interface WsRequestContext extends Omit<RequestContext, 'request' | 'response'> {
23
+ }
24
+ export interface RpcRequestContext extends Omit<RequestContext, 'request' | 'response'> {
25
+ }
@@ -0,0 +1,13 @@
1
+ import { HttpRequestMessage, OpraSchema, Resource } from '@opra/common';
2
+ export interface Request {
3
+ readonly kind: string;
4
+ readonly resource: Resource;
5
+ readonly resourceKind: OpraSchema.Resource.Kind;
6
+ readonly operation: string;
7
+ readonly crud: 'create' | 'read' | 'update' | 'delete';
8
+ readonly many: boolean;
9
+ readonly args: any;
10
+ switchToHttp(): HttpRequestMessage;
11
+ switchToWs(): never;
12
+ switchToRpc(): never;
13
+ }
@@ -0,0 +1,22 @@
1
+ import { HttpResponseMessage } from '@opra/common';
2
+ export interface Response {
3
+ /**
4
+ * Result value
5
+ */
6
+ value?: any;
7
+ /**
8
+ * List of errors
9
+ */
10
+ errors: Error[];
11
+ /**
12
+ *
13
+ */
14
+ continueOnError?: boolean;
15
+ /**
16
+ * Total count of matched entities. (Used in "search" operation with "count" option
17
+ */
18
+ count?: number;
19
+ switchToHttp(): HttpResponseMessage;
20
+ switchToWs(): never;
21
+ switchToRpc(): never;
22
+ }
@@ -0,0 +1,7 @@
1
+ import { ApiDocument } from '@opra/common';
2
+ export declare class MetadataResource {
3
+ readonly document: ApiDocument;
4
+ private _schema;
5
+ constructor(document: ApiDocument);
6
+ get(): import("@opra/common/types/schema/document.interface").ApiDocument;
7
+ }
@@ -0,0 +1,19 @@
1
+ import { AsyncEventEmitter } from 'strict-typed-events';
2
+ import { ApiDocument } from '@opra/common';
3
+ import { Request } from './interfaces/request.interface.js';
4
+ import { HttpRequestContext, RequestContext, RpcRequestContext, WsRequestContext } from './interfaces/request-context.interface.js';
5
+ import { Response } from './interfaces/response.interface.js';
6
+ export declare abstract class RequestContextHost extends AsyncEventEmitter implements RequestContext {
7
+ readonly protocol: RequestContext.Protocol;
8
+ readonly platform: string;
9
+ readonly api: ApiDocument;
10
+ protected _request: Request;
11
+ protected _response: Response;
12
+ user?: any;
13
+ protected constructor(protocol: RequestContext.Protocol, platform: string, api: ApiDocument, _request: Request, _response: Response);
14
+ get request(): Request;
15
+ get response(): Response;
16
+ switchToHttp(): HttpRequestContext;
17
+ switchToWs(): WsRequestContext;
18
+ switchToRpc(): RpcRequestContext;
19
+ }
@@ -0,0 +1,26 @@
1
+ import type { HttpRequestMessage, Resource } from '@opra/common';
2
+ import { OpraSchema } from '@opra/common';
3
+ import type { Request } from './interfaces/request.interface.js';
4
+ export declare namespace RequestHost {
5
+ interface Initiator {
6
+ kind: string;
7
+ resource: Resource;
8
+ operation: string;
9
+ crud: 'create' | 'read' | 'update' | 'delete';
10
+ many: boolean;
11
+ args: any;
12
+ }
13
+ }
14
+ export declare abstract class RequestHost implements Request {
15
+ readonly kind: string;
16
+ readonly resource: Resource;
17
+ readonly resourceKind: OpraSchema.Resource.Kind;
18
+ readonly operation: string;
19
+ readonly crud: 'create' | 'read' | 'update' | 'delete';
20
+ readonly many: boolean;
21
+ readonly args: any;
22
+ protected constructor(init: RequestHost.Initiator);
23
+ switchToHttp(): HttpRequestMessage;
24
+ switchToWs(): never;
25
+ switchToRpc(): never;
26
+ }
@@ -0,0 +1,20 @@
1
+ import { HttpResponseMessage } from '@opra/common';
2
+ import { Response } from './interfaces/response.interface.js';
3
+ export declare namespace ResponseHost {
4
+ interface Initiator {
5
+ value?: any;
6
+ errors?: Error[];
7
+ continueOnError?: boolean;
8
+ count?: number;
9
+ }
10
+ }
11
+ export declare abstract class ResponseHost implements Response {
12
+ value?: any;
13
+ errors: Error[];
14
+ continueOnError?: boolean;
15
+ count?: number;
16
+ protected constructor(init: ResponseHost.Initiator);
17
+ switchToHttp(): HttpResponseMessage;
18
+ switchToWs(): never;
19
+ switchToRpc(): never;
20
+ }
@@ -0,0 +1,33 @@
1
+ declare module "@opra/common" {
2
+ interface CollectionConstructor {
3
+ OnInit(): any;
4
+ OnShutdown(): any;
5
+ }
6
+ interface SingletonConstructor {
7
+ OnInit(): any;
8
+ OnShutdown(): any;
9
+ }
10
+ interface Resource {
11
+ onInit?: (resource: Resource) => void | Promise<void>;
12
+ onShutdown?: (resource: Resource) => void | Promise<void>;
13
+ }
14
+ namespace Resource {
15
+ interface InitArguments {
16
+ onInit?: (resource: Resource) => void | Promise<void>;
17
+ onShutdown?: (resource: Resource) => void | Promise<void>;
18
+ }
19
+ }
20
+ namespace Collection {
21
+ interface Metadata {
22
+ onInit?: (resource: Collection) => void | Promise<void>;
23
+ onShutdown?: (resource: Collection) => void | Promise<void>;
24
+ }
25
+ }
26
+ namespace Singleton {
27
+ interface Metadata {
28
+ onInit?: (resource: Singleton) => void | Promise<void>;
29
+ onShutdown?: (resource: Singleton) => void | Promise<void>;
30
+ }
31
+ }
32
+ }
33
+ export {};
@@ -0,0 +1,10 @@
1
+ import "reflect-metadata";
2
+ import './augmentation/resource.augmentation.js';
3
+ export * from './types.js';
4
+ export * from './adapter/adapter.js';
5
+ export * from './adapter/http/express-adapter.js';
6
+ export * from './adapter/http/http-adapter.js';
7
+ export * from './adapter/interfaces/request-context.interface.js';
8
+ export * from './adapter/interfaces/logger.interface.js';
9
+ export * from './adapter/interfaces/request.interface.js';
10
+ export * from './adapter/interfaces/response.interface.js';
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExecutionContextHost = void 0;
4
- const strict_typed_events_1 = require("strict-typed-events");
5
- class ExecutionContextHost extends strict_typed_events_1.AsyncEventEmitter {
6
- constructor() {
7
- super();
8
- }
9
- switchToHttp() {
10
- throw new Error(`This is not an http context`);
11
- }
12
- onFinish(fn) {
13
- this.on('finish', fn);
14
- }
15
- }
16
- exports.ExecutionContextHost = ExecutionContextHost;
@@ -1,36 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExpressRequestWrapperHost = void 0;
4
- class ExpressRequestWrapperHost {
5
- constructor(instance) {
6
- this.instance = instance;
7
- }
8
- getInstance() {
9
- return this.instance;
10
- }
11
- getMethod() {
12
- return this.instance.method;
13
- }
14
- getUrl() {
15
- return this.instance.url;
16
- }
17
- getHeaderNames() {
18
- return Object.keys(this.instance.headers);
19
- }
20
- getHeader(name) {
21
- return this.instance.get(name);
22
- }
23
- getHeaders() {
24
- return this.instance.headers;
25
- }
26
- getBody() {
27
- return this.instance.body;
28
- }
29
- isCompleted() {
30
- return this.instance.complete;
31
- }
32
- getStream() {
33
- return this.instance;
34
- }
35
- }
36
- exports.ExpressRequestWrapperHost = ExpressRequestWrapperHost;
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExpressResponseWrapperHost = void 0;
4
- class ExpressResponseWrapperHost {
5
- constructor(instance) {
6
- this.instance = instance;
7
- }
8
- getInstance() {
9
- return this.instance;
10
- }
11
- getHeader(name) {
12
- return this.instance.get(name);
13
- }
14
- getHeaders() {
15
- return this.instance.getHeaders();
16
- }
17
- getHeaderNames() {
18
- return this.instance.getHeaderNames();
19
- }
20
- hasHeader(name) {
21
- return this.instance.hasHeader(name);
22
- }
23
- removeHeader(name) {
24
- return this.instance.removeHeader(name);
25
- }
26
- setHeader(name, value) {
27
- this.instance.setHeader(name, value);
28
- return this;
29
- }
30
- getStatus() {
31
- return this.instance.statusCode;
32
- }
33
- setStatus(value) {
34
- // noinspection SuspiciousTypeOfGuard
35
- this.instance.status(typeof value === 'number'
36
- ? value
37
- : parseInt(value, 10) || 500);
38
- return this;
39
- }
40
- getStream() {
41
- return this.instance;
42
- }
43
- send(body) {
44
- if (typeof body === 'string' || Buffer.isBuffer(body))
45
- this.instance.send(body);
46
- else
47
- this.instance.json(body);
48
- return this;
49
- }
50
- end() {
51
- this.instance.end();
52
- return this;
53
- }
54
- }
55
- exports.ExpressResponseWrapperHost = ExpressResponseWrapperHost;
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HttpExecutionContextHost = void 0;
4
- const execution_context_host_js_1 = require("./execution-context.host.js");
5
- class HttpExecutionContextHost extends execution_context_host_js_1.ExecutionContextHost {
6
- constructor(_platform, _request, _response) {
7
- super();
8
- this._platform = _platform;
9
- this._request = _request;
10
- this._response = _response;
11
- }
12
- getType() {
13
- return 'http';
14
- }
15
- getPlatform() {
16
- return this._platform;
17
- }
18
- getRequest() {
19
- return this._request;
20
- }
21
- getResponse() {
22
- return this._response;
23
- }
24
- switchToHttp() {
25
- return this;
26
- }
27
- }
28
- exports.HttpExecutionContextHost = HttpExecutionContextHost;
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MetadataResource = void 0;
4
- const tslib_1 = require("tslib");
5
- const common_1 = require("@opra/common");
6
- const json_singleton_service_js_1 = require("../../services/json-singleton-service.js");
7
- let MetadataResource = class MetadataResource {
8
- init(resource) {
9
- this.service = new json_singleton_service_js_1.JsonSingletonService(resource.dataType, {
10
- data: resource.document.getMetadata(true)
11
- });
12
- }
13
- get() {
14
- return this.service.get();
15
- }
16
- };
17
- MetadataResource = tslib_1.__decorate([
18
- (0, common_1.OprSingletonResource)(Object, {
19
- name: '$metadata'
20
- })
21
- ], MetadataResource);
22
- exports.MetadataResource = MetadataResource;
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OpraExpressAdapter = void 0;
4
- const tslib_1 = require("tslib");
5
- const body_parser_1 = tslib_1.__importDefault(require("body-parser"));
6
- const common_1 = require("@opra/common");
7
- const express_request_wrapper_host_js_1 = require("./classes/express-request-wrapper.host.js");
8
- const express_response_wrapper_host_js_1 = require("./classes/express-response-wrapper.host.js");
9
- const http_execution_context_host_js_1 = require("./classes/http-execution-context.host.js");
10
- const http_adapter_js_1 = require("./http-adapter.js");
11
- class OpraExpressAdapter extends http_adapter_js_1.OpraHttpAdapter {
12
- static async init(app, document, options) {
13
- const adapter = new OpraExpressAdapter(document);
14
- await adapter._init(options);
15
- const prefix = '/' + (0, common_1.normalizePath)(options?.prefix, true);
16
- app.use(prefix, body_parser_1.default.json());
17
- app.use(prefix, (request, response, next) => {
18
- (async () => {
19
- const executionContext = new http_execution_context_host_js_1.HttpExecutionContextHost('express', new express_request_wrapper_host_js_1.ExpressRequestWrapperHost(request), new express_response_wrapper_host_js_1.ExpressResponseWrapperHost(response));
20
- await adapter.handler(executionContext);
21
- })().catch(e => next(e));
22
- });
23
- return adapter;
24
- }
25
- }
26
- exports.OpraExpressAdapter = OpraExpressAdapter;