{
  "version": 3,
  "sources": ["../../../src/provider.ts"],
  "sourcesContent": ["import type { Component } from 'solid-js';\nimport { onCleanup } from 'solid-js';\n\nlet PROVIDER: ProviderTree | undefined;\n\ninterface ProviderData<T> {\n  value: T;\n}\n\ninterface ProviderTree {\n  parent?: ProviderTree;\n  data: Record<string, ProviderData<any> | undefined>;\n}\n\nexport function capturedProvider<T extends any[], R>(\n  callback: (...args: T) => R,\n): (...args: T) => R {\n  const current = PROVIDER;\n  return (...args) => {\n    const parent = PROVIDER;\n    PROVIDER = current;\n    try {\n      return callback(...args);\n    } finally {\n      PROVIDER = parent;\n    }\n  };\n}\n\nexport function providerScope<T>(callback: () => T): T {\n  const parent = PROVIDER;\n  PROVIDER = {\n    parent,\n    data: {},\n  };\n  try {\n    return callback();\n  } finally {\n    PROVIDER = parent;\n  }\n}\n\nexport interface Provider<T> {\n  id: number;\n  defaultValue: T;\n}\n\nlet ID = 0;\n\nexport function createProvider<T>(defaultValue: T): Provider<T> {\n  return {\n    id: ID++,\n    defaultValue,\n  };\n}\n\nexport function provide<T>(context: Provider<T>, value: T): void {\n  const parent = PROVIDER;\n  if (parent) {\n    parent.data[context.id] = { value };\n\n    onCleanup(() => {\n      parent.data[context.id] = undefined;\n    });\n  }\n}\n\nexport function inject<T>(context: Provider<T>): T {\n  let current = PROVIDER;\n  while (current) {\n    const currentData = current.data[context.id];\n    if (currentData) {\n      return currentData.value;\n    }\n    current = current.parent;\n  }\n  return context.defaultValue;\n}\n\nexport function withProvider<T extends Record<string, any>>(\n  Comp: Component<T>,\n): Component<T> {\n  return props => providerScope(() => Comp(props));\n}\n"],
  "mappings": ";AACA,SAAS,iBAAiB;AAE1B,IAAI;AAWG,SAAS,iBACd,UACmB;AACnB,QAAM,UAAU;AAChB,SAAO,IAAI,SAAS;AAClB,UAAM,SAAS;AACf,eAAW;AACX,QAAI;AACF,aAAO,SAAS,GAAG,IAAI;AAAA,IACzB,UAAE;AACA,iBAAW;AAAA,IACb;AAAA,EACF;AACF;AAEO,SAAS,cAAiB,UAAsB;AACrD,QAAM,SAAS;AACf,aAAW;AAAA,IACT;AAAA,IACA,MAAM,CAAC;AAAA,EACT;AACA,MAAI;AACF,WAAO,SAAS;AAAA,EAClB,UAAE;AACA,eAAW;AAAA,EACb;AACF;AAOA,IAAI,KAAK;AAEF,SAAS,eAAkB,cAA8B;AAC9D,SAAO;AAAA,IACL,IAAI;AAAA,IACJ;AAAA,EACF;AACF;AAEO,SAAS,QAAW,SAAsB,OAAgB;AAC/D,QAAM,SAAS;AACf,MAAI,QAAQ;AACV,WAAO,KAAK,QAAQ,EAAE,IAAI,EAAE,MAAM;AAElC,cAAU,MAAM;AACd,aAAO,KAAK,QAAQ,EAAE,IAAI;AAAA,IAC5B,CAAC;AAAA,EACH;AACF;AAEO,SAAS,OAAU,SAAyB;AACjD,MAAI,UAAU;AACd,SAAO,SAAS;AACd,UAAM,cAAc,QAAQ,KAAK,QAAQ,EAAE;AAC3C,QAAI,aAAa;AACf,aAAO,YAAY;AAAA,IACrB;AACA,cAAU,QAAQ;AAAA,EACpB;AACA,SAAO,QAAQ;AACjB;AAEO,SAAS,aACd,MACc;AACd,SAAO,WAAS,cAAc,MAAM,KAAK,KAAK,CAAC;AACjD;",
  "names": []
}
