Skip to content

Commit e90bed2

Browse files
committed
fix: add cache to generateGFunction
Signed-off-by: Zixuan Liu <nodeces@gmail.com>
1 parent 45ea2b7 commit e90bed2

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/util/builtinOperators.ts

+13-3
Original file line numberDiff line numberDiff line change
@@ -233,19 +233,29 @@ function globMatch(string: string, pattern: string): boolean {
233233

234234
// generateGFunction is the factory method of the g(_, _) function.
235235
function generateGFunction(rm: rbac.RoleManager): any {
236+
const memorized = new Map<string, boolean>();
236237
return async function func(...args: any[]): Promise<boolean> {
238+
const key = args.toString();
239+
let value = memorized.get(key);
240+
if (value) {
241+
return value;
242+
}
243+
237244
const [arg0, arg1] = args;
238245
const name1: string = (arg0 || '').toString();
239246
const name2: string = (arg1 || '').toString();
240247

241248
if (!rm) {
242-
return name1 === name2;
249+
value = name1 === name2;
243250
} else if (args.length === 2) {
244-
return await rm.hasLink(name1, name2);
251+
value = await rm.hasLink(name1, name2);
245252
} else {
246253
const domain: string = args[2].toString();
247-
return await rm.hasLink(name1, name2, domain);
254+
value = await rm.hasLink(name1, name2, domain);
248255
}
256+
257+
memorized.set(key, value);
258+
return value;
249259
};
250260
}
251261

0 commit comments

Comments
 (0)