@opra/mongodb 0.22.0 → 0.23.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.
@@ -20,36 +20,36 @@ var MongoAdapter;
20
20
  function transformRequest(request) {
21
21
  const { resource } = request;
22
22
  if (resource instanceof common_1.Collection || resource instanceof common_1.Singleton) {
23
- const { args, operation } = request;
23
+ const { params, operation } = request;
24
24
  let options = {};
25
25
  let filter;
26
26
  if (operation === 'create' || operation === 'update' ||
27
27
  operation === 'get' || operation === 'findMany') {
28
- options.projection = MongoAdapter.transformProjection(resource.type, args);
28
+ options.projection = MongoAdapter.transformProjection(resource.type, params);
29
29
  }
30
30
  if (resource instanceof common_1.Collection &&
31
31
  (operation === 'delete' || operation === 'get' || operation === 'update')) {
32
- filter = MongoAdapter.transformKeyValues(resource, args.key);
32
+ filter = MongoAdapter.transformKeyValues(resource, request.key);
33
33
  }
34
- if (args.filter) {
35
- const f = MongoAdapter.transformFilter(args.filter);
34
+ if (params?.filter) {
35
+ const f = MongoAdapter.transformFilter(params.filter);
36
36
  filter = filter ? { $and: [filter, f] } : f;
37
37
  }
38
38
  if (operation === 'findMany') {
39
- options.sort = args.sort?.length ? args.sort : undefined;
40
- options.limit = args.limit;
41
- options.skip = args.skip;
42
- options.distinct = args.distinct;
43
- options.count = args.count;
39
+ options.sort = params?.sort;
40
+ options.limit = params?.limit;
41
+ options.skip = params?.skip;
42
+ options.distinct = params?.distinct;
43
+ options.count = params?.count;
44
44
  }
45
45
  options = (0, lodash_omitby_1.default)(options, lodash_isnil_1.default);
46
46
  switch (operation) {
47
47
  case 'create': {
48
48
  return {
49
49
  method: 'insertOne',
50
- data: args.data,
50
+ data: request.data,
51
51
  options,
52
- args: [args.data, options]
52
+ args: [request.data, options]
53
53
  };
54
54
  }
55
55
  case 'delete':
@@ -76,12 +76,11 @@ var MongoAdapter;
76
76
  options,
77
77
  args: [filter, options]
78
78
  };
79
- if (args.count)
80
- out.count = args.count;
79
+ out.count = params?.count;
81
80
  return out;
82
81
  }
83
82
  case 'update': {
84
- const update = MongoAdapter.transformPatch(args.data);
83
+ const update = MongoAdapter.transformPatch(request.data);
85
84
  filter = filter || {};
86
85
  return {
87
86
  method: 'updateOne',
@@ -92,7 +91,7 @@ var MongoAdapter;
92
91
  };
93
92
  }
94
93
  case 'updateMany': {
95
- const update = MongoAdapter.transformPatch(args.data);
94
+ const update = MongoAdapter.transformPatch(request.data);
96
95
  return {
97
96
  method: 'updateMany',
98
97
  filter,
@@ -103,7 +102,7 @@ var MongoAdapter;
103
102
  }
104
103
  }
105
104
  }
106
- throw new TypeError(`Unimplemented request kind (${request.resourceKind}.${request.operation})`);
105
+ throw new TypeError(`Unimplemented request kind (${request.resource.kind}.${request.operation})`);
107
106
  }
108
107
  MongoAdapter.transformRequest = transformRequest;
109
108
  })(MongoAdapter || (exports.MongoAdapter = MongoAdapter = {}));
@@ -6,9 +6,9 @@ const common_1 = require("@opra/common");
6
6
  const core_1 = require("@opra/core");
7
7
  const mongo_adapter_js_1 = require("./mongo-adapter.js");
8
8
  // noinspection TypeScriptAbstractClassConstructorCanBeMadeProtected
9
- class MongoCollectionResource extends core_1.CollectionResourceBase {
9
+ class MongoCollectionResource {
10
10
  constructor(options) {
11
- super(options);
11
+ this.defaultLimit = options?.defaultLimit || 100;
12
12
  }
13
13
  async create(ctx) {
14
14
  const prepared = mongo_adapter_js_1.MongoAdapter.transformRequest(ctx.request);
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MongoSingletonResource = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const common_1 = require("@opra/common");
6
+ const core_1 = require("@opra/core");
6
7
  const mongo_adapter_js_1 = require("./mongo-adapter.js");
7
8
  class MongoSingletonResource {
8
9
  constructor() {
@@ -5,9 +5,9 @@ const common_1 = require("@opra/common");
5
5
  function transformProjection(dataType, args) {
6
6
  const out = {};
7
7
  // omitExclusiveFields(dataType, out);
8
- const pick = args.pick && (0, common_1.pathToObjectTree)(args.include ? [...args.pick, ...args.include] : args.pick);
9
- const include = !args.pick && args.include && (0, common_1.pathToObjectTree)(args.include);
10
- const omit = args.omit && (0, common_1.pathToObjectTree)(args.omit);
8
+ const pick = args?.pick && (0, common_1.pathToObjectTree)(args.include ? [...args.pick, ...args.include] : args.pick);
9
+ const include = !args?.pick && args?.include && (0, common_1.pathToObjectTree)(args.include);
10
+ const omit = args?.omit && (0, common_1.pathToObjectTree)(args.omit);
11
11
  if (pick || include) {
12
12
  _transformInclusionProjection(dataType, out, pick, include, omit);
13
13
  }
@@ -16,36 +16,36 @@ export var MongoAdapter;
16
16
  function transformRequest(request) {
17
17
  const { resource } = request;
18
18
  if (resource instanceof Collection || resource instanceof Singleton) {
19
- const { args, operation } = request;
19
+ const { params, operation } = request;
20
20
  let options = {};
21
21
  let filter;
22
22
  if (operation === 'create' || operation === 'update' ||
23
23
  operation === 'get' || operation === 'findMany') {
24
- options.projection = MongoAdapter.transformProjection(resource.type, args);
24
+ options.projection = MongoAdapter.transformProjection(resource.type, params);
25
25
  }
26
26
  if (resource instanceof Collection &&
27
27
  (operation === 'delete' || operation === 'get' || operation === 'update')) {
28
- filter = MongoAdapter.transformKeyValues(resource, args.key);
28
+ filter = MongoAdapter.transformKeyValues(resource, request.key);
29
29
  }
30
- if (args.filter) {
31
- const f = MongoAdapter.transformFilter(args.filter);
30
+ if (params?.filter) {
31
+ const f = MongoAdapter.transformFilter(params.filter);
32
32
  filter = filter ? { $and: [filter, f] } : f;
33
33
  }
34
34
  if (operation === 'findMany') {
35
- options.sort = args.sort?.length ? args.sort : undefined;
36
- options.limit = args.limit;
37
- options.skip = args.skip;
38
- options.distinct = args.distinct;
39
- options.count = args.count;
35
+ options.sort = params?.sort;
36
+ options.limit = params?.limit;
37
+ options.skip = params?.skip;
38
+ options.distinct = params?.distinct;
39
+ options.count = params?.count;
40
40
  }
41
41
  options = omitBy(options, isNil);
42
42
  switch (operation) {
43
43
  case 'create': {
44
44
  return {
45
45
  method: 'insertOne',
46
- data: args.data,
46
+ data: request.data,
47
47
  options,
48
- args: [args.data, options]
48
+ args: [request.data, options]
49
49
  };
50
50
  }
51
51
  case 'delete':
@@ -72,12 +72,11 @@ export var MongoAdapter;
72
72
  options,
73
73
  args: [filter, options]
74
74
  };
75
- if (args.count)
76
- out.count = args.count;
75
+ out.count = params?.count;
77
76
  return out;
78
77
  }
79
78
  case 'update': {
80
- const update = MongoAdapter.transformPatch(args.data);
79
+ const update = MongoAdapter.transformPatch(request.data);
81
80
  filter = filter || {};
82
81
  return {
83
82
  method: 'updateOne',
@@ -88,7 +87,7 @@ export var MongoAdapter;
88
87
  };
89
88
  }
90
89
  case 'updateMany': {
91
- const update = MongoAdapter.transformPatch(args.data);
90
+ const update = MongoAdapter.transformPatch(request.data);
92
91
  return {
93
92
  method: 'updateMany',
94
93
  filter,
@@ -99,7 +98,7 @@ export var MongoAdapter;
99
98
  }
100
99
  }
101
100
  }
102
- throw new TypeError(`Unimplemented request kind (${request.resourceKind}.${request.operation})`);
101
+ throw new TypeError(`Unimplemented request kind (${request.resource.kind}.${request.operation})`);
103
102
  }
104
103
  MongoAdapter.transformRequest = transformRequest;
105
104
  })(MongoAdapter || (MongoAdapter = {}));
@@ -1,11 +1,11 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { Collection } from '@opra/common';
3
- import { CollectionResourceBase } from '@opra/core';
3
+ import { OperationContext } from '@opra/core';
4
4
  import { MongoAdapter } from './mongo-adapter.js';
5
5
  // noinspection TypeScriptAbstractClassConstructorCanBeMadeProtected
6
- export class MongoCollectionResource extends CollectionResourceBase {
6
+ export class MongoCollectionResource {
7
7
  constructor(options) {
8
- super(options);
8
+ this.defaultLimit = options?.defaultLimit || 100;
9
9
  }
10
10
  async create(ctx) {
11
11
  const prepared = MongoAdapter.transformRequest(ctx.request);
@@ -1,5 +1,6 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { Singleton } from '@opra/common';
3
+ import { OperationContext } from '@opra/core';
3
4
  import { MongoAdapter } from './mongo-adapter.js';
4
5
  export class MongoSingletonResource {
5
6
  constructor() {
@@ -2,9 +2,9 @@ import { ComplexType, pathToObjectTree } from '@opra/common';
2
2
  export default function transformProjection(dataType, args) {
3
3
  const out = {};
4
4
  // omitExclusiveFields(dataType, out);
5
- const pick = args.pick && pathToObjectTree(args.include ? [...args.pick, ...args.include] : args.pick);
6
- const include = !args.pick && args.include && pathToObjectTree(args.include);
7
- const omit = args.omit && pathToObjectTree(args.omit);
5
+ const pick = args?.pick && pathToObjectTree(args.include ? [...args.pick, ...args.include] : args.pick);
6
+ const include = !args?.pick && args?.include && pathToObjectTree(args.include);
7
+ const omit = args?.omit && pathToObjectTree(args.omit);
8
8
  if (pick || include) {
9
9
  _transformInclusionProjection(dataType, out, pick, include, omit);
10
10
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opra/mongodb",
3
- "version": "0.22.0",
3
+ "version": "0.23.0",
4
4
  "description": "Opra MongoDB adapter package",
5
5
  "author": "Panates",
6
6
  "license": "MIT",
@@ -33,8 +33,8 @@
33
33
  "ts-gems": "^2.4.0"
34
34
  },
35
35
  "peerDependencies": {
36
- "@opra/common": "^0.22.0",
37
- "@opra/core": "^0.22.0",
36
+ "@opra/common": "^0.23.0",
37
+ "@opra/core": "^0.23.0",
38
38
  "mongodb": ">=4.x.x"
39
39
  },
40
40
  "type": "module",
@@ -1,20 +1,22 @@
1
1
  import mongodb from 'mongodb';
2
2
  import { Maybe } from 'ts-gems';
3
- import { PartialOutput } from '@opra/common';
4
- import { CollectionResourceBase, RequestContext } from '@opra/core';
3
+ import { Collection, CollectionResource, PartialOutput } from '@opra/common';
4
+ import { OperationContext } from '@opra/core';
5
5
  import { MongoEntityService } from './mongo-entity-service.js';
6
6
  export declare namespace MongoCollectionResource {
7
- interface Options extends CollectionResourceBase.Options {
7
+ interface Options {
8
+ defaultLimit?: number;
8
9
  }
9
10
  }
10
- export declare abstract class MongoCollectionResource<T extends mongodb.Document, TOutput = PartialOutput<T>> extends CollectionResourceBase {
11
+ export declare abstract class MongoCollectionResource<T extends mongodb.Document> implements CollectionResource<T> {
12
+ defaultLimit?: number;
11
13
  constructor(options?: MongoCollectionResource.Options);
12
- create(ctx: RequestContext): Promise<TOutput>;
13
- delete(ctx: RequestContext): Promise<number>;
14
- deleteMany(ctx: RequestContext): Promise<number>;
15
- get(ctx: RequestContext): Promise<Maybe<TOutput>>;
16
- update(ctx: RequestContext): Promise<Maybe<TOutput>>;
17
- updateMany(ctx: RequestContext): Promise<number>;
18
- findMany(ctx: RequestContext): Promise<TOutput[]>;
19
- abstract getService(ctx: RequestContext): MongoEntityService<T, TOutput> | Promise<MongoEntityService<T, TOutput>>;
14
+ create?(ctx: Collection.Create.Context): Promise<PartialOutput<T>>;
15
+ delete?(ctx: OperationContext): Promise<number>;
16
+ deleteMany?(ctx: OperationContext): Promise<number>;
17
+ get?(ctx: OperationContext): Promise<Maybe<PartialOutput<T>>>;
18
+ update?(ctx: OperationContext): Promise<Maybe<PartialOutput<T>>>;
19
+ updateMany?(ctx: OperationContext): Promise<number>;
20
+ findMany?(ctx: OperationContext): Promise<PartialOutput<T>[]>;
21
+ abstract getService(ctx: OperationContext): MongoEntityService<T> | Promise<MongoEntityService<T>>;
20
22
  }
@@ -1,15 +1,15 @@
1
1
  import mongodb, { UpdateFilter } from 'mongodb';
2
2
  import { StrictOmit } from 'ts-gems';
3
- import { PartialOutput, RequestContext } from '@opra/core';
3
+ import { OperationContext, PartialOutput } from '@opra/core';
4
4
  export declare namespace MongoEntityService {
5
5
  interface Options {
6
6
  db?: mongodb.Db;
7
7
  defaultLimit?: number;
8
8
  }
9
9
  }
10
- export declare class MongoEntityService<T extends mongodb.Document, TOutput = PartialOutput<T>> {
10
+ export declare class MongoEntityService<T extends mongodb.Document> {
11
11
  protected _collectionName: string;
12
- context: RequestContext;
12
+ context: OperationContext;
13
13
  defaultLimit: number;
14
14
  db?: mongodb.Db;
15
15
  session?: mongodb.ClientSession;
@@ -18,16 +18,16 @@ export declare class MongoEntityService<T extends mongodb.Document, TOutput = Pa
18
18
  count(filter?: mongodb.Filter<T>, options?: mongodb.CountOptions): Promise<number>;
19
19
  deleteOne(filter?: mongodb.Filter<T>, options?: mongodb.DeleteOptions): Promise<number>;
20
20
  deleteMany(filter?: mongodb.Filter<T>, options?: mongodb.DeleteOptions): Promise<number>;
21
- findOne(filter: mongodb.Filter<T>, options?: mongodb.FindOptions): Promise<TOutput | undefined>;
22
- find(filter: mongodb.Filter<T>, options?: mongodb.FindOptions): Promise<TOutput[]>;
23
- insertOne(doc: mongodb.OptionalUnlessRequiredId<T>, options?: mongodb.InsertOneOptions): Promise<TOutput>;
24
- updateOne(filter: mongodb.Filter<T>, doc: UpdateFilter<T> | Partial<T>, options?: mongodb.UpdateOptions): Promise<TOutput | undefined>;
21
+ findOne(filter: mongodb.Filter<T>, options?: mongodb.FindOptions): Promise<PartialOutput<T> | undefined>;
22
+ find(filter: mongodb.Filter<T>, options?: mongodb.FindOptions): Promise<PartialOutput<T>[]>;
23
+ insertOne(doc: mongodb.OptionalUnlessRequiredId<T>, options?: mongodb.InsertOneOptions): Promise<PartialOutput<T>>;
24
+ updateOne(filter: mongodb.Filter<T>, doc: UpdateFilter<T> | Partial<T>, options?: mongodb.UpdateOptions): Promise<PartialOutput<T> | undefined>;
25
25
  updateMany(filter: mongodb.Filter<T>, doc: UpdateFilter<T> | Partial<T>, options?: StrictOmit<mongodb.UpdateOptions, 'upsert'>): Promise<number>;
26
- with(context: RequestContext, db?: mongodb.Db, session?: mongodb.ClientSession): MongoEntityService<T, TOutput>;
26
+ with(context: OperationContext, db?: mongodb.Db, session?: mongodb.ClientSession): MongoEntityService<T>;
27
27
  protected _onError(error: unknown): Promise<void>;
28
28
  protected getDatabase(): mongodb.Db | Promise<mongodb.Db>;
29
29
  protected getCollection(db: mongodb.Db): Promise<mongodb.Collection<T>>;
30
30
  protected getCollectionName(): string;
31
31
  protected onError?(error: unknown): void | Promise<void>;
32
- protected transformData?(row: TOutput): TOutput;
32
+ protected transformData?(row: PartialOutput<T>): PartialOutput<T>;
33
33
  }
@@ -1,13 +1,13 @@
1
1
  import mongodb from 'mongodb';
2
2
  import { Maybe } from 'ts-gems';
3
3
  import { PartialOutput } from '@opra/common';
4
- import { RequestContext } from '@opra/core';
4
+ import { OperationContext } from '@opra/core';
5
5
  import { MongoEntityService } from './mongo-entity-service.js';
6
- export declare abstract class MongoSingletonResource<T extends mongodb.Document, TOutput = PartialOutput<T>> {
6
+ export declare abstract class MongoSingletonResource<T extends mongodb.Document> {
7
7
  defaultLimit: number;
8
- create(ctx: RequestContext): Promise<TOutput>;
9
- delete(ctx: RequestContext): Promise<number>;
10
- get(ctx: RequestContext): Promise<Maybe<TOutput>>;
11
- update(ctx: RequestContext): Promise<Maybe<TOutput>>;
12
- abstract getService(ctx: RequestContext): MongoEntityService<T, TOutput> | Promise<MongoEntityService<T, TOutput>>;
8
+ create?(ctx: OperationContext): Promise<PartialOutput<T>>;
9
+ delete?(ctx: OperationContext): Promise<number>;
10
+ get?(ctx: OperationContext): Promise<Maybe<PartialOutput<T>>>;
11
+ update?(ctx: OperationContext): Promise<Maybe<PartialOutput<T>>>;
12
+ abstract getService(ctx: OperationContext): MongoEntityService<T> | Promise<MongoEntityService<T>>;
13
13
  }
@@ -1,6 +1,6 @@
1
1
  import mongodb from 'mongodb';
2
2
  import { ComplexType } from '@opra/common';
3
- export default function transformProjection(dataType: ComplexType, args: {
3
+ export default function transformProjection(dataType: ComplexType, args?: {
4
4
  pick?: string[];
5
5
  omit?: string[];
6
6
  include?: string[];