{"version":3,"sources":["common/spec/providerSpec.ts"],"names":[],"mappings":"","file":"../../../common/spec/providerSpec.d.ts","sourcesContent":["import { sleep } from '../mutexHelper.js';\nimport { LazyProvider, passThroughProvider, singletonProvider } from '../provider.js';\n\ndescribe('the provider tools', () => {\n  it('can lazy load a thing with reload', async () => {\n    const startMs = Date.now();\n    let counter = 0;\n    const lazy = new LazyProvider(() => sleep(100).then(() => { counter += 1; return `frickjack  + ${counter++}-${Date.now()}`; }), 1);\n    const thingPromise1 = lazy.get();\n    const thingPromise2 = lazy.get();\n    expect(thingPromise1).toBe(thingPromise2);\n    const v = await Promise.all([thingPromise1, thingPromise2]);\n    expect(v.length).toBe(2);\n    expect(v[0]).toBe(v[1]);\n    await sleep(1500);\n    // trigger reload\n    // eslint-disable-next-line\n    const thing3 = await lazy.get();\n    // wait for new value to load\n    await sleep(200);\n    const thing4 = await lazy.get();\n    // console.log(`test thing 4: ${thing4 === v[0]}`);\n    expect(thing4).not.toBe(v[0]);\n    const thing5 = await lazy.refreshIfNecessary(false).next;\n    expect(thing5).toBe(thing4);\n    const thing6 = await lazy.refreshIfNecessary(true).next;\n    // console.log(`test thing 5: ${thing5 === thing6}`);\n    expect(thing6).not.toBe(thing5);\n    expect(lazy.lastLoadTime).toBeGreaterThan(startMs);\n  });\n\n  it('can transform a thing', async () => {\n    let counter = 0;\n    const lazy = new LazyProvider(() => sleep(100).then(() => { counter += 1; return counter; }), 1).transform((num) => `The number is ${num}`);\n\n    // first value should be 1 - note that LazyProvider is \"then-able\" ...\n    const str1 = await lazy.get();\n    expect(str1).toBe('The number is 1');\n    // second value will still be 1, but it triggered an update\n    const str2 = await sleep(1500).then(() => lazy.get());\n    expect(str2).toBe(str1);\n    // third value should pickup the update\n    const str3 = await sleep(200).then(() => lazy.get());\n    expect(str3).toBe('The number is 2');\n  });\n\n  it('does not cache when ttl is zero', (done) => {\n    let counter = 0;\n    const provider = passThroughProvider(() => counter++);\n    let it = 0;\n    const handler = (result:number) => {\n      const shouldbe = it;\n      expect(result).toBe(shouldbe);\n      it += 1;\n      if (it < 10) {\n        provider.get().then(handler);\n      } else {\n        done();\n      }\n    };\n    provider.get().then(handler);\n  });\n\n  it('supports singletons', async () => {\n    const thing = 'frickjack';\n    const provider = singletonProvider(() => thing);\n    const thing1 = await provider.get();\n    const thing2 = await provider.get();\n    expect(thing1).toBe(thing2);\n    expect(thing).toBe(thing1);\n  });\n});\n"]}