{"version":3,"file":"ng-auto-moq.mjs","sources":["../../../projects/ng-auto-moq/src/lib/token-name.provider.ts","../../../projects/ng-auto-moq/src/lib/reflector.ts","../../../projects/ng-auto-moq/src/lib/tested-unit-provider.factory.ts","../../../projects/ng-auto-moq/src/lib/provider-factory.ts","../../../projects/ng-auto-moq/src/lib/mock-factory.ts","../../../projects/ng-auto-moq/src/lib/parameters-static-providers.factory.ts","../../../projects/ng-auto-moq/src/lib/deps-factory.ts","../../../projects/ng-auto-moq/src/lib/moq-injector-providers.ts","../../../projects/ng-auto-moq/src/lib/index.ts","../../../projects/ng-auto-moq/src/lib/resolveMock.ts","../../../projects/ng-auto-moq/src/public_api.ts","../../../projects/ng-auto-moq/src/ng-auto-moq.ts"],"sourcesContent":["export class TokenNameProvider {\n    getName(token: any): string {\n        if (typeof token === \"string\") {\n            return token;\n        }\n\n        if (token instanceof Array) {\n            return `[${token.map(this.getName).join(\", \")}]`;\n        }\n\n        if (token == null) {\n            return `${token}`;\n        }\n\n        if (token.overriddenName) {\n            return `${token.overriddenName}`;\n        }\n\n        if (token.name) {\n            return `${token.name}`;\n        }\n\n        const res = token.toString();\n\n        if (res == null) {\n            return `${res}`;\n        }\n\n        const newLineIndex = res.indexOf(\"\\n\");\n        return newLineIndex === -1 ? res : res.substring(0, newLineIndex);\n    }\n}\n","import { Inject, InjectionToken, Optional, resolveForwardRef, Self, SkipSelf, Type } from \"@angular/core\";\nimport { IParameter, Visibility } from \"./types\";\nimport { InjectionFactory, TypeofInjectionFactory } from \"@testdozer/ng-injector-types\";\nimport { TokenNameProvider } from \"./token-name.provider\";\n\ndeclare let global: any;\n\n/**\n * Provides dependencies metadata of inspected angular class.\n *\n * @param type The inspected class\n */\nexport class Reflector implements InjectionFactory {\n    constructor(\n        @Inject(TokenNameProvider)\n        private readonly tokenName: TokenNameProvider) {\n        return this.factory() as any;\n    }\n\n    private static parameters(type: any): any[][] {\n        const paramAnnotations = type.hasOwnProperty(\"__parameters__\") && (type as any)[\"__parameters__\"];\n        const reflect = (global || window)[\"Reflect\"];\n        const paramTypes = reflect.getOwnMetadata(\"design:paramtypes\", type);\n        if (paramTypes || paramAnnotations) {\n            return Reflector.zipTypesAndAnnotations(paramTypes, paramAnnotations);\n        }\n        return [];\n    }\n\n    private static zipTypesAndAnnotations(paramTypes: any[], paramAnnotations: any[]): any[][] {\n        let result: any[][];\n\n        if (typeof paramTypes === \"undefined\") {\n            result = new Array(paramAnnotations.length);\n        } else {\n            result = new Array(paramTypes.length);\n        }\n\n        for (let i = 0; i < result.length; i++) {\n            // TS outputs Object for parameters without types, while Traceur omits\n            // the annotations. For now we preserve the Traceur behavior to aid\n            // migration, but this can be revisited.\n            if (typeof paramTypes === \"undefined\") {\n                result[i] = [];\n            } else if (paramTypes[i] !== Object) {\n                result[i] = [paramTypes[i]];\n            } else {\n                result[i] = [];\n            }\n            if (paramAnnotations && paramAnnotations[i] != null) {\n                result[i] = result[i].concat(paramAnnotations[i]);\n            }\n        }\n        return result;\n    }\n\n    factory() {\n        return <T>(type: Type<T>): IParameter[] => {\n            const params = Reflector.parameters(type);\n            return params.map(p => this.extractToken(p));\n        };\n    }\n\n    private extractToken(metadata: any[] | any): IParameter {\n        let token: any = null;\n        let optional = false;\n\n        if (!Array.isArray(metadata)) {\n            if (metadata instanceof Inject) {\n                return this.createDependency(metadata.token, optional, Visibility.None);\n            } else {\n                return this.createDependency(metadata, optional, Visibility.None);\n            }\n        }\n\n        let visibility: Visibility = Visibility.None;\n\n        for (const paramMetadata of metadata) {\n            if (paramMetadata instanceof Type) {\n                token = paramMetadata;\n\n            } else if (paramMetadata instanceof Inject) {\n                token = paramMetadata.token;\n\n            } else if (paramMetadata instanceof Optional) {\n                optional = true;\n\n            } else if (paramMetadata instanceof Self) {\n                visibility = Visibility.Self;\n            } else if (paramMetadata instanceof SkipSelf) {\n                visibility = Visibility.SkipSelf;\n            } else if (paramMetadata instanceof InjectionToken) {\n                token = paramMetadata;\n            }\n        }\n\n        token = resolveForwardRef(token);\n\n        return this.createDependency(token, optional, visibility);\n    }\n\n    private createDependency(token: any, optional: boolean, visibility: Visibility): IParameter {\n        return {displayName: this.tokenName.getName(token), token, optional, visibility};\n    }\n\n}\n\n\n","import { StaticProvider, Type } from \"@angular/core\";\nimport { InjectionFactory } from \"@testdozer/ng-injector-types\";\n\nexport class TestedUnitProviderFactory implements InjectionFactory {\n    constructor() {\n        return this.factory() as any;\n    }\n\n    factory() {\n        return <T>(type: Type<T>, dependencies: any []): StaticProvider => ({provide: type, useClass: type, deps: [...dependencies]});\n    }\n}\n","import { IParameter, OnlyStaticProvider } from \"./types\";\nimport { InjectionFactory } from \"@testdozer/ng-injector-types\";\n\nexport class ProviderFactory implements InjectionFactory {\n    constructor() {\n        return this.factory() as any;\n    }\n\n    factory() {\n        return (parameter: IParameter, mocked: any): OnlyStaticProvider | undefined =>\n            ({provide: parameter.token, useValue: mocked});\n    }\n}\n","import { IMock, Mock } from \"moq.ts\";\nimport { IParameter } from \"./types\";\nimport { InjectionFactory } from \"@testdozer/ng-injector-types\";\n\nexport class MockFactory implements InjectionFactory {\n    constructor() {\n        return this.factory() as any;\n    }\n\n    factory() {\n        return (parameter: IParameter): IMock<any> => new Mock<any>({name: parameter.displayName});\n    }\n}\n","import { Inject } from \"@angular/core\";\nimport { IParameter, OnlyStaticProvider } from \"./types\";\nimport { ProviderFactory } from \"./provider-factory\";\nimport { InjectionFactory, TypeofInjectionFactory } from \"@testdozer/ng-injector-types\";\nimport { MockFactory } from \"./mock-factory\";\n\nexport class ParametersStaticProviderFactory implements InjectionFactory {\n    constructor(\n        @Inject(ProviderFactory)\n        private readonly providerFactory: TypeofInjectionFactory<ProviderFactory>,\n        @Inject(MockFactory)\n        private readonly mockFactory: TypeofInjectionFactory<MockFactory>) {\n        return this.factory() as any;\n    }\n\n    factory() {\n        return <T>(parameters: IParameter []): OnlyStaticProvider[] => {\n            const providers: OnlyStaticProvider[] = [];\n            for (const parameter of parameters) {\n                const mock = this.mockFactory(parameter);\n                const staticProvider = this.providerFactory(parameter, mock.object());\n                if (staticProvider !== undefined) {\n                    providers.push(staticProvider);\n                }\n            }\n\n            return providers;\n        };\n    }\n}\n","import { Optional } from \"@angular/core\";\nimport { IParameter } from \"./types\";\nimport { InjectionFactory } from \"@testdozer/ng-injector-types\";\n\nexport class DepsFactory implements InjectionFactory {\n    constructor() {\n        return this.factory() as any;\n    }\n\n    factory() {\n        return (parameters: IParameter[]): any[] => parameters\n            .map(p => {\n                if (p.optional === true) {\n                    return [new Optional(), p.token];\n                }\n                return p.token;\n            });\n    }\n}\n","import { Inject, StaticProvider, Type } from \"@angular/core\";\nimport { Reflector } from \"./reflector\";\nimport { TestedUnitProviderFactory } from \"./tested-unit-provider.factory\";\nimport { ParametersStaticProviderFactory } from \"./parameters-static-providers.factory\";\nimport { IOptions } from \"./types\";\nimport { DepsFactory } from \"./deps-factory\";\nimport { InjectionFactory, TypeofInjectionFactory } from \"@testdozer/ng-injector-types\";\n\n\nexport class MoqInjectorProviders implements InjectionFactory {\n    constructor(\n        @Inject(Reflector)\n        private readonly reflector: TypeofInjectionFactory<Reflector>,\n        @Inject(TestedUnitProviderFactory)\n        private readonly testedUnitProviderFactory: TypeofInjectionFactory<TestedUnitProviderFactory>,\n        @Inject(DepsFactory)\n        private readonly depsFactory: TypeofInjectionFactory<DepsFactory>,\n        @Inject(ParametersStaticProviderFactory)\n        private readonly parametersStaticProviderFactory: TypeofInjectionFactory<ParametersStaticProviderFactory>) {\n        return this.factory() as any;\n    }\n\n    factory() {\n        return <T>(type: Type<T>, options: IOptions = {skipSelf: false, skipOptional: false}): StaticProvider[] => {\n            const parameters = this.reflector(type);\n            const provider = this.testedUnitProviderFactory(type, this.depsFactory(parameters));\n            const onlyRequiredParameters = options.skipOptional\n                ? parameters.filter(({optional}) => optional === false)\n                : parameters;\n            const providers = Array.from(this.parametersStaticProviderFactory(onlyRequiredParameters));\n            return options?.skipSelf ? providers : [provider, ...providers];\n        };\n    }\n\n}\n","import { Injector } from \"@angular/core\";\nimport { Reflector } from \"./reflector\";\nimport { MoqInjectorProviders } from \"./moq-injector-providers\";\nimport { TypeofInjectionFactory } from \"@testdozer/ng-injector-types\";\nimport { TestedUnitProviderFactory } from \"./tested-unit-provider.factory\";\nimport { DepsFactory } from \"./deps-factory\";\nimport { ParametersStaticProviderFactory } from \"./parameters-static-providers.factory\";\nimport { ProviderFactory } from \"./provider-factory\";\nimport { MockFactory } from \"./mock-factory\";\nimport { OnlyStaticProvider } from \"./types\";\nimport { TokenNameProvider } from \"./token-name.provider\";\n\n/**\n * Provides the service-to-test and its (moq) dependencies\n */\nexport const moqInjectorProvidersFactory = (options: { providers?: OnlyStaticProvider[] } = {}) => {\n    const injector = Injector.create({\n        providers: [\n            {\n                provide: MoqInjectorProviders,\n                useClass: MoqInjectorProviders,\n                deps: [Reflector, TestedUnitProviderFactory, DepsFactory, ParametersStaticProviderFactory]\n            },\n            {provide: TestedUnitProviderFactory, useClass: TestedUnitProviderFactory, deps: []},\n            {provide: DepsFactory, useClass: DepsFactory, deps: []},\n            {provide: ProviderFactory, useClass: ProviderFactory, deps: []},\n            {provide: ParametersStaticProviderFactory, useClass: ParametersStaticProviderFactory, deps: [ProviderFactory, MockFactory]},\n            {provide: MockFactory, useClass: MockFactory, deps: []},\n            {provide: Reflector, useClass: Reflector, deps: [TokenNameProvider]},\n            {provide: TokenNameProvider, useClass: TokenNameProvider, deps: []},\n            ...(options.providers || [])\n        ]\n    });\n    return injector.get(MoqInjectorProviders) as unknown as TypeofInjectionFactory<MoqInjectorProviders>;\n};\n","import { InjectionToken, Injector, Type } from \"@angular/core\";\nimport { IMock, MoqAPI } from \"moq.ts\";\n\n/**\n * Gets an instance of IMock interface for mocked object according to provided token.\n * Injector should be built with {@link moqInjectorProvidersFactory}.\n *\n * @param token angular token\n * @param injector angular injector\n */\nexport const resolveMock = <T>(token: Type<T> | InjectionToken<T>, injector: Injector): IMock<T> => {\n    const object = injector.get(token) as unknown;\n    return object[MoqAPI] as IMock<T>;\n};\n","/*\n * Public API Surface of ng-auto-moq\n */\n\nexport * from \"./lib/index\";\nexport * from \"./lib/types\";\nexport * from \"./lib/reflector\";\nexport * from \"./lib/resolveMock\";\nexport * from \"./lib/deps-factory\";\nexport * from \"./lib/mock-factory\";\nexport * from \"./lib/moq-injector-providers\";\nexport * from \"./lib/parameters-static-providers.factory\";\nexport * from \"./lib/tested-unit-provider.factory\";\nexport * from \"./lib/token-name.provider\";\nexport * from \"./lib/provider-factory\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}