@next-core/supply 1.0.36 → 1.0.39

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.
package/CHANGELOG.md CHANGED
@@ -3,7 +3,7 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ## [1.0.36](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.35...@next-core/supply@1.0.36) (2022-04-21)
6
+ ## [1.0.39](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.38...@next-core/supply@1.0.39) (2022-05-09)
7
7
 
8
8
  **Note:** Version bump only for package @next-core/supply
9
9
 
@@ -11,89 +11,62 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
11
11
 
12
12
 
13
13
 
14
- ## [1.0.35](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.34...@next-core/supply@1.0.35) (2022-04-19)
14
+ ## [1.0.38](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.37...@next-core/supply@1.0.38) (2022-05-06)
15
15
 
16
16
  **Note:** Version bump only for package @next-core/supply
17
17
 
18
+ ## [1.0.37](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.36...@next-core/supply@1.0.37) (2022-04-22)
18
19
 
20
+ ### Bug Fixes
19
21
 
22
+ - mock \_.uniqueId in storyboard functions ([f6d5eb2](https://github.com/easyops-cn/next-core/commit/f6d5eb2a6e00d7c5bd32e60a238b67c14641b840))
20
23
 
21
-
22
- ## [1.0.34](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.33...@next-core/supply@1.0.34) (2022-04-14)
24
+ ## [1.0.36](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.35...@next-core/supply@1.0.36) (2022-04-21)
23
25
 
24
26
  **Note:** Version bump only for package @next-core/supply
25
27
 
28
+ ## [1.0.35](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.34...@next-core/supply@1.0.35) (2022-04-19)
26
29
 
30
+ **Note:** Version bump only for package @next-core/supply
27
31
 
32
+ ## [1.0.34](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.33...@next-core/supply@1.0.34) (2022-04-14)
28
33
 
34
+ **Note:** Version bump only for package @next-core/supply
29
35
 
30
36
  ## [1.0.33](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.32...@next-core/supply@1.0.33) (2022-04-07)
31
37
 
32
38
  **Note:** Version bump only for package @next-core/supply
33
39
 
34
-
35
-
36
-
37
-
38
40
  ## [1.0.32](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.31...@next-core/supply@1.0.32) (2022-04-06)
39
41
 
40
42
  **Note:** Version bump only for package @next-core/supply
41
43
 
42
-
43
-
44
-
45
-
46
44
  ## [1.0.31](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.30...@next-core/supply@1.0.31) (2022-03-29)
47
45
 
48
46
  **Note:** Version bump only for package @next-core/supply
49
47
 
50
-
51
-
52
-
53
-
54
48
  ## [1.0.30](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.29...@next-core/supply@1.0.30) (2022-03-29)
55
49
 
56
50
  **Note:** Version bump only for package @next-core/supply
57
51
 
58
-
59
-
60
-
61
-
62
52
  ## [1.0.29](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.28...@next-core/supply@1.0.29) (2022-03-28)
63
53
 
64
54
  **Note:** Version bump only for package @next-core/supply
65
55
 
66
-
67
-
68
-
69
-
70
56
  ## [1.0.28](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.27...@next-core/supply@1.0.28) (2022-03-24)
71
57
 
72
-
73
58
  ### Bug Fixes
74
59
 
75
- * support mocked location in storyboard functions ([260e775](https://github.com/easyops-cn/next-core/commit/260e77567a61c7f3199a174171de2eead4007d06))
76
-
77
-
78
-
79
-
60
+ - support mocked location in storyboard functions ([260e775](https://github.com/easyops-cn/next-core/commit/260e77567a61c7f3199a174171de2eead4007d06))
80
61
 
81
62
  ## [1.0.27](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.26...@next-core/supply@1.0.27) (2022-03-15)
82
63
 
83
64
  **Note:** Version bump only for package @next-core/supply
84
65
 
85
-
86
-
87
-
88
-
89
66
  ## [1.0.26](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.25...@next-core/supply@1.0.26) (2022-02-28)
90
67
 
91
68
  **Note:** Version bump only for package @next-core/supply
92
69
 
93
-
94
-
95
-
96
-
97
70
  ## [1.0.25](https://github.com/easyops-cn/next-core/compare/@next-core/supply@1.0.24...@next-core/supply@1.0.25) (2022-02-21)
98
71
 
99
72
  **Note:** Version bump only for package @next-core/supply
package/dist/cjs/index.js CHANGED
@@ -13,7 +13,7 @@ var _moment = _interopRequireDefault(require("moment"));
13
13
 
14
14
  var _pipes = require("@next-core/pipes");
15
15
 
16
- function supply(attemptToVisitGlobals, providedGlobalVariables) {
16
+ function supply(attemptToVisitGlobals, providedGlobalVariables, mock) {
17
17
  const globalVariables = { ...providedGlobalVariables
18
18
  }; // Allow limited browser builtin values.
19
19
 
@@ -21,7 +21,7 @@ function supply(attemptToVisitGlobals, providedGlobalVariables) {
21
21
 
22
22
  for (const variableName of attemptToVisitGlobals) {
23
23
  if (!Object.prototype.hasOwnProperty.call(globalVariables, variableName)) {
24
- const variable = supplyIndividual(variableName);
24
+ const variable = supplyIndividual(variableName, mock);
25
25
 
26
26
  if (variable !== undefined) {
27
27
  globalVariables[variableName] = variable;
@@ -50,14 +50,14 @@ const shouldOmitInLodash = new Set([// Omit all mutable methods from lodash.
50
50
  const shouldOmitInMoment = new Set(["lang", "langData", "locale", "localeData", "defineLocale", "updateLocale", "updateOffset"]);
51
51
  const allowedGlobalObjects = new Set(["Array", "Boolean", "Date", "Infinity", "JSON", "Math", "NaN", "Number", "String", "decodeURI", "decodeURIComponent", "encodeURI", "encodeURIComponent", "isFinite", "isNaN", "parseFloat", "parseInt", "Map", "Set", "URLSearchParams", "WeakMap", "WeakSet", "atob", "btoa"]);
52
52
 
53
- function supplyIndividual(variableName) {
53
+ function supplyIndividual(variableName, mock) {
54
54
  switch (variableName) {
55
55
  case "Object":
56
56
  // Do not allow mutable methods like `Object.assign`.
57
57
  return delegateMethods(Object, ["entries", "fromEntries", "keys", "values"]);
58
58
 
59
59
  case "_":
60
- return Object.fromEntries(Object.entries(_lodash.default).filter(entry => !shouldOmitInLodash.has(entry[0])));
60
+ return Object.fromEntries(Object.entries(_lodash.default).filter(entry => !shouldOmitInLodash.has(entry[0])).concat(mock ? [["uniqueId", prefix => `${prefix !== null && prefix !== void 0 ? prefix : ""}42`]] : []));
61
61
 
62
62
  case "moment":
63
63
  return Object.assign((...args) => (0, _moment.default)(...args), Object.fromEntries(Object.entries(_moment.default).filter(entry => !shouldOmitInMoment.has(entry[0]))));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":["supply","attemptToVisitGlobals","providedGlobalVariables","globalVariables","undefined","variableName","Object","prototype","hasOwnProperty","call","variable","supplyIndividual","shouldOmitInLodash","Set","shouldOmitInMoment","allowedGlobalObjects","delegateMethods","fromEntries","entries","lodash","filter","entry","has","assign","args","moment","pipes","tagUrlFactory","window","target","methods","map","method","apply","ignoreSlashes","strings","partials","result","forEach","str","index","push","length","String","replace","p","encodeURIComponent","join"],"mappings":"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","sourcesContent":["import lodash from \"lodash\";\nimport moment from \"moment\";\nimport { SimpleFunction } from \"@next-core/brick-types\";\nimport { pipes } from \"@next-core/pipes\";\n\nexport function supply(\n attemptToVisitGlobals: Set<string>,\n providedGlobalVariables?: Record<string, unknown>\n): Record<string, unknown> {\n const globalVariables = {\n ...providedGlobalVariables,\n };\n // Allow limited browser builtin values.\n globalVariables[\"undefined\"] = undefined;\n for (const variableName of attemptToVisitGlobals) {\n if (!Object.prototype.hasOwnProperty.call(globalVariables, variableName)) {\n const variable = supplyIndividual(variableName);\n if (variable !== undefined) {\n globalVariables[variableName] = variable;\n }\n }\n }\n return globalVariables;\n}\n\nconst shouldOmitInLodash = new Set([\n // Omit all mutable methods from lodash.\n // But allow sequence methods like `_.chain`.\n \"fill\",\n \"pull\",\n \"pullAll\",\n \"pullAllBy\",\n \"pullAllWith\",\n \"pullAt\",\n \"remove\",\n \"reverse\",\n \"assign\",\n \"assignIn\",\n \"assignInWith\",\n \"assignWith\",\n \"defaults\",\n \"defaultsDeep\",\n \"merge\",\n \"mergeWith\",\n \"set\",\n \"setWith\",\n \"unset\",\n \"update\",\n \"updateWith\",\n /**\n * Ignore `Function` methods from lodash, too.\n * There are chances to invoke `Object.assign`, etc.\n *\n * E.g.:\n *\n * ```\n * _.wrap(_.method('constructor.assign',{b:2},{b:3}),(func,...a) => func(...a))({})\n * ```\n */\n \"after\",\n \"ary\",\n \"before\",\n \"bind\",\n \"bindKey\",\n \"curry\",\n \"curryRight\",\n \"debounce\",\n \"defer\",\n \"delay\",\n \"flip\",\n \"memoize\",\n \"negate\",\n \"once\",\n \"overArgs\",\n \"partial\",\n \"partialRight\",\n \"rearg\",\n \"rest\",\n \"spread\",\n \"throttle\",\n \"unary\",\n \"wrap\",\n]);\n\n// Omit all mutable methods from moment.\nconst shouldOmitInMoment = new Set([\n \"lang\",\n \"langData\",\n \"locale\",\n \"localeData\",\n \"defineLocale\",\n \"updateLocale\",\n \"updateOffset\",\n]);\n\nconst allowedGlobalObjects = new Set([\n \"Array\",\n \"Boolean\",\n \"Date\",\n \"Infinity\",\n \"JSON\",\n \"Math\",\n \"NaN\",\n \"Number\",\n \"String\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"Map\",\n \"Set\",\n \"URLSearchParams\",\n \"WeakMap\",\n \"WeakSet\",\n \"atob\",\n \"btoa\",\n]);\n\nfunction supplyIndividual(variableName: string): unknown {\n switch (variableName) {\n case \"Object\":\n // Do not allow mutable methods like `Object.assign`.\n return delegateMethods(Object, [\n \"entries\",\n \"fromEntries\",\n \"keys\",\n \"values\",\n ]);\n case \"_\":\n return Object.fromEntries(\n Object.entries(lodash).filter(\n (entry) => !shouldOmitInLodash.has(entry[0])\n )\n );\n case \"moment\":\n return Object.assign(\n (...args: Parameters<typeof moment>) => moment(...args),\n Object.fromEntries(\n Object.entries(moment).filter(\n (entry) => !shouldOmitInMoment.has(entry[0])\n )\n )\n );\n case \"PIPES\":\n return pipes;\n case \"TAG_URL\":\n return tagUrlFactory(true);\n case \"SAFE_TAG_URL\":\n return tagUrlFactory();\n default:\n if (allowedGlobalObjects.has(variableName)) {\n return window[variableName as keyof Window];\n }\n }\n}\n\nfunction delegateMethods(\n target: unknown,\n methods: string[]\n): Record<string, SimpleFunction> {\n return Object.fromEntries(\n methods.map((method) => [\n method,\n <T>(...args: T[]) =>\n (target as Record<typeof method, (...args: T[]) => unknown>)[\n method\n ].apply(target, args),\n ])\n );\n}\n\ntype FnTagUrl = (\n strings: TemplateStringsArray,\n ...partials: unknown[]\n) => string;\n\n/**\n * Pass `ignoreSlashes` as `true` to encode all tagged expressions\n * as URL components, except for `/` which maybe used in `APP.homepage`.\n *\n * Otherwise encode all tagged expressions as URL components.\n * This will encode `/` as `%2F`. So do not use it directly\n * with `APP.homepage` as in template expressions.\n *\n * @example\n *\n * ```js\n * TAG_URL`${APP.homepage}/list?q=${q}&redirect=${redirect}`\n * ```\n *\n * ```js\n * SAFE_TAG_URL`file/${path}?q=${q}`\n * // `path` will be fully transformed by `encodeURIComponent`.\n * ```\n *\n * ```js\n * // Wrap `APP.homepage` outside of `SAFE_TAG_URL`.\n * `${APP.homepage}/${SAFE_TAG_URL`file/${path}?q=${q}`}`\n * ```\n */\nfunction tagUrlFactory(ignoreSlashes?: boolean): FnTagUrl {\n return function (\n strings: TemplateStringsArray,\n ...partials: unknown[]\n ): string {\n const result: string[] = [];\n strings.forEach((str, index) => {\n result.push(str);\n if (index < partials.length) {\n result.push(\n ignoreSlashes\n ? String(partials[index]).replace(/[^/]+/g, (p) =>\n encodeURIComponent(p)\n )\n : encodeURIComponent(String(partials[index]))\n );\n }\n });\n return result.join(\"\");\n };\n}\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["supply","attemptToVisitGlobals","providedGlobalVariables","mock","globalVariables","undefined","variableName","Object","prototype","hasOwnProperty","call","variable","supplyIndividual","shouldOmitInLodash","Set","shouldOmitInMoment","allowedGlobalObjects","delegateMethods","fromEntries","entries","lodash","filter","entry","has","concat","prefix","assign","args","moment","pipes","tagUrlFactory","window","target","methods","map","method","apply","ignoreSlashes","strings","partials","result","forEach","str","index","push","length","String","replace","p","encodeURIComponent","join"],"sources":["../../src/index.ts"],"sourcesContent":["import lodash from \"lodash\";\nimport moment from \"moment\";\nimport { SimpleFunction } from \"@next-core/brick-types\";\nimport { pipes } from \"@next-core/pipes\";\n\nexport function supply(\n attemptToVisitGlobals: Set<string>,\n providedGlobalVariables?: Record<string, unknown>,\n mock?: boolean\n): Record<string, unknown> {\n const globalVariables = {\n ...providedGlobalVariables,\n };\n // Allow limited browser builtin values.\n globalVariables[\"undefined\"] = undefined;\n for (const variableName of attemptToVisitGlobals) {\n if (!Object.prototype.hasOwnProperty.call(globalVariables, variableName)) {\n const variable = supplyIndividual(variableName, mock);\n if (variable !== undefined) {\n globalVariables[variableName] = variable;\n }\n }\n }\n return globalVariables;\n}\n\nconst shouldOmitInLodash = new Set([\n // Omit all mutable methods from lodash.\n // But allow sequence methods like `_.chain`.\n \"fill\",\n \"pull\",\n \"pullAll\",\n \"pullAllBy\",\n \"pullAllWith\",\n \"pullAt\",\n \"remove\",\n \"reverse\",\n \"assign\",\n \"assignIn\",\n \"assignInWith\",\n \"assignWith\",\n \"defaults\",\n \"defaultsDeep\",\n \"merge\",\n \"mergeWith\",\n \"set\",\n \"setWith\",\n \"unset\",\n \"update\",\n \"updateWith\",\n /**\n * Ignore `Function` methods from lodash, too.\n * There are chances to invoke `Object.assign`, etc.\n *\n * E.g.:\n *\n * ```\n * _.wrap(_.method('constructor.assign',{b:2},{b:3}),(func,...a) => func(...a))({})\n * ```\n */\n \"after\",\n \"ary\",\n \"before\",\n \"bind\",\n \"bindKey\",\n \"curry\",\n \"curryRight\",\n \"debounce\",\n \"defer\",\n \"delay\",\n \"flip\",\n \"memoize\",\n \"negate\",\n \"once\",\n \"overArgs\",\n \"partial\",\n \"partialRight\",\n \"rearg\",\n \"rest\",\n \"spread\",\n \"throttle\",\n \"unary\",\n \"wrap\",\n]);\n\n// Omit all mutable methods from moment.\nconst shouldOmitInMoment = new Set([\n \"lang\",\n \"langData\",\n \"locale\",\n \"localeData\",\n \"defineLocale\",\n \"updateLocale\",\n \"updateOffset\",\n]);\n\nconst allowedGlobalObjects = new Set([\n \"Array\",\n \"Boolean\",\n \"Date\",\n \"Infinity\",\n \"JSON\",\n \"Math\",\n \"NaN\",\n \"Number\",\n \"String\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"Map\",\n \"Set\",\n \"URLSearchParams\",\n \"WeakMap\",\n \"WeakSet\",\n \"atob\",\n \"btoa\",\n]);\n\nfunction supplyIndividual(variableName: string, mock?: boolean): unknown {\n switch (variableName) {\n case \"Object\":\n // Do not allow mutable methods like `Object.assign`.\n return delegateMethods(Object, [\n \"entries\",\n \"fromEntries\",\n \"keys\",\n \"values\",\n ]);\n case \"_\":\n return Object.fromEntries(\n Object.entries(lodash)\n .filter((entry) => !shouldOmitInLodash.has(entry[0]))\n .concat(\n mock ? [[\"uniqueId\", (prefix?: string) => `${prefix ?? \"\"}42`]] : []\n )\n );\n case \"moment\":\n return Object.assign(\n (...args: Parameters<typeof moment>) => moment(...args),\n Object.fromEntries(\n Object.entries(moment).filter(\n (entry) => !shouldOmitInMoment.has(entry[0])\n )\n )\n );\n case \"PIPES\":\n return pipes;\n case \"TAG_URL\":\n return tagUrlFactory(true);\n case \"SAFE_TAG_URL\":\n return tagUrlFactory();\n default:\n if (allowedGlobalObjects.has(variableName)) {\n return window[variableName as keyof Window];\n }\n }\n}\n\nfunction delegateMethods(\n target: unknown,\n methods: string[]\n): Record<string, SimpleFunction> {\n return Object.fromEntries(\n methods.map((method) => [\n method,\n <T>(...args: T[]) =>\n (target as Record<typeof method, (...args: T[]) => unknown>)[\n method\n ].apply(target, args),\n ])\n );\n}\n\ntype FnTagUrl = (\n strings: TemplateStringsArray,\n ...partials: unknown[]\n) => string;\n\n/**\n * Pass `ignoreSlashes` as `true` to encode all tagged expressions\n * as URL components, except for `/` which maybe used in `APP.homepage`.\n *\n * Otherwise encode all tagged expressions as URL components.\n * This will encode `/` as `%2F`. So do not use it directly\n * with `APP.homepage` as in template expressions.\n *\n * @example\n *\n * ```js\n * TAG_URL`${APP.homepage}/list?q=${q}&redirect=${redirect}`\n * ```\n *\n * ```js\n * SAFE_TAG_URL`file/${path}?q=${q}`\n * // `path` will be fully transformed by `encodeURIComponent`.\n * ```\n *\n * ```js\n * // Wrap `APP.homepage` outside of `SAFE_TAG_URL`.\n * `${APP.homepage}/${SAFE_TAG_URL`file/${path}?q=${q}`}`\n * ```\n */\nfunction tagUrlFactory(ignoreSlashes?: boolean): FnTagUrl {\n return function (\n strings: TemplateStringsArray,\n ...partials: unknown[]\n ): string {\n const result: string[] = [];\n strings.forEach((str, index) => {\n result.push(str);\n if (index < partials.length) {\n result.push(\n ignoreSlashes\n ? String(partials[index]).replace(/[^/]+/g, (p) =>\n encodeURIComponent(p)\n )\n : encodeURIComponent(String(partials[index]))\n );\n }\n });\n return result.join(\"\");\n };\n}\n"],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -2,7 +2,7 @@ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
2
  import lodash from "lodash";
3
3
  import moment from "moment";
4
4
  import { pipes } from "@next-core/pipes";
5
- export function supply(attemptToVisitGlobals, providedGlobalVariables) {
5
+ export function supply(attemptToVisitGlobals, providedGlobalVariables, mock) {
6
6
  var globalVariables = _objectSpread({}, providedGlobalVariables); // Allow limited browser builtin values.
7
7
 
8
8
 
@@ -10,7 +10,7 @@ export function supply(attemptToVisitGlobals, providedGlobalVariables) {
10
10
 
11
11
  for (var variableName of attemptToVisitGlobals) {
12
12
  if (!Object.prototype.hasOwnProperty.call(globalVariables, variableName)) {
13
- var variable = supplyIndividual(variableName);
13
+ var variable = supplyIndividual(variableName, mock);
14
14
 
15
15
  if (variable !== undefined) {
16
16
  globalVariables[variableName] = variable;
@@ -38,14 +38,14 @@ var shouldOmitInLodash = new Set([// Omit all mutable methods from lodash.
38
38
  var shouldOmitInMoment = new Set(["lang", "langData", "locale", "localeData", "defineLocale", "updateLocale", "updateOffset"]);
39
39
  var allowedGlobalObjects = new Set(["Array", "Boolean", "Date", "Infinity", "JSON", "Math", "NaN", "Number", "String", "decodeURI", "decodeURIComponent", "encodeURI", "encodeURIComponent", "isFinite", "isNaN", "parseFloat", "parseInt", "Map", "Set", "URLSearchParams", "WeakMap", "WeakSet", "atob", "btoa"]);
40
40
 
41
- function supplyIndividual(variableName) {
41
+ function supplyIndividual(variableName, mock) {
42
42
  switch (variableName) {
43
43
  case "Object":
44
44
  // Do not allow mutable methods like `Object.assign`.
45
45
  return delegateMethods(Object, ["entries", "fromEntries", "keys", "values"]);
46
46
 
47
47
  case "_":
48
- return Object.fromEntries(Object.entries(lodash).filter(entry => !shouldOmitInLodash.has(entry[0])));
48
+ return Object.fromEntries(Object.entries(lodash).filter(entry => !shouldOmitInLodash.has(entry[0])).concat(mock ? [["uniqueId", prefix => "".concat(prefix !== null && prefix !== void 0 ? prefix : "", "42")]] : []));
49
49
 
50
50
  case "moment":
51
51
  return Object.assign(function () {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":["lodash","moment","pipes","supply","attemptToVisitGlobals","providedGlobalVariables","globalVariables","undefined","variableName","Object","prototype","hasOwnProperty","call","variable","supplyIndividual","shouldOmitInLodash","Set","shouldOmitInMoment","allowedGlobalObjects","delegateMethods","fromEntries","entries","filter","entry","has","assign","tagUrlFactory","window","target","methods","map","method","args","apply","ignoreSlashes","strings","partials","result","forEach","str","index","push","length","String","replace","p","encodeURIComponent","join"],"mappings":"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","sourcesContent":["import lodash from \"lodash\";\nimport moment from \"moment\";\nimport { SimpleFunction } from \"@next-core/brick-types\";\nimport { pipes } from \"@next-core/pipes\";\n\nexport function supply(\n attemptToVisitGlobals: Set<string>,\n providedGlobalVariables?: Record<string, unknown>\n): Record<string, unknown> {\n const globalVariables = {\n ...providedGlobalVariables,\n };\n // Allow limited browser builtin values.\n globalVariables[\"undefined\"] = undefined;\n for (const variableName of attemptToVisitGlobals) {\n if (!Object.prototype.hasOwnProperty.call(globalVariables, variableName)) {\n const variable = supplyIndividual(variableName);\n if (variable !== undefined) {\n globalVariables[variableName] = variable;\n }\n }\n }\n return globalVariables;\n}\n\nconst shouldOmitInLodash = new Set([\n // Omit all mutable methods from lodash.\n // But allow sequence methods like `_.chain`.\n \"fill\",\n \"pull\",\n \"pullAll\",\n \"pullAllBy\",\n \"pullAllWith\",\n \"pullAt\",\n \"remove\",\n \"reverse\",\n \"assign\",\n \"assignIn\",\n \"assignInWith\",\n \"assignWith\",\n \"defaults\",\n \"defaultsDeep\",\n \"merge\",\n \"mergeWith\",\n \"set\",\n \"setWith\",\n \"unset\",\n \"update\",\n \"updateWith\",\n /**\n * Ignore `Function` methods from lodash, too.\n * There are chances to invoke `Object.assign`, etc.\n *\n * E.g.:\n *\n * ```\n * _.wrap(_.method('constructor.assign',{b:2},{b:3}),(func,...a) => func(...a))({})\n * ```\n */\n \"after\",\n \"ary\",\n \"before\",\n \"bind\",\n \"bindKey\",\n \"curry\",\n \"curryRight\",\n \"debounce\",\n \"defer\",\n \"delay\",\n \"flip\",\n \"memoize\",\n \"negate\",\n \"once\",\n \"overArgs\",\n \"partial\",\n \"partialRight\",\n \"rearg\",\n \"rest\",\n \"spread\",\n \"throttle\",\n \"unary\",\n \"wrap\",\n]);\n\n// Omit all mutable methods from moment.\nconst shouldOmitInMoment = new Set([\n \"lang\",\n \"langData\",\n \"locale\",\n \"localeData\",\n \"defineLocale\",\n \"updateLocale\",\n \"updateOffset\",\n]);\n\nconst allowedGlobalObjects = new Set([\n \"Array\",\n \"Boolean\",\n \"Date\",\n \"Infinity\",\n \"JSON\",\n \"Math\",\n \"NaN\",\n \"Number\",\n \"String\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"Map\",\n \"Set\",\n \"URLSearchParams\",\n \"WeakMap\",\n \"WeakSet\",\n \"atob\",\n \"btoa\",\n]);\n\nfunction supplyIndividual(variableName: string): unknown {\n switch (variableName) {\n case \"Object\":\n // Do not allow mutable methods like `Object.assign`.\n return delegateMethods(Object, [\n \"entries\",\n \"fromEntries\",\n \"keys\",\n \"values\",\n ]);\n case \"_\":\n return Object.fromEntries(\n Object.entries(lodash).filter(\n (entry) => !shouldOmitInLodash.has(entry[0])\n )\n );\n case \"moment\":\n return Object.assign(\n (...args: Parameters<typeof moment>) => moment(...args),\n Object.fromEntries(\n Object.entries(moment).filter(\n (entry) => !shouldOmitInMoment.has(entry[0])\n )\n )\n );\n case \"PIPES\":\n return pipes;\n case \"TAG_URL\":\n return tagUrlFactory(true);\n case \"SAFE_TAG_URL\":\n return tagUrlFactory();\n default:\n if (allowedGlobalObjects.has(variableName)) {\n return window[variableName as keyof Window];\n }\n }\n}\n\nfunction delegateMethods(\n target: unknown,\n methods: string[]\n): Record<string, SimpleFunction> {\n return Object.fromEntries(\n methods.map((method) => [\n method,\n <T>(...args: T[]) =>\n (target as Record<typeof method, (...args: T[]) => unknown>)[\n method\n ].apply(target, args),\n ])\n );\n}\n\ntype FnTagUrl = (\n strings: TemplateStringsArray,\n ...partials: unknown[]\n) => string;\n\n/**\n * Pass `ignoreSlashes` as `true` to encode all tagged expressions\n * as URL components, except for `/` which maybe used in `APP.homepage`.\n *\n * Otherwise encode all tagged expressions as URL components.\n * This will encode `/` as `%2F`. So do not use it directly\n * with `APP.homepage` as in template expressions.\n *\n * @example\n *\n * ```js\n * TAG_URL`${APP.homepage}/list?q=${q}&redirect=${redirect}`\n * ```\n *\n * ```js\n * SAFE_TAG_URL`file/${path}?q=${q}`\n * // `path` will be fully transformed by `encodeURIComponent`.\n * ```\n *\n * ```js\n * // Wrap `APP.homepage` outside of `SAFE_TAG_URL`.\n * `${APP.homepage}/${SAFE_TAG_URL`file/${path}?q=${q}`}`\n * ```\n */\nfunction tagUrlFactory(ignoreSlashes?: boolean): FnTagUrl {\n return function (\n strings: TemplateStringsArray,\n ...partials: unknown[]\n ): string {\n const result: string[] = [];\n strings.forEach((str, index) => {\n result.push(str);\n if (index < partials.length) {\n result.push(\n ignoreSlashes\n ? String(partials[index]).replace(/[^/]+/g, (p) =>\n encodeURIComponent(p)\n )\n : encodeURIComponent(String(partials[index]))\n );\n }\n });\n return result.join(\"\");\n };\n}\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["lodash","moment","pipes","supply","attemptToVisitGlobals","providedGlobalVariables","mock","globalVariables","undefined","variableName","Object","prototype","hasOwnProperty","call","variable","supplyIndividual","shouldOmitInLodash","Set","shouldOmitInMoment","allowedGlobalObjects","delegateMethods","fromEntries","entries","filter","entry","has","concat","prefix","assign","tagUrlFactory","window","target","methods","map","method","args","apply","ignoreSlashes","strings","partials","result","forEach","str","index","push","length","String","replace","p","encodeURIComponent","join"],"sources":["../../src/index.ts"],"sourcesContent":["import lodash from \"lodash\";\nimport moment from \"moment\";\nimport { SimpleFunction } from \"@next-core/brick-types\";\nimport { pipes } from \"@next-core/pipes\";\n\nexport function supply(\n attemptToVisitGlobals: Set<string>,\n providedGlobalVariables?: Record<string, unknown>,\n mock?: boolean\n): Record<string, unknown> {\n const globalVariables = {\n ...providedGlobalVariables,\n };\n // Allow limited browser builtin values.\n globalVariables[\"undefined\"] = undefined;\n for (const variableName of attemptToVisitGlobals) {\n if (!Object.prototype.hasOwnProperty.call(globalVariables, variableName)) {\n const variable = supplyIndividual(variableName, mock);\n if (variable !== undefined) {\n globalVariables[variableName] = variable;\n }\n }\n }\n return globalVariables;\n}\n\nconst shouldOmitInLodash = new Set([\n // Omit all mutable methods from lodash.\n // But allow sequence methods like `_.chain`.\n \"fill\",\n \"pull\",\n \"pullAll\",\n \"pullAllBy\",\n \"pullAllWith\",\n \"pullAt\",\n \"remove\",\n \"reverse\",\n \"assign\",\n \"assignIn\",\n \"assignInWith\",\n \"assignWith\",\n \"defaults\",\n \"defaultsDeep\",\n \"merge\",\n \"mergeWith\",\n \"set\",\n \"setWith\",\n \"unset\",\n \"update\",\n \"updateWith\",\n /**\n * Ignore `Function` methods from lodash, too.\n * There are chances to invoke `Object.assign`, etc.\n *\n * E.g.:\n *\n * ```\n * _.wrap(_.method('constructor.assign',{b:2},{b:3}),(func,...a) => func(...a))({})\n * ```\n */\n \"after\",\n \"ary\",\n \"before\",\n \"bind\",\n \"bindKey\",\n \"curry\",\n \"curryRight\",\n \"debounce\",\n \"defer\",\n \"delay\",\n \"flip\",\n \"memoize\",\n \"negate\",\n \"once\",\n \"overArgs\",\n \"partial\",\n \"partialRight\",\n \"rearg\",\n \"rest\",\n \"spread\",\n \"throttle\",\n \"unary\",\n \"wrap\",\n]);\n\n// Omit all mutable methods from moment.\nconst shouldOmitInMoment = new Set([\n \"lang\",\n \"langData\",\n \"locale\",\n \"localeData\",\n \"defineLocale\",\n \"updateLocale\",\n \"updateOffset\",\n]);\n\nconst allowedGlobalObjects = new Set([\n \"Array\",\n \"Boolean\",\n \"Date\",\n \"Infinity\",\n \"JSON\",\n \"Math\",\n \"NaN\",\n \"Number\",\n \"String\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"Map\",\n \"Set\",\n \"URLSearchParams\",\n \"WeakMap\",\n \"WeakSet\",\n \"atob\",\n \"btoa\",\n]);\n\nfunction supplyIndividual(variableName: string, mock?: boolean): unknown {\n switch (variableName) {\n case \"Object\":\n // Do not allow mutable methods like `Object.assign`.\n return delegateMethods(Object, [\n \"entries\",\n \"fromEntries\",\n \"keys\",\n \"values\",\n ]);\n case \"_\":\n return Object.fromEntries(\n Object.entries(lodash)\n .filter((entry) => !shouldOmitInLodash.has(entry[0]))\n .concat(\n mock ? [[\"uniqueId\", (prefix?: string) => `${prefix ?? \"\"}42`]] : []\n )\n );\n case \"moment\":\n return Object.assign(\n (...args: Parameters<typeof moment>) => moment(...args),\n Object.fromEntries(\n Object.entries(moment).filter(\n (entry) => !shouldOmitInMoment.has(entry[0])\n )\n )\n );\n case \"PIPES\":\n return pipes;\n case \"TAG_URL\":\n return tagUrlFactory(true);\n case \"SAFE_TAG_URL\":\n return tagUrlFactory();\n default:\n if (allowedGlobalObjects.has(variableName)) {\n return window[variableName as keyof Window];\n }\n }\n}\n\nfunction delegateMethods(\n target: unknown,\n methods: string[]\n): Record<string, SimpleFunction> {\n return Object.fromEntries(\n methods.map((method) => [\n method,\n <T>(...args: T[]) =>\n (target as Record<typeof method, (...args: T[]) => unknown>)[\n method\n ].apply(target, args),\n ])\n );\n}\n\ntype FnTagUrl = (\n strings: TemplateStringsArray,\n ...partials: unknown[]\n) => string;\n\n/**\n * Pass `ignoreSlashes` as `true` to encode all tagged expressions\n * as URL components, except for `/` which maybe used in `APP.homepage`.\n *\n * Otherwise encode all tagged expressions as URL components.\n * This will encode `/` as `%2F`. So do not use it directly\n * with `APP.homepage` as in template expressions.\n *\n * @example\n *\n * ```js\n * TAG_URL`${APP.homepage}/list?q=${q}&redirect=${redirect}`\n * ```\n *\n * ```js\n * SAFE_TAG_URL`file/${path}?q=${q}`\n * // `path` will be fully transformed by `encodeURIComponent`.\n * ```\n *\n * ```js\n * // Wrap `APP.homepage` outside of `SAFE_TAG_URL`.\n * `${APP.homepage}/${SAFE_TAG_URL`file/${path}?q=${q}`}`\n * ```\n */\nfunction tagUrlFactory(ignoreSlashes?: boolean): FnTagUrl {\n return function (\n strings: TemplateStringsArray,\n ...partials: unknown[]\n ): string {\n const result: string[] = [];\n strings.forEach((str, index) => {\n result.push(str);\n if (index < partials.length) {\n result.push(\n ignoreSlashes\n ? String(partials[index]).replace(/[^/]+/g, (p) =>\n encodeURIComponent(p)\n )\n : encodeURIComponent(String(partials[index]))\n );\n }\n });\n return result.join(\"\");\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- export declare function supply(attemptToVisitGlobals: Set<string>, providedGlobalVariables?: Record<string, unknown>): Record<string, unknown>;
1
+ export declare function supply(attemptToVisitGlobals: Set<string>, providedGlobalVariables?: Record<string, unknown>, mock?: boolean): Record<string, unknown>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-core/supply",
3
- "version": "1.0.36",
3
+ "version": "1.0.39",
4
4
  "description": "Supply for expressions and storyboard functions",
5
5
  "homepage": "https://github.com/easyops-cn/next-core/tree/master/packages/supply",
6
6
  "license": "GPL-3.0",
@@ -29,10 +29,10 @@
29
29
  },
30
30
  "sideEffects": false,
31
31
  "dependencies": {
32
- "@next-core/brick-types": "^2.61.4"
32
+ "@next-core/brick-types": "^2.61.6"
33
33
  },
34
34
  "devDependencies": {
35
- "@next-core/pipes": "^1.0.2",
35
+ "@next-core/pipes": "^1.0.3",
36
36
  "js-yaml": "^3.14.1",
37
37
  "lodash": "^4.17.21",
38
38
  "moment": "^2.29.3"
@@ -43,5 +43,5 @@
43
43
  "lodash": "*",
44
44
  "moment": "*"
45
45
  },
46
- "gitHead": "b1d187f747efd7228e7b003340a434e611f8ccb5"
46
+ "gitHead": "3b6b938a49e75b32a5dfd7da79dacd60342800d6"
47
47
  }