333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../browser/src/container.ts"],"names":[],"mappings":"AAuBA;;;GAGG;AACH,IAAM,gBAAgB,GAAuB,IAAI;IAAC;QACtC,cAAS,GAAsC,EAAE,CAAC;IAW9D,CAAC;IATG,qBAAG,GAAH,UAAO,SAA2B;QAC9B,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,KAAK,SAAS,EAApB,CAAoB,CAAC,CAAC;QAC9D,IAAI,CAAC,QAAQ,EAAE;YACX,QAAQ,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAK,SAAwB,EAAE,EAAC,CAAC;YACvE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACjC;QAED,OAAO,QAAQ,CAAC,MAAM,CAAC;IAC3B,CAAC;IACL,cAAC;AAAD,CAZkD,AAYjD,IAAC,EAAE,CAAC;AAEL,IAAI,aAAiC,CAAC;AACtC,IAAI,oBAAmD,CAAC;AAExD;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,YAAgC,EAAE,OAA6B;IACxF,aAAa,GAAG,YAAY,CAAC;IAC7B,oBAAoB,GAAG,OAAO,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAI,SAA2B;IAC3D,IAAI,aAAa,EAAE;QACf,IAAI;YACA,IAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,QAAQ;gBACR,OAAO,QAAQ,CAAC;YAEpB,IAAI,CAAC,oBAAoB,IAAI,CAAC,oBAAoB,CAAC,QAAQ;gBACvD,OAAO,QAAQ,CAAC;SAEvB;QAAC,OAAO,KAAK,EAAE;YACZ,IAAI,CAAC,oBAAoB,IAAI,CAAC,oBAAoB,CAAC,gBAAgB;gBAC/D,MAAM,KAAK,CAAC;SACnB;KACJ;IACD,OAAO,gBAAgB,CAAC,GAAG,CAAI,SAAS,CAAC,CAAC;AAC9C,CAAC","file":"container.js","sourcesContent":["/**\n * Container options.\n */\nexport interface UseContainerOptions {\n\n    /**\n     * If set to true, then default container will be used in the case if given container haven't returned anything.\n     */\n    fallback?: boolean;\n\n    /**\n     * If set to true, then default container will be used in the case if given container thrown an exception.\n     */\n    fallbackOnErrors?: boolean;\n\n}\n\nexport type ContainedType<T> = { new (...args: any[]): T } | Function;\n\nexport interface ContainerInterface {\n    get<T>(someClass: ContainedType<T>): T;\n}\n\n/**\n * Container to be used by this library for inversion control. If container was not implicitly set then by default\n * container simply creates a new instance of the given class.\n */\nconst defaultContainer: ContainerInterface = new (class implements ContainerInterface {\n    private instances: { type: Function, object: any }[] = [];\n\n    get<T>(someClass: ContainedType<T>): T {\n        let instance = this.instances.find(i => i.type === someClass);\n        if (!instance) {\n            instance = { type: someClass, object: new (someClass as new() => T)()};\n            this.instances.push(instance);\n        }\n\n        return instance.object;\n    }\n})();\n\nlet userContainer: ContainerInterface;\nlet userContainerOptions: UseContainerOptions|undefined;\n\n/**\n * Sets container to be used by this library.\n */\nexport function useContainer(iocContainer: ContainerInterface, options?: UseContainerOptions) {\n    userContainer = iocContainer;\n    userContainerOptions = options;\n}\n\n/**\n * Gets the IOC container used by this library.\n */\nexport function getFromContainer<T>(someClass: ContainedType<T>): T {\n    if (userContainer) {\n        try {\n            const instance = userContainer.get(someClass);\n            if (instance)\n                return instance;\n\n            if (!userContainerOptions || !userContainerOptions.fallback)\n                return instance;\n\n        } catch (error) {\n            if (!userContainerOptions || !userContainerOptions.fallbackOnErrors)\n                throw error;\n        }\n    }\n    return defaultContainer.get<T>(someClass);\n}"],"sourceRoot":"."}