@opra/core 0.15.0 → 0.16.1

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 (39) hide show
  1. package/cjs/adapter/adapter.js +29 -27
  2. package/cjs/adapter/http/http-adapter.js +6 -5
  3. package/cjs/adapter/internal/metadata.resource.js +1 -1
  4. package/esm/adapter/adapter.js +48 -41
  5. package/esm/adapter/http/express-adapter.js +11 -6
  6. package/esm/adapter/http/http-adapter.js +66 -61
  7. package/esm/adapter/http/http-request-context.host.js +6 -2
  8. package/esm/adapter/http/http-request.host.js +6 -2
  9. package/esm/adapter/http/http-response.host.js +6 -2
  10. package/esm/adapter/interfaces/logger.interface.js +2 -1
  11. package/esm/adapter/interfaces/request-context.interface.js +2 -1
  12. package/esm/adapter/interfaces/request.interface.js +2 -1
  13. package/esm/adapter/interfaces/response.interface.js +2 -1
  14. package/esm/adapter/internal/metadata.resource.js +15 -12
  15. package/esm/adapter/request-context.host.js +6 -2
  16. package/esm/adapter/request.host.js +5 -1
  17. package/esm/adapter/response.host.js +5 -1
  18. package/esm/augmentation/resource.augmentation.js +11 -9
  19. package/esm/index.js +13 -10
  20. package/esm/types.js +2 -1
  21. package/i18n/en/error.json +1 -1
  22. package/package.json +5 -4
  23. package/{esm → types}/adapter/adapter.d.ts +3 -2
  24. package/{esm → types}/adapter/http/http-adapter.d.ts +1 -1
  25. package/{esm → types}/adapter/internal/metadata.resource.d.ts +1 -1
  26. /package/{esm → types}/adapter/http/express-adapter.d.ts +0 -0
  27. /package/{esm → types}/adapter/http/http-request-context.host.d.ts +0 -0
  28. /package/{esm → types}/adapter/http/http-request.host.d.ts +0 -0
  29. /package/{esm → types}/adapter/http/http-response.host.d.ts +0 -0
  30. /package/{esm → types}/adapter/interfaces/logger.interface.d.ts +0 -0
  31. /package/{esm → types}/adapter/interfaces/request-context.interface.d.ts +0 -0
  32. /package/{esm → types}/adapter/interfaces/request.interface.d.ts +0 -0
  33. /package/{esm → types}/adapter/interfaces/response.interface.d.ts +0 -0
  34. /package/{esm → types}/adapter/request-context.host.d.ts +0 -0
  35. /package/{esm → types}/adapter/request.host.d.ts +0 -0
  36. /package/{esm → types}/adapter/response.host.d.ts +0 -0
  37. /package/{esm → types}/augmentation/resource.augmentation.d.ts +0 -0
  38. /package/{esm → types}/index.d.ts +0 -0
  39. /package/{esm → types}/types.d.ts +0 -0
@@ -3,13 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OpraAdapter = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const path_1 = tslib_1.__importDefault(require("path"));
6
+ const strict_typed_events_1 = require("strict-typed-events");
6
7
  const common_1 = require("@opra/common");
7
8
  const metadata_resource_js_1 = require("./internal/metadata.resource.js");
8
9
  /**
9
10
  * @class OpraAdapter
10
11
  */
11
- class OpraAdapter {
12
+ class OpraAdapter extends strict_typed_events_1.AsyncEventEmitter {
12
13
  constructor(api) {
14
+ super();
13
15
  this.api = api;
14
16
  }
15
17
  /**
@@ -28,6 +30,8 @@ class OpraAdapter {
28
30
  this.i18n = this.i18n || common_1.I18n.defaultInstance;
29
31
  if (!this.i18n.isInitialized)
30
32
  await this.i18n.init();
33
+ if (options?.onRequest)
34
+ this.on('request', options.onRequest);
31
35
  this._internalDoc = await common_1.DocumentFactory.createDocument({
32
36
  version: common_1.OpraSchema.SpecVersion,
33
37
  info: {
@@ -58,6 +62,7 @@ class OpraAdapter {
58
62
  await Promise.allSettled(promises);
59
63
  }
60
64
  async executeRequest(context) {
65
+ await this.emitAsync('request', context);
61
66
  const { request, response } = context;
62
67
  const { resource, operation } = request;
63
68
  if (resource instanceof common_1.Collection || resource instanceof common_1.Singleton) {
@@ -69,36 +74,33 @@ class OpraAdapter {
69
74
  code: 'RESOLVER_FORBIDDEN'
70
75
  });
71
76
  const value = await endpoint.handler(context);
77
+ // if (value == null)
72
78
  if (value != null)
73
79
  response.value = value;
74
- await this.afterExecuteRequest(context);
80
+ const { crud, many } = request;
81
+ if (crud === 'delete' || (crud === 'update' && many)) {
82
+ let affected = 0;
83
+ if (typeof response.value === 'number')
84
+ affected = response.value;
85
+ if (typeof response.value === 'boolean')
86
+ affected = response.value ? 1 : 0;
87
+ if (typeof response.value === 'object')
88
+ affected = response.value.affectedRows || response.value.affected;
89
+ response.value = {
90
+ operation: request.operation,
91
+ affected
92
+ };
93
+ }
94
+ else if (response.value != null) {
95
+ if (!request.many)
96
+ response.value = Array.isArray(response.value) ? response.value[0] : response.value;
97
+ else
98
+ response.value = Array.isArray(response.value) ? response.value : [response.value];
99
+ }
100
+ if ((request.operation === 'get' || request.operation === 'update') && response.value == null)
101
+ throw new common_1.ResourceNotFoundError(resource.name, request.args.key);
75
102
  }
76
103
  }
77
- async afterExecuteRequest(context) {
78
- const { request, response } = context;
79
- const { resource, crud, many } = request;
80
- if (crud === 'delete' || (crud === 'update' && many)) {
81
- let affected = 0;
82
- if (typeof response.value === 'number')
83
- affected = response.value;
84
- if (typeof response.value === 'boolean')
85
- affected = response.value ? 1 : 0;
86
- if (typeof response.value === 'object')
87
- affected = response.value.affectedRows || response.value.affected;
88
- response.value = {
89
- operation: request.operation,
90
- affected
91
- };
92
- }
93
- else if (response.value != null) {
94
- if (!request.many)
95
- response.value = Array.isArray(response.value) ? response.value[0] : response.value;
96
- else
97
- response.value = Array.isArray(response.value) ? response.value : [response.value];
98
- }
99
- if ((request.operation === 'get' || request.operation === 'update') && response.value == null)
100
- throw new common_1.ResourceNotFoundError(resource.name, request.args.key);
101
- }
102
104
  async _createI18n(options) {
103
105
  const opts = {
104
106
  ...options,
@@ -31,7 +31,7 @@ class OpraHttpAdapter extends adapter_js_1.OpraAdapter {
31
31
  const task = new power_tasks_1.Task(async () => {
32
32
  try {
33
33
  await this.executeRequest(context);
34
- if (request.operation === 'search' && request.args.count && response.count != null) {
34
+ if (request.operation === 'findMany' && request.args.count && response.count != null) {
35
35
  response.switchToHttp().header(common_1.HttpHeaderCodes.X_Opra_Total_Matches, String(response.count));
36
36
  }
37
37
  }
@@ -47,6 +47,7 @@ class OpraHttpAdapter extends adapter_js_1.OpraAdapter {
47
47
  this.logger?.error?.(e);
48
48
  outgoing.sendStatus(500);
49
49
  });
50
+ await this.emitAsync('request-finish', context);
50
51
  return;
51
52
  }
52
53
  throw new common_1.BadRequestError({ message: 'Unsupported Content-Type' });
@@ -93,8 +94,8 @@ class OpraHttpAdapter extends adapter_js_1.OpraAdapter {
93
94
  return;
94
95
  logFn.apply(this.logger, [String(message), ...optionalParams]);
95
96
  }
96
- async afterExecuteRequest(context) {
97
- await super.afterExecuteRequest(context);
97
+ async executeRequest(context) {
98
+ await super.executeRequest(context);
98
99
  const { request } = context;
99
100
  const response = context.response;
100
101
  const { crud } = request;
@@ -212,9 +213,9 @@ class OpraHttpAdapter extends adapter_js_1.OpraAdapter {
212
213
  }, incoming);
213
214
  }
214
215
  return new http_request_host_js_1.HttpRequestHost({
215
- kind: 'CollectionSearchRequest',
216
+ kind: 'CollectionFindManyRequest',
216
217
  resource,
217
- operation: 'search',
218
+ operation: 'findMany',
218
219
  crud: 'read',
219
220
  many: true,
220
221
  args: {
@@ -13,7 +13,7 @@ let MetadataResource = class MetadataResource {
13
13
  }
14
14
  };
15
15
  tslib_1.__decorate([
16
- common_1.Singleton.GetOperation(),
16
+ common_1.Singleton.Get(),
17
17
  tslib_1.__metadata("design:type", Function),
18
18
  tslib_1.__metadata("design:paramtypes", []),
19
19
  tslib_1.__metadata("design:returntype", void 0)
@@ -1,11 +1,17 @@
1
- import path from 'path';
2
- import { Collection, DocumentFactory, ForbiddenError, getStackFileName, I18n, OpraSchema, ResourceNotFoundError, Singleton, translate, } from '@opra/common';
3
- import { MetadataResource } from './internal/metadata.resource.js';
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpraAdapter = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const path_1 = tslib_1.__importDefault(require("path"));
6
+ const strict_typed_events_1 = require("strict-typed-events");
7
+ const common_1 = require("@opra/common");
8
+ const metadata_resource_js_1 = require("./internal/metadata.resource.js");
4
9
  /**
5
10
  * @class OpraAdapter
6
11
  */
7
- export class OpraAdapter {
12
+ class OpraAdapter extends strict_typed_events_1.AsyncEventEmitter {
8
13
  constructor(api) {
14
+ super();
9
15
  this.api = api;
10
16
  }
11
17
  /**
@@ -15,23 +21,25 @@ export class OpraAdapter {
15
21
  */
16
22
  async init(options) {
17
23
  this.logger = options?.logger;
18
- if (options?.i18n instanceof I18n)
24
+ if (options?.i18n instanceof common_1.I18n)
19
25
  this.i18n = options.i18n;
20
26
  else if (typeof options?.i18n === 'function')
21
27
  this.i18n = await options.i18n();
22
28
  else
23
29
  this.i18n = await this._createI18n(options?.i18n);
24
- this.i18n = this.i18n || I18n.defaultInstance;
30
+ this.i18n = this.i18n || common_1.I18n.defaultInstance;
25
31
  if (!this.i18n.isInitialized)
26
32
  await this.i18n.init();
27
- this._internalDoc = await DocumentFactory.createDocument({
28
- version: OpraSchema.SpecVersion,
33
+ if (options?.onRequest)
34
+ this.on('request', options.onRequest);
35
+ this._internalDoc = await common_1.DocumentFactory.createDocument({
36
+ version: common_1.OpraSchema.SpecVersion,
29
37
  info: {
30
- version: OpraSchema.SpecVersion,
38
+ version: common_1.OpraSchema.SpecVersion,
31
39
  title: 'Internal resources',
32
40
  },
33
41
  references: { 'api': this.api },
34
- resources: [new MetadataResource(this.api)]
42
+ resources: [new metadata_resource_js_1.MetadataResource(this.api)]
35
43
  });
36
44
  const promises = [];
37
45
  for (const r of this.api.resources.values()) {
@@ -54,58 +62,57 @@ export class OpraAdapter {
54
62
  await Promise.allSettled(promises);
55
63
  }
56
64
  async executeRequest(context) {
65
+ await this.emitAsync('request', context);
57
66
  const { request, response } = context;
58
67
  const { resource, operation } = request;
59
- if (resource instanceof Collection || resource instanceof Singleton) {
68
+ if (resource instanceof common_1.Collection || resource instanceof common_1.Singleton) {
60
69
  const endpoint = resource.operations[operation];
61
70
  if (!endpoint?.handler)
62
- throw new ForbiddenError({
63
- message: translate('RESOLVER_FORBIDDEN', { operation }, `The resource endpoint does not accept '{{operation}}' operations`),
71
+ throw new common_1.ForbiddenError({
72
+ message: (0, common_1.translate)('RESOLVER_FORBIDDEN', { operation }, `The resource endpoint does not accept '{{operation}}' operations`),
64
73
  severity: 'error',
65
74
  code: 'RESOLVER_FORBIDDEN'
66
75
  });
67
76
  const value = await endpoint.handler(context);
77
+ // if (value == null)
68
78
  if (value != null)
69
79
  response.value = value;
70
- await this.afterExecuteRequest(context);
80
+ const { crud, many } = request;
81
+ if (crud === 'delete' || (crud === 'update' && many)) {
82
+ let affected = 0;
83
+ if (typeof response.value === 'number')
84
+ affected = response.value;
85
+ if (typeof response.value === 'boolean')
86
+ affected = response.value ? 1 : 0;
87
+ if (typeof response.value === 'object')
88
+ affected = response.value.affectedRows || response.value.affected;
89
+ response.value = {
90
+ operation: request.operation,
91
+ affected
92
+ };
93
+ }
94
+ else if (response.value != null) {
95
+ if (!request.many)
96
+ response.value = Array.isArray(response.value) ? response.value[0] : response.value;
97
+ else
98
+ response.value = Array.isArray(response.value) ? response.value : [response.value];
99
+ }
100
+ if ((request.operation === 'get' || request.operation === 'update') && response.value == null)
101
+ throw new common_1.ResourceNotFoundError(resource.name, request.args.key);
71
102
  }
72
103
  }
73
- async afterExecuteRequest(context) {
74
- const { request, response } = context;
75
- const { resource, crud, many } = request;
76
- if (crud === 'delete' || (crud === 'update' && many)) {
77
- let affected = 0;
78
- if (typeof response.value === 'number')
79
- affected = response.value;
80
- if (typeof response.value === 'boolean')
81
- affected = response.value ? 1 : 0;
82
- if (typeof response.value === 'object')
83
- affected = response.value.affectedRows || response.value.affected;
84
- response.value = {
85
- operation: request.operation,
86
- affected
87
- };
88
- }
89
- else if (response.value != null) {
90
- if (!request.many)
91
- response.value = Array.isArray(response.value) ? response.value[0] : response.value;
92
- else
93
- response.value = Array.isArray(response.value) ? response.value : [response.value];
94
- }
95
- if ((request.operation === 'get' || request.operation === 'update') && response.value == null)
96
- throw new ResourceNotFoundError(resource.name, request.args.key);
97
- }
98
104
  async _createI18n(options) {
99
105
  const opts = {
100
106
  ...options,
101
107
  };
102
108
  delete opts.resourceDirs;
103
- const instance = I18n.createInstance(opts);
109
+ const instance = common_1.I18n.createInstance(opts);
104
110
  await instance.init();
105
- await instance.loadResourceDir(path.resolve(getStackFileName(), '../../../i18n'));
111
+ await instance.loadResourceDir(path_1.default.resolve((0, common_1.getStackFileName)(), '../../../i18n'));
106
112
  if (options?.resourceDirs)
107
113
  for (const dir of options.resourceDirs)
108
114
  await instance.loadResourceDir(dir);
109
115
  return instance;
110
116
  }
111
117
  }
118
+ exports.OpraAdapter = OpraAdapter;
@@ -1,8 +1,12 @@
1
- import bodyParser from 'body-parser';
2
- import { normalizePath } from '@opra/common';
3
- import { OpraHttpAdapter } from './http-adapter.js';
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 http_adapter_js_1 = require("./http-adapter.js");
4
8
  const noOp = () => void 0;
5
- export class OpraExpressAdapter extends OpraHttpAdapter {
9
+ class OpraExpressAdapter extends http_adapter_js_1.OpraHttpAdapter {
6
10
  constructor() {
7
11
  super(...arguments);
8
12
  this.platform = 'express';
@@ -10,8 +14,8 @@ export class OpraExpressAdapter extends OpraHttpAdapter {
10
14
  static async create(app, document, options) {
11
15
  const adapter = new OpraExpressAdapter(document);
12
16
  await adapter.init(options);
13
- const prefix = '/' + normalizePath(options?.prefix, true);
14
- app.use(prefix, bodyParser.json());
17
+ const prefix = '/' + (0, common_1.normalizePath)(options?.prefix, true);
18
+ app.use(prefix, body_parser_1.default.json());
15
19
  app.use(prefix, (req, res, next) => {
16
20
  req.end = noOp;
17
21
  req.send = noOp;
@@ -20,3 +24,4 @@ export class OpraExpressAdapter extends OpraHttpAdapter {
20
24
  return adapter;
21
25
  }
22
26
  }
27
+ exports.OpraExpressAdapter = OpraExpressAdapter;
@@ -1,14 +1,17 @@
1
- import { Task } from 'power-tasks';
2
- import { BadRequestError, Collection, HttpHeaderCodes, HttpStatusCodes, InternalServerError, isReadable, IssueSeverity, MethodNotAllowedError, OpraException, OpraSchema, OpraURL, Singleton, wrapException } from '@opra/common';
3
- import { OpraAdapter } from '../adapter.js';
4
- import { HttpRequestHost } from './http-request.host.js';
5
- import { HttpRequestContextHost } from './http-request-context.host.js';
6
- import { HttpResponseHost } from './http-response.host.js';
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpraHttpAdapter = void 0;
4
+ const power_tasks_1 = require("power-tasks");
5
+ const common_1 = require("@opra/common");
6
+ const adapter_js_1 = require("../adapter.js");
7
+ const http_request_host_js_1 = require("./http-request.host.js");
8
+ const http_request_context_host_js_1 = require("./http-request-context.host.js");
9
+ const http_response_host_js_1 = require("./http-response.host.js");
7
10
  /**
8
11
  *
9
12
  * @class OpraHttpAdapter
10
13
  */
11
- export class OpraHttpAdapter extends OpraAdapter {
14
+ class OpraHttpAdapter extends adapter_js_1.OpraAdapter {
12
15
  /**
13
16
  * Main http request handler
14
17
  * @param incoming
@@ -19,17 +22,17 @@ export class OpraHttpAdapter extends OpraAdapter {
19
22
  try {
20
23
  // Batch
21
24
  if (incoming.is('multipart/mixed')) {
22
- throw new BadRequestError({ message: 'Not implemented yet' });
25
+ throw new common_1.BadRequestError({ message: 'Not implemented yet' });
23
26
  }
24
27
  if (!(incoming.method === 'POST' || incoming.method === 'PATCH') || incoming.is('json')) {
25
28
  const request = await this.parseRequest(incoming);
26
- const response = new HttpResponseHost({}, outgoing);
27
- const context = new HttpRequestContextHost(this.platform, this.api, request, response);
28
- const task = new Task(async () => {
29
+ const response = new http_response_host_js_1.HttpResponseHost({}, outgoing);
30
+ const context = new http_request_context_host_js_1.HttpRequestContextHost(this.platform, this.api, request, response);
31
+ const task = new power_tasks_1.Task(async () => {
29
32
  try {
30
33
  await this.executeRequest(context);
31
- if (request.operation === 'search' && request.args.count && response.count != null) {
32
- response.switchToHttp().header(HttpHeaderCodes.X_Opra_Total_Matches, String(response.count));
34
+ if (request.operation === 'findMany' && request.args.count && response.count != null) {
35
+ response.switchToHttp().header(common_1.HttpHeaderCodes.X_Opra_Total_Matches, String(response.count));
33
36
  }
34
37
  }
35
38
  catch (error) {
@@ -44,9 +47,10 @@ export class OpraHttpAdapter extends OpraAdapter {
44
47
  this.logger?.error?.(e);
45
48
  outgoing.sendStatus(500);
46
49
  });
50
+ await this.emitAsync('request-finish', context);
47
51
  return;
48
52
  }
49
- throw new BadRequestError({ message: 'Unsupported Content-Type' });
53
+ throw new common_1.BadRequestError({ message: 'Unsupported Content-Type' });
50
54
  }
51
55
  catch (error) {
52
56
  await this.errorHandler(incoming, outgoing, [error]);
@@ -54,30 +58,30 @@ export class OpraHttpAdapter extends OpraAdapter {
54
58
  }
55
59
  async errorHandler(incoming, outgoing, errors) {
56
60
  errors.forEach(e => {
57
- this.log((e instanceof OpraException) ? 'error' : 'fatal', incoming, e); // todo. implement a better logger
61
+ this.log((e instanceof common_1.OpraException) ? 'error' : 'fatal', incoming, e); // todo. implement a better logger
58
62
  });
59
- errors = errors.map(wrapException);
63
+ errors = errors.map(common_1.wrapException);
60
64
  let status = outgoing.statusCode || 0;
61
65
  // Sort errors from fatal to info
62
66
  errors.sort((a, b) => {
63
- const i = IssueSeverity.Keys.indexOf(a.issue.severity) - IssueSeverity.Keys.indexOf(b.issue.severity);
67
+ const i = common_1.IssueSeverity.Keys.indexOf(a.issue.severity) - common_1.IssueSeverity.Keys.indexOf(b.issue.severity);
64
68
  if (i === 0)
65
69
  return b.status - a.status;
66
70
  return i;
67
71
  });
68
- if (!status || status < HttpStatusCodes.BAD_REQUEST) {
72
+ if (!status || status < common_1.HttpStatusCodes.BAD_REQUEST) {
69
73
  status = errors[0].status;
70
- if (status < HttpStatusCodes.BAD_REQUEST)
71
- status = HttpStatusCodes.INTERNAL_SERVER_ERROR;
74
+ if (status < common_1.HttpStatusCodes.BAD_REQUEST)
75
+ status = common_1.HttpStatusCodes.INTERNAL_SERVER_ERROR;
72
76
  }
73
77
  const body = this.i18n.deep({
74
78
  errors: errors.map(e => e.issue)
75
79
  });
76
- outgoing.set(HttpHeaderCodes.Content_Type, 'application/json; charset=utf-8');
77
- outgoing.set(HttpHeaderCodes.Cache_Control, 'no-cache');
78
- outgoing.set(HttpHeaderCodes.Pragma, 'no-cache');
79
- outgoing.set(HttpHeaderCodes.Expires, '-1');
80
- outgoing.set(HttpHeaderCodes.X_Opra_Version, OpraSchema.SpecVersion);
80
+ outgoing.set(common_1.HttpHeaderCodes.Content_Type, 'application/json; charset=utf-8');
81
+ outgoing.set(common_1.HttpHeaderCodes.Cache_Control, 'no-cache');
82
+ outgoing.set(common_1.HttpHeaderCodes.Pragma, 'no-cache');
83
+ outgoing.set(common_1.HttpHeaderCodes.Expires, '-1');
84
+ outgoing.set(common_1.HttpHeaderCodes.X_Opra_Version, common_1.OpraSchema.SpecVersion);
81
85
  outgoing.status(status);
82
86
  outgoing.send(JSON.stringify(body));
83
87
  outgoing.end();
@@ -90,19 +94,19 @@ export class OpraHttpAdapter extends OpraAdapter {
90
94
  return;
91
95
  logFn.apply(this.logger, [String(message), ...optionalParams]);
92
96
  }
93
- async afterExecuteRequest(context) {
94
- await super.afterExecuteRequest(context);
97
+ async executeRequest(context) {
98
+ await super.executeRequest(context);
95
99
  const { request } = context;
96
100
  const response = context.response;
97
101
  const { crud } = request;
98
102
  const httpResponse = response.switchToHttp();
99
- if (request.resource instanceof Singleton || request.resource instanceof Collection) {
100
- httpResponse.set(HttpHeaderCodes.X_Opra_Data_Type, request.resource.type.name);
101
- httpResponse.set(HttpHeaderCodes.X_Opra_Operation, request.operation);
103
+ if (request.resource instanceof common_1.Singleton || request.resource instanceof common_1.Collection) {
104
+ httpResponse.set(common_1.HttpHeaderCodes.X_Opra_Data_Type, request.resource.type.name);
105
+ httpResponse.set(common_1.HttpHeaderCodes.X_Opra_Operation, request.operation);
102
106
  }
103
107
  if (crud === 'create') {
104
108
  if (!response.value)
105
- throw new InternalServerError();
109
+ throw new common_1.InternalServerError();
106
110
  // todo validate
107
111
  httpResponse.status(201);
108
112
  }
@@ -114,7 +118,7 @@ export class OpraHttpAdapter extends OpraAdapter {
114
118
  */
115
119
  async parseRequest(incoming) {
116
120
  try {
117
- const url = new OpraURL();
121
+ const url = new common_1.OpraURL();
118
122
  url.searchParams.define({
119
123
  '$pick': { codec: 'string', array: true },
120
124
  '$omit': { codec: 'string', array: true },
@@ -129,10 +133,10 @@ export class OpraHttpAdapter extends OpraAdapter {
129
133
  url.parse(incoming.url);
130
134
  // const {context, url, method, headers, body, contentId} = args;
131
135
  if (!url.path.size)
132
- throw new BadRequestError();
136
+ throw new common_1.BadRequestError();
133
137
  const method = incoming.method;
134
138
  if (method !== 'GET' && url.path.size > 1)
135
- throw new BadRequestError();
139
+ throw new common_1.BadRequestError();
136
140
  // const pathLen = url.path.size;
137
141
  // let pathIndex = 0;
138
142
  const params = url.searchParams;
@@ -148,11 +152,11 @@ export class OpraHttpAdapter extends OpraAdapter {
148
152
  /*
149
153
  * Collection
150
154
  */
151
- if (resource instanceof Collection) {
155
+ if (resource instanceof common_1.Collection) {
152
156
  switch (method) {
153
157
  case 'POST': {
154
158
  if (!p.key) {
155
- return new HttpRequestHost({
159
+ return new http_request_host_js_1.HttpRequestHost({
156
160
  kind: 'CollectionCreateRequest',
157
161
  resource,
158
162
  operation: 'create',
@@ -170,7 +174,7 @@ export class OpraHttpAdapter extends OpraAdapter {
170
174
  }
171
175
  case 'DELETE': {
172
176
  if (p.key) {
173
- return new HttpRequestHost({
177
+ return new http_request_host_js_1.HttpRequestHost({
174
178
  kind: 'CollectionDeleteRequest',
175
179
  resource,
176
180
  operation: 'delete',
@@ -181,7 +185,7 @@ export class OpraHttpAdapter extends OpraAdapter {
181
185
  }
182
186
  }, incoming);
183
187
  }
184
- return new HttpRequestHost({
188
+ return new http_request_host_js_1.HttpRequestHost({
185
189
  kind: 'CollectionDeleteManyRequest',
186
190
  resource,
187
191
  operation: 'deleteMany',
@@ -194,7 +198,7 @@ export class OpraHttpAdapter extends OpraAdapter {
194
198
  }
195
199
  case 'GET': {
196
200
  if (p.key) {
197
- return new HttpRequestHost({
201
+ return new http_request_host_js_1.HttpRequestHost({
198
202
  kind: 'CollectionGetRequest',
199
203
  resource,
200
204
  operation: 'get',
@@ -208,10 +212,10 @@ export class OpraHttpAdapter extends OpraAdapter {
208
212
  }
209
213
  }, incoming);
210
214
  }
211
- return new HttpRequestHost({
212
- kind: 'CollectionSearchRequest',
215
+ return new http_request_host_js_1.HttpRequestHost({
216
+ kind: 'CollectionFindManyRequest',
213
217
  resource,
214
- operation: 'search',
218
+ operation: 'findMany',
215
219
  crud: 'read',
216
220
  many: true,
217
221
  args: {
@@ -229,7 +233,7 @@ export class OpraHttpAdapter extends OpraAdapter {
229
233
  }
230
234
  case 'PATCH': {
231
235
  if (p.key) {
232
- return new HttpRequestHost({
236
+ return new http_request_host_js_1.HttpRequestHost({
233
237
  kind: 'CollectionUpdateRequest',
234
238
  resource,
235
239
  operation: 'update',
@@ -244,7 +248,7 @@ export class OpraHttpAdapter extends OpraAdapter {
244
248
  }
245
249
  }, incoming);
246
250
  }
247
- return new HttpRequestHost({
251
+ return new http_request_host_js_1.HttpRequestHost({
248
252
  kind: 'CollectionUpdateManyRequest',
249
253
  resource,
250
254
  operation: 'updateMany',
@@ -262,10 +266,10 @@ export class OpraHttpAdapter extends OpraAdapter {
262
266
  /*
263
267
  * Singleton
264
268
  */
265
- if (resource instanceof Singleton && !p.key) {
269
+ if (resource instanceof common_1.Singleton && !p.key) {
266
270
  switch (method) {
267
271
  case 'POST': {
268
- return new HttpRequestHost({
272
+ return new http_request_host_js_1.HttpRequestHost({
269
273
  kind: 'SingletonCreateRequest',
270
274
  resource,
271
275
  operation: 'create',
@@ -280,7 +284,7 @@ export class OpraHttpAdapter extends OpraAdapter {
280
284
  }, incoming);
281
285
  }
282
286
  case 'DELETE': {
283
- return new HttpRequestHost({
287
+ return new http_request_host_js_1.HttpRequestHost({
284
288
  kind: 'SingletonDeleteRequest',
285
289
  resource,
286
290
  operation: 'delete',
@@ -290,7 +294,7 @@ export class OpraHttpAdapter extends OpraAdapter {
290
294
  }, incoming);
291
295
  }
292
296
  case 'GET': {
293
- return new HttpRequestHost({
297
+ return new http_request_host_js_1.HttpRequestHost({
294
298
  kind: 'SingletonGetRequest',
295
299
  resource,
296
300
  operation: 'get',
@@ -304,7 +308,7 @@ export class OpraHttpAdapter extends OpraAdapter {
304
308
  }, incoming);
305
309
  }
306
310
  case 'PATCH': {
307
- return new HttpRequestHost({
311
+ return new http_request_host_js_1.HttpRequestHost({
308
312
  kind: 'SingletonUpdateRequest',
309
313
  resource,
310
314
  operation: 'update',
@@ -321,7 +325,7 @@ export class OpraHttpAdapter extends OpraAdapter {
321
325
  }
322
326
  }
323
327
  else
324
- throw new InternalServerError();
328
+ throw new common_1.InternalServerError();
325
329
  // if (query instanceof SingletonGetQuery || query instanceof CollectionGetQuery || query instanceof ElementReadQuery) {
326
330
  // // Move through properties
327
331
  // let parentType: DataType;
@@ -343,14 +347,14 @@ export class OpraHttpAdapter extends OpraAdapter {
343
347
  // parent = parent.child;
344
348
  // }
345
349
  // }
346
- throw new MethodNotAllowedError({
350
+ throw new common_1.MethodNotAllowedError({
347
351
  message: `Method "${method}" is not allowed by target endpoint`
348
352
  });
349
353
  }
350
354
  catch (e) {
351
- if (e instanceof OpraException)
355
+ if (e instanceof common_1.OpraException)
352
356
  throw e;
353
- throw new BadRequestError(e);
357
+ throw new common_1.BadRequestError(e);
354
358
  }
355
359
  }
356
360
  // async parseMultiPart(
@@ -434,23 +438,23 @@ export class OpraHttpAdapter extends OpraAdapter {
434
438
  async sendResponse(context) {
435
439
  const { request, response } = context;
436
440
  const outgoing = response.switchToHttp();
437
- const errors = response.errors?.map(e => wrapException(e));
441
+ const errors = response.errors?.map(e => (0, common_1.wrapException)(e));
438
442
  if (errors && errors.length) {
439
443
  await this.errorHandler(request.switchToHttp(), outgoing, errors);
440
444
  return;
441
445
  }
442
- outgoing.set(HttpHeaderCodes.Cache_Control, 'no-cache');
443
- outgoing.set(HttpHeaderCodes.Pragma, 'no-cache');
444
- outgoing.set(HttpHeaderCodes.Expires, '-1');
445
- outgoing.set(HttpHeaderCodes.X_Opra_Version, OpraSchema.SpecVersion);
446
- outgoing.status(outgoing.statusCode || HttpStatusCodes.OK);
446
+ outgoing.set(common_1.HttpHeaderCodes.Cache_Control, 'no-cache');
447
+ outgoing.set(common_1.HttpHeaderCodes.Pragma, 'no-cache');
448
+ outgoing.set(common_1.HttpHeaderCodes.Expires, '-1');
449
+ outgoing.set(common_1.HttpHeaderCodes.X_Opra_Version, common_1.OpraSchema.SpecVersion);
450
+ outgoing.status(outgoing.statusCode || common_1.HttpStatusCodes.OK);
447
451
  if (response.value) {
448
452
  if (typeof response.value === 'object') {
449
- if (isReadable(response.value) || Buffer.isBuffer(response.value))
453
+ if ((0, common_1.isReadable)(response.value) || Buffer.isBuffer(response.value))
450
454
  outgoing.send(response.value);
451
455
  else {
452
456
  const body = this.i18n.deep(response.value);
453
- outgoing.set(HttpHeaderCodes.Content_Type, 'application/json; charset=utf-8');
457
+ outgoing.set(common_1.HttpHeaderCodes.Content_Type, 'application/json; charset=utf-8');
454
458
  outgoing.send(JSON.stringify(body));
455
459
  }
456
460
  }
@@ -460,3 +464,4 @@ export class OpraHttpAdapter extends OpraAdapter {
460
464
  outgoing.end();
461
465
  }
462
466
  }
467
+ exports.OpraHttpAdapter = OpraHttpAdapter;
@@ -1,5 +1,8 @@
1
- import { RequestContextHost } from '../request-context.host.js';
2
- export class HttpRequestContextHost extends RequestContextHost {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpRequestContextHost = void 0;
4
+ const request_context_host_js_1 = require("../request-context.host.js");
5
+ class HttpRequestContextHost extends request_context_host_js_1.RequestContextHost {
3
6
  constructor(platform, api, _request, _response) {
4
7
  super('http', platform, api, _request, _response);
5
8
  this.platform = platform;
@@ -22,3 +25,4 @@ export class HttpRequestContextHost extends RequestContextHost {
22
25
  throw new TypeError('Not executing in an "RPC" protocol');
23
26
  }
24
27
  }
28
+ exports.HttpRequestContextHost = HttpRequestContextHost;
@@ -1,5 +1,8 @@
1
- import { RequestHost } from '../request.host.js';
2
- export class HttpRequestHost extends RequestHost {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpRequestHost = void 0;
4
+ const request_host_js_1 = require("../request.host.js");
5
+ class HttpRequestHost extends request_host_js_1.RequestHost {
3
6
  constructor(init, _incoming) {
4
7
  super(init);
5
8
  this._incoming = _incoming;
@@ -8,3 +11,4 @@ export class HttpRequestHost extends RequestHost {
8
11
  return this._incoming;
9
12
  }
10
13
  }
14
+ exports.HttpRequestHost = HttpRequestHost;
@@ -1,5 +1,8 @@
1
- import { ResponseHost } from '../response.host.js';
2
- export class HttpResponseHost extends ResponseHost {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpResponseHost = void 0;
4
+ const response_host_js_1 = require("../response.host.js");
5
+ class HttpResponseHost extends response_host_js_1.ResponseHost {
3
6
  constructor(init, _outgoing) {
4
7
  super(init);
5
8
  this._outgoing = _outgoing;
@@ -8,3 +11,4 @@ export class HttpResponseHost extends ResponseHost {
8
11
  return this._outgoing;
9
12
  }
10
13
  }
14
+ exports.HttpResponseHost = HttpResponseHost;
@@ -1 +1,2 @@
1
- export {};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1 +1,2 @@
1
- export {};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1 +1,2 @@
1
- export {};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1 +1,2 @@
1
- export {};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,24 +1,27 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { ApiDocument, cloneObject, Singleton } from '@opra/common';
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");
3
6
  let MetadataResource = class MetadataResource {
4
7
  constructor(document) {
5
8
  this.document = document;
6
9
  this._schema = document.exportSchema();
7
10
  }
8
11
  get() {
9
- return cloneObject(this.document.exportSchema(), true);
12
+ return (0, common_1.cloneObject)(this.document.exportSchema(), true);
10
13
  }
11
14
  };
12
- __decorate([
13
- Singleton.GetOperation(),
14
- __metadata("design:type", Function),
15
- __metadata("design:paramtypes", []),
16
- __metadata("design:returntype", void 0)
15
+ tslib_1.__decorate([
16
+ common_1.Singleton.Get(),
17
+ tslib_1.__metadata("design:type", Function),
18
+ tslib_1.__metadata("design:paramtypes", []),
19
+ tslib_1.__metadata("design:returntype", void 0)
17
20
  ], MetadataResource.prototype, "get", null);
18
- MetadataResource = __decorate([
19
- Singleton(Object, {
21
+ MetadataResource = tslib_1.__decorate([
22
+ (0, common_1.Singleton)(Object, {
20
23
  name: '$metadata',
21
24
  }),
22
- __metadata("design:paramtypes", [ApiDocument])
25
+ tslib_1.__metadata("design:paramtypes", [common_1.ApiDocument])
23
26
  ], MetadataResource);
24
- export { MetadataResource };
27
+ exports.MetadataResource = MetadataResource;
@@ -1,5 +1,8 @@
1
- import { AsyncEventEmitter } from 'strict-typed-events';
2
- export class RequestContextHost extends AsyncEventEmitter {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequestContextHost = void 0;
4
+ const strict_typed_events_1 = require("strict-typed-events");
5
+ class RequestContextHost extends strict_typed_events_1.AsyncEventEmitter {
3
6
  constructor(protocol, platform, api, _request, _response) {
4
7
  super();
5
8
  this.protocol = protocol;
@@ -24,3 +27,4 @@ export class RequestContextHost extends AsyncEventEmitter {
24
27
  throw new TypeError('Not executing in an "RPC" protocol');
25
28
  }
26
29
  }
30
+ exports.RequestContextHost = RequestContextHost;
@@ -1,4 +1,7 @@
1
- export class RequestHost {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequestHost = void 0;
4
+ class RequestHost {
2
5
  constructor(init) {
3
6
  Object.assign(this, init);
4
7
  this.resourceKind = this.resource.kind;
@@ -13,3 +16,4 @@ export class RequestHost {
13
16
  throw new TypeError('Not executing in an "RPC" protocol');
14
17
  }
15
18
  }
19
+ exports.RequestHost = RequestHost;
@@ -1,4 +1,7 @@
1
- export class ResponseHost {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResponseHost = void 0;
4
+ class ResponseHost {
2
5
  constructor(init) {
3
6
  if (init)
4
7
  Object.assign(this, init);
@@ -14,3 +17,4 @@ export class ResponseHost {
14
17
  throw new TypeError('Not executing in an "RPC" protocol');
15
18
  }
16
19
  }
20
+ exports.ResponseHost = ResponseHost;
@@ -1,24 +1,26 @@
1
- import { Collection, METADATA_KEY, Resource, Singleton } from "@opra/common";
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const common_1 = require("@opra/common");
2
4
  // @ts-ignore
3
- const oldConstruct = Resource.prototype._construct;
5
+ const oldConstruct = common_1.Resource.prototype._construct;
4
6
  // @ts-ignore
5
- Resource.prototype._construct = function (init) {
7
+ common_1.Resource.prototype._construct = function (init) {
6
8
  oldConstruct.call(this, init);
7
9
  const _this = this;
8
10
  _this.onInit = init.onInit;
9
11
  _this.onShutdown = init.onShutdown;
10
12
  };
11
- Collection.OnInit = Singleton.OnInit = function () {
13
+ common_1.Collection.OnInit = common_1.Singleton.OnInit = function () {
12
14
  return (target, propertyKey) => {
13
- const resourceMetadata = (Reflect.getOwnMetadata(METADATA_KEY, target.constructor) || {});
15
+ const resourceMetadata = (Reflect.getOwnMetadata(common_1.METADATA_KEY, target.constructor) || {});
14
16
  resourceMetadata.onInit = target[propertyKey];
15
- Reflect.defineMetadata(METADATA_KEY, target.constructor, resourceMetadata);
17
+ Reflect.defineMetadata(common_1.METADATA_KEY, target.constructor, resourceMetadata);
16
18
  };
17
19
  };
18
- Collection.OnShutdown = Singleton.OnShutdown = function () {
20
+ common_1.Collection.OnShutdown = common_1.Singleton.OnShutdown = function () {
19
21
  return (target, propertyKey) => {
20
- const resourceMetadata = (Reflect.getOwnMetadata(METADATA_KEY, target.constructor) || {});
22
+ const resourceMetadata = (Reflect.getOwnMetadata(common_1.METADATA_KEY, target.constructor) || {});
21
23
  resourceMetadata.onShutdown = target[propertyKey];
22
- Reflect.defineMetadata(METADATA_KEY, target.constructor, resourceMetadata);
24
+ Reflect.defineMetadata(common_1.METADATA_KEY, target.constructor, resourceMetadata);
23
25
  };
24
26
  };
package/esm/index.js CHANGED
@@ -1,10 +1,13 @@
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
+ "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,7 +8,7 @@
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
13
  "RESOLVER_FORBIDDEN": "The resource endpoint does not accept '{{operation}}' operations",
14
14
  "UNACCEPTED_SORT_FIELD": "Field '{{field}}' is not available for sort operation"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opra/core",
3
- "version": "0.15.0",
3
+ "version": "0.16.1",
4
4
  "description": "Opra schema package",
5
5
  "author": "Panates",
6
6
  "license": "MIT",
@@ -27,7 +27,7 @@
27
27
  "clean:cover": "rimraf ../../coverage/core"
28
28
  },
29
29
  "dependencies": {
30
- "@opra/common": "^0.15.0",
30
+ "@opra/common": "^0.16.1",
31
31
  "content-type": "^1.0.5",
32
32
  "lodash.isnil": "^4.0.0",
33
33
  "lodash.omitby": "^4.6.0",
@@ -43,14 +43,14 @@
43
43
  },
44
44
  "devDependencies": {
45
45
  "@faker-js/faker": "^7.6.0",
46
+ "@types/content-type": "^1.1.5",
46
47
  "@types/dicer": "^0.2.2",
47
48
  "@types/express": "^4.17.17",
48
- "@types/content-type": "^1.1.5",
49
49
  "cors": "^2.8.5",
50
50
  "ts-gems": "^2.3.0"
51
51
  },
52
52
  "type": "module",
53
- "types": "esm/index.d.ts",
53
+ "types": "types/index.d.ts",
54
54
  "exports": {
55
55
  ".": {
56
56
  "require": "./cjs/index.js",
@@ -68,6 +68,7 @@
68
68
  "cjs/",
69
69
  "esm/",
70
70
  "i18n/",
71
+ "types/",
71
72
  "LICENSE",
72
73
  "README.md"
73
74
  ],
@@ -1,3 +1,4 @@
1
+ import { AsyncEventEmitter } from 'strict-typed-events';
1
2
  import { ApiDocument, FallbackLng, I18n, LanguageResource } from '@opra/common';
2
3
  import { ILogger } from './interfaces/logger.interface.js';
3
4
  import { RequestContext } from './interfaces/request-context.interface.js';
@@ -8,6 +9,7 @@ export declare namespace OpraAdapter {
8
9
  interface Options {
9
10
  i18n?: I18n | I18nOptions | (() => Promise<I18n>);
10
11
  logger?: ILogger;
12
+ onRequest?: (ctx: RequestContext) => void | Promise<void>;
11
13
  }
12
14
  interface I18nOptions {
13
15
  /**
@@ -40,7 +42,7 @@ export declare namespace OpraAdapter {
40
42
  /**
41
43
  * @class OpraAdapter
42
44
  */
43
- export declare abstract class OpraAdapter {
45
+ export declare abstract class OpraAdapter extends AsyncEventEmitter {
44
46
  readonly api: ApiDocument;
45
47
  protected _internalDoc: ApiDocument;
46
48
  i18n: I18n;
@@ -57,6 +59,5 @@ export declare abstract class OpraAdapter {
57
59
  */
58
60
  close(): Promise<void>;
59
61
  protected executeRequest(context: RequestContext): Promise<void>;
60
- protected afterExecuteRequest(context: RequestContext): Promise<void>;
61
62
  protected _createI18n(options?: OpraAdapter.I18nOptions): Promise<I18n>;
62
63
  }
@@ -26,7 +26,7 @@ export declare abstract class OpraHttpAdapter extends OpraAdapter {
26
26
  protected handler(incoming: HttpRequestMessage, outgoing: HttpResponseMessage): Promise<void>;
27
27
  protected errorHandler(incoming: HttpRequestMessage, outgoing: HttpResponseMessage, errors: any[]): Promise<void>;
28
28
  protected log(logType: keyof ILogger, incoming: HttpRequestMessage, message: string, ...optionalParams: any[]): void;
29
- protected afterExecuteRequest(context: RequestContext): Promise<void>;
29
+ protected executeRequest(context: RequestContext): Promise<void>;
30
30
  /**
31
31
  *
32
32
  * @param incoming
@@ -3,5 +3,5 @@ export declare class MetadataResource {
3
3
  readonly document: ApiDocument;
4
4
  private _schema;
5
5
  constructor(document: ApiDocument);
6
- get(): import("../../build/common/esm/schema/document.interface").ApiDocument;
6
+ get(): import("@opra/common/types/schema/document.interface").ApiDocument;
7
7
  }
File without changes
File without changes
File without changes
File without changes