{
  "version": 3,
  "sources": ["../src/container/ContainerContext.ts", "../src/container/ContainerProvider.tsx", "../src/container/useContainer.ts", "../src/injection/useInjection.ts", "../src/conditions/ConditionsContext.ts", "../src/conditions/ConditionsProvider.tsx", "../src/conditions/useConditions.ts", "../src/conditions/tagged.tsx", "../src/injection/createInjectionHooks.ts"],
  "sourcesContent": ["import { Container } from 'brandi';\nimport React from 'react';\n\nexport const ContainerContext = React.createContext<Container | null>(null);\n", "import { Container } from 'brandi';\nimport React from 'react';\n\nimport { ContainerContext } from './ContainerContext';\nimport { useContainer } from './useContainer';\n\nexport const ContainerProvider: React.FunctionComponent<{\n  children?: React.ReactNode;\n  container: Container;\n  isolated?: boolean;\n}> = ({ children, container, isolated = false }) => {\n  const parentContainer = useContainer(false);\n\n  const extend = !isolated ? parentContainer : null;\n\n  const clonedContainer = React.useMemo(() => {\n    const cloned = container.clone();\n    if (extend) cloned.extend(extend);\n    return cloned;\n  }, [container, extend]);\n\n  return (\n    <ContainerContext.Provider value={clonedContainer}>\n      {children}\n    </ContainerContext.Provider>\n  );\n};\n", "import { Container } from 'brandi';\nimport React from 'react';\n\nimport { ContainerContext } from './ContainerContext';\n\nexport function useContainer(strict?: true): Container;\nexport function useContainer(strict?: false): Container | null;\nexport function useContainer(strict: boolean = true): Container | null {\n  const container = React.useContext(ContainerContext);\n\n  if (strict && container === null) {\n    throw new Error(\n      \"Could not get a container from a context. Did you forget to pass the container through 'ContainerProvider'?\",\n    );\n  }\n\n  return container;\n}\n", "import { TokenType, TokenValue } from 'brandi';\nimport React from 'react';\n\nimport { useConditions } from '../conditions';\nimport { useContainer } from '../container';\n\nexport const useInjection = <T extends TokenValue>(token: T): TokenType<T> => {\n  const container = useContainer();\n  const conditions = useConditions();\n\n  return React.useMemo(() => container.get(token, conditions), [\n    token,\n    conditions,\n    container,\n  ]);\n};\n", "import React from 'react';\nimport { ResolutionCondition } from 'brandi';\n\nexport const ConditionsContext = React.createContext<ResolutionCondition[]>([]);\n", "import React from 'react';\nimport { ResolutionCondition } from 'brandi';\n\nimport { ConditionsContext } from './ConditionsContext';\nimport { useConditions } from './useConditions';\n\nexport const ConditionsProvider: React.FunctionComponent<{\n  children?: React.ReactNode;\n  conditions: ResolutionCondition[];\n  isolated?: boolean;\n}> = ({ children, conditions, isolated = false }) => {\n  const currentConditions = useConditions();\n  const resolvedConditions = React.useMemo(\n    () =>\n      currentConditions.length > 0 && !isolated\n        ? [...new Set([...currentConditions, ...conditions])]\n        : conditions,\n    [currentConditions, conditions, isolated],\n  );\n\n  return (\n    <ConditionsContext.Provider value={resolvedConditions}>\n      {children}\n    </ConditionsContext.Provider>\n  );\n};\n", "import React from 'react';\n\nimport { ConditionsContext } from './ConditionsContext';\n\nexport const useConditions = () => React.useContext(ConditionsContext);\n", "import React from 'react';\nimport { Tag } from 'brandi';\n\nimport { ConditionsProvider } from './ConditionsProvider';\n\nexport interface TaggedOptions {\n  isolated?: boolean;\n}\n\nexport const tagged = (...tags: Tag[]) => <P extends unknown>(\n  Component: React.ComponentType<P>,\n  options: TaggedOptions = {},\n): React.FunctionComponent<P> => {\n  const Wrapper: React.FunctionComponent<P> = (props) => (\n    <ConditionsProvider conditions={tags} isolated={options.isolated}>\n      <Component {...props} />\n    </ConditionsProvider>\n  );\n\n  Wrapper.displayName = Component.displayName\n    ? `Tagged(${Component.displayName})`\n    : 'Tagged';\n\n  return Wrapper;\n};\n", "import { TokenType, TokenValue } from 'brandi';\n\nimport { useInjection } from './useInjection';\n\ntype InjectionHooks<T extends TokenValue[]> = {\n  [K in keyof T]: T[K] extends TokenValue ? () => TokenType<T[K]> : never;\n};\n\nexport const createInjectionHooks = <T extends TokenValue[]>(\n  ...tokens: T\n): InjectionHooks<T> =>\n  tokens.map((token) => () => useInjection(token)) as InjectionHooks<T>;\n"],
  "mappings": ";AACA;AAEO,IAAM,mBAAmB,MAAM,cAAgC;;;ACFtE;;;ACAA;AAMO,sBAAsB,SAAkB,MAAwB;AACrE,QAAM,YAAY,OAAM,WAAW;AAEnC,MAAI,UAAU,cAAc,MAAM;AAChC,UAAM,IAAI,MACR;AAAA;AAIJ,SAAO;AAAA;;;ADVF,IAAM,oBAIR,CAAC,CAAE,UAAU,WAAW,WAAW,WAAY;AAClD,QAAM,kBAAkB,aAAa;AAErC,QAAM,SAAS,CAAC,WAAW,kBAAkB;AAE7C,QAAM,kBAAkB,OAAM,QAAQ,MAAM;AAC1C,UAAM,SAAS,UAAU;AACzB,QAAI;AAAQ,aAAO,OAAO;AAC1B,WAAO;AAAA,KACN,CAAC,WAAW;AAEf,SACE,qCAAC,iBAAiB,UAAlB;AAAA,IAA2B,OAAO;AAAA,KAC/B;AAAA;;;AEtBP;;;ACDA;AAGO,IAAM,oBAAoB,OAAM,cAAqC;;;ACH5E;;;ACAA;AAIO,IAAM,gBAAgB,MAAM,OAAM,WAAW;;;ADE7C,IAAM,qBAIR,CAAC,CAAE,UAAU,YAAY,WAAW,WAAY;AACnD,QAAM,oBAAoB;AAC1B,QAAM,qBAAqB,OAAM,QAC/B,MACE,kBAAkB,SAAS,KAAK,CAAC,WAC7B,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,mBAAmB,GAAG,gBACtC,YACN,CAAC,mBAAmB,YAAY;AAGlC,SACE,qCAAC,kBAAkB,UAAnB;AAAA,IAA4B,OAAO;AAAA,KAChC;AAAA;;;AEtBP;AASO,IAAM,SAAS,IAAI,SAAgB,CACxC,WACA,UAAyB,OACM;AAC/B,QAAM,UAAsC,CAAC,UAC3C,qCAAC,oBAAD;AAAA,IAAoB,YAAY;AAAA,IAAM,UAAU,QAAQ;AAAA,KACtD,qCAAC,WAAD;AAAA,OAAe;AAAA;AAInB,UAAQ,cAAc,UAAU,cAC5B,UAAU,UAAU,iBACpB;AAEJ,SAAO;AAAA;;;AJjBF,IAAM,eAAe,CAAuB,UAA2B;AAC5E,QAAM,YAAY;AAClB,QAAM,aAAa;AAEnB,SAAO,OAAM,QAAQ,MAAM,UAAU,IAAI,OAAO,aAAa;AAAA,IAC3D;AAAA,IACA;AAAA,IACA;AAAA;AAAA;;;AKLG,IAAM,uBAAuB,IAC/B,WAEH,OAAO,IAAI,CAAC,UAAU,MAAM,aAAa;",
  "names": []
}
