├── deps.edn ├── bb.edn ├── web ├── package.json ├── deps.edn ├── shadow-cljs.edn ├── resources │ └── public │ │ └── index.html ├── src │ └── clj2el │ │ └── web.cljs └── package-lock.json ├── src └── clj2el │ ├── api.cljc │ ├── exec.clj │ ├── internal.cljc │ └── internal │ └── destructure.cljc ├── .gitignore ├── README.md ├── .github └── workflows │ ├── pages.yml │ └── test.yml ├── clj2el.el ├── test ├── test.el └── integration-tests.el └── LICENSE /deps.edn: -------------------------------------------------------------------------------- 1 | {:paths ["src"] :deps {borkdude/edamame {:mvn/version "1.3.20"}}} 2 | -------------------------------------------------------------------------------- /bb.edn: -------------------------------------------------------------------------------- 1 | {:deps {io.github.borkdude/clj2el {:local/root "."}} 2 | :bbin/bin {clj2el {:main-opts ["-x" "clj2el.exec/exec"]}}} 3 | -------------------------------------------------------------------------------- /web/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "@nextjournal/lang-clojure": "^1.0.0", 4 | "codemirror": "^6.0.1" 5 | }, 6 | "devDependencies": { 7 | "shadow-cljs": "^2.21.0" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/clj2el/api.cljc: -------------------------------------------------------------------------------- 1 | (ns clj2el.api 2 | (:require [clj2el.internal])) 3 | 4 | (defn clj2el [form] 5 | (clj2el.internal/transpile form {})) 6 | 7 | (comment 8 | (clj2el '(map inc [1 2 3])) 9 | (clj2el '(let [inc #'inc] (map inc [1 2 3]))) 10 | ) 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .shadow-cljs 2 | node_modules 3 | web/resources/public/js 4 | 5 | # Clojure 6 | /target 7 | /classes 8 | /checkouts 9 | profiles.clj 10 | pom.xml 11 | pom.xml.asc 12 | *.jar 13 | *.class 14 | /.lein-* 15 | /.nrepl-port 16 | /.prepl-port 17 | /.cpcache 18 | -------------------------------------------------------------------------------- /web/deps.edn: -------------------------------------------------------------------------------- 1 | {:paths ["src" "resources"] 2 | :deps {io.github.borkdude/clj2el {:local/root ".."} 3 | borkdude/edamame {:mvn/version "1.3.20"}} 4 | :aliases 5 | {:dev 6 | {:extra-paths ["dev"] 7 | :extra-deps {thheller/shadow-cljs {:mvn/version "2.22.6"}}}}} 8 | -------------------------------------------------------------------------------- /web/shadow-cljs.edn: -------------------------------------------------------------------------------- 1 | {:deps 2 | {:aliases [:dev]} 3 | 4 | :dev-http 5 | {8000 "classpath:public"} 6 | 7 | :builds 8 | {:main 9 | {:target :browser 10 | :build-hooks [(shadow.cljs.build-report/hook)] 11 | :output-dir "resources/public/js" 12 | :devtools {:repl-pprint true} 13 | :modules {:main {:entries [clj2el.web]}}}}} 14 | -------------------------------------------------------------------------------- /src/clj2el/exec.clj: -------------------------------------------------------------------------------- 1 | (ns clj2el.exec 2 | (:require 3 | [clj2el.api :refer [clj2el]] 4 | [clojure.pprint :refer [pprint]] 5 | [clojure.string :as str] 6 | [edamame.core :as e])) 7 | 8 | (defn read-str-multiple [s] 9 | (e/parse-string-all s {:all true})) 10 | 11 | (defn write-str-multiple [forms] 12 | (str/join "\n" (map #(with-out-str (pprint %)) forms))) 13 | 14 | #_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]} 15 | (defn exec [_opts] 16 | (->> *in* slurp read-str-multiple (map clj2el) write-str-multiple print) 17 | (flush)) 18 | -------------------------------------------------------------------------------- /web/resources/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 |
6 | 7 |

clj2el: transpile clojure to elisp

8 | 9 |

10 | The clj2el tool transpiles Clojure to Emacs Lisp. It is currently 11 | incomplete, but contributions are welcome. It is targeted at folks who 12 | know Clojure better than Emacs Lisp. 13 |

14 | 15 |
16 |
(defn foo [x & xs] xs)
17 | 
18 | (inc 2)
19 | 
20 | (map inc [1 2 3])
21 | 
22 | (let [x (rest '(1 2 3))
23 |       y (first x)]
24 |   [x y])
25 | 
26 | (def m {:a 1 :b 2})
27 | 
28 | (assoc m :c 3)
29 | 
30 | (get m :a)
31 | 
32 | ;; destructuring:
33 | (let [[x y] [1 2 3]]
34 |   [x y])
35 | 
36 | (let [{:keys [x y]} {:x 1 :y 2}]
37 |   [x y])
38 |       
39 |
40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # clj2el 2 | 3 | The clj2el tool transpiles Clojure to Emacs Lisp. It is currently incomplete, 4 | but contributions are welcome. It is targeted at folks who know Clojure better 5 | than Emacs Lisp. 6 | 7 | See the interactive web page [here](https://borkdude.github.io/clj2el/). 8 | 9 | ## CLI 10 | 11 | There's also a tiny babashka CLI: `clj2el`. The CLI can be installed with 12 | [bbin]: 13 | 14 | bbin install io.github.borkdude/clj2el --latest-sha 15 | 16 | And used like this: 17 | 18 | $ cat source.clj 19 | (defn foo [x & xs] xs) 20 | 21 | (inc 2) 22 | 23 | (map inc [1 2 3]) 24 | $ cat source.clj | clj2el 25 | (defun foo (x &rest xs) xs) 26 | 27 | (1+ 2) 28 | 29 | (mapcar #'1+ (vector 1 2 3)) 30 | 31 | [bbin]: https://github.com/babashka/bbin 32 | 33 | 34 | Note that you can replace a region with `clj2el` in emacs with `C-u M-|`. 35 | 36 | ## Using `clj2el.el` from Doom Emacs 37 | 38 | ```emacs-lisp 39 | ;; packages.el 40 | (package! clj2el :recipe (:host github :repo "borkdude/clj2el" :files ("*.el"))) 41 | 42 | ;; config.el 43 | (use-package! clj2el) 44 | ``` 45 | -------------------------------------------------------------------------------- /.github/workflows/pages.yml: -------------------------------------------------------------------------------- 1 | name: Build and Deploy 2 | on: 3 | push: 4 | branches: 5 | - main 6 | permissions: 7 | contents: read 8 | pages: write 9 | id-token: write 10 | jobs: 11 | build-and-deploy: 12 | concurrency: ci-${{ github.ref }} # Recommended if you intend to make multiple deployments in quick succession. 13 | runs-on: ubuntu-latest 14 | defaults: 15 | run: 16 | working-directory: web 17 | steps: 18 | 19 | - name: Checkout 🛎️ 20 | uses: actions/checkout@v3 21 | 22 | - name: Prepare java 23 | uses: actions/setup-java@v3 24 | with: 25 | distribution: 'zulu' 26 | java-version: '11' 27 | 28 | - name: Install clojure tools 29 | uses: DeLaGuardo/setup-clojure@10.1 30 | with: 31 | bb: latest 32 | cli: latest 33 | 34 | - name: Install and Build 🔧 # This example project is built using npm and outputs the result to the 'build' folder. Replace with the commands required to build your project, or remove this step entirely if your site is pre-built. 35 | run: | 36 | npm install 37 | npx shadow-cljs release main 38 | 39 | # To be able to deploy your own version you have to choose the 40 | # "GitHub Actions" option in your project settings. 41 | # It may not work if "deploy from a branch" is chosen. 42 | - name: Setup Pages 43 | uses: actions/configure-pages@v2 44 | 45 | - name: Upload artifact 46 | uses: actions/upload-pages-artifact@v1 47 | with: 48 | # Upload entire repository 49 | path: 'web/resources/public' 50 | 51 | - name: Deploy to GitHub Pages 52 | id: deployment 53 | uses: actions/deploy-pages@v1 54 | -------------------------------------------------------------------------------- /web/src/clj2el/web.cljs: -------------------------------------------------------------------------------- 1 | (ns clj2el.web 2 | (:require 3 | ["@codemirror/state" :as cs] 4 | ["@codemirror/view" :as cv] 5 | ["@nextjournal/lang-clojure" :as lc] 6 | ["codemirror" :as cm] 7 | [clojure.pprint :as pp] 8 | [edamame.core :as e] 9 | [clj2el.api :as clj2el] 10 | [clojure.string :as str])) 11 | 12 | (defn cm-string [cm-instance] 13 | (-> cm-instance .-state .-doc .toString)) 14 | 15 | (defn eval-codemirror [cm-instance] 16 | (let [code-str (cm-string cm-instance) 17 | forms (e/parse-string-all code-str {:all true}) 18 | evaled (mapv clj2el/clj2el forms)] 19 | evaled)) 20 | 21 | (defonce init-instances 22 | (let [elts (js/document.querySelectorAll ".clj2el-editor")] 23 | (doseq [^js elt elts] 24 | (let [no-editable? (.. elt -dataset -cljsShowcaseNoEditable) 25 | no-eval? (.. elt -dataset -cljsShowcaseNoEval) 26 | eval? (not no-eval?) 27 | doc (.-innerText elt) 28 | _ (set! (.-innerText elt) "") 29 | cm-ref (atom nil) 30 | res (js/document.createElement "pre") 31 | eval-me (fn [] 32 | (when eval? 33 | (let [evaled (eval-codemirror @cm-ref)] 34 | (set! (.-innerText res) 35 | (str/join "\n" (map #(with-out-str (pp/pprint %)) evaled)))))) 36 | ext (.of cv/keymap 37 | (clj->js [{:key "Mod-Enter" 38 | :run eval-me}])) 39 | state (cs/EditorState.create #js {:doc doc 40 | :extensions #js [cm/basicSetup, (lc/clojure), (.highest cs/Prec ext), 41 | (cs/EditorState.readOnly.of no-editable?)]}) 42 | cm (cm/EditorView. #js {:state state :parent elt})] 43 | (when eval? 44 | (let [btn (js/document.createElement "button") 45 | _ (set! (.-style btn) "float: right") 46 | _ (set! btn -innerText "Eval") 47 | _ (.addEventListener elt "click" eval-me)] 48 | (.appendChild elt btn))) 49 | (.appendChild elt res) 50 | (reset! cm-ref cm) 51 | (when eval? (eval-me)))))) 52 | 53 | -------------------------------------------------------------------------------- /clj2el.el: -------------------------------------------------------------------------------- 1 | ;;; clj2el.el --- Description -*- lexical-binding: t; -*- 2 | ;; 3 | ;; Copyright (C) 2023 4 | ;; 5 | ;; Author: 6 | ;; Maintainer: 7 | ;; Created: March 21, 2023 8 | ;; Modified: March 21, 2023 9 | ;; Version: 0.0.1 10 | ;; Homepage: https://github.com/borkdude/clj2el 11 | ;; Package-Requires: ((emacs "24.3")) 12 | ;; 13 | ;; This file is not part of GNU Emacs. 14 | ;; 15 | ;;; Commentary: 16 | ;; 17 | ;; Description 18 | ;; 19 | ;;; Code: 20 | 21 | (defcustom clj2el-command 22 | "clj2el" 23 | "The command used to execute clj2el." 24 | :type 'string 25 | :group 'clj2el) 26 | 27 | (defun clj2el-transpile-buffer () 28 | (interactive) 29 | (shell-command-on-region (point-min) (point-max) clj2el-command (current-buffer))) 30 | 31 | (defun clj2el-transpile-region () 32 | (interactive) 33 | (shell-command-on-region (point) (mark) clj2el-command (current-buffer) 't)) 34 | 35 | (defmacro clj2el-clj! (expr) 36 | "Transpile clojure like EXPR form to elisp and eval it. 37 | 38 | Transpilation is performed by sending EXPR as input to 39 | `clj2el-command'. Signals an error if the program cannot be find 40 | or an error is reported." 41 | (let* ((expr-as-string (prin1-to-string expr)) 42 | (temp-buf "*el2clj-work*")) 43 | (get-buffer-create temp-buf) 44 | (let* ((elisp-code (with-current-buffer temp-buf 45 | (erase-buffer) 46 | (insert expr-as-string) 47 | (when (not (= (shell-command-on-region (point-min) (point-max) clj2el-command temp-buf) 0)) 48 | (error ":clj23el-clj!-cmd-error :clj2el-command %S :error %s" 49 | clj2el-command (buffer-substring-no-properties (point-min) (point-max)))) 50 | (buffer-substring (point-min) (point-max)))) 51 | (read (read-from-string elisp-code)) 52 | (expr (car read))) 53 | expr))) 54 | 55 | (defmacro clj2el-comment 56 | (&rest _exprs)) 57 | 58 | (clj2el-comment 59 | (setq clj2el-command "bb -x clj2el.exec/exec") 60 | (clj2el-clj! 61 | (do (defn foo [x] (inc x)) 62 | (defn bar [x] (inc x)))) 63 | (foo (bar 3)) ;;=> 5 64 | (clj2el-clj! 65 | (def m {:a 1 :b 2}) 66 | ) 67 | m ;;=> (:a 1 :b 2) 68 | (clj2el-clj! 69 | (get m :a)) ;;=> 1 70 | (clj2el-clj! 71 | (do 72 | (defn foo [m] 73 | (get m :a)) 74 | (foo {:a 1}))) ;;=> 1 75 | (clj2el-clj! (do (get {'foo 1 'dude 2} 'foo))) 76 | (clj2el-clj! 77 | ((juxt inc dec) 78 | 1)) 79 | (clj2el-clj! 80 | ((juxt + -) 81 | 0 1 2 3 4 5)) 82 | (clj2el-clj! 83 | (let [fns (juxt + -)] 84 | fns 85 | (funcall fns 1 2))) 86 | ) 87 | 88 | (provide 'clj2el) 89 | ;;; clj2el.el ends here 90 | -------------------------------------------------------------------------------- /test/test.el: -------------------------------------------------------------------------------- 1 | (require 'clj2el) 2 | 3 | (require 'cl-lib) 4 | (require 'ert) 5 | 6 | (cl-defmacro with-clj2el-test (&rest body &aux (test-clj2el-command "bb -x clj2el.exec/exec")) 7 | "Execute BODY with `clj2el-command' bound to TEST-CLJ2EL-COMMAND. 8 | 9 | The command is supposed to execute clj2el from source. 10 | 11 | the following fucntions are also updated to be called interactively with a prefix arg: 12 | - `clj2el-transpile-buffer' 13 | - `clj2el-transpile-range'." 14 | (declare (indent 0)) 15 | `(let ((clj2el-command ,test-clj2el-command)) 16 | (cl-macrolet (;; use eval to pick up the updated 17 | ;; `clj2el-command'. 18 | (clj2el-clj! (expr) `(eval '(clj2el-clj! ,expr))) 19 | 20 | ;; call with prefix arg. 21 | (clj2el-transpile-buffer () '(let ((current-prefix-arg '(4))) 22 | (call-interactively 'clj2el-transpile-buffer))) 23 | (clj2el-transpile-range () '(let ((current-prefix-arg '(4))) 24 | (call-interactively 'clj2el-transpile-range)))) 25 | ,@body))) 26 | 27 | (ert-deftest basic () 28 | (with-clj2el-test 29 | 30 | ;; clj2el-transpile-buffer 31 | (should (string= "(1+ 2)\n" 32 | (with-temp-buffer 33 | (insert "(inc 2)") 34 | (clj2el-transpile-buffer) 35 | (buffer-substring-no-properties (point-min) (point-max))))) 36 | 37 | ;; clj2el-transpile-region 38 | (should (string= "[[ (1+ 2)\n ]]" 39 | (with-temp-buffer 40 | (insert "[[ (inc 2) ]]") 41 | (set-mark 4) 42 | (goto-char 11) 43 | (clj2el-transpile-region) 44 | ;; (test--call-interactively-with-prefix 'clj2el-transpile-region) 45 | (buffer-substring-no-properties (point-min) (point-max))))) 46 | 47 | 48 | ;; clj2el-clj! 49 | (should (= 3 (clj2el-clj! (inc 2)))))) 50 | 51 | (ert-deftest juxt () 52 | (with-clj2el-test 53 | (should (equal 54 | (clj2el-clj! ((juxt inc dec) 1)) 55 | '(2 0))) 56 | (should (equal 57 | (clj2el-clj! ((juxt + -) 58 | 0 1 2 3 4 5)) 59 | '(15 -15))) 60 | ;; Currently, `funcall' is required here. Might change in the future. 61 | 62 | (should (equal 63 | (clj2el-clj! (let [fns (juxt + -)] 64 | (funcall fns 0 1 2 3 4 5))) 65 | '(15 -15))) 66 | ;; Missing `funcall' 67 | 68 | (should-error (clj2el-clj! (let [fns (juxt + -)] 69 | (fns 0 1 2 3 4 5)))))) 70 | -------------------------------------------------------------------------------- /test/integration-tests.el: -------------------------------------------------------------------------------- 1 | (require 'clj2el) 2 | 3 | (require 'cl-lib) 4 | (require 'ert) 5 | 6 | (defmacro with-temp-bbin-install (&rest body) 7 | "Create a temp dir to install clj2el to with bbin and run BODY. 8 | 9 | The following functions are updated in BODY to use this installation 10 | 11 | - `clj2el-clj!' 12 | - `clj2el-transpile-buffer' (also called interactively with prefix arg) 13 | - `clj2el-transpile-range' (also called interactively with prefix arg)." 14 | (declare (indent 0)) 15 | `(let ((bbin-install-dir (make-temp-file "clj2el" t)) 16 | (bbin-exec (executable-find "bbin")) 17 | (env-bbd (getenv "BABASHKA_BBIN_DIR")) 18 | (env-path (getenv "PATH"))) 19 | ;; (message ":temp-bbin-install-dir-created-at %s" bbin-install-dir) 20 | (unwind-protect 21 | (progn 22 | (should bbin-exec) 23 | (setenv "BABASHKA_BBIN_DIR" bbin-install-dir) 24 | (setenv "PATH" (concat (expand-file-name "bin" bbin-install-dir) path-separator 25 | (getenv "PATH"))) 26 | (with-temp-buffer 27 | (let ((ret (call-process-shell-command "bbin" nil (current-buffer) nil 28 | "install" "."))) 29 | (when (not (= ret 0)) 30 | (message ":bbin-install-error %s" (buffer-substring-no-properties (point-min) (point-max)))) 31 | (should (= ret 0)))) 32 | (cl-macrolet ((clj2el-clj! (expr) `(eval '(clj2el-clj! ,expr))) 33 | (clj2el-transpile-buffer () '(let ((current-prefix-arg '(4))) 34 | (call-interactively 'clj2el-transpile-buffer))) 35 | (clj2el-transpile-range () '(let ((current-prefix-arg '(4))) 36 | (call-interactively 'clj2el-transpile-range)))) 37 | ,@body)) 38 | (progn 39 | (setenv "BABASHKA_BBIN_DIR" env-bbd) 40 | (setenv "PATH" env-path) 41 | ;; (message ":temp-bbin-install-deleting... %s" bbin-install-dir) 42 | (delete-directory bbin-install-dir t))))) 43 | 44 | 45 | (ert-deftest integration () 46 | (with-temp-bbin-install 47 | 48 | ;; clj2el-transpile-buffer 49 | (should (string= "(1+ 3)\n" 50 | (with-temp-buffer 51 | (insert "(inc 3)") 52 | (clj2el-transpile-buffer) 53 | (buffer-substring-no-properties (point-min) (point-max))))) 54 | 55 | ;; clj2el-transpile-region 56 | (should (string= "[[ (1+ 4)\n ]]" 57 | (with-temp-buffer 58 | (insert "[[ (inc 4) ]]") 59 | (set-mark 4) 60 | (goto-char 11) 61 | (clj2el-transpile-region) 62 | (buffer-substring-no-properties (point-min) (point-max))))) 63 | 64 | 65 | ;; clj2el-clj! 66 | (should (= 6 (clj2el-clj! (inc 5)))))) 67 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [push, pull_request] 4 | jobs: 5 | test: 6 | runs-on: ${{matrix.os}} 7 | continue-on-error: ${{matrix.emacs_version == 'snapshot'}} 8 | 9 | strategy: 10 | matrix: 11 | os: [macos-latest, ubuntu-latest, windows-latest] 12 | emacs_version: ["27.2", "28.2"] 13 | include: 14 | - os: ubuntu-latest 15 | emacs_version: "snapshot" 16 | 17 | steps: 18 | - name: Check out the source code 19 | uses: actions/checkout@v2 20 | 21 | - name: Install clojure tools 22 | uses: DeLaGuardo/setup-clojure@10.3 23 | with: 24 | # Install just one or all simultaneously 25 | # The value must indicate a particular version of the tool, or use 'latest' 26 | # to always provision the latest version 27 | cli: latest 28 | bb: latest 29 | 30 | - name: Prime babashka 31 | run: | 32 | bb clojure --help 33 | 34 | - name: Set up Emacs 35 | if: "!startsWith (matrix.os, 'windows')" 36 | uses: purcell/setup-emacs@master 37 | with: 38 | version: ${{matrix.emacs_version}} 39 | 40 | - name: Set up Emacs on Windows 41 | if: startsWith (matrix.os, 'windows') 42 | uses: jcs090218/setup-emacs-windows@master 43 | with: 44 | version: ${{matrix.emacs_version}} 45 | 46 | - name: Workaround for Emacs 27.2 bug on MS-Windows 47 | if: startsWith (matrix.os, 'windows') 48 | run: | 49 | # Remove expired DST Root CA X3 certificate. Workaround 50 | # for https://debbugs.gnu.org/cgi/bugreport.cgi?bug=51038 51 | # bug on Emacs 27.2. 52 | gci cert:\LocalMachine\Root\DAC9024F54D8F6DF94935FB1732638CA6AD77C13 53 | gci cert:\LocalMachine\Root\DAC9024F54D8F6DF94935FB1732638CA6AD77C13 | Remove-Item 54 | 55 | - name: Install bbin 56 | if: "!startsWith (matrix.os, 'windows')" 57 | run: | 58 | curl -o- -L https://raw.githubusercontent.com/babashka/bbin/v0.1.13/bbin > /usr/local/bin/bbin 59 | chmod +x /usr/local/bin/bbin 60 | mkdir -p "${HOME}/.babashka/bbin/bin 61 | echo "${HOME}/.babashka/bbin/bin" >> $GITHUB_PATH" 62 | 63 | - name: Install bbin (Windows) 64 | if: startsWith (matrix.os, 'windows') 65 | run: | 66 | iex "& {$(irm get.scoop.sh)} -RunAsAdmin" 67 | scoop bucket add extras 68 | scoop bucket add scoop-clojure https://github.com/littleli/scoop-clojure 69 | scoop install bbin 70 | get-command bbin.cmd | split-path -parent | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append 71 | 72 | - name: Install Eldev 73 | if: "!startsWith (matrix.os, 'windows')" 74 | run: curl -fsSL https://raw.github.com/doublep/eldev/master/webinstall/github-eldev | sh 75 | 76 | - name: Install Eldev on MS-Windows 77 | if: startsWith (matrix.os, 'windows') 78 | run: | 79 | curl.exe -fsSL https://raw.github.com/doublep/eldev/master/webinstall/github-eldev.bat | cmd /Q 80 | 81 | - name: Test the project 82 | run: | 83 | eldev -dtT test 84 | -------------------------------------------------------------------------------- /src/clj2el/internal.cljc: -------------------------------------------------------------------------------- 1 | (ns clj2el.internal 2 | (:require [clj2el.internal.destructure :as destructure])) 3 | 4 | (declare transpile) 5 | 6 | (defn add-local [env local] 7 | (update env :locals assoc local local)) 8 | 9 | (defn add-locals [env locals] 10 | (update env :locals merge (zipmap locals locals))) 11 | 12 | (defn normalize-arg [arg] 13 | (if (= '& arg) '&rest arg)) 14 | 15 | (defmulti transpile-call (fn [call _env] 16 | (first call))) 17 | 18 | (defmethod transpile-call 'defn [[_defn name args & body] env] 19 | (let [[args & body] (destructure/maybe-destructured args body)] 20 | `(~'defun ~name ~(map normalize-arg args) ~@(map #(transpile % env) body)))) 21 | 22 | (defmethod transpile-call 'let [[_let bindings & body] env] 23 | (let [bindings (destructure/destructure bindings) 24 | [bindings env] 25 | (reduce (fn [[bindings env] [binding expr]] 26 | [(conj bindings (list binding (transpile expr env))) (add-local env binding)]) 27 | [[] env] 28 | (partition 2 bindings))] 29 | `(~'let* ~(sequence bindings) 30 | ~@(map #(transpile % env) body)))) 31 | 32 | (defmethod transpile-call 'inc [[_inc expr] env] 33 | `(~(symbol "1+") ~(transpile expr env))) 34 | 35 | (defmethod transpile-call 'map [[_map fn expr] env] 36 | `(~'mapcar ~(if (and (symbol? fn) 37 | (not (get (:locals env) fn))) 38 | (transpile (list 'var fn) env) 39 | (transpile fn env)) 40 | ~(transpile expr env))) 41 | 42 | (defmethod transpile-call 'fn [[_fn args & body] env] 43 | `(~'lambda ~(map normalize-arg args) ~@(map #(transpile % env) body))) 44 | 45 | (defmethod transpile-call 'var [[_var sym] _env] 46 | (symbol (str "#'" (case sym 47 | inc (symbol "1+") 48 | sym)))) 49 | 50 | (defmethod transpile-call 'first [[_ arg] env] 51 | `(~'car ~(transpile arg env))) 52 | 53 | (defmethod transpile-call 'rest [[_ arg] env] 54 | `(~'cdr ~(transpile arg env))) 55 | 56 | (defmethod transpile-call 'comment [_form _env] 57 | nil) 58 | 59 | (defmethod transpile-call 'do [[_do & exprs] env] 60 | (list* 'progn (map #(transpile % env) exprs))) 61 | 62 | (defmethod transpile-call 'def [[_def & exprs] env] 63 | (list* 'setq (map #(transpile % env) exprs))) 64 | 65 | (defmethod transpile-call 'assoc [[_assoc m k v] env] 66 | (list 'plist-put (transpile m env) (transpile k env) (transpile v env))) 67 | 68 | (defmethod transpile-call 'get [[_assoc m k] env] 69 | (list 'plist-get (transpile m env) (transpile k env))) 70 | 71 | (defmethod transpile-call 'nth [[_nth obj idx] env] 72 | (list 'elt (transpile obj env) (transpile idx env))) 73 | 74 | (defmethod transpile-call 'juxt [[_juxt & fns] env] 75 | (list 'lambda 76 | '(&rest xs) 77 | `(~'mapcar 78 | ~'(lambda (f) (apply f xs)) 79 | '~(map #(transpile % env) fns)))) 80 | 81 | (defmethod transpile-call :default [form env] 82 | (sequence (map #(transpile % env) form))) 83 | 84 | (defn transpile-symbol [sym] 85 | (condp = sym 86 | 'inc (symbol "1+") 87 | 'dec (symbol "1-") 88 | sym)) 89 | 90 | (defn transpile [form env] 91 | (cond 92 | (seq? form) 93 | (transpile-call form env) 94 | (vector? form) (list* 'vector (map #(transpile % env) form)) 95 | (map? form) (cons 'list (map #(transpile % env) (apply concat form))) 96 | (symbol? form) (transpile-symbol form) 97 | :else form)) 98 | 99 | ;;;; Scratch 100 | 101 | (comment 102 | (transpile '(let [[x] '(1)] 103 | x) {}) 104 | 105 | (transpile '(let [{:keys [a]} {:a 1}] 106 | a) {}) 107 | 108 | (transpile '(let [{:syms [a]} {'a 1}] 109 | a) {}) 110 | 111 | (transpile '(defn foo [x & [opt]] opt) {}) 112 | 113 | (transpile '(let [[x y] [1 2 3]] 114 | [x y]) {}) 115 | 116 | (transpile '(juxt inc dec) {}) 117 | ;; => (lambda 118 | ;; (&rest xs) 119 | ;; (mapcar 120 | ;; (lambda (f) (apply f xs)) 121 | ;; '(1+ 1-))) 122 | ) 123 | -------------------------------------------------------------------------------- /src/clj2el/internal/destructure.cljc: -------------------------------------------------------------------------------- 1 | (ns clj2el.internal.destructure 2 | {:no-doc true} 3 | (:refer-clojure :exclude [destructure])) 4 | 5 | (defn destructure [bindings] 6 | (let [bents (partition 2 bindings) 7 | pb (fn pb [bvec b v] 8 | (let [pvec 9 | (fn [bvec b val] 10 | (let [gvec (gensym "vec__") 11 | gseq (gensym "seq__") 12 | gfirst (gensym "first__") 13 | has-rest (some #{'&} b)] 14 | (loop [ret (let [ret (conj bvec gvec val)] 15 | (if has-rest 16 | (conj ret gseq (list seq gvec)) 17 | ret)) 18 | n 0 19 | bs b 20 | seen-rest? false] 21 | (if (seq bs) 22 | (let [firstb (first bs)] 23 | (cond 24 | (= firstb '&) (recur (pb ret (second bs) gseq) 25 | n 26 | (nnext bs) 27 | true) 28 | (= firstb :as) (pb ret (second bs) gvec) 29 | :else (if seen-rest? 30 | (throw #?(:clj (new Exception "Unsupported binding form, only :as can follow & parameter") 31 | :cljs (new js/Error "Unsupported binding form, only :as can follow & parameter"))) 32 | (recur (pb (if has-rest 33 | (conj ret 34 | gfirst `(~first ~gseq) 35 | gseq `(~next ~gseq)) 36 | ret) 37 | firstb 38 | (if has-rest 39 | gfirst 40 | (list 'nth gvec n nil))) 41 | (inc n) 42 | (next bs) 43 | seen-rest?)))) 44 | ret)))) 45 | pmap 46 | (fn [bvec b v] 47 | (let [gmap (gensym "map__") 48 | defaults (:or b)] 49 | (loop [ret (-> bvec (conj gmap) (conj v) 50 | ;; (conj gmap) (conj gmap) 51 | ((fn [ret] 52 | (if (:as b) 53 | (conj ret (:as b) gmap) 54 | ret)))) 55 | bes (let [transforms 56 | (reduce 57 | (fn [transforms mk] 58 | (if (keyword? mk) 59 | (let [mkns (namespace mk) 60 | mkn (name mk)] 61 | (cond (= mkn "keys") (assoc transforms mk #(keyword (or mkns (namespace %)) (name %))) 62 | (= mkn "syms") (assoc transforms mk #(list 'quote (symbol (or mkns (namespace %)) (name %)))) 63 | (= mkn "strs") (assoc transforms mk str) 64 | :else transforms)) 65 | transforms)) 66 | {} 67 | (keys b))] 68 | (reduce 69 | (fn [bes entry] 70 | (reduce #(assoc %1 %2 ((val entry) %2)) 71 | (dissoc bes (key entry)) 72 | ((key entry) bes))) 73 | (dissoc b :as :or) 74 | transforms))] 75 | (if (seq bes) 76 | (let [bb (key (first bes)) 77 | bk (val (first bes)) 78 | local (if #?(:clj (instance? clojure.lang.Named bb) 79 | :cljs (implements? INamed bb)) 80 | (with-meta (symbol nil (name bb)) (meta bb)) 81 | bb) 82 | bv (if (contains? defaults local) 83 | (list 'get gmap bk (defaults local)) 84 | (list 'get gmap bk))] 85 | (recur 86 | (if (or (keyword? bb) (symbol? bb)) ;(ident? bb) 87 | (-> ret (conj local bv)) 88 | (pb ret bb bv)) 89 | (next bes))) 90 | ret))))] 91 | (cond 92 | (symbol? b) (-> bvec (conj (if (namespace b) 93 | (symbol (name b)) b)) (conj v)) 94 | (keyword? b) (-> bvec (conj (symbol (name b))) (conj v)) 95 | (vector? b) (pvec bvec b v) 96 | (map? b) (pmap bvec b v) 97 | :else (throw 98 | #?(:clj (new Exception (str "Unsupported binding form: " b)) 99 | :cljs (new js/Error (str "Unsupported binding form: " b))))))) 100 | process-entry (fn [bvec b] (pb bvec (first b) (second b)))] 101 | (if (every? symbol? (map first bents)) 102 | bindings 103 | (if-let [kwbs (seq (filter #(keyword? (first %)) bents))] 104 | (throw 105 | #?(:clj (new Exception (str "Unsupported binding key: " (ffirst kwbs))) 106 | :cljs (new js/Error (str "Unsupported binding key: " (ffirst kwbs))))) 107 | (reduce process-entry [] bents))))) 108 | 109 | (defn maybe-destructured 110 | [params body] 111 | (if (every? symbol? params) 112 | (cons params body) 113 | (loop [params params 114 | new-params (with-meta [] (meta params)) 115 | lets []] 116 | (if params 117 | (if (symbol? (first params)) 118 | (recur (next params) (conj new-params (first params)) lets) 119 | (let [gparam (gensym "p__")] 120 | (recur (next params) (conj new-params gparam) 121 | (-> lets (conj (first params)) (conj gparam))))) 122 | `(~new-params 123 | (~'let ~lets 124 | ~@body)))))) 125 | 126 | (comment 127 | (maybe-destructured '[x [1]] [1]) 128 | ) 129 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Eclipse Public License - v 1.0 2 | 3 | THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC 4 | LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM 5 | CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 6 | 7 | 1. DEFINITIONS 8 | 9 | "Contribution" means: 10 | a) in the case of the initial Contributor, the initial code and 11 | documentation distributed under this Agreement, and 12 | b) in the case of each subsequent Contributor: 13 | i) changes to the Program, and 14 | ii) additions to the Program; 15 | 16 | where such changes and/or additions to the Program originate from and are 17 | distributed by that particular Contributor. A Contribution 'originates' from a 18 | Contributor if it was added to the Program by such Contributor itself or 19 | anyone acting on such Contributor's behalf. Contributions do not include 20 | additions to the Program which: (i) are separate modules of software 21 | distributed in conjunction with the Program under their own license agreement, 22 | and (ii) are not derivative works of the Program. 23 | "Contributor" means any person or entity that distributes the Program. 24 | 25 | "Licensed Patents" mean patent claims licensable by a Contributor which are 26 | necessarily infringed by the use or sale of its Contribution alone or when 27 | combined with the Program. 28 | 29 | "Program" means the Contributions distributed in accordance with this 30 | Agreement. 31 | 32 | "Recipient" means anyone who receives the Program under this Agreement, 33 | including all Contributors. 34 | 35 | 2. GRANT OF RIGHTS 36 | 37 | a) Subject to the terms of this Agreement, each Contributor hereby grants 38 | Recipient a non-exclusive, worldwide, royalty-free copyright license to 39 | reproduce, prepare derivative works of, publicly display, publicly 40 | perform, distribute and sublicense the Contribution of such Contributor, 41 | if any, and such derivative works, in source code and object code form. 42 | 43 | b) Subject to the terms of this Agreement, each Contributor hereby grants 44 | Recipient a non-exclusive, worldwide, royalty-free patent license under 45 | Licensed Patents to make, use, sell, offer to sell, import and otherwise 46 | transfer the Contribution of such Contributor, if any, in source code and 47 | object code form. This patent license shall apply to the combination of 48 | the Contribution and the Program if, at the time the Contribution is 49 | added by the Contributor, such addition of the Contribution causes such 50 | combination to be covered by the Licensed Patents. The patent license 51 | shall not apply to any other combinations which include the Contribution. 52 | No hardware per se is licensed hereunder. 53 | 54 | c) Recipient understands that although each Contributor grants the 55 | licenses to its Contributions set forth herein, no assurances are 56 | provided by any Contributor that the Program does not infringe the patent 57 | or other intellectual property rights of any other entity. Each 58 | Contributor disclaims any liability to Recipient for claims brought by 59 | any other entity based on infringement of intellectual property rights or 60 | otherwise. As a condition to exercising the rights and licenses granted 61 | hereunder, each Recipient hereby assumes sole responsibility to secure 62 | any other intellectual property rights needed, if any. For example, if a 63 | third party patent license is required to allow Recipient to distribute 64 | the Program, it is Recipient's responsibility to acquire that license 65 | before distributing the Program. 66 | 67 | d) Each Contributor represents that to its knowledge it has sufficient 68 | copyright rights in its Contribution, if any, to grant the copyright 69 | license set forth in this Agreement. 70 | 71 | 3. REQUIREMENTS 72 | A Contributor may choose to distribute the Program in object code form under 73 | its own license agreement, provided that: 74 | 75 | a) it complies with the terms and conditions of this Agreement; and 76 | 77 | b) its license agreement: 78 | i) effectively disclaims on behalf of all Contributors all 79 | warranties and conditions, express and implied, including warranties 80 | or conditions of title and non-infringement, and implied warranties 81 | or conditions of merchantability and fitness for a particular 82 | purpose; 83 | ii) effectively excludes on behalf of all Contributors all liability 84 | for damages, including direct, indirect, special, incidental and 85 | consequential damages, such as lost profits; 86 | iii) states that any provisions which differ from this Agreement are 87 | offered by that Contributor alone and not by any other party; and 88 | iv) states that source code for the Program is available from such 89 | Contributor, and informs licensees how to obtain it in a reasonable 90 | manner on or through a medium customarily used for software 91 | exchange. 92 | 93 | When the Program is made available in source code form: 94 | 95 | a) it must be made available under this Agreement; and 96 | 97 | b) a copy of this Agreement must be included with each copy of the 98 | Program. 99 | Contributors may not remove or alter any copyright notices contained within 100 | the Program. 101 | 102 | Each Contributor must identify itself as the originator of its Contribution, 103 | if any, in a manner that reasonably allows subsequent Recipients to identify 104 | the originator of the Contribution. 105 | 106 | 4. COMMERCIAL DISTRIBUTION 107 | Commercial distributors of software may accept certain responsibilities with 108 | respect to end users, business partners and the like. While this license is 109 | intended to facilitate the commercial use of the Program, the Contributor who 110 | includes the Program in a commercial product offering should do so in a manner 111 | which does not create potential liability for other Contributors. Therefore, 112 | if a Contributor includes the Program in a commercial product offering, such 113 | Contributor ("Commercial Contributor") hereby agrees to defend and indemnify 114 | every other Contributor ("Indemnified Contributor") against any losses, 115 | damages and costs (collectively "Losses") arising from claims, lawsuits and 116 | other legal actions brought by a third party against the Indemnified 117 | Contributor to the extent caused by the acts or omissions of such Commercial 118 | Contributor in connection with its distribution of the Program in a commercial 119 | product offering. The obligations in this section do not apply to any claims 120 | or Losses relating to any actual or alleged intellectual property 121 | infringement. In order to qualify, an Indemnified Contributor must: a) 122 | promptly notify the Commercial Contributor in writing of such claim, and b) 123 | allow the Commercial Contributor to control, and cooperate with the Commercial 124 | Contributor in, the defense and any related settlement negotiations. The 125 | Indemnified Contributor may participate in any such claim at its own expense. 126 | 127 | For example, a Contributor might include the Program in a commercial product 128 | offering, Product X. That Contributor is then a Commercial Contributor. If 129 | that Commercial Contributor then makes performance claims, or offers 130 | warranties related to Product X, those performance claims and warranties are 131 | such Commercial Contributor's responsibility alone. Under this section, the 132 | Commercial Contributor would have to defend claims against the other 133 | Contributors related to those performance claims and warranties, and if a 134 | court requires any other Contributor to pay any damages as a result, the 135 | Commercial Contributor must pay those damages. 136 | 137 | 5. NO WARRANTY 138 | EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN 139 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR 140 | IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, 141 | NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each 142 | Recipient is solely responsible for determining the appropriateness of using 143 | and distributing the Program and assumes all risks associated with its 144 | exercise of rights under this Agreement , including but not limited to the 145 | risks and costs of program errors, compliance with applicable laws, damage to 146 | or loss of data, programs or equipment, and unavailability or interruption of 147 | operations. 148 | 149 | 6. DISCLAIMER OF LIABILITY 150 | EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY 151 | CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, 152 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION 153 | LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 154 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 155 | ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE 156 | EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY 157 | OF SUCH DAMAGES. 158 | 159 | 7. GENERAL 160 | 161 | If any provision of this Agreement is invalid or unenforceable under 162 | applicable law, it shall not affect the validity or enforceability of the 163 | remainder of the terms of this Agreement, and without further action by the 164 | parties hereto, such provision shall be reformed to the minimum extent 165 | necessary to make such provision valid and enforceable. 166 | 167 | If Recipient institutes patent litigation against any entity (including a 168 | cross-claim or counterclaim in a lawsuit) alleging that the Program itself 169 | (excluding combinations of the Program with other software or hardware) 170 | infringes such Recipient's patent(s), then such Recipient's rights granted 171 | under Section 2(b) shall terminate as of the date such litigation is filed. 172 | 173 | All Recipient's rights under this Agreement shall terminate if it fails to 174 | comply with any of the material terms or conditions of this Agreement and does 175 | not cure such failure in a reasonable period of time after becoming aware of 176 | such noncompliance. If all Recipient's rights under this Agreement terminate, 177 | Recipient agrees to cease use and distribution of the Program as soon as 178 | reasonably practicable. However, Recipient's obligations under this Agreement 179 | and any licenses granted by Recipient relating to the Program shall continue 180 | and survive. 181 | 182 | Everyone is permitted to copy and distribute copies of this Agreement, but in 183 | order to avoid inconsistency the Agreement is copyrighted and may only be 184 | modified in the following manner. The Agreement Steward reserves the right to 185 | publish new versions (including revisions) of this Agreement from time to 186 | time. No one other than the Agreement Steward has the right to modify this 187 | Agreement. The Eclipse Foundation is the initial Agreement Steward. The 188 | Eclipse Foundation may assign the responsibility to serve as the Agreement 189 | Steward to a suitable separate entity. Each new version of the Agreement will 190 | be given a distinguishing version number. The Program (including 191 | Contributions) may always be distributed subject to the version of the 192 | Agreement under which it was received. In addition, after a new version of the 193 | Agreement is published, Contributor may elect to distribute the Program 194 | (including its Contributions) under the new version. Except as expressly 195 | stated in Sections 2(a) and 2(b) above, Recipient receives no rights or 196 | licenses to the intellectual property of any Contributor under this Agreement, 197 | whether expressly, by implication, estoppel or otherwise. All rights in the 198 | Program not expressly granted under this Agreement are reserved. 199 | 200 | This Agreement is governed by the laws of the State of New York and the 201 | intellectual property laws of the United States of America. No party to this 202 | Agreement will bring a legal action under this Agreement more than one year 203 | after the cause of action arose. Each party waives its rights to a jury trial 204 | in any resulting litigation. 205 | -------------------------------------------------------------------------------- /web/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "web", 3 | "lockfileVersion": 2, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "dependencies": { 8 | "@nextjournal/lang-clojure": "^1.0.0", 9 | "codemirror": "^6.0.1" 10 | }, 11 | "devDependencies": { 12 | "shadow-cljs": "^2.21.0" 13 | } 14 | }, 15 | "node_modules/@codemirror/autocomplete": { 16 | "version": "6.4.2", 17 | "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.4.2.tgz", 18 | "integrity": "sha512-8WE2xp+D0MpWEv5lZ6zPW1/tf4AGb358T5GWYiKEuCP8MvFfT3tH2mIF9Y2yr2e3KbHuSvsVhosiEyqCpiJhZQ==", 19 | "dependencies": { 20 | "@codemirror/language": "^6.0.0", 21 | "@codemirror/state": "^6.0.0", 22 | "@codemirror/view": "^6.6.0", 23 | "@lezer/common": "^1.0.0" 24 | }, 25 | "peerDependencies": { 26 | "@codemirror/language": "^6.0.0", 27 | "@codemirror/state": "^6.0.0", 28 | "@codemirror/view": "^6.0.0", 29 | "@lezer/common": "^1.0.0" 30 | } 31 | }, 32 | "node_modules/@codemirror/commands": { 33 | "version": "6.2.2", 34 | "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.2.2.tgz", 35 | "integrity": "sha512-s9lPVW7TxXrI/7voZ+HmD/yiAlwAYn9PH5SUVSUhsxXHhv4yl5eZ3KLntSoTynfdgVYM0oIpccQEWRBQgmNZyw==", 36 | "dependencies": { 37 | "@codemirror/language": "^6.0.0", 38 | "@codemirror/state": "^6.2.0", 39 | "@codemirror/view": "^6.0.0", 40 | "@lezer/common": "^1.0.0" 41 | } 42 | }, 43 | "node_modules/@codemirror/language": { 44 | "version": "6.6.0", 45 | "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.6.0.tgz", 46 | "integrity": "sha512-cwUd6lzt3MfNYOobdjf14ZkLbJcnv4WtndYaoBkbor/vF+rCNguMPK0IRtvZJG4dsWiaWPcK8x1VijhvSxnstg==", 47 | "dependencies": { 48 | "@codemirror/state": "^6.0.0", 49 | "@codemirror/view": "^6.0.0", 50 | "@lezer/common": "^1.0.0", 51 | "@lezer/highlight": "^1.0.0", 52 | "@lezer/lr": "^1.0.0", 53 | "style-mod": "^4.0.0" 54 | } 55 | }, 56 | "node_modules/@codemirror/lint": { 57 | "version": "6.2.0", 58 | "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.2.0.tgz", 59 | "integrity": "sha512-KVCECmR2fFeYBr1ZXDVue7x3q5PMI0PzcIbA+zKufnkniMBo1325t0h1jM85AKp8l3tj67LRxVpZfgDxEXlQkg==", 60 | "dependencies": { 61 | "@codemirror/state": "^6.0.0", 62 | "@codemirror/view": "^6.0.0", 63 | "crelt": "^1.0.5" 64 | } 65 | }, 66 | "node_modules/@codemirror/search": { 67 | "version": "6.3.0", 68 | "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.3.0.tgz", 69 | "integrity": "sha512-rBhZxzT34CarfhgCZGhaLBScABDN3iqJxixzNuINp9lrb3lzm0nTpR77G1VrxGO3HOGK7j62jcJftQM7eCOIuw==", 70 | "dependencies": { 71 | "@codemirror/state": "^6.0.0", 72 | "@codemirror/view": "^6.0.0", 73 | "crelt": "^1.0.5" 74 | } 75 | }, 76 | "node_modules/@codemirror/state": { 77 | "version": "6.2.0", 78 | "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.0.tgz", 79 | "integrity": "sha512-69QXtcrsc3RYtOtd+GsvczJ319udtBf1PTrr2KbLWM/e2CXUPnh0Nz9AUo8WfhSQ7GeL8dPVNUmhQVgpmuaNGA==" 80 | }, 81 | "node_modules/@codemirror/view": { 82 | "version": "6.9.3", 83 | "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.9.3.tgz", 84 | "integrity": "sha512-BJ5mvEIhFM+SrNwc5X8pLIvMM9ffjkviVbxpg84Xk2OE8ZyKaEbId8kX+nAYEEso7+qnbwsXe1bkAHsasebMow==", 85 | "dependencies": { 86 | "@codemirror/state": "^6.1.4", 87 | "style-mod": "^4.0.0", 88 | "w3c-keyname": "^2.2.4" 89 | } 90 | }, 91 | "node_modules/@lezer/common": { 92 | "version": "1.0.2", 93 | "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.2.tgz", 94 | "integrity": "sha512-SVgiGtMnMnW3ActR8SXgsDhw7a0w0ChHSYAyAUxxrOiJ1OqYWEKk/xJd84tTSPo1mo6DXLObAJALNnd0Hrv7Ng==" 95 | }, 96 | "node_modules/@lezer/highlight": { 97 | "version": "1.1.3", 98 | "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.1.3.tgz", 99 | "integrity": "sha512-3vLKLPThO4td43lYRBygmMY18JN3CPh9w+XS2j8WC30vR4yZeFG4z1iFe4jXE43NtGqe//zHW5q8ENLlHvz9gw==", 100 | "dependencies": { 101 | "@lezer/common": "^1.0.0" 102 | } 103 | }, 104 | "node_modules/@lezer/lr": { 105 | "version": "1.3.3", 106 | "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.3.3.tgz", 107 | "integrity": "sha512-JPQe3mwJlzEVqy67iQiiGozhcngbO8QBgpqZM6oL1Wj/dXckrEexpBLeFkq0edtW5IqnPRFxA24BHJni8Js69w==", 108 | "dependencies": { 109 | "@lezer/common": "^1.0.0" 110 | } 111 | }, 112 | "node_modules/@nextjournal/lang-clojure": { 113 | "version": "1.0.0", 114 | "resolved": "https://registry.npmjs.org/@nextjournal/lang-clojure/-/lang-clojure-1.0.0.tgz", 115 | "integrity": "sha512-gOCV71XrYD0DhwGoPMWZmZ0r92/lIHsqQu9QWdpZYYBwiChNwMO4sbVMP7eTuAqffFB2BTtCSC+1skSH9d3bNg==", 116 | "dependencies": { 117 | "@codemirror/language": "^6.0.0", 118 | "@nextjournal/lezer-clojure": "1.0.0" 119 | } 120 | }, 121 | "node_modules/@nextjournal/lezer-clojure": { 122 | "version": "1.0.0", 123 | "resolved": "https://registry.npmjs.org/@nextjournal/lezer-clojure/-/lezer-clojure-1.0.0.tgz", 124 | "integrity": "sha512-VZyuGu4zw5mkTOwQBTaGVNWmsOZAPw5ZRxu1/Knk/Xfs7EDBIogwIs5UXTYkuECX5ZQB8eOB+wKA2pc7VyqaZQ==", 125 | "dependencies": { 126 | "@lezer/lr": "^1.0.0" 127 | } 128 | }, 129 | "node_modules/asn1.js": { 130 | "version": "5.4.1", 131 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", 132 | "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", 133 | "dev": true, 134 | "dependencies": { 135 | "bn.js": "^4.0.0", 136 | "inherits": "^2.0.1", 137 | "minimalistic-assert": "^1.0.0", 138 | "safer-buffer": "^2.1.0" 139 | } 140 | }, 141 | "node_modules/asn1.js/node_modules/bn.js": { 142 | "version": "4.12.0", 143 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 144 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 145 | "dev": true 146 | }, 147 | "node_modules/assert": { 148 | "version": "1.5.0", 149 | "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", 150 | "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", 151 | "dev": true, 152 | "dependencies": { 153 | "object-assign": "^4.1.1", 154 | "util": "0.10.3" 155 | } 156 | }, 157 | "node_modules/assert/node_modules/inherits": { 158 | "version": "2.0.1", 159 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 160 | "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", 161 | "dev": true 162 | }, 163 | "node_modules/assert/node_modules/util": { 164 | "version": "0.10.3", 165 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", 166 | "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", 167 | "dev": true, 168 | "dependencies": { 169 | "inherits": "2.0.1" 170 | } 171 | }, 172 | "node_modules/base64-js": { 173 | "version": "1.5.1", 174 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 175 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 176 | "dev": true, 177 | "funding": [ 178 | { 179 | "type": "github", 180 | "url": "https://github.com/sponsors/feross" 181 | }, 182 | { 183 | "type": "patreon", 184 | "url": "https://www.patreon.com/feross" 185 | }, 186 | { 187 | "type": "consulting", 188 | "url": "https://feross.org/support" 189 | } 190 | ] 191 | }, 192 | "node_modules/bn.js": { 193 | "version": "5.2.1", 194 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", 195 | "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", 196 | "dev": true 197 | }, 198 | "node_modules/brorand": { 199 | "version": "1.1.0", 200 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 201 | "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", 202 | "dev": true 203 | }, 204 | "node_modules/browserify-aes": { 205 | "version": "1.2.0", 206 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 207 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", 208 | "dev": true, 209 | "dependencies": { 210 | "buffer-xor": "^1.0.3", 211 | "cipher-base": "^1.0.0", 212 | "create-hash": "^1.1.0", 213 | "evp_bytestokey": "^1.0.3", 214 | "inherits": "^2.0.1", 215 | "safe-buffer": "^5.0.1" 216 | } 217 | }, 218 | "node_modules/browserify-cipher": { 219 | "version": "1.0.1", 220 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", 221 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", 222 | "dev": true, 223 | "dependencies": { 224 | "browserify-aes": "^1.0.4", 225 | "browserify-des": "^1.0.0", 226 | "evp_bytestokey": "^1.0.0" 227 | } 228 | }, 229 | "node_modules/browserify-des": { 230 | "version": "1.0.2", 231 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", 232 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", 233 | "dev": true, 234 | "dependencies": { 235 | "cipher-base": "^1.0.1", 236 | "des.js": "^1.0.0", 237 | "inherits": "^2.0.1", 238 | "safe-buffer": "^5.1.2" 239 | } 240 | }, 241 | "node_modules/browserify-rsa": { 242 | "version": "4.1.0", 243 | "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", 244 | "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", 245 | "dev": true, 246 | "dependencies": { 247 | "bn.js": "^5.0.0", 248 | "randombytes": "^2.0.1" 249 | } 250 | }, 251 | "node_modules/browserify-sign": { 252 | "version": "4.2.1", 253 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", 254 | "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", 255 | "dev": true, 256 | "dependencies": { 257 | "bn.js": "^5.1.1", 258 | "browserify-rsa": "^4.0.1", 259 | "create-hash": "^1.2.0", 260 | "create-hmac": "^1.1.7", 261 | "elliptic": "^6.5.3", 262 | "inherits": "^2.0.4", 263 | "parse-asn1": "^5.1.5", 264 | "readable-stream": "^3.6.0", 265 | "safe-buffer": "^5.2.0" 266 | } 267 | }, 268 | "node_modules/browserify-sign/node_modules/readable-stream": { 269 | "version": "3.6.2", 270 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 271 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 272 | "dev": true, 273 | "dependencies": { 274 | "inherits": "^2.0.3", 275 | "string_decoder": "^1.1.1", 276 | "util-deprecate": "^1.0.1" 277 | }, 278 | "engines": { 279 | "node": ">= 6" 280 | } 281 | }, 282 | "node_modules/browserify-zlib": { 283 | "version": "0.2.0", 284 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", 285 | "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", 286 | "dev": true, 287 | "dependencies": { 288 | "pako": "~1.0.5" 289 | } 290 | }, 291 | "node_modules/buffer": { 292 | "version": "4.9.2", 293 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", 294 | "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", 295 | "dev": true, 296 | "dependencies": { 297 | "base64-js": "^1.0.2", 298 | "ieee754": "^1.1.4", 299 | "isarray": "^1.0.0" 300 | } 301 | }, 302 | "node_modules/buffer-xor": { 303 | "version": "1.0.3", 304 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 305 | "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", 306 | "dev": true 307 | }, 308 | "node_modules/builtin-status-codes": { 309 | "version": "3.0.0", 310 | "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", 311 | "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", 312 | "dev": true 313 | }, 314 | "node_modules/cipher-base": { 315 | "version": "1.0.4", 316 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 317 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 318 | "dev": true, 319 | "dependencies": { 320 | "inherits": "^2.0.1", 321 | "safe-buffer": "^5.0.1" 322 | } 323 | }, 324 | "node_modules/codemirror": { 325 | "version": "6.0.1", 326 | "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", 327 | "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", 328 | "dependencies": { 329 | "@codemirror/autocomplete": "^6.0.0", 330 | "@codemirror/commands": "^6.0.0", 331 | "@codemirror/language": "^6.0.0", 332 | "@codemirror/lint": "^6.0.0", 333 | "@codemirror/search": "^6.0.0", 334 | "@codemirror/state": "^6.0.0", 335 | "@codemirror/view": "^6.0.0" 336 | } 337 | }, 338 | "node_modules/console-browserify": { 339 | "version": "1.2.0", 340 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", 341 | "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", 342 | "dev": true 343 | }, 344 | "node_modules/constants-browserify": { 345 | "version": "1.0.0", 346 | "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", 347 | "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", 348 | "dev": true 349 | }, 350 | "node_modules/core-util-is": { 351 | "version": "1.0.3", 352 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 353 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 354 | "dev": true 355 | }, 356 | "node_modules/create-ecdh": { 357 | "version": "4.0.4", 358 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", 359 | "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", 360 | "dev": true, 361 | "dependencies": { 362 | "bn.js": "^4.1.0", 363 | "elliptic": "^6.5.3" 364 | } 365 | }, 366 | "node_modules/create-ecdh/node_modules/bn.js": { 367 | "version": "4.12.0", 368 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 369 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 370 | "dev": true 371 | }, 372 | "node_modules/create-hash": { 373 | "version": "1.2.0", 374 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 375 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 376 | "dev": true, 377 | "dependencies": { 378 | "cipher-base": "^1.0.1", 379 | "inherits": "^2.0.1", 380 | "md5.js": "^1.3.4", 381 | "ripemd160": "^2.0.1", 382 | "sha.js": "^2.4.0" 383 | } 384 | }, 385 | "node_modules/create-hmac": { 386 | "version": "1.1.7", 387 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 388 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 389 | "dev": true, 390 | "dependencies": { 391 | "cipher-base": "^1.0.3", 392 | "create-hash": "^1.1.0", 393 | "inherits": "^2.0.1", 394 | "ripemd160": "^2.0.0", 395 | "safe-buffer": "^5.0.1", 396 | "sha.js": "^2.4.8" 397 | } 398 | }, 399 | "node_modules/crelt": { 400 | "version": "1.0.5", 401 | "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz", 402 | "integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==" 403 | }, 404 | "node_modules/crypto-browserify": { 405 | "version": "3.12.0", 406 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", 407 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", 408 | "dev": true, 409 | "dependencies": { 410 | "browserify-cipher": "^1.0.0", 411 | "browserify-sign": "^4.0.0", 412 | "create-ecdh": "^4.0.0", 413 | "create-hash": "^1.1.0", 414 | "create-hmac": "^1.1.0", 415 | "diffie-hellman": "^5.0.0", 416 | "inherits": "^2.0.1", 417 | "pbkdf2": "^3.0.3", 418 | "public-encrypt": "^4.0.0", 419 | "randombytes": "^2.0.0", 420 | "randomfill": "^1.0.3" 421 | }, 422 | "engines": { 423 | "node": "*" 424 | } 425 | }, 426 | "node_modules/des.js": { 427 | "version": "1.0.1", 428 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", 429 | "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", 430 | "dev": true, 431 | "dependencies": { 432 | "inherits": "^2.0.1", 433 | "minimalistic-assert": "^1.0.0" 434 | } 435 | }, 436 | "node_modules/diffie-hellman": { 437 | "version": "5.0.3", 438 | "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 439 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", 440 | "dev": true, 441 | "dependencies": { 442 | "bn.js": "^4.1.0", 443 | "miller-rabin": "^4.0.0", 444 | "randombytes": "^2.0.0" 445 | } 446 | }, 447 | "node_modules/diffie-hellman/node_modules/bn.js": { 448 | "version": "4.12.0", 449 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 450 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 451 | "dev": true 452 | }, 453 | "node_modules/domain-browser": { 454 | "version": "1.2.0", 455 | "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", 456 | "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", 457 | "dev": true, 458 | "engines": { 459 | "node": ">=0.4", 460 | "npm": ">=1.2" 461 | } 462 | }, 463 | "node_modules/elliptic": { 464 | "version": "6.5.4", 465 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", 466 | "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", 467 | "dev": true, 468 | "dependencies": { 469 | "bn.js": "^4.11.9", 470 | "brorand": "^1.1.0", 471 | "hash.js": "^1.0.0", 472 | "hmac-drbg": "^1.0.1", 473 | "inherits": "^2.0.4", 474 | "minimalistic-assert": "^1.0.1", 475 | "minimalistic-crypto-utils": "^1.0.1" 476 | } 477 | }, 478 | "node_modules/elliptic/node_modules/bn.js": { 479 | "version": "4.12.0", 480 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 481 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 482 | "dev": true 483 | }, 484 | "node_modules/events": { 485 | "version": "3.3.0", 486 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 487 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 488 | "dev": true, 489 | "engines": { 490 | "node": ">=0.8.x" 491 | } 492 | }, 493 | "node_modules/evp_bytestokey": { 494 | "version": "1.0.3", 495 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", 496 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", 497 | "dev": true, 498 | "dependencies": { 499 | "md5.js": "^1.3.4", 500 | "safe-buffer": "^5.1.1" 501 | } 502 | }, 503 | "node_modules/hash-base": { 504 | "version": "3.1.0", 505 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", 506 | "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", 507 | "dev": true, 508 | "dependencies": { 509 | "inherits": "^2.0.4", 510 | "readable-stream": "^3.6.0", 511 | "safe-buffer": "^5.2.0" 512 | }, 513 | "engines": { 514 | "node": ">=4" 515 | } 516 | }, 517 | "node_modules/hash-base/node_modules/readable-stream": { 518 | "version": "3.6.2", 519 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 520 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 521 | "dev": true, 522 | "dependencies": { 523 | "inherits": "^2.0.3", 524 | "string_decoder": "^1.1.1", 525 | "util-deprecate": "^1.0.1" 526 | }, 527 | "engines": { 528 | "node": ">= 6" 529 | } 530 | }, 531 | "node_modules/hash.js": { 532 | "version": "1.1.7", 533 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 534 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 535 | "dev": true, 536 | "dependencies": { 537 | "inherits": "^2.0.3", 538 | "minimalistic-assert": "^1.0.1" 539 | } 540 | }, 541 | "node_modules/hmac-drbg": { 542 | "version": "1.0.1", 543 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 544 | "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", 545 | "dev": true, 546 | "dependencies": { 547 | "hash.js": "^1.0.3", 548 | "minimalistic-assert": "^1.0.0", 549 | "minimalistic-crypto-utils": "^1.0.1" 550 | } 551 | }, 552 | "node_modules/https-browserify": { 553 | "version": "1.0.0", 554 | "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", 555 | "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", 556 | "dev": true 557 | }, 558 | "node_modules/ieee754": { 559 | "version": "1.2.1", 560 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 561 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 562 | "dev": true, 563 | "funding": [ 564 | { 565 | "type": "github", 566 | "url": "https://github.com/sponsors/feross" 567 | }, 568 | { 569 | "type": "patreon", 570 | "url": "https://www.patreon.com/feross" 571 | }, 572 | { 573 | "type": "consulting", 574 | "url": "https://feross.org/support" 575 | } 576 | ] 577 | }, 578 | "node_modules/inherits": { 579 | "version": "2.0.4", 580 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 581 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 582 | "dev": true 583 | }, 584 | "node_modules/isarray": { 585 | "version": "1.0.0", 586 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 587 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 588 | "dev": true 589 | }, 590 | "node_modules/isexe": { 591 | "version": "2.0.0", 592 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 593 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 594 | "dev": true 595 | }, 596 | "node_modules/md5.js": { 597 | "version": "1.3.5", 598 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 599 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 600 | "dev": true, 601 | "dependencies": { 602 | "hash-base": "^3.0.0", 603 | "inherits": "^2.0.1", 604 | "safe-buffer": "^5.1.2" 605 | } 606 | }, 607 | "node_modules/miller-rabin": { 608 | "version": "4.0.1", 609 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", 610 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", 611 | "dev": true, 612 | "dependencies": { 613 | "bn.js": "^4.0.0", 614 | "brorand": "^1.0.1" 615 | }, 616 | "bin": { 617 | "miller-rabin": "bin/miller-rabin" 618 | } 619 | }, 620 | "node_modules/miller-rabin/node_modules/bn.js": { 621 | "version": "4.12.0", 622 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 623 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 624 | "dev": true 625 | }, 626 | "node_modules/minimalistic-assert": { 627 | "version": "1.0.1", 628 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 629 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", 630 | "dev": true 631 | }, 632 | "node_modules/minimalistic-crypto-utils": { 633 | "version": "1.0.1", 634 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 635 | "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", 636 | "dev": true 637 | }, 638 | "node_modules/node-libs-browser": { 639 | "version": "2.2.1", 640 | "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", 641 | "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", 642 | "dev": true, 643 | "dependencies": { 644 | "assert": "^1.1.1", 645 | "browserify-zlib": "^0.2.0", 646 | "buffer": "^4.3.0", 647 | "console-browserify": "^1.1.0", 648 | "constants-browserify": "^1.0.0", 649 | "crypto-browserify": "^3.11.0", 650 | "domain-browser": "^1.1.1", 651 | "events": "^3.0.0", 652 | "https-browserify": "^1.0.0", 653 | "os-browserify": "^0.3.0", 654 | "path-browserify": "0.0.1", 655 | "process": "^0.11.10", 656 | "punycode": "^1.2.4", 657 | "querystring-es3": "^0.2.0", 658 | "readable-stream": "^2.3.3", 659 | "stream-browserify": "^2.0.1", 660 | "stream-http": "^2.7.2", 661 | "string_decoder": "^1.0.0", 662 | "timers-browserify": "^2.0.4", 663 | "tty-browserify": "0.0.0", 664 | "url": "^0.11.0", 665 | "util": "^0.11.0", 666 | "vm-browserify": "^1.0.1" 667 | } 668 | }, 669 | "node_modules/object-assign": { 670 | "version": "4.1.1", 671 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 672 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 673 | "dev": true, 674 | "engines": { 675 | "node": ">=0.10.0" 676 | } 677 | }, 678 | "node_modules/os-browserify": { 679 | "version": "0.3.0", 680 | "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", 681 | "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", 682 | "dev": true 683 | }, 684 | "node_modules/pako": { 685 | "version": "1.0.11", 686 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", 687 | "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", 688 | "dev": true 689 | }, 690 | "node_modules/parse-asn1": { 691 | "version": "5.1.6", 692 | "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", 693 | "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", 694 | "dev": true, 695 | "dependencies": { 696 | "asn1.js": "^5.2.0", 697 | "browserify-aes": "^1.0.0", 698 | "evp_bytestokey": "^1.0.0", 699 | "pbkdf2": "^3.0.3", 700 | "safe-buffer": "^5.1.1" 701 | } 702 | }, 703 | "node_modules/path-browserify": { 704 | "version": "0.0.1", 705 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", 706 | "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", 707 | "dev": true 708 | }, 709 | "node_modules/pbkdf2": { 710 | "version": "3.1.2", 711 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", 712 | "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", 713 | "dev": true, 714 | "dependencies": { 715 | "create-hash": "^1.1.2", 716 | "create-hmac": "^1.1.4", 717 | "ripemd160": "^2.0.1", 718 | "safe-buffer": "^5.0.1", 719 | "sha.js": "^2.4.8" 720 | }, 721 | "engines": { 722 | "node": ">=0.12" 723 | } 724 | }, 725 | "node_modules/process": { 726 | "version": "0.11.10", 727 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 728 | "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", 729 | "dev": true, 730 | "engines": { 731 | "node": ">= 0.6.0" 732 | } 733 | }, 734 | "node_modules/process-nextick-args": { 735 | "version": "2.0.1", 736 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 737 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 738 | "dev": true 739 | }, 740 | "node_modules/public-encrypt": { 741 | "version": "4.0.3", 742 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", 743 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", 744 | "dev": true, 745 | "dependencies": { 746 | "bn.js": "^4.1.0", 747 | "browserify-rsa": "^4.0.0", 748 | "create-hash": "^1.1.0", 749 | "parse-asn1": "^5.0.0", 750 | "randombytes": "^2.0.1", 751 | "safe-buffer": "^5.1.2" 752 | } 753 | }, 754 | "node_modules/public-encrypt/node_modules/bn.js": { 755 | "version": "4.12.0", 756 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 757 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 758 | "dev": true 759 | }, 760 | "node_modules/punycode": { 761 | "version": "1.4.1", 762 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 763 | "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", 764 | "dev": true 765 | }, 766 | "node_modules/querystring": { 767 | "version": "0.2.0", 768 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 769 | "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", 770 | "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", 771 | "dev": true, 772 | "engines": { 773 | "node": ">=0.4.x" 774 | } 775 | }, 776 | "node_modules/querystring-es3": { 777 | "version": "0.2.1", 778 | "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", 779 | "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", 780 | "dev": true, 781 | "engines": { 782 | "node": ">=0.4.x" 783 | } 784 | }, 785 | "node_modules/randombytes": { 786 | "version": "2.1.0", 787 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 788 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 789 | "dev": true, 790 | "dependencies": { 791 | "safe-buffer": "^5.1.0" 792 | } 793 | }, 794 | "node_modules/randomfill": { 795 | "version": "1.0.4", 796 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", 797 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", 798 | "dev": true, 799 | "dependencies": { 800 | "randombytes": "^2.0.5", 801 | "safe-buffer": "^5.1.0" 802 | } 803 | }, 804 | "node_modules/readable-stream": { 805 | "version": "2.3.8", 806 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", 807 | "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", 808 | "dev": true, 809 | "dependencies": { 810 | "core-util-is": "~1.0.0", 811 | "inherits": "~2.0.3", 812 | "isarray": "~1.0.0", 813 | "process-nextick-args": "~2.0.0", 814 | "safe-buffer": "~5.1.1", 815 | "string_decoder": "~1.1.1", 816 | "util-deprecate": "~1.0.1" 817 | } 818 | }, 819 | "node_modules/readable-stream/node_modules/safe-buffer": { 820 | "version": "5.1.2", 821 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 822 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 823 | "dev": true 824 | }, 825 | "node_modules/readable-stream/node_modules/string_decoder": { 826 | "version": "1.1.1", 827 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 828 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 829 | "dev": true, 830 | "dependencies": { 831 | "safe-buffer": "~5.1.0" 832 | } 833 | }, 834 | "node_modules/readline-sync": { 835 | "version": "1.4.10", 836 | "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", 837 | "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", 838 | "dev": true, 839 | "engines": { 840 | "node": ">= 0.8.0" 841 | } 842 | }, 843 | "node_modules/ripemd160": { 844 | "version": "2.0.2", 845 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 846 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 847 | "dev": true, 848 | "dependencies": { 849 | "hash-base": "^3.0.0", 850 | "inherits": "^2.0.1" 851 | } 852 | }, 853 | "node_modules/safe-buffer": { 854 | "version": "5.2.1", 855 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 856 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 857 | "dev": true, 858 | "funding": [ 859 | { 860 | "type": "github", 861 | "url": "https://github.com/sponsors/feross" 862 | }, 863 | { 864 | "type": "patreon", 865 | "url": "https://www.patreon.com/feross" 866 | }, 867 | { 868 | "type": "consulting", 869 | "url": "https://feross.org/support" 870 | } 871 | ] 872 | }, 873 | "node_modules/safer-buffer": { 874 | "version": "2.1.2", 875 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 876 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 877 | "dev": true 878 | }, 879 | "node_modules/setimmediate": { 880 | "version": "1.0.5", 881 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 882 | "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", 883 | "dev": true 884 | }, 885 | "node_modules/sha.js": { 886 | "version": "2.4.11", 887 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 888 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 889 | "dev": true, 890 | "dependencies": { 891 | "inherits": "^2.0.1", 892 | "safe-buffer": "^5.0.1" 893 | }, 894 | "bin": { 895 | "sha.js": "bin.js" 896 | } 897 | }, 898 | "node_modules/shadow-cljs": { 899 | "version": "2.22.6", 900 | "resolved": "https://registry.npmjs.org/shadow-cljs/-/shadow-cljs-2.22.6.tgz", 901 | "integrity": "sha512-y65wZGhRJ5ox5f/JLR3UWNck1xrutKmqseABp59k+V0JGcLKgKTIy85hlqBZ7tLQer8tDeuJ/TFHGQA3QygHMA==", 902 | "dev": true, 903 | "dependencies": { 904 | "node-libs-browser": "^2.2.1", 905 | "readline-sync": "^1.4.7", 906 | "shadow-cljs-jar": "1.3.4", 907 | "source-map-support": "^0.4.15", 908 | "which": "^1.3.1", 909 | "ws": "^7.4.6" 910 | }, 911 | "bin": { 912 | "shadow-cljs": "cli/runner.js" 913 | }, 914 | "engines": { 915 | "node": ">=6.0.0" 916 | } 917 | }, 918 | "node_modules/shadow-cljs-jar": { 919 | "version": "1.3.4", 920 | "resolved": "https://registry.npmjs.org/shadow-cljs-jar/-/shadow-cljs-jar-1.3.4.tgz", 921 | "integrity": "sha512-cZB2pzVXBnhpJ6PQdsjO+j/MksR28mv4QD/hP/2y1fsIa9Z9RutYgh3N34FZ8Ktl4puAXaIGlct+gMCJ5BmwmA==", 922 | "dev": true 923 | }, 924 | "node_modules/source-map": { 925 | "version": "0.5.7", 926 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 927 | "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", 928 | "dev": true, 929 | "engines": { 930 | "node": ">=0.10.0" 931 | } 932 | }, 933 | "node_modules/source-map-support": { 934 | "version": "0.4.18", 935 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 936 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 937 | "dev": true, 938 | "dependencies": { 939 | "source-map": "^0.5.6" 940 | } 941 | }, 942 | "node_modules/stream-browserify": { 943 | "version": "2.0.2", 944 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", 945 | "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", 946 | "dev": true, 947 | "dependencies": { 948 | "inherits": "~2.0.1", 949 | "readable-stream": "^2.0.2" 950 | } 951 | }, 952 | "node_modules/stream-http": { 953 | "version": "2.8.3", 954 | "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", 955 | "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", 956 | "dev": true, 957 | "dependencies": { 958 | "builtin-status-codes": "^3.0.0", 959 | "inherits": "^2.0.1", 960 | "readable-stream": "^2.3.6", 961 | "to-arraybuffer": "^1.0.0", 962 | "xtend": "^4.0.0" 963 | } 964 | }, 965 | "node_modules/string_decoder": { 966 | "version": "1.3.0", 967 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 968 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 969 | "dev": true, 970 | "dependencies": { 971 | "safe-buffer": "~5.2.0" 972 | } 973 | }, 974 | "node_modules/style-mod": { 975 | "version": "4.0.2", 976 | "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.2.tgz", 977 | "integrity": "sha512-C4myMmRTO8iaC5Gg+N1ftK2WT4eXUTMAa+HEFPPrfVeO/NtqLTtAmV1HbqnuGtLwCek44Ra76fdGUkSqjiMPcQ==" 978 | }, 979 | "node_modules/timers-browserify": { 980 | "version": "2.0.12", 981 | "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", 982 | "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", 983 | "dev": true, 984 | "dependencies": { 985 | "setimmediate": "^1.0.4" 986 | }, 987 | "engines": { 988 | "node": ">=0.6.0" 989 | } 990 | }, 991 | "node_modules/to-arraybuffer": { 992 | "version": "1.0.1", 993 | "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", 994 | "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", 995 | "dev": true 996 | }, 997 | "node_modules/tty-browserify": { 998 | "version": "0.0.0", 999 | "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", 1000 | "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", 1001 | "dev": true 1002 | }, 1003 | "node_modules/url": { 1004 | "version": "0.11.0", 1005 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 1006 | "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", 1007 | "dev": true, 1008 | "dependencies": { 1009 | "punycode": "1.3.2", 1010 | "querystring": "0.2.0" 1011 | } 1012 | }, 1013 | "node_modules/url/node_modules/punycode": { 1014 | "version": "1.3.2", 1015 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 1016 | "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", 1017 | "dev": true 1018 | }, 1019 | "node_modules/util": { 1020 | "version": "0.11.1", 1021 | "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", 1022 | "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", 1023 | "dev": true, 1024 | "dependencies": { 1025 | "inherits": "2.0.3" 1026 | } 1027 | }, 1028 | "node_modules/util-deprecate": { 1029 | "version": "1.0.2", 1030 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1031 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 1032 | "dev": true 1033 | }, 1034 | "node_modules/util/node_modules/inherits": { 1035 | "version": "2.0.3", 1036 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1037 | "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", 1038 | "dev": true 1039 | }, 1040 | "node_modules/vm-browserify": { 1041 | "version": "1.1.2", 1042 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", 1043 | "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", 1044 | "dev": true 1045 | }, 1046 | "node_modules/w3c-keyname": { 1047 | "version": "2.2.6", 1048 | "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz", 1049 | "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==" 1050 | }, 1051 | "node_modules/which": { 1052 | "version": "1.3.1", 1053 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1054 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1055 | "dev": true, 1056 | "dependencies": { 1057 | "isexe": "^2.0.0" 1058 | }, 1059 | "bin": { 1060 | "which": "bin/which" 1061 | } 1062 | }, 1063 | "node_modules/ws": { 1064 | "version": "7.5.9", 1065 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", 1066 | "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", 1067 | "dev": true, 1068 | "engines": { 1069 | "node": ">=8.3.0" 1070 | }, 1071 | "peerDependencies": { 1072 | "bufferutil": "^4.0.1", 1073 | "utf-8-validate": "^5.0.2" 1074 | }, 1075 | "peerDependenciesMeta": { 1076 | "bufferutil": { 1077 | "optional": true 1078 | }, 1079 | "utf-8-validate": { 1080 | "optional": true 1081 | } 1082 | } 1083 | }, 1084 | "node_modules/xtend": { 1085 | "version": "4.0.2", 1086 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1087 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1088 | "dev": true, 1089 | "engines": { 1090 | "node": ">=0.4" 1091 | } 1092 | } 1093 | }, 1094 | "dependencies": { 1095 | "@codemirror/autocomplete": { 1096 | "version": "6.4.2", 1097 | "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.4.2.tgz", 1098 | "integrity": "sha512-8WE2xp+D0MpWEv5lZ6zPW1/tf4AGb358T5GWYiKEuCP8MvFfT3tH2mIF9Y2yr2e3KbHuSvsVhosiEyqCpiJhZQ==", 1099 | "requires": { 1100 | "@codemirror/language": "^6.0.0", 1101 | "@codemirror/state": "^6.0.0", 1102 | "@codemirror/view": "^6.6.0", 1103 | "@lezer/common": "^1.0.0" 1104 | } 1105 | }, 1106 | "@codemirror/commands": { 1107 | "version": "6.2.2", 1108 | "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.2.2.tgz", 1109 | "integrity": "sha512-s9lPVW7TxXrI/7voZ+HmD/yiAlwAYn9PH5SUVSUhsxXHhv4yl5eZ3KLntSoTynfdgVYM0oIpccQEWRBQgmNZyw==", 1110 | "requires": { 1111 | "@codemirror/language": "^6.0.0", 1112 | "@codemirror/state": "^6.2.0", 1113 | "@codemirror/view": "^6.0.0", 1114 | "@lezer/common": "^1.0.0" 1115 | } 1116 | }, 1117 | "@codemirror/language": { 1118 | "version": "6.6.0", 1119 | "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.6.0.tgz", 1120 | "integrity": "sha512-cwUd6lzt3MfNYOobdjf14ZkLbJcnv4WtndYaoBkbor/vF+rCNguMPK0IRtvZJG4dsWiaWPcK8x1VijhvSxnstg==", 1121 | "requires": { 1122 | "@codemirror/state": "^6.0.0", 1123 | "@codemirror/view": "^6.0.0", 1124 | "@lezer/common": "^1.0.0", 1125 | "@lezer/highlight": "^1.0.0", 1126 | "@lezer/lr": "^1.0.0", 1127 | "style-mod": "^4.0.0" 1128 | } 1129 | }, 1130 | "@codemirror/lint": { 1131 | "version": "6.2.0", 1132 | "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.2.0.tgz", 1133 | "integrity": "sha512-KVCECmR2fFeYBr1ZXDVue7x3q5PMI0PzcIbA+zKufnkniMBo1325t0h1jM85AKp8l3tj67LRxVpZfgDxEXlQkg==", 1134 | "requires": { 1135 | "@codemirror/state": "^6.0.0", 1136 | "@codemirror/view": "^6.0.0", 1137 | "crelt": "^1.0.5" 1138 | } 1139 | }, 1140 | "@codemirror/search": { 1141 | "version": "6.3.0", 1142 | "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.3.0.tgz", 1143 | "integrity": "sha512-rBhZxzT34CarfhgCZGhaLBScABDN3iqJxixzNuINp9lrb3lzm0nTpR77G1VrxGO3HOGK7j62jcJftQM7eCOIuw==", 1144 | "requires": { 1145 | "@codemirror/state": "^6.0.0", 1146 | "@codemirror/view": "^6.0.0", 1147 | "crelt": "^1.0.5" 1148 | } 1149 | }, 1150 | "@codemirror/state": { 1151 | "version": "6.2.0", 1152 | "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.0.tgz", 1153 | "integrity": "sha512-69QXtcrsc3RYtOtd+GsvczJ319udtBf1PTrr2KbLWM/e2CXUPnh0Nz9AUo8WfhSQ7GeL8dPVNUmhQVgpmuaNGA==" 1154 | }, 1155 | "@codemirror/view": { 1156 | "version": "6.9.3", 1157 | "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.9.3.tgz", 1158 | "integrity": "sha512-BJ5mvEIhFM+SrNwc5X8pLIvMM9ffjkviVbxpg84Xk2OE8ZyKaEbId8kX+nAYEEso7+qnbwsXe1bkAHsasebMow==", 1159 | "requires": { 1160 | "@codemirror/state": "^6.1.4", 1161 | "style-mod": "^4.0.0", 1162 | "w3c-keyname": "^2.2.4" 1163 | } 1164 | }, 1165 | "@lezer/common": { 1166 | "version": "1.0.2", 1167 | "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.2.tgz", 1168 | "integrity": "sha512-SVgiGtMnMnW3ActR8SXgsDhw7a0w0ChHSYAyAUxxrOiJ1OqYWEKk/xJd84tTSPo1mo6DXLObAJALNnd0Hrv7Ng==" 1169 | }, 1170 | "@lezer/highlight": { 1171 | "version": "1.1.3", 1172 | "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.1.3.tgz", 1173 | "integrity": "sha512-3vLKLPThO4td43lYRBygmMY18JN3CPh9w+XS2j8WC30vR4yZeFG4z1iFe4jXE43NtGqe//zHW5q8ENLlHvz9gw==", 1174 | "requires": { 1175 | "@lezer/common": "^1.0.0" 1176 | } 1177 | }, 1178 | "@lezer/lr": { 1179 | "version": "1.3.3", 1180 | "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.3.3.tgz", 1181 | "integrity": "sha512-JPQe3mwJlzEVqy67iQiiGozhcngbO8QBgpqZM6oL1Wj/dXckrEexpBLeFkq0edtW5IqnPRFxA24BHJni8Js69w==", 1182 | "requires": { 1183 | "@lezer/common": "^1.0.0" 1184 | } 1185 | }, 1186 | "@nextjournal/lang-clojure": { 1187 | "version": "1.0.0", 1188 | "resolved": "https://registry.npmjs.org/@nextjournal/lang-clojure/-/lang-clojure-1.0.0.tgz", 1189 | "integrity": "sha512-gOCV71XrYD0DhwGoPMWZmZ0r92/lIHsqQu9QWdpZYYBwiChNwMO4sbVMP7eTuAqffFB2BTtCSC+1skSH9d3bNg==", 1190 | "requires": { 1191 | "@codemirror/language": "^6.0.0", 1192 | "@nextjournal/lezer-clojure": "1.0.0" 1193 | } 1194 | }, 1195 | "@nextjournal/lezer-clojure": { 1196 | "version": "1.0.0", 1197 | "resolved": "https://registry.npmjs.org/@nextjournal/lezer-clojure/-/lezer-clojure-1.0.0.tgz", 1198 | "integrity": "sha512-VZyuGu4zw5mkTOwQBTaGVNWmsOZAPw5ZRxu1/Knk/Xfs7EDBIogwIs5UXTYkuECX5ZQB8eOB+wKA2pc7VyqaZQ==", 1199 | "requires": { 1200 | "@lezer/lr": "^1.0.0" 1201 | } 1202 | }, 1203 | "asn1.js": { 1204 | "version": "5.4.1", 1205 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", 1206 | "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", 1207 | "dev": true, 1208 | "requires": { 1209 | "bn.js": "^4.0.0", 1210 | "inherits": "^2.0.1", 1211 | "minimalistic-assert": "^1.0.0", 1212 | "safer-buffer": "^2.1.0" 1213 | }, 1214 | "dependencies": { 1215 | "bn.js": { 1216 | "version": "4.12.0", 1217 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 1218 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 1219 | "dev": true 1220 | } 1221 | } 1222 | }, 1223 | "assert": { 1224 | "version": "1.5.0", 1225 | "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", 1226 | "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", 1227 | "dev": true, 1228 | "requires": { 1229 | "object-assign": "^4.1.1", 1230 | "util": "0.10.3" 1231 | }, 1232 | "dependencies": { 1233 | "inherits": { 1234 | "version": "2.0.1", 1235 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 1236 | "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", 1237 | "dev": true 1238 | }, 1239 | "util": { 1240 | "version": "0.10.3", 1241 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", 1242 | "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", 1243 | "dev": true, 1244 | "requires": { 1245 | "inherits": "2.0.1" 1246 | } 1247 | } 1248 | } 1249 | }, 1250 | "base64-js": { 1251 | "version": "1.5.1", 1252 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1253 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 1254 | "dev": true 1255 | }, 1256 | "bn.js": { 1257 | "version": "5.2.1", 1258 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", 1259 | "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", 1260 | "dev": true 1261 | }, 1262 | "brorand": { 1263 | "version": "1.1.0", 1264 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 1265 | "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", 1266 | "dev": true 1267 | }, 1268 | "browserify-aes": { 1269 | "version": "1.2.0", 1270 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 1271 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", 1272 | "dev": true, 1273 | "requires": { 1274 | "buffer-xor": "^1.0.3", 1275 | "cipher-base": "^1.0.0", 1276 | "create-hash": "^1.1.0", 1277 | "evp_bytestokey": "^1.0.3", 1278 | "inherits": "^2.0.1", 1279 | "safe-buffer": "^5.0.1" 1280 | } 1281 | }, 1282 | "browserify-cipher": { 1283 | "version": "1.0.1", 1284 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", 1285 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", 1286 | "dev": true, 1287 | "requires": { 1288 | "browserify-aes": "^1.0.4", 1289 | "browserify-des": "^1.0.0", 1290 | "evp_bytestokey": "^1.0.0" 1291 | } 1292 | }, 1293 | "browserify-des": { 1294 | "version": "1.0.2", 1295 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", 1296 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", 1297 | "dev": true, 1298 | "requires": { 1299 | "cipher-base": "^1.0.1", 1300 | "des.js": "^1.0.0", 1301 | "inherits": "^2.0.1", 1302 | "safe-buffer": "^5.1.2" 1303 | } 1304 | }, 1305 | "browserify-rsa": { 1306 | "version": "4.1.0", 1307 | "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", 1308 | "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", 1309 | "dev": true, 1310 | "requires": { 1311 | "bn.js": "^5.0.0", 1312 | "randombytes": "^2.0.1" 1313 | } 1314 | }, 1315 | "browserify-sign": { 1316 | "version": "4.2.1", 1317 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", 1318 | "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", 1319 | "dev": true, 1320 | "requires": { 1321 | "bn.js": "^5.1.1", 1322 | "browserify-rsa": "^4.0.1", 1323 | "create-hash": "^1.2.0", 1324 | "create-hmac": "^1.1.7", 1325 | "elliptic": "^6.5.3", 1326 | "inherits": "^2.0.4", 1327 | "parse-asn1": "^5.1.5", 1328 | "readable-stream": "^3.6.0", 1329 | "safe-buffer": "^5.2.0" 1330 | }, 1331 | "dependencies": { 1332 | "readable-stream": { 1333 | "version": "3.6.2", 1334 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 1335 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 1336 | "dev": true, 1337 | "requires": { 1338 | "inherits": "^2.0.3", 1339 | "string_decoder": "^1.1.1", 1340 | "util-deprecate": "^1.0.1" 1341 | } 1342 | } 1343 | } 1344 | }, 1345 | "browserify-zlib": { 1346 | "version": "0.2.0", 1347 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", 1348 | "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", 1349 | "dev": true, 1350 | "requires": { 1351 | "pako": "~1.0.5" 1352 | } 1353 | }, 1354 | "buffer": { 1355 | "version": "4.9.2", 1356 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", 1357 | "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", 1358 | "dev": true, 1359 | "requires": { 1360 | "base64-js": "^1.0.2", 1361 | "ieee754": "^1.1.4", 1362 | "isarray": "^1.0.0" 1363 | } 1364 | }, 1365 | "buffer-xor": { 1366 | "version": "1.0.3", 1367 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 1368 | "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", 1369 | "dev": true 1370 | }, 1371 | "builtin-status-codes": { 1372 | "version": "3.0.0", 1373 | "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", 1374 | "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", 1375 | "dev": true 1376 | }, 1377 | "cipher-base": { 1378 | "version": "1.0.4", 1379 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 1380 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 1381 | "dev": true, 1382 | "requires": { 1383 | "inherits": "^2.0.1", 1384 | "safe-buffer": "^5.0.1" 1385 | } 1386 | }, 1387 | "codemirror": { 1388 | "version": "6.0.1", 1389 | "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", 1390 | "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", 1391 | "requires": { 1392 | "@codemirror/autocomplete": "^6.0.0", 1393 | "@codemirror/commands": "^6.0.0", 1394 | "@codemirror/language": "^6.0.0", 1395 | "@codemirror/lint": "^6.0.0", 1396 | "@codemirror/search": "^6.0.0", 1397 | "@codemirror/state": "^6.0.0", 1398 | "@codemirror/view": "^6.0.0" 1399 | } 1400 | }, 1401 | "console-browserify": { 1402 | "version": "1.2.0", 1403 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", 1404 | "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", 1405 | "dev": true 1406 | }, 1407 | "constants-browserify": { 1408 | "version": "1.0.0", 1409 | "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", 1410 | "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", 1411 | "dev": true 1412 | }, 1413 | "core-util-is": { 1414 | "version": "1.0.3", 1415 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 1416 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 1417 | "dev": true 1418 | }, 1419 | "create-ecdh": { 1420 | "version": "4.0.4", 1421 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", 1422 | "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", 1423 | "dev": true, 1424 | "requires": { 1425 | "bn.js": "^4.1.0", 1426 | "elliptic": "^6.5.3" 1427 | }, 1428 | "dependencies": { 1429 | "bn.js": { 1430 | "version": "4.12.0", 1431 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 1432 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 1433 | "dev": true 1434 | } 1435 | } 1436 | }, 1437 | "create-hash": { 1438 | "version": "1.2.0", 1439 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 1440 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 1441 | "dev": true, 1442 | "requires": { 1443 | "cipher-base": "^1.0.1", 1444 | "inherits": "^2.0.1", 1445 | "md5.js": "^1.3.4", 1446 | "ripemd160": "^2.0.1", 1447 | "sha.js": "^2.4.0" 1448 | } 1449 | }, 1450 | "create-hmac": { 1451 | "version": "1.1.7", 1452 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 1453 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 1454 | "dev": true, 1455 | "requires": { 1456 | "cipher-base": "^1.0.3", 1457 | "create-hash": "^1.1.0", 1458 | "inherits": "^2.0.1", 1459 | "ripemd160": "^2.0.0", 1460 | "safe-buffer": "^5.0.1", 1461 | "sha.js": "^2.4.8" 1462 | } 1463 | }, 1464 | "crelt": { 1465 | "version": "1.0.5", 1466 | "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz", 1467 | "integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==" 1468 | }, 1469 | "crypto-browserify": { 1470 | "version": "3.12.0", 1471 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", 1472 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", 1473 | "dev": true, 1474 | "requires": { 1475 | "browserify-cipher": "^1.0.0", 1476 | "browserify-sign": "^4.0.0", 1477 | "create-ecdh": "^4.0.0", 1478 | "create-hash": "^1.1.0", 1479 | "create-hmac": "^1.1.0", 1480 | "diffie-hellman": "^5.0.0", 1481 | "inherits": "^2.0.1", 1482 | "pbkdf2": "^3.0.3", 1483 | "public-encrypt": "^4.0.0", 1484 | "randombytes": "^2.0.0", 1485 | "randomfill": "^1.0.3" 1486 | } 1487 | }, 1488 | "des.js": { 1489 | "version": "1.0.1", 1490 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", 1491 | "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", 1492 | "dev": true, 1493 | "requires": { 1494 | "inherits": "^2.0.1", 1495 | "minimalistic-assert": "^1.0.0" 1496 | } 1497 | }, 1498 | "diffie-hellman": { 1499 | "version": "5.0.3", 1500 | "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 1501 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", 1502 | "dev": true, 1503 | "requires": { 1504 | "bn.js": "^4.1.0", 1505 | "miller-rabin": "^4.0.0", 1506 | "randombytes": "^2.0.0" 1507 | }, 1508 | "dependencies": { 1509 | "bn.js": { 1510 | "version": "4.12.0", 1511 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 1512 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 1513 | "dev": true 1514 | } 1515 | } 1516 | }, 1517 | "domain-browser": { 1518 | "version": "1.2.0", 1519 | "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", 1520 | "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", 1521 | "dev": true 1522 | }, 1523 | "elliptic": { 1524 | "version": "6.5.4", 1525 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", 1526 | "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", 1527 | "dev": true, 1528 | "requires": { 1529 | "bn.js": "^4.11.9", 1530 | "brorand": "^1.1.0", 1531 | "hash.js": "^1.0.0", 1532 | "hmac-drbg": "^1.0.1", 1533 | "inherits": "^2.0.4", 1534 | "minimalistic-assert": "^1.0.1", 1535 | "minimalistic-crypto-utils": "^1.0.1" 1536 | }, 1537 | "dependencies": { 1538 | "bn.js": { 1539 | "version": "4.12.0", 1540 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 1541 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 1542 | "dev": true 1543 | } 1544 | } 1545 | }, 1546 | "events": { 1547 | "version": "3.3.0", 1548 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 1549 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 1550 | "dev": true 1551 | }, 1552 | "evp_bytestokey": { 1553 | "version": "1.0.3", 1554 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", 1555 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", 1556 | "dev": true, 1557 | "requires": { 1558 | "md5.js": "^1.3.4", 1559 | "safe-buffer": "^5.1.1" 1560 | } 1561 | }, 1562 | "hash-base": { 1563 | "version": "3.1.0", 1564 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", 1565 | "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", 1566 | "dev": true, 1567 | "requires": { 1568 | "inherits": "^2.0.4", 1569 | "readable-stream": "^3.6.0", 1570 | "safe-buffer": "^5.2.0" 1571 | }, 1572 | "dependencies": { 1573 | "readable-stream": { 1574 | "version": "3.6.2", 1575 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 1576 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 1577 | "dev": true, 1578 | "requires": { 1579 | "inherits": "^2.0.3", 1580 | "string_decoder": "^1.1.1", 1581 | "util-deprecate": "^1.0.1" 1582 | } 1583 | } 1584 | } 1585 | }, 1586 | "hash.js": { 1587 | "version": "1.1.7", 1588 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 1589 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 1590 | "dev": true, 1591 | "requires": { 1592 | "inherits": "^2.0.3", 1593 | "minimalistic-assert": "^1.0.1" 1594 | } 1595 | }, 1596 | "hmac-drbg": { 1597 | "version": "1.0.1", 1598 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 1599 | "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", 1600 | "dev": true, 1601 | "requires": { 1602 | "hash.js": "^1.0.3", 1603 | "minimalistic-assert": "^1.0.0", 1604 | "minimalistic-crypto-utils": "^1.0.1" 1605 | } 1606 | }, 1607 | "https-browserify": { 1608 | "version": "1.0.0", 1609 | "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", 1610 | "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", 1611 | "dev": true 1612 | }, 1613 | "ieee754": { 1614 | "version": "1.2.1", 1615 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1616 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1617 | "dev": true 1618 | }, 1619 | "inherits": { 1620 | "version": "2.0.4", 1621 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1622 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1623 | "dev": true 1624 | }, 1625 | "isarray": { 1626 | "version": "1.0.0", 1627 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1628 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 1629 | "dev": true 1630 | }, 1631 | "isexe": { 1632 | "version": "2.0.0", 1633 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1634 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1635 | "dev": true 1636 | }, 1637 | "md5.js": { 1638 | "version": "1.3.5", 1639 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 1640 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 1641 | "dev": true, 1642 | "requires": { 1643 | "hash-base": "^3.0.0", 1644 | "inherits": "^2.0.1", 1645 | "safe-buffer": "^5.1.2" 1646 | } 1647 | }, 1648 | "miller-rabin": { 1649 | "version": "4.0.1", 1650 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", 1651 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", 1652 | "dev": true, 1653 | "requires": { 1654 | "bn.js": "^4.0.0", 1655 | "brorand": "^1.0.1" 1656 | }, 1657 | "dependencies": { 1658 | "bn.js": { 1659 | "version": "4.12.0", 1660 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 1661 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 1662 | "dev": true 1663 | } 1664 | } 1665 | }, 1666 | "minimalistic-assert": { 1667 | "version": "1.0.1", 1668 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 1669 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", 1670 | "dev": true 1671 | }, 1672 | "minimalistic-crypto-utils": { 1673 | "version": "1.0.1", 1674 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 1675 | "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", 1676 | "dev": true 1677 | }, 1678 | "node-libs-browser": { 1679 | "version": "2.2.1", 1680 | "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", 1681 | "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", 1682 | "dev": true, 1683 | "requires": { 1684 | "assert": "^1.1.1", 1685 | "browserify-zlib": "^0.2.0", 1686 | "buffer": "^4.3.0", 1687 | "console-browserify": "^1.1.0", 1688 | "constants-browserify": "^1.0.0", 1689 | "crypto-browserify": "^3.11.0", 1690 | "domain-browser": "^1.1.1", 1691 | "events": "^3.0.0", 1692 | "https-browserify": "^1.0.0", 1693 | "os-browserify": "^0.3.0", 1694 | "path-browserify": "0.0.1", 1695 | "process": "^0.11.10", 1696 | "punycode": "^1.2.4", 1697 | "querystring-es3": "^0.2.0", 1698 | "readable-stream": "^2.3.3", 1699 | "stream-browserify": "^2.0.1", 1700 | "stream-http": "^2.7.2", 1701 | "string_decoder": "^1.0.0", 1702 | "timers-browserify": "^2.0.4", 1703 | "tty-browserify": "0.0.0", 1704 | "url": "^0.11.0", 1705 | "util": "^0.11.0", 1706 | "vm-browserify": "^1.0.1" 1707 | } 1708 | }, 1709 | "object-assign": { 1710 | "version": "4.1.1", 1711 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1712 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1713 | "dev": true 1714 | }, 1715 | "os-browserify": { 1716 | "version": "0.3.0", 1717 | "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", 1718 | "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", 1719 | "dev": true 1720 | }, 1721 | "pako": { 1722 | "version": "1.0.11", 1723 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", 1724 | "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", 1725 | "dev": true 1726 | }, 1727 | "parse-asn1": { 1728 | "version": "5.1.6", 1729 | "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", 1730 | "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", 1731 | "dev": true, 1732 | "requires": { 1733 | "asn1.js": "^5.2.0", 1734 | "browserify-aes": "^1.0.0", 1735 | "evp_bytestokey": "^1.0.0", 1736 | "pbkdf2": "^3.0.3", 1737 | "safe-buffer": "^5.1.1" 1738 | } 1739 | }, 1740 | "path-browserify": { 1741 | "version": "0.0.1", 1742 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", 1743 | "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", 1744 | "dev": true 1745 | }, 1746 | "pbkdf2": { 1747 | "version": "3.1.2", 1748 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", 1749 | "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", 1750 | "dev": true, 1751 | "requires": { 1752 | "create-hash": "^1.1.2", 1753 | "create-hmac": "^1.1.4", 1754 | "ripemd160": "^2.0.1", 1755 | "safe-buffer": "^5.0.1", 1756 | "sha.js": "^2.4.8" 1757 | } 1758 | }, 1759 | "process": { 1760 | "version": "0.11.10", 1761 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 1762 | "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", 1763 | "dev": true 1764 | }, 1765 | "process-nextick-args": { 1766 | "version": "2.0.1", 1767 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1768 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 1769 | "dev": true 1770 | }, 1771 | "public-encrypt": { 1772 | "version": "4.0.3", 1773 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", 1774 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", 1775 | "dev": true, 1776 | "requires": { 1777 | "bn.js": "^4.1.0", 1778 | "browserify-rsa": "^4.0.0", 1779 | "create-hash": "^1.1.0", 1780 | "parse-asn1": "^5.0.0", 1781 | "randombytes": "^2.0.1", 1782 | "safe-buffer": "^5.1.2" 1783 | }, 1784 | "dependencies": { 1785 | "bn.js": { 1786 | "version": "4.12.0", 1787 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 1788 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 1789 | "dev": true 1790 | } 1791 | } 1792 | }, 1793 | "punycode": { 1794 | "version": "1.4.1", 1795 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1796 | "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", 1797 | "dev": true 1798 | }, 1799 | "querystring": { 1800 | "version": "0.2.0", 1801 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 1802 | "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", 1803 | "dev": true 1804 | }, 1805 | "querystring-es3": { 1806 | "version": "0.2.1", 1807 | "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", 1808 | "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", 1809 | "dev": true 1810 | }, 1811 | "randombytes": { 1812 | "version": "2.1.0", 1813 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1814 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1815 | "dev": true, 1816 | "requires": { 1817 | "safe-buffer": "^5.1.0" 1818 | } 1819 | }, 1820 | "randomfill": { 1821 | "version": "1.0.4", 1822 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", 1823 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", 1824 | "dev": true, 1825 | "requires": { 1826 | "randombytes": "^2.0.5", 1827 | "safe-buffer": "^5.1.0" 1828 | } 1829 | }, 1830 | "readable-stream": { 1831 | "version": "2.3.8", 1832 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", 1833 | "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", 1834 | "dev": true, 1835 | "requires": { 1836 | "core-util-is": "~1.0.0", 1837 | "inherits": "~2.0.3", 1838 | "isarray": "~1.0.0", 1839 | "process-nextick-args": "~2.0.0", 1840 | "safe-buffer": "~5.1.1", 1841 | "string_decoder": "~1.1.1", 1842 | "util-deprecate": "~1.0.1" 1843 | }, 1844 | "dependencies": { 1845 | "safe-buffer": { 1846 | "version": "5.1.2", 1847 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1848 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1849 | "dev": true 1850 | }, 1851 | "string_decoder": { 1852 | "version": "1.1.1", 1853 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1854 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1855 | "dev": true, 1856 | "requires": { 1857 | "safe-buffer": "~5.1.0" 1858 | } 1859 | } 1860 | } 1861 | }, 1862 | "readline-sync": { 1863 | "version": "1.4.10", 1864 | "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", 1865 | "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", 1866 | "dev": true 1867 | }, 1868 | "ripemd160": { 1869 | "version": "2.0.2", 1870 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 1871 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 1872 | "dev": true, 1873 | "requires": { 1874 | "hash-base": "^3.0.0", 1875 | "inherits": "^2.0.1" 1876 | } 1877 | }, 1878 | "safe-buffer": { 1879 | "version": "5.2.1", 1880 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1881 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1882 | "dev": true 1883 | }, 1884 | "safer-buffer": { 1885 | "version": "2.1.2", 1886 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1887 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1888 | "dev": true 1889 | }, 1890 | "setimmediate": { 1891 | "version": "1.0.5", 1892 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 1893 | "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", 1894 | "dev": true 1895 | }, 1896 | "sha.js": { 1897 | "version": "2.4.11", 1898 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 1899 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 1900 | "dev": true, 1901 | "requires": { 1902 | "inherits": "^2.0.1", 1903 | "safe-buffer": "^5.0.1" 1904 | } 1905 | }, 1906 | "shadow-cljs": { 1907 | "version": "2.22.6", 1908 | "resolved": "https://registry.npmjs.org/shadow-cljs/-/shadow-cljs-2.22.6.tgz", 1909 | "integrity": "sha512-y65wZGhRJ5ox5f/JLR3UWNck1xrutKmqseABp59k+V0JGcLKgKTIy85hlqBZ7tLQer8tDeuJ/TFHGQA3QygHMA==", 1910 | "dev": true, 1911 | "requires": { 1912 | "node-libs-browser": "^2.2.1", 1913 | "readline-sync": "^1.4.7", 1914 | "shadow-cljs-jar": "1.3.4", 1915 | "source-map-support": "^0.4.15", 1916 | "which": "^1.3.1", 1917 | "ws": "^7.4.6" 1918 | } 1919 | }, 1920 | "shadow-cljs-jar": { 1921 | "version": "1.3.4", 1922 | "resolved": "https://registry.npmjs.org/shadow-cljs-jar/-/shadow-cljs-jar-1.3.4.tgz", 1923 | "integrity": "sha512-cZB2pzVXBnhpJ6PQdsjO+j/MksR28mv4QD/hP/2y1fsIa9Z9RutYgh3N34FZ8Ktl4puAXaIGlct+gMCJ5BmwmA==", 1924 | "dev": true 1925 | }, 1926 | "source-map": { 1927 | "version": "0.5.7", 1928 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1929 | "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", 1930 | "dev": true 1931 | }, 1932 | "source-map-support": { 1933 | "version": "0.4.18", 1934 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 1935 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 1936 | "dev": true, 1937 | "requires": { 1938 | "source-map": "^0.5.6" 1939 | } 1940 | }, 1941 | "stream-browserify": { 1942 | "version": "2.0.2", 1943 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", 1944 | "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", 1945 | "dev": true, 1946 | "requires": { 1947 | "inherits": "~2.0.1", 1948 | "readable-stream": "^2.0.2" 1949 | } 1950 | }, 1951 | "stream-http": { 1952 | "version": "2.8.3", 1953 | "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", 1954 | "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", 1955 | "dev": true, 1956 | "requires": { 1957 | "builtin-status-codes": "^3.0.0", 1958 | "inherits": "^2.0.1", 1959 | "readable-stream": "^2.3.6", 1960 | "to-arraybuffer": "^1.0.0", 1961 | "xtend": "^4.0.0" 1962 | } 1963 | }, 1964 | "string_decoder": { 1965 | "version": "1.3.0", 1966 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1967 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1968 | "dev": true, 1969 | "requires": { 1970 | "safe-buffer": "~5.2.0" 1971 | } 1972 | }, 1973 | "style-mod": { 1974 | "version": "4.0.2", 1975 | "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.2.tgz", 1976 | "integrity": "sha512-C4myMmRTO8iaC5Gg+N1ftK2WT4eXUTMAa+HEFPPrfVeO/NtqLTtAmV1HbqnuGtLwCek44Ra76fdGUkSqjiMPcQ==" 1977 | }, 1978 | "timers-browserify": { 1979 | "version": "2.0.12", 1980 | "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", 1981 | "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", 1982 | "dev": true, 1983 | "requires": { 1984 | "setimmediate": "^1.0.4" 1985 | } 1986 | }, 1987 | "to-arraybuffer": { 1988 | "version": "1.0.1", 1989 | "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", 1990 | "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", 1991 | "dev": true 1992 | }, 1993 | "tty-browserify": { 1994 | "version": "0.0.0", 1995 | "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", 1996 | "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", 1997 | "dev": true 1998 | }, 1999 | "url": { 2000 | "version": "0.11.0", 2001 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 2002 | "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", 2003 | "dev": true, 2004 | "requires": { 2005 | "punycode": "1.3.2", 2006 | "querystring": "0.2.0" 2007 | }, 2008 | "dependencies": { 2009 | "punycode": { 2010 | "version": "1.3.2", 2011 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 2012 | "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", 2013 | "dev": true 2014 | } 2015 | } 2016 | }, 2017 | "util": { 2018 | "version": "0.11.1", 2019 | "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", 2020 | "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", 2021 | "dev": true, 2022 | "requires": { 2023 | "inherits": "2.0.3" 2024 | }, 2025 | "dependencies": { 2026 | "inherits": { 2027 | "version": "2.0.3", 2028 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 2029 | "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", 2030 | "dev": true 2031 | } 2032 | } 2033 | }, 2034 | "util-deprecate": { 2035 | "version": "1.0.2", 2036 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2037 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 2038 | "dev": true 2039 | }, 2040 | "vm-browserify": { 2041 | "version": "1.1.2", 2042 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", 2043 | "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", 2044 | "dev": true 2045 | }, 2046 | "w3c-keyname": { 2047 | "version": "2.2.6", 2048 | "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz", 2049 | "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==" 2050 | }, 2051 | "which": { 2052 | "version": "1.3.1", 2053 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2054 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2055 | "dev": true, 2056 | "requires": { 2057 | "isexe": "^2.0.0" 2058 | } 2059 | }, 2060 | "ws": { 2061 | "version": "7.5.9", 2062 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", 2063 | "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", 2064 | "dev": true, 2065 | "requires": {} 2066 | }, 2067 | "xtend": { 2068 | "version": "4.0.2", 2069 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 2070 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 2071 | "dev": true 2072 | } 2073 | } 2074 | } 2075 | --------------------------------------------------------------------------------