UNPKG

graphql

Version:

A Query Language and Runtime which can target any service.

1 lines 4.02 kB
{"version":3,"file":"Computation.js","sourceRoot":"","sources":["../../../src/execution/incremental/Computation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,oCAAmC;AASvD,MAAM,OAAO,WAAW;IAItB,YACE,EAA2B,EAC3B,OAAoD;QAEpD,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IACD,KAAK;QACH,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC1B,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,aAAa,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;gBAC5D,MAAM,CAAC,IAAI,CACT,CAAC,KAAK,EAAE,EAAE;oBACR,IAAI,CAAC,aAAa,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;gBACtD,CAAC,EACD,CAAC,MAAe,EAAE,EAAE;oBAClB,IAAI,CAAC,aAAa,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;gBACtD,CAAC,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,aAAa,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAC9D,CAAC;QACH,CAAC;QAAC,OAAO,MAAe,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IACD,MAAM;QACJ,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAClC,QAAQ,YAAY,CAAC,MAAM,EAAE,CAAC;YAC5B,KAAK,WAAW;gBACd,OAAO,YAAY,CAAC,KAAK,CAAC;YAC5B,KAAK,UAAU;gBACb,MAAM,YAAY,CAAC,MAAM,CAAC;YAC5B,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,OAAO,YAAY,CAAC,OAAO,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,CAAC,MAAgB;QACpB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,IAAI,CAAC,aAAa,GAAG;gBACnB,MAAM,EAAE,UAAU;gBAClB,MAAM;aACP,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;QACnC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa,GAAG;gBACnB,MAAM,EAAE,UAAU;gBAClB,MAAM;aACP,CAAC;YACF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;CACF","sourcesContent":["import { isPromise } from '../../jsutils/isPromise.ts';\nimport type { PromiseOrValue } from '../../jsutils/PromiseOrValue.ts';\n\ntype MaybePromise<T> =\n | { status: 'fulfilled'; value: T }\n | { status: 'pending'; promise: Promise<T> }\n | { status: 'rejected'; reason: unknown };\n\n/** @internal * */\nexport class Computation<T> {\n private _fn: () => PromiseOrValue<T>;\n private _onAbort: ((reason?: unknown) => PromiseOrValue<void>) | undefined;\n private _maybePromise?: MaybePromise<T>;\n constructor(\n fn: () => PromiseOrValue<T>,\n onAbort?: (reason?: unknown) => PromiseOrValue<void>,\n ) {\n this._fn = fn;\n this._onAbort = onAbort;\n }\n prime(): MaybePromise<T> {\n if (this._maybePromise) {\n return this._maybePromise;\n }\n try {\n const result = this._fn();\n if (isPromise(result)) {\n this._maybePromise = { status: 'pending', promise: result };\n result.then(\n (value) => {\n this._maybePromise = { status: 'fulfilled', value };\n },\n (reason: unknown) => {\n this._maybePromise = { status: 'rejected', reason };\n },\n );\n } else {\n this._maybePromise = { status: 'fulfilled', value: result };\n }\n } catch (reason: unknown) {\n this._maybePromise = { status: 'rejected', reason };\n }\n return this._maybePromise;\n }\n result(): PromiseOrValue<T> {\n const maybePromise = this.prime();\n switch (maybePromise.status) {\n case 'fulfilled':\n return maybePromise.value;\n case 'rejected':\n throw maybePromise.reason;\n case 'pending': {\n return maybePromise.promise;\n }\n }\n }\n abort(reason?: unknown): PromiseOrValue<void> {\n const maybePromise = this._maybePromise;\n if (!maybePromise) {\n this._maybePromise = {\n status: 'rejected',\n reason,\n };\n return;\n }\n const status = maybePromise.status;\n if (status === 'pending') {\n this._maybePromise = {\n status: 'rejected',\n reason,\n };\n if (this._onAbort) {\n return this._onAbort(reason);\n }\n }\n }\n}\n"]}