diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 21b0b36..b85b20d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -45,7 +45,7 @@ jobs: run: npm install --ignore-scripts - name: Prepare package - run: npx -p typescript tsc --declaration --emitDeclarationOnly --allowJs --checkJs --downlevelIteration --module nodenext --moduleResolution nodenext --target es2022 --outDir . index.js + run: npx -p typescript tsc --declaration --emitDeclarationOnly --allowJs --checkJs --module nodenext --moduleResolution nodenext --target es2022 --outDir . index.js - name: Upload package artifact uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 diff --git a/index.js b/index.js index 9181a88..bfc3ad2 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,14 @@ // Borrowed/modified from https://github.com/jenseng/abuse-the-platform/blob/2993a7e846c95ace693ce61626fa072174c8d9c7/app/utils/singleton.ts +/** + * @returns {Map} + */ +function getRememberMap() { + /** @type {typeof globalThis & { __remember_epic_web?: Map }} */ + const thusly = globalThis + return (thusly.__remember_epic_web ??= new Map()) +} + /** * Remembers and retrieves a value by a given name, or the value generated by `getValue` if the name doesn't exist. * The return type is inferred from the return type of `getValue`. @@ -10,12 +19,11 @@ * @returns {Value} - The remembered value. */ export function remember(name, getValue) { - const thusly = globalThis - thusly.__remember_epic_web ??= new Map() - if (!thusly.__remember_epic_web.has(name)) { - thusly.__remember_epic_web.set(name, getValue()) + const rememberMap = getRememberMap() + if (!rememberMap.has(name)) { + rememberMap.set(name, getValue()) } - return thusly.__remember_epic_web.get(name) + return /** @type {Value} */ (rememberMap.get(name)) } /** @@ -25,7 +33,5 @@ export function remember(name, getValue) { * @return {boolean} - A remembered value existed and has been forgotten. */ export function forget(name) { - const thusly = globalThis - thusly.__remember_epic_web ??= new Map() - return thusly.__remember_epic_web.delete(name) + return getRememberMap().delete(name) }