Skip to content

Commit

Permalink
Update impl
Browse files Browse the repository at this point in the history
  • Loading branch information
SukkaW committed May 23, 2024
1 parent 435d388 commit ac8b020
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 37 deletions.
8 changes: 4 additions & 4 deletions packages/babel-helpers/src/helpers-generated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,14 @@ function helper(
export { helpers as default };
const helpers: Record<string, Helper> = {
__proto__: null,
// size: 1070, gzip size: 493
// size: 1095, gzip size: 500
AsyncGenerator: helper(
"7.0.0-beta.0",
'function AsyncGenerator(e){var r,t;function resume(r,t){try{var n=e[r](t),o=n.value,u=o instanceof OverloadYield;Promise.resolve(u?o.v:o).then((function(t){if(u){var i="return"===r?"return":"next";if(!o.k||t.done)return resume(i,t);t=e[i](t).value}settle(n.done?"return":"normal",t)}),(function(e){resume("throw",e)}))}catch(e){settle("throw",e)}}function settle(e,n){switch(e){case"return":r.resolve({value:n,done:!0});break;case"throw":r.reject(n);break;default:r.resolve({value:n,done:!1})}(r=r.next)?resume(r.key,r.arg):t=null}this._invoke=function(e,n){return new Promise((function(o,u){var i={key:e,arg:n,resolve:o,reject:u,next:null};t?t=t.next=i:(r=t=i,resume(e,n))}))},"function"!=typeof e.return&&(this.return=void 0)}AsyncGenerator.prototype["function"==typeof Symbol&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},AsyncGenerator.prototype.next=function(e){return this._invoke("next",e)},AsyncGenerator.prototype.throw=function(e){return this._invoke("throw",e)},AsyncGenerator.prototype.return=function(e){return this._invoke("return",e)};',
'function AsyncGeneratorImpl(e){var r,t;function resume(r,t){try{var n=e[r](t),o=n.value,u=o instanceof OverloadYield;Promise.resolve(u?o.v:o).then((function(t){if(u){var i="return"===r?"return":"next";if(!o.k||t.done)return void resume(i,t);t=e[i](t).value}settle(n.done?"return":"normal",t)}),(function(e){resume("throw",e)}))}catch(e){settle("throw",e)}}function settle(e,n){switch(e){case"return":r.resolve({value:n,done:!0});break;case"throw":r.reject(n);break;default:r.resolve({value:n,done:!1})}(r=r.next)?resume(r.key,r.arg):t=null}this._invoke=function(e,n){return new Promise((function(o,u){var i={key:e,arg:n,resolve:o,reject:u,next:null};t?t=t.next=i:(r=t=i,resume(e,n))}))},"function"!=typeof e.return&&(this.return=void 0)}AsyncGeneratorImpl.prototype["function"==typeof Symbol&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},AsyncGeneratorImpl.prototype.next=function(e){return this._invoke("next",e)},AsyncGeneratorImpl.prototype.throw=function(e){return this._invoke("throw",e)},AsyncGeneratorImpl.prototype.return=function(e){return this._invoke("return",e)};',
{
globals: ["Promise", "Symbol"],
locals: {
AsyncGenerator: [
AsyncGeneratorImpl: [
"body.0.id",
"body.1.expression.expressions.0.left.object.object",
"body.1.expression.expressions.1.left.object.object",
Expand All @@ -51,7 +51,7 @@ const helpers: Record<string, Helper> = {
],
},
exportBindingAssignments: [],
exportName: "AsyncGenerator",
exportName: "AsyncGeneratorImpl",
dependencies: {
OverloadYield: [
"body.0.body.body.1.body.body.0.block.body.0.declarations.2.init.right",
Expand Down
20 changes: 8 additions & 12 deletions packages/babel-helpers/src/helpers/AsyncGenerator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,16 @@ import OverloadYield from "./OverloadYield.ts";

type AsyncIteratorMethod = "next" | "throw" | "return";

interface AsyncGeneratorImpl<T = unknown, TReturn = any, TNext = unknown>
extends AsyncGenerator<T, TReturn, TNext> {
declare class AsyncGeneratorImpl<T = unknown, TReturn = any, TNext = unknown>
implements AsyncGenerator<T, TReturn, TNext>
{
_invoke: (
key: AsyncIteratorMethod,
arg: IteratorResult<T>,
) => Promise<IteratorResult<T, TReturn>>;

constructor(gen: Generator<T, TReturn, TNext>);

next(...args: [] | [TNext]): Promise<IteratorResult<T, TReturn>>;
return(
value: TReturn | PromiseLike<TReturn>,
Expand All @@ -19,13 +22,6 @@ interface AsyncGeneratorImpl<T = unknown, TReturn = any, TNext = unknown>
[Symbol.asyncIterator](): AsyncGenerator<T, TReturn, TNext>;
}

interface AsyncGeneratorImplConstructor {
new <T = unknown, TReturn = any, TNext = unknown>(
gen: Generator<T, TReturn, TNext>,
): AsyncGeneratorImpl<T, TReturn, TNext>;
prototype: AsyncGeneratorImpl;
}

interface AsyncGeneratorRequest<T = unknown, TReturn = any, TNext = unknown> {
key: AsyncIteratorMethod;
arg: IteratorResult<T>;
Expand All @@ -34,7 +30,7 @@ interface AsyncGeneratorRequest<T = unknown, TReturn = any, TNext = unknown> {
next: AsyncGeneratorRequest<T, TReturn, TNext> | null;
}

var AsyncGeneratorImpl = function <T = unknown, TReturn = any, TNext = unknown>(
function AsyncGeneratorImpl<T = unknown, TReturn = any, TNext = unknown>(
this: AsyncGeneratorImpl<T, TReturn, TNext>,
gen: Generator<T, TReturn, TNext>,
) {
Expand Down Expand Up @@ -137,7 +133,7 @@ var AsyncGeneratorImpl = function <T = unknown, TReturn = any, TNext = unknown>(
// @ts-expect-error -- intentionally remove "return" when not supported
this.return = undefined;
}
} as any as AsyncGeneratorImplConstructor;
}

AsyncGeneratorImpl.prototype[
((typeof Symbol === "function" && Symbol.asyncIterator) ||
Expand All @@ -156,4 +152,4 @@ AsyncGeneratorImpl.prototype.return = function (arg: IteratorResult<any>) {
return this._invoke("return", arg);
};

export default AsyncGeneratorImpl;
export { AsyncGeneratorImpl as default };
13 changes: 0 additions & 13 deletions packages/babel-helpers/src/helpers/OverloadYield.js

This file was deleted.

14 changes: 6 additions & 8 deletions packages/babel-helpers/src/helpers/OverloadYield.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,22 @@
*/

// _OverloadYield is actually a class
interface _OverloadYield<T = any> {
declare class _OverloadYield<T = any> {
constructor(value: T, /** 0: await 1: delegate */ kind: 0 | 1);

v: T;
/** 0: await 1: delegate */
k: 0 | 1;
}

interface _OverloadYieldConstructor {
new <T>(value: T, /** 0: await 1: delegate */ kind: 0 | 1): _OverloadYield<T>;
}

// The actual implementation of _OverloadYield starts here
var _OverloadYield = function <T>(
function _OverloadYield<T>(
this: _OverloadYield<T>,
value: T,
/** 0: await 1: delegate */ kind: 0 | 1,
) {
this.v = value;
this.k = kind;
} as any as _OverloadYieldConstructor;
}

export default _OverloadYield;
export { _OverloadYield as default };

0 comments on commit ac8b020

Please sign in to comment.