@cdklabs/cdk-ssm-documents 0.0.70 → 0.0.71

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.
Files changed (790) hide show
  1. package/.jsii +25 -25
  2. package/lib/construct/synth-utils.js +1 -1
  3. package/lib/document/automation-document.js +1 -1
  4. package/lib/document/command-document.js +1 -1
  5. package/lib/document/document-builder.js +2 -2
  6. package/lib/document/ssm-document.js +1 -1
  7. package/lib/domain/aws-service.js +1 -1
  8. package/lib/domain/choice.js +1 -1
  9. package/lib/domain/data-type.js +1 -1
  10. package/lib/domain/enum/install-action.js +2 -2
  11. package/lib/domain/enum/install-uninstall-repair.js +2 -2
  12. package/lib/domain/enum/installation-type.js +2 -2
  13. package/lib/domain/enum/package-name.js +2 -2
  14. package/lib/domain/input.js +1 -1
  15. package/lib/domain/operation.js +1 -1
  16. package/lib/domain/platform.js +1 -1
  17. package/lib/domain/precondition.js +1 -1
  18. package/lib/incident-response/incident-response.js +3 -3
  19. package/lib/interface/approve-hook.js +2 -2
  20. package/lib/interface/auth-method.js +3 -3
  21. package/lib/interface/aws-invoker.js +2 -2
  22. package/lib/interface/downloadable-content.js +8 -8
  23. package/lib/interface/environment.js +3 -3
  24. package/lib/interface/execute-automation-hook/api-execute-automation-hook.js +1 -1
  25. package/lib/interface/observer.js +1 -1
  26. package/lib/interface/on-failure.js +6 -6
  27. package/lib/interface/pause-hook.js +2 -2
  28. package/lib/interface/run-command-hook/api-run-command-hook.js +1 -1
  29. package/lib/interface/run-document-location.js +2 -2
  30. package/lib/interface/sleep-hook.js +2 -2
  31. package/lib/interface/step-ref.js +1 -1
  32. package/lib/interface/variables/boolean-variable.js +2 -2
  33. package/lib/interface/variables/map-list-variable.js +2 -2
  34. package/lib/interface/variables/number-variable.js +2 -2
  35. package/lib/interface/variables/secure-string-variable.js +4 -4
  36. package/lib/interface/variables/string-list-variable.js +2 -2
  37. package/lib/interface/variables/string-map-variable.js +2 -2
  38. package/lib/interface/variables/string-variable.js +4 -4
  39. package/lib/interface/variables/variable.js +2 -2
  40. package/lib/interface/webhook.js +1 -1
  41. package/lib/parent-steps/automation/approve-step.js +1 -1
  42. package/lib/parent-steps/automation/assert-aws-resource-step.js +1 -1
  43. package/lib/parent-steps/automation/aws-api-step.js +1 -1
  44. package/lib/parent-steps/automation/branch-step.js +1 -1
  45. package/lib/parent-steps/automation/change-instance-state-step.js +3 -3
  46. package/lib/parent-steps/automation/copy-image-step.js +1 -1
  47. package/lib/parent-steps/automation/create-image-step.js +1 -1
  48. package/lib/parent-steps/automation/create-stack-step.js +3 -3
  49. package/lib/parent-steps/automation/create-tags-step.js +3 -3
  50. package/lib/parent-steps/automation/delete-image-step.js +1 -1
  51. package/lib/parent-steps/automation/delete-stack-step.js +1 -1
  52. package/lib/parent-steps/automation/execute-automation-step.js +1 -1
  53. package/lib/parent-steps/automation/execute-script-step.js +5 -5
  54. package/lib/parent-steps/automation/execute-state-machine-step.js +1 -1
  55. package/lib/parent-steps/automation/invoke-lambda-function-step.js +1 -1
  56. package/lib/parent-steps/automation/invoke-webhook-step.js +1 -1
  57. package/lib/parent-steps/automation/pause-step.js +1 -1
  58. package/lib/parent-steps/automation/run-command-step.js +3 -3
  59. package/lib/parent-steps/automation/run-instance-step.js +1 -1
  60. package/lib/parent-steps/automation/sleep-step.js +1 -1
  61. package/lib/parent-steps/automation/update-variable.js +1 -1
  62. package/lib/parent-steps/automation/wait-for-resource-step.js +1 -1
  63. package/lib/parent-steps/automation-step.js +1 -1
  64. package/lib/parent-steps/command/applications-step.js +1 -1
  65. package/lib/parent-steps/command/configure-docker-step.js +1 -1
  66. package/lib/parent-steps/command/configure-package-step.js +1 -1
  67. package/lib/parent-steps/command/domain-join-step.js +1 -1
  68. package/lib/parent-steps/command/download-content-step.js +1 -1
  69. package/lib/parent-steps/command/ps-module-step.js +1 -1
  70. package/lib/parent-steps/command/run-docker-action-step.js +1 -1
  71. package/lib/parent-steps/command/run-document-step.js +1 -1
  72. package/lib/parent-steps/command/run-powershell-script-step.js +1 -1
  73. package/lib/parent-steps/command/run-shell-script-step.js +1 -1
  74. package/lib/parent-steps/command/software-inventory-step.js +1 -1
  75. package/lib/parent-steps/command/update-agent-step.js +1 -1
  76. package/lib/parent-steps/command/update-ssm-agent-step.js +1 -1
  77. package/lib/parent-steps/command-step.js +1 -1
  78. package/lib/parent-steps/step.js +1 -1
  79. package/lib/patterns/automation/composite-step.js +2 -2
  80. package/lib/patterns/automation/reboot-instance-and-wait.js +1 -1
  81. package/lib/patterns/automation/string-step.js +1 -1
  82. package/lib/patterns/document/string-document.js +1 -1
  83. package/lib/patterns/document/timed-document.js +1 -1
  84. package/lib/samples/hello-world.js +1 -1
  85. package/lib/simulation/automation/approve-simulation.js +1 -1
  86. package/lib/simulation/automation/assert-aws-resource-simulation.js +4 -5
  87. package/lib/simulation/automation/automation-simulation-base.js +1 -1
  88. package/lib/simulation/automation/aws-api-simulation.js +1 -1
  89. package/lib/simulation/automation/branch-simulation.js +1 -1
  90. package/lib/simulation/automation/change-instance-state-simulation.js +1 -1
  91. package/lib/simulation/automation/copy-image-simulation.js +1 -1
  92. package/lib/simulation/automation/create-image-simulation.js +1 -1
  93. package/lib/simulation/automation/create-stack-simulation.js +1 -1
  94. package/lib/simulation/automation/create-tags-simulation.js +1 -1
  95. package/lib/simulation/automation/delete-image-simulation.js +1 -1
  96. package/lib/simulation/automation/delete-stack-simulation.js +1 -1
  97. package/lib/simulation/automation/execute-script-simulation.js +1 -1
  98. package/lib/simulation/automation/execute-state-machine-simulation.js +1 -1
  99. package/lib/simulation/automation/invoke-lambda-function-simulation.js +1 -1
  100. package/lib/simulation/automation/invoke-webhook-simulation.js +1 -1
  101. package/lib/simulation/automation/pause-simulation.js +1 -1
  102. package/lib/simulation/automation/run-command-simulation.js +1 -1
  103. package/lib/simulation/automation/run-instance-simulation.js +1 -1
  104. package/lib/simulation/automation/sleep-simulation.js +1 -1
  105. package/lib/simulation/automation/update-variable-simulation.js +1 -1
  106. package/lib/simulation/automation/wait-for-resource-simulation.js +1 -1
  107. package/lib/simulation/automation-step-simulation.js +4 -5
  108. package/lib/simulation/command/command-simulation-base.js +1 -1
  109. package/lib/simulation/command/ps-module-simulation.js +1 -1
  110. package/lib/simulation/command/run-powershell-script-simulation.js +1 -1
  111. package/lib/simulation/command/run-shell-script-simulation.js +1 -1
  112. package/lib/simulation/command-step-simulation.js +1 -1
  113. package/lib/simulation/document/automation-simulation.js +1 -1
  114. package/lib/simulation/document/command-simulation.js +1 -1
  115. package/lib/simulation/simulation.js +1 -1
  116. package/node_modules/@jsep-plugin/assignment/LICENSE +20 -0
  117. package/node_modules/@jsep-plugin/assignment/README.md +37 -0
  118. package/node_modules/@jsep-plugin/assignment/dist/cjs/index.cjs.js +95 -0
  119. package/node_modules/@jsep-plugin/assignment/dist/cjs/index.cjs.js.map +1 -0
  120. package/node_modules/@jsep-plugin/assignment/dist/cjs/index.cjs.min.js +2 -0
  121. package/node_modules/@jsep-plugin/assignment/dist/cjs/index.cjs.min.js.map +1 -0
  122. package/node_modules/@jsep-plugin/assignment/dist/cjs/package.json +3 -0
  123. package/node_modules/@jsep-plugin/assignment/dist/iife/index.iife.js +98 -0
  124. package/node_modules/@jsep-plugin/assignment/dist/iife/index.iife.js.map +1 -0
  125. package/node_modules/@jsep-plugin/assignment/dist/iife/index.iife.min.js +2 -0
  126. package/node_modules/@jsep-plugin/assignment/dist/iife/index.iife.min.js.map +1 -0
  127. package/node_modules/@jsep-plugin/assignment/dist/index.js +92 -0
  128. package/node_modules/@jsep-plugin/assignment/dist/index.min.js +2 -0
  129. package/node_modules/@jsep-plugin/assignment/dist/index.min.js.map +1 -0
  130. package/node_modules/@jsep-plugin/assignment/package.json +39 -0
  131. package/node_modules/@jsep-plugin/assignment/types/tsd.d.ts +39 -0
  132. package/node_modules/@jsep-plugin/regex/LICENSE +20 -0
  133. package/node_modules/@jsep-plugin/regex/README.md +36 -0
  134. package/node_modules/@jsep-plugin/regex/dist/cjs/index.cjs.js +66 -0
  135. package/node_modules/@jsep-plugin/regex/dist/cjs/index.cjs.js.map +1 -0
  136. package/node_modules/@jsep-plugin/regex/dist/cjs/index.cjs.min.js +2 -0
  137. package/node_modules/@jsep-plugin/regex/dist/cjs/index.cjs.min.js.map +1 -0
  138. package/node_modules/@jsep-plugin/regex/dist/cjs/package.json +3 -0
  139. package/node_modules/@jsep-plugin/regex/dist/iife/index.iife.js +69 -0
  140. package/node_modules/@jsep-plugin/regex/dist/iife/index.iife.js.map +1 -0
  141. package/node_modules/@jsep-plugin/regex/dist/iife/index.iife.min.js +2 -0
  142. package/node_modules/@jsep-plugin/regex/dist/iife/index.iife.min.js.map +1 -0
  143. package/node_modules/@jsep-plugin/regex/dist/index.js +63 -0
  144. package/node_modules/@jsep-plugin/regex/dist/index.min.js +2 -0
  145. package/node_modules/@jsep-plugin/regex/dist/index.min.js.map +1 -0
  146. package/node_modules/@jsep-plugin/regex/package.json +39 -0
  147. package/node_modules/@jsep-plugin/regex/types/tsd.d.ts +7 -0
  148. package/node_modules/jsep/LICENSE +20 -0
  149. package/node_modules/jsep/README.md +208 -0
  150. package/node_modules/jsep/dist/cjs/jsep.cjs.js +1129 -0
  151. package/node_modules/jsep/dist/cjs/jsep.cjs.js.map +1 -0
  152. package/node_modules/jsep/dist/cjs/jsep.cjs.min.js +2 -0
  153. package/node_modules/jsep/dist/cjs/jsep.cjs.min.js.map +1 -0
  154. package/node_modules/jsep/dist/cjs/package.json +3 -0
  155. package/node_modules/jsep/dist/iife/jsep.iife.js +1132 -0
  156. package/node_modules/jsep/dist/iife/jsep.iife.js.map +1 -0
  157. package/node_modules/jsep/dist/iife/jsep.iife.min.js +2 -0
  158. package/node_modules/jsep/dist/iife/jsep.iife.min.js.map +1 -0
  159. package/node_modules/jsep/dist/jsep.js +1126 -0
  160. package/node_modules/jsep/dist/jsep.min.js +2 -0
  161. package/node_modules/jsep/dist/jsep.min.js.map +1 -0
  162. package/node_modules/jsep/package.json +153 -0
  163. package/node_modules/jsep/typings/tsd.d.ts +180 -0
  164. package/node_modules/jsonpath-plus/.claude/settings.local.json +9 -0
  165. package/node_modules/jsonpath-plus/CHANGES.md +453 -0
  166. package/node_modules/jsonpath-plus/LICENSE +22 -0
  167. package/node_modules/jsonpath-plus/README.md +412 -0
  168. package/node_modules/jsonpath-plus/SECURITY.md +38 -0
  169. package/node_modules/jsonpath-plus/bin/jsonpath-cli.js +36 -0
  170. package/node_modules/jsonpath-plus/dist/index-browser-esm.js +2164 -0
  171. package/node_modules/jsonpath-plus/dist/index-browser-esm.min.js +2 -0
  172. package/node_modules/jsonpath-plus/dist/index-browser-esm.min.js.map +1 -0
  173. package/node_modules/jsonpath-plus/dist/index-browser-umd.cjs +2172 -0
  174. package/node_modules/jsonpath-plus/dist/index-browser-umd.min.cjs +2 -0
  175. package/node_modules/jsonpath-plus/dist/index-browser-umd.min.cjs.map +1 -0
  176. package/node_modules/jsonpath-plus/dist/index-node-cjs.cjs +2076 -0
  177. package/node_modules/jsonpath-plus/dist/index-node-esm.js +2074 -0
  178. package/node_modules/jsonpath-plus/package.json +141 -0
  179. package/node_modules/jsonpath-plus/pnpm-workspace.yaml +2 -0
  180. package/node_modules/jsonpath-plus/src/Safe-Script.js +208 -0
  181. package/node_modules/jsonpath-plus/src/jsonpath-browser.js +102 -0
  182. package/node_modules/jsonpath-plus/src/jsonpath-node.js +8 -0
  183. package/node_modules/jsonpath-plus/src/jsonpath.d.ts +226 -0
  184. package/node_modules/jsonpath-plus/src/jsonpath.js +784 -0
  185. package/package.json +3 -3
  186. package/node_modules/escodegen/LICENSE.BSD +0 -21
  187. package/node_modules/escodegen/README.md +0 -84
  188. package/node_modules/escodegen/bin/escodegen.js +0 -77
  189. package/node_modules/escodegen/bin/esgenerate.js +0 -64
  190. package/node_modules/escodegen/escodegen.js +0 -2667
  191. package/node_modules/escodegen/package.json +0 -63
  192. package/node_modules/esprima/LICENSE.BSD +0 -21
  193. package/node_modules/esprima/README.md +0 -46
  194. package/node_modules/esprima/bin/esparse.js +0 -139
  195. package/node_modules/esprima/bin/esvalidate.js +0 -236
  196. package/node_modules/esprima/dist/esprima.js +0 -6709
  197. package/node_modules/esprima/package.json +0 -112
  198. package/node_modules/estraverse/.jshintrc +0 -16
  199. package/node_modules/estraverse/LICENSE.BSD +0 -19
  200. package/node_modules/estraverse/README.md +0 -153
  201. package/node_modules/estraverse/estraverse.js +0 -805
  202. package/node_modules/estraverse/gulpfile.js +0 -70
  203. package/node_modules/estraverse/package.json +0 -40
  204. package/node_modules/esutils/LICENSE.BSD +0 -19
  205. package/node_modules/esutils/README.md +0 -174
  206. package/node_modules/esutils/lib/ast.js +0 -144
  207. package/node_modules/esutils/lib/code.js +0 -135
  208. package/node_modules/esutils/lib/keyword.js +0 -165
  209. package/node_modules/esutils/lib/utils.js +0 -33
  210. package/node_modules/esutils/package.json +0 -44
  211. package/node_modules/jsonpath/.jscsrc +0 -60
  212. package/node_modules/jsonpath/.jshintrc +0 -9
  213. package/node_modules/jsonpath/.travis.yml +0 -3
  214. package/node_modules/jsonpath/Dockerfile +0 -1
  215. package/node_modules/jsonpath/Gruntfile.js +0 -83
  216. package/node_modules/jsonpath/LICENSE +0 -7
  217. package/node_modules/jsonpath/README.md +0 -216
  218. package/node_modules/jsonpath/bin/generate_parser.js +0 -8
  219. package/node_modules/jsonpath/fig.yml +0 -5
  220. package/node_modules/jsonpath/generated/parser.js +0 -721
  221. package/node_modules/jsonpath/include/action.js +0 -4
  222. package/node_modules/jsonpath/include/module.js +0 -34
  223. package/node_modules/jsonpath/index.js +0 -1
  224. package/node_modules/jsonpath/jsonpath.js +0 -7093
  225. package/node_modules/jsonpath/jsonpath.min.js +0 -4
  226. package/node_modules/jsonpath/lib/aesprim.js +0 -18
  227. package/node_modules/jsonpath/lib/dict.js +0 -6
  228. package/node_modules/jsonpath/lib/grammar.js +0 -106
  229. package/node_modules/jsonpath/lib/handlers.js +0 -409
  230. package/node_modules/jsonpath/lib/index.js +0 -304
  231. package/node_modules/jsonpath/lib/parser.js +0 -21
  232. package/node_modules/jsonpath/lib/slice.js +0 -41
  233. package/node_modules/jsonpath/node_modules/esprima/LICENSE.BSD +0 -19
  234. package/node_modules/jsonpath/node_modules/esprima/README.md +0 -24
  235. package/node_modules/jsonpath/node_modules/esprima/bin/esparse.js +0 -127
  236. package/node_modules/jsonpath/node_modules/esprima/bin/esvalidate.js +0 -199
  237. package/node_modules/jsonpath/node_modules/esprima/esprima.js +0 -3772
  238. package/node_modules/jsonpath/node_modules/esprima/package.json +0 -83
  239. package/node_modules/jsonpath/node_modules/esprima/test/compat.js +0 -241
  240. package/node_modules/jsonpath/node_modules/esprima/test/reflect.js +0 -422
  241. package/node_modules/jsonpath/node_modules/esprima/test/run.js +0 -67
  242. package/node_modules/jsonpath/node_modules/esprima/test/runner.js +0 -495
  243. package/node_modules/jsonpath/node_modules/esprima/test/test.js +0 -25593
  244. package/node_modules/jsonpath/package.json +0 -45
  245. package/node_modules/jsonpath/test/data/store.json +0 -31
  246. package/node_modules/jsonpath/test/lessons.js +0 -38
  247. package/node_modules/jsonpath/test/parse.js +0 -164
  248. package/node_modules/jsonpath/test/query.js +0 -359
  249. package/node_modules/jsonpath/test/security.js +0 -238
  250. package/node_modules/jsonpath/test/slice.js +0 -57
  251. package/node_modules/jsonpath/test/stringify.js +0 -54
  252. package/node_modules/jsonpath/test/sugar.js +0 -72
  253. package/node_modules/source-map/LICENSE +0 -28
  254. package/node_modules/source-map/README.md +0 -742
  255. package/node_modules/source-map/dist/source-map.debug.js +0 -3234
  256. package/node_modules/source-map/dist/source-map.js +0 -3233
  257. package/node_modules/source-map/dist/source-map.min.js +0 -2
  258. package/node_modules/source-map/dist/source-map.min.js.map +0 -1
  259. package/node_modules/source-map/lib/array-set.js +0 -121
  260. package/node_modules/source-map/lib/base64-vlq.js +0 -140
  261. package/node_modules/source-map/lib/base64.js +0 -67
  262. package/node_modules/source-map/lib/binary-search.js +0 -111
  263. package/node_modules/source-map/lib/mapping-list.js +0 -79
  264. package/node_modules/source-map/lib/quick-sort.js +0 -114
  265. package/node_modules/source-map/lib/source-map-consumer.js +0 -1145
  266. package/node_modules/source-map/lib/source-map-generator.js +0 -425
  267. package/node_modules/source-map/lib/source-node.js +0 -413
  268. package/node_modules/source-map/lib/util.js +0 -488
  269. package/node_modules/source-map/package.json +0 -73
  270. package/node_modules/source-map/source-map.d.ts +0 -98
  271. package/node_modules/source-map/source-map.js +0 -8
  272. package/node_modules/static-eval/.travis.yml +0 -18
  273. package/node_modules/static-eval/CHANGELOG.md +0 -21
  274. package/node_modules/static-eval/LICENSE +0 -20
  275. package/node_modules/static-eval/example/eval.js +0 -7
  276. package/node_modules/static-eval/example/vars.js +0 -11
  277. package/node_modules/static-eval/index.js +0 -209
  278. package/node_modules/static-eval/package.json +0 -54
  279. package/node_modules/static-eval/readme.markdown +0 -87
  280. package/node_modules/static-eval/security.md +0 -15
  281. package/node_modules/static-eval/test/eval.js +0 -177
  282. package/node_modules/static-eval/test/prop.js +0 -16
  283. package/node_modules/static-eval/test/template-strings.js +0 -33
  284. package/node_modules/underscore/LICENSE +0 -22
  285. package/node_modules/underscore/README.md +0 -34
  286. package/node_modules/underscore/amd/_baseCreate.js +0 -21
  287. package/node_modules/underscore/amd/_baseIteratee.js +0 -15
  288. package/node_modules/underscore/amd/_cb.js +0 -12
  289. package/node_modules/underscore/amd/_chainResult.js +0 -10
  290. package/node_modules/underscore/amd/_collectNonEnumProps.js +0 -42
  291. package/node_modules/underscore/amd/_createAssigner.js +0 -24
  292. package/node_modules/underscore/amd/_createEscaper.js +0 -21
  293. package/node_modules/underscore/amd/_createIndexFinder.js +0 -30
  294. package/node_modules/underscore/amd/_createPredicateIndexFinder.js +0 -18
  295. package/node_modules/underscore/amd/_createReduce.js +0 -30
  296. package/node_modules/underscore/amd/_createSizePropertyCheck.js +0 -13
  297. package/node_modules/underscore/amd/_deepGet.js +0 -15
  298. package/node_modules/underscore/amd/_escapeMap.js +0 -15
  299. package/node_modules/underscore/amd/_executeBound.js +0 -16
  300. package/node_modules/underscore/amd/_flatten.js +0 -32
  301. package/node_modules/underscore/amd/_getByteLength.js +0 -8
  302. package/node_modules/underscore/amd/_getLength.js +0 -8
  303. package/node_modules/underscore/amd/_group.js +0 -18
  304. package/node_modules/underscore/amd/_has.js +0 -10
  305. package/node_modules/underscore/amd/_hasObjectTag.js +0 -7
  306. package/node_modules/underscore/amd/_isArrayLike.js +0 -11
  307. package/node_modules/underscore/amd/_isBufferLike.js +0 -9
  308. package/node_modules/underscore/amd/_keyInObj.js +0 -11
  309. package/node_modules/underscore/amd/_methodFingerprint.js +0 -44
  310. package/node_modules/underscore/amd/_optimizeCb.js +0 -27
  311. package/node_modules/underscore/amd/_set.js +0 -21
  312. package/node_modules/underscore/amd/_setup.js +0 -70
  313. package/node_modules/underscore/amd/_shallowProperty.js +0 -12
  314. package/node_modules/underscore/amd/_stringTagBug.js +0 -16
  315. package/node_modules/underscore/amd/_tagTester.js +0 -13
  316. package/node_modules/underscore/amd/_toBufferView.js +0 -15
  317. package/node_modules/underscore/amd/_toPath.js +0 -11
  318. package/node_modules/underscore/amd/_unescapeMap.js +0 -8
  319. package/node_modules/underscore/amd/after.js +0 -14
  320. package/node_modules/underscore/amd/allKeys.js +0 -15
  321. package/node_modules/underscore/amd/before.js +0 -18
  322. package/node_modules/underscore/amd/bind.js +0 -15
  323. package/node_modules/underscore/amd/bindAll.js +0 -19
  324. package/node_modules/underscore/amd/chain.js +0 -12
  325. package/node_modules/underscore/amd/chunk.js +0 -17
  326. package/node_modules/underscore/amd/clone.js +0 -11
  327. package/node_modules/underscore/amd/compact.js +0 -10
  328. package/node_modules/underscore/amd/compose.js +0 -18
  329. package/node_modules/underscore/amd/constant.js +0 -12
  330. package/node_modules/underscore/amd/contains.js +0 -12
  331. package/node_modules/underscore/amd/countBy.js +0 -12
  332. package/node_modules/underscore/amd/create.js +0 -14
  333. package/node_modules/underscore/amd/debounce.js +0 -43
  334. package/node_modules/underscore/amd/defaults.js +0 -8
  335. package/node_modules/underscore/amd/defer.js +0 -9
  336. package/node_modules/underscore/amd/delay.js +0 -13
  337. package/node_modules/underscore/amd/difference.js +0 -14
  338. package/node_modules/underscore/amd/each.js +0 -25
  339. package/node_modules/underscore/amd/escape.js +0 -8
  340. package/node_modules/underscore/amd/every.js +0 -17
  341. package/node_modules/underscore/amd/extend.js +0 -8
  342. package/node_modules/underscore/amd/extendOwn.js +0 -10
  343. package/node_modules/underscore/amd/filter.js +0 -15
  344. package/node_modules/underscore/amd/find.js +0 -12
  345. package/node_modules/underscore/amd/findIndex.js +0 -8
  346. package/node_modules/underscore/amd/findKey.js +0 -15
  347. package/node_modules/underscore/amd/findLastIndex.js +0 -8
  348. package/node_modules/underscore/amd/findWhere.js +0 -11
  349. package/node_modules/underscore/amd/first.js +0 -13
  350. package/node_modules/underscore/amd/flatten.js +0 -11
  351. package/node_modules/underscore/amd/functions.js +0 -14
  352. package/node_modules/underscore/amd/get.js +0 -14
  353. package/node_modules/underscore/amd/groupBy.js +0 -11
  354. package/node_modules/underscore/amd/has.js +0 -19
  355. package/node_modules/underscore/amd/identity.js +0 -10
  356. package/node_modules/underscore/amd/index-default.js +0 -12
  357. package/node_modules/underscore/amd/index.js +0 -154
  358. package/node_modules/underscore/amd/indexBy.js +0 -11
  359. package/node_modules/underscore/amd/indexOf.js +0 -11
  360. package/node_modules/underscore/amd/initial.js +0 -12
  361. package/node_modules/underscore/amd/intersection.js +0 -22
  362. package/node_modules/underscore/amd/invert.js +0 -15
  363. package/node_modules/underscore/amd/invoke.js +0 -28
  364. package/node_modules/underscore/amd/isArguments.js +0 -19
  365. package/node_modules/underscore/amd/isArray.js +0 -9
  366. package/node_modules/underscore/amd/isArrayBuffer.js +0 -7
  367. package/node_modules/underscore/amd/isBoolean.js +0 -10
  368. package/node_modules/underscore/amd/isDataView.js +0 -15
  369. package/node_modules/underscore/amd/isDate.js +0 -7
  370. package/node_modules/underscore/amd/isElement.js +0 -10
  371. package/node_modules/underscore/amd/isEmpty.js +0 -18
  372. package/node_modules/underscore/amd/isEqual.js +0 -133
  373. package/node_modules/underscore/amd/isError.js +0 -7
  374. package/node_modules/underscore/amd/isFinite.js +0 -10
  375. package/node_modules/underscore/amd/isFunction.js +0 -18
  376. package/node_modules/underscore/amd/isMap.js +0 -7
  377. package/node_modules/underscore/amd/isMatch.js +0 -17
  378. package/node_modules/underscore/amd/isNaN.js +0 -10
  379. package/node_modules/underscore/amd/isNull.js +0 -10
  380. package/node_modules/underscore/amd/isNumber.js +0 -7
  381. package/node_modules/underscore/amd/isObject.js +0 -11
  382. package/node_modules/underscore/amd/isRegExp.js +0 -7
  383. package/node_modules/underscore/amd/isSet.js +0 -7
  384. package/node_modules/underscore/amd/isString.js +0 -7
  385. package/node_modules/underscore/amd/isSymbol.js +0 -7
  386. package/node_modules/underscore/amd/isTypedArray.js +0 -16
  387. package/node_modules/underscore/amd/isUndefined.js +0 -10
  388. package/node_modules/underscore/amd/isWeakMap.js +0 -7
  389. package/node_modules/underscore/amd/isWeakSet.js +0 -7
  390. package/node_modules/underscore/amd/iteratee.js +0 -13
  391. package/node_modules/underscore/amd/keys.js +0 -17
  392. package/node_modules/underscore/amd/last.js +0 -13
  393. package/node_modules/underscore/amd/lastIndexOf.js +0 -9
  394. package/node_modules/underscore/amd/map.js +0 -18
  395. package/node_modules/underscore/amd/mapObject.js +0 -19
  396. package/node_modules/underscore/amd/matcher.js +0 -14
  397. package/node_modules/underscore/amd/max.js +0 -30
  398. package/node_modules/underscore/amd/memoize.js +0 -17
  399. package/node_modules/underscore/amd/min.js +0 -30
  400. package/node_modules/underscore/amd/mixin.js +0 -18
  401. package/node_modules/underscore/amd/negate.js +0 -12
  402. package/node_modules/underscore/amd/noop.js +0 -8
  403. package/node_modules/underscore/amd/now.js +0 -10
  404. package/node_modules/underscore/amd/object.js +0 -20
  405. package/node_modules/underscore/amd/omit.js +0 -20
  406. package/node_modules/underscore/amd/once.js +0 -9
  407. package/node_modules/underscore/amd/pairs.js +0 -17
  408. package/node_modules/underscore/amd/partial.js +0 -25
  409. package/node_modules/underscore/amd/partition.js +0 -11
  410. package/node_modules/underscore/amd/pick.js +0 -25
  411. package/node_modules/underscore/amd/pluck.js +0 -10
  412. package/node_modules/underscore/amd/property.js +0 -14
  413. package/node_modules/underscore/amd/propertyOf.js +0 -13
  414. package/node_modules/underscore/amd/random.js +0 -14
  415. package/node_modules/underscore/amd/range.js +0 -27
  416. package/node_modules/underscore/amd/reduce.js +0 -9
  417. package/node_modules/underscore/amd/reduceRight.js +0 -8
  418. package/node_modules/underscore/amd/reject.js +0 -10
  419. package/node_modules/underscore/amd/rest.js +0 -12
  420. package/node_modules/underscore/amd/restArguments.js +0 -33
  421. package/node_modules/underscore/amd/result.js +0 -25
  422. package/node_modules/underscore/amd/sample.js +0 -27
  423. package/node_modules/underscore/amd/set.js +0 -15
  424. package/node_modules/underscore/amd/shuffle.js +0 -10
  425. package/node_modules/underscore/amd/size.js +0 -11
  426. package/node_modules/underscore/amd/some.js +0 -17
  427. package/node_modules/underscore/amd/sortBy.js +0 -26
  428. package/node_modules/underscore/amd/sortedIndex.js +0 -18
  429. package/node_modules/underscore/amd/tap.js +0 -13
  430. package/node_modules/underscore/amd/template.js +0 -103
  431. package/node_modules/underscore/amd/templateSettings.js +0 -13
  432. package/node_modules/underscore/amd/throttle.js +0 -51
  433. package/node_modules/underscore/amd/times.js +0 -13
  434. package/node_modules/underscore/amd/toArray.js +0 -18
  435. package/node_modules/underscore/amd/toPath.js +0 -12
  436. package/node_modules/underscore/amd/underscore-array-methods.js +0 -30
  437. package/node_modules/underscore/amd/underscore.js +0 -29
  438. package/node_modules/underscore/amd/unescape.js +0 -8
  439. package/node_modules/underscore/amd/union.js +0 -11
  440. package/node_modules/underscore/amd/uniq.js +0 -37
  441. package/node_modules/underscore/amd/uniqueId.js +0 -13
  442. package/node_modules/underscore/amd/unzip.js +0 -17
  443. package/node_modules/underscore/amd/values.js +0 -16
  444. package/node_modules/underscore/amd/where.js +0 -11
  445. package/node_modules/underscore/amd/without.js +0 -10
  446. package/node_modules/underscore/amd/wrap.js +0 -12
  447. package/node_modules/underscore/amd/zip.js +0 -9
  448. package/node_modules/underscore/cjs/_baseCreate.js +0 -20
  449. package/node_modules/underscore/cjs/_baseIteratee.js +0 -19
  450. package/node_modules/underscore/cjs/_cb.js +0 -12
  451. package/node_modules/underscore/cjs/_chainResult.js +0 -8
  452. package/node_modules/underscore/cjs/_collectNonEnumProps.js +0 -42
  453. package/node_modules/underscore/cjs/_createAssigner.js +0 -20
  454. package/node_modules/underscore/cjs/_createEscaper.js +0 -19
  455. package/node_modules/underscore/cjs/_createIndexFinder.js +0 -30
  456. package/node_modules/underscore/cjs/_createPredicateIndexFinder.js +0 -17
  457. package/node_modules/underscore/cjs/_createReduce.js +0 -30
  458. package/node_modules/underscore/cjs/_createSizePropertyCheck.js +0 -11
  459. package/node_modules/underscore/cjs/_deepGet.js +0 -11
  460. package/node_modules/underscore/cjs/_escapeMap.js +0 -11
  461. package/node_modules/underscore/cjs/_executeBound.js +0 -15
  462. package/node_modules/underscore/cjs/_flatten.js +0 -33
  463. package/node_modules/underscore/cjs/_getByteLength.js +0 -6
  464. package/node_modules/underscore/cjs/_getLength.js +0 -6
  465. package/node_modules/underscore/cjs/_group.js +0 -17
  466. package/node_modules/underscore/cjs/_has.js +0 -8
  467. package/node_modules/underscore/cjs/_hasObjectTag.js +0 -5
  468. package/node_modules/underscore/cjs/_isArrayLike.js +0 -10
  469. package/node_modules/underscore/cjs/_isBufferLike.js +0 -8
  470. package/node_modules/underscore/cjs/_keyInObj.js +0 -7
  471. package/node_modules/underscore/cjs/_methodFingerprint.js +0 -44
  472. package/node_modules/underscore/cjs/_optimizeCb.js +0 -23
  473. package/node_modules/underscore/cjs/_set.js +0 -21
  474. package/node_modules/underscore/cjs/_setup.js +0 -66
  475. package/node_modules/underscore/cjs/_shallowProperty.js +0 -8
  476. package/node_modules/underscore/cjs/_stringTagBug.js +0 -15
  477. package/node_modules/underscore/cjs/_tagTester.js +0 -11
  478. package/node_modules/underscore/cjs/_toBufferView.js +0 -13
  479. package/node_modules/underscore/cjs/_toPath.js +0 -10
  480. package/node_modules/underscore/cjs/_unescapeMap.js +0 -7
  481. package/node_modules/underscore/cjs/after.js +0 -10
  482. package/node_modules/underscore/cjs/allKeys.js +0 -15
  483. package/node_modules/underscore/cjs/before.js +0 -14
  484. package/node_modules/underscore/cjs/bind.js +0 -15
  485. package/node_modules/underscore/cjs/bindAll.js +0 -19
  486. package/node_modules/underscore/cjs/chain.js +0 -10
  487. package/node_modules/underscore/cjs/chunk.js +0 -15
  488. package/node_modules/underscore/cjs/clone.js +0 -11
  489. package/node_modules/underscore/cjs/compact.js +0 -8
  490. package/node_modules/underscore/cjs/compose.js +0 -14
  491. package/node_modules/underscore/cjs/constant.js +0 -8
  492. package/node_modules/underscore/cjs/contains.js +0 -12
  493. package/node_modules/underscore/cjs/countBy.js +0 -11
  494. package/node_modules/underscore/cjs/create.js +0 -13
  495. package/node_modules/underscore/cjs/debounce.js +0 -42
  496. package/node_modules/underscore/cjs/defaults.js +0 -7
  497. package/node_modules/underscore/cjs/defer.js +0 -9
  498. package/node_modules/underscore/cjs/delay.js +0 -11
  499. package/node_modules/underscore/cjs/difference.js +0 -15
  500. package/node_modules/underscore/cjs/each.js +0 -25
  501. package/node_modules/underscore/cjs/escape.js +0 -7
  502. package/node_modules/underscore/cjs/every.js +0 -17
  503. package/node_modules/underscore/cjs/extend.js +0 -7
  504. package/node_modules/underscore/cjs/extendOwn.js +0 -9
  505. package/node_modules/underscore/cjs/filter.js +0 -14
  506. package/node_modules/underscore/cjs/find.js +0 -12
  507. package/node_modules/underscore/cjs/findIndex.js +0 -6
  508. package/node_modules/underscore/cjs/findKey.js +0 -14
  509. package/node_modules/underscore/cjs/findLastIndex.js +0 -6
  510. package/node_modules/underscore/cjs/findWhere.js +0 -10
  511. package/node_modules/underscore/cjs/first.js +0 -11
  512. package/node_modules/underscore/cjs/flatten.js +0 -9
  513. package/node_modules/underscore/cjs/functions.js +0 -12
  514. package/node_modules/underscore/cjs/get.js +0 -14
  515. package/node_modules/underscore/cjs/groupBy.js +0 -10
  516. package/node_modules/underscore/cjs/has.js +0 -18
  517. package/node_modules/underscore/cjs/identity.js +0 -6
  518. package/node_modules/underscore/cjs/index-default.js +0 -11
  519. package/node_modules/underscore/cjs/index.js +0 -278
  520. package/node_modules/underscore/cjs/indexBy.js +0 -9
  521. package/node_modules/underscore/cjs/indexOf.js +0 -11
  522. package/node_modules/underscore/cjs/initial.js +0 -10
  523. package/node_modules/underscore/cjs/intersection.js +0 -21
  524. package/node_modules/underscore/cjs/invert.js +0 -13
  525. package/node_modules/underscore/cjs/invoke.js +0 -30
  526. package/node_modules/underscore/cjs/isArguments.js +0 -18
  527. package/node_modules/underscore/cjs/isArray.js +0 -8
  528. package/node_modules/underscore/cjs/isArrayBuffer.js +0 -5
  529. package/node_modules/underscore/cjs/isBoolean.js +0 -8
  530. package/node_modules/underscore/cjs/isDataView.js +0 -16
  531. package/node_modules/underscore/cjs/isDate.js +0 -5
  532. package/node_modules/underscore/cjs/isElement.js +0 -6
  533. package/node_modules/underscore/cjs/isEmpty.js +0 -20
  534. package/node_modules/underscore/cjs/isEqual.js +0 -140
  535. package/node_modules/underscore/cjs/isError.js +0 -5
  536. package/node_modules/underscore/cjs/isFinite.js +0 -9
  537. package/node_modules/underscore/cjs/isFunction.js +0 -17
  538. package/node_modules/underscore/cjs/isMap.js +0 -7
  539. package/node_modules/underscore/cjs/isMatch.js +0 -15
  540. package/node_modules/underscore/cjs/isNaN.js +0 -9
  541. package/node_modules/underscore/cjs/isNull.js +0 -6
  542. package/node_modules/underscore/cjs/isNumber.js +0 -5
  543. package/node_modules/underscore/cjs/isObject.js +0 -7
  544. package/node_modules/underscore/cjs/isRegExp.js +0 -5
  545. package/node_modules/underscore/cjs/isSet.js +0 -7
  546. package/node_modules/underscore/cjs/isString.js +0 -5
  547. package/node_modules/underscore/cjs/isSymbol.js +0 -5
  548. package/node_modules/underscore/cjs/isTypedArray.js +0 -17
  549. package/node_modules/underscore/cjs/isUndefined.js +0 -6
  550. package/node_modules/underscore/cjs/isWeakMap.js +0 -7
  551. package/node_modules/underscore/cjs/isWeakSet.js +0 -5
  552. package/node_modules/underscore/cjs/iteratee.js +0 -12
  553. package/node_modules/underscore/cjs/keys.js +0 -18
  554. package/node_modules/underscore/cjs/last.js +0 -11
  555. package/node_modules/underscore/cjs/lastIndexOf.js +0 -8
  556. package/node_modules/underscore/cjs/map.js +0 -18
  557. package/node_modules/underscore/cjs/mapObject.js +0 -18
  558. package/node_modules/underscore/cjs/matcher.js +0 -13
  559. package/node_modules/underscore/cjs/max.js +0 -31
  560. package/node_modules/underscore/cjs/memoize.js +0 -15
  561. package/node_modules/underscore/cjs/min.js +0 -31
  562. package/node_modules/underscore/cjs/mixin.js +0 -20
  563. package/node_modules/underscore/cjs/negate.js +0 -8
  564. package/node_modules/underscore/cjs/noop.js +0 -4
  565. package/node_modules/underscore/cjs/now.js +0 -6
  566. package/node_modules/underscore/cjs/object.js +0 -18
  567. package/node_modules/underscore/cjs/omit.js +0 -24
  568. package/node_modules/underscore/cjs/once.js +0 -8
  569. package/node_modules/underscore/cjs/pairs.js +0 -15
  570. package/node_modules/underscore/cjs/partial.js +0 -25
  571. package/node_modules/underscore/cjs/partition.js +0 -9
  572. package/node_modules/underscore/cjs/pick.js +0 -28
  573. package/node_modules/underscore/cjs/pluck.js +0 -9
  574. package/node_modules/underscore/cjs/property.js +0 -13
  575. package/node_modules/underscore/cjs/propertyOf.js +0 -12
  576. package/node_modules/underscore/cjs/random.js +0 -10
  577. package/node_modules/underscore/cjs/range.js +0 -23
  578. package/node_modules/underscore/cjs/reduce.js +0 -7
  579. package/node_modules/underscore/cjs/reduceRight.js +0 -6
  580. package/node_modules/underscore/cjs/reject.js +0 -10
  581. package/node_modules/underscore/cjs/rest.js +0 -10
  582. package/node_modules/underscore/cjs/restArguments.js +0 -29
  583. package/node_modules/underscore/cjs/result.js +0 -24
  584. package/node_modules/underscore/cjs/sample.js +0 -29
  585. package/node_modules/underscore/cjs/set.js +0 -15
  586. package/node_modules/underscore/cjs/shuffle.js +0 -8
  587. package/node_modules/underscore/cjs/size.js +0 -10
  588. package/node_modules/underscore/cjs/some.js +0 -17
  589. package/node_modules/underscore/cjs/sortBy.js +0 -26
  590. package/node_modules/underscore/cjs/sortedIndex.js +0 -17
  591. package/node_modules/underscore/cjs/tap.js +0 -9
  592. package/node_modules/underscore/cjs/template.js +0 -103
  593. package/node_modules/underscore/cjs/templateSettings.js +0 -11
  594. package/node_modules/underscore/cjs/throttle.js +0 -49
  595. package/node_modules/underscore/cjs/times.js +0 -11
  596. package/node_modules/underscore/cjs/toArray.js +0 -22
  597. package/node_modules/underscore/cjs/toPath.js +0 -11
  598. package/node_modules/underscore/cjs/underscore-array-methods.js +0 -31
  599. package/node_modules/underscore/cjs/underscore.js +0 -27
  600. package/node_modules/underscore/cjs/unescape.js +0 -7
  601. package/node_modules/underscore/cjs/union.js +0 -11
  602. package/node_modules/underscore/cjs/uniq.js +0 -38
  603. package/node_modules/underscore/cjs/uniqueId.js +0 -9
  604. package/node_modules/underscore/cjs/unzip.js +0 -17
  605. package/node_modules/underscore/cjs/values.js +0 -14
  606. package/node_modules/underscore/cjs/where.js +0 -10
  607. package/node_modules/underscore/cjs/without.js +0 -9
  608. package/node_modules/underscore/cjs/wrap.js +0 -10
  609. package/node_modules/underscore/cjs/zip.js +0 -8
  610. package/node_modules/underscore/modules/.eslintrc +0 -21
  611. package/node_modules/underscore/modules/_baseCreate.js +0 -18
  612. package/node_modules/underscore/modules/_baseIteratee.js +0 -17
  613. package/node_modules/underscore/modules/_cb.js +0 -10
  614. package/node_modules/underscore/modules/_chainResult.js +0 -6
  615. package/node_modules/underscore/modules/_collectNonEnumProps.js +0 -40
  616. package/node_modules/underscore/modules/_createAssigner.js +0 -18
  617. package/node_modules/underscore/modules/_createEscaper.js +0 -17
  618. package/node_modules/underscore/modules/_createIndexFinder.js +0 -28
  619. package/node_modules/underscore/modules/_createPredicateIndexFinder.js +0 -15
  620. package/node_modules/underscore/modules/_createReduce.js +0 -28
  621. package/node_modules/underscore/modules/_createSizePropertyCheck.js +0 -9
  622. package/node_modules/underscore/modules/_deepGet.js +0 -9
  623. package/node_modules/underscore/modules/_escapeMap.js +0 -9
  624. package/node_modules/underscore/modules/_executeBound.js +0 -13
  625. package/node_modules/underscore/modules/_flatten.js +0 -31
  626. package/node_modules/underscore/modules/_getByteLength.js +0 -4
  627. package/node_modules/underscore/modules/_getLength.js +0 -4
  628. package/node_modules/underscore/modules/_group.js +0 -15
  629. package/node_modules/underscore/modules/_has.js +0 -6
  630. package/node_modules/underscore/modules/_hasObjectTag.js +0 -3
  631. package/node_modules/underscore/modules/_isArrayLike.js +0 -8
  632. package/node_modules/underscore/modules/_isBufferLike.js +0 -6
  633. package/node_modules/underscore/modules/_keyInObj.js +0 -5
  634. package/node_modules/underscore/modules/_methodFingerprint.js +0 -37
  635. package/node_modules/underscore/modules/_optimizeCb.js +0 -21
  636. package/node_modules/underscore/modules/_setup.js +0 -43
  637. package/node_modules/underscore/modules/_shallowProperty.js +0 -6
  638. package/node_modules/underscore/modules/_stringTagBug.js +0 -10
  639. package/node_modules/underscore/modules/_tagTester.js +0 -9
  640. package/node_modules/underscore/modules/_toBufferView.js +0 -11
  641. package/node_modules/underscore/modules/_toPath.js +0 -8
  642. package/node_modules/underscore/modules/_unescapeMap.js +0 -5
  643. package/node_modules/underscore/modules/after.js +0 -8
  644. package/node_modules/underscore/modules/allKeys.js +0 -13
  645. package/node_modules/underscore/modules/before.js +0 -12
  646. package/node_modules/underscore/modules/bind.js +0 -13
  647. package/node_modules/underscore/modules/bindAll.js +0 -17
  648. package/node_modules/underscore/modules/chain.js +0 -8
  649. package/node_modules/underscore/modules/chunk.js +0 -13
  650. package/node_modules/underscore/modules/clone.js +0 -9
  651. package/node_modules/underscore/modules/compact.js +0 -6
  652. package/node_modules/underscore/modules/compose.js +0 -12
  653. package/node_modules/underscore/modules/constant.js +0 -6
  654. package/node_modules/underscore/modules/contains.js +0 -10
  655. package/node_modules/underscore/modules/countBy.js +0 -9
  656. package/node_modules/underscore/modules/create.js +0 -11
  657. package/node_modules/underscore/modules/debounce.js +0 -40
  658. package/node_modules/underscore/modules/defaults.js +0 -5
  659. package/node_modules/underscore/modules/defer.js +0 -7
  660. package/node_modules/underscore/modules/delay.js +0 -9
  661. package/node_modules/underscore/modules/difference.js +0 -13
  662. package/node_modules/underscore/modules/each.js +0 -23
  663. package/node_modules/underscore/modules/escape.js +0 -5
  664. package/node_modules/underscore/modules/every.js +0 -15
  665. package/node_modules/underscore/modules/extend.js +0 -5
  666. package/node_modules/underscore/modules/extendOwn.js +0 -7
  667. package/node_modules/underscore/modules/filter.js +0 -12
  668. package/node_modules/underscore/modules/find.js +0 -10
  669. package/node_modules/underscore/modules/findIndex.js +0 -4
  670. package/node_modules/underscore/modules/findKey.js +0 -12
  671. package/node_modules/underscore/modules/findLastIndex.js +0 -4
  672. package/node_modules/underscore/modules/findWhere.js +0 -8
  673. package/node_modules/underscore/modules/first.js +0 -9
  674. package/node_modules/underscore/modules/flatten.js +0 -7
  675. package/node_modules/underscore/modules/functions.js +0 -10
  676. package/node_modules/underscore/modules/get.js +0 -12
  677. package/node_modules/underscore/modules/groupBy.js +0 -8
  678. package/node_modules/underscore/modules/has.js +0 -16
  679. package/node_modules/underscore/modules/identity.js +0 -4
  680. package/node_modules/underscore/modules/index-all.js +0 -18
  681. package/node_modules/underscore/modules/index-default.js +0 -27
  682. package/node_modules/underscore/modules/index.js +0 -200
  683. package/node_modules/underscore/modules/indexBy.js +0 -7
  684. package/node_modules/underscore/modules/indexOf.js +0 -9
  685. package/node_modules/underscore/modules/initial.js +0 -8
  686. package/node_modules/underscore/modules/intersection.js +0 -19
  687. package/node_modules/underscore/modules/invert.js +0 -11
  688. package/node_modules/underscore/modules/invoke.js +0 -28
  689. package/node_modules/underscore/modules/isArguments.js +0 -16
  690. package/node_modules/underscore/modules/isArray.js +0 -6
  691. package/node_modules/underscore/modules/isArrayBuffer.js +0 -3
  692. package/node_modules/underscore/modules/isBoolean.js +0 -6
  693. package/node_modules/underscore/modules/isDataView.js +0 -14
  694. package/node_modules/underscore/modules/isDate.js +0 -3
  695. package/node_modules/underscore/modules/isElement.js +0 -4
  696. package/node_modules/underscore/modules/isEmpty.js +0 -18
  697. package/node_modules/underscore/modules/isEqual.js +0 -138
  698. package/node_modules/underscore/modules/isError.js +0 -3
  699. package/node_modules/underscore/modules/isFinite.js +0 -7
  700. package/node_modules/underscore/modules/isFunction.js +0 -15
  701. package/node_modules/underscore/modules/isMap.js +0 -5
  702. package/node_modules/underscore/modules/isMatch.js +0 -13
  703. package/node_modules/underscore/modules/isNaN.js +0 -7
  704. package/node_modules/underscore/modules/isNull.js +0 -4
  705. package/node_modules/underscore/modules/isNumber.js +0 -3
  706. package/node_modules/underscore/modules/isObject.js +0 -5
  707. package/node_modules/underscore/modules/isRegExp.js +0 -3
  708. package/node_modules/underscore/modules/isSet.js +0 -5
  709. package/node_modules/underscore/modules/isString.js +0 -3
  710. package/node_modules/underscore/modules/isSymbol.js +0 -3
  711. package/node_modules/underscore/modules/isTypedArray.js +0 -15
  712. package/node_modules/underscore/modules/isUndefined.js +0 -4
  713. package/node_modules/underscore/modules/isWeakMap.js +0 -5
  714. package/node_modules/underscore/modules/isWeakSet.js +0 -3
  715. package/node_modules/underscore/modules/iteratee.js +0 -10
  716. package/node_modules/underscore/modules/keys.js +0 -16
  717. package/node_modules/underscore/modules/last.js +0 -9
  718. package/node_modules/underscore/modules/lastIndexOf.js +0 -6
  719. package/node_modules/underscore/modules/map.js +0 -16
  720. package/node_modules/underscore/modules/mapObject.js +0 -16
  721. package/node_modules/underscore/modules/matcher.js +0 -11
  722. package/node_modules/underscore/modules/max.js +0 -29
  723. package/node_modules/underscore/modules/memoize.js +0 -13
  724. package/node_modules/underscore/modules/min.js +0 -29
  725. package/node_modules/underscore/modules/mixin.js +0 -18
  726. package/node_modules/underscore/modules/negate.js +0 -6
  727. package/node_modules/underscore/modules/noop.js +0 -2
  728. package/node_modules/underscore/modules/now.js +0 -4
  729. package/node_modules/underscore/modules/object.js +0 -16
  730. package/node_modules/underscore/modules/omit.js +0 -22
  731. package/node_modules/underscore/modules/once.js +0 -6
  732. package/node_modules/underscore/modules/package.json +0 -1
  733. package/node_modules/underscore/modules/pairs.js +0 -13
  734. package/node_modules/underscore/modules/partial.js +0 -24
  735. package/node_modules/underscore/modules/partition.js +0 -7
  736. package/node_modules/underscore/modules/pick.js +0 -26
  737. package/node_modules/underscore/modules/pluck.js +0 -7
  738. package/node_modules/underscore/modules/property.js +0 -11
  739. package/node_modules/underscore/modules/propertyOf.js +0 -10
  740. package/node_modules/underscore/modules/random.js +0 -8
  741. package/node_modules/underscore/modules/range.js +0 -21
  742. package/node_modules/underscore/modules/reduce.js +0 -5
  743. package/node_modules/underscore/modules/reduceRight.js +0 -4
  744. package/node_modules/underscore/modules/reject.js +0 -8
  745. package/node_modules/underscore/modules/rest.js +0 -8
  746. package/node_modules/underscore/modules/restArguments.js +0 -27
  747. package/node_modules/underscore/modules/result.js +0 -22
  748. package/node_modules/underscore/modules/sample.js +0 -27
  749. package/node_modules/underscore/modules/shuffle.js +0 -6
  750. package/node_modules/underscore/modules/size.js +0 -8
  751. package/node_modules/underscore/modules/some.js +0 -15
  752. package/node_modules/underscore/modules/sortBy.js +0 -24
  753. package/node_modules/underscore/modules/sortedIndex.js +0 -15
  754. package/node_modules/underscore/modules/tap.js +0 -7
  755. package/node_modules/underscore/modules/template.js +0 -101
  756. package/node_modules/underscore/modules/templateSettings.js +0 -9
  757. package/node_modules/underscore/modules/throttle.js +0 -47
  758. package/node_modules/underscore/modules/times.js +0 -9
  759. package/node_modules/underscore/modules/toArray.js +0 -20
  760. package/node_modules/underscore/modules/toPath.js +0 -9
  761. package/node_modules/underscore/modules/underscore-array-methods.js +0 -31
  762. package/node_modules/underscore/modules/underscore.js +0 -25
  763. package/node_modules/underscore/modules/unescape.js +0 -5
  764. package/node_modules/underscore/modules/union.js +0 -9
  765. package/node_modules/underscore/modules/uniq.js +0 -36
  766. package/node_modules/underscore/modules/uniqueId.js +0 -7
  767. package/node_modules/underscore/modules/unzip.js +0 -15
  768. package/node_modules/underscore/modules/values.js +0 -12
  769. package/node_modules/underscore/modules/where.js +0 -8
  770. package/node_modules/underscore/modules/without.js +0 -7
  771. package/node_modules/underscore/modules/wrap.js +0 -8
  772. package/node_modules/underscore/modules/zip.js +0 -6
  773. package/node_modules/underscore/package.json +0 -124
  774. package/node_modules/underscore/underscore-esm-min.js +0 -5
  775. package/node_modules/underscore/underscore-esm-min.js.map +0 -1
  776. package/node_modules/underscore/underscore-esm.js +0 -2034
  777. package/node_modules/underscore/underscore-esm.js.map +0 -1
  778. package/node_modules/underscore/underscore-min.js +0 -6
  779. package/node_modules/underscore/underscore-min.js.map +0 -1
  780. package/node_modules/underscore/underscore-node-f.cjs +0 -2158
  781. package/node_modules/underscore/underscore-node-f.cjs.map +0 -1
  782. package/node_modules/underscore/underscore-node.cjs +0 -11
  783. package/node_modules/underscore/underscore-node.cjs.map +0 -1
  784. package/node_modules/underscore/underscore-node.mjs +0 -7
  785. package/node_modules/underscore/underscore-node.mjs.map +0 -1
  786. package/node_modules/underscore/underscore-umd-min.js +0 -6
  787. package/node_modules/underscore/underscore-umd-min.js.map +0 -1
  788. package/node_modules/underscore/underscore-umd.js +0 -2042
  789. package/node_modules/underscore/underscore-umd.js.map +0 -1
  790. package/node_modules/underscore/underscore.js +0 -2042
@@ -0,0 +1,2076 @@
1
+ 'use strict';
2
+
3
+ var vm = require('vm');
4
+
5
+ /**
6
+ * @implements {IHooks}
7
+ */
8
+ class Hooks {
9
+ /**
10
+ * @callback HookCallback
11
+ * @this {*|Jsep} this
12
+ * @param {Jsep} env
13
+ * @returns: void
14
+ */
15
+ /**
16
+ * Adds the given callback to the list of callbacks for the given hook.
17
+ *
18
+ * The callback will be invoked when the hook it is registered for is run.
19
+ *
20
+ * One callback function can be registered to multiple hooks and the same hook multiple times.
21
+ *
22
+ * @param {string|object} name The name of the hook, or an object of callbacks keyed by name
23
+ * @param {HookCallback|boolean} callback The callback function which is given environment variables.
24
+ * @param {?boolean} [first=false] Will add the hook to the top of the list (defaults to the bottom)
25
+ * @public
26
+ */
27
+ add(name, callback, first) {
28
+ if (typeof arguments[0] != 'string') {
29
+ // Multiple hook callbacks, keyed by name
30
+ for (let name in arguments[0]) {
31
+ this.add(name, arguments[0][name], arguments[1]);
32
+ }
33
+ } else {
34
+ (Array.isArray(name) ? name : [name]).forEach(function (name) {
35
+ this[name] = this[name] || [];
36
+ if (callback) {
37
+ this[name][first ? 'unshift' : 'push'](callback);
38
+ }
39
+ }, this);
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Runs a hook invoking all registered callbacks with the given environment variables.
45
+ *
46
+ * Callbacks will be invoked synchronously and in the order in which they were registered.
47
+ *
48
+ * @param {string} name The name of the hook.
49
+ * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.
50
+ * @public
51
+ */
52
+ run(name, env) {
53
+ this[name] = this[name] || [];
54
+ this[name].forEach(function (callback) {
55
+ callback.call(env && env.context ? env.context : env, env);
56
+ });
57
+ }
58
+ }
59
+
60
+ /**
61
+ * @implements {IPlugins}
62
+ */
63
+ class Plugins {
64
+ constructor(jsep) {
65
+ this.jsep = jsep;
66
+ this.registered = {};
67
+ }
68
+
69
+ /**
70
+ * @callback PluginSetup
71
+ * @this {Jsep} jsep
72
+ * @returns: void
73
+ */
74
+ /**
75
+ * Adds the given plugin(s) to the registry
76
+ *
77
+ * @param {object} plugins
78
+ * @param {string} plugins.name The name of the plugin
79
+ * @param {PluginSetup} plugins.init The init function
80
+ * @public
81
+ */
82
+ register(...plugins) {
83
+ plugins.forEach(plugin => {
84
+ if (typeof plugin !== 'object' || !plugin.name || !plugin.init) {
85
+ throw new Error('Invalid JSEP plugin format');
86
+ }
87
+ if (this.registered[plugin.name]) {
88
+ // already registered. Ignore.
89
+ return;
90
+ }
91
+ plugin.init(this.jsep);
92
+ this.registered[plugin.name] = plugin;
93
+ });
94
+ }
95
+ }
96
+
97
+ // JavaScript Expression Parser (JSEP) 1.4.0
98
+
99
+ class Jsep {
100
+ /**
101
+ * @returns {string}
102
+ */
103
+ static get version() {
104
+ // To be filled in by the template
105
+ return '1.4.0';
106
+ }
107
+
108
+ /**
109
+ * @returns {string}
110
+ */
111
+ static toString() {
112
+ return 'JavaScript Expression Parser (JSEP) v' + Jsep.version;
113
+ }
114
+ // ==================== CONFIG ================================
115
+ /**
116
+ * @method addUnaryOp
117
+ * @param {string} op_name The name of the unary op to add
118
+ * @returns {Jsep}
119
+ */
120
+ static addUnaryOp(op_name) {
121
+ Jsep.max_unop_len = Math.max(op_name.length, Jsep.max_unop_len);
122
+ Jsep.unary_ops[op_name] = 1;
123
+ return Jsep;
124
+ }
125
+
126
+ /**
127
+ * @method jsep.addBinaryOp
128
+ * @param {string} op_name The name of the binary op to add
129
+ * @param {number} precedence The precedence of the binary op (can be a float). Higher number = higher precedence
130
+ * @param {boolean} [isRightAssociative=false] whether operator is right-associative
131
+ * @returns {Jsep}
132
+ */
133
+ static addBinaryOp(op_name, precedence, isRightAssociative) {
134
+ Jsep.max_binop_len = Math.max(op_name.length, Jsep.max_binop_len);
135
+ Jsep.binary_ops[op_name] = precedence;
136
+ if (isRightAssociative) {
137
+ Jsep.right_associative.add(op_name);
138
+ } else {
139
+ Jsep.right_associative.delete(op_name);
140
+ }
141
+ return Jsep;
142
+ }
143
+
144
+ /**
145
+ * @method addIdentifierChar
146
+ * @param {string} char The additional character to treat as a valid part of an identifier
147
+ * @returns {Jsep}
148
+ */
149
+ static addIdentifierChar(char) {
150
+ Jsep.additional_identifier_chars.add(char);
151
+ return Jsep;
152
+ }
153
+
154
+ /**
155
+ * @method addLiteral
156
+ * @param {string} literal_name The name of the literal to add
157
+ * @param {*} literal_value The value of the literal
158
+ * @returns {Jsep}
159
+ */
160
+ static addLiteral(literal_name, literal_value) {
161
+ Jsep.literals[literal_name] = literal_value;
162
+ return Jsep;
163
+ }
164
+
165
+ /**
166
+ * @method removeUnaryOp
167
+ * @param {string} op_name The name of the unary op to remove
168
+ * @returns {Jsep}
169
+ */
170
+ static removeUnaryOp(op_name) {
171
+ delete Jsep.unary_ops[op_name];
172
+ if (op_name.length === Jsep.max_unop_len) {
173
+ Jsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);
174
+ }
175
+ return Jsep;
176
+ }
177
+
178
+ /**
179
+ * @method removeAllUnaryOps
180
+ * @returns {Jsep}
181
+ */
182
+ static removeAllUnaryOps() {
183
+ Jsep.unary_ops = {};
184
+ Jsep.max_unop_len = 0;
185
+ return Jsep;
186
+ }
187
+
188
+ /**
189
+ * @method removeIdentifierChar
190
+ * @param {string} char The additional character to stop treating as a valid part of an identifier
191
+ * @returns {Jsep}
192
+ */
193
+ static removeIdentifierChar(char) {
194
+ Jsep.additional_identifier_chars.delete(char);
195
+ return Jsep;
196
+ }
197
+
198
+ /**
199
+ * @method removeBinaryOp
200
+ * @param {string} op_name The name of the binary op to remove
201
+ * @returns {Jsep}
202
+ */
203
+ static removeBinaryOp(op_name) {
204
+ delete Jsep.binary_ops[op_name];
205
+ if (op_name.length === Jsep.max_binop_len) {
206
+ Jsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);
207
+ }
208
+ Jsep.right_associative.delete(op_name);
209
+ return Jsep;
210
+ }
211
+
212
+ /**
213
+ * @method removeAllBinaryOps
214
+ * @returns {Jsep}
215
+ */
216
+ static removeAllBinaryOps() {
217
+ Jsep.binary_ops = {};
218
+ Jsep.max_binop_len = 0;
219
+ return Jsep;
220
+ }
221
+
222
+ /**
223
+ * @method removeLiteral
224
+ * @param {string} literal_name The name of the literal to remove
225
+ * @returns {Jsep}
226
+ */
227
+ static removeLiteral(literal_name) {
228
+ delete Jsep.literals[literal_name];
229
+ return Jsep;
230
+ }
231
+
232
+ /**
233
+ * @method removeAllLiterals
234
+ * @returns {Jsep}
235
+ */
236
+ static removeAllLiterals() {
237
+ Jsep.literals = {};
238
+ return Jsep;
239
+ }
240
+ // ==================== END CONFIG ============================
241
+
242
+ /**
243
+ * @returns {string}
244
+ */
245
+ get char() {
246
+ return this.expr.charAt(this.index);
247
+ }
248
+
249
+ /**
250
+ * @returns {number}
251
+ */
252
+ get code() {
253
+ return this.expr.charCodeAt(this.index);
254
+ }
255
+ /**
256
+ * @param {string} expr a string with the passed in express
257
+ * @returns Jsep
258
+ */
259
+ constructor(expr) {
260
+ // `index` stores the character number we are currently at
261
+ // All of the gobbles below will modify `index` as we move along
262
+ this.expr = expr;
263
+ this.index = 0;
264
+ }
265
+
266
+ /**
267
+ * static top-level parser
268
+ * @returns {jsep.Expression}
269
+ */
270
+ static parse(expr) {
271
+ return new Jsep(expr).parse();
272
+ }
273
+
274
+ /**
275
+ * Get the longest key length of any object
276
+ * @param {object} obj
277
+ * @returns {number}
278
+ */
279
+ static getMaxKeyLen(obj) {
280
+ return Math.max(0, ...Object.keys(obj).map(k => k.length));
281
+ }
282
+
283
+ /**
284
+ * `ch` is a character code in the next three functions
285
+ * @param {number} ch
286
+ * @returns {boolean}
287
+ */
288
+ static isDecimalDigit(ch) {
289
+ return ch >= 48 && ch <= 57; // 0...9
290
+ }
291
+
292
+ /**
293
+ * Returns the precedence of a binary operator or `0` if it isn't a binary operator. Can be float.
294
+ * @param {string} op_val
295
+ * @returns {number}
296
+ */
297
+ static binaryPrecedence(op_val) {
298
+ return Jsep.binary_ops[op_val] || 0;
299
+ }
300
+
301
+ /**
302
+ * Looks for start of identifier
303
+ * @param {number} ch
304
+ * @returns {boolean}
305
+ */
306
+ static isIdentifierStart(ch) {
307
+ return ch >= 65 && ch <= 90 ||
308
+ // A...Z
309
+ ch >= 97 && ch <= 122 ||
310
+ // a...z
311
+ ch >= 128 && !Jsep.binary_ops[String.fromCharCode(ch)] ||
312
+ // any non-ASCII that is not an operator
313
+ Jsep.additional_identifier_chars.has(String.fromCharCode(ch)); // additional characters
314
+ }
315
+
316
+ /**
317
+ * @param {number} ch
318
+ * @returns {boolean}
319
+ */
320
+ static isIdentifierPart(ch) {
321
+ return Jsep.isIdentifierStart(ch) || Jsep.isDecimalDigit(ch);
322
+ }
323
+
324
+ /**
325
+ * throw error at index of the expression
326
+ * @param {string} message
327
+ * @throws
328
+ */
329
+ throwError(message) {
330
+ const error = new Error(message + ' at character ' + this.index);
331
+ error.index = this.index;
332
+ error.description = message;
333
+ throw error;
334
+ }
335
+
336
+ /**
337
+ * Run a given hook
338
+ * @param {string} name
339
+ * @param {jsep.Expression|false} [node]
340
+ * @returns {?jsep.Expression}
341
+ */
342
+ runHook(name, node) {
343
+ if (Jsep.hooks[name]) {
344
+ const env = {
345
+ context: this,
346
+ node
347
+ };
348
+ Jsep.hooks.run(name, env);
349
+ return env.node;
350
+ }
351
+ return node;
352
+ }
353
+
354
+ /**
355
+ * Runs a given hook until one returns a node
356
+ * @param {string} name
357
+ * @returns {?jsep.Expression}
358
+ */
359
+ searchHook(name) {
360
+ if (Jsep.hooks[name]) {
361
+ const env = {
362
+ context: this
363
+ };
364
+ Jsep.hooks[name].find(function (callback) {
365
+ callback.call(env.context, env);
366
+ return env.node;
367
+ });
368
+ return env.node;
369
+ }
370
+ }
371
+
372
+ /**
373
+ * Push `index` up to the next non-space character
374
+ */
375
+ gobbleSpaces() {
376
+ let ch = this.code;
377
+ // Whitespace
378
+ while (ch === Jsep.SPACE_CODE || ch === Jsep.TAB_CODE || ch === Jsep.LF_CODE || ch === Jsep.CR_CODE) {
379
+ ch = this.expr.charCodeAt(++this.index);
380
+ }
381
+ this.runHook('gobble-spaces');
382
+ }
383
+
384
+ /**
385
+ * Top-level method to parse all expressions and returns compound or single node
386
+ * @returns {jsep.Expression}
387
+ */
388
+ parse() {
389
+ this.runHook('before-all');
390
+ const nodes = this.gobbleExpressions();
391
+
392
+ // If there's only one expression just try returning the expression
393
+ const node = nodes.length === 1 ? nodes[0] : {
394
+ type: Jsep.COMPOUND,
395
+ body: nodes
396
+ };
397
+ return this.runHook('after-all', node);
398
+ }
399
+
400
+ /**
401
+ * top-level parser (but can be reused within as well)
402
+ * @param {number} [untilICode]
403
+ * @returns {jsep.Expression[]}
404
+ */
405
+ gobbleExpressions(untilICode) {
406
+ let nodes = [],
407
+ ch_i,
408
+ node;
409
+ while (this.index < this.expr.length) {
410
+ ch_i = this.code;
411
+
412
+ // Expressions can be separated by semicolons, commas, or just inferred without any
413
+ // separators
414
+ if (ch_i === Jsep.SEMCOL_CODE || ch_i === Jsep.COMMA_CODE) {
415
+ this.index++; // ignore separators
416
+ } else {
417
+ // Try to gobble each expression individually
418
+ if (node = this.gobbleExpression()) {
419
+ nodes.push(node);
420
+ // If we weren't able to find a binary expression and are out of room, then
421
+ // the expression passed in probably has too much
422
+ } else if (this.index < this.expr.length) {
423
+ if (ch_i === untilICode) {
424
+ break;
425
+ }
426
+ this.throwError('Unexpected "' + this.char + '"');
427
+ }
428
+ }
429
+ }
430
+ return nodes;
431
+ }
432
+
433
+ /**
434
+ * The main parsing function.
435
+ * @returns {?jsep.Expression}
436
+ */
437
+ gobbleExpression() {
438
+ const node = this.searchHook('gobble-expression') || this.gobbleBinaryExpression();
439
+ this.gobbleSpaces();
440
+ return this.runHook('after-expression', node);
441
+ }
442
+
443
+ /**
444
+ * Search for the operation portion of the string (e.g. `+`, `===`)
445
+ * Start by taking the longest possible binary operations (3 characters: `===`, `!==`, `>>>`)
446
+ * and move down from 3 to 2 to 1 character until a matching binary operation is found
447
+ * then, return that binary operation
448
+ * @returns {string|boolean}
449
+ */
450
+ gobbleBinaryOp() {
451
+ this.gobbleSpaces();
452
+ let to_check = this.expr.substr(this.index, Jsep.max_binop_len);
453
+ let tc_len = to_check.length;
454
+ while (tc_len > 0) {
455
+ // Don't accept a binary op when it is an identifier.
456
+ // Binary ops that start with a identifier-valid character must be followed
457
+ // by a non identifier-part valid character
458
+ if (Jsep.binary_ops.hasOwnProperty(to_check) && (!Jsep.isIdentifierStart(this.code) || this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))) {
459
+ this.index += tc_len;
460
+ return to_check;
461
+ }
462
+ to_check = to_check.substr(0, --tc_len);
463
+ }
464
+ return false;
465
+ }
466
+
467
+ /**
468
+ * This function is responsible for gobbling an individual expression,
469
+ * e.g. `1`, `1+2`, `a+(b*2)-Math.sqrt(2)`
470
+ * @returns {?jsep.BinaryExpression}
471
+ */
472
+ gobbleBinaryExpression() {
473
+ let node, biop, prec, stack, biop_info, left, right, i, cur_biop;
474
+
475
+ // First, try to get the leftmost thing
476
+ // Then, check to see if there's a binary operator operating on that leftmost thing
477
+ // Don't gobbleBinaryOp without a left-hand-side
478
+ left = this.gobbleToken();
479
+ if (!left) {
480
+ return left;
481
+ }
482
+ biop = this.gobbleBinaryOp();
483
+
484
+ // If there wasn't a binary operator, just return the leftmost node
485
+ if (!biop) {
486
+ return left;
487
+ }
488
+
489
+ // Otherwise, we need to start a stack to properly place the binary operations in their
490
+ // precedence structure
491
+ biop_info = {
492
+ value: biop,
493
+ prec: Jsep.binaryPrecedence(biop),
494
+ right_a: Jsep.right_associative.has(biop)
495
+ };
496
+ right = this.gobbleToken();
497
+ if (!right) {
498
+ this.throwError("Expected expression after " + biop);
499
+ }
500
+ stack = [left, biop_info, right];
501
+
502
+ // Properly deal with precedence using [recursive descent](http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm)
503
+ while (biop = this.gobbleBinaryOp()) {
504
+ prec = Jsep.binaryPrecedence(biop);
505
+ if (prec === 0) {
506
+ this.index -= biop.length;
507
+ break;
508
+ }
509
+ biop_info = {
510
+ value: biop,
511
+ prec,
512
+ right_a: Jsep.right_associative.has(biop)
513
+ };
514
+ cur_biop = biop;
515
+
516
+ // Reduce: make a binary expression from the three topmost entries.
517
+ const comparePrev = prev => biop_info.right_a && prev.right_a ? prec > prev.prec : prec <= prev.prec;
518
+ while (stack.length > 2 && comparePrev(stack[stack.length - 2])) {
519
+ right = stack.pop();
520
+ biop = stack.pop().value;
521
+ left = stack.pop();
522
+ node = {
523
+ type: Jsep.BINARY_EXP,
524
+ operator: biop,
525
+ left,
526
+ right
527
+ };
528
+ stack.push(node);
529
+ }
530
+ node = this.gobbleToken();
531
+ if (!node) {
532
+ this.throwError("Expected expression after " + cur_biop);
533
+ }
534
+ stack.push(biop_info, node);
535
+ }
536
+ i = stack.length - 1;
537
+ node = stack[i];
538
+ while (i > 1) {
539
+ node = {
540
+ type: Jsep.BINARY_EXP,
541
+ operator: stack[i - 1].value,
542
+ left: stack[i - 2],
543
+ right: node
544
+ };
545
+ i -= 2;
546
+ }
547
+ return node;
548
+ }
549
+
550
+ /**
551
+ * An individual part of a binary expression:
552
+ * e.g. `foo.bar(baz)`, `1`, `"abc"`, `(a % 2)` (because it's in parenthesis)
553
+ * @returns {boolean|jsep.Expression}
554
+ */
555
+ gobbleToken() {
556
+ let ch, to_check, tc_len, node;
557
+ this.gobbleSpaces();
558
+ node = this.searchHook('gobble-token');
559
+ if (node) {
560
+ return this.runHook('after-token', node);
561
+ }
562
+ ch = this.code;
563
+ if (Jsep.isDecimalDigit(ch) || ch === Jsep.PERIOD_CODE) {
564
+ // Char code 46 is a dot `.` which can start off a numeric literal
565
+ return this.gobbleNumericLiteral();
566
+ }
567
+ if (ch === Jsep.SQUOTE_CODE || ch === Jsep.DQUOTE_CODE) {
568
+ // Single or double quotes
569
+ node = this.gobbleStringLiteral();
570
+ } else if (ch === Jsep.OBRACK_CODE) {
571
+ node = this.gobbleArray();
572
+ } else {
573
+ to_check = this.expr.substr(this.index, Jsep.max_unop_len);
574
+ tc_len = to_check.length;
575
+ while (tc_len > 0) {
576
+ // Don't accept an unary op when it is an identifier.
577
+ // Unary ops that start with a identifier-valid character must be followed
578
+ // by a non identifier-part valid character
579
+ if (Jsep.unary_ops.hasOwnProperty(to_check) && (!Jsep.isIdentifierStart(this.code) || this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))) {
580
+ this.index += tc_len;
581
+ const argument = this.gobbleToken();
582
+ if (!argument) {
583
+ this.throwError('missing unaryOp argument');
584
+ }
585
+ return this.runHook('after-token', {
586
+ type: Jsep.UNARY_EXP,
587
+ operator: to_check,
588
+ argument,
589
+ prefix: true
590
+ });
591
+ }
592
+ to_check = to_check.substr(0, --tc_len);
593
+ }
594
+ if (Jsep.isIdentifierStart(ch)) {
595
+ node = this.gobbleIdentifier();
596
+ if (Jsep.literals.hasOwnProperty(node.name)) {
597
+ node = {
598
+ type: Jsep.LITERAL,
599
+ value: Jsep.literals[node.name],
600
+ raw: node.name
601
+ };
602
+ } else if (node.name === Jsep.this_str) {
603
+ node = {
604
+ type: Jsep.THIS_EXP
605
+ };
606
+ }
607
+ } else if (ch === Jsep.OPAREN_CODE) {
608
+ // open parenthesis
609
+ node = this.gobbleGroup();
610
+ }
611
+ }
612
+ if (!node) {
613
+ return this.runHook('after-token', false);
614
+ }
615
+ node = this.gobbleTokenProperty(node);
616
+ return this.runHook('after-token', node);
617
+ }
618
+
619
+ /**
620
+ * Gobble properties of of identifiers/strings/arrays/groups.
621
+ * e.g. `foo`, `bar.baz`, `foo['bar'].baz`
622
+ * It also gobbles function calls:
623
+ * e.g. `Math.acos(obj.angle)`
624
+ * @param {jsep.Expression} node
625
+ * @returns {jsep.Expression}
626
+ */
627
+ gobbleTokenProperty(node) {
628
+ this.gobbleSpaces();
629
+ let ch = this.code;
630
+ while (ch === Jsep.PERIOD_CODE || ch === Jsep.OBRACK_CODE || ch === Jsep.OPAREN_CODE || ch === Jsep.QUMARK_CODE) {
631
+ let optional;
632
+ if (ch === Jsep.QUMARK_CODE) {
633
+ if (this.expr.charCodeAt(this.index + 1) !== Jsep.PERIOD_CODE) {
634
+ break;
635
+ }
636
+ optional = true;
637
+ this.index += 2;
638
+ this.gobbleSpaces();
639
+ ch = this.code;
640
+ }
641
+ this.index++;
642
+ if (ch === Jsep.OBRACK_CODE) {
643
+ node = {
644
+ type: Jsep.MEMBER_EXP,
645
+ computed: true,
646
+ object: node,
647
+ property: this.gobbleExpression()
648
+ };
649
+ if (!node.property) {
650
+ this.throwError('Unexpected "' + this.char + '"');
651
+ }
652
+ this.gobbleSpaces();
653
+ ch = this.code;
654
+ if (ch !== Jsep.CBRACK_CODE) {
655
+ this.throwError('Unclosed [');
656
+ }
657
+ this.index++;
658
+ } else if (ch === Jsep.OPAREN_CODE) {
659
+ // A function call is being made; gobble all the arguments
660
+ node = {
661
+ type: Jsep.CALL_EXP,
662
+ 'arguments': this.gobbleArguments(Jsep.CPAREN_CODE),
663
+ callee: node
664
+ };
665
+ } else if (ch === Jsep.PERIOD_CODE || optional) {
666
+ if (optional) {
667
+ this.index--;
668
+ }
669
+ this.gobbleSpaces();
670
+ node = {
671
+ type: Jsep.MEMBER_EXP,
672
+ computed: false,
673
+ object: node,
674
+ property: this.gobbleIdentifier()
675
+ };
676
+ }
677
+ if (optional) {
678
+ node.optional = true;
679
+ } // else leave undefined for compatibility with esprima
680
+
681
+ this.gobbleSpaces();
682
+ ch = this.code;
683
+ }
684
+ return node;
685
+ }
686
+
687
+ /**
688
+ * Parse simple numeric literals: `12`, `3.4`, `.5`. Do this by using a string to
689
+ * keep track of everything in the numeric literal and then calling `parseFloat` on that string
690
+ * @returns {jsep.Literal}
691
+ */
692
+ gobbleNumericLiteral() {
693
+ let number = '',
694
+ ch,
695
+ chCode;
696
+ while (Jsep.isDecimalDigit(this.code)) {
697
+ number += this.expr.charAt(this.index++);
698
+ }
699
+ if (this.code === Jsep.PERIOD_CODE) {
700
+ // can start with a decimal marker
701
+ number += this.expr.charAt(this.index++);
702
+ while (Jsep.isDecimalDigit(this.code)) {
703
+ number += this.expr.charAt(this.index++);
704
+ }
705
+ }
706
+ ch = this.char;
707
+ if (ch === 'e' || ch === 'E') {
708
+ // exponent marker
709
+ number += this.expr.charAt(this.index++);
710
+ ch = this.char;
711
+ if (ch === '+' || ch === '-') {
712
+ // exponent sign
713
+ number += this.expr.charAt(this.index++);
714
+ }
715
+ while (Jsep.isDecimalDigit(this.code)) {
716
+ // exponent itself
717
+ number += this.expr.charAt(this.index++);
718
+ }
719
+ if (!Jsep.isDecimalDigit(this.expr.charCodeAt(this.index - 1))) {
720
+ this.throwError('Expected exponent (' + number + this.char + ')');
721
+ }
722
+ }
723
+ chCode = this.code;
724
+
725
+ // Check to make sure this isn't a variable name that start with a number (123abc)
726
+ if (Jsep.isIdentifierStart(chCode)) {
727
+ this.throwError('Variable names cannot start with a number (' + number + this.char + ')');
728
+ } else if (chCode === Jsep.PERIOD_CODE || number.length === 1 && number.charCodeAt(0) === Jsep.PERIOD_CODE) {
729
+ this.throwError('Unexpected period');
730
+ }
731
+ return {
732
+ type: Jsep.LITERAL,
733
+ value: parseFloat(number),
734
+ raw: number
735
+ };
736
+ }
737
+
738
+ /**
739
+ * Parses a string literal, staring with single or double quotes with basic support for escape codes
740
+ * e.g. `"hello world"`, `'this is\nJSEP'`
741
+ * @returns {jsep.Literal}
742
+ */
743
+ gobbleStringLiteral() {
744
+ let str = '';
745
+ const startIndex = this.index;
746
+ const quote = this.expr.charAt(this.index++);
747
+ let closed = false;
748
+ while (this.index < this.expr.length) {
749
+ let ch = this.expr.charAt(this.index++);
750
+ if (ch === quote) {
751
+ closed = true;
752
+ break;
753
+ } else if (ch === '\\') {
754
+ // Check for all of the common escape codes
755
+ ch = this.expr.charAt(this.index++);
756
+ switch (ch) {
757
+ case 'n':
758
+ str += '\n';
759
+ break;
760
+ case 'r':
761
+ str += '\r';
762
+ break;
763
+ case 't':
764
+ str += '\t';
765
+ break;
766
+ case 'b':
767
+ str += '\b';
768
+ break;
769
+ case 'f':
770
+ str += '\f';
771
+ break;
772
+ case 'v':
773
+ str += '\x0B';
774
+ break;
775
+ default:
776
+ str += ch;
777
+ }
778
+ } else {
779
+ str += ch;
780
+ }
781
+ }
782
+ if (!closed) {
783
+ this.throwError('Unclosed quote after "' + str + '"');
784
+ }
785
+ return {
786
+ type: Jsep.LITERAL,
787
+ value: str,
788
+ raw: this.expr.substring(startIndex, this.index)
789
+ };
790
+ }
791
+
792
+ /**
793
+ * Gobbles only identifiers
794
+ * e.g.: `foo`, `_value`, `$x1`
795
+ * Also, this function checks if that identifier is a literal:
796
+ * (e.g. `true`, `false`, `null`) or `this`
797
+ * @returns {jsep.Identifier}
798
+ */
799
+ gobbleIdentifier() {
800
+ let ch = this.code,
801
+ start = this.index;
802
+ if (Jsep.isIdentifierStart(ch)) {
803
+ this.index++;
804
+ } else {
805
+ this.throwError('Unexpected ' + this.char);
806
+ }
807
+ while (this.index < this.expr.length) {
808
+ ch = this.code;
809
+ if (Jsep.isIdentifierPart(ch)) {
810
+ this.index++;
811
+ } else {
812
+ break;
813
+ }
814
+ }
815
+ return {
816
+ type: Jsep.IDENTIFIER,
817
+ name: this.expr.slice(start, this.index)
818
+ };
819
+ }
820
+
821
+ /**
822
+ * Gobbles a list of arguments within the context of a function call
823
+ * or array literal. This function also assumes that the opening character
824
+ * `(` or `[` has already been gobbled, and gobbles expressions and commas
825
+ * until the terminator character `)` or `]` is encountered.
826
+ * e.g. `foo(bar, baz)`, `my_func()`, or `[bar, baz]`
827
+ * @param {number} termination
828
+ * @returns {jsep.Expression[]}
829
+ */
830
+ gobbleArguments(termination) {
831
+ const args = [];
832
+ let closed = false;
833
+ let separator_count = 0;
834
+ while (this.index < this.expr.length) {
835
+ this.gobbleSpaces();
836
+ let ch_i = this.code;
837
+ if (ch_i === termination) {
838
+ // done parsing
839
+ closed = true;
840
+ this.index++;
841
+ if (termination === Jsep.CPAREN_CODE && separator_count && separator_count >= args.length) {
842
+ this.throwError('Unexpected token ' + String.fromCharCode(termination));
843
+ }
844
+ break;
845
+ } else if (ch_i === Jsep.COMMA_CODE) {
846
+ // between expressions
847
+ this.index++;
848
+ separator_count++;
849
+ if (separator_count !== args.length) {
850
+ // missing argument
851
+ if (termination === Jsep.CPAREN_CODE) {
852
+ this.throwError('Unexpected token ,');
853
+ } else if (termination === Jsep.CBRACK_CODE) {
854
+ for (let arg = args.length; arg < separator_count; arg++) {
855
+ args.push(null);
856
+ }
857
+ }
858
+ }
859
+ } else if (args.length !== separator_count && separator_count !== 0) {
860
+ // NOTE: `&& separator_count !== 0` allows for either all commas, or all spaces as arguments
861
+ this.throwError('Expected comma');
862
+ } else {
863
+ const node = this.gobbleExpression();
864
+ if (!node || node.type === Jsep.COMPOUND) {
865
+ this.throwError('Expected comma');
866
+ }
867
+ args.push(node);
868
+ }
869
+ }
870
+ if (!closed) {
871
+ this.throwError('Expected ' + String.fromCharCode(termination));
872
+ }
873
+ return args;
874
+ }
875
+
876
+ /**
877
+ * Responsible for parsing a group of things within parentheses `()`
878
+ * that have no identifier in front (so not a function call)
879
+ * This function assumes that it needs to gobble the opening parenthesis
880
+ * and then tries to gobble everything within that parenthesis, assuming
881
+ * that the next thing it should see is the close parenthesis. If not,
882
+ * then the expression probably doesn't have a `)`
883
+ * @returns {boolean|jsep.Expression}
884
+ */
885
+ gobbleGroup() {
886
+ this.index++;
887
+ let nodes = this.gobbleExpressions(Jsep.CPAREN_CODE);
888
+ if (this.code === Jsep.CPAREN_CODE) {
889
+ this.index++;
890
+ if (nodes.length === 1) {
891
+ return nodes[0];
892
+ } else if (!nodes.length) {
893
+ return false;
894
+ } else {
895
+ return {
896
+ type: Jsep.SEQUENCE_EXP,
897
+ expressions: nodes
898
+ };
899
+ }
900
+ } else {
901
+ this.throwError('Unclosed (');
902
+ }
903
+ }
904
+
905
+ /**
906
+ * Responsible for parsing Array literals `[1, 2, 3]`
907
+ * This function assumes that it needs to gobble the opening bracket
908
+ * and then tries to gobble the expressions as arguments.
909
+ * @returns {jsep.ArrayExpression}
910
+ */
911
+ gobbleArray() {
912
+ this.index++;
913
+ return {
914
+ type: Jsep.ARRAY_EXP,
915
+ elements: this.gobbleArguments(Jsep.CBRACK_CODE)
916
+ };
917
+ }
918
+ }
919
+
920
+ // Static fields:
921
+ const hooks = new Hooks();
922
+ Object.assign(Jsep, {
923
+ hooks,
924
+ plugins: new Plugins(Jsep),
925
+ // Node Types
926
+ // ----------
927
+ // This is the full set of types that any JSEP node can be.
928
+ // Store them here to save space when minified
929
+ COMPOUND: 'Compound',
930
+ SEQUENCE_EXP: 'SequenceExpression',
931
+ IDENTIFIER: 'Identifier',
932
+ MEMBER_EXP: 'MemberExpression',
933
+ LITERAL: 'Literal',
934
+ THIS_EXP: 'ThisExpression',
935
+ CALL_EXP: 'CallExpression',
936
+ UNARY_EXP: 'UnaryExpression',
937
+ BINARY_EXP: 'BinaryExpression',
938
+ ARRAY_EXP: 'ArrayExpression',
939
+ TAB_CODE: 9,
940
+ LF_CODE: 10,
941
+ CR_CODE: 13,
942
+ SPACE_CODE: 32,
943
+ PERIOD_CODE: 46,
944
+ // '.'
945
+ COMMA_CODE: 44,
946
+ // ','
947
+ SQUOTE_CODE: 39,
948
+ // single quote
949
+ DQUOTE_CODE: 34,
950
+ // double quotes
951
+ OPAREN_CODE: 40,
952
+ // (
953
+ CPAREN_CODE: 41,
954
+ // )
955
+ OBRACK_CODE: 91,
956
+ // [
957
+ CBRACK_CODE: 93,
958
+ // ]
959
+ QUMARK_CODE: 63,
960
+ // ?
961
+ SEMCOL_CODE: 59,
962
+ // ;
963
+ COLON_CODE: 58,
964
+ // :
965
+
966
+ // Operations
967
+ // ----------
968
+ // Use a quickly-accessible map to store all of the unary operators
969
+ // Values are set to `1` (it really doesn't matter)
970
+ unary_ops: {
971
+ '-': 1,
972
+ '!': 1,
973
+ '~': 1,
974
+ '+': 1
975
+ },
976
+ // Also use a map for the binary operations but set their values to their
977
+ // binary precedence for quick reference (higher number = higher precedence)
978
+ // see [Order of operations](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)
979
+ binary_ops: {
980
+ '||': 1,
981
+ '??': 1,
982
+ '&&': 2,
983
+ '|': 3,
984
+ '^': 4,
985
+ '&': 5,
986
+ '==': 6,
987
+ '!=': 6,
988
+ '===': 6,
989
+ '!==': 6,
990
+ '<': 7,
991
+ '>': 7,
992
+ '<=': 7,
993
+ '>=': 7,
994
+ '<<': 8,
995
+ '>>': 8,
996
+ '>>>': 8,
997
+ '+': 9,
998
+ '-': 9,
999
+ '*': 10,
1000
+ '/': 10,
1001
+ '%': 10,
1002
+ '**': 11
1003
+ },
1004
+ // sets specific binary_ops as right-associative
1005
+ right_associative: new Set(['**']),
1006
+ // Additional valid identifier chars, apart from a-z, A-Z and 0-9 (except on the starting char)
1007
+ additional_identifier_chars: new Set(['$', '_']),
1008
+ // Literals
1009
+ // ----------
1010
+ // Store the values to return for the various literals we may encounter
1011
+ literals: {
1012
+ 'true': true,
1013
+ 'false': false,
1014
+ 'null': null
1015
+ },
1016
+ // Except for `this`, which is special. This could be changed to something like `'self'` as well
1017
+ this_str: 'this'
1018
+ });
1019
+ Jsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);
1020
+ Jsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);
1021
+
1022
+ // Backward Compatibility:
1023
+ const jsep = expr => new Jsep(expr).parse();
1024
+ const stdClassProps = Object.getOwnPropertyNames(class Test {});
1025
+ Object.getOwnPropertyNames(Jsep).filter(prop => !stdClassProps.includes(prop) && jsep[prop] === undefined).forEach(m => {
1026
+ jsep[m] = Jsep[m];
1027
+ });
1028
+ jsep.Jsep = Jsep; // allows for const { Jsep } = require('jsep');
1029
+
1030
+ const CONDITIONAL_EXP = 'ConditionalExpression';
1031
+ var ternary = {
1032
+ name: 'ternary',
1033
+ init(jsep) {
1034
+ // Ternary expression: test ? consequent : alternate
1035
+ jsep.hooks.add('after-expression', function gobbleTernary(env) {
1036
+ if (env.node && this.code === jsep.QUMARK_CODE) {
1037
+ this.index++;
1038
+ const test = env.node;
1039
+ const consequent = this.gobbleExpression();
1040
+ if (!consequent) {
1041
+ this.throwError('Expected expression');
1042
+ }
1043
+ this.gobbleSpaces();
1044
+ if (this.code === jsep.COLON_CODE) {
1045
+ this.index++;
1046
+ const alternate = this.gobbleExpression();
1047
+ if (!alternate) {
1048
+ this.throwError('Expected expression');
1049
+ }
1050
+ env.node = {
1051
+ type: CONDITIONAL_EXP,
1052
+ test,
1053
+ consequent,
1054
+ alternate
1055
+ };
1056
+
1057
+ // check for operators of higher priority than ternary (i.e. assignment)
1058
+ // jsep sets || at 1, and assignment at 0.9, and conditional should be between them
1059
+ if (test.operator && jsep.binary_ops[test.operator] <= 0.9) {
1060
+ let newTest = test;
1061
+ while (newTest.right.operator && jsep.binary_ops[newTest.right.operator] <= 0.9) {
1062
+ newTest = newTest.right;
1063
+ }
1064
+ env.node.test = newTest.right;
1065
+ newTest.right = env.node;
1066
+ env.node = test;
1067
+ }
1068
+ } else {
1069
+ this.throwError('Expected :');
1070
+ }
1071
+ }
1072
+ });
1073
+ }
1074
+ };
1075
+
1076
+ // Add default plugins:
1077
+
1078
+ jsep.plugins.register(ternary);
1079
+
1080
+ const FSLASH_CODE = 47; // '/'
1081
+ const BSLASH_CODE = 92; // '\\'
1082
+
1083
+ var index = {
1084
+ name: 'regex',
1085
+ init(jsep) {
1086
+ // Regex literal: /abc123/ig
1087
+ jsep.hooks.add('gobble-token', function gobbleRegexLiteral(env) {
1088
+ if (this.code === FSLASH_CODE) {
1089
+ const patternIndex = ++this.index;
1090
+ let inCharSet = false;
1091
+ while (this.index < this.expr.length) {
1092
+ if (this.code === FSLASH_CODE && !inCharSet) {
1093
+ const pattern = this.expr.slice(patternIndex, this.index);
1094
+ let flags = '';
1095
+ while (++this.index < this.expr.length) {
1096
+ const code = this.code;
1097
+ if (code >= 97 && code <= 122 // a...z
1098
+ || code >= 65 && code <= 90 // A...Z
1099
+ || code >= 48 && code <= 57) {
1100
+ // 0-9
1101
+ flags += this.char;
1102
+ } else {
1103
+ break;
1104
+ }
1105
+ }
1106
+ let value;
1107
+ try {
1108
+ value = new RegExp(pattern, flags);
1109
+ } catch (e) {
1110
+ this.throwError(e.message);
1111
+ }
1112
+ env.node = {
1113
+ type: jsep.LITERAL,
1114
+ value,
1115
+ raw: this.expr.slice(patternIndex - 1, this.index)
1116
+ };
1117
+
1118
+ // allow . [] and () after regex: /regex/.test(a)
1119
+ env.node = this.gobbleTokenProperty(env.node);
1120
+ return env.node;
1121
+ }
1122
+ if (this.code === jsep.OBRACK_CODE) {
1123
+ inCharSet = true;
1124
+ } else if (inCharSet && this.code === jsep.CBRACK_CODE) {
1125
+ inCharSet = false;
1126
+ }
1127
+ this.index += this.code === BSLASH_CODE ? 2 : 1;
1128
+ }
1129
+ this.throwError('Unclosed Regex');
1130
+ }
1131
+ });
1132
+ }
1133
+ };
1134
+
1135
+ const PLUS_CODE = 43; // +
1136
+ const MINUS_CODE = 45; // -
1137
+
1138
+ const plugin = {
1139
+ name: 'assignment',
1140
+ assignmentOperators: new Set(['=', '*=', '**=', '/=', '%=', '+=', '-=', '<<=', '>>=', '>>>=', '&=', '^=', '|=', '||=', '&&=', '??=']),
1141
+ updateOperators: [PLUS_CODE, MINUS_CODE],
1142
+ assignmentPrecedence: 0.9,
1143
+ init(jsep) {
1144
+ const updateNodeTypes = [jsep.IDENTIFIER, jsep.MEMBER_EXP];
1145
+ plugin.assignmentOperators.forEach(op => jsep.addBinaryOp(op, plugin.assignmentPrecedence, true));
1146
+ jsep.hooks.add('gobble-token', function gobbleUpdatePrefix(env) {
1147
+ const code = this.code;
1148
+ if (plugin.updateOperators.some(c => c === code && c === this.expr.charCodeAt(this.index + 1))) {
1149
+ this.index += 2;
1150
+ env.node = {
1151
+ type: 'UpdateExpression',
1152
+ operator: code === PLUS_CODE ? '++' : '--',
1153
+ argument: this.gobbleTokenProperty(this.gobbleIdentifier()),
1154
+ prefix: true
1155
+ };
1156
+ if (!env.node.argument || !updateNodeTypes.includes(env.node.argument.type)) {
1157
+ this.throwError(`Unexpected ${env.node.operator}`);
1158
+ }
1159
+ }
1160
+ });
1161
+ jsep.hooks.add('after-token', function gobbleUpdatePostfix(env) {
1162
+ if (env.node) {
1163
+ const code = this.code;
1164
+ if (plugin.updateOperators.some(c => c === code && c === this.expr.charCodeAt(this.index + 1))) {
1165
+ if (!updateNodeTypes.includes(env.node.type)) {
1166
+ this.throwError(`Unexpected ${env.node.operator}`);
1167
+ }
1168
+ this.index += 2;
1169
+ env.node = {
1170
+ type: 'UpdateExpression',
1171
+ operator: code === PLUS_CODE ? '++' : '--',
1172
+ argument: env.node,
1173
+ prefix: false
1174
+ };
1175
+ }
1176
+ }
1177
+ });
1178
+ jsep.hooks.add('after-expression', function gobbleAssignment(env) {
1179
+ if (env.node) {
1180
+ // Note: Binaries can be chained in a single expression to respect
1181
+ // operator precedence (i.e. a = b = 1 + 2 + 3)
1182
+ // Update all binary assignment nodes in the tree
1183
+ updateBinariesToAssignments(env.node);
1184
+ }
1185
+ });
1186
+ function updateBinariesToAssignments(node) {
1187
+ if (plugin.assignmentOperators.has(node.operator)) {
1188
+ node.type = 'AssignmentExpression';
1189
+ updateBinariesToAssignments(node.left);
1190
+ updateBinariesToAssignments(node.right);
1191
+ } else if (!node.operator) {
1192
+ Object.values(node).forEach(val => {
1193
+ if (val && typeof val === 'object') {
1194
+ updateBinariesToAssignments(val);
1195
+ }
1196
+ });
1197
+ }
1198
+ }
1199
+ }
1200
+ };
1201
+
1202
+ /* eslint-disable no-bitwise -- Convenient */
1203
+
1204
+ // register plugins
1205
+ jsep.plugins.register(index, plugin);
1206
+ jsep.addUnaryOp('typeof');
1207
+ jsep.addUnaryOp('void');
1208
+ jsep.addLiteral('null', null);
1209
+ jsep.addLiteral('undefined', undefined);
1210
+ const BLOCKED_PROTO_PROPERTIES = new Set(['constructor', '__proto__', '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__']);
1211
+ const SafeEval = {
1212
+ /**
1213
+ * @param {jsep.Expression} ast
1214
+ * @param {Record<string, any>} subs
1215
+ */
1216
+ evalAst(ast, subs) {
1217
+ switch (ast.type) {
1218
+ case 'BinaryExpression':
1219
+ case 'LogicalExpression':
1220
+ return SafeEval.evalBinaryExpression(ast, subs);
1221
+ case 'Compound':
1222
+ return SafeEval.evalCompound(ast, subs);
1223
+ case 'ConditionalExpression':
1224
+ return SafeEval.evalConditionalExpression(ast, subs);
1225
+ case 'Identifier':
1226
+ return SafeEval.evalIdentifier(ast, subs);
1227
+ case 'Literal':
1228
+ return SafeEval.evalLiteral(ast, subs);
1229
+ case 'MemberExpression':
1230
+ return SafeEval.evalMemberExpression(ast, subs);
1231
+ case 'UnaryExpression':
1232
+ return SafeEval.evalUnaryExpression(ast, subs);
1233
+ case 'ArrayExpression':
1234
+ return SafeEval.evalArrayExpression(ast, subs);
1235
+ case 'CallExpression':
1236
+ return SafeEval.evalCallExpression(ast, subs);
1237
+ case 'AssignmentExpression':
1238
+ return SafeEval.evalAssignmentExpression(ast, subs);
1239
+ default:
1240
+ throw SyntaxError('Unexpected expression', ast);
1241
+ }
1242
+ },
1243
+ evalBinaryExpression(ast, subs) {
1244
+ const result = {
1245
+ '||': (a, b) => a || b(),
1246
+ '&&': (a, b) => a && b(),
1247
+ '|': (a, b) => a | b(),
1248
+ '^': (a, b) => a ^ b(),
1249
+ '&': (a, b) => a & b(),
1250
+ // eslint-disable-next-line eqeqeq -- API
1251
+ '==': (a, b) => a == b(),
1252
+ // eslint-disable-next-line eqeqeq -- API
1253
+ '!=': (a, b) => a != b(),
1254
+ '===': (a, b) => a === b(),
1255
+ '!==': (a, b) => a !== b(),
1256
+ '<': (a, b) => a < b(),
1257
+ '>': (a, b) => a > b(),
1258
+ '<=': (a, b) => a <= b(),
1259
+ '>=': (a, b) => a >= b(),
1260
+ '<<': (a, b) => a << b(),
1261
+ '>>': (a, b) => a >> b(),
1262
+ '>>>': (a, b) => a >>> b(),
1263
+ '+': (a, b) => a + b(),
1264
+ '-': (a, b) => a - b(),
1265
+ '*': (a, b) => a * b(),
1266
+ '/': (a, b) => a / b(),
1267
+ '%': (a, b) => a % b()
1268
+ }[ast.operator](SafeEval.evalAst(ast.left, subs), () => SafeEval.evalAst(ast.right, subs));
1269
+ return result;
1270
+ },
1271
+ evalCompound(ast, subs) {
1272
+ let last;
1273
+ for (let i = 0; i < ast.body.length; i++) {
1274
+ if (ast.body[i].type === 'Identifier' && ['var', 'let', 'const'].includes(ast.body[i].name) && ast.body[i + 1] && ast.body[i + 1].type === 'AssignmentExpression') {
1275
+ // var x=2; is detected as
1276
+ // [{Identifier var}, {AssignmentExpression x=2}]
1277
+ // eslint-disable-next-line @stylistic/max-len -- Long
1278
+ // eslint-disable-next-line sonarjs/updated-loop-counter -- Convenient
1279
+ i += 1;
1280
+ }
1281
+ const expr = ast.body[i];
1282
+ last = SafeEval.evalAst(expr, subs);
1283
+ }
1284
+ return last;
1285
+ },
1286
+ evalConditionalExpression(ast, subs) {
1287
+ if (SafeEval.evalAst(ast.test, subs)) {
1288
+ return SafeEval.evalAst(ast.consequent, subs);
1289
+ }
1290
+ return SafeEval.evalAst(ast.alternate, subs);
1291
+ },
1292
+ evalIdentifier(ast, subs) {
1293
+ if (Object.hasOwn(subs, ast.name)) {
1294
+ return subs[ast.name];
1295
+ }
1296
+ throw ReferenceError(`${ast.name} is not defined`);
1297
+ },
1298
+ evalLiteral(ast) {
1299
+ return ast.value;
1300
+ },
1301
+ evalMemberExpression(ast, subs) {
1302
+ const prop = String(
1303
+ // NOTE: `String(value)` throws error when
1304
+ // value has overwritten the toString method to return non-string
1305
+ // i.e. `value = {toString: () => []}`
1306
+ ast.computed ? SafeEval.evalAst(ast.property) // `object[property]`
1307
+ : ast.property.name // `object.property` property is Identifier
1308
+ );
1309
+ const obj = SafeEval.evalAst(ast.object, subs);
1310
+ if (obj === undefined || obj === null) {
1311
+ throw TypeError(`Cannot read properties of ${obj} (reading '${prop}')`);
1312
+ }
1313
+ if (!Object.hasOwn(obj, prop) && BLOCKED_PROTO_PROPERTIES.has(prop)) {
1314
+ throw TypeError(`Cannot read properties of ${obj} (reading '${prop}')`);
1315
+ }
1316
+ const result = obj[prop];
1317
+ if (typeof result === 'function') {
1318
+ return result.bind(obj); // arrow functions aren't affected by bind.
1319
+ }
1320
+ return result;
1321
+ },
1322
+ evalUnaryExpression(ast, subs) {
1323
+ const result = {
1324
+ '-': a => -SafeEval.evalAst(a, subs),
1325
+ '!': a => !SafeEval.evalAst(a, subs),
1326
+ '~': a => ~SafeEval.evalAst(a, subs),
1327
+ // eslint-disable-next-line no-implicit-coercion -- API
1328
+ '+': a => +SafeEval.evalAst(a, subs),
1329
+ typeof: a => typeof SafeEval.evalAst(a, subs),
1330
+ // eslint-disable-next-line no-void, sonarjs/void-use -- feature
1331
+ void: a => void SafeEval.evalAst(a, subs)
1332
+ }[ast.operator](ast.argument);
1333
+ return result;
1334
+ },
1335
+ evalArrayExpression(ast, subs) {
1336
+ return ast.elements.map(el => SafeEval.evalAst(el, subs));
1337
+ },
1338
+ evalCallExpression(ast, subs) {
1339
+ const args = ast.arguments.map(arg => SafeEval.evalAst(arg, subs));
1340
+ const func = SafeEval.evalAst(ast.callee, subs);
1341
+ /* c8 ignore start */
1342
+ if (func === Function) {
1343
+ // unreachable since BLOCKED_PROTO_PROPERTIES includes 'constructor'
1344
+ throw new Error('Function constructor is disabled');
1345
+ }
1346
+ /* c8 ignore end */
1347
+ return func(...args);
1348
+ },
1349
+ evalAssignmentExpression(ast, subs) {
1350
+ if (ast.left.type !== 'Identifier') {
1351
+ throw SyntaxError('Invalid left-hand side in assignment');
1352
+ }
1353
+ const id = ast.left.name;
1354
+ const value = SafeEval.evalAst(ast.right, subs);
1355
+ subs[id] = value;
1356
+ return subs[id];
1357
+ }
1358
+ };
1359
+
1360
+ /**
1361
+ * A replacement for NodeJS' VM.Script which is also {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP | Content Security Policy} friendly.
1362
+ */
1363
+ class SafeScript {
1364
+ /**
1365
+ * @param {string} expr Expression to evaluate
1366
+ */
1367
+ constructor(expr) {
1368
+ this.code = expr;
1369
+ this.ast = jsep(this.code);
1370
+ }
1371
+
1372
+ /**
1373
+ * @param {object} context Object whose items will be added
1374
+ * to evaluation
1375
+ * @returns {EvaluatedResult} Result of evaluated code
1376
+ */
1377
+ runInNewContext(context) {
1378
+ // `Object.create(null)` creates a prototypeless object
1379
+ const keyMap = Object.assign(Object.create(null), context);
1380
+ return SafeEval.evalAst(this.ast, keyMap);
1381
+ }
1382
+ }
1383
+
1384
+ /* eslint-disable camelcase -- Convenient for escaping */
1385
+
1386
+
1387
+ /**
1388
+ * @typedef {null|boolean|number|string|object|GenericArray} JSONObject
1389
+ */
1390
+
1391
+ /**
1392
+ * @typedef {any} AnyItem
1393
+ */
1394
+
1395
+ /**
1396
+ * @typedef {any} AnyResult
1397
+ */
1398
+
1399
+ /**
1400
+ * Copies array and then pushes item into it.
1401
+ * @param {GenericArray} arr Array to copy and into which to push
1402
+ * @param {AnyItem} item Array item to add (to end)
1403
+ * @returns {GenericArray} Copy of the original array
1404
+ */
1405
+ function push(arr, item) {
1406
+ arr = arr.slice();
1407
+ arr.push(item);
1408
+ return arr;
1409
+ }
1410
+ /**
1411
+ * Copies array and then unshifts item into it.
1412
+ * @param {AnyItem} item Array item to add (to beginning)
1413
+ * @param {GenericArray} arr Array to copy and into which to unshift
1414
+ * @returns {GenericArray} Copy of the original array
1415
+ */
1416
+ function unshift(item, arr) {
1417
+ arr = arr.slice();
1418
+ arr.unshift(item);
1419
+ return arr;
1420
+ }
1421
+
1422
+ /**
1423
+ * Caught when JSONPath is used without `new` but rethrown if with `new`
1424
+ * @extends Error
1425
+ */
1426
+ class NewError extends Error {
1427
+ /**
1428
+ * @param {AnyResult} value The evaluated scalar value
1429
+ */
1430
+ constructor(value) {
1431
+ super('JSONPath should not be called with "new" (it prevents return ' + 'of (unwrapped) scalar values)');
1432
+ this.avoidNew = true;
1433
+ this.value = value;
1434
+ this.name = 'NewError';
1435
+ }
1436
+ }
1437
+
1438
+ /**
1439
+ * @typedef {object} ReturnObject
1440
+ * @property {string} path
1441
+ * @property {JSONObject} value
1442
+ * @property {object|GenericArray} parent
1443
+ * @property {string} parentProperty
1444
+ */
1445
+
1446
+ /**
1447
+ * @callback JSONPathCallback
1448
+ * @param {string|object} preferredOutput
1449
+ * @param {"value"|"property"} type
1450
+ * @param {ReturnObject} fullRetObj
1451
+ * @returns {void}
1452
+ */
1453
+
1454
+ /**
1455
+ * @callback OtherTypeCallback
1456
+ * @param {JSONObject} val
1457
+ * @param {string} path
1458
+ * @param {object|GenericArray} parent
1459
+ * @param {string} parentPropName
1460
+ * @returns {boolean}
1461
+ */
1462
+
1463
+ /**
1464
+ * @typedef {any} ContextItem
1465
+ */
1466
+
1467
+ /**
1468
+ * @typedef {any} EvaluatedResult
1469
+ */
1470
+
1471
+ /**
1472
+ * @callback EvalCallback
1473
+ * @param {string} code
1474
+ * @param {ContextItem} context
1475
+ * @returns {EvaluatedResult}
1476
+ */
1477
+
1478
+ /**
1479
+ * @typedef {typeof SafeScript} EvalClass
1480
+ */
1481
+
1482
+ /**
1483
+ * @typedef {object} JSONPathOptions
1484
+ * @property {JSON} json
1485
+ * @property {string|string[]} path
1486
+ * @property {"value"|"path"|"pointer"|"parent"|"parentProperty"|
1487
+ * "all"} [resultType="value"]
1488
+ * @property {boolean} [flatten=false]
1489
+ * @property {boolean} [wrap=true]
1490
+ * @property {object} [sandbox={}]
1491
+ * @property {EvalCallback|EvalClass|'safe'|'native'|
1492
+ * boolean} [eval = 'safe']
1493
+ * @property {object|GenericArray|null} [parent=null]
1494
+ * @property {string|null} [parentProperty=null]
1495
+ * @property {JSONPathCallback} [callback]
1496
+ * @property {OtherTypeCallback} [otherTypeCallback] Defaults to
1497
+ * function which throws on encountering `@other`
1498
+ * @property {boolean} [autostart=true]
1499
+ */
1500
+
1501
+ /**
1502
+ * @param {string|JSONPathOptions} opts If a string, will be treated as `expr`
1503
+ * @param {string} [expr] JSON path to evaluate
1504
+ * @param {JSON} [obj] JSON object to evaluate against
1505
+ * @param {JSONPathCallback} [callback] Passed 3 arguments: 1) desired payload
1506
+ * per `resultType`, 2) `"value"|"property"`, 3) Full returned object with
1507
+ * all payloads
1508
+ * @param {OtherTypeCallback} [otherTypeCallback] If `@other()` is at the end
1509
+ * of one's query, this will be invoked with the value of the item, its
1510
+ * path, its parent, and its parent's property name, and it should return
1511
+ * a boolean indicating whether the supplied value belongs to the "other"
1512
+ * type or not (or it may handle transformations and return `false`).
1513
+ * @returns {JSONPath}
1514
+ * @class
1515
+ */
1516
+ function JSONPath(opts, expr, obj, callback, otherTypeCallback) {
1517
+ // eslint-disable-next-line no-restricted-syntax -- Allow for pseudo-class
1518
+ if (!(this instanceof JSONPath)) {
1519
+ try {
1520
+ return new JSONPath(opts, expr, obj, callback, otherTypeCallback);
1521
+ } catch (e) {
1522
+ if (!e.avoidNew) {
1523
+ throw e;
1524
+ }
1525
+ return e.value;
1526
+ }
1527
+ }
1528
+ if (typeof opts === 'string') {
1529
+ otherTypeCallback = callback;
1530
+ callback = obj;
1531
+ obj = expr;
1532
+ expr = opts;
1533
+ opts = null;
1534
+ }
1535
+ const optObj = opts && typeof opts === 'object';
1536
+ opts = opts || {};
1537
+ this.json = opts.json || obj;
1538
+ this.path = opts.path || expr;
1539
+ this.resultType = opts.resultType || 'value';
1540
+ this.flatten = opts.flatten || false;
1541
+ this.wrap = Object.hasOwn(opts, 'wrap') ? opts.wrap : true;
1542
+ this.sandbox = opts.sandbox || {};
1543
+ this.eval = opts.eval === undefined ? 'safe' : opts.eval;
1544
+ this.ignoreEvalErrors = typeof opts.ignoreEvalErrors === 'undefined' ? false : opts.ignoreEvalErrors;
1545
+ this.parent = opts.parent || null;
1546
+ this.parentProperty = opts.parentProperty || null;
1547
+ this.callback = opts.callback || callback || null;
1548
+ this.otherTypeCallback = opts.otherTypeCallback || otherTypeCallback || function () {
1549
+ throw new TypeError('You must supply an otherTypeCallback callback option ' + 'with the @other() operator.');
1550
+ };
1551
+ if (opts.autostart !== false) {
1552
+ const args = {
1553
+ path: optObj ? opts.path : expr
1554
+ };
1555
+ if (!optObj) {
1556
+ args.json = obj;
1557
+ } else if ('json' in opts) {
1558
+ args.json = opts.json;
1559
+ }
1560
+ const ret = this.evaluate(args);
1561
+ if (!ret || typeof ret !== 'object') {
1562
+ throw new NewError(ret);
1563
+ }
1564
+ return ret;
1565
+ }
1566
+ }
1567
+
1568
+ // PUBLIC METHODS
1569
+ JSONPath.prototype.evaluate = function (expr, json, callback, otherTypeCallback) {
1570
+ let currParent = this.parent,
1571
+ currParentProperty = this.parentProperty;
1572
+ let {
1573
+ flatten,
1574
+ wrap
1575
+ } = this;
1576
+ this.currResultType = this.resultType;
1577
+ this.currEval = this.eval;
1578
+ this.currSandbox = this.sandbox;
1579
+ callback = callback || this.callback;
1580
+ this.currOtherTypeCallback = otherTypeCallback || this.otherTypeCallback;
1581
+ json = json || this.json;
1582
+ expr = expr || this.path;
1583
+ if (expr && typeof expr === 'object' && !Array.isArray(expr)) {
1584
+ if (!expr.path && expr.path !== '') {
1585
+ throw new TypeError('You must supply a "path" property when providing an object ' + 'argument to JSONPath.evaluate().');
1586
+ }
1587
+ if (!Object.hasOwn(expr, 'json')) {
1588
+ throw new TypeError('You must supply a "json" property when providing an object ' + 'argument to JSONPath.evaluate().');
1589
+ }
1590
+ ({
1591
+ json
1592
+ } = expr);
1593
+ flatten = Object.hasOwn(expr, 'flatten') ? expr.flatten : flatten;
1594
+ this.currResultType = Object.hasOwn(expr, 'resultType') ? expr.resultType : this.currResultType;
1595
+ this.currSandbox = Object.hasOwn(expr, 'sandbox') ? expr.sandbox : this.currSandbox;
1596
+ wrap = Object.hasOwn(expr, 'wrap') ? expr.wrap : wrap;
1597
+ this.currEval = Object.hasOwn(expr, 'eval') ? expr.eval : this.currEval;
1598
+ callback = Object.hasOwn(expr, 'callback') ? expr.callback : callback;
1599
+ this.currOtherTypeCallback = Object.hasOwn(expr, 'otherTypeCallback') ? expr.otherTypeCallback : this.currOtherTypeCallback;
1600
+ currParent = Object.hasOwn(expr, 'parent') ? expr.parent : currParent;
1601
+ currParentProperty = Object.hasOwn(expr, 'parentProperty') ? expr.parentProperty : currParentProperty;
1602
+ expr = expr.path;
1603
+ }
1604
+ currParent = currParent || null;
1605
+ currParentProperty = currParentProperty || null;
1606
+ if (Array.isArray(expr)) {
1607
+ expr = JSONPath.toPathString(expr);
1608
+ }
1609
+ if (!expr && expr !== '' || !json) {
1610
+ return undefined;
1611
+ }
1612
+ const exprList = JSONPath.toPathArray(expr);
1613
+ if (exprList[0] === '$' && exprList.length > 1) {
1614
+ exprList.shift();
1615
+ }
1616
+ this._hasParentSelector = null;
1617
+ const result = this._trace(exprList, json, ['$'], currParent, currParentProperty, callback).filter(function (ea) {
1618
+ return ea && !ea.isParentSelector;
1619
+ });
1620
+ if (!result.length) {
1621
+ return wrap ? [] : undefined;
1622
+ }
1623
+ if (!wrap && result.length === 1 && !result[0].hasArrExpr) {
1624
+ return this._getPreferredOutput(result[0]);
1625
+ }
1626
+ return result.reduce((rslt, ea) => {
1627
+ const valOrPath = this._getPreferredOutput(ea);
1628
+ if (flatten && Array.isArray(valOrPath)) {
1629
+ rslt = rslt.concat(valOrPath);
1630
+ } else {
1631
+ rslt.push(valOrPath);
1632
+ }
1633
+ return rslt;
1634
+ }, []);
1635
+ };
1636
+
1637
+ // PRIVATE METHODS
1638
+
1639
+ JSONPath.prototype._getPreferredOutput = function (ea) {
1640
+ const resultType = this.currResultType;
1641
+ switch (resultType) {
1642
+ case 'all':
1643
+ {
1644
+ const path = Array.isArray(ea.path) ? ea.path : JSONPath.toPathArray(ea.path);
1645
+ ea.pointer = JSONPath.toPointer(path);
1646
+ ea.path = typeof ea.path === 'string' ? ea.path : JSONPath.toPathString(ea.path);
1647
+ return ea;
1648
+ }
1649
+ case 'value':
1650
+ case 'parent':
1651
+ case 'parentProperty':
1652
+ return ea[resultType];
1653
+ case 'path':
1654
+ return JSONPath.toPathString(ea[resultType]);
1655
+ case 'pointer':
1656
+ return JSONPath.toPointer(ea.path);
1657
+ default:
1658
+ throw new TypeError('Unknown result type');
1659
+ }
1660
+ };
1661
+ JSONPath.prototype._handleCallback = function (fullRetObj, callback, type) {
1662
+ if (callback) {
1663
+ const preferredOutput = this._getPreferredOutput(fullRetObj);
1664
+ fullRetObj.path = typeof fullRetObj.path === 'string' ? fullRetObj.path : JSONPath.toPathString(fullRetObj.path);
1665
+ // eslint-disable-next-line n/callback-return -- No need to return
1666
+ callback(preferredOutput, type, fullRetObj);
1667
+ }
1668
+ };
1669
+
1670
+ /**
1671
+ *
1672
+ * @param {string} expr
1673
+ * @param {JSONObject} val
1674
+ * @param {string} path
1675
+ * @param {object|GenericArray} parent
1676
+ * @param {string} parentPropName
1677
+ * @param {JSONPathCallback} callback
1678
+ * @param {boolean} hasArrExpr
1679
+ * @param {boolean} literalPriority
1680
+ * @returns {ReturnObject|ReturnObject[]}
1681
+ */
1682
+ JSONPath.prototype._trace = function (expr, val, path, parent, parentPropName, callback, hasArrExpr, literalPriority) {
1683
+ // No expr to follow? return path and value as the result of
1684
+ // this trace branch
1685
+ let retObj;
1686
+ if (!expr.length) {
1687
+ retObj = {
1688
+ path,
1689
+ value: val,
1690
+ parent,
1691
+ parentProperty: parentPropName,
1692
+ hasArrExpr
1693
+ };
1694
+ this._handleCallback(retObj, callback, 'value');
1695
+ return retObj;
1696
+ }
1697
+ const loc = expr[0],
1698
+ x = expr.slice(1);
1699
+
1700
+ // We need to gather the return value of recursive trace calls in order to
1701
+ // do the parent sel computation.
1702
+ const ret = [];
1703
+ /**
1704
+ *
1705
+ * @param {ReturnObject|ReturnObject[]} elems
1706
+ * @returns {void}
1707
+ */
1708
+ function addRet(elems) {
1709
+ if (Array.isArray(elems)) {
1710
+ // This was causing excessive stack size in Node (with or
1711
+ // without Babel) against our performance test:
1712
+ // `ret.push(...elems);`
1713
+ elems.forEach(t => {
1714
+ ret.push(t);
1715
+ });
1716
+ } else {
1717
+ ret.push(elems);
1718
+ }
1719
+ }
1720
+ if ((typeof loc !== 'string' || literalPriority) && val && Object.hasOwn(val, loc)) {
1721
+ // simple case--directly follow property
1722
+ addRet(this._trace(x, val[loc], push(path, loc), val, loc, callback, hasArrExpr));
1723
+ // eslint-disable-next-line unicorn/prefer-switch -- Part of larger `if`
1724
+ } else if (loc === '*') {
1725
+ // all child properties
1726
+ this._walk(val, m => {
1727
+ addRet(this._trace(x, val[m], push(path, m), val, m, callback, true, true));
1728
+ });
1729
+ } else if (loc === '..') {
1730
+ // all descendent parent properties
1731
+ // Check remaining expression with val's immediate children
1732
+ addRet(this._trace(x, val, path, parent, parentPropName, callback, hasArrExpr));
1733
+ this._walk(val, m => {
1734
+ // We don't join m and x here because we only want parents,
1735
+ // not scalar values
1736
+ if (typeof val[m] === 'object') {
1737
+ // Keep going with recursive descent on val's
1738
+ // object children
1739
+ addRet(this._trace(expr.slice(), val[m], push(path, m), val, m, callback, true));
1740
+ }
1741
+ });
1742
+ // The parent sel computation is handled in the frame above using the
1743
+ // ancestor object of val
1744
+ } else if (loc === '^') {
1745
+ // This is not a final endpoint, so we do not invoke the callback here
1746
+ this._hasParentSelector = true;
1747
+ return {
1748
+ path: path.slice(0, -1),
1749
+ expr: x,
1750
+ isParentSelector: true
1751
+ };
1752
+ } else if (loc === '~') {
1753
+ // property name
1754
+ retObj = {
1755
+ path: push(path, loc),
1756
+ value: parentPropName,
1757
+ parent,
1758
+ parentProperty: null
1759
+ };
1760
+ this._handleCallback(retObj, callback, 'property');
1761
+ return retObj;
1762
+ } else if (loc === '$') {
1763
+ // root only
1764
+ addRet(this._trace(x, val, path, null, null, callback, hasArrExpr));
1765
+ } else if (/^(-?\d*):(-?\d*):?(\d*)$/u.test(loc)) {
1766
+ // [start:end:step] Python slice syntax
1767
+ addRet(this._slice(loc, x, val, path, parent, parentPropName, callback));
1768
+ } else if (loc.indexOf('?(') === 0) {
1769
+ // [?(expr)] (filtering)
1770
+ if (this.currEval === false) {
1771
+ throw new Error('Eval [?(expr)] prevented in JSONPath expression.');
1772
+ }
1773
+ const safeLoc = loc.replace(/^\?\((.*?)\)$/u, '$1');
1774
+ // check for a nested filter expression
1775
+ const nested = /@.?([^?]*)[['](\??\(.*?\))(?!.\)\])[\]']/gu.exec(safeLoc);
1776
+ if (nested) {
1777
+ // find if there are matches in the nested expression
1778
+ // add them to the result set if there is at least one match
1779
+ this._walk(val, m => {
1780
+ const npath = [nested[2]];
1781
+ const nvalue = nested[1] ? val[m][nested[1]] : val[m];
1782
+ const filterResults = this._trace(npath, nvalue, path, parent, parentPropName, callback, true);
1783
+ if (filterResults.length > 0) {
1784
+ addRet(this._trace(x, val[m], push(path, m), val, m, callback, true));
1785
+ }
1786
+ });
1787
+ } else {
1788
+ this._walk(val, m => {
1789
+ if (this._eval(safeLoc, val[m], m, path, parent, parentPropName)) {
1790
+ addRet(this._trace(x, val[m], push(path, m), val, m, callback, true));
1791
+ }
1792
+ });
1793
+ }
1794
+ } else if (loc[0] === '(') {
1795
+ // [(expr)] (dynamic property/index)
1796
+ if (this.currEval === false) {
1797
+ throw new Error('Eval [(expr)] prevented in JSONPath expression.');
1798
+ }
1799
+ // As this will resolve to a property name (but we don't know it
1800
+ // yet), property and parent information is relative to the
1801
+ // parent of the property to which this expression will resolve
1802
+ addRet(this._trace(unshift(this._eval(loc, val, path.at(-1), path.slice(0, -1), parent, parentPropName), x), val, path, parent, parentPropName, callback, hasArrExpr));
1803
+ } else if (loc[0] === '@') {
1804
+ // value type: @boolean(), etc.
1805
+ let addType = false;
1806
+ const valueType = loc.slice(1, -2);
1807
+ switch (valueType) {
1808
+ case 'scalar':
1809
+ if (!val || !['object', 'function'].includes(typeof val)) {
1810
+ addType = true;
1811
+ }
1812
+ break;
1813
+ case 'boolean':
1814
+ case 'string':
1815
+ case 'undefined':
1816
+ case 'function':
1817
+ if (typeof val === valueType) {
1818
+ addType = true;
1819
+ }
1820
+ break;
1821
+ case 'integer':
1822
+ if (Number.isFinite(val) && !(val % 1)) {
1823
+ addType = true;
1824
+ }
1825
+ break;
1826
+ case 'number':
1827
+ if (Number.isFinite(val)) {
1828
+ addType = true;
1829
+ }
1830
+ break;
1831
+ case 'nonFinite':
1832
+ if (typeof val === 'number' && !Number.isFinite(val)) {
1833
+ addType = true;
1834
+ }
1835
+ break;
1836
+ case 'object':
1837
+ if (val && typeof val === valueType) {
1838
+ addType = true;
1839
+ }
1840
+ break;
1841
+ case 'array':
1842
+ if (Array.isArray(val)) {
1843
+ addType = true;
1844
+ }
1845
+ break;
1846
+ case 'other':
1847
+ addType = this.currOtherTypeCallback(val, path, parent, parentPropName);
1848
+ break;
1849
+ case 'null':
1850
+ if (val === null) {
1851
+ addType = true;
1852
+ }
1853
+ break;
1854
+ /* c8 ignore next 2 */
1855
+ default:
1856
+ throw new TypeError('Unknown value type ' + valueType);
1857
+ }
1858
+ if (addType) {
1859
+ retObj = {
1860
+ path,
1861
+ value: val,
1862
+ parent,
1863
+ parentProperty: parentPropName
1864
+ };
1865
+ this._handleCallback(retObj, callback, 'value');
1866
+ return retObj;
1867
+ }
1868
+ // `-escaped property
1869
+ } else if (loc[0] === '`' && val && Object.hasOwn(val, loc.slice(1))) {
1870
+ const locProp = loc.slice(1);
1871
+ addRet(this._trace(x, val[locProp], push(path, locProp), val, locProp, callback, hasArrExpr, true));
1872
+ } else if (loc.includes(',')) {
1873
+ // [name1,name2,...]
1874
+ const parts = loc.split(',');
1875
+ for (const part of parts) {
1876
+ addRet(this._trace(unshift(part, x), val, path, parent, parentPropName, callback, true));
1877
+ }
1878
+ // simple case--directly follow property
1879
+ } else if (!literalPriority && val && Object.hasOwn(val, loc)) {
1880
+ addRet(this._trace(x, val[loc], push(path, loc), val, loc, callback, hasArrExpr, true));
1881
+ }
1882
+
1883
+ // We check the resulting values for parent selections. For parent
1884
+ // selections we discard the value object and continue the trace with the
1885
+ // current val object
1886
+ if (this._hasParentSelector) {
1887
+ for (let t = 0; t < ret.length; t++) {
1888
+ const rett = ret[t];
1889
+ if (rett && rett.isParentSelector) {
1890
+ const tmp = this._trace(rett.expr, val, rett.path, parent, parentPropName, callback, hasArrExpr);
1891
+ if (Array.isArray(tmp)) {
1892
+ ret[t] = tmp[0];
1893
+ const tl = tmp.length;
1894
+ for (let tt = 1; tt < tl; tt++) {
1895
+ // eslint-disable-next-line @stylistic/max-len -- Long
1896
+ // eslint-disable-next-line sonarjs/updated-loop-counter -- Convenient
1897
+ t++;
1898
+ ret.splice(t, 0, tmp[tt]);
1899
+ }
1900
+ } else {
1901
+ ret[t] = tmp;
1902
+ }
1903
+ }
1904
+ }
1905
+ }
1906
+ return ret;
1907
+ };
1908
+ JSONPath.prototype._walk = function (val, f) {
1909
+ if (Array.isArray(val)) {
1910
+ const n = val.length;
1911
+ for (let i = 0; i < n; i++) {
1912
+ f(i);
1913
+ }
1914
+ } else if (val && typeof val === 'object') {
1915
+ Object.keys(val).forEach(m => {
1916
+ f(m);
1917
+ });
1918
+ }
1919
+ };
1920
+ JSONPath.prototype._slice = function (loc, expr, val, path, parent, parentPropName, callback) {
1921
+ if (!Array.isArray(val)) {
1922
+ return undefined;
1923
+ }
1924
+ const len = val.length,
1925
+ parts = loc.split(':'),
1926
+ step = parts[2] && Number.parseInt(parts[2]) || 1;
1927
+ let start = parts[0] && Number.parseInt(parts[0]) || 0,
1928
+ end = parts[1] && Number.parseInt(parts[1]) || len;
1929
+ start = start < 0 ? Math.max(0, start + len) : Math.min(len, start);
1930
+ end = end < 0 ? Math.max(0, end + len) : Math.min(len, end);
1931
+ const ret = [];
1932
+ for (let i = start; i < end; i += step) {
1933
+ const tmp = this._trace(unshift(i, expr), val, path, parent, parentPropName, callback, true);
1934
+ // Should only be possible to be an array here since first part of
1935
+ // ``unshift(i, expr)` passed in above would not be empty, nor `~`,
1936
+ // nor begin with `@` (as could return objects)
1937
+ // This was causing excessive stack size in Node (with or
1938
+ // without Babel) against our performance test: `ret.push(...tmp);`
1939
+ tmp.forEach(t => {
1940
+ ret.push(t);
1941
+ });
1942
+ }
1943
+ return ret;
1944
+ };
1945
+ JSONPath.prototype._eval = function (code, _v, _vname, path, parent, parentPropName) {
1946
+ this.currSandbox._$_parentProperty = parentPropName;
1947
+ this.currSandbox._$_parent = parent;
1948
+ this.currSandbox._$_property = _vname;
1949
+ this.currSandbox._$_root = this.json;
1950
+ this.currSandbox._$_v = _v;
1951
+ const containsPath = code.includes('@path');
1952
+ if (containsPath) {
1953
+ this.currSandbox._$_path = JSONPath.toPathString(path.concat([_vname]));
1954
+ }
1955
+ const scriptCacheKey = this.currEval + 'Script:' + code;
1956
+ if (!JSONPath.cache[scriptCacheKey]) {
1957
+ let script = code.replaceAll('@parentProperty', '_$_parentProperty').replaceAll('@parent', '_$_parent').replaceAll('@property', '_$_property').replaceAll('@root', '_$_root').replaceAll(/@([.\s)[])/gu, '_$_v$1');
1958
+ if (containsPath) {
1959
+ script = script.replaceAll('@path', '_$_path');
1960
+ }
1961
+ if (this.currEval === 'safe' || this.currEval === true || this.currEval === undefined) {
1962
+ JSONPath.cache[scriptCacheKey] = new this.safeVm.Script(script);
1963
+ } else if (this.currEval === 'native') {
1964
+ JSONPath.cache[scriptCacheKey] = new this.vm.Script(script);
1965
+ } else if (typeof this.currEval === 'function' && this.currEval.prototype && Object.hasOwn(this.currEval.prototype, 'runInNewContext')) {
1966
+ const CurrEval = this.currEval;
1967
+ JSONPath.cache[scriptCacheKey] = new CurrEval(script);
1968
+ } else if (typeof this.currEval === 'function') {
1969
+ JSONPath.cache[scriptCacheKey] = {
1970
+ runInNewContext: context => this.currEval(script, context)
1971
+ };
1972
+ } else {
1973
+ throw new TypeError(`Unknown "eval" property "${this.currEval}"`);
1974
+ }
1975
+ }
1976
+ try {
1977
+ return JSONPath.cache[scriptCacheKey].runInNewContext(this.currSandbox);
1978
+ } catch (e) {
1979
+ if (this.ignoreEvalErrors) {
1980
+ return false;
1981
+ }
1982
+ throw new Error('jsonPath: ' + e.message + ': ' + code);
1983
+ }
1984
+ };
1985
+
1986
+ // PUBLIC CLASS PROPERTIES AND METHODS
1987
+
1988
+ // Could store the cache object itself
1989
+ JSONPath.cache = {};
1990
+
1991
+ /**
1992
+ * @param {string[]} pathArr Array to convert
1993
+ * @returns {string} The path string
1994
+ */
1995
+ JSONPath.toPathString = function (pathArr) {
1996
+ const x = pathArr,
1997
+ n = x.length;
1998
+ let p = '$';
1999
+ for (let i = 1; i < n; i++) {
2000
+ if (!/^(~|\^|@.*?\(\))$/u.test(x[i])) {
2001
+ p += /^[0-9*]+$/u.test(x[i]) ? '[' + x[i] + ']' : "['" + x[i] + "']";
2002
+ }
2003
+ }
2004
+ return p;
2005
+ };
2006
+
2007
+ /**
2008
+ * @param {string} pointer JSON Path
2009
+ * @returns {string} JSON Pointer
2010
+ */
2011
+ JSONPath.toPointer = function (pointer) {
2012
+ const x = pointer,
2013
+ n = x.length;
2014
+ let p = '';
2015
+ for (let i = 1; i < n; i++) {
2016
+ if (!/^(~|\^|@.*?\(\))$/u.test(x[i])) {
2017
+ p += '/' + x[i].toString().replaceAll('~', '~0').replaceAll('/', '~1');
2018
+ }
2019
+ }
2020
+ return p;
2021
+ };
2022
+
2023
+ /**
2024
+ * @param {string} expr Expression to convert
2025
+ * @returns {string[]}
2026
+ */
2027
+ JSONPath.toPathArray = function (expr) {
2028
+ const {
2029
+ cache
2030
+ } = JSONPath;
2031
+ if (cache[expr]) {
2032
+ return cache[expr].concat();
2033
+ }
2034
+ const subx = [];
2035
+ const normalized = expr
2036
+ // Properties
2037
+ .replaceAll(/@(?:null|boolean|number|string|integer|undefined|nonFinite|scalar|array|object|function|other)\(\)/gu, ';$&;')
2038
+ // Parenthetical evaluations (filtering and otherwise), directly
2039
+ // within brackets or single quotes
2040
+ .replaceAll(/[['](\??\(.*?\))[\]'](?!.\])/gu, function ($0, $1) {
2041
+ return '[#' + (subx.push($1) - 1) + ']';
2042
+ })
2043
+ // Escape periods and tildes within properties
2044
+ .replaceAll(/\[['"]([^'\]]*)['"]\]/gu, function ($0, prop) {
2045
+ return "['" + prop.replaceAll('.', '%@%').replaceAll('~', '%%@@%%') + "']";
2046
+ })
2047
+ // Properties operator
2048
+ .replaceAll('~', ';~;')
2049
+ // Split by property boundaries
2050
+ .replaceAll(/['"]?\.['"]?(?![^[]*\])|\[['"]?/gu, ';')
2051
+ // Reinsert periods within properties
2052
+ .replaceAll('%@%', '.')
2053
+ // Reinsert tildes within properties
2054
+ .replaceAll('%%@@%%', '~')
2055
+ // Parent
2056
+ .replaceAll(/(?:;)?(\^+)(?:;)?/gu, function ($0, ups) {
2057
+ return ';' + ups.split('').join(';') + ';';
2058
+ })
2059
+ // Descendents
2060
+ .replaceAll(/;;;|;;/gu, ';..;')
2061
+ // Remove trailing
2062
+ .replaceAll(/;$|'?\]|'$/gu, '');
2063
+ const exprList = normalized.split(';').map(function (exp) {
2064
+ const match = exp.match(/#(\d+)/u);
2065
+ return !match || !match[1] ? exp : subx[match[1]];
2066
+ });
2067
+ cache[expr] = exprList;
2068
+ return cache[expr].concat();
2069
+ };
2070
+ JSONPath.prototype.safeVm = {
2071
+ Script: SafeScript
2072
+ };
2073
+
2074
+ JSONPath.prototype.vm = vm;
2075
+
2076
+ exports.JSONPath = JSONPath;