didi
Version:
Dependency Injection for JavaScript
1 lines • 24.9 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../lib/util.js","../lib/annotation.js","../lib/injector.js"],"sourcesContent":["const CLASS_PATTERN = /^class[ {]/;\n\n\n/**\n * @param {function} fn\n *\n * @return {boolean}\n */\nexport function isClass(fn) {\n return CLASS_PATTERN.test(fn.toString());\n}\n\n/**\n * @param {any} obj\n *\n * @return {boolean}\n */\nexport function isArray(obj) {\n return Array.isArray(obj);\n}\n\n/**\n * @param {any} obj\n * @param {string} prop\n *\n * @return {boolean}\n */\nexport function hasOwnProp(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}","import {\n isArray,\n isClass\n} from './util.js';\n\n/**\n * @typedef {import('./index.js').InjectAnnotated } InjectAnnotated\n */\n\n/**\n * @template T\n *\n * @params {[...string[], T] | ...string[], T} args\n *\n * @return {T & InjectAnnotated}\n */\nexport function annotate(...args) {\n\n if (args.length === 1 && isArray(args[0])) {\n args = args[0];\n }\n\n args = [ ...args ];\n\n const fn = args.pop();\n\n fn.$inject = args;\n\n return fn;\n}\n\n\n// Current limitations:\n// - can't put into \"function arg\" comments\n// function /* (no parenthesis like this) */ (){}\n// function abc( /* xx (no parenthesis like this) */ a, b) {}\n//\n// Just put the comment before function or inside:\n// /* (((this is fine))) */ function(a, b) {}\n// function abc(a) { /* (((this is fine))) */}\n//\n// - can't reliably auto-annotate constructor; we'll match the\n// first constructor(...) pattern found which may be the one\n// of a nested class, too.\n\nconst CONSTRUCTOR_ARGS = /constructor\\s*[^(]*\\(\\s*([^)]*)\\)/m;\nconst FN_ARGS = /^(?:async\\s+)?(?:function\\s*[^(]*)?(?:\\(\\s*([^)]*)\\)|(\\w+))/m;\nconst FN_ARG = /\\/\\*([^*]*)\\*\\//m;\n\n/**\n * @param {unknown} fn\n *\n * @return {string[]}\n */\nexport function parseAnnotations(fn) {\n\n if (typeof fn !== 'function') {\n throw new Error(`Cannot annotate \"${fn}\". Expected a function!`);\n }\n\n const match = fn.toString().match(isClass(fn) ? CONSTRUCTOR_ARGS : FN_ARGS);\n\n // may parse class without constructor\n if (!match) {\n return [];\n }\n\n const args = match[1] || match[2];\n\n return args && args.split(',').map(arg => {\n const argMatch = arg.match(FN_ARG);\n return (argMatch && argMatch[1] || arg).trim();\n }) || [];\n}","import {\n parseAnnotations,\n annotate\n} from './annotation.js';\n\nimport {\n isArray,\n hasOwnProp\n} from './util.js';\n\n/**\n * @typedef { import('./index.js').ModuleDeclaration } ModuleDeclaration\n * @typedef { import('./index.js').ModuleDefinition } ModuleDefinition\n * @typedef { import('./index.js').InjectorContext } InjectorContext\n *\n * @typedef { import('./index.js').TypedDeclaration<any, any> } TypedDeclaration\n */\n\n/**\n * Create a new injector with the given modules.\n *\n * @param {ModuleDefinition[]} modules\n * @param {InjectorContext} [_parent]\n */\nexport default function Injector(modules, _parent) {\n\n const parent = _parent || /** @type InjectorContext */ ({\n get: function(name, strict) {\n currentlyResolving.push(name);\n\n if (strict === false) {\n return null;\n } else {\n throw error(`No provider for \"${ name }\"!`);\n }\n }\n });\n\n const currentlyResolving = [];\n const providers = this._providers = Object.create(parent._providers || null);\n const instances = this._instances = Object.create(null);\n\n const self = instances.injector = this;\n\n const error = function(msg) {\n const stack = currentlyResolving.join(' -> ');\n currentlyResolving.length = 0;\n return new Error(stack ? `${ msg } (Resolving: ${ stack })` : msg);\n };\n\n /**\n * Return a named service.\n *\n * @param {string} name\n * @param {boolean} [strict=true] if false, resolve missing services to null\n *\n * @return {any}\n */\n function get(name, strict) {\n if (!providers[name] && name.includes('.')) {\n\n const parts = name.split('.');\n let pivot = get(/** @type { string } */ (parts.shift()));\n\n while (parts.length) {\n pivot = pivot[/** @type { string } */ (parts.shift())];\n }\n\n return pivot;\n }\n\n if (hasOwnProp(instances, name)) {\n return instances[name];\n }\n\n if (hasOwnProp(providers, name)) {\n if (currentlyResolving.indexOf(name) !== -1) {\n currentlyResolving.push(name);\n throw error('Cannot resolve circular dependency!');\n }\n\n currentlyResolving.push(name);\n instances[name] = providers[name][0](providers[name][1]);\n currentlyResolving.pop();\n\n return instances[name];\n }\n\n return parent.get(name, strict);\n }\n\n function fnDef(fn, locals) {\n\n if (typeof locals === 'undefined') {\n locals = {};\n }\n\n if (typeof fn !== 'function') {\n if (isArray(fn)) {\n fn = annotate(fn.slice());\n } else {\n throw error(`Cannot invoke \"${ fn }\". Expected a function!`);\n }\n }\n\n /**\n * @type {string[]}\n */\n const inject = fn.$inject || parseAnnotations(fn);\n const dependencies = inject.map(dep => {\n if (hasOwnProp(locals, dep)) {\n return locals[dep];\n } else {\n return get(dep);\n }\n });\n\n return {\n fn: fn,\n dependencies\n };\n }\n\n /**\n * Instantiate the given type, injecting dependencies.\n *\n * @template T\n *\n * @param { Function | [...string[], Function ]} type\n *\n * @return T\n */\n function instantiate(type) {\n const {\n fn,\n dependencies\n } = fnDef(type);\n\n // instantiate var args constructor\n const Constructor = Function.prototype.bind.call(fn, null, ...dependencies);\n\n return new Constructor();\n }\n\n /**\n * Invoke the given function, injecting dependencies. Return the result.\n *\n * @template T\n *\n * @param { Function | [...string[], Function ]} func\n * @param { Object } [context]\n * @param { Object } [locals]\n *\n * @return {T} invocation result\n */\n function invoke(func, context, locals) {\n const {\n fn,\n dependencies\n } = fnDef(func, locals);\n\n return fn.apply(context, dependencies);\n }\n\n /**\n * @param {Injector} childInjector\n *\n * @return {Function}\n */\n function createPrivateInjectorFactory(childInjector) {\n return annotate(key => childInjector.get(key));\n }\n\n /**\n * @param {ModuleDefinition[]} modules\n * @param {string[]} [forceNewInstances]\n *\n * @return {Injector}\n */\n function createChild(modules, forceNewInstances) {\n if (forceNewInstances && forceNewInstances.length) {\n const fromParentModule = Object.create(null);\n const matchedScopes = Object.create(null);\n\n const privateInjectorsCache = [];\n const privateChildInjectors = [];\n const privateChildFactories = [];\n\n let provider;\n let cacheIdx;\n let privateChildInjector;\n let privateChildInjectorFactory;\n\n for (let name in providers) {\n provider = providers[name];\n\n if (forceNewInstances.indexOf(name) !== -1) {\n if (provider[2] === 'private') {\n cacheIdx = privateInjectorsCache.indexOf(provider[3]);\n if (cacheIdx === -1) {\n privateChildInjector = provider[3].createChild([], forceNewInstances);\n privateChildInjectorFactory = createPrivateInjectorFactory(privateChildInjector);\n privateInjectorsCache.push(provider[3]);\n privateChildInjectors.push(privateChildInjector);\n privateChildFactories.push(privateChildInjectorFactory);\n fromParentModule[name] = [ privateChildInjectorFactory, name, 'private', privateChildInjector ];\n } else {\n fromParentModule[name] = [ privateChildFactories[cacheIdx], name, 'private', privateChildInjectors[cacheIdx] ];\n }\n } else {\n fromParentModule[name] = [ provider[2], provider[1] ];\n }\n matchedScopes[name] = true;\n }\n\n if ((provider[2] === 'factory' || provider[2] === 'type') && provider[1].$scope) {\n /* jshint -W083 */\n forceNewInstances.forEach(scope => {\n if (provider[1].$scope.indexOf(scope) !== -1) {\n fromParentModule[name] = [ provider[2], provider[1] ];\n matchedScopes[scope] = true;\n }\n });\n }\n }\n\n forceNewInstances.forEach(scope => {\n if (!matchedScopes[scope]) {\n throw new Error('No provider for \"' + scope + '\". Cannot use provider from the parent!');\n }\n });\n\n modules.unshift(fromParentModule);\n }\n\n return new Injector(modules, self);\n }\n\n const factoryMap = {\n factory: invoke,\n type: instantiate,\n value: function(value) {\n return value;\n }\n };\n\n /**\n * @param {ModuleDefinition} moduleDefinition\n * @param {Injector} injector\n */\n function createInitializer(moduleDefinition, injector) {\n\n const initializers = moduleDefinition.__init__ || [];\n\n return function() {\n initializers.forEach(initializer => {\n\n // eagerly resolve component (fn or string)\n if (typeof initializer === 'string') {\n injector.get(initializer);\n } else {\n injector.invoke(initializer);\n }\n });\n };\n }\n\n /**\n * @param {ModuleDefinition} moduleDefinition\n */\n function loadModule(moduleDefinition) {\n\n const moduleExports = moduleDefinition.__exports__;\n\n // private module\n if (moduleExports) {\n const nestedModules = moduleDefinition.__modules__;\n\n const clonedModule = Object.keys(moduleDefinition).reduce((clonedModule, key) => {\n\n if (key !== '__exports__' && key !== '__modules__' && key !== '__init__' && key !== '__depends__') {\n clonedModule[key] = moduleDefinition[key];\n }\n\n return clonedModule;\n }, Object.create(null));\n\n const childModules = (nestedModules || []).concat(clonedModule);\n\n const privateInjector = createChild(childModules);\n const getFromPrivateInjector = annotate(function(key) {\n return privateInjector.get(key);\n });\n\n moduleExports.forEach(function(key) {\n providers[key] = [ getFromPrivateInjector, key, 'private', privateInjector ];\n });\n\n // ensure child injector initializes\n const initializers = (moduleDefinition.__init__ || []).slice();\n\n initializers.unshift(function() {\n privateInjector.init();\n });\n\n moduleDefinition = Object.assign({}, moduleDefinition, {\n __init__: initializers\n });\n\n return createInitializer(moduleDefinition, privateInjector);\n }\n\n // normal module\n Object.keys(moduleDefinition).forEach(function(key) {\n\n if (key === '__init__' || key === '__depends__') {\n return;\n }\n\n const typeDeclaration = /** @type { TypedDeclaration } */ (\n moduleDefinition[key]\n );\n\n if (typeDeclaration[2] === 'private') {\n providers[key] = typeDeclaration;\n return;\n }\n\n const type = typeDeclaration[0];\n const value = typeDeclaration[1];\n\n providers[key] = [ factoryMap[type], arrayUnwrap(type, value), type ];\n });\n\n return createInitializer(moduleDefinition, self);\n }\n\n /**\n * @param {ModuleDefinition[]} moduleDefinitions\n * @param {ModuleDefinition} moduleDefinition\n *\n * @return {ModuleDefinition[]}\n */\n function resolveDependencies(moduleDefinitions, moduleDefinition) {\n\n if (moduleDefinitions.indexOf(moduleDefinition) !== -1) {\n return moduleDefinitions;\n }\n\n moduleDefinitions = (moduleDefinition.__depends__ || []).reduce(resolveDependencies, moduleDefinitions);\n\n if (moduleDefinitions.indexOf(moduleDefinition) !== -1) {\n return moduleDefinitions;\n }\n\n return moduleDefinitions.concat(moduleDefinition);\n }\n\n /**\n * @param {ModuleDefinition[]} moduleDefinitions\n *\n * @return { () => void } initializerFn\n */\n function bootstrap(moduleDefinitions) {\n\n const initializers = moduleDefinitions\n .reduce(resolveDependencies, [])\n .map(loadModule);\n\n let initialized = false;\n\n return function() {\n\n if (initialized) {\n return;\n }\n\n initialized = true;\n\n initializers.forEach(initializer => initializer());\n };\n }\n\n // public API\n this.get = get;\n this.invoke = invoke;\n this.instantiate = instantiate;\n this.createChild = createChild;\n\n // setup\n this.init = bootstrap(modules);\n}\n\n\n// helpers ///////////////\n\nfunction arrayUnwrap(type, value) {\n if (type !== 'value' && isArray(value)) {\n value = annotate(value.slice());\n }\n\n return value;\n}"],"names":[],"mappings":"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"}