@loopback/example-greeting-app 3.0.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 (62) hide show
  1. package/.prettierignore +2 -0
  2. package/.prettierrc +7 -0
  3. package/.vscode/settings.json +19 -0
  4. package/.vscode/tasks.json +29 -0
  5. package/CHANGELOG.md +552 -0
  6. package/LICENSE +25 -0
  7. package/README.md +61 -0
  8. package/dist/__tests__/integration/greeting-service.integration.d.ts +1 -0
  9. package/dist/__tests__/integration/greeting-service.integration.js +68 -0
  10. package/dist/__tests__/integration/greeting-service.integration.js.map +1 -0
  11. package/dist/application.d.ts +98 -0
  12. package/dist/application.js +29 -0
  13. package/dist/application.js.map +1 -0
  14. package/dist/caching-service.d.ts +64 -0
  15. package/dist/caching-service.js +133 -0
  16. package/dist/caching-service.js.map +1 -0
  17. package/dist/controllers/greeting.controller.d.ts +10 -0
  18. package/dist/controllers/greeting.controller.js +59 -0
  19. package/dist/controllers/greeting.controller.js.map +1 -0
  20. package/dist/controllers/index.d.ts +1 -0
  21. package/dist/controllers/index.js +9 -0
  22. package/dist/controllers/index.js.map +1 -0
  23. package/dist/index.d.ts +4 -0
  24. package/dist/index.js +37 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/interceptors/caching.interceptor.d.ts +7 -0
  27. package/dist/interceptors/caching.interceptor.js +49 -0
  28. package/dist/interceptors/caching.interceptor.js.map +1 -0
  29. package/dist/interceptors/index.d.ts +1 -0
  30. package/dist/interceptors/index.js +9 -0
  31. package/dist/interceptors/index.js.map +1 -0
  32. package/dist/keys.d.ts +6 -0
  33. package/dist/keys.js +13 -0
  34. package/dist/keys.js.map +1 -0
  35. package/dist/observers/cache.observer.d.ts +19 -0
  36. package/dist/observers/cache.observer.js +39 -0
  37. package/dist/observers/cache.observer.js.map +1 -0
  38. package/dist/observers/index.d.ts +1 -0
  39. package/dist/observers/index.js +9 -0
  40. package/dist/observers/index.js.map +1 -0
  41. package/dist/openapi-spec.d.ts +1 -0
  42. package/dist/openapi-spec.js +28 -0
  43. package/dist/openapi-spec.js.map +1 -0
  44. package/dist/types.d.ts +8 -0
  45. package/dist/types.js +7 -0
  46. package/dist/types.js.map +1 -0
  47. package/greeting-app.png +0 -0
  48. package/package.json +69 -0
  49. package/src/__tests__/integration/greeting-service.integration.ts +79 -0
  50. package/src/application.ts +27 -0
  51. package/src/caching-service.ts +146 -0
  52. package/src/controllers/greeting.controller.ts +50 -0
  53. package/src/controllers/index.ts +6 -0
  54. package/src/index.ts +33 -0
  55. package/src/interceptors/caching.interceptor.ts +55 -0
  56. package/src/interceptors/index.ts +6 -0
  57. package/src/keys.ts +14 -0
  58. package/src/observers/cache.observer.ts +34 -0
  59. package/src/observers/index.ts +6 -0
  60. package/src/openapi-spec.ts +28 -0
  61. package/src/types.ts +13 -0
  62. package/tsconfig.json +30 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caching-service.js","sourceRoot":"","sources":["../src/caching-service.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8CAA8C;AAC9C,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,yCAA6E;AAC7E,0DAAiC;AAEjC,MAAM,KAAK,GAAG,eAAY,CAAC,mBAAmB,CAAC,CAAC;AAUhD;;GAEG;AAEH,IAAa,cAAc,GAA3B,MAAa,cAAc;IAIzB,YAEU,WAA+C;QAA/C,gBAAW,GAAX,WAAW,CAAoC;QAJjD,UAAK,GAAyB,IAAI,GAAG,EAAE,CAAC;QAM9C,0EAA0E;QAC1E,4DAA4D;QAC5D,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC7B,KAAK,CAAC,oDAAoD,CAAC,CAAC;YAC5D,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBACzB,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,2EAA2E;IAC3E,6CAA6C;IAC7C;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,OAAgB;QACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC1C,KAAK,CAAC,sBAAsB,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;QAC3C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;;QACV,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QACrD,KAAK,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,mCAAI,IAAI,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;YACnC,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;gBAC7B,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;gBACrC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACxB;SACF;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAClC,wBAAwB;QACxB,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC3B;QACD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF,CAAA;AA3HY,cAAc;IAD1B,iBAAU,CAAC,EAAC,KAAK,EAAE,mBAAY,CAAC,SAAS,EAAC,CAAC;IAMvC,mBAAA,aAAM,CAAC,IAAI,EAAE,CAAA;6CACO,kBAAW;GANvB,cAAc,CA2H1B;AA3HY,wCAAc"}
@@ -0,0 +1,10 @@
1
+ /// <reference types="express" />
2
+ import { GreetingService } from '@loopback/example-greeter-extension';
3
+ import { Request } from '@loopback/rest';
4
+ import { Message } from '../types';
5
+ export declare class GreetingController {
6
+ private greetingService;
7
+ private request;
8
+ constructor(greetingService: GreetingService, request: Request);
9
+ greet(name: string): Promise<Message>;
10
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2019. All Rights Reserved.
3
+ // Node module: @loopback/example-greeting-app
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.GreetingController = void 0;
8
+ const tslib_1 = require("tslib");
9
+ const core_1 = require("@loopback/core");
10
+ const example_greeter_extension_1 = require("@loopback/example-greeter-extension");
11
+ const rest_1 = require("@loopback/rest");
12
+ /* istanbul ignore file */
13
+ let GreetingController = class GreetingController {
14
+ constructor(greetingService, request) {
15
+ this.greetingService = greetingService;
16
+ this.request = request;
17
+ }
18
+ async greet(name) {
19
+ const language = this.request.acceptsLanguages(['en', 'zh']) || 'en';
20
+ const greeting = await this.greetingService.greet(language, name);
21
+ return {
22
+ timestamp: new Date(),
23
+ language,
24
+ greeting,
25
+ };
26
+ }
27
+ };
28
+ tslib_1.__decorate([
29
+ rest_1.get('/greet/{name}', {
30
+ responses: {
31
+ '200': {
32
+ description: '',
33
+ content: {
34
+ 'application/json': {
35
+ schema: {
36
+ type: 'object',
37
+ properties: {
38
+ timestamp: 'string',
39
+ language: 'string',
40
+ message: 'string',
41
+ },
42
+ },
43
+ },
44
+ },
45
+ },
46
+ },
47
+ }),
48
+ tslib_1.__param(0, rest_1.param.path.string('name')),
49
+ tslib_1.__metadata("design:type", Function),
50
+ tslib_1.__metadata("design:paramtypes", [String]),
51
+ tslib_1.__metadata("design:returntype", Promise)
52
+ ], GreetingController.prototype, "greet", null);
53
+ GreetingController = tslib_1.__decorate([
54
+ tslib_1.__param(0, core_1.inject(example_greeter_extension_1.GREETING_SERVICE)),
55
+ tslib_1.__param(1, core_1.inject(rest_1.RestBindings.Http.REQUEST)),
56
+ tslib_1.__metadata("design:paramtypes", [example_greeter_extension_1.GreetingService, Object])
57
+ ], GreetingController);
58
+ exports.GreetingController = GreetingController;
59
+ //# sourceMappingURL=greeting.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"greeting.controller.js","sourceRoot":"","sources":["../../src/controllers/greeting.controller.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8CAA8C;AAC9C,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,yCAAsC;AACtC,mFAG6C;AAC7C,yCAAiE;AAGjE,0BAA0B;AAC1B,IAAa,kBAAkB,GAA/B,MAAa,kBAAkB;IAC7B,YACoC,eAAgC,EACvB,OAAgB;QADzB,oBAAe,GAAf,eAAe,CAAiB;QACvB,YAAO,GAAP,OAAO,CAAS;IAC1D,CAAC;IAqBJ,KAAK,CAAC,KAAK,CAA4B,IAAY;QACjD,MAAM,QAAQ,GACZ,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClE,OAAO;YACL,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,QAAQ;YACR,QAAQ;SACT,CAAC;IACJ,CAAC;CACF,CAAA;AAVC;IAnBC,UAAG,CAAC,eAAe,EAAE;QACpB,SAAS,EAAE;YACT,KAAK,EAAE;gBACL,WAAW,EAAE,EAAE;gBACf,OAAO,EAAE;oBACP,kBAAkB,EAAE;wBAClB,MAAM,EAAE;4BACN,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE;gCACV,SAAS,EAAE,QAAQ;gCACnB,QAAQ,EAAE,QAAQ;gCAClB,OAAO,EAAE,QAAQ;6BAClB;yBACF;qBACF;iBACF;aACF;SACF;KACF,CAAC;IACW,mBAAA,YAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;;;;+CASrC;AAlCU,kBAAkB;IAE1B,mBAAA,aAAM,CAAC,4CAAgB,CAAC,CAAA;IACxB,mBAAA,aAAM,CAAC,mBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;6CADiB,2CAAe;GAFzD,kBAAkB,CAmC9B;AAnCY,gDAAkB"}
@@ -0,0 +1 @@
1
+ export * from './greeting.controller';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2019. All Rights Reserved.
3
+ // Node module: @loopback/example-greeting-app
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const tslib_1 = require("tslib");
8
+ tslib_1.__exportStar(require("./greeting.controller"), exports);
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controllers/index.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8CAA8C;AAC9C,+CAA+C;AAC/C,gEAAgE;;;AAEhE,gEAAsC"}
@@ -0,0 +1,4 @@
1
+ export * from './application';
2
+ export * from './keys';
3
+ export * from './types';
4
+ export declare function main(): Promise<void>;
package/dist/index.js ADDED
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2019,2020. All Rights Reserved.
3
+ // Node module: @loopback/example-greeting-app
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.main = void 0;
8
+ const tslib_1 = require("tslib");
9
+ tslib_1.__exportStar(require("./application"), exports);
10
+ tslib_1.__exportStar(require("./keys"), exports);
11
+ tslib_1.__exportStar(require("./types"), exports);
12
+ const application_1 = require("./application");
13
+ async function main() {
14
+ var _a, _b;
15
+ const config = {
16
+ rest: {
17
+ port: +((_a = process.env.PORT) !== null && _a !== void 0 ? _a : 3000),
18
+ host: (_b = process.env.HOST) !== null && _b !== void 0 ? _b : '127.0.0.1',
19
+ openApiSpec: {
20
+ // useful when used with OpenAPI-to-GraphQL to locate your application
21
+ setServersFromRequest: true,
22
+ },
23
+ },
24
+ };
25
+ const app = new application_1.GreetingApplication(config);
26
+ await app.main();
27
+ const url = app.restServer.url;
28
+ console.log(`The service is running at ${url}/greet/world.`);
29
+ }
30
+ exports.main = main;
31
+ if (require.main === module) {
32
+ main().catch(err => {
33
+ console.error('Cannot start the application.', err);
34
+ process.exit(1);
35
+ });
36
+ }
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8CAA8C;AAC9C,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,wDAA8B;AAC9B,iDAAuB;AACvB,kDAAwB;AAExB,+CAAkD;AAC3C,KAAK,UAAU,IAAI;;IACxB,MAAM,MAAM,GAAG;QACb,IAAI,EAAE;YACJ,IAAI,EAAE,CAAC,CAAC,MAAA,OAAO,CAAC,GAAG,CAAC,IAAI,mCAAI,IAAI,CAAC;YACjC,IAAI,EAAE,MAAA,OAAO,CAAC,GAAG,CAAC,IAAI,mCAAI,WAAW;YACrC,WAAW,EAAE;gBACX,sEAAsE;gBACtE,qBAAqB,EAAE,IAAI;aAC5B;SACF;KACF,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,iCAAmB,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IACjB,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,eAAe,CAAC,CAAC;AAC/D,CAAC;AAfD,oBAeC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IAC3B,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QACjB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;CACJ"}
@@ -0,0 +1,7 @@
1
+ import { Interceptor, InvocationContext, InvocationResult, Provider, ValueOrPromise } from '@loopback/core';
2
+ import { CachingService } from '../caching-service';
3
+ export declare class CachingInterceptor implements Provider<Interceptor> {
4
+ private cachingService;
5
+ constructor(cachingService: CachingService);
6
+ value(): (ctx: InvocationContext, next: () => ValueOrPromise<InvocationResult>) => Promise<any>;
7
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2019. All Rights Reserved.
3
+ // Node module: @loopback/example-greeting-app
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.CachingInterceptor = void 0;
8
+ const tslib_1 = require("tslib");
9
+ const core_1 = require("@loopback/core");
10
+ const rest_1 = require("@loopback/rest");
11
+ const debug_1 = tslib_1.__importDefault(require("debug"));
12
+ const caching_service_1 = require("../caching-service");
13
+ const keys_1 = require("../keys");
14
+ const debug = debug_1.default('greeter-extension');
15
+ let CachingInterceptor = class CachingInterceptor {
16
+ constructor(cachingService) {
17
+ this.cachingService = cachingService;
18
+ }
19
+ value() {
20
+ return async (ctx, next) => {
21
+ const httpReq = await ctx.get(rest_1.RestBindings.Http.REQUEST, {
22
+ optional: true,
23
+ });
24
+ /* istanbul ignore if */
25
+ if (!httpReq) {
26
+ // Not http request
27
+ return next();
28
+ }
29
+ const key = httpReq.path;
30
+ const lang = httpReq.acceptsLanguages(['en', 'zh']) || 'en';
31
+ const cachingKey = `${lang}:${key}`;
32
+ const cachedResult = await this.cachingService.get(cachingKey);
33
+ if (cachedResult) {
34
+ debug('Cache found for %s %j', cachingKey, cachedResult);
35
+ return cachedResult;
36
+ }
37
+ const result = await next();
38
+ await this.cachingService.set(cachingKey, result);
39
+ return result;
40
+ };
41
+ }
42
+ };
43
+ CachingInterceptor = tslib_1.__decorate([
44
+ core_1.injectable(core_1.asGlobalInterceptor('caching')),
45
+ tslib_1.__param(0, core_1.inject(keys_1.CACHING_SERVICE)),
46
+ tslib_1.__metadata("design:paramtypes", [caching_service_1.CachingService])
47
+ ], CachingInterceptor);
48
+ exports.CachingInterceptor = CachingInterceptor;
49
+ //# sourceMappingURL=caching.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caching.interceptor.js","sourceRoot":"","sources":["../../src/interceptors/caching.interceptor.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8CAA8C;AAC9C,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,yCASwB;AACxB,yCAA4C;AAC5C,0DAAiC;AACjC,wDAAkD;AAClD,kCAAwC;AAExC,MAAM,KAAK,GAAG,eAAY,CAAC,mBAAmB,CAAC,CAAC;AAGhD,IAAa,kBAAkB,GAA/B,MAAa,kBAAkB;IAC7B,YACmC,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAC9D,CAAC;IAEJ,KAAK;QACH,OAAO,KAAK,EACV,GAAsB,EACtB,IAA4C,EAC5C,EAAE;YACF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,mBAAY,CAAC,IAAI,CAAC,OAAO,EAAE;gBACvD,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,wBAAwB;YACxB,IAAI,CAAC,OAAO,EAAE;gBACZ,mBAAmB;gBACnB,OAAO,IAAI,EAAE,CAAC;aACf;YACD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;YACzB,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;YAC5D,MAAM,UAAU,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC/D,IAAI,YAAY,EAAE;gBAChB,KAAK,CAAC,uBAAuB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;gBACzD,OAAO,YAAY,CAAC;aACrB;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAClD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC;CACF,CAAA;AA/BY,kBAAkB;IAD9B,iBAAU,CAAC,0BAAmB,CAAC,SAAS,CAAC,CAAC;IAGtC,mBAAA,aAAM,CAAC,sBAAe,CAAC,CAAA;6CAAyB,gCAAc;GAFtD,kBAAkB,CA+B9B;AA/BY,gDAAkB"}
@@ -0,0 +1 @@
1
+ export * from './caching.interceptor';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2019. All Rights Reserved.
3
+ // Node module: @loopback/example-greeting-app
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const tslib_1 = require("tslib");
8
+ tslib_1.__exportStar(require("./caching.interceptor"), exports);
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interceptors/index.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8CAA8C;AAC9C,+CAA+C;AAC/C,gEAAgE;;;AAEhE,gEAAsC"}
package/dist/keys.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { BindingKey } from '@loopback/core';
2
+ import { CachingService } from './caching-service';
3
+ /**
4
+ * Strongly-typed binding key for CachingService
5
+ */
6
+ export declare const CACHING_SERVICE: BindingKey<CachingService>;
package/dist/keys.js ADDED
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2019. All Rights Reserved.
3
+ // Node module: @loopback/example-greeting-app
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.CACHING_SERVICE = void 0;
8
+ const core_1 = require("@loopback/core");
9
+ /**
10
+ * Strongly-typed binding key for CachingService
11
+ */
12
+ exports.CACHING_SERVICE = core_1.BindingKey.create('services.CachingService');
13
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8CAA8C;AAC9C,+CAA+C;AAC/C,gEAAgE;;;AAEhE,yCAA0C;AAG1C;;GAEG;AACU,QAAA,eAAe,GAAG,iBAAU,CAAC,MAAM,CAC9C,yBAAyB,CAC1B,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { LifeCycleObserver } from '@loopback/core';
2
+ import { CachingService } from '../caching-service';
3
+ /**
4
+ * This class will be bound to the application as a `LifeCycleObserver` during
5
+ * `boot`
6
+ */
7
+ export declare class CacheObserver implements LifeCycleObserver {
8
+ private cachingService;
9
+ private timer;
10
+ constructor(cachingService: CachingService);
11
+ /**
12
+ * This method will be invoked when the application starts
13
+ */
14
+ start(): Promise<void>;
15
+ /**
16
+ * This method will be invoked when the application stops
17
+ */
18
+ stop(): Promise<void>;
19
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2019. All Rights Reserved.
3
+ // Node module: @loopback/example-greeting-app
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.CacheObserver = void 0;
8
+ const tslib_1 = require("tslib");
9
+ const core_1 = require("@loopback/core");
10
+ const caching_service_1 = require("../caching-service");
11
+ const keys_1 = require("../keys");
12
+ /**
13
+ * This class will be bound to the application as a `LifeCycleObserver` during
14
+ * `boot`
15
+ */
16
+ let CacheObserver = class CacheObserver {
17
+ constructor(cachingService) {
18
+ this.cachingService = cachingService;
19
+ }
20
+ /**
21
+ * This method will be invoked when the application starts
22
+ */
23
+ async start() {
24
+ await this.cachingService.start();
25
+ }
26
+ /**
27
+ * This method will be invoked when the application stops
28
+ */
29
+ async stop() {
30
+ await this.cachingService.stop();
31
+ }
32
+ };
33
+ CacheObserver = tslib_1.__decorate([
34
+ core_1.lifeCycleObserver('caching'),
35
+ tslib_1.__param(0, core_1.inject(keys_1.CACHING_SERVICE)),
36
+ tslib_1.__metadata("design:paramtypes", [caching_service_1.CachingService])
37
+ ], CacheObserver);
38
+ exports.CacheObserver = CacheObserver;
39
+ //# sourceMappingURL=cache.observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.observer.js","sourceRoot":"","sources":["../../src/observers/cache.observer.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8CAA8C;AAC9C,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,yCAA4E;AAC5E,wDAAkD;AAClD,kCAAwC;AAExC;;;GAGG;AAEH,IAAa,aAAa,GAA1B,MAAa,aAAa;IAExB,YACmC,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAC9D,CAAC;IAEJ;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;CACF,CAAA;AAnBY,aAAa;IADzB,wBAAiB,CAAC,SAAS,CAAC;IAIxB,mBAAA,aAAM,CAAC,sBAAe,CAAC,CAAA;6CAAyB,gCAAc;GAHtD,aAAa,CAmBzB;AAnBY,sCAAa"}
@@ -0,0 +1 @@
1
+ export * from './cache.observer';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2019. All Rights Reserved.
3
+ // Node module: @loopback/example-greeting-app
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const tslib_1 = require("tslib");
8
+ tslib_1.__exportStar(require("./cache.observer"), exports);
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observers/index.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8CAA8C;AAC9C,+CAA+C;AAC/C,gEAAgE;;;AAEhE,2DAAiC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2020. All Rights Reserved.
3
+ // Node module: @loopback/example-greeting-app
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const application_1 = require("./application");
8
+ /**
9
+ * Export the OpenAPI spec from the application
10
+ */
11
+ async function exportOpenApiSpec() {
12
+ var _a, _b, _c;
13
+ const config = {
14
+ rest: {
15
+ port: +((_a = process.env.PORT) !== null && _a !== void 0 ? _a : 3000),
16
+ host: (_b = process.env.HOST) !== null && _b !== void 0 ? _b : 'localhost',
17
+ },
18
+ };
19
+ const outFile = (_c = process.argv[2]) !== null && _c !== void 0 ? _c : '';
20
+ const app = new application_1.GreetingApplication(config);
21
+ await app.boot();
22
+ await app.exportOpenApiSpec(outFile);
23
+ }
24
+ exportOpenApiSpec().catch(err => {
25
+ console.error('Fail to export OpenAPI spec from the application.', err);
26
+ process.exit(1);
27
+ });
28
+ //# sourceMappingURL=openapi-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-spec.js","sourceRoot":"","sources":["../src/openapi-spec.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8CAA8C;AAC9C,+CAA+C;AAC/C,gEAAgE;;AAGhE,+CAAkD;AAElD;;GAEG;AACH,KAAK,UAAU,iBAAiB;;IAC9B,MAAM,MAAM,GAAsB;QAChC,IAAI,EAAE;YACJ,IAAI,EAAE,CAAC,CAAC,MAAA,OAAO,CAAC,GAAG,CAAC,IAAI,mCAAI,IAAI,CAAC;YACjC,IAAI,EAAE,MAAA,OAAO,CAAC,GAAG,CAAC,IAAI,mCAAI,WAAW;SACtC;KACF,CAAC;IACF,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,iCAAmB,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IACjB,MAAM,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,iBAAiB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;IACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Greeting message response
3
+ */
4
+ export interface Message {
5
+ timestamp: Date;
6
+ language: string;
7
+ greeting: string;
8
+ }
package/dist/types.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2019. All Rights Reserved.
3
+ // Node module: @loopback/example-greeting-app
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8CAA8C;AAC9C,+CAA+C;AAC/C,gEAAgE"}
Binary file
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@loopback/example-greeting-app",
3
+ "description": "An example greeting application for LoopBack 4",
4
+ "version": "3.0.1",
5
+ "keywords": [
6
+ "loopback",
7
+ "loopback-application"
8
+ ],
9
+ "license": "MIT",
10
+ "main": "dist/index.js",
11
+ "types": "dist/index.d.ts",
12
+ "author": "IBM Corp.",
13
+ "copyright.owner": "IBM Corp.",
14
+ "homepage": "https://github.com/loopbackio/loopback-next/tree/master/examples/greeter-extension",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/loopbackio/loopback-next.git",
18
+ "directory": "examples/greeting-app"
19
+ },
20
+ "bugs": {
21
+ "url": "https://github.com/loopbackio/loopback-next/issues"
22
+ },
23
+ "engines": {
24
+ "node": "^10.16 || 12 || 14 || 16"
25
+ },
26
+ "scripts": {
27
+ "build": "lb-tsc",
28
+ "build:watch": "lb-tsc --watch",
29
+ "clean": "lb-clean *example-greeting-app-*.tgz dist *.tsbuildinfo package",
30
+ "lint": "npm run prettier:check && npm run eslint",
31
+ "lint:fix": "npm run eslint:fix && npm run prettier:fix",
32
+ "prettier:cli": "lb-prettier \"**/*.ts\" \"**/*.js\"",
33
+ "prettier:check": "npm run prettier:cli -- -l",
34
+ "prettier:fix": "npm run prettier:cli -- --write",
35
+ "eslint": "lb-eslint --report-unused-disable-directives .",
36
+ "eslint:fix": "npm run eslint -- --fix",
37
+ "pretest": "npm run rebuild",
38
+ "test": "lb-mocha \"dist/__tests__/**/*.js\"",
39
+ "posttest": "npm run lint",
40
+ "test:dev": "lb-mocha --allow-console-logs dist/__tests__/**/*.js && npm run posttest",
41
+ "openapi-spec": "node ./dist/openapi-spec",
42
+ "rebuild": "npm run clean && npm run build",
43
+ "prestart": "npm run rebuild",
44
+ "start": "node .",
45
+ "verify": "npm pack && tar xf *example-greeting-app*.tgz && tree package && npm run clean"
46
+ },
47
+ "publishConfig": {
48
+ "access": "public"
49
+ },
50
+ "dependencies": {
51
+ "@loopback/boot": "^3.4.3",
52
+ "@loopback/core": "^2.17.0",
53
+ "@loopback/example-greeter-extension": "^3.0.1",
54
+ "@loopback/rest": "^10.0.1",
55
+ "chalk": "^4.1.2",
56
+ "debug": "^4.3.2",
57
+ "tslib": "^2.3.1"
58
+ },
59
+ "devDependencies": {
60
+ "@loopback/build": "^7.0.1",
61
+ "@loopback/eslint-config": "^11.0.1",
62
+ "@loopback/testlab": "^3.4.3",
63
+ "@types/debug": "4.1.7",
64
+ "@types/node": "^10.17.60",
65
+ "eslint": "^7.32.0",
66
+ "typescript": "~4.3.5"
67
+ },
68
+ "gitHead": "1df36bb1ee2e513d9e197bd6010c4cfb296d50b8"
69
+ }