UNPKG

@awesome-nodes/mvvm

Version:

Application development framework using the *model* *view* *view-model* design pattern.

67 lines (56 loc) 9.93 kB
import { ObjectBase } from '@awesome-nodes/object'; import { ENVIRONMENT_TOKEN } from '@awesome-nodes/object/data'; export class ServiceProviderBase extends ObjectBase { provide(provide) { const factoryProvider = this.constructor.createFactoryProvider(provide, this); if (!factoryProvider.provide) factoryProvider.provide = provide; return this.inject({ provide: factoryProvider.provide, useFactory: factoryProvider.useFactory, deps: factoryProvider.deps }); } static createFactoryProvider(provide, provider = new this()) { let factoryProvider; switch (ENVIRONMENT_TOKEN.value) { case null: case undefined: factoryProvider = provider.designFactory; break; case false: factoryProvider = provider.developmentFactory; break; default: factoryProvider = provider.productionFactory; } if (!factoryProvider.provide) factoryProvider.provide = provide; return { provide: factoryProvider.provide, useFactory: (...deps) => { return new (factoryProvider.provide.bind(null, ...deps))(); }, deps: factoryProvider.deps || [] }; } static createClassProvider() { const providerBase = new this(); const productionFactory = providerBase.productionFactory; let factoryProvider; switch (ENVIRONMENT_TOKEN.value) { case null: case undefined: factoryProvider = providerBase.designFactory; break; case false: factoryProvider = providerBase.developmentFactory; break; default: factoryProvider = productionFactory; } return { provide: productionFactory.provide, useClass: factoryProvider.provide }; } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tdnZtL3Byb3ZpZGVycy9TZXJ2aWNlUHJvdmlkZXJCYXNlLnRzIl0sIm5hbWVzIjpbIk9iamVjdEJhc2UiLCJFTlZJUk9OTUVOVF9UT0tFTiIsIlNlcnZpY2VQcm92aWRlckJhc2UiLCJwcm92aWRlIiwiZmFjdG9yeVByb3ZpZGVyIiwiY29uc3RydWN0b3IiLCJjcmVhdGVGYWN0b3J5UHJvdmlkZXIiLCJpbmplY3QiLCJ1c2VGYWN0b3J5IiwiZGVwcyIsInByb3ZpZGVyIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJkZXNpZ25GYWN0b3J5IiwiZGV2ZWxvcG1lbnRGYWN0b3J5IiwicHJvZHVjdGlvbkZhY3RvcnkiLCJiaW5kIiwiY3JlYXRlQ2xhc3NQcm92aWRlciIsInByb3ZpZGVyQmFzZSIsInVzZUNsYXNzIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxVQUFULFFBQTJCLHVCQUEzQjtBQUNBLFNBQVNDLGlCQUFULFFBQWtDLDRCQUFsQztBQXlCQSxPQUFPLE1BQWVDLG1CQUFmLFNBQTJFRixVQUEzRSxDQUNQO0FBT1dHLEVBQUFBLE9BQU8sQ0FBQ0EsT0FBRCxFQUNkO0FBQ0ksVUFBTUMsZUFBZSxHQUFJLEtBQUtDLFdBQU4sQ0FDbkJDLHFCQURtQixDQUNNSCxPQUROLEVBQ2UsSUFEZixDQUF4QjtBQUdBLFFBQUksQ0FBQ0MsZUFBZSxDQUFDRCxPQUFyQixFQUNJQyxlQUFlLENBQUNELE9BQWhCLEdBQTBCQSxPQUExQjtBQUVKLFdBQU8sS0FBS0ksTUFBTCxDQUNIO0FBQ0lKLE1BQUFBLE9BQU8sRUFBS0MsZUFBZSxDQUFDRCxPQURoQztBQUVJSyxNQUFBQSxVQUFVLEVBQUVKLGVBQWUsQ0FBQ0ksVUFGaEM7QUFHSUMsTUFBQUEsSUFBSSxFQUFRTCxlQUFlLENBQUNLO0FBSGhDLEtBREcsQ0FBUDtBQU9IOztBQVNrQyxTQUFyQkgscUJBQXFCLENBQy9CSCxPQUQrQixFQUUvQk8sUUFBZ0MsR0FBRyxJQUFLLElBQUwsRUFGSixFQUluQztBQUNJLFFBQUlOLGVBQUo7O0FBQ0EsWUFBUUgsaUJBQWlCLENBQUNVLEtBQTFCO0FBQ0ksV0FBSyxJQUFMO0FBQ0EsV0FBS0MsU0FBTDtBQUNJUixRQUFBQSxlQUFlLEdBQUdNLFFBQVEsQ0FBQ0csYUFBM0I7QUFDQTs7QUFDSixXQUFLLEtBQUw7QUFDSVQsUUFBQUEsZUFBZSxHQUFHTSxRQUFRLENBQUNJLGtCQUEzQjtBQUNBOztBQUNKO0FBQ0lWLFFBQUFBLGVBQWUsR0FBR00sUUFBUSxDQUFDSyxpQkFBM0I7QUFUUjs7QUFZQSxRQUFJLENBQUNYLGVBQWUsQ0FBQ0QsT0FBckIsRUFDSUMsZUFBZSxDQUFDRCxPQUFoQixHQUEwQkEsT0FBMUI7QUFFSixXQUFPO0FBQ0hBLE1BQUFBLE9BQU8sRUFBS0MsZUFBZSxDQUFDRCxPQUR6QjtBQUVISyxNQUFBQSxVQUFVLEVBQUcsQ0FBQyxHQUFHQyxJQUFKLEtBQ2I7QUFDSSxlQUFPLEtBQU1MLGVBQWUsQ0FBQ0QsT0FBakIsQ0FBeURhLElBQXpELENBQThELElBQTlELEVBQW9FLEdBQUdQLElBQXZFLENBQUwsR0FBUDtBQUNILE9BTEU7QUFNSEEsTUFBQUEsSUFBSSxFQUFRTCxlQUFlLENBQUNLLElBQWhCLElBQXdCO0FBTmpDLEtBQVA7QUFRSDs7QUFLZ0MsU0FBbkJRLG1CQUFtQixHQUNqQztBQUNJLFVBQU1DLFlBQVksR0FBUSxJQUFLLElBQUwsRUFBMUI7QUFDQSxVQUFNSCxpQkFBaUIsR0FBR0csWUFBWSxDQUFDSCxpQkFBdkM7QUFDQSxRQUFJWCxlQUFKOztBQUVBLFlBQVFILGlCQUFpQixDQUFDVSxLQUExQjtBQUNJLFdBQUssSUFBTDtBQUNBLFdBQUtDLFNBQUw7QUFDSVIsUUFBQUEsZUFBZSxHQUFHYyxZQUFZLENBQUNMLGFBQS9CO0FBQ0E7O0FBQ0osV0FBSyxLQUFMO0FBQ0lULFFBQUFBLGVBQWUsR0FBR2MsWUFBWSxDQUFDSixrQkFBL0I7QUFDQTs7QUFDSjtBQUNJVixRQUFBQSxlQUFlLEdBQUdXLGlCQUFsQjtBQVRSOztBQVlBLFdBQU87QUFDSFosTUFBQUEsT0FBTyxFQUFHWSxpQkFBaUIsQ0FBQ1osT0FEekI7QUFFSGdCLE1BQUFBLFFBQVEsRUFBRWYsZUFBZSxDQUFDRDtBQUZ2QixLQUFQO0FBSUg7O0FBdkZMIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xhc3NQcm92aWRlckNvbmZpZywgRmFjdG9yeVByb3ZpZGVyQ29uZmlnLCBUb2tlbiB9IGZyb20gJ0Bhd2Vzb21lLW5vZGVzL2luamVjdGlvbi1mYWN0b3J5JztcbmltcG9ydCB7IE9iamVjdEJhc2UgfSBmcm9tICdAYXdlc29tZS1ub2Rlcy9vYmplY3QnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlRfVE9LRU4gfSBmcm9tICdAYXdlc29tZS1ub2Rlcy9vYmplY3QvZGF0YSc7XG5pbXBvcnQgeyBTZXJ2aWNlQmFzZSB9IGZyb20gJ212dm0vc2VydmljZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0b3JGdW5jdGlvbiB9IGZyb20gJ3NpbXBseXR5cGVkJztcblxuXG4vKipcbiAqIENvbmZpZ3VyZXMgdGhlIGZhY3RvcnkgcHJvdmlkZXIgdG8gcmV0dXJuIHRoZSBzZXJ2aWNlIGZhY3RvcnkgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU2VydmljZVByb3ZpZGVyXG57XG4gICAgLyoqXG4gICAgICogQW4gaW5qZWN0aW9uIHRva2VuLiAoVHlwaWNhbGx5IGFuIGluc3RhbmNlIG9mIGBUeXBlYCBvciBgSW5qZWN0aW9uVG9rZW5gLCBidXQgY2FuIGJlIGBhbnlgKS5cbiAgICAgKi9cbiAgICBwcm92aWRlPzogQ29uc3RydWN0b3JGdW5jdGlvbjxvYmplY3Q+O1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIGB0b2tlbmBzIHdoaWNoIG5lZWQgdG8gYmUgcmVzb2x2ZWQgYnkgdGhlIGluamVjdG9yLiBUaGUgbGlzdCBvZiB2YWx1ZXMgaXMgdGhlblxuICAgICAqIHVzZWQgYXMgYXJndW1lbnRzIHRvIHRoZSBgdXNlRmFjdG9yeWAgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZGVwcz86IEFycmF5PFRva2VuPjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBiYXNlIG9iamVjdCBmb3IgdGhlIHByb3ZpZGVyIGluIHRoZSBzZXJ2aWNlIHByb3ZpZGVyIHBhdHRlcm4uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTZXJ2aWNlUHJvdmlkZXJCYXNlPFQgZXh0ZW5kcyBTZXJ2aWNlQmFzZTx1bmtub3duPj4gZXh0ZW5kcyBPYmplY3RCYXNlXG57XG4gICAgcHVibGljIGFic3RyYWN0IGdldCBkZXNpZ25GYWN0b3J5KCk6IElTZXJ2aWNlUHJvdmlkZXI7XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0IGRldmVsb3BtZW50RmFjdG9yeSgpOiBJU2VydmljZVByb3ZpZGVyO1xuXG4gICAgcHVibGljIGFic3RyYWN0IGdldCBwcm9kdWN0aW9uRmFjdG9yeSgpOiBJU2VydmljZVByb3ZpZGVyO1xuXG4gICAgcHVibGljIHByb3ZpZGUocHJvdmlkZTogQ29uc3RydWN0b3JGdW5jdGlvbjxUPik6IFRcbiAgICB7XG4gICAgICAgIGNvbnN0IGZhY3RvcnlQcm92aWRlciA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBTZXJ2aWNlUHJvdmlkZXJCYXNlKVxuICAgICAgICAgICAgLmNyZWF0ZUZhY3RvcnlQcm92aWRlcjxUPihwcm92aWRlLCB0aGlzKTtcblxuICAgICAgICBpZiAoIWZhY3RvcnlQcm92aWRlci5wcm92aWRlKVxuICAgICAgICAgICAgZmFjdG9yeVByb3ZpZGVyLnByb3ZpZGUgPSBwcm92aWRlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmluamVjdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlICAgOiBmYWN0b3J5UHJvdmlkZXIucHJvdmlkZSxcbiAgICAgICAgICAgICAgICB1c2VGYWN0b3J5OiBmYWN0b3J5UHJvdmlkZXIudXNlRmFjdG9yeSxcbiAgICAgICAgICAgICAgICBkZXBzICAgICAgOiBmYWN0b3J5UHJvdmlkZXIuZGVwcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFic3RyYWN0IGluamVjdChwcm92aWRlcjogRmFjdG9yeVByb3ZpZGVyQ29uZmlnPFQ+KTogVDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGZhY3RvcnkgY29uZmlndXJhdGlvbiBwcm92aWRlZCBieSBhIGRlcml2ZWQgcHJvdmlkZXIgdHlwZSBvbiB3aGljaCB0aGlzIGZ1bmN0aW9uIHdhcyBpbnZva2VkIG9uLlxuICAgICAqIEBwYXJhbSBwcm92aWRlXG4gICAgICogQHBhcmFtIHByb3ZpZGVyXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGYWN0b3J5UHJvdmlkZXI8VSBleHRlbmRzIFNlcnZpY2VCYXNlPHVua25vd24+PihcbiAgICAgICAgcHJvdmlkZTogQ29uc3RydWN0b3JGdW5jdGlvbjxVPixcbiAgICAgICAgcHJvdmlkZXI6IFNlcnZpY2VQcm92aWRlckJhc2U8VT4gPSBuZXcgKHRoaXMgYXMgdW5rbm93biBhcyBDb25zdHJ1Y3RvckZ1bmN0aW9uPFNlcnZpY2VQcm92aWRlckJhc2U8VT4+KSgpKTpcbiAgICAgICAgRmFjdG9yeVByb3ZpZGVyQ29uZmlnPFU+XG4gICAge1xuICAgICAgICBsZXQgZmFjdG9yeVByb3ZpZGVyOiBJU2VydmljZVByb3ZpZGVyO1xuICAgICAgICBzd2l0Y2ggKEVOVklST05NRU5UX1RPS0VOLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgICAgICAgICBmYWN0b3J5UHJvdmlkZXIgPSBwcm92aWRlci5kZXNpZ25GYWN0b3J5O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBmYWxzZTpcbiAgICAgICAgICAgICAgICBmYWN0b3J5UHJvdmlkZXIgPSBwcm92aWRlci5kZXZlbG9wbWVudEZhY3Rvcnk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGZhY3RvcnlQcm92aWRlciA9IHByb3ZpZGVyLnByb2R1Y3Rpb25GYWN0b3J5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmYWN0b3J5UHJvdmlkZXIucHJvdmlkZSlcbiAgICAgICAgICAgIGZhY3RvcnlQcm92aWRlci5wcm92aWRlID0gcHJvdmlkZTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvdmlkZSAgIDogZmFjdG9yeVByb3ZpZGVyLnByb3ZpZGUsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoKC4uLmRlcHM6IEFycmF5PHVua25vd24+KTogb2JqZWN0ID0+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAoKGZhY3RvcnlQcm92aWRlci5wcm92aWRlIGFzIENvbnN0cnVjdG9yRnVuY3Rpb248b2JqZWN0PikuYmluZChudWxsLCAuLi5kZXBzKSkoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZGVwcyAgICAgIDogZmFjdG9yeVByb3ZpZGVyLmRlcHMgfHwgW10sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc3RhZ2luZyBjb25maWd1cmF0aW9uIHByb3ZpZGVkIGJ5IHRoZSB0eXBlIG9uIHdoaWNoIHRoaXMgZnVuY3Rpb24gd2FzIGludm9rZWQgb24uXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVDbGFzc1Byb3ZpZGVyPFUgZXh0ZW5kcyBTZXJ2aWNlQmFzZTx1bmtub3duPj4oKTogQ2xhc3NQcm92aWRlckNvbmZpZzxVPlxuICAgIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXJCYXNlICAgICAgPSBuZXcgKHRoaXMgYXMgdW5rbm93biBhcyBDb25zdHJ1Y3RvckZ1bmN0aW9uPFNlcnZpY2VQcm92aWRlckJhc2U8VT4+KSgpO1xuICAgICAgICBjb25zdCBwcm9kdWN0aW9uRmFjdG9yeSA9IHByb3ZpZGVyQmFzZS5wcm9kdWN0aW9uRmFjdG9yeTtcbiAgICAgICAgbGV0IGZhY3RvcnlQcm92aWRlcjogSVNlcnZpY2VQcm92aWRlcjtcblxuICAgICAgICBzd2l0Y2ggKEVOVklST05NRU5UX1RPS0VOLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgICAgICAgICBmYWN0b3J5UHJvdmlkZXIgPSBwcm92aWRlckJhc2UuZGVzaWduRmFjdG9yeTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgZmFsc2U6XG4gICAgICAgICAgICAgICAgZmFjdG9yeVByb3ZpZGVyID0gcHJvdmlkZXJCYXNlLmRldmVsb3BtZW50RmFjdG9yeTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZmFjdG9yeVByb3ZpZGVyID0gcHJvZHVjdGlvbkZhY3Rvcnk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvdmlkZSA6IHByb2R1Y3Rpb25GYWN0b3J5LnByb3ZpZGUgYXMgVG9rZW48VT4sXG4gICAgICAgICAgICB1c2VDbGFzczogZmFjdG9yeVByb3ZpZGVyLnByb3ZpZGUgYXMgQ29uc3RydWN0b3JGdW5jdGlvbjxVPixcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=