| import { defineConfig } from 'vitest/config'; | ||
| import { resolve } from 'path'; | ||
| export default defineConfig({ | ||
| test: { | ||
| globals: true, | ||
| include: ['./**/__tests__/*.test.ts'], | ||
| setupFiles: [resolve(__dirname, '../../', 'vx/config/vitest/customMatchers.ts')], | ||
| }, | ||
| root: __dirname, | ||
| resolve: { | ||
| alias: { | ||
| context: resolve(__dirname, 'src/context.ts') | ||
| } | ||
| }, | ||
| }); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"context.development.js","sources":["../../src/context.ts"],"sourcesContent":["import type { CB, Maybe } from 'vest-utils';\nimport {\n assign,\n defaultTo,\n invariant,\n optionalFunctionValue,\n Nullable,\n} from 'vest-utils';\n\nconst USEX_DEFAULT_ERROR_MESSAGE = 'Not inside of a running context.';\nconst EMPTY_CONTEXT = Symbol();\n\n/**\n * Base context interface.\n */\nexport function createContext<T>(defaultContextValue?: T): CtxApi<T> {\n let contextValue: T | symbol = EMPTY_CONTEXT;\n\n return {\n run,\n use,\n useX,\n };\n\n function use(): T {\n return (isInsideContext() ? contextValue : defaultContextValue) as T;\n }\n\n function useX(errorMessage?: string): T {\n invariant(\n isInsideContext(),\n defaultTo(errorMessage, USEX_DEFAULT_ERROR_MESSAGE)\n );\n return contextValue as T;\n }\n\n function run<R>(value: T, cb: () => R): R {\n const parentContext = isInsideContext() ? use() : EMPTY_CONTEXT;\n\n contextValue = value;\n\n const res = cb();\n\n contextValue = parentContext;\n return res;\n }\n\n function isInsideContext(): boolean {\n return contextValue !== EMPTY_CONTEXT;\n }\n}\n\n/**\n * Cascading context - another implementation of context, that assumes the context value is an object.\n * When nesting context runs, the the values of the current layer merges with the layers above it.\n */\nexport function createCascade<T extends Record<string, unknown>>(\n init?: (value: Partial<T>, parentContext: Maybe<T>) => Nullable<T>\n): CtxCascadeApi<T> {\n const ctx = createContext<T>();\n\n return {\n bind,\n run,\n use: ctx.use,\n useX: ctx.useX,\n };\n\n function run<R>(value: Partial<T>, fn: () => R): R {\n const parentContext = ctx.use();\n\n const out = assign(\n {},\n parentContext ? parentContext : {},\n optionalFunctionValue(init, value, parentContext) ?? value\n ) as T;\n\n return ctx.run(Object.freeze(out), fn) as R;\n }\n\n function bind<Fn extends CB>(value: Partial<T>, fn: Fn) {\n return function (...runTimeArgs: Parameters<Fn>) {\n return run<ReturnType<Fn>>(value, function () {\n return fn(...runTimeArgs);\n });\n } as Fn;\n }\n}\n\ntype ContextConsumptionApi<T> = {\n use: () => T;\n useX: (errorMessage?: string) => T;\n};\n\nexport type CtxApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: T, cb: () => R) => R;\n};\n\nexport type CtxCascadeApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: Partial<T>, fn: () => R) => R;\n bind: <Fn extends CB>(value: Partial<T>, fn: Fn) => Fn;\n};\n"],"names":["invariant","defaultTo","assign","optionalFunctionValue"],"mappings":";;;;AASA,MAAM,0BAA0B,GAAG,kCAAkC,CAAC;AACtE,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;AAE/B;;AAEG;AACG,SAAU,aAAa,CAAI,mBAAuB,EAAA;IACtD,IAAI,YAAY,GAAe,aAAa,CAAC;IAE7C,OAAO;QACL,GAAG;QACH,GAAG;QACH,IAAI;KACL,CAAC;AAEF,IAAA,SAAS,GAAG,GAAA;AACV,QAAA,QAAQ,eAAe,EAAE,GAAG,YAAY,GAAG,mBAAmB,EAAO;KACtE;IAED,SAAS,IAAI,CAAC,YAAqB,EAAA;QACjCA,mBAAS,CACP,eAAe,EAAE,EACjBC,mBAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC,CACpD,CAAC;AACF,QAAA,OAAO,YAAiB,CAAC;KAC1B;AAED,IAAA,SAAS,GAAG,CAAI,KAAQ,EAAE,EAAW,EAAA;AACnC,QAAA,MAAM,aAAa,GAAG,eAAe,EAAE,GAAG,GAAG,EAAE,GAAG,aAAa,CAAC;QAEhE,YAAY,GAAG,KAAK,CAAC;AAErB,QAAA,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC;QAEjB,YAAY,GAAG,aAAa,CAAC;AAC7B,QAAA,OAAO,GAAG,CAAC;KACZ;AAED,IAAA,SAAS,eAAe,GAAA;QACtB,OAAO,YAAY,KAAK,aAAa,CAAC;KACvC;AACH,CAAC;AAED;;;AAGG;AACG,SAAU,aAAa,CAC3B,IAAkE,EAAA;AAElE,IAAA,MAAM,GAAG,GAAG,aAAa,EAAK,CAAC;IAE/B,OAAO;QACL,IAAI;QACJ,GAAG;QACH,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,IAAI,EAAE,GAAG,CAAC,IAAI;KACf,CAAC;AAEF,IAAA,SAAS,GAAG,CAAI,KAAiB,EAAE,EAAW,EAAA;;AAC5C,QAAA,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;AAEhC,QAAA,MAAM,GAAG,GAAGC,gBAAM,CAChB,EAAE,EACF,aAAa,GAAG,aAAa,GAAG,EAAE,EAClC,CAAA,EAAA,GAAAC,+BAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CACtD,CAAC;AAEP,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAM,CAAC;KAC7C;AAED,IAAA,SAAS,IAAI,CAAgB,KAAiB,EAAE,EAAM,EAAA;QACpD,OAAO,UAAU,GAAG,WAA2B,EAAA;YAC7C,OAAO,GAAG,CAAiB,KAAK,EAAE,YAAA;AAChC,gBAAA,OAAO,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;AAC5B,aAAC,CAAC,CAAC;AACL,SAAO,CAAC;KACT;AACH;;;;;"} | ||
| {"version":3,"file":"context.development.js","sources":["../../src/context.ts"],"sourcesContent":["import type { CB, Maybe } from 'vest-utils';\nimport {\n assign,\n defaultTo,\n invariant,\n optionalFunctionValue,\n Nullable,\n} from 'vest-utils';\n\nconst USEX_DEFAULT_ERROR_MESSAGE = 'Not inside of a running context.';\nconst EMPTY_CONTEXT = Symbol();\n\n/**\n * Base context interface.\n */\nexport function createContext<T>(defaultContextValue?: T): CtxApi<T> {\n let contextValue: T | symbol = EMPTY_CONTEXT;\n\n return {\n run,\n use,\n useX,\n };\n\n function use(): T {\n return (isInsideContext() ? contextValue : defaultContextValue) as T;\n }\n\n function useX(errorMessage?: string): T {\n invariant(\n isInsideContext(),\n defaultTo(errorMessage, USEX_DEFAULT_ERROR_MESSAGE),\n );\n return contextValue as T;\n }\n\n function run<R>(value: T, cb: () => R): R {\n const parentContext = isInsideContext() ? use() : EMPTY_CONTEXT;\n\n contextValue = value;\n\n const res = cb();\n\n contextValue = parentContext;\n return res;\n }\n\n function isInsideContext(): boolean {\n return contextValue !== EMPTY_CONTEXT;\n }\n}\n\n/**\n * Cascading context - another implementation of context, that assumes the context value is an object.\n * When nesting context runs, the the values of the current layer merges with the layers above it.\n */\nexport function createCascade<T extends Record<string, unknown>>(\n init?: (value: Partial<T>, parentContext: Maybe<T>) => Nullable<T>,\n): CtxCascadeApi<T> {\n const ctx = createContext<T>();\n\n return {\n bind,\n run,\n use: ctx.use,\n useX: ctx.useX,\n };\n\n function run<R>(value: Partial<T>, fn: () => R): R {\n const parentContext = ctx.use();\n\n const out = assign(\n {},\n parentContext ? parentContext : {},\n optionalFunctionValue(init, value, parentContext) ?? value,\n ) as T;\n\n return ctx.run(Object.freeze(out), fn) as R;\n }\n\n function bind<Fn extends CB>(value: Partial<T>, fn: Fn) {\n return function (...runTimeArgs: Parameters<Fn>) {\n return run<ReturnType<Fn>>(value, function () {\n return fn(...runTimeArgs);\n });\n } as Fn;\n }\n}\n\ntype ContextConsumptionApi<T> = {\n use: () => T;\n useX: (errorMessage?: string) => T;\n};\n\nexport type CtxApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: T, cb: () => R) => R;\n};\n\nexport type CtxCascadeApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: Partial<T>, fn: () => R) => R;\n bind: <Fn extends CB>(value: Partial<T>, fn: Fn) => Fn;\n};\n"],"names":["invariant","defaultTo","assign","optionalFunctionValue"],"mappings":";;;;AASA,MAAM,0BAA0B,GAAG,kCAAkC,CAAC;AACtE,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;AAE/B;;AAEG;AACG,SAAU,aAAa,CAAI,mBAAuB,EAAA;IACtD,IAAI,YAAY,GAAe,aAAa,CAAC;IAE7C,OAAO;QACL,GAAG;QACH,GAAG;QACH,IAAI;KACL,CAAC;AAEF,IAAA,SAAS,GAAG,GAAA;AACV,QAAA,QAAQ,eAAe,EAAE,GAAG,YAAY,GAAG,mBAAmB,EAAO;KACtE;IAED,SAAS,IAAI,CAAC,YAAqB,EAAA;QACjCA,mBAAS,CACP,eAAe,EAAE,EACjBC,mBAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC,CACpD,CAAC;AACF,QAAA,OAAO,YAAiB,CAAC;KAC1B;AAED,IAAA,SAAS,GAAG,CAAI,KAAQ,EAAE,EAAW,EAAA;AACnC,QAAA,MAAM,aAAa,GAAG,eAAe,EAAE,GAAG,GAAG,EAAE,GAAG,aAAa,CAAC;QAEhE,YAAY,GAAG,KAAK,CAAC;AAErB,QAAA,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC;QAEjB,YAAY,GAAG,aAAa,CAAC;AAC7B,QAAA,OAAO,GAAG,CAAC;KACZ;AAED,IAAA,SAAS,eAAe,GAAA;QACtB,OAAO,YAAY,KAAK,aAAa,CAAC;KACvC;AACH,CAAC;AAED;;;AAGG;AACG,SAAU,aAAa,CAC3B,IAAkE,EAAA;AAElE,IAAA,MAAM,GAAG,GAAG,aAAa,EAAK,CAAC;IAE/B,OAAO;QACL,IAAI;QACJ,GAAG;QACH,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,IAAI,EAAE,GAAG,CAAC,IAAI;KACf,CAAC;AAEF,IAAA,SAAS,GAAG,CAAI,KAAiB,EAAE,EAAW,EAAA;;AAC5C,QAAA,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;AAEhC,QAAA,MAAM,GAAG,GAAGC,gBAAM,CAChB,EAAE,EACF,aAAa,GAAG,aAAa,GAAG,EAAE,EAClC,CAAA,EAAA,GAAAC,+BAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CACtD,CAAC;AAEP,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAM,CAAC;KAC7C;AAED,IAAA,SAAS,IAAI,CAAgB,KAAiB,EAAE,EAAM,EAAA;QACpD,OAAO,UAAU,GAAG,WAA2B,EAAA;YAC7C,OAAO,GAAG,CAAiB,KAAK,EAAE,YAAA;AAChC,gBAAA,OAAO,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;AAC5B,aAAC,CAAC,CAAC;AACL,SAAO,CAAC;KACT;AACH;;;;;"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"context.production.js","sources":["../../src/context.ts"],"sourcesContent":["import type { CB, Maybe } from 'vest-utils';\nimport {\n assign,\n defaultTo,\n invariant,\n optionalFunctionValue,\n Nullable,\n} from 'vest-utils';\n\nconst USEX_DEFAULT_ERROR_MESSAGE = 'Not inside of a running context.';\nconst EMPTY_CONTEXT = Symbol();\n\n/**\n * Base context interface.\n */\nexport function createContext<T>(defaultContextValue?: T): CtxApi<T> {\n let contextValue: T | symbol = EMPTY_CONTEXT;\n\n return {\n run,\n use,\n useX,\n };\n\n function use(): T {\n return (isInsideContext() ? contextValue : defaultContextValue) as T;\n }\n\n function useX(errorMessage?: string): T {\n invariant(\n isInsideContext(),\n defaultTo(errorMessage, USEX_DEFAULT_ERROR_MESSAGE)\n );\n return contextValue as T;\n }\n\n function run<R>(value: T, cb: () => R): R {\n const parentContext = isInsideContext() ? use() : EMPTY_CONTEXT;\n\n contextValue = value;\n\n const res = cb();\n\n contextValue = parentContext;\n return res;\n }\n\n function isInsideContext(): boolean {\n return contextValue !== EMPTY_CONTEXT;\n }\n}\n\n/**\n * Cascading context - another implementation of context, that assumes the context value is an object.\n * When nesting context runs, the the values of the current layer merges with the layers above it.\n */\nexport function createCascade<T extends Record<string, unknown>>(\n init?: (value: Partial<T>, parentContext: Maybe<T>) => Nullable<T>\n): CtxCascadeApi<T> {\n const ctx = createContext<T>();\n\n return {\n bind,\n run,\n use: ctx.use,\n useX: ctx.useX,\n };\n\n function run<R>(value: Partial<T>, fn: () => R): R {\n const parentContext = ctx.use();\n\n const out = assign(\n {},\n parentContext ? parentContext : {},\n optionalFunctionValue(init, value, parentContext) ?? value\n ) as T;\n\n return ctx.run(Object.freeze(out), fn) as R;\n }\n\n function bind<Fn extends CB>(value: Partial<T>, fn: Fn) {\n return function (...runTimeArgs: Parameters<Fn>) {\n return run<ReturnType<Fn>>(value, function () {\n return fn(...runTimeArgs);\n });\n } as Fn;\n }\n}\n\ntype ContextConsumptionApi<T> = {\n use: () => T;\n useX: (errorMessage?: string) => T;\n};\n\nexport type CtxApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: T, cb: () => R) => R;\n};\n\nexport type CtxCascadeApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: Partial<T>, fn: () => R) => R;\n bind: <Fn extends CB>(value: Partial<T>, fn: Fn) => Fn;\n};\n"],"names":["USEX_DEFAULT_ERROR_MESSAGE","EMPTY_CONTEXT","Symbol","createContext","defaultContextValue","contextValue","run","value","cb","parentContext","isInsideContext","use","res","useX","errorMessage","invariant","defaultTo","init","ctx","bind","fn","runTimeArgs","out","assign","_a","optionalFunctionValue","Object","freeze"],"mappings":"yCASA,MAAMA,EAA6B,mCAC7BC,EAAgBC,SAKhB,SAAUC,EAAiBC,GAC/B,IAAIC,EAA2BJ,EAE/B,MAAO,CACLK,IAiBF,SAAgBC,EAAUC,GACxB,MAAMC,EAAgBC,IAAoBC,IAAQV,EAElDI,EAAeE,EAEf,MAAMK,EAAMJ,IAGZ,OADAH,EAAeI,EACRG,CACR,EAzBCD,MACAE,KAOF,SAAcC,GAKZ,OAJAC,EAASA,UACPL,IACAM,EAAAA,UAAUF,EAAcd,IAEnBK,CACR,GAVD,SAASM,IACP,OAAQD,IAAoBL,EAAeD,CAC5C,CAqBD,SAASM,IACP,OAAOL,IAAiBJ,CACzB,CACH,uBAMM,SACJgB,GAEA,MAAMC,EAAMf,IAEZ,MAAO,CACLgB,KAkBF,SAA6BZ,EAAmBa,GAC9C,OAAO,YAAaC,GAClB,OAAOf,EAAoBC,GAAO,WAChC,OAAOa,KAAMC,EACf,GACF,CACD,EAvBCf,MACAK,IAAKO,EAAIP,IACTE,KAAMK,EAAIL,MAGZ,SAASP,EAAOC,EAAmBa,SACjC,MAAMX,EAAgBS,EAAIP,MAEpBW,EAAMC,EAAMA,OAChB,GACAd,GAAgC,CAAE,EACe,QAAjDe,EAAAC,EAAqBA,sBAACR,EAAMV,EAAOE,UAAc,IAAAe,EAAAA,EAAIjB,GAGvD,OAAOW,EAAIZ,IAAIoB,OAAOC,OAAOL,GAAMF,EACpC,CASH"} | ||
| {"version":3,"file":"context.production.js","sources":["../../src/context.ts"],"sourcesContent":["import type { CB, Maybe } from 'vest-utils';\nimport {\n assign,\n defaultTo,\n invariant,\n optionalFunctionValue,\n Nullable,\n} from 'vest-utils';\n\nconst USEX_DEFAULT_ERROR_MESSAGE = 'Not inside of a running context.';\nconst EMPTY_CONTEXT = Symbol();\n\n/**\n * Base context interface.\n */\nexport function createContext<T>(defaultContextValue?: T): CtxApi<T> {\n let contextValue: T | symbol = EMPTY_CONTEXT;\n\n return {\n run,\n use,\n useX,\n };\n\n function use(): T {\n return (isInsideContext() ? contextValue : defaultContextValue) as T;\n }\n\n function useX(errorMessage?: string): T {\n invariant(\n isInsideContext(),\n defaultTo(errorMessage, USEX_DEFAULT_ERROR_MESSAGE),\n );\n return contextValue as T;\n }\n\n function run<R>(value: T, cb: () => R): R {\n const parentContext = isInsideContext() ? use() : EMPTY_CONTEXT;\n\n contextValue = value;\n\n const res = cb();\n\n contextValue = parentContext;\n return res;\n }\n\n function isInsideContext(): boolean {\n return contextValue !== EMPTY_CONTEXT;\n }\n}\n\n/**\n * Cascading context - another implementation of context, that assumes the context value is an object.\n * When nesting context runs, the the values of the current layer merges with the layers above it.\n */\nexport function createCascade<T extends Record<string, unknown>>(\n init?: (value: Partial<T>, parentContext: Maybe<T>) => Nullable<T>,\n): CtxCascadeApi<T> {\n const ctx = createContext<T>();\n\n return {\n bind,\n run,\n use: ctx.use,\n useX: ctx.useX,\n };\n\n function run<R>(value: Partial<T>, fn: () => R): R {\n const parentContext = ctx.use();\n\n const out = assign(\n {},\n parentContext ? parentContext : {},\n optionalFunctionValue(init, value, parentContext) ?? value,\n ) as T;\n\n return ctx.run(Object.freeze(out), fn) as R;\n }\n\n function bind<Fn extends CB>(value: Partial<T>, fn: Fn) {\n return function (...runTimeArgs: Parameters<Fn>) {\n return run<ReturnType<Fn>>(value, function () {\n return fn(...runTimeArgs);\n });\n } as Fn;\n }\n}\n\ntype ContextConsumptionApi<T> = {\n use: () => T;\n useX: (errorMessage?: string) => T;\n};\n\nexport type CtxApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: T, cb: () => R) => R;\n};\n\nexport type CtxCascadeApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: Partial<T>, fn: () => R) => R;\n bind: <Fn extends CB>(value: Partial<T>, fn: Fn) => Fn;\n};\n"],"names":["USEX_DEFAULT_ERROR_MESSAGE","EMPTY_CONTEXT","Symbol","createContext","defaultContextValue","contextValue","run","value","cb","parentContext","isInsideContext","use","res","useX","errorMessage","invariant","defaultTo","init","ctx","bind","fn","runTimeArgs","out","assign","_a","optionalFunctionValue","Object","freeze"],"mappings":"yCASA,MAAMA,EAA6B,mCAC7BC,EAAgBC,SAKhB,SAAUC,EAAiBC,GAC/B,IAAIC,EAA2BJ,EAE/B,MAAO,CACLK,IAiBF,SAAgBC,EAAUC,GACxB,MAAMC,EAAgBC,IAAoBC,IAAQV,EAElDI,EAAeE,EAEf,MAAMK,EAAMJ,IAGZ,OADAH,EAAeI,EACRG,CACR,EAzBCD,MACAE,KAOF,SAAcC,GAKZ,OAJAC,EAASA,UACPL,IACAM,EAAAA,UAAUF,EAAcd,IAEnBK,CACR,GAVD,SAASM,IACP,OAAQD,IAAoBL,EAAeD,CAC5C,CAqBD,SAASM,IACP,OAAOL,IAAiBJ,CACzB,CACH,uBAMM,SACJgB,GAEA,MAAMC,EAAMf,IAEZ,MAAO,CACLgB,KAkBF,SAA6BZ,EAAmBa,GAC9C,OAAO,YAAaC,GAClB,OAAOf,EAAoBC,GAAO,WAChC,OAAOa,KAAMC,EACf,GACF,CACD,EAvBCf,MACAK,IAAKO,EAAIP,IACTE,KAAMK,EAAIL,MAGZ,SAASP,EAAOC,EAAmBa,SACjC,MAAMX,EAAgBS,EAAIP,MAEpBW,EAAMC,EAAMA,OAChB,GACAd,GAAgC,CAAE,EACe,QAAjDe,EAAAC,EAAqBA,sBAACR,EAAMV,EAAOE,UAAc,IAAAe,EAAAA,EAAIjB,GAGvD,OAAOW,EAAIZ,IAAIoB,OAAOC,OAAOL,GAAMF,EACpC,CASH"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"context.development.js","sources":["../../src/context.ts"],"sourcesContent":["import type { CB, Maybe } from 'vest-utils';\nimport {\n assign,\n defaultTo,\n invariant,\n optionalFunctionValue,\n Nullable,\n} from 'vest-utils';\n\nconst USEX_DEFAULT_ERROR_MESSAGE = 'Not inside of a running context.';\nconst EMPTY_CONTEXT = Symbol();\n\n/**\n * Base context interface.\n */\nexport function createContext<T>(defaultContextValue?: T): CtxApi<T> {\n let contextValue: T | symbol = EMPTY_CONTEXT;\n\n return {\n run,\n use,\n useX,\n };\n\n function use(): T {\n return (isInsideContext() ? contextValue : defaultContextValue) as T;\n }\n\n function useX(errorMessage?: string): T {\n invariant(\n isInsideContext(),\n defaultTo(errorMessage, USEX_DEFAULT_ERROR_MESSAGE)\n );\n return contextValue as T;\n }\n\n function run<R>(value: T, cb: () => R): R {\n const parentContext = isInsideContext() ? use() : EMPTY_CONTEXT;\n\n contextValue = value;\n\n const res = cb();\n\n contextValue = parentContext;\n return res;\n }\n\n function isInsideContext(): boolean {\n return contextValue !== EMPTY_CONTEXT;\n }\n}\n\n/**\n * Cascading context - another implementation of context, that assumes the context value is an object.\n * When nesting context runs, the the values of the current layer merges with the layers above it.\n */\nexport function createCascade<T extends Record<string, unknown>>(\n init?: (value: Partial<T>, parentContext: Maybe<T>) => Nullable<T>\n): CtxCascadeApi<T> {\n const ctx = createContext<T>();\n\n return {\n bind,\n run,\n use: ctx.use,\n useX: ctx.useX,\n };\n\n function run<R>(value: Partial<T>, fn: () => R): R {\n const parentContext = ctx.use();\n\n const out = assign(\n {},\n parentContext ? parentContext : {},\n optionalFunctionValue(init, value, parentContext) ?? value\n ) as T;\n\n return ctx.run(Object.freeze(out), fn) as R;\n }\n\n function bind<Fn extends CB>(value: Partial<T>, fn: Fn) {\n return function (...runTimeArgs: Parameters<Fn>) {\n return run<ReturnType<Fn>>(value, function () {\n return fn(...runTimeArgs);\n });\n } as Fn;\n }\n}\n\ntype ContextConsumptionApi<T> = {\n use: () => T;\n useX: (errorMessage?: string) => T;\n};\n\nexport type CtxApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: T, cb: () => R) => R;\n};\n\nexport type CtxCascadeApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: Partial<T>, fn: () => R) => R;\n bind: <Fn extends CB>(value: Partial<T>, fn: Fn) => Fn;\n};\n"],"names":[],"mappings":";;AASA,MAAM,0BAA0B,GAAG,kCAAkC,CAAC;AACtE,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;AAE/B;;AAEG;AACG,SAAU,aAAa,CAAI,mBAAuB,EAAA;IACtD,IAAI,YAAY,GAAe,aAAa,CAAC;IAE7C,OAAO;QACL,GAAG;QACH,GAAG;QACH,IAAI;KACL,CAAC;AAEF,IAAA,SAAS,GAAG,GAAA;AACV,QAAA,QAAQ,eAAe,EAAE,GAAG,YAAY,GAAG,mBAAmB,EAAO;KACtE;IAED,SAAS,IAAI,CAAC,YAAqB,EAAA;QACjC,SAAS,CACP,eAAe,EAAE,EACjB,SAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC,CACpD,CAAC;AACF,QAAA,OAAO,YAAiB,CAAC;KAC1B;AAED,IAAA,SAAS,GAAG,CAAI,KAAQ,EAAE,EAAW,EAAA;AACnC,QAAA,MAAM,aAAa,GAAG,eAAe,EAAE,GAAG,GAAG,EAAE,GAAG,aAAa,CAAC;QAEhE,YAAY,GAAG,KAAK,CAAC;AAErB,QAAA,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC;QAEjB,YAAY,GAAG,aAAa,CAAC;AAC7B,QAAA,OAAO,GAAG,CAAC;KACZ;AAED,IAAA,SAAS,eAAe,GAAA;QACtB,OAAO,YAAY,KAAK,aAAa,CAAC;KACvC;AACH,CAAC;AAED;;;AAGG;AACG,SAAU,aAAa,CAC3B,IAAkE,EAAA;AAElE,IAAA,MAAM,GAAG,GAAG,aAAa,EAAK,CAAC;IAE/B,OAAO;QACL,IAAI;QACJ,GAAG;QACH,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,IAAI,EAAE,GAAG,CAAC,IAAI;KACf,CAAC;AAEF,IAAA,SAAS,GAAG,CAAI,KAAiB,EAAE,EAAW,EAAA;;AAC5C,QAAA,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;AAEhC,QAAA,MAAM,GAAG,GAAG,MAAM,CAChB,EAAE,EACF,aAAa,GAAG,aAAa,GAAG,EAAE,EAClC,CAAA,EAAA,GAAA,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CACtD,CAAC;AAEP,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAM,CAAC;KAC7C;AAED,IAAA,SAAS,IAAI,CAAgB,KAAiB,EAAE,EAAM,EAAA;QACpD,OAAO,UAAU,GAAG,WAA2B,EAAA;YAC7C,OAAO,GAAG,CAAiB,KAAK,EAAE,YAAA;AAChC,gBAAA,OAAO,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;AAC5B,aAAC,CAAC,CAAC;AACL,SAAO,CAAC;KACT;AACH;;;;"} | ||
| {"version":3,"file":"context.development.js","sources":["../../src/context.ts"],"sourcesContent":["import type { CB, Maybe } from 'vest-utils';\nimport {\n assign,\n defaultTo,\n invariant,\n optionalFunctionValue,\n Nullable,\n} from 'vest-utils';\n\nconst USEX_DEFAULT_ERROR_MESSAGE = 'Not inside of a running context.';\nconst EMPTY_CONTEXT = Symbol();\n\n/**\n * Base context interface.\n */\nexport function createContext<T>(defaultContextValue?: T): CtxApi<T> {\n let contextValue: T | symbol = EMPTY_CONTEXT;\n\n return {\n run,\n use,\n useX,\n };\n\n function use(): T {\n return (isInsideContext() ? contextValue : defaultContextValue) as T;\n }\n\n function useX(errorMessage?: string): T {\n invariant(\n isInsideContext(),\n defaultTo(errorMessage, USEX_DEFAULT_ERROR_MESSAGE),\n );\n return contextValue as T;\n }\n\n function run<R>(value: T, cb: () => R): R {\n const parentContext = isInsideContext() ? use() : EMPTY_CONTEXT;\n\n contextValue = value;\n\n const res = cb();\n\n contextValue = parentContext;\n return res;\n }\n\n function isInsideContext(): boolean {\n return contextValue !== EMPTY_CONTEXT;\n }\n}\n\n/**\n * Cascading context - another implementation of context, that assumes the context value is an object.\n * When nesting context runs, the the values of the current layer merges with the layers above it.\n */\nexport function createCascade<T extends Record<string, unknown>>(\n init?: (value: Partial<T>, parentContext: Maybe<T>) => Nullable<T>,\n): CtxCascadeApi<T> {\n const ctx = createContext<T>();\n\n return {\n bind,\n run,\n use: ctx.use,\n useX: ctx.useX,\n };\n\n function run<R>(value: Partial<T>, fn: () => R): R {\n const parentContext = ctx.use();\n\n const out = assign(\n {},\n parentContext ? parentContext : {},\n optionalFunctionValue(init, value, parentContext) ?? value,\n ) as T;\n\n return ctx.run(Object.freeze(out), fn) as R;\n }\n\n function bind<Fn extends CB>(value: Partial<T>, fn: Fn) {\n return function (...runTimeArgs: Parameters<Fn>) {\n return run<ReturnType<Fn>>(value, function () {\n return fn(...runTimeArgs);\n });\n } as Fn;\n }\n}\n\ntype ContextConsumptionApi<T> = {\n use: () => T;\n useX: (errorMessage?: string) => T;\n};\n\nexport type CtxApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: T, cb: () => R) => R;\n};\n\nexport type CtxCascadeApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: Partial<T>, fn: () => R) => R;\n bind: <Fn extends CB>(value: Partial<T>, fn: Fn) => Fn;\n};\n"],"names":[],"mappings":";;AASA,MAAM,0BAA0B,GAAG,kCAAkC,CAAC;AACtE,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;AAE/B;;AAEG;AACG,SAAU,aAAa,CAAI,mBAAuB,EAAA;IACtD,IAAI,YAAY,GAAe,aAAa,CAAC;IAE7C,OAAO;QACL,GAAG;QACH,GAAG;QACH,IAAI;KACL,CAAC;AAEF,IAAA,SAAS,GAAG,GAAA;AACV,QAAA,QAAQ,eAAe,EAAE,GAAG,YAAY,GAAG,mBAAmB,EAAO;KACtE;IAED,SAAS,IAAI,CAAC,YAAqB,EAAA;QACjC,SAAS,CACP,eAAe,EAAE,EACjB,SAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC,CACpD,CAAC;AACF,QAAA,OAAO,YAAiB,CAAC;KAC1B;AAED,IAAA,SAAS,GAAG,CAAI,KAAQ,EAAE,EAAW,EAAA;AACnC,QAAA,MAAM,aAAa,GAAG,eAAe,EAAE,GAAG,GAAG,EAAE,GAAG,aAAa,CAAC;QAEhE,YAAY,GAAG,KAAK,CAAC;AAErB,QAAA,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC;QAEjB,YAAY,GAAG,aAAa,CAAC;AAC7B,QAAA,OAAO,GAAG,CAAC;KACZ;AAED,IAAA,SAAS,eAAe,GAAA;QACtB,OAAO,YAAY,KAAK,aAAa,CAAC;KACvC;AACH,CAAC;AAED;;;AAGG;AACG,SAAU,aAAa,CAC3B,IAAkE,EAAA;AAElE,IAAA,MAAM,GAAG,GAAG,aAAa,EAAK,CAAC;IAE/B,OAAO;QACL,IAAI;QACJ,GAAG;QACH,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,IAAI,EAAE,GAAG,CAAC,IAAI;KACf,CAAC;AAEF,IAAA,SAAS,GAAG,CAAI,KAAiB,EAAE,EAAW,EAAA;;AAC5C,QAAA,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;AAEhC,QAAA,MAAM,GAAG,GAAG,MAAM,CAChB,EAAE,EACF,aAAa,GAAG,aAAa,GAAG,EAAE,EAClC,CAAA,EAAA,GAAA,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CACtD,CAAC;AAEP,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAM,CAAC;KAC7C;AAED,IAAA,SAAS,IAAI,CAAgB,KAAiB,EAAE,EAAM,EAAA;QACpD,OAAO,UAAU,GAAG,WAA2B,EAAA;YAC7C,OAAO,GAAG,CAAiB,KAAK,EAAE,YAAA;AAChC,gBAAA,OAAO,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;AAC5B,aAAC,CAAC,CAAC;AACL,SAAO,CAAC;KACT;AACH;;;;"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"context.production.js","sources":["../../src/context.ts"],"sourcesContent":["import type { CB, Maybe } from 'vest-utils';\nimport {\n assign,\n defaultTo,\n invariant,\n optionalFunctionValue,\n Nullable,\n} from 'vest-utils';\n\nconst USEX_DEFAULT_ERROR_MESSAGE = 'Not inside of a running context.';\nconst EMPTY_CONTEXT = Symbol();\n\n/**\n * Base context interface.\n */\nexport function createContext<T>(defaultContextValue?: T): CtxApi<T> {\n let contextValue: T | symbol = EMPTY_CONTEXT;\n\n return {\n run,\n use,\n useX,\n };\n\n function use(): T {\n return (isInsideContext() ? contextValue : defaultContextValue) as T;\n }\n\n function useX(errorMessage?: string): T {\n invariant(\n isInsideContext(),\n defaultTo(errorMessage, USEX_DEFAULT_ERROR_MESSAGE)\n );\n return contextValue as T;\n }\n\n function run<R>(value: T, cb: () => R): R {\n const parentContext = isInsideContext() ? use() : EMPTY_CONTEXT;\n\n contextValue = value;\n\n const res = cb();\n\n contextValue = parentContext;\n return res;\n }\n\n function isInsideContext(): boolean {\n return contextValue !== EMPTY_CONTEXT;\n }\n}\n\n/**\n * Cascading context - another implementation of context, that assumes the context value is an object.\n * When nesting context runs, the the values of the current layer merges with the layers above it.\n */\nexport function createCascade<T extends Record<string, unknown>>(\n init?: (value: Partial<T>, parentContext: Maybe<T>) => Nullable<T>\n): CtxCascadeApi<T> {\n const ctx = createContext<T>();\n\n return {\n bind,\n run,\n use: ctx.use,\n useX: ctx.useX,\n };\n\n function run<R>(value: Partial<T>, fn: () => R): R {\n const parentContext = ctx.use();\n\n const out = assign(\n {},\n parentContext ? parentContext : {},\n optionalFunctionValue(init, value, parentContext) ?? value\n ) as T;\n\n return ctx.run(Object.freeze(out), fn) as R;\n }\n\n function bind<Fn extends CB>(value: Partial<T>, fn: Fn) {\n return function (...runTimeArgs: Parameters<Fn>) {\n return run<ReturnType<Fn>>(value, function () {\n return fn(...runTimeArgs);\n });\n } as Fn;\n }\n}\n\ntype ContextConsumptionApi<T> = {\n use: () => T;\n useX: (errorMessage?: string) => T;\n};\n\nexport type CtxApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: T, cb: () => R) => R;\n};\n\nexport type CtxCascadeApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: Partial<T>, fn: () => R) => R;\n bind: <Fn extends CB>(value: Partial<T>, fn: Fn) => Fn;\n};\n"],"names":["USEX_DEFAULT_ERROR_MESSAGE","EMPTY_CONTEXT","Symbol","createContext","defaultContextValue","contextValue","run","value","cb","parentContext","isInsideContext","use","res","useX","errorMessage","invariant","defaultTo","createCascade","init","ctx","bind","fn","runTimeArgs","out","assign","_a","optionalFunctionValue","Object","freeze"],"mappings":"6FASA,MAAMA,EAA6B,mCAC7BC,EAAgBC,SAKhB,SAAUC,EAAiBC,GAC/B,IAAIC,EAA2BJ,EAE/B,MAAO,CACLK,IAiBF,SAAgBC,EAAUC,GACxB,MAAMC,EAAgBC,IAAoBC,IAAQV,EAElDI,EAAeE,EAEf,MAAMK,EAAMJ,IAGZ,OADAH,EAAeI,EACRG,CACR,EAzBCD,MACAE,KAOF,SAAcC,GAKZ,OAJAC,EACEL,IACAM,EAAUF,EAAcd,IAEnBK,CACR,GAVD,SAASM,IACP,OAAQD,IAAoBL,EAAeD,CAC5C,CAqBD,SAASM,IACP,OAAOL,IAAiBJ,CACzB,CACH,CAMM,SAAUgB,EACdC,GAEA,MAAMC,EAAMhB,IAEZ,MAAO,CACLiB,KAkBF,SAA6Bb,EAAmBc,GAC9C,OAAO,YAAaC,GAClB,OAAOhB,EAAoBC,GAAO,WAChC,OAAOc,KAAMC,EACf,GACF,CACD,EAvBChB,MACAK,IAAKQ,EAAIR,IACTE,KAAMM,EAAIN,MAGZ,SAASP,EAAOC,EAAmBc,SACjC,MAAMZ,EAAgBU,EAAIR,MAEpBY,EAAMC,EACV,GACAf,GAAgC,CAAE,EACe,QAAjDgB,EAAAC,EAAsBR,EAAMX,EAAOE,UAAc,IAAAgB,EAAAA,EAAIlB,GAGvD,OAAOY,EAAIb,IAAIqB,OAAOC,OAAOL,GAAMF,EACpC,CASH"} | ||
| {"version":3,"file":"context.production.js","sources":["../../src/context.ts"],"sourcesContent":["import type { CB, Maybe } from 'vest-utils';\nimport {\n assign,\n defaultTo,\n invariant,\n optionalFunctionValue,\n Nullable,\n} from 'vest-utils';\n\nconst USEX_DEFAULT_ERROR_MESSAGE = 'Not inside of a running context.';\nconst EMPTY_CONTEXT = Symbol();\n\n/**\n * Base context interface.\n */\nexport function createContext<T>(defaultContextValue?: T): CtxApi<T> {\n let contextValue: T | symbol = EMPTY_CONTEXT;\n\n return {\n run,\n use,\n useX,\n };\n\n function use(): T {\n return (isInsideContext() ? contextValue : defaultContextValue) as T;\n }\n\n function useX(errorMessage?: string): T {\n invariant(\n isInsideContext(),\n defaultTo(errorMessage, USEX_DEFAULT_ERROR_MESSAGE),\n );\n return contextValue as T;\n }\n\n function run<R>(value: T, cb: () => R): R {\n const parentContext = isInsideContext() ? use() : EMPTY_CONTEXT;\n\n contextValue = value;\n\n const res = cb();\n\n contextValue = parentContext;\n return res;\n }\n\n function isInsideContext(): boolean {\n return contextValue !== EMPTY_CONTEXT;\n }\n}\n\n/**\n * Cascading context - another implementation of context, that assumes the context value is an object.\n * When nesting context runs, the the values of the current layer merges with the layers above it.\n */\nexport function createCascade<T extends Record<string, unknown>>(\n init?: (value: Partial<T>, parentContext: Maybe<T>) => Nullable<T>,\n): CtxCascadeApi<T> {\n const ctx = createContext<T>();\n\n return {\n bind,\n run,\n use: ctx.use,\n useX: ctx.useX,\n };\n\n function run<R>(value: Partial<T>, fn: () => R): R {\n const parentContext = ctx.use();\n\n const out = assign(\n {},\n parentContext ? parentContext : {},\n optionalFunctionValue(init, value, parentContext) ?? value,\n ) as T;\n\n return ctx.run(Object.freeze(out), fn) as R;\n }\n\n function bind<Fn extends CB>(value: Partial<T>, fn: Fn) {\n return function (...runTimeArgs: Parameters<Fn>) {\n return run<ReturnType<Fn>>(value, function () {\n return fn(...runTimeArgs);\n });\n } as Fn;\n }\n}\n\ntype ContextConsumptionApi<T> = {\n use: () => T;\n useX: (errorMessage?: string) => T;\n};\n\nexport type CtxApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: T, cb: () => R) => R;\n};\n\nexport type CtxCascadeApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: Partial<T>, fn: () => R) => R;\n bind: <Fn extends CB>(value: Partial<T>, fn: Fn) => Fn;\n};\n"],"names":["USEX_DEFAULT_ERROR_MESSAGE","EMPTY_CONTEXT","Symbol","createContext","defaultContextValue","contextValue","run","value","cb","parentContext","isInsideContext","use","res","useX","errorMessage","invariant","defaultTo","createCascade","init","ctx","bind","fn","runTimeArgs","out","assign","_a","optionalFunctionValue","Object","freeze"],"mappings":"6FASA,MAAMA,EAA6B,mCAC7BC,EAAgBC,SAKhB,SAAUC,EAAiBC,GAC/B,IAAIC,EAA2BJ,EAE/B,MAAO,CACLK,IAiBF,SAAgBC,EAAUC,GACxB,MAAMC,EAAgBC,IAAoBC,IAAQV,EAElDI,EAAeE,EAEf,MAAMK,EAAMJ,IAGZ,OADAH,EAAeI,EACRG,CACR,EAzBCD,MACAE,KAOF,SAAcC,GAKZ,OAJAC,EACEL,IACAM,EAAUF,EAAcd,IAEnBK,CACR,GAVD,SAASM,IACP,OAAQD,IAAoBL,EAAeD,CAC5C,CAqBD,SAASM,IACP,OAAOL,IAAiBJ,CACzB,CACH,CAMM,SAAUgB,EACdC,GAEA,MAAMC,EAAMhB,IAEZ,MAAO,CACLiB,KAkBF,SAA6Bb,EAAmBc,GAC9C,OAAO,YAAaC,GAClB,OAAOhB,EAAoBC,GAAO,WAChC,OAAOc,KAAMC,EACf,GACF,CACD,EAvBChB,MACAK,IAAKQ,EAAIR,IACTE,KAAMM,EAAIN,MAGZ,SAASP,EAAOC,EAAmBc,SACjC,MAAMZ,EAAgBU,EAAIR,MAEpBY,EAAMC,EACV,GACAf,GAAgC,CAAE,EACe,QAAjDgB,EAAAC,EAAsBR,EAAMX,EAAOE,UAAc,IAAAgB,EAAAA,EAAIlB,GAGvD,OAAOY,EAAIb,IAAIqB,OAAOC,OAAOL,GAAMF,EACpC,CASH"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"context.development.js","sources":["../../src/context.ts"],"sourcesContent":["import type { CB, Maybe } from 'vest-utils';\nimport {\n assign,\n defaultTo,\n invariant,\n optionalFunctionValue,\n Nullable,\n} from 'vest-utils';\n\nconst USEX_DEFAULT_ERROR_MESSAGE = 'Not inside of a running context.';\nconst EMPTY_CONTEXT = Symbol();\n\n/**\n * Base context interface.\n */\nexport function createContext<T>(defaultContextValue?: T): CtxApi<T> {\n let contextValue: T | symbol = EMPTY_CONTEXT;\n\n return {\n run,\n use,\n useX,\n };\n\n function use(): T {\n return (isInsideContext() ? contextValue : defaultContextValue) as T;\n }\n\n function useX(errorMessage?: string): T {\n invariant(\n isInsideContext(),\n defaultTo(errorMessage, USEX_DEFAULT_ERROR_MESSAGE)\n );\n return contextValue as T;\n }\n\n function run<R>(value: T, cb: () => R): R {\n const parentContext = isInsideContext() ? use() : EMPTY_CONTEXT;\n\n contextValue = value;\n\n const res = cb();\n\n contextValue = parentContext;\n return res;\n }\n\n function isInsideContext(): boolean {\n return contextValue !== EMPTY_CONTEXT;\n }\n}\n\n/**\n * Cascading context - another implementation of context, that assumes the context value is an object.\n * When nesting context runs, the the values of the current layer merges with the layers above it.\n */\nexport function createCascade<T extends Record<string, unknown>>(\n init?: (value: Partial<T>, parentContext: Maybe<T>) => Nullable<T>\n): CtxCascadeApi<T> {\n const ctx = createContext<T>();\n\n return {\n bind,\n run,\n use: ctx.use,\n useX: ctx.useX,\n };\n\n function run<R>(value: Partial<T>, fn: () => R): R {\n const parentContext = ctx.use();\n\n const out = assign(\n {},\n parentContext ? parentContext : {},\n optionalFunctionValue(init, value, parentContext) ?? value\n ) as T;\n\n return ctx.run(Object.freeze(out), fn) as R;\n }\n\n function bind<Fn extends CB>(value: Partial<T>, fn: Fn) {\n return function (...runTimeArgs: Parameters<Fn>) {\n return run<ReturnType<Fn>>(value, function () {\n return fn(...runTimeArgs);\n });\n } as Fn;\n }\n}\n\ntype ContextConsumptionApi<T> = {\n use: () => T;\n useX: (errorMessage?: string) => T;\n};\n\nexport type CtxApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: T, cb: () => R) => R;\n};\n\nexport type CtxCascadeApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: Partial<T>, fn: () => R) => R;\n bind: <Fn extends CB>(value: Partial<T>, fn: Fn) => Fn;\n};\n"],"names":["invariant","defaultTo","assign","optionalFunctionValue"],"mappings":";;;;;;EASA,MAAM,0BAA0B,GAAG,kCAAkC,CAAC;EACtE,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;EAE/B;;EAEG;EACG,SAAU,aAAa,CAAI,mBAAuB,EAAA;MACtD,IAAI,YAAY,GAAe,aAAa,CAAC;MAE7C,OAAO;UACL,GAAG;UACH,GAAG;UACH,IAAI;OACL,CAAC;EAEF,IAAA,SAAS,GAAG,GAAA;EACV,QAAA,QAAQ,eAAe,EAAE,GAAG,YAAY,GAAG,mBAAmB,EAAO;OACtE;MAED,SAAS,IAAI,CAAC,YAAqB,EAAA;UACjCA,mBAAS,CACP,eAAe,EAAE,EACjBC,mBAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC,CACpD,CAAC;EACF,QAAA,OAAO,YAAiB,CAAC;OAC1B;EAED,IAAA,SAAS,GAAG,CAAI,KAAQ,EAAE,EAAW,EAAA;EACnC,QAAA,MAAM,aAAa,GAAG,eAAe,EAAE,GAAG,GAAG,EAAE,GAAG,aAAa,CAAC;UAEhE,YAAY,GAAG,KAAK,CAAC;EAErB,QAAA,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC;UAEjB,YAAY,GAAG,aAAa,CAAC;EAC7B,QAAA,OAAO,GAAG,CAAC;OACZ;EAED,IAAA,SAAS,eAAe,GAAA;UACtB,OAAO,YAAY,KAAK,aAAa,CAAC;OACvC;EACH,CAAC;EAED;;;EAGG;EACG,SAAU,aAAa,CAC3B,IAAkE,EAAA;EAElE,IAAA,MAAM,GAAG,GAAG,aAAa,EAAK,CAAC;MAE/B,OAAO;UACL,IAAI;UACJ,GAAG;UACH,GAAG,EAAE,GAAG,CAAC,GAAG;UACZ,IAAI,EAAE,GAAG,CAAC,IAAI;OACf,CAAC;EAEF,IAAA,SAAS,GAAG,CAAI,KAAiB,EAAE,EAAW,EAAA;;EAC5C,QAAA,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;EAEhC,QAAA,MAAM,GAAG,GAAGC,gBAAM,CAChB,EAAE,EACF,aAAa,GAAG,aAAa,GAAG,EAAE,EAClC,CAAA,EAAA,GAAAC,+BAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CACtD,CAAC;EAEP,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAM,CAAC;OAC7C;EAED,IAAA,SAAS,IAAI,CAAgB,KAAiB,EAAE,EAAM,EAAA;UACpD,OAAO,UAAU,GAAG,WAA2B,EAAA;cAC7C,OAAO,GAAG,CAAiB,KAAK,EAAE,YAAA;EAChC,gBAAA,OAAO,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;EAC5B,aAAC,CAAC,CAAC;EACL,SAAO,CAAC;OACT;EACH;;;;;;;;;"} | ||
| {"version":3,"file":"context.development.js","sources":["../../src/context.ts"],"sourcesContent":["import type { CB, Maybe } from 'vest-utils';\nimport {\n assign,\n defaultTo,\n invariant,\n optionalFunctionValue,\n Nullable,\n} from 'vest-utils';\n\nconst USEX_DEFAULT_ERROR_MESSAGE = 'Not inside of a running context.';\nconst EMPTY_CONTEXT = Symbol();\n\n/**\n * Base context interface.\n */\nexport function createContext<T>(defaultContextValue?: T): CtxApi<T> {\n let contextValue: T | symbol = EMPTY_CONTEXT;\n\n return {\n run,\n use,\n useX,\n };\n\n function use(): T {\n return (isInsideContext() ? contextValue : defaultContextValue) as T;\n }\n\n function useX(errorMessage?: string): T {\n invariant(\n isInsideContext(),\n defaultTo(errorMessage, USEX_DEFAULT_ERROR_MESSAGE),\n );\n return contextValue as T;\n }\n\n function run<R>(value: T, cb: () => R): R {\n const parentContext = isInsideContext() ? use() : EMPTY_CONTEXT;\n\n contextValue = value;\n\n const res = cb();\n\n contextValue = parentContext;\n return res;\n }\n\n function isInsideContext(): boolean {\n return contextValue !== EMPTY_CONTEXT;\n }\n}\n\n/**\n * Cascading context - another implementation of context, that assumes the context value is an object.\n * When nesting context runs, the the values of the current layer merges with the layers above it.\n */\nexport function createCascade<T extends Record<string, unknown>>(\n init?: (value: Partial<T>, parentContext: Maybe<T>) => Nullable<T>,\n): CtxCascadeApi<T> {\n const ctx = createContext<T>();\n\n return {\n bind,\n run,\n use: ctx.use,\n useX: ctx.useX,\n };\n\n function run<R>(value: Partial<T>, fn: () => R): R {\n const parentContext = ctx.use();\n\n const out = assign(\n {},\n parentContext ? parentContext : {},\n optionalFunctionValue(init, value, parentContext) ?? value,\n ) as T;\n\n return ctx.run(Object.freeze(out), fn) as R;\n }\n\n function bind<Fn extends CB>(value: Partial<T>, fn: Fn) {\n return function (...runTimeArgs: Parameters<Fn>) {\n return run<ReturnType<Fn>>(value, function () {\n return fn(...runTimeArgs);\n });\n } as Fn;\n }\n}\n\ntype ContextConsumptionApi<T> = {\n use: () => T;\n useX: (errorMessage?: string) => T;\n};\n\nexport type CtxApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: T, cb: () => R) => R;\n};\n\nexport type CtxCascadeApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: Partial<T>, fn: () => R) => R;\n bind: <Fn extends CB>(value: Partial<T>, fn: Fn) => Fn;\n};\n"],"names":["invariant","defaultTo","assign","optionalFunctionValue"],"mappings":";;;;;;EASA,MAAM,0BAA0B,GAAG,kCAAkC,CAAC;EACtE,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;EAE/B;;EAEG;EACG,SAAU,aAAa,CAAI,mBAAuB,EAAA;MACtD,IAAI,YAAY,GAAe,aAAa,CAAC;MAE7C,OAAO;UACL,GAAG;UACH,GAAG;UACH,IAAI;OACL,CAAC;EAEF,IAAA,SAAS,GAAG,GAAA;EACV,QAAA,QAAQ,eAAe,EAAE,GAAG,YAAY,GAAG,mBAAmB,EAAO;OACtE;MAED,SAAS,IAAI,CAAC,YAAqB,EAAA;UACjCA,mBAAS,CACP,eAAe,EAAE,EACjBC,mBAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC,CACpD,CAAC;EACF,QAAA,OAAO,YAAiB,CAAC;OAC1B;EAED,IAAA,SAAS,GAAG,CAAI,KAAQ,EAAE,EAAW,EAAA;EACnC,QAAA,MAAM,aAAa,GAAG,eAAe,EAAE,GAAG,GAAG,EAAE,GAAG,aAAa,CAAC;UAEhE,YAAY,GAAG,KAAK,CAAC;EAErB,QAAA,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC;UAEjB,YAAY,GAAG,aAAa,CAAC;EAC7B,QAAA,OAAO,GAAG,CAAC;OACZ;EAED,IAAA,SAAS,eAAe,GAAA;UACtB,OAAO,YAAY,KAAK,aAAa,CAAC;OACvC;EACH,CAAC;EAED;;;EAGG;EACG,SAAU,aAAa,CAC3B,IAAkE,EAAA;EAElE,IAAA,MAAM,GAAG,GAAG,aAAa,EAAK,CAAC;MAE/B,OAAO;UACL,IAAI;UACJ,GAAG;UACH,GAAG,EAAE,GAAG,CAAC,GAAG;UACZ,IAAI,EAAE,GAAG,CAAC,IAAI;OACf,CAAC;EAEF,IAAA,SAAS,GAAG,CAAI,KAAiB,EAAE,EAAW,EAAA;;EAC5C,QAAA,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;EAEhC,QAAA,MAAM,GAAG,GAAGC,gBAAM,CAChB,EAAE,EACF,aAAa,GAAG,aAAa,GAAG,EAAE,EAClC,CAAA,EAAA,GAAAC,+BAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CACtD,CAAC;EAEP,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAM,CAAC;OAC7C;EAED,IAAA,SAAS,IAAI,CAAgB,KAAiB,EAAE,EAAM,EAAA;UACpD,OAAO,UAAU,GAAG,WAA2B,EAAA;cAC7C,OAAO,GAAG,CAAiB,KAAK,EAAE,YAAA;EAChC,gBAAA,OAAO,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;EAC5B,aAAC,CAAC,CAAC;EACL,SAAO,CAAC;OACT;EACH;;;;;;;;;"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"context.production.js","sources":["../../src/context.ts"],"sourcesContent":["import type { CB, Maybe } from 'vest-utils';\nimport {\n assign,\n defaultTo,\n invariant,\n optionalFunctionValue,\n Nullable,\n} from 'vest-utils';\n\nconst USEX_DEFAULT_ERROR_MESSAGE = 'Not inside of a running context.';\nconst EMPTY_CONTEXT = Symbol();\n\n/**\n * Base context interface.\n */\nexport function createContext<T>(defaultContextValue?: T): CtxApi<T> {\n let contextValue: T | symbol = EMPTY_CONTEXT;\n\n return {\n run,\n use,\n useX,\n };\n\n function use(): T {\n return (isInsideContext() ? contextValue : defaultContextValue) as T;\n }\n\n function useX(errorMessage?: string): T {\n invariant(\n isInsideContext(),\n defaultTo(errorMessage, USEX_DEFAULT_ERROR_MESSAGE)\n );\n return contextValue as T;\n }\n\n function run<R>(value: T, cb: () => R): R {\n const parentContext = isInsideContext() ? use() : EMPTY_CONTEXT;\n\n contextValue = value;\n\n const res = cb();\n\n contextValue = parentContext;\n return res;\n }\n\n function isInsideContext(): boolean {\n return contextValue !== EMPTY_CONTEXT;\n }\n}\n\n/**\n * Cascading context - another implementation of context, that assumes the context value is an object.\n * When nesting context runs, the the values of the current layer merges with the layers above it.\n */\nexport function createCascade<T extends Record<string, unknown>>(\n init?: (value: Partial<T>, parentContext: Maybe<T>) => Nullable<T>\n): CtxCascadeApi<T> {\n const ctx = createContext<T>();\n\n return {\n bind,\n run,\n use: ctx.use,\n useX: ctx.useX,\n };\n\n function run<R>(value: Partial<T>, fn: () => R): R {\n const parentContext = ctx.use();\n\n const out = assign(\n {},\n parentContext ? parentContext : {},\n optionalFunctionValue(init, value, parentContext) ?? value\n ) as T;\n\n return ctx.run(Object.freeze(out), fn) as R;\n }\n\n function bind<Fn extends CB>(value: Partial<T>, fn: Fn) {\n return function (...runTimeArgs: Parameters<Fn>) {\n return run<ReturnType<Fn>>(value, function () {\n return fn(...runTimeArgs);\n });\n } as Fn;\n }\n}\n\ntype ContextConsumptionApi<T> = {\n use: () => T;\n useX: (errorMessage?: string) => T;\n};\n\nexport type CtxApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: T, cb: () => R) => R;\n};\n\nexport type CtxCascadeApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: Partial<T>, fn: () => R) => R;\n bind: <Fn extends CB>(value: Partial<T>, fn: Fn) => Fn;\n};\n"],"names":["USEX_DEFAULT_ERROR_MESSAGE","EMPTY_CONTEXT","Symbol","createContext","defaultContextValue","contextValue","run","value","cb","parentContext","isInsideContext","use","res","useX","errorMessage","invariant","defaultTo","init","ctx","bind","fn","runTimeArgs","out","assign","_a","optionalFunctionValue","Object","freeze"],"mappings":"oSASA,MAAMA,EAA6B,mCAC7BC,EAAgBC,SAKhB,SAAUC,EAAiBC,GAC/B,IAAIC,EAA2BJ,EAE/B,MAAO,CACLK,IAiBF,SAAgBC,EAAUC,GACxB,MAAMC,EAAgBC,IAAoBC,IAAQV,EAElDI,EAAeE,EAEf,MAAMK,EAAMJ,IAGZ,OADAH,EAAeI,EACRG,CACR,EAzBCD,MACAE,KAOF,SAAcC,GAKZ,OAJAC,EAASA,UACPL,IACAM,EAAAA,UAAUF,EAAcd,IAEnBK,CACR,GAVD,SAASM,IACP,OAAQD,IAAoBL,EAAeD,CAC5C,CAqBD,SAASM,IACP,OAAOL,IAAiBJ,CACzB,CACH,iBAMM,SACJgB,GAEA,MAAMC,EAAMf,IAEZ,MAAO,CACLgB,KAkBF,SAA6BZ,EAAmBa,GAC9C,OAAO,YAAaC,GAClB,OAAOf,EAAoBC,GAAO,WAChC,OAAOa,KAAMC,EACf,GACF,CACD,EAvBCf,MACAK,IAAKO,EAAIP,IACTE,KAAMK,EAAIL,MAGZ,SAASP,EAAOC,EAAmBa,SACjC,MAAMX,EAAgBS,EAAIP,MAEpBW,EAAMC,EAAMA,OAChB,GACAd,GAAgC,CAAE,EACe,QAAjDe,EAAAC,EAAqBA,sBAACR,EAAMV,EAAOE,UAAc,IAAAe,EAAAA,EAAIjB,GAGvD,OAAOW,EAAIZ,IAAIoB,OAAOC,OAAOL,GAAMF,EACpC,CASH"} | ||
| {"version":3,"file":"context.production.js","sources":["../../src/context.ts"],"sourcesContent":["import type { CB, Maybe } from 'vest-utils';\nimport {\n assign,\n defaultTo,\n invariant,\n optionalFunctionValue,\n Nullable,\n} from 'vest-utils';\n\nconst USEX_DEFAULT_ERROR_MESSAGE = 'Not inside of a running context.';\nconst EMPTY_CONTEXT = Symbol();\n\n/**\n * Base context interface.\n */\nexport function createContext<T>(defaultContextValue?: T): CtxApi<T> {\n let contextValue: T | symbol = EMPTY_CONTEXT;\n\n return {\n run,\n use,\n useX,\n };\n\n function use(): T {\n return (isInsideContext() ? contextValue : defaultContextValue) as T;\n }\n\n function useX(errorMessage?: string): T {\n invariant(\n isInsideContext(),\n defaultTo(errorMessage, USEX_DEFAULT_ERROR_MESSAGE),\n );\n return contextValue as T;\n }\n\n function run<R>(value: T, cb: () => R): R {\n const parentContext = isInsideContext() ? use() : EMPTY_CONTEXT;\n\n contextValue = value;\n\n const res = cb();\n\n contextValue = parentContext;\n return res;\n }\n\n function isInsideContext(): boolean {\n return contextValue !== EMPTY_CONTEXT;\n }\n}\n\n/**\n * Cascading context - another implementation of context, that assumes the context value is an object.\n * When nesting context runs, the the values of the current layer merges with the layers above it.\n */\nexport function createCascade<T extends Record<string, unknown>>(\n init?: (value: Partial<T>, parentContext: Maybe<T>) => Nullable<T>,\n): CtxCascadeApi<T> {\n const ctx = createContext<T>();\n\n return {\n bind,\n run,\n use: ctx.use,\n useX: ctx.useX,\n };\n\n function run<R>(value: Partial<T>, fn: () => R): R {\n const parentContext = ctx.use();\n\n const out = assign(\n {},\n parentContext ? parentContext : {},\n optionalFunctionValue(init, value, parentContext) ?? value,\n ) as T;\n\n return ctx.run(Object.freeze(out), fn) as R;\n }\n\n function bind<Fn extends CB>(value: Partial<T>, fn: Fn) {\n return function (...runTimeArgs: Parameters<Fn>) {\n return run<ReturnType<Fn>>(value, function () {\n return fn(...runTimeArgs);\n });\n } as Fn;\n }\n}\n\ntype ContextConsumptionApi<T> = {\n use: () => T;\n useX: (errorMessage?: string) => T;\n};\n\nexport type CtxApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: T, cb: () => R) => R;\n};\n\nexport type CtxCascadeApi<T> = ContextConsumptionApi<T> & {\n run: <R>(value: Partial<T>, fn: () => R) => R;\n bind: <Fn extends CB>(value: Partial<T>, fn: Fn) => Fn;\n};\n"],"names":["USEX_DEFAULT_ERROR_MESSAGE","EMPTY_CONTEXT","Symbol","createContext","defaultContextValue","contextValue","run","value","cb","parentContext","isInsideContext","use","res","useX","errorMessage","invariant","defaultTo","init","ctx","bind","fn","runTimeArgs","out","assign","_a","optionalFunctionValue","Object","freeze"],"mappings":"oSASA,MAAMA,EAA6B,mCAC7BC,EAAgBC,SAKhB,SAAUC,EAAiBC,GAC/B,IAAIC,EAA2BJ,EAE/B,MAAO,CACLK,IAiBF,SAAgBC,EAAUC,GACxB,MAAMC,EAAgBC,IAAoBC,IAAQV,EAElDI,EAAeE,EAEf,MAAMK,EAAMJ,IAGZ,OADAH,EAAeI,EACRG,CACR,EAzBCD,MACAE,KAOF,SAAcC,GAKZ,OAJAC,EAASA,UACPL,IACAM,EAAAA,UAAUF,EAAcd,IAEnBK,CACR,GAVD,SAASM,IACP,OAAQD,IAAoBL,EAAeD,CAC5C,CAqBD,SAASM,IACP,OAAOL,IAAiBJ,CACzB,CACH,iBAMM,SACJgB,GAEA,MAAMC,EAAMf,IAEZ,MAAO,CACLgB,KAkBF,SAA6BZ,EAAmBa,GAC9C,OAAO,YAAaC,GAClB,OAAOf,EAAoBC,GAAO,WAChC,OAAOa,KAAMC,EACf,GACF,CACD,EAvBCf,MACAK,IAAKO,EAAIP,IACTE,KAAMK,EAAIL,MAGZ,SAASP,EAAOC,EAAmBa,SACjC,MAAMX,EAAgBS,EAAIP,MAEpBW,EAAMC,EAAMA,OAChB,GACAd,GAAgC,CAAE,EACe,QAAjDe,EAAAC,EAAqBA,sBAACR,EAAMV,EAAOE,UAAc,IAAAe,EAAAA,EAAIjB,GAGvD,OAAOW,EAAIZ,IAAIoB,OAAOC,OAAOL,GAAMF,EACpC,CASH"} |
+2
-2
| { | ||
| "version": "3.0.31-dev-20240731-1b50", | ||
| "version": "3.0.31-dev-20240807-42bc", | ||
| "license": "MIT", | ||
@@ -14,3 +14,3 @@ "main": "./dist/cjs/context.js", | ||
| "dependencies": { | ||
| "vest-utils": "1.3.1-dev-20240731-1b50" | ||
| "vest-utils": "1.3.1-dev-20240807-42bc" | ||
| }, | ||
@@ -17,0 +17,0 @@ "module": "./dist/es/context.production.js", |
+1
-1
@@ -149,3 +149,3 @@ # Context 🪆 | ||
| const context = ctx.useX( | ||
| 'handleCart was called outside of a running context' | ||
| 'handleCart was called outside of a running context', | ||
| ); // { cart: { items: [ 'foo', 'bar' ] } } | ||
@@ -152,0 +152,0 @@ // This throws an error if we're not within a `run` call. |
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
49053
0.83%22
4.76%239
6.22%+ Added
- Removed