parent
d1a706a886
commit
e8281ebf83
@ -0,0 +1,62 @@
|
||||
import {
|
||||
PERMISSION_EVAL_UNKNOWN,
|
||||
PERMISSION_EXPR_EQ,
|
||||
PERMISSION_EXPR_GT,
|
||||
PERMISSION_EXPR_GTE,
|
||||
PERMISSION_EXPR_LT,
|
||||
PERMISSION_EXPR_LTE,
|
||||
PERMISSION_EXPR_NEQ,
|
||||
permissionDependencyKey
|
||||
} from './consts.ts';
|
||||
import type { DependencyKey, EvalResult, EvalValue, ExprIR } from './types.ts';
|
||||
|
||||
export function ok(
|
||||
value: EvalValue,
|
||||
dependencies: readonly DependencyKey[] = [],
|
||||
reason?: string,
|
||||
error?: unknown
|
||||
): EvalResult {
|
||||
const result: EvalResult = { value, dependencies };
|
||||
if (reason !== undefined) (result as { reason?: string }).reason = reason;
|
||||
if (error !== undefined) (result as { error?: unknown }).error = error;
|
||||
return result;
|
||||
}
|
||||
|
||||
export function dep(kind: string, key: string): DependencyKey {
|
||||
return permissionDependencyKey(kind, key) as DependencyKey;
|
||||
}
|
||||
|
||||
export function dedupeDeps(deps: readonly DependencyKey[]): DependencyKey[] {
|
||||
return [...new Set(deps)];
|
||||
}
|
||||
|
||||
export function comparePermissionValues(
|
||||
op: ExprIR['op'],
|
||||
left: unknown,
|
||||
right: unknown
|
||||
): boolean | typeof PERMISSION_EVAL_UNKNOWN {
|
||||
switch (op) {
|
||||
case PERMISSION_EXPR_EQ:
|
||||
return left === right;
|
||||
case PERMISSION_EXPR_NEQ:
|
||||
return left !== right;
|
||||
case PERMISSION_EXPR_GT:
|
||||
return typeof left === 'number' && typeof right === 'number'
|
||||
? left > right
|
||||
: PERMISSION_EVAL_UNKNOWN;
|
||||
case PERMISSION_EXPR_GTE:
|
||||
return typeof left === 'number' && typeof right === 'number'
|
||||
? left >= right
|
||||
: PERMISSION_EVAL_UNKNOWN;
|
||||
case PERMISSION_EXPR_LT:
|
||||
return typeof left === 'number' && typeof right === 'number'
|
||||
? left < right
|
||||
: PERMISSION_EVAL_UNKNOWN;
|
||||
case PERMISSION_EXPR_LTE:
|
||||
return typeof left === 'number' && typeof right === 'number'
|
||||
? left <= right
|
||||
: PERMISSION_EVAL_UNKNOWN;
|
||||
default:
|
||||
return PERMISSION_EVAL_UNKNOWN;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in new issue