graphql-modules
Version:
Create reusable, maintainable, testable and extendable GraphQL modules
61 lines (60 loc) • 2.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Scope = exports.InjectionToken = exports.Type = void 0;
exports.isToken = isToken;
exports.isType = isType;
exports.onlySingletonProviders = onlySingletonProviders;
exports.onlyOperationProviders = onlyOperationProviders;
exports.isClassProvider = isClassProvider;
exports.isFactoryProvider = isFactoryProvider;
const metadata_1 = require("./metadata");
exports.Type = Function;
/// @ts-ignore
class InjectionToken {
constructor(_desc) {
this._desc = _desc;
}
toString() {
return `InjectionToken ${this._desc}`;
}
}
exports.InjectionToken = InjectionToken;
function isToken(v) {
return v && v instanceof InjectionToken;
}
function isType(v) {
return typeof v === 'function' && v !== Object;
}
var Scope;
(function (Scope) {
Scope[Scope["Singleton"] = 0] = "Singleton";
Scope[Scope["Operation"] = 1] = "Operation";
})(Scope || (exports.Scope = Scope = {}));
function onlySingletonProviders(providers = []) {
return providers.filter((provider) => {
if (isType(provider)) {
const { options } = (0, metadata_1.readInjectableMetadata)(provider, true);
return (options === null || options === void 0 ? void 0 : options.scope) !== Scope.Operation;
}
else {
return provider.scope !== Scope.Operation;
}
});
}
function onlyOperationProviders(providers = []) {
return providers.filter((provider) => {
if (isType(provider)) {
const { options } = (0, metadata_1.readInjectableMetadata)(provider, true);
return (options === null || options === void 0 ? void 0 : options.scope) === Scope.Operation;
}
else {
return provider.scope === Scope.Operation;
}
});
}
function isClassProvider(provider) {
return typeof provider.useClass !== 'undefined';
}
function isFactoryProvider(provider) {
return typeof provider.useFactory !== 'undefined';
}