@loopback/rest-crud 0.13.1 → 0.15.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.
package/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) IBM Corp. 2019.
1
+ Copyright (c) IBM Corp. and LoopBack contributors 2019.
2
2
  Node module: @loopback/rest-crud
3
3
  This project is licensed under the MIT License, full text below.
4
4
 
package/README.md CHANGED
@@ -43,7 +43,7 @@ export class TryApplication extends BootMixin(
43
43
 
44
44
  Create a new file for the configuration, e.g.
45
45
  `src/model-endpoints/product.rest-config.ts` that defines the `model`,
46
- `pattern`, `dataSource`, and `basePath` properties:
46
+ `pattern`, `dataSource`, `basePath`, and `readonly` properties:
47
47
 
48
48
  ```ts
49
49
  import {ModelCrudRestApiConfig} from '@loopback/rest-crud';
@@ -54,6 +54,7 @@ module.exports = <ModelCrudRestApiConfig>{
54
54
  pattern: 'CrudRest', // make sure to use this pattern
55
55
  dataSource: 'db',
56
56
  basePath: '/products',
57
+ readonly: false,
57
58
  };
58
59
  ```
59
60
 
@@ -3,6 +3,10 @@ import { ApplicationWithRepositories } from '@loopback/repository';
3
3
  import { Model } from '@loopback/rest';
4
4
  export interface ModelCrudRestApiConfig extends ModelApiConfig {
5
5
  basePath: string;
6
+ /**
7
+ * If true, the generated controller only has find and count APIs
8
+ */
9
+ readonly?: boolean;
6
10
  }
7
11
  export declare class CrudRestApiBuilder implements ModelApiBuilder {
8
12
  readonly pattern: string;
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright IBM Corp. 2020. All Rights Reserved.
2
+ // Copyright IBM Corp. and LoopBack contributors 2020. All Rights Reserved.
3
3
  // Node module: @loopback/rest-crud
4
4
  // This file is licensed under the MIT License.
5
5
  // License text available at https://opensource.org/licenses/MIT
@@ -9,7 +9,7 @@ const tslib_1 = require("tslib");
9
9
  const core_1 = require("@loopback/core");
10
10
  const model_api_builder_1 = require("@loopback/model-api-builder");
11
11
  const repository_1 = require("@loopback/repository");
12
- const debug_1 = (0, tslib_1.__importDefault)(require("debug"));
12
+ const debug_1 = tslib_1.__importDefault(require("debug"));
13
13
  const _1 = require(".");
14
14
  const debug = (0, debug_1.default)('loopback:boot:crud-rest');
15
15
  let CrudRestApiBuilder = class CrudRestApiBuilder {
@@ -43,7 +43,7 @@ let CrudRestApiBuilder = class CrudRestApiBuilder {
43
43
  return Promise.resolve();
44
44
  }
45
45
  };
46
- CrudRestApiBuilder = (0, tslib_1.__decorate)([
46
+ CrudRestApiBuilder = tslib_1.__decorate([
47
47
  (0, core_1.injectable)(model_api_builder_1.asModelApiBuilder)
48
48
  ], CrudRestApiBuilder);
49
49
  exports.CrudRestApiBuilder = CrudRestApiBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"crud-rest.api-builder.js","sourceRoot":"","sources":["../src/crud-rest.api-builder.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,mCAAmC;AACnC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,yCAMwB;AACxB,mEAIqC;AACrC,qDAM8B;AAE9B,+DAAiC;AACjC,wBAA2C;AAE3C,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,yBAAyB,CAAC,CAAC;AAQtD,IAAa,kBAAkB,GAA/B,MAAa,kBAAkB;IAA/B;QACW,YAAO,GAAW,UAAU,CAAC;IAwCxC,CAAC;IAtCC,KAAK,CACH,WAAwC,EACxC,UAA6C,EAC7C,GAAmB;QAEnB,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC;QAClC,MAAM,MAAM,GAAG,GAA6B,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACpB,MAAM,IAAI,KAAK,CACb,gEAAgE,SAAS,GAAG,CAC7E,CAAC;SACH;QAED,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,YAAY,mBAAM,CAAC,EAAE;YAC7C,MAAM,IAAI,KAAK,CACb,0EAA0E,SAAS,4BAA4B,CAChH,CAAC;SACH;QACD,MAAM,WAAW,GAAG,UAAiD,CAAC;QAEtE,IAAI,eAAe,GAAG,gBAAgB,WAAW,CAAC,IAAI,YAAY,CAAC;QAEnE,IAAI,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;YACxC,KAAK,CAAC,0CAA0C,EAAE,eAAe,CAAC,CAAC;SACpE;aAAM;YACL,kCAAkC;YAClC,MAAM,eAAe,GAAG,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACjE,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YACxC,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC;YACvC,KAAK,CAAC,6BAA6B,EAAE,eAAe,CAAC,CAAC;SACvD;QAED,MAAM,eAAe,GAAG,uBAAuB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACrE,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACxC,KAAK,CAAC,6BAA6B,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAE3D,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF,CAAA;AAzCY,kBAAkB;IAD9B,IAAA,iBAAU,EAAC,qCAAiB,CAAC;GACjB,kBAAkB,CAyC9B;AAzCY,gDAAkB;AA2C/B;;;;;GAKG;AACH,SAAS,mBAAmB,CAC1B,WAAgD,EAChD,MAA8B;IAE9B,MAAM,eAAe,GAAG,IAAA,sCAAyB,EAAC,WAAW,CAAC,CAAC;IAE/D,yBAAyB,CACvB,eAAe,EACf,eAAe,MAAM,CAAC,UAAU,EAAE,CACnC,CAAC;IAEF,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,SAAS,uBAAuB,CAC9B,WAAgD,EAChD,MAA8B;IAE9B,MAAM,eAAe,GAAG,IAAA,2BAAwB,EAC9C,WAAW;IACX,mEAAmE;IACnE,yDAAyD;IACzD,MAAM,CACP,CAAC;IAEF,yBAAyB,CACvB,eAAe,EACf,gBAAgB,WAAW,CAAC,IAAI,YAAY,CAC7C,CAAC;IAEF,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,yBAAyB,CAChC,IAAoB,EACpB,GAAoB;IAEpB,IAAA,aAAM,EAAC,GAAG,CAAC,CACT,IAAI,EACJ,SAAS,EAAE,qBAAqB;IAChC,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"crud-rest.api-builder.js","sourceRoot":"","sources":["../src/crud-rest.api-builder.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,mCAAmC;AACnC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,yCAMwB;AACxB,mEAIqC;AACrC,qDAM8B;AAE9B,0DAAiC;AACjC,wBAA2C;AAE3C,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,yBAAyB,CAAC,CAAC;AAYtD,IAAa,kBAAkB,GAA/B,MAAa,kBAAkB;IAA/B;QACW,YAAO,GAAW,UAAU,CAAC;IAwCxC,CAAC;IAtCC,KAAK,CACH,WAAwC,EACxC,UAA6C,EAC7C,GAAmB;QAEnB,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC;QAClC,MAAM,MAAM,GAAG,GAA6B,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACpB,MAAM,IAAI,KAAK,CACb,gEAAgE,SAAS,GAAG,CAC7E,CAAC;SACH;QAED,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,YAAY,mBAAM,CAAC,EAAE;YAC7C,MAAM,IAAI,KAAK,CACb,0EAA0E,SAAS,4BAA4B,CAChH,CAAC;SACH;QACD,MAAM,WAAW,GAAG,UAAiD,CAAC;QAEtE,IAAI,eAAe,GAAG,gBAAgB,WAAW,CAAC,IAAI,YAAY,CAAC;QAEnE,IAAI,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;YACxC,KAAK,CAAC,0CAA0C,EAAE,eAAe,CAAC,CAAC;SACpE;aAAM;YACL,kCAAkC;YAClC,MAAM,eAAe,GAAG,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACjE,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YACxC,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC;YACvC,KAAK,CAAC,6BAA6B,EAAE,eAAe,CAAC,CAAC;SACvD;QAED,MAAM,eAAe,GAAG,uBAAuB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACrE,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACxC,KAAK,CAAC,6BAA6B,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAE3D,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF,CAAA;AAzCY,kBAAkB;IAD9B,IAAA,iBAAU,EAAC,qCAAiB,CAAC;GACjB,kBAAkB,CAyC9B;AAzCY,gDAAkB;AA2C/B;;;;;GAKG;AACH,SAAS,mBAAmB,CAC1B,WAAgD,EAChD,MAA8B;IAE9B,MAAM,eAAe,GAAG,IAAA,sCAAyB,EAAC,WAAW,CAAC,CAAC;IAE/D,yBAAyB,CACvB,eAAe,EACf,eAAe,MAAM,CAAC,UAAU,EAAE,CACnC,CAAC;IAEF,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,SAAS,uBAAuB,CAC9B,WAAgD,EAChD,MAA8B;IAE9B,MAAM,eAAe,GAAG,IAAA,2BAAwB,EAC9C,WAAW;IACX,mEAAmE;IACnE,yDAAyD;IACzD,MAAM,CACP,CAAC;IAEF,yBAAyB,CACvB,eAAe,EACf,gBAAgB,WAAW,CAAC,IAAI,YAAY,CAC7C,CAAC;IAEF,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,yBAAyB,CAChC,IAAoB,EACpB,GAAoB;IAEpB,IAAA,aAAM,EAAC,GAAG,CAAC,CACT,IAAI,EACJ,SAAS,EAAE,qBAAqB;IAChC,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright IBM Corp. 2019,2020. All Rights Reserved.
2
+ // Copyright IBM Corp. and LoopBack contributors 2019,2020. All Rights Reserved.
3
3
  // Node module: @loopback/rest-crud
4
4
  // This file is licensed under the MIT License.
5
5
  // License text available at https://opensource.org/licenses/MIT
@@ -1 +1 @@
1
- {"version":3,"file":"crud-rest.component.js","sourceRoot":"","sources":["../src/crud-rest.component.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,mCAAmC;AACnC,+CAA+C;AAC/C,gEAAgE;;;AAEhE,yCAA0E;AAC1E,mEAA2D;AAE3D,MAAa,iBAAiB;IAA9B;QACE,aAAQ,GAAc,CAAC,IAAA,6BAAsB,EAAC,0CAAkB,CAAC,CAAC,CAAC;IACrE,CAAC;CAAA;AAFD,8CAEC"}
1
+ {"version":3,"file":"crud-rest.component.js","sourceRoot":"","sources":["../src/crud-rest.component.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,mCAAmC;AACnC,+CAA+C;AAC/C,gEAAgE;;;AAEhE,yCAA0E;AAC1E,mEAA2D;AAE3D,MAAa,iBAAiB;IAA9B;QACE,aAAQ,GAAc,CAAC,IAAA,6BAAsB,EAAC,0CAAkB,CAAC,CAAC,CAAC;IACrE,CAAC;CAAA;AAFD,8CAEC"}
@@ -1,4 +1,4 @@
1
- import { Entity, EntityCrudRepository } from '@loopback/repository';
1
+ import { Entity, EntityCrudRepository, Filter } from '@loopback/repository';
2
2
  /**
3
3
  * This interface describes prototype members of the controller class
4
4
  * returned by `defineCrudRestController`.
@@ -9,10 +9,10 @@ export interface CrudRestController<T extends Entity, IdType, IdName extends key
9
9
  */
10
10
  readonly repository: EntityCrudRepository<T, IdType>;
11
11
  /**
12
- * Implementation of the endpoint `POST /`.
13
- * @param data Model data
12
+ * Implementation of the endpoint `GET /`.
13
+ * @param filter Filter
14
14
  */
15
- create(data: Omit<T, IdName>): Promise<T>;
15
+ find(filter?: Filter<T>): Promise<(T & Relations)[]>;
16
16
  }
17
17
  /**
18
18
  * Constructor of the controller class returned by `defineCrudRestController`.
@@ -28,6 +28,10 @@ export interface CrudRestControllerOptions {
28
28
  * The base path where to "mount" the controller.
29
29
  */
30
30
  basePath: string;
31
+ /**
32
+ * Whether to generate readonly APIs
33
+ */
34
+ readonly?: boolean;
31
35
  }
32
36
  /**
33
37
  * Create (define) a CRUD Controller class for the given model.
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright IBM Corp. 2019,2020. All Rights Reserved.
2
+ // Copyright IBM Corp. and LoopBack contributors 2019,2020. All Rights Reserved.
3
3
  // Node module: @loopback/rest-crud
4
4
  // This file is licensed under the MIT License.
5
5
  // License text available at https://opensource.org/licenses/MIT
@@ -8,7 +8,7 @@ exports.defineCrudRestController = void 0;
8
8
  const tslib_1 = require("tslib");
9
9
  const repository_1 = require("@loopback/repository");
10
10
  const rest_1 = require("@loopback/rest");
11
- const assert_1 = (0, tslib_1.__importDefault)(require("assert"));
11
+ const assert_1 = tslib_1.__importDefault(require("assert"));
12
12
  /**
13
13
  * Create (define) a CRUD Controller class for the given model.
14
14
  *
@@ -40,16 +40,10 @@ function defineCrudRestController(modelCtor, options) {
40
40
  in: 'path',
41
41
  schema: getIdSchema(modelCtor),
42
42
  };
43
- let CrudRestControllerImpl = class CrudRestControllerImpl {
43
+ let ReadonlyRestControllerImpl = class ReadonlyRestControllerImpl {
44
44
  constructor(repository) {
45
45
  this.repository = repository;
46
46
  }
47
- async create(data) {
48
- return this.repository.create(
49
- // FIXME(bajtos) Improve repository API to support this use case
50
- // with no explicit type-casts required
51
- data);
52
- }
53
47
  async find(filter) {
54
48
  return this.repository.find(filter);
55
49
  }
@@ -59,6 +53,54 @@ function defineCrudRestController(modelCtor, options) {
59
53
  async count(where) {
60
54
  return this.repository.count(where);
61
55
  }
56
+ };
57
+ tslib_1.__decorate([
58
+ (0, rest_1.get)('/', {
59
+ ...response.array(200, `Array of ${modelName} instances`, modelCtor, {
60
+ includeRelations: true,
61
+ }),
62
+ }),
63
+ tslib_1.__param(0, rest_1.param.filter(modelCtor)),
64
+ tslib_1.__metadata("design:type", Function),
65
+ tslib_1.__metadata("design:paramtypes", [Object]),
66
+ tslib_1.__metadata("design:returntype", Promise)
67
+ ], ReadonlyRestControllerImpl.prototype, "find", null);
68
+ tslib_1.__decorate([
69
+ (0, rest_1.get)('/{id}', {
70
+ ...response.model(200, `${modelName} instance`, modelCtor, {
71
+ includeRelations: true,
72
+ }),
73
+ }),
74
+ tslib_1.__param(0, (0, rest_1.param)(idPathParam)),
75
+ tslib_1.__param(1, rest_1.param.query.object('filter', (0, rest_1.getFilterSchemaFor)(modelCtor, { exclude: 'where' }))),
76
+ tslib_1.__metadata("design:type", Function),
77
+ tslib_1.__metadata("design:paramtypes", [Object, Object]),
78
+ tslib_1.__metadata("design:returntype", Promise)
79
+ ], ReadonlyRestControllerImpl.prototype, "findById", null);
80
+ tslib_1.__decorate([
81
+ (0, rest_1.get)('/count', {
82
+ ...response(200, `${modelName} count`, { schema: repository_1.CountSchema }),
83
+ }),
84
+ tslib_1.__param(0, rest_1.param.where(modelCtor)),
85
+ tslib_1.__metadata("design:type", Function),
86
+ tslib_1.__metadata("design:paramtypes", [Object]),
87
+ tslib_1.__metadata("design:returntype", Promise)
88
+ ], ReadonlyRestControllerImpl.prototype, "count", null);
89
+ ReadonlyRestControllerImpl = tslib_1.__decorate([
90
+ (0, rest_1.api)({ basePath: options.basePath, paths: {} }),
91
+ tslib_1.__metadata("design:paramtypes", [Object])
92
+ ], ReadonlyRestControllerImpl);
93
+ let CrudRestControllerImpl = class CrudRestControllerImpl extends ReadonlyRestControllerImpl {
94
+ constructor(repository) {
95
+ super(repository);
96
+ this.repository = repository;
97
+ }
98
+ async create(data) {
99
+ return this.repository.create(
100
+ // FIXME(bajtos) Improve repository API to support this use case
101
+ // with no explicit type-casts required
102
+ data);
103
+ }
62
104
  async updateAll(data, where) {
63
105
  return this.repository.updateAll(
64
106
  // FIXME(bajtos) Improve repository API to support this use case
@@ -78,104 +120,72 @@ function defineCrudRestController(modelCtor, options) {
78
120
  await this.repository.deleteById(id);
79
121
  }
80
122
  };
81
- (0, tslib_1.__decorate)([
123
+ tslib_1.__decorate([
82
124
  (0, rest_1.post)('/', {
83
125
  ...response.model(200, `${modelName} instance created`, modelCtor),
84
126
  }),
85
- (0, tslib_1.__param)(0, body(modelCtor, {
127
+ tslib_1.__param(0, body(modelCtor, {
86
128
  title: `New${modelName}`,
87
129
  exclude: modelCtor.getIdProperties(),
88
130
  })),
89
- (0, tslib_1.__metadata)("design:type", Function),
90
- (0, tslib_1.__metadata)("design:paramtypes", [Object]),
91
- (0, tslib_1.__metadata)("design:returntype", Promise)
131
+ tslib_1.__metadata("design:type", Function),
132
+ tslib_1.__metadata("design:paramtypes", [Object]),
133
+ tslib_1.__metadata("design:returntype", Promise)
92
134
  ], CrudRestControllerImpl.prototype, "create", null);
93
- (0, tslib_1.__decorate)([
94
- (0, rest_1.get)('/', {
95
- ...response.array(200, `Array of ${modelName} instances`, modelCtor, {
96
- includeRelations: true,
97
- }),
98
- }),
99
- (0, tslib_1.__param)(0, rest_1.param.filter(modelCtor)),
100
- (0, tslib_1.__metadata)("design:type", Function),
101
- (0, tslib_1.__metadata)("design:paramtypes", [Object]),
102
- (0, tslib_1.__metadata)("design:returntype", Promise)
103
- ], CrudRestControllerImpl.prototype, "find", null);
104
- (0, tslib_1.__decorate)([
105
- (0, rest_1.get)('/{id}', {
106
- ...response.model(200, `${modelName} instance`, modelCtor, {
107
- includeRelations: true,
108
- }),
109
- }),
110
- (0, tslib_1.__param)(0, (0, rest_1.param)(idPathParam)),
111
- (0, tslib_1.__param)(1, rest_1.param.query.object('filter', (0, rest_1.getFilterSchemaFor)(modelCtor, { exclude: 'where' }))),
112
- (0, tslib_1.__metadata)("design:type", Function),
113
- (0, tslib_1.__metadata)("design:paramtypes", [Object, Object]),
114
- (0, tslib_1.__metadata)("design:returntype", Promise)
115
- ], CrudRestControllerImpl.prototype, "findById", null);
116
- (0, tslib_1.__decorate)([
117
- (0, rest_1.get)('/count', {
118
- ...response(200, `${modelName} count`, { schema: repository_1.CountSchema }),
119
- }),
120
- (0, tslib_1.__param)(0, rest_1.param.where(modelCtor)),
121
- (0, tslib_1.__metadata)("design:type", Function),
122
- (0, tslib_1.__metadata)("design:paramtypes", [Object]),
123
- (0, tslib_1.__metadata)("design:returntype", Promise)
124
- ], CrudRestControllerImpl.prototype, "count", null);
125
- (0, tslib_1.__decorate)([
135
+ tslib_1.__decorate([
126
136
  (0, rest_1.patch)('/', {
127
137
  ...response(200, `Count of ${modelName} models updated`, {
128
138
  schema: repository_1.CountSchema,
129
139
  }),
130
140
  }),
131
- (0, tslib_1.__param)(0, body(modelCtor, { partial: true })),
132
- (0, tslib_1.__param)(1, rest_1.param.where(modelCtor)),
133
- (0, tslib_1.__metadata)("design:type", Function),
134
- (0, tslib_1.__metadata)("design:paramtypes", [Object, Object]),
135
- (0, tslib_1.__metadata)("design:returntype", Promise)
141
+ tslib_1.__param(0, body(modelCtor, { partial: true })),
142
+ tslib_1.__param(1, rest_1.param.where(modelCtor)),
143
+ tslib_1.__metadata("design:type", Function),
144
+ tslib_1.__metadata("design:paramtypes", [Object, Object]),
145
+ tslib_1.__metadata("design:returntype", Promise)
136
146
  ], CrudRestControllerImpl.prototype, "updateAll", null);
137
- (0, tslib_1.__decorate)([
147
+ tslib_1.__decorate([
138
148
  (0, rest_1.patch)('/{id}', {
139
149
  responses: {
140
150
  '204': { description: `${modelName} was updated` },
141
151
  },
142
152
  }),
143
- (0, tslib_1.__param)(0, (0, rest_1.param)(idPathParam)),
144
- (0, tslib_1.__param)(1, body(modelCtor, { partial: true })),
145
- (0, tslib_1.__metadata)("design:type", Function),
146
- (0, tslib_1.__metadata)("design:paramtypes", [Object, Object]),
147
- (0, tslib_1.__metadata)("design:returntype", Promise)
153
+ tslib_1.__param(0, (0, rest_1.param)(idPathParam)),
154
+ tslib_1.__param(1, body(modelCtor, { partial: true })),
155
+ tslib_1.__metadata("design:type", Function),
156
+ tslib_1.__metadata("design:paramtypes", [Object, Object]),
157
+ tslib_1.__metadata("design:returntype", Promise)
148
158
  ], CrudRestControllerImpl.prototype, "updateById", null);
149
- (0, tslib_1.__decorate)([
159
+ tslib_1.__decorate([
150
160
  (0, rest_1.put)('/{id}', {
151
161
  responses: {
152
162
  '204': { description: `${modelName} was updated` },
153
163
  },
154
164
  }),
155
- (0, tslib_1.__param)(0, (0, rest_1.param)(idPathParam)),
156
- (0, tslib_1.__param)(1, body(modelCtor)),
157
- (0, tslib_1.__metadata)("design:type", Function),
158
- (0, tslib_1.__metadata)("design:paramtypes", [Object, Object]),
159
- (0, tslib_1.__metadata)("design:returntype", Promise)
165
+ tslib_1.__param(0, (0, rest_1.param)(idPathParam)),
166
+ tslib_1.__param(1, body(modelCtor)),
167
+ tslib_1.__metadata("design:type", Function),
168
+ tslib_1.__metadata("design:paramtypes", [Object, Object]),
169
+ tslib_1.__metadata("design:returntype", Promise)
160
170
  ], CrudRestControllerImpl.prototype, "replaceById", null);
161
- (0, tslib_1.__decorate)([
171
+ tslib_1.__decorate([
162
172
  (0, rest_1.del)('/{id}', {
163
173
  responses: {
164
174
  '204': { description: `${modelName} was deleted` },
165
175
  },
166
176
  }),
167
- (0, tslib_1.__param)(0, (0, rest_1.param)(idPathParam)),
168
- (0, tslib_1.__metadata)("design:type", Function),
169
- (0, tslib_1.__metadata)("design:paramtypes", [Object]),
170
- (0, tslib_1.__metadata)("design:returntype", Promise)
177
+ tslib_1.__param(0, (0, rest_1.param)(idPathParam)),
178
+ tslib_1.__metadata("design:type", Function),
179
+ tslib_1.__metadata("design:paramtypes", [Object]),
180
+ tslib_1.__metadata("design:returntype", Promise)
171
181
  ], CrudRestControllerImpl.prototype, "deleteById", null);
172
- CrudRestControllerImpl = (0, tslib_1.__decorate)([
182
+ CrudRestControllerImpl = tslib_1.__decorate([
173
183
  (0, rest_1.api)({ basePath: options.basePath, paths: {} }),
174
- (0, tslib_1.__metadata)("design:paramtypes", [Object])
184
+ tslib_1.__metadata("design:paramtypes", [Object])
175
185
  ], CrudRestControllerImpl);
176
186
  const controllerName = modelName + 'Controller';
177
187
  const defineNamedController = new Function('controllerClass', `return class ${controllerName} extends controllerClass {}`);
178
- const controller = defineNamedController(CrudRestControllerImpl);
188
+ const controller = defineNamedController(options.readonly ? ReadonlyRestControllerImpl : CrudRestControllerImpl);
179
189
  assert_1.default.equal(controller.name, controllerName);
180
190
  return controller;
181
191
  }
@@ -184,7 +194,7 @@ function getIdSchema(modelCtor) {
184
194
  var _a;
185
195
  const idProp = modelCtor.getIdProperties()[0];
186
196
  const modelSchema = (0, rest_1.jsonToSchemaObject)((0, rest_1.getJsonSchema)(modelCtor));
187
- return ((_a = modelSchema.properties) !== null && _a !== void 0 ? _a : {})[idProp];
197
+ return (_a = modelSchema.properties) === null || _a === void 0 ? void 0 : _a[idProp];
188
198
  }
189
199
  // Temporary implementation of a short-hand version of `@requestBody`
190
200
  // See https://github.com/loopbackio/loopback-next/issues/3493
@@ -1 +1 @@
1
- {"version":3,"file":"crud-rest.controller.js","sourceRoot":"","sources":["../src/crud-rest.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crud-rest.controller.js","sourceRoot":"","sources":["../src/crud-rest.controller.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright IBM Corp. 2019,2020. All Rights Reserved.
2
+ // Copyright IBM Corp. and LoopBack contributors 2019,2020. All Rights Reserved.
3
3
  // Node module: @loopback/rest-crud
4
4
  // This file is licensed under the MIT License.
5
5
  // License text available at https://opensource.org/licenses/MIT
@@ -18,7 +18,7 @@ const tslib_1 = require("tslib");
18
18
  // Re-export `defineCrudRepositoryClass` for backward-compatibility
19
19
  var repository_1 = require("@loopback/repository");
20
20
  Object.defineProperty(exports, "defineCrudRepositoryClass", { enumerable: true, get: function () { return repository_1.defineCrudRepositoryClass; } });
21
- (0, tslib_1.__exportStar)(require("./crud-rest.api-builder"), exports);
22
- (0, tslib_1.__exportStar)(require("./crud-rest.component"), exports);
23
- (0, tslib_1.__exportStar)(require("./crud-rest.controller"), exports);
21
+ tslib_1.__exportStar(require("./crud-rest.api-builder"), exports);
22
+ tslib_1.__exportStar(require("./crud-rest.component"), exports);
23
+ tslib_1.__exportStar(require("./crud-rest.controller"), exports);
24
24
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,mCAAmC;AACnC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE;;;;;;;;GAQG;AAEH,mEAAmE;AACnE,mDAA+D;AAAvD,uHAAA,yBAAyB,OAAA;AACjC,uEAAwC;AACxC,qEAAsC;AACtC,sEAAuC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,mCAAmC;AACnC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE;;;;;;;;GAQG;AAEH,mEAAmE;AACnE,mDAA+D;AAAvD,uHAAA,yBAAyB,OAAA;AACjC,kEAAwC;AACxC,gEAAsC;AACtC,iEAAuC"}
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@loopback/rest-crud",
3
3
  "description": "REST API controller implementing default CRUD semantics",
4
- "version": "0.13.1",
4
+ "version": "0.15.0",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
- "author": "IBM Corp.",
9
- "copyright.owner": "IBM Corp.",
8
+ "author": "IBM Corp. and LoopBack contributors",
9
+ "copyright.owner": "IBM Corp. and LoopBack contributors",
10
10
  "repository": {
11
11
  "type": "git",
12
12
  "url": "https://github.com/loopbackio/loopback-next.git",
13
13
  "directory": "packages/rest-crud"
14
14
  },
15
15
  "engines": {
16
- "node": "12 || 14 || 16 || 17"
16
+ "node": "14 || 16 || 17 || 18"
17
17
  },
18
18
  "scripts": {
19
19
  "build": "lb-tsc",
@@ -32,23 +32,23 @@
32
32
  "!*/__tests__"
33
33
  ],
34
34
  "peerDependencies": {
35
- "@loopback/core": "^3.1.1",
36
- "@loopback/repository": "^4.1.1",
37
- "@loopback/rest": "^11.1.1"
35
+ "@loopback/core": "^4.0.1",
36
+ "@loopback/repository": "^5.0.1",
37
+ "@loopback/rest": "^12.0.1"
38
38
  },
39
39
  "dependencies": {
40
- "@loopback/model-api-builder": "^3.1.1",
41
- "debug": "^4.3.3",
42
- "tslib": "^2.3.1"
40
+ "@loopback/model-api-builder": "^4.0.1",
41
+ "debug": "^4.3.4",
42
+ "tslib": "^2.4.0"
43
43
  },
44
44
  "devDependencies": {
45
- "@loopback/build": "^8.1.1",
46
- "@loopback/core": "^3.1.1",
47
- "@loopback/repository": "^4.1.1",
48
- "@loopback/rest": "^11.1.1",
49
- "@loopback/testlab": "^4.1.1",
45
+ "@loopback/build": "^9.0.1",
46
+ "@loopback/core": "^4.0.1",
47
+ "@loopback/repository": "^5.0.1",
48
+ "@loopback/rest": "^12.0.1",
49
+ "@loopback/testlab": "^5.0.1",
50
50
  "@types/debug": "^4.1.7",
51
- "@types/node": "^12.20.46"
51
+ "@types/node": "^14.18.21"
52
52
  },
53
- "gitHead": "8aff2ce33aad3daa53b05fa0fbe8a1b2c7ad0bdf"
53
+ "gitHead": "ccf7863d0639de966d6c6129b4aa94ba1dce2c33"
54
54
  }
@@ -1,4 +1,4 @@
1
- // Copyright IBM Corp. 2020. All Rights Reserved.
1
+ // Copyright IBM Corp. and LoopBack contributors 2020. All Rights Reserved.
2
2
  // Node module: @loopback/rest-crud
3
3
  // This file is licensed under the MIT License.
4
4
  // License text available at https://opensource.org/licenses/MIT
@@ -31,6 +31,10 @@ const debug = debugFactory('loopback:boot:crud-rest');
31
31
  export interface ModelCrudRestApiConfig extends ModelApiConfig {
32
32
  // E.g. '/products'
33
33
  basePath: string;
34
+ /**
35
+ * If true, the generated controller only has find and count APIs
36
+ */
37
+ readonly?: boolean;
34
38
  }
35
39
 
36
40
  @injectable(asModelApiBuilder)
@@ -1,4 +1,4 @@
1
- // Copyright IBM Corp. 2019,2020. All Rights Reserved.
1
+ // Copyright IBM Corp. and LoopBack contributors 2019,2020. All Rights Reserved.
2
2
  // Node module: @loopback/rest-crud
3
3
  // This file is licensed under the MIT License.
4
4
  // License text available at https://opensource.org/licenses/MIT
@@ -1,4 +1,4 @@
1
- // Copyright IBM Corp. 2019,2020. All Rights Reserved.
1
+ // Copyright IBM Corp. and LoopBack contributors 2019,2020. All Rights Reserved.
2
2
  // Node module: @loopback/rest-crud
3
3
  // This file is licensed under the MIT License.
4
4
  // License text available at https://opensource.org/licenses/MIT
@@ -63,8 +63,8 @@ import assert from 'assert';
63
63
  export interface CrudRestController<
64
64
  T extends Entity,
65
65
  IdType,
66
- IdName extends keyof T,
67
66
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
67
+ IdName extends keyof T,
68
68
  Relations extends object = {},
69
69
  > {
70
70
  /**
@@ -73,10 +73,10 @@ export interface CrudRestController<
73
73
  readonly repository: EntityCrudRepository<T, IdType>;
74
74
 
75
75
  /**
76
- * Implementation of the endpoint `POST /`.
77
- * @param data Model data
76
+ * Implementation of the endpoint `GET /`.
77
+ * @param filter Filter
78
78
  */
79
- create(data: Omit<T, IdName>): Promise<T>;
79
+ find(filter?: Filter<T>): Promise<(T & Relations)[]>;
80
80
  }
81
81
 
82
82
  /**
@@ -101,6 +101,10 @@ export interface CrudRestControllerOptions {
101
101
  * The base path where to "mount" the controller.
102
102
  */
103
103
  basePath: string;
104
+ /**
105
+ * Whether to generate readonly APIs
106
+ */
107
+ readonly?: boolean;
104
108
  }
105
109
 
106
110
  /**
@@ -144,30 +148,13 @@ export function defineCrudRestController<
144
148
  };
145
149
 
146
150
  @api({basePath: options.basePath, paths: {}})
147
- class CrudRestControllerImpl
151
+ class ReadonlyRestControllerImpl
148
152
  implements CrudRestController<T, IdType, IdName>
149
153
  {
150
154
  constructor(
151
155
  public readonly repository: EntityCrudRepository<T, IdType, Relations>,
152
156
  ) {}
153
157
 
154
- @post('/', {
155
- ...response.model(200, `${modelName} instance created`, modelCtor),
156
- })
157
- async create(
158
- @body(modelCtor, {
159
- title: `New${modelName}`,
160
- exclude: modelCtor.getIdProperties() as (keyof T)[],
161
- })
162
- data: Omit<T, IdName>,
163
- ): Promise<T> {
164
- return this.repository.create(
165
- // FIXME(bajtos) Improve repository API to support this use case
166
- // with no explicit type-casts required
167
- data as DataObject<T>,
168
- );
169
- }
170
-
171
158
  @get('/', {
172
159
  ...response.array(200, `Array of ${modelName} instances`, modelCtor, {
173
160
  includeRelations: true,
@@ -205,6 +192,32 @@ export function defineCrudRestController<
205
192
  ): Promise<Count> {
206
193
  return this.repository.count(where);
207
194
  }
195
+ }
196
+
197
+ @api({basePath: options.basePath, paths: {}})
198
+ class CrudRestControllerImpl extends ReadonlyRestControllerImpl {
199
+ constructor(
200
+ public readonly repository: EntityCrudRepository<T, IdType, Relations>,
201
+ ) {
202
+ super(repository);
203
+ }
204
+
205
+ @post('/', {
206
+ ...response.model(200, `${modelName} instance created`, modelCtor),
207
+ })
208
+ async create(
209
+ @body(modelCtor, {
210
+ title: `New${modelName}`,
211
+ exclude: modelCtor.getIdProperties() as (keyof T)[],
212
+ })
213
+ data: Omit<T, IdName>,
214
+ ): Promise<T> {
215
+ return this.repository.create(
216
+ // FIXME(bajtos) Improve repository API to support this use case
217
+ // with no explicit type-casts required
218
+ data as DataObject<T>,
219
+ );
220
+ }
208
221
 
209
222
  @patch('/', {
210
223
  ...response(200, `Count of ${modelName} models updated`, {
@@ -268,7 +281,9 @@ export function defineCrudRestController<
268
281
  'controllerClass',
269
282
  `return class ${controllerName} extends controllerClass {}`,
270
283
  );
271
- const controller = defineNamedController(CrudRestControllerImpl);
284
+ const controller = defineNamedController(
285
+ options.readonly ? ReadonlyRestControllerImpl : CrudRestControllerImpl,
286
+ );
272
287
  assert.equal(controller.name, controllerName);
273
288
  return controller;
274
289
  }
@@ -280,7 +295,7 @@ function getIdSchema<T extends Entity>(
280
295
  const modelSchema = jsonToSchemaObject(
281
296
  getJsonSchema(modelCtor),
282
297
  ) as SchemaObject;
283
- return (modelSchema.properties ?? {})[idProp] as SchemaObject;
298
+ return modelSchema.properties?.[idProp] as SchemaObject;
284
299
  }
285
300
 
286
301
  // Temporary implementation of a short-hand version of `@requestBody`
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- // Copyright IBM Corp. 2019,2020. All Rights Reserved.
1
+ // Copyright IBM Corp. and LoopBack contributors 2019,2020. All Rights Reserved.
2
2
  // Node module: @loopback/rest-crud
3
3
  // This file is licensed under the MIT License.
4
4
  // License text available at https://opensource.org/licenses/MIT