Skip to content

Commit

Permalink
add cache
Browse files Browse the repository at this point in the history
  • Loading branch information
Marcisbee committed Aug 29, 2022
1 parent a1f82a5 commit 30b83f5
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 6 deletions.
1 change: 1 addition & 0 deletions mod.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './src/index';
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "messagepipe",
"version": "0.2.2",
"version": "0.2.3",
"description": "Formats message strings with number, date, plural, and select placeholders to create localized messages",
"main": "dist/index.js",
"module": "dist/index.esm.js",
Expand Down
26 changes: 23 additions & 3 deletions src/messagepipe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,33 @@ export interface MessagePipeTransformers {
[key: string]: MessagePipeTransformer;
}

export function MessagePipe(transformers: MessagePipeTransformers = {}) {
export interface MessagePipeOptions {
disableCache?: boolean;
}

const rcache: Record<string, any> = {};
const scache: Record<string, any> = {};

export function MessagePipe(transformers: MessagePipeTransformers = {}, { disableCache = false }: MessagePipeOptions = {}) {

function compileRaw<Output = string[]>(message: string): (props?: Record<string, any>) => Output {
return Function('b', 'return (a)=>[' + parser(message).join(',') + ']')(transformers);
if (!disableCache && rcache[message]) {
return rcache[message];
}

const parsedMessage = Function('b', 'return (a)=>[' + parser(message).join(',') + ']');

return disableCache ? parsedMessage(transformers) : rcache[message] = parsedMessage(transformers);
}

function compile<Output = string>(message: string): (props?: Record<string, any>) => Output {
return Function('b', 'return (a)=>' + parser(message).join('+'))(transformers);
if (!disableCache && scache[message]) {
return scache[message];
}

const parsedMessage = Function('b', 'return (a)=>' + parser(message).join('+'));

return disableCache ? parsedMessage(transformers) : scache[message] = parsedMessage(transformers);
}

return {
Expand Down

0 comments on commit 30b83f5

Please sign in to comment.