Skip to content

Commit

Permalink
perf(json-crdt-extensions): ⚡️ do not wrap Vars into an extra object
Browse files Browse the repository at this point in the history
  • Loading branch information
streamich committed Jun 24, 2024
1 parent a8498ec commit 4dbc780
Show file tree
Hide file tree
Showing 4 changed files with 6 additions and 5 deletions.
2 changes: 1 addition & 1 deletion src/json-expression/__tests__/codegen.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ const check = (
operators: operatorsMap,
});
const fn = codegen.run().compile();
const result = fn({vars: new Vars(data)});
const result = fn(new Vars(data));
expect(result).toStrictEqual(expected);
};

Expand Down
2 changes: 1 addition & 1 deletion src/json-expression/__tests__/impure.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const compile = (expression: Expr, options: JsonExpressionCodegenContext = {}) =
operators: operatorsMap,
});
const fn = codegen.run().compile();
return (data: unknown) => fn({vars: new Vars(data)});
return (data: unknown) => fn(new Vars(data));
};

test('can execute expression twice with different inputs', () => {
Expand Down
4 changes: 2 additions & 2 deletions src/json-expression/operators/array.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ const createSubExpressionOperator = <N extends string>(
operand1 instanceof Literal && operand1.val instanceof Array
? JSON.stringify(operand1.val)
: `asArr(${operand1})`;
const js = `${name}(${arr},${JSON.stringify(varname)},vars,function(){return ${d}({vars:vars})})`;
const js = `${name}(${arr},${JSON.stringify(varname)},vars,function(){return ${d}(vars)})`;
return new Expression(js);
},
] as types.OperatorDefinition<types.TernaryExpression<N>>;
Expand Down Expand Up @@ -257,7 +257,7 @@ export const arrayOperators: types.OperatorDefinition<any>[] = [
: `asArr(${operand1})`;
const js = `reduce((${arr}),(${ctx.operands[1]}),${JSON.stringify(accname)},${JSON.stringify(
varname,
)},vars,function(){return ${d}({vars:vars})})`;
)},vars,function(){return ${d}(vars)})`;
return new Expression(js);
},
] as types.OperatorDefinition<types.ExprReduce>,
Expand Down
3 changes: 2 additions & 1 deletion src/json-expression/types.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type {JavaScript} from '@jsonjoy.com/util/lib/codegen';
import type {Vars} from './Vars';
import type {ExpressionResult} from './codegen-steps';
import type {JsonExpressionFn} from './codegen';

export type Literal<T> = T | LiteralExpression<T>;
export type LiteralExpression<O> = [constant: O];
Expand Down Expand Up @@ -321,7 +322,7 @@ export interface OperatorCodegenCtx<E extends Expression> extends JsonExpression
operand: (operand: Expression) => ExpressionResult;
link: (value: unknown, name?: string) => string;
const: (js: JavaScript<unknown>) => string;
subExpression: (expr: Expression) => (ctx: JsonExpressionExecutionContext) => unknown;
subExpression: (expr: Expression) => JsonExpressionFn;
var: (name: string) => string;
}

Expand Down

0 comments on commit 4dbc780

Please sign in to comment.