Skip to content

libsodium dependency causes excessive bundle size #322

@lenkan

Description

@lenkan

See result of esbuild --analyze:

$ npx esbuild src/index.ts --bundle --analyze --outdir=tmp

  tmp/index.js                                                                       2.1mb  100.0%
   ├ node_modules/libsodium-sumo/dist/modules-sumo/libsodium-sumo.js                 1.3mb   61.3%
   ├ node_modules/libsodium-wrappers-sumo/dist/modules-sumo/libsodium-wrappers.js  127.7kb    5.8%
   ├ node_modules/decimal.js/decimal.mjs                                            65.4kb    3.0%
   ├ node_modules/buffer/index.js                                                   58.9kb    2.7%
   ├ node_modules/typed-function/lib/umd/typed-function.js                          47.5kb    2.2%
   ├ node_modules/@noble/curves/esm/abstract/weierstrass.js                         30.4kb    1.4%
   ├ node_modules/complex.js/complex.js                                             30.2kb    1.4%
   ├ node_modules/mathjs/lib/esm/type/matrix/SparseMatrix.js                        26.8kb    1.2%
   ├ src/keri/core/manager.ts                                                       26.4kb    1.2%
   ├ node_modules/mathjs/lib/esm/core/function/typed.js                             25.2kb    1.2%
   ├ node_modules/fraction.js/fraction.js                                           19.9kb    0.9%
   ├ src/keri/core/matter.ts                                                        16.2kb    0.7%
   ├ node_modules/mathjs/lib/esm/type/matrix/DenseMatrix.js                         15.7kb    0.7%
   ├ src/keri/core/keeping.ts                                                       15.4kb    0.7%
   ├ src/keri/app/credentialing.ts                                                  15.2kb    0.7%
   ├ src/keri/core/indexer.ts                                                       14.2kb    0.7%
   ├ src/keri/core/eventing.ts                                                      12.0kb    0.5%
   ├ src/keri/app/aiding.ts                                                         11.3kb    0.5%
   ├ src/keri/app/clienting.ts                                                      11.2kb    0.5%
   ├ node_modules/structured-headers/dist/parser.js                                 10.7kb    0.5%
   ├ node_modules/mathjs/lib/esm/utils/number.js                                     9.9kb    0.5%
   ├ node_modules/mathjs/lib/esm/utils/array.js                                      9.1kb    0.4%
   ├ node_modules/@noble/curves/esm/abstract/utils.js                                8.4kb    0.4%
   ├ src/keri/app/controller.ts                                                      8.4kb    0.4%
   ├ node_modules/@noble/curves/esm/abstract/modular.js                              8.1kb    0.4%
   ├ node_modules/@noble/curves/esm/abstract/curve.js                                7.6kb    0.3%
   ├ node_modules/@noble/hashes/esm/blake3.js                                        7.3kb    0.3%
   ├ src/keri/core/counter.ts                                                        7.2kb    0.3%
   ├ src/keri/app/coring.ts                                                          6.4kb    0.3%
   ├ node_modules/mathjs/lib/esm/type/matrix/utils/matrixAlgorithmSuite.js           5.4kb    0.2%
   ├ src/keri/core/prefixer.ts                                                       5.3kb    0.2%
   ├ src/keri/core/core.ts                                                           5.0kb    0.2%
   ├ node_modules/structured-headers/dist/serializer.js                              4.9kb    0.2%
   ├ src/keri/app/contacting.ts                                                      4.8kb    0.2%
   ├ src/keri/core/tholder.ts                                                        4.8kb    0.2%
   ├ src/exports.ts                                                                  4.6kb    0.2%
   ├ src/keri/core/salter.ts                                                         4.6kb    0.2%
   ├ node_modules/mathjs/lib/esm/utils/is.js                                         4.6kb    0.2%
   ├ src/keri/end/ending.ts                                                          4.1kb    0.2%
   ├ src/keri/core/httping.ts                                                        4.0kb    0.2%
   ├ src/keri/app/exchanging.ts                                                      3.9kb    0.2%
   ├ node_modules/base64-js/index.js                                                 3.8kb    0.2%
   ├ src/keri/core/saider.ts                                                         3.8kb    0.2%
   ├ node_modules/mathjs/lib/esm/utils/bignumber/formatter.js                        3.6kb    0.2%
   ├ src/keri/core/utils.ts                                                          3.5kb    0.2%
   ├ node_modules/mathjs/lib/esm/type/complex/Complex.js                             3.4kb    0.2%
   ├ node_modules/@noble/hashes/esm/sha256.js                                        3.3kb    0.2%
   ├ node_modules/@noble/hashes/esm/_md.js                                           3.2kb    0.1%
   ├ node_modules/@noble/hashes/esm/_blake.js                                        3.2kb    0.1%
   ├ src/keri/app/habery.ts                                                          3.2kb    0.1%
   ├ node_modules/mathjs/lib/esm/plain/number/arithmetic.js                          3.1kb    0.1%
   ├ node_modules/mathjs/lib/esm/type/matrix/utils/matAlgo04xSidSid.js               3.0kb    0.1%
   ├ src/keri/core/authing.ts                                                        3.0kb    0.1%
   ├ src/keri/core/serder.ts                                                         2.9kb    0.1%
   ├ node_modules/mathjs/lib/esm/type/number.js                                      2.9kb    0.1%
   ├ node_modules/ieee754/index.js                                                   2.6kb    0.1%
   ├ node_modules/mathjs/lib/esm/type/matrix/Matrix.js                               2.5kb    0.1%
   ├ node_modules/@noble/hashes/esm/utils.js                                         2.5kb    0.1%
   ├ src/keri/core/signer.ts                                                         2.4kb    0.1%
   ├ node_modules/mathjs/lib/esm/utils/string.js                                     2.4kb    0.1%
   ├ src/keri/app/grouping.ts                                                        2.2kb    0.1%
   ├ src/keri/core/decrypter.ts                                                      2.2kb    0.1%
   ├ node_modules/mathjs/lib/esm/utils/object.js                                     2.2kb    0.1%
   ├ node_modules/@noble/hashes/esm/blake2s.js                                       2.1kb    0.1%
   ├ node_modules/mathjs/lib/esm/type/matrix/utils/matAlgo01xDSid.js                 2.1kb    0.1%
   ├ node_modules/@noble/hashes/esm/hmac.js                                          1.9kb    0.1%
   ├ node_modules/mathjs/lib/esm/function/matrix/concat.js                           1.9kb    0.1%
   ├ src/keri/core/diger.ts                                                          1.8kb    0.1%
   ├ src/keri/core/encrypter.ts                                                      1.8kb    0.1%
   ├ node_modules/mathjs/lib/esm/utils/customs.js                                    1.8kb    0.1%
   ├ node_modules/mathjs/lib/esm/utils/collection.js                                 1.7kb    0.1%
   ├ src/keri/app/notifying.ts                                                       1.7kb    0.1%
   ├ node_modules/mathjs/lib/esm/entry/pureFunctionsAny.generated.js                 1.6kb    0.1%
   ├ node_modules/mathjs/lib/esm/type/bignumber/function/bignumber.js                1.6kb    0.1%
   ├ src/keri/core/vdring.ts                                                         1.5kb    0.1%
   ├ node_modules/mathjs/lib/esm/type/matrix/utils/broadcast.js                      1.5kb    0.1%
   ├ node_modules/mathjs/lib/esm/type/matrix/utils/matAlgo13xDD.js                   1.5kb    0.1%
   ├ node_modules/mathjs/lib/esm/type/matrix/utils/matAlgo10xSids.js                 1.5kb    0.1%
   ├ node_modules/mathjs/lib/esm/function/utils/numeric.js                           1.5kb    0.1%
   ├ src/keri/core/bexter.ts                                                         1.4kb    0.1%
   ├ node_modules/mathjs/lib/esm/utils/map.js                                        1.4kb    0.1%
   ├ node_modules/structured-headers/dist/index.js                                   1.3kb    0.1%
   ├ node_modules/mathjs/lib/esm/function/statistics/sum.js                          1.3kb    0.1%
   ├ node_modules/mathjs/lib/esm/function/arithmetic/add.js                          1.3kb    0.1%
   ├ src/keri/core/pather.ts                                                         1.3kb    0.1%
   ├ node_modules/mathjs/lib/esm/type/matrix/function/matrix.js                      1.2kb    0.1%
   ├ node_modules/mathjs/lib/esm/utils/factory.js                                    1.2kb    0.1%
   ├ src/keri/core/number.ts                                                         1.2kb    0.1%
   ├ node_modules/mathjs/lib/esm/type/fraction/function/fraction.js                  1.2kb    0.1%
   ├ node_modules/mathjs/lib/esm/function/relational/equalScalar.js                  1.2kb    0.1%
   ├ node_modules/@noble/hashes/esm/_assert.js                                       1.2kb    0.1%
   ├ node_modules/mathjs/lib/esm/function/arithmetic/addScalar.js                    1.1kb    0.1%
   ├ node_modules/mathjs/lib/esm/type/matrix/utils/matAlgo14xDs.js                   1.1kb    0.1%
   ├ node_modules/structured-headers/dist/util.js                                    1.1kb    0.0%
   ├ src/keri/core/verfer.ts                                                         1.1kb    0.0%
   ├ node_modules/mathjs/lib/esm/type/bignumber/BigNumber.js                         985b     0.0%
   ├ node_modules/mathjs/lib/esm/error/IndexError.js                                 930b     0.0%
   ├ node_modules/mathjs/lib/esm/core/config.js                                      867b     0.0%
   ├ node_modules/mathjs/lib/esm/type/fraction/Fraction.js                           817b     0.0%
   ├ src/keri/core/cipher.ts                                                         809b     0.0%
   ├ node_modules/@noble/curves/esm/p256.js                                          805b     0.0%
   ├ src/keri/app/delegating.ts                                                      775b     0.0%
   ├ src/keri/core/seqner.ts                                                         748b     0.0%
   ├ node_modules/mathjs/lib/esm/error/DimensionError.js                             745b     0.0%
   ├ node_modules/mathjs/lib/esm/function/statistics/utils/improveErrorMessage.js    708b     0.0%
   ├ node_modules/structured-headers/dist/token.js                                   700b     0.0%
   ├ src/keri/app/escrowing.ts                                                       689b     0.0%
   ├ src/keri/core/base64.ts                                                         672b     0.0%
   ├ node_modules/mathjs/lib/esm/function/utils/isInteger.js                         560b     0.0%
   ├ node_modules/mathjs/lib/esm/utils/bignumber/nearlyEqual.js                      499b     0.0%
   ├ node_modules/structured-headers/dist/types.js                                   474b     0.0%
   ├ node_modules/mathjs/lib/esm/entry/configReadonly.js                             467b     0.0%
   ├ src/keri/core/siger.ts                                                          437b     0.0%
   ├ node_modules/mathjs/lib/esm/function/relational/compareUnits.js                 428b     0.0%
   ├ node_modules/@babel/runtime/helpers/esm/extends.js                              322b     0.0%
   ├ node_modules/@noble/curves/esm/_shortw_utils.js                                 318b     0.0%
   ├ node_modules/@noble/hashes/esm/_u64.js                                          313b     0.0%
   ├ node_modules/mathjs/lib/esm/function/string/format.js                           307b     0.0%
   ├ src/keri/core/cigar.ts                                                          294b     0.0%
   ├ node_modules/mathjs/lib/esm/utils/switch.js                                     275b     0.0%
   ├ node_modules/mathjs/lib/esm/utils/function.js                                   227b     0.0%
   ├ node_modules/mathjs/lib/esm/utils/noop.js                                       188b     0.0%
   ├ src/ready.ts                                                                    170b     0.0%
   ├ src/keri/core/kering.ts                                                         149b     0.0%
   ├ node_modules/mathjs/lib/esm/utils/complex.js                                    127b     0.0%
   ├ node_modules/mathjs/lib/esm/core/function/config.js                             104b     0.0%
   ├ node_modules/@noble/hashes/esm/crypto.js                                        103b     0.0%
   ├ (disabled):path                                                                  72b     0.0%
   ├ (disabled):fs                                                                    68b     0.0%
   └ src/index.ts                                                                     39b     0.0%


  tmp/index.js  2.1mb ⚠️ 

⚡ Done in 306ms

The libsodium dependency accounts for > 60% of the resulting bundle. I think most things that libsodium is used for can be accomplished with @noble/curves and @noble/hashes to a significantly lower price. I believe the WebCrypto API can be used generating random bytes with crypto.getRandomValues().

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions