@loopback/rest-crud 0.13.2 → 0.15.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.
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
 
@@ -74,7 +75,7 @@ For the examples in the following sections, we are also assuming a model named
74
75
  ### Creating a CRUD Controller
75
76
 
76
77
  Here is how you would use `defineCrudRestController` for exposing the CRUD
77
- endpoints of an existing model with a respository.
78
+ endpoints of an existing model with a repository.
78
79
 
79
80
  1. Create a REST CRUD controller class for your model.
80
81
 
@@ -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
@@ -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,0DAAiC;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
@@ -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
@@ -90,38 +132,6 @@ function defineCrudRestController(modelCtor, options) {
90
132
  tslib_1.__metadata("design:paramtypes", [Object]),
91
133
  tslib_1.__metadata("design:returntype", Promise)
92
134
  ], CrudRestControllerImpl.prototype, "create", null);
93
- tslib_1.__decorate([
94
- (0, rest_1.get)('/', {
95
- ...response.array(200, `Array of ${modelName} instances`, modelCtor, {
96
- includeRelations: true,
97
- }),
98
- }),
99
- tslib_1.__param(0, rest_1.param.filter(modelCtor)),
100
- tslib_1.__metadata("design:type", Function),
101
- tslib_1.__metadata("design:paramtypes", [Object]),
102
- tslib_1.__metadata("design:returntype", Promise)
103
- ], CrudRestControllerImpl.prototype, "find", null);
104
- tslib_1.__decorate([
105
- (0, rest_1.get)('/{id}', {
106
- ...response.model(200, `${modelName} instance`, modelCtor, {
107
- includeRelations: true,
108
- }),
109
- }),
110
- tslib_1.__param(0, (0, rest_1.param)(idPathParam)),
111
- tslib_1.__param(1, rest_1.param.query.object('filter', (0, rest_1.getFilterSchemaFor)(modelCtor, { exclude: 'where' }))),
112
- tslib_1.__metadata("design:type", Function),
113
- tslib_1.__metadata("design:paramtypes", [Object, Object]),
114
- tslib_1.__metadata("design:returntype", Promise)
115
- ], CrudRestControllerImpl.prototype, "findById", null);
116
- tslib_1.__decorate([
117
- (0, rest_1.get)('/count', {
118
- ...response(200, `${modelName} count`, { schema: repository_1.CountSchema }),
119
- }),
120
- tslib_1.__param(0, rest_1.param.where(modelCtor)),
121
- tslib_1.__metadata("design:type", Function),
122
- tslib_1.__metadata("design:paramtypes", [Object]),
123
- tslib_1.__metadata("design:returntype", Promise)
124
- ], CrudRestControllerImpl.prototype, "count", null);
125
135
  tslib_1.__decorate([
126
136
  (0, rest_1.patch)('/', {
127
137
  ...response(200, `Count of ${modelName} models updated`, {
@@ -175,7 +185,7 @@ function defineCrudRestController(modelCtor, options) {
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
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,kEAAwC;AACxC,gEAAsC;AACtC,iEAAuC"}
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.2",
4
+ "version": "0.15.1",
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.2",
36
- "@loopback/repository": "^4.1.2",
37
- "@loopback/rest": "^11.1.2"
35
+ "@loopback/core": "^4.0.2",
36
+ "@loopback/repository": "^5.0.2",
37
+ "@loopback/rest": "^12.0.2"
38
38
  },
39
39
  "dependencies": {
40
- "@loopback/model-api-builder": "^3.1.2",
40
+ "@loopback/model-api-builder": "^4.0.2",
41
41
  "debug": "^4.3.4",
42
- "tslib": "^2.3.1"
42
+ "tslib": "^2.4.0"
43
43
  },
44
44
  "devDependencies": {
45
- "@loopback/build": "^8.1.2",
46
- "@loopback/core": "^3.1.2",
47
- "@loopback/repository": "^4.1.2",
48
- "@loopback/rest": "^11.1.2",
49
- "@loopback/testlab": "^4.1.2",
45
+ "@loopback/build": "^9.0.2",
46
+ "@loopback/core": "^4.0.2",
47
+ "@loopback/repository": "^5.0.2",
48
+ "@loopback/rest": "^12.0.2",
49
+ "@loopback/testlab": "^5.0.2",
50
50
  "@types/debug": "^4.1.7",
51
- "@types/node": "^12.20.47"
51
+ "@types/node": "^14.18.21"
52
52
  },
53
- "gitHead": "22d993c73a7b4ccdb36f2e26ea52460dc46fbd11"
53
+ "gitHead": "d2eddfc1319810f4c0126e613c24499b5685f7e4"
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