@next-core/cook 2.4.7 → 2.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","names":[],"sources":["../../src/interfaces.ts"],"sourcesContent":["import { parse } from \"@babel/parser\";\nimport {\n Expression,\n FunctionDeclaration,\n LVal,\n Node,\n ObjectExpression,\n ObjectPattern,\n ObjectProperty,\n RestElement,\n SourceLocation,\n SpreadElement,\n VariableDeclaration,\n type ArrowFunctionExpression,\n type FunctionExpression,\n} from \"@babel/types\";\n\nexport type EstreeNode =\n | Node\n | EstreeObjectExpression\n | EstreeObjectPattern\n | EstreeProperty\n | EstreeChainExpression\n | EstreeLiteral;\n\nexport type EstreeLVal = LVal | EstreeObjectPattern;\n\nexport type EstreeObjectExpression = Omit<ObjectExpression, \"properties\"> & {\n properties: (EstreeProperty | SpreadElement)[];\n};\n\nexport type EstreeObjectPattern = Omit<ObjectPattern, \"properties\"> & {\n properties: (EstreeProperty | RestElement)[];\n};\n\nexport type EstreeProperty = Omit<ObjectProperty, \"type\"> & {\n type: \"Property\";\n kind: \"init\" | \"get\" | \"set\";\n method?: boolean;\n};\n\nexport interface EstreeChainExpression {\n type: \"ChainExpression\";\n expression: Expression;\n loc: SourceLocation;\n}\n\nexport interface EstreeLiteral {\n type: \"Literal\";\n value: unknown;\n raw: string;\n regex?: {\n flags: string;\n };\n loc: SourceLocation;\n}\n\nexport type FunctionDefinition = FunctionExpression | ArrowFunctionExpression;\n\nexport type NodeWithBoundNames =\n | LVal\n | VariableDeclaration\n | FunctionDeclaration;\n\nexport type EstreeVisitors = Record<string, EstreeVisitorFn>;\n\nexport type EstreeVisitorFn = (node: any) => void;\n\nexport interface CookRules {\n noVar?: boolean;\n}\n\nexport type ParseResultOfFile = ReturnType<typeof parse>;\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"interfaces.js","names":[],"sources":["../../src/interfaces.ts"],"sourcesContent":["import { parse } from \"@babel/parser\";\nimport {\n Expression,\n FunctionDeclaration,\n LVal,\n Node,\n ObjectExpression,\n ObjectPattern,\n ObjectProperty,\n RestElement,\n SourceLocation,\n SpreadElement,\n VariableDeclaration,\n type ArrowFunctionExpression,\n type FunctionExpression,\n} from \"@babel/types\";\n\nexport type EstreeNode =\n | Node\n | EstreeObjectExpression\n | EstreeObjectPattern\n | EstreeProperty\n | EstreeChainExpression\n | EstreeLiteral;\n\nexport type EstreeLVal = LVal | EstreeObjectPattern;\n\nexport type EstreeObjectExpression = Omit<ObjectExpression, \"properties\"> & {\n properties: (EstreeProperty | SpreadElement)[];\n};\n\nexport type EstreeObjectPattern = Omit<ObjectPattern, \"properties\"> & {\n properties: (EstreeProperty | RestElement)[];\n};\n\nexport type EstreeProperty = Omit<ObjectProperty, \"type\"> & {\n type: \"Property\";\n kind: \"init\" | \"get\" | \"set\";\n method?: boolean;\n};\n\nexport interface EstreeChainExpression {\n type: \"ChainExpression\";\n expression: Expression;\n loc: SourceLocation;\n}\n\nexport interface EstreeLiteral {\n type: \"Literal\";\n value: unknown;\n raw: string;\n regex?: {\n pattern: string;\n flags: string;\n };\n loc: SourceLocation;\n}\n\nexport type FunctionDefinition = FunctionExpression | ArrowFunctionExpression;\n\nexport type NodeWithBoundNames =\n | LVal\n | VariableDeclaration\n | FunctionDeclaration;\n\nexport type EstreeVisitors = Record<string, EstreeVisitorFn>;\n\nexport type EstreeVisitorFn = (node: any) => void;\n\nexport interface CookRules {\n noVar?: boolean;\n}\n\nexport type ParseResultOfFile = ReturnType<typeof parse>;\n"],"mappings":"","ignoreList":[]}
@@ -1,17 +1,28 @@
1
1
  import { parseAsEstree } from "./parse.js";
2
2
  import { precook } from "./precook.js";
3
+ let ASTCache = new WeakMap();
3
4
  export function precookFunction(source) {
4
5
  let {
5
6
  typescript,
7
+ cacheKey,
6
8
  ...restOptions
7
9
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
8
- const func = parseAsEstree(source, {
9
- typescript
10
- });
10
+ let func = cacheKey ? ASTCache.get(cacheKey) : undefined;
11
+ if (!func) {
12
+ func = parseAsEstree(source, {
13
+ typescript
14
+ });
15
+ if (cacheKey) {
16
+ ASTCache.set(cacheKey, func);
17
+ }
18
+ }
11
19
  const attemptToVisitGlobals = precook(func, restOptions);
12
20
  return {
13
21
  function: func,
14
22
  attemptToVisitGlobals
15
23
  };
16
24
  }
25
+ export function clearFunctionASTCache() {
26
+ ASTCache = new WeakMap();
27
+ }
17
28
  //# sourceMappingURL=precookFunction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"precookFunction.js","names":["parseAsEstree","precook","precookFunction","source","typescript","restOptions","arguments","length","undefined","func","attemptToVisitGlobals","function"],"sources":["../../src/precookFunction.ts"],"sourcesContent":["import { FunctionDeclaration } from \"@babel/types\";\nimport { parseAsEstree } from \"./parse.js\";\nimport { precook, PrecookOptions } from \"./precook.js\";\n\nexport interface PrecookFunctionOptions extends PrecookOptions {\n typescript?: boolean;\n}\n\nexport interface PrecookFunctionResult {\n function: FunctionDeclaration;\n attemptToVisitGlobals: Set<string>;\n}\n\nexport function precookFunction(\n source: string,\n { typescript, ...restOptions }: PrecookFunctionOptions = {}\n): PrecookFunctionResult {\n const func = parseAsEstree(source, { typescript });\n const attemptToVisitGlobals = precook(func, restOptions);\n return {\n function: func,\n attemptToVisitGlobals,\n };\n}\n"],"mappings":"AACA,SAASA,aAAa,QAAQ,YAAY;AAC1C,SAASC,OAAO,QAAwB,cAAc;AAWtD,OAAO,SAASC,eAAeA,CAC7BC,MAAc,EAES;EAAA,IADvB;IAAEC,UAAU;IAAE,GAAGC;EAAoC,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAE3D,MAAMG,IAAI,GAAGT,aAAa,CAACG,MAAM,EAAE;IAAEC;EAAW,CAAC,CAAC;EAClD,MAAMM,qBAAqB,GAAGT,OAAO,CAACQ,IAAI,EAAEJ,WAAW,CAAC;EACxD,OAAO;IACLM,QAAQ,EAAEF,IAAI;IACdC;EACF,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"precookFunction.js","names":["parseAsEstree","precook","ASTCache","WeakMap","precookFunction","source","typescript","cacheKey","restOptions","arguments","length","undefined","func","get","set","attemptToVisitGlobals","function","clearFunctionASTCache"],"sources":["../../src/precookFunction.ts"],"sourcesContent":["import type { FunctionDeclaration } from \"@babel/types\";\nimport { parseAsEstree } from \"./parse.js\";\nimport { precook, PrecookOptions } from \"./precook.js\";\n\nlet ASTCache = new WeakMap<object, FunctionDeclaration>();\n\nexport interface PrecookFunctionOptions extends PrecookOptions {\n cacheKey?: object;\n typescript?: boolean;\n}\n\nexport interface PrecookFunctionResult {\n function: FunctionDeclaration;\n attemptToVisitGlobals: Set<string>;\n}\n\nexport function precookFunction(\n source: string,\n { typescript, cacheKey, ...restOptions }: PrecookFunctionOptions = {}\n): PrecookFunctionResult {\n let func = cacheKey ? ASTCache.get(cacheKey) : undefined;\n if (!func) {\n func = parseAsEstree(source, { typescript });\n if (cacheKey) {\n ASTCache.set(cacheKey, func);\n }\n }\n const attemptToVisitGlobals = precook(func, restOptions);\n return {\n function: func,\n attemptToVisitGlobals,\n };\n}\n\nexport function clearFunctionASTCache(): void {\n ASTCache = new WeakMap();\n}\n"],"mappings":"AACA,SAASA,aAAa,QAAQ,YAAY;AAC1C,SAASC,OAAO,QAAwB,cAAc;AAEtD,IAAIC,QAAQ,GAAG,IAAIC,OAAO,CAA8B,CAAC;AAYzD,OAAO,SAASC,eAAeA,CAC7BC,MAAc,EAES;EAAA,IADvB;IAAEC,UAAU;IAAEC,QAAQ;IAAE,GAAGC;EAAoC,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAErE,IAAIG,IAAI,GAAGL,QAAQ,GAAGL,QAAQ,CAACW,GAAG,CAACN,QAAQ,CAAC,GAAGI,SAAS;EACxD,IAAI,CAACC,IAAI,EAAE;IACTA,IAAI,GAAGZ,aAAa,CAACK,MAAM,EAAE;MAAEC;IAAW,CAAC,CAAC;IAC5C,IAAIC,QAAQ,EAAE;MACZL,QAAQ,CAACY,GAAG,CAACP,QAAQ,EAAEK,IAAI,CAAC;IAC9B;EACF;EACA,MAAMG,qBAAqB,GAAGd,OAAO,CAACW,IAAI,EAAEJ,WAAW,CAAC;EACxD,OAAO;IACLQ,QAAQ,EAAEJ,IAAI;IACdG;EACF,CAAC;AACH;AAEA,OAAO,SAASE,qBAAqBA,CAAA,EAAS;EAC5Cf,QAAQ,GAAG,IAAIC,OAAO,CAAC,CAAC;AAC1B","ignoreList":[]}
@@ -1,15 +1,26 @@
1
1
  import { parseAsEstreeExpression } from "./parse.js";
2
2
  import { precook } from "./precook.js";
3
+ const ASTCache = new Map();
3
4
  // `raw` should always be asserted by `isEvaluable`.
4
- export function preevaluate(raw, options) {
5
+ export function preevaluate(raw) {
6
+ let {
7
+ cache,
8
+ ...restOptions
9
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
5
10
  const fixes = [];
6
11
  const source = raw.replace(/^\s*<%[~=]?\s|\s%>\s*$/g, m => {
7
12
  fixes.push(m);
8
13
  return "";
9
14
  });
10
- const expression = parseAsEstreeExpression(source);
15
+ let expression = cache ? ASTCache.get(source) : undefined;
16
+ if (!expression) {
17
+ expression = parseAsEstreeExpression(source);
18
+ if (cache) {
19
+ ASTCache.set(source, expression);
20
+ }
21
+ }
11
22
  const attemptToVisitGlobals = precook(expression, {
12
- ...options,
23
+ ...restOptions,
13
24
  expressionOnly: true
14
25
  });
15
26
  return {
@@ -29,4 +40,7 @@ export function shouldAllowRecursiveEvaluations(raw) {
29
40
  export function isTrackAll(raw) {
30
41
  return /^\s*<%=\s/.test(raw) && /\s%>\s*$/.test(raw);
31
42
  }
43
+ export function clearExpressionASTCache() {
44
+ ASTCache.clear();
45
+ }
32
46
  //# sourceMappingURL=preevaluate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"preevaluate.js","names":["parseAsEstreeExpression","precook","preevaluate","raw","options","fixes","source","replace","m","push","expression","attemptToVisitGlobals","expressionOnly","prefix","suffix","isEvaluable","test","shouldAllowRecursiveEvaluations","isTrackAll"],"sources":["../../src/preevaluate.ts"],"sourcesContent":["import { Expression } from \"@babel/types\";\nimport { parseAsEstreeExpression } from \"./parse.js\";\nimport { precook, PrecookOptions } from \"./precook.js\";\n\nexport type PreevaluateOptions = Omit<PrecookOptions, \"expressionOnly\">;\n\nexport interface PreevaluateResult {\n expression: Expression;\n attemptToVisitGlobals: Set<string>;\n source: string;\n prefix: string;\n suffix: string;\n}\n\n// `raw` should always be asserted by `isEvaluable`.\nexport function preevaluate(\n raw: string,\n options?: PreevaluateOptions\n): PreevaluateResult {\n const fixes: string[] = [];\n const source = raw.replace(/^\\s*<%[~=]?\\s|\\s%>\\s*$/g, (m) => {\n fixes.push(m);\n return \"\";\n });\n const expression = parseAsEstreeExpression(source);\n const attemptToVisitGlobals = precook(expression, {\n ...options,\n expressionOnly: true,\n });\n return {\n expression,\n attemptToVisitGlobals,\n source,\n prefix: fixes[0],\n suffix: fixes[1],\n };\n}\n\nexport function isEvaluable(raw: string): boolean {\n return /^\\s*<%[~=]?\\s/.test(raw) && /\\s%>\\s*$/.test(raw);\n}\n\nexport function shouldAllowRecursiveEvaluations(raw: string): boolean {\n return /^\\s*<%~\\s/.test(raw);\n}\n\nexport function isTrackAll(raw: string): boolean {\n return /^\\s*<%=\\s/.test(raw) && /\\s%>\\s*$/.test(raw);\n}\n"],"mappings":"AACA,SAASA,uBAAuB,QAAQ,YAAY;AACpD,SAASC,OAAO,QAAwB,cAAc;AAYtD;AACA,OAAO,SAASC,WAAWA,CACzBC,GAAW,EACXC,OAA4B,EACT;EACnB,MAAMC,KAAe,GAAG,EAAE;EAC1B,MAAMC,MAAM,GAAGH,GAAG,CAACI,OAAO,CAAC,yBAAyB,EAAGC,CAAC,IAAK;IAC3DH,KAAK,CAACI,IAAI,CAACD,CAAC,CAAC;IACb,OAAO,EAAE;EACX,CAAC,CAAC;EACF,MAAME,UAAU,GAAGV,uBAAuB,CAACM,MAAM,CAAC;EAClD,MAAMK,qBAAqB,GAAGV,OAAO,CAACS,UAAU,EAAE;IAChD,GAAGN,OAAO;IACVQ,cAAc,EAAE;EAClB,CAAC,CAAC;EACF,OAAO;IACLF,UAAU;IACVC,qBAAqB;IACrBL,MAAM;IACNO,MAAM,EAAER,KAAK,CAAC,CAAC,CAAC;IAChBS,MAAM,EAAET,KAAK,CAAC,CAAC;EACjB,CAAC;AACH;AAEA,OAAO,SAASU,WAAWA,CAACZ,GAAW,EAAW;EAChD,OAAO,eAAe,CAACa,IAAI,CAACb,GAAG,CAAC,IAAI,UAAU,CAACa,IAAI,CAACb,GAAG,CAAC;AAC1D;AAEA,OAAO,SAASc,+BAA+BA,CAACd,GAAW,EAAW;EACpE,OAAO,WAAW,CAACa,IAAI,CAACb,GAAG,CAAC;AAC9B;AAEA,OAAO,SAASe,UAAUA,CAACf,GAAW,EAAW;EAC/C,OAAO,WAAW,CAACa,IAAI,CAACb,GAAG,CAAC,IAAI,UAAU,CAACa,IAAI,CAACb,GAAG,CAAC;AACtD","ignoreList":[]}
1
+ {"version":3,"file":"preevaluate.js","names":["parseAsEstreeExpression","precook","ASTCache","Map","preevaluate","raw","cache","restOptions","arguments","length","undefined","fixes","source","replace","m","push","expression","get","set","attemptToVisitGlobals","expressionOnly","prefix","suffix","isEvaluable","test","shouldAllowRecursiveEvaluations","isTrackAll","clearExpressionASTCache","clear"],"sources":["../../src/preevaluate.ts"],"sourcesContent":["import type { Expression } from \"@babel/types\";\nimport { parseAsEstreeExpression } from \"./parse.js\";\nimport { precook, PrecookOptions } from \"./precook.js\";\n\nconst ASTCache = new Map<string, Expression>();\n\nexport type PreevaluateOptions = Omit<PrecookOptions, \"expressionOnly\"> & {\n cache?: boolean;\n};\n\nexport interface PreevaluateResult {\n expression: Expression;\n attemptToVisitGlobals: Set<string>;\n source: string;\n prefix: string;\n suffix: string;\n}\n\n// `raw` should always be asserted by `isEvaluable`.\nexport function preevaluate(\n raw: string,\n { cache, ...restOptions }: PreevaluateOptions = {}\n): PreevaluateResult {\n const fixes: string[] = [];\n const source = raw.replace(/^\\s*<%[~=]?\\s|\\s%>\\s*$/g, (m) => {\n fixes.push(m);\n return \"\";\n });\n let expression = cache ? ASTCache.get(source) : undefined;\n if (!expression) {\n expression = parseAsEstreeExpression(source);\n if (cache) {\n ASTCache.set(source, expression);\n }\n }\n const attemptToVisitGlobals = precook(expression, {\n ...restOptions,\n expressionOnly: true,\n });\n return {\n expression,\n attemptToVisitGlobals,\n source,\n prefix: fixes[0],\n suffix: fixes[1],\n };\n}\n\nexport function isEvaluable(raw: string): boolean {\n return /^\\s*<%[~=]?\\s/.test(raw) && /\\s%>\\s*$/.test(raw);\n}\n\nexport function shouldAllowRecursiveEvaluations(raw: string): boolean {\n return /^\\s*<%~\\s/.test(raw);\n}\n\nexport function isTrackAll(raw: string): boolean {\n return /^\\s*<%=\\s/.test(raw) && /\\s%>\\s*$/.test(raw);\n}\n\nexport function clearExpressionASTCache(): void {\n ASTCache.clear();\n}\n"],"mappings":"AACA,SAASA,uBAAuB,QAAQ,YAAY;AACpD,SAASC,OAAO,QAAwB,cAAc;AAEtD,MAAMC,QAAQ,GAAG,IAAIC,GAAG,CAAqB,CAAC;AAc9C;AACA,OAAO,SAASC,WAAWA,CACzBC,GAAW,EAEQ;EAAA,IADnB;IAAEC,KAAK;IAAE,GAAGC;EAAgC,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAElD,MAAMG,KAAe,GAAG,EAAE;EAC1B,MAAMC,MAAM,GAAGP,GAAG,CAACQ,OAAO,CAAC,yBAAyB,EAAGC,CAAC,IAAK;IAC3DH,KAAK,CAACI,IAAI,CAACD,CAAC,CAAC;IACb,OAAO,EAAE;EACX,CAAC,CAAC;EACF,IAAIE,UAAU,GAAGV,KAAK,GAAGJ,QAAQ,CAACe,GAAG,CAACL,MAAM,CAAC,GAAGF,SAAS;EACzD,IAAI,CAACM,UAAU,EAAE;IACfA,UAAU,GAAGhB,uBAAuB,CAACY,MAAM,CAAC;IAC5C,IAAIN,KAAK,EAAE;MACTJ,QAAQ,CAACgB,GAAG,CAACN,MAAM,EAAEI,UAAU,CAAC;IAClC;EACF;EACA,MAAMG,qBAAqB,GAAGlB,OAAO,CAACe,UAAU,EAAE;IAChD,GAAGT,WAAW;IACda,cAAc,EAAE;EAClB,CAAC,CAAC;EACF,OAAO;IACLJ,UAAU;IACVG,qBAAqB;IACrBP,MAAM;IACNS,MAAM,EAAEV,KAAK,CAAC,CAAC,CAAC;IAChBW,MAAM,EAAEX,KAAK,CAAC,CAAC;EACjB,CAAC;AACH;AAEA,OAAO,SAASY,WAAWA,CAAClB,GAAW,EAAW;EAChD,OAAO,eAAe,CAACmB,IAAI,CAACnB,GAAG,CAAC,IAAI,UAAU,CAACmB,IAAI,CAACnB,GAAG,CAAC;AAC1D;AAEA,OAAO,SAASoB,+BAA+BA,CAACpB,GAAW,EAAW;EACpE,OAAO,WAAW,CAACmB,IAAI,CAACnB,GAAG,CAAC;AAC9B;AAEA,OAAO,SAASqB,UAAUA,CAACrB,GAAW,EAAW;EAC/C,OAAO,WAAW,CAACmB,IAAI,CAACnB,GAAG,CAAC,IAAI,UAAU,CAACmB,IAAI,CAACnB,GAAG,CAAC;AACtD;AAEA,OAAO,SAASsB,uBAAuBA,CAAA,EAAS;EAC9CzB,QAAQ,CAAC0B,KAAK,CAAC,CAAC;AAClB","ignoreList":[]}
@@ -23,6 +23,7 @@ export interface EstreeLiteral {
23
23
  value: unknown;
24
24
  raw: string;
25
25
  regex?: {
26
+ pattern: string;
26
27
  flags: string;
27
28
  };
28
29
  loc: SourceLocation;
@@ -1,10 +1,12 @@
1
- import { FunctionDeclaration } from "@babel/types";
1
+ import type { FunctionDeclaration } from "@babel/types";
2
2
  import { PrecookOptions } from "./precook.js";
3
3
  export interface PrecookFunctionOptions extends PrecookOptions {
4
+ cacheKey?: object;
4
5
  typescript?: boolean;
5
6
  }
6
7
  export interface PrecookFunctionResult {
7
8
  function: FunctionDeclaration;
8
9
  attemptToVisitGlobals: Set<string>;
9
10
  }
10
- export declare function precookFunction(source: string, { typescript, ...restOptions }?: PrecookFunctionOptions): PrecookFunctionResult;
11
+ export declare function precookFunction(source: string, { typescript, cacheKey, ...restOptions }?: PrecookFunctionOptions): PrecookFunctionResult;
12
+ export declare function clearFunctionASTCache(): void;
@@ -1,6 +1,8 @@
1
- import { Expression } from "@babel/types";
1
+ import type { Expression } from "@babel/types";
2
2
  import { PrecookOptions } from "./precook.js";
3
- export type PreevaluateOptions = Omit<PrecookOptions, "expressionOnly">;
3
+ export type PreevaluateOptions = Omit<PrecookOptions, "expressionOnly"> & {
4
+ cache?: boolean;
5
+ };
4
6
  export interface PreevaluateResult {
5
7
  expression: Expression;
6
8
  attemptToVisitGlobals: Set<string>;
@@ -8,7 +10,8 @@ export interface PreevaluateResult {
8
10
  prefix: string;
9
11
  suffix: string;
10
12
  }
11
- export declare function preevaluate(raw: string, options?: PreevaluateOptions): PreevaluateResult;
13
+ export declare function preevaluate(raw: string, { cache, ...restOptions }?: PreevaluateOptions): PreevaluateResult;
12
14
  export declare function isEvaluable(raw: string): boolean;
13
15
  export declare function shouldAllowRecursiveEvaluations(raw: string): boolean;
14
16
  export declare function isTrackAll(raw: string): boolean;
17
+ export declare function clearExpressionASTCache(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-core/cook",
3
- "version": "2.4.7",
3
+ "version": "2.4.8",
4
4
  "description": "Cook expressions and storyboard functions",
5
5
  "homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/cook",
6
6
  "license": "GPL-3.0",
@@ -57,5 +57,5 @@
57
57
  "@next-core/test-next": "^1.1.5",
58
58
  "lodash": "^4.17.21"
59
59
  },
60
- "gitHead": "e3fcc4d2780cfa67576a8dcd834917856f8a1a51"
60
+ "gitHead": "a7d9a785955b9f7948f9200096ae31b6d11fcddd"
61
61
  }