maplibre / maplibre-tile-spec

Next generation vector tiles format
Apache License 2.0
172 stars 14 forks source link

Missing JS dependency #239

Open CraigglesO opened 4 months ago

CraigglesO commented 4 months ago

I was reading up on the project of this project to a writeup of my own, how is @mapbox/point-geometry a dependency, shows up in your lock file, but not a dependency? I'm assuming this is just a mistake or are you planning on removing it?

https://github.com/search?q=repo%3Amaplibre%2Fmaplibre-tile-spec%20mapbox%2Fpoint-geometry&type=code

springmeyer commented 4 months ago

Thanks for noticing this, fixed in https://github.com/maplibre/maplibre-tile-spec/pull/240

wipfli commented 3 months ago

The lock file contains dependencies of dependencies. We don't need to list them in the package.json file.

CraigglesO commented 3 months ago

I hope I don't come across negatively combative but I disagree on this sentiment.

1) lock files aren't supposed to be used as a tool for using packages, but rather facilitate greater visibility into the project dependency tree.

You can see this being true in that this spec is currently using @mapbox/point-geometry version 0.1.0 which was made seven years ago. Compare that to the latest version 1.1.0 that was made recently and includes proper typescript safety. Something the project actually complains about:

Screenshot 2024-07-20 at 5 40 30 PM

2) Transparency through explicit dependency practices. It's much easier for outside audits/security measures and peer reviews if the dependencies used are properly documented in the package.json file. NPM is rife with security flaws, this has been known for a long time. I think being clear in motives inside your package.json allows outside reviews to be aware of when and where external code is being used.

wipfli commented 3 months ago

To inspect the dependency tree one would usually run something like npm list --all, no?

CraigglesO commented 3 months ago

Hmm, I actually think you're proving my point further:

npm list --all

@maplibre/maplibre-tile-spec@0.0.1-alpha.4 /Users/craigoconnor/Documents/Projects/javascript/maplibre-tile-spec/js
├─┬ @bufbuild/buf@1.34.0
│ ├── UNMET OPTIONAL DEPENDENCY @bufbuild/buf-darwin-arm64@1.34.0
│ ├── UNMET OPTIONAL DEPENDENCY @bufbuild/buf-darwin-x64@1.34.0
│ ├── UNMET OPTIONAL DEPENDENCY @bufbuild/buf-linux-aarch64@1.34.0
│ ├── UNMET OPTIONAL DEPENDENCY @bufbuild/buf-linux-x64@1.34.0
│ ├── UNMET OPTIONAL DEPENDENCY @bufbuild/buf-win32-arm64@1.34.0
│ └── UNMET OPTIONAL DEPENDENCY @bufbuild/buf-win32-x64@1.34.0
├── @bufbuild/protobuf@1.10.0
├─┬ @bufbuild/protoc-gen-es@1.10.0
│ ├── @bufbuild/protobuf@1.10.0 deduped
│ └─┬ @bufbuild/protoplugin@1.10.0
│   ├── @bufbuild/protobuf@1.10.0 deduped
│   ├─┬ @typescript/vfs@1.5.2
│   │ └── debug@4.3.4 deduped
│   └── typescript@4.5.2
├─┬ @mapbox/vector-tile@1.3.1
│ └── @mapbox/point-geometry@0.1.0
├─┬ @maplibre/maplibre-gl-style-spec@20.3.0
│ ├── @mapbox/jsonlint-lines-primitives@2.0.2
│ ├── @mapbox/unitbezier@0.0.1
│ ├── json-stringify-pretty-compact@4.0.0
│ ├── minimist@1.2.8
│ ├── quickselect@2.0.0
│ ├── rw@1.3.3
│ ├─┬ sort-object@3.0.3
│ │ ├─┬ bytewise@1.1.0
│ │ │ ├─┬ bytewise-core@1.2.3
│ │ │ │ └── typewise-core@1.2.0
│ │ │ └─┬ typewise@1.0.3
│ │ │   └── typewise-core@1.2.0 deduped
│ │ ├── get-value@2.0.6
│ │ ├── is-extendable@0.1.1
│ │ ├── sort-asc@0.2.0
│ │ ├── sort-desc@0.2.0
│ │ └─┬ union-value@1.0.1
│ │   ├── arr-union@3.1.0
│ │   ├── get-value@2.0.6 deduped
│ │   ├── is-extendable@0.1.1 deduped
│ │   └─┬ set-value@2.0.1
│ │     ├─┬ extend-shallow@2.0.1
│ │     │ └── is-extendable@0.1.1 deduped
│ │     ├── is-extendable@0.1.1 deduped
│ │     ├─┬ is-plain-object@2.0.4
│ │     │ └── isobject@3.0.1
│ │     └─┬ split-string@3.1.0
│ │       └─┬ extend-shallow@3.0.2
│ │         ├── assign-symbols@1.0.0
│ │         └─┬ is-extendable@1.0.1
│ │           └── is-plain-object@2.0.4 deduped
│ └── tinyqueue@2.0.3
├── @types/benchmark@2.1.5
├─┬ @types/bytebuffer@5.0.49
│ ├── @types/long@3.0.32
│ └── @types/node@20.14.11 deduped
├─┬ @types/jest@29.5.12
│ ├─┬ expect@29.7.0
│ │ ├─┬ @jest/expect-utils@29.7.0
│ │ │ └── jest-get-type@29.6.3 deduped
│ │ ├── jest-get-type@29.6.3
│ │ ├─┬ jest-matcher-utils@29.7.0
│ │ │ ├── chalk@4.1.2 deduped
│ │ │ ├─┬ jest-diff@29.7.0
│ │ │ │ ├── chalk@4.1.2 deduped
│ │ │ │ ├── diff-sequences@29.6.3
│ │ │ │ ├── jest-get-type@29.6.3 deduped
│ │ │ │ └── pretty-format@29.7.0 deduped
│ │ │ ├── jest-get-type@29.6.3 deduped
│ │ │ └── pretty-format@29.7.0 deduped
│ │ ├─┬ jest-message-util@29.7.0
│ │ │ ├── @babel/code-frame@7.24.6 deduped
│ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ ├── @types/stack-utils@2.0.3
│ │ │ ├── chalk@4.1.2 deduped
│ │ │ ├── graceful-fs@4.2.11 deduped
│ │ │ ├── micromatch@4.0.7 deduped
│ │ │ ├── pretty-format@29.7.0 deduped
│ │ │ ├── slash@3.0.0 deduped
│ │ │ └─┬ stack-utils@2.0.6
│ │ │   └── escape-string-regexp@2.0.0
│ │ └── jest-util@29.7.0 deduped
│ └─┬ pretty-format@29.7.0
│   ├─┬ @jest/schemas@29.6.3
│   │ └── @sinclair/typebox@0.27.8
│   ├── ansi-styles@5.2.0
│   └── react-is@18.3.1
├─┬ @types/node@20.14.11
│ └── undici-types@5.26.5
├─┬ @types/varint@6.0.3
│ └── @types/node@20.14.11 deduped
├─┬ @typescript-eslint/eslint-plugin@7.16.1
│ ├── @eslint-community/regexpp@4.10.0
│ ├── @typescript-eslint/parser@7.16.1 deduped
│ ├─┬ @typescript-eslint/scope-manager@7.16.1
│ │ ├── @typescript-eslint/types@7.16.1 deduped
│ │ └── @typescript-eslint/visitor-keys@7.16.1 deduped
│ ├─┬ @typescript-eslint/type-utils@7.16.1
│ │ ├── @typescript-eslint/typescript-estree@7.16.1 deduped
│ │ ├── @typescript-eslint/utils@7.16.1 deduped
│ │ ├── debug@4.3.4 deduped
│ │ ├── eslint@8.57.0 deduped
│ │ └── ts-api-utils@1.3.0 deduped
│ ├─┬ @typescript-eslint/utils@7.16.1
│ │ ├── @eslint-community/eslint-utils@4.4.0 deduped
│ │ ├── @typescript-eslint/scope-manager@7.16.1 deduped
│ │ ├── @typescript-eslint/types@7.16.1 deduped
│ │ ├── @typescript-eslint/typescript-estree@7.16.1 deduped
│ │ └── eslint@8.57.0 deduped
│ ├─┬ @typescript-eslint/visitor-keys@7.16.1
│ │ ├── @typescript-eslint/types@7.16.1 deduped
│ │ └── eslint-visitor-keys@3.4.3 deduped
│ ├── eslint@8.57.0 deduped
│ ├── graphemer@1.4.0
│ ├── ignore@5.3.1
│ ├── natural-compare@1.4.0
│ └─┬ ts-api-utils@1.3.0
│   └── typescript@5.5.3 deduped
├─┬ @typescript-eslint/parser@7.16.1
│ ├── @typescript-eslint/scope-manager@7.16.1 deduped
│ ├── @typescript-eslint/types@7.16.1
│ ├─┬ @typescript-eslint/typescript-estree@7.16.1
│ │ ├── @typescript-eslint/types@7.16.1 deduped
│ │ ├── @typescript-eslint/visitor-keys@7.16.1 deduped
│ │ ├── debug@4.3.4 deduped
│ │ ├─┬ globby@11.1.0
│ │ │ ├── array-union@2.1.0
│ │ │ ├─┬ dir-glob@3.0.1
│ │ │ │ └── path-type@4.0.0
│ │ │ ├─┬ fast-glob@3.3.2
│ │ │ │ ├── @nodelib/fs.stat@2.0.5 deduped
│ │ │ │ ├── @nodelib/fs.walk@1.2.8 deduped
│ │ │ │ ├─┬ glob-parent@5.1.2
│ │ │ │ │ └── is-glob@4.0.3 deduped
│ │ │ │ ├── merge2@1.4.1 deduped
│ │ │ │ └── micromatch@4.0.7 deduped
│ │ │ ├── ignore@5.3.1 deduped
│ │ │ ├── merge2@1.4.1
│ │ │ └── slash@3.0.0 deduped
│ │ ├── is-glob@4.0.3 deduped
│ │ ├─┬ minimatch@9.0.5
│ │ │ └─┬ brace-expansion@2.0.1
│ │ │   └── balanced-match@1.0.2 deduped
│ │ ├── semver@7.6.3 deduped
│ │ └── ts-api-utils@1.3.0 deduped
│ ├── @typescript-eslint/visitor-keys@7.16.1 deduped
│ ├─┬ debug@4.3.4
│ │ └── ms@2.1.2
│ └── eslint@8.57.0 deduped
├─┬ benchmark@2.1.4
│ ├── lodash@4.17.21
│ └── platform@1.3.6
├── bitset@5.1.1
├─┬ bytebuffer@5.0.1
│ └── long@3.2.0
├── earcut@2.2.4
├─┬ eslint@8.57.0
│ ├─┬ @eslint-community/eslint-utils@4.4.0
│ │ ├── eslint-visitor-keys@3.4.3 deduped
│ │ └── eslint@8.57.0 deduped
│ ├── @eslint-community/regexpp@4.10.0 deduped
│ ├─┬ @eslint/eslintrc@2.1.4
│ │ ├── ajv@6.12.6 deduped
│ │ ├── debug@4.3.4 deduped
│ │ ├── espree@9.6.1 deduped
│ │ ├── globals@13.24.0 deduped
│ │ ├── ignore@5.3.1 deduped
│ │ ├─┬ import-fresh@3.3.0
│ │ │ ├─┬ parent-module@1.0.1
│ │ │ │ └── callsites@3.1.0
│ │ │ └── resolve-from@4.0.0
│ │ ├── js-yaml@4.1.0 deduped
│ │ ├── minimatch@3.1.2 deduped
│ │ └── strip-json-comments@3.1.1
│ ├── @eslint/js@8.57.0
│ ├─┬ @humanwhocodes/config-array@0.11.14
│ │ ├── @humanwhocodes/object-schema@2.0.3
│ │ ├── debug@4.3.4 deduped
│ │ └── minimatch@3.1.2 deduped
│ ├── @humanwhocodes/module-importer@1.0.1
│ ├─┬ @nodelib/fs.walk@1.2.8
│ │ ├─┬ @nodelib/fs.scandir@2.1.5
│ │ │ ├── @nodelib/fs.stat@2.0.5
│ │ │ └─┬ run-parallel@1.2.0
│ │ │   └── queue-microtask@1.2.3
│ │ └─┬ fastq@1.17.1
│ │   └── reusify@1.0.4
│ ├── @ungap/structured-clone@1.2.0
│ ├─┬ ajv@6.12.6
│ │ ├── fast-deep-equal@3.1.3 deduped
│ │ ├── fast-json-stable-stringify@2.1.0 deduped
│ │ ├── json-schema-traverse@0.4.1
│ │ └─┬ uri-js@4.4.1
│ │   └── punycode@2.3.1
│ ├─┬ chalk@4.1.2
│ │ ├─┬ ansi-styles@4.3.0
│ │ │ └─┬ color-convert@2.0.1
│ │ │   └── color-name@1.1.4
│ │ └─┬ supports-color@7.2.0
│ │   └── has-flag@4.0.0
│ ├─┬ cross-spawn@7.0.3
│ │ ├── path-key@3.1.1
│ │ ├─┬ shebang-command@2.0.0
│ │ │ └── shebang-regex@3.0.0
│ │ └─┬ which@2.0.2
│ │   └── isexe@2.0.0
│ ├── debug@4.3.4 deduped
│ ├─┬ doctrine@3.0.0
│ │ └── esutils@2.0.3 deduped
│ ├── escape-string-regexp@4.0.0
│ ├─┬ eslint-scope@7.2.2
│ │ ├─┬ esrecurse@4.3.0
│ │ │ └── estraverse@5.3.0 deduped
│ │ └── estraverse@5.3.0
│ ├── eslint-visitor-keys@3.4.3
│ ├─┬ espree@9.6.1
│ │ ├─┬ acorn-jsx@5.3.2
│ │ │ └── acorn@8.11.3 deduped
│ │ ├── acorn@8.11.3 deduped
│ │ └── eslint-visitor-keys@3.4.3 deduped
│ ├─┬ esquery@1.5.0
│ │ └── estraverse@5.3.0 deduped
│ ├── esutils@2.0.3
│ ├── fast-deep-equal@3.1.3
│ ├─┬ file-entry-cache@6.0.1
│ │ └─┬ flat-cache@3.2.0
│ │   ├── flatted@3.3.1
│ │   ├─┬ keyv@4.5.4
│ │   │ └── json-buffer@3.0.1
│ │   └── rimraf@3.0.2 deduped
│ ├─┬ find-up@5.0.0
│ │ ├─┬ locate-path@6.0.0
│ │ │ └─┬ p-locate@5.0.0
│ │ │   └── p-limit@3.1.0 deduped
│ │ └── path-exists@4.0.0
│ ├─┬ glob-parent@6.0.2
│ │ └── is-glob@4.0.3 deduped
│ ├─┬ globals@13.24.0
│ │ └── type-fest@0.20.2
│ ├── graphemer@1.4.0 deduped
│ ├── ignore@5.3.1 deduped
│ ├── imurmurhash@0.1.4
│ ├─┬ is-glob@4.0.3
│ │ └── is-extglob@2.1.1
│ ├── is-path-inside@3.0.3
│ ├─┬ js-yaml@4.1.0
│ │ └── argparse@2.0.1
│ ├── json-stable-stringify-without-jsonify@1.0.1
│ ├─┬ levn@0.4.1
│ │ ├── prelude-ls@1.2.1
│ │ └─┬ type-check@0.4.0
│ │   └── prelude-ls@1.2.1 deduped
│ ├── lodash.merge@4.6.2
│ ├─┬ minimatch@3.1.2
│ │ └─┬ brace-expansion@1.1.11
│ │   ├── balanced-match@1.0.2
│ │   └── concat-map@0.0.1
│ ├── natural-compare@1.4.0 deduped
│ ├─┬ optionator@0.9.4
│ │ ├── deep-is@0.1.4
│ │ ├── fast-levenshtein@2.0.6
│ │ ├── levn@0.4.1 deduped
│ │ ├── prelude-ls@1.2.1 deduped
│ │ ├── type-check@0.4.0 deduped
│ │ └── word-wrap@1.2.5
│ ├─┬ strip-ansi@6.0.1
│ │ └── ansi-regex@5.0.1
│ └── text-table@0.2.0
├─┬ jest-matcher-deep-close-to@3.0.2
│ └─┬ jest-matcher-utils@27.2.5
│   ├── chalk@4.1.2 deduped
│   ├─┬ jest-diff@27.5.1
│   │ ├── chalk@4.1.2 deduped
│   │ ├── diff-sequences@27.5.1
│   │ ├── jest-get-type@27.5.1 deduped
│   │ └── pretty-format@27.5.1 deduped
│   ├── jest-get-type@27.5.1
│   └─┬ pretty-format@27.5.1
│     ├── ansi-regex@5.0.1 deduped
│     ├── ansi-styles@5.2.0
│     └── react-is@17.0.2
├─┬ jest@29.7.0
│ ├─┬ @jest/core@29.7.0
│ │ ├─┬ @jest/console@29.7.0
│ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ ├── @types/node@20.14.11 deduped
│ │ │ ├── chalk@4.1.2 deduped
│ │ │ ├── jest-message-util@29.7.0 deduped
│ │ │ ├── jest-util@29.7.0 deduped
│ │ │ └── slash@3.0.0 deduped
│ │ ├─┬ @jest/reporters@29.7.0
│ │ │ ├── @bcoe/v8-coverage@0.2.3
│ │ │ ├── @jest/console@29.7.0 deduped
│ │ │ ├── @jest/test-result@29.7.0 deduped
│ │ │ ├── @jest/transform@29.7.0 deduped
│ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ ├── @jridgewell/trace-mapping@0.3.25 deduped
│ │ │ ├── @types/node@20.14.11 deduped
│ │ │ ├── chalk@4.1.2 deduped
│ │ │ ├── collect-v8-coverage@1.0.2
│ │ │ ├── exit@0.1.2 deduped
│ │ │ ├── glob@7.2.3 deduped
│ │ │ ├── graceful-fs@4.2.11 deduped
│ │ │ ├── istanbul-lib-coverage@3.2.2 deduped
│ │ │ ├── istanbul-lib-instrument@6.0.2 deduped
│ │ │ ├── istanbul-lib-report@3.0.1 deduped
│ │ │ ├── istanbul-lib-source-maps@4.0.1 deduped
│ │ │ ├── istanbul-reports@3.1.7 deduped
│ │ │ ├── jest-message-util@29.7.0 deduped
│ │ │ ├── jest-util@29.7.0 deduped
│ │ │ ├─┬ jest-worker@29.7.0
│ │ │ │ ├── @types/node@20.14.11 deduped
│ │ │ │ ├── jest-util@29.7.0 deduped
│ │ │ │ ├── merge-stream@2.0.0
│ │ │ │ └─┬ supports-color@8.1.1
│ │ │ │   └── has-flag@4.0.0 deduped
│ │ │ ├── UNMET OPTIONAL DEPENDENCY node-notifier@^8.0.1 || ^9.0.0 || ^10.0.0
│ │ │ ├── slash@3.0.0 deduped
│ │ │ ├─┬ string-length@4.0.2
│ │ │ │ ├── char-regex@1.0.2
│ │ │ │ └── strip-ansi@6.0.1 deduped
│ │ │ ├── strip-ansi@6.0.1 deduped
│ │ │ └─┬ v8-to-istanbul@9.2.0
│ │ │   ├── @jridgewell/trace-mapping@0.3.25 deduped
│ │ │   ├── @types/istanbul-lib-coverage@2.0.6 deduped
│ │ │   └── convert-source-map@2.0.0 deduped
│ │ ├─┬ @jest/test-result@29.7.0
│ │ │ ├── @jest/console@29.7.0 deduped
│ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ ├── @types/istanbul-lib-coverage@2.0.6 deduped
│ │ │ └── collect-v8-coverage@1.0.2 deduped
│ │ ├── @jest/transform@29.7.0 deduped
│ │ ├── @jest/types@29.6.3 deduped
│ │ ├── @types/node@20.14.11 deduped
│ │ ├─┬ ansi-escapes@4.3.2
│ │ │ └── type-fest@0.21.3
│ │ ├── chalk@4.1.2 deduped
│ │ ├── ci-info@3.9.0
│ │ ├── exit@0.1.2
│ │ ├── graceful-fs@4.2.11
│ │ ├─┬ jest-changed-files@29.7.0
│ │ │ ├─┬ execa@5.1.1
│ │ │ │ ├── cross-spawn@7.0.3 deduped
│ │ │ │ ├── get-stream@6.0.1
│ │ │ │ ├── human-signals@2.1.0
│ │ │ │ ├── is-stream@2.0.1 deduped
│ │ │ │ ├── merge-stream@2.0.0 deduped
│ │ │ │ ├─┬ npm-run-path@4.0.1
│ │ │ │ │ └── path-key@3.1.1 deduped
│ │ │ │ ├─┬ onetime@5.1.2
│ │ │ │ │ └── mimic-fn@2.1.0
│ │ │ │ ├── signal-exit@3.0.7 deduped
│ │ │ │ └── strip-final-newline@2.0.0
│ │ │ ├── jest-util@29.7.0 deduped
│ │ │ └─┬ p-limit@3.1.0
│ │ │   └── yocto-queue@0.1.0
│ │ ├─┬ jest-config@29.7.0
│ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ ├─┬ @jest/test-sequencer@29.7.0
│ │ │ │ ├── @jest/test-result@29.7.0 deduped
│ │ │ │ ├── graceful-fs@4.2.11 deduped
│ │ │ │ ├── jest-haste-map@29.7.0 deduped
│ │ │ │ └── slash@3.0.0 deduped
│ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ ├── @types/node@20.14.11 deduped
│ │ │ ├── babel-jest@29.7.0 deduped
│ │ │ ├── chalk@4.1.2 deduped
│ │ │ ├── ci-info@3.9.0 deduped
│ │ │ ├── deepmerge@4.3.1
│ │ │ ├── glob@7.2.3 deduped
│ │ │ ├── graceful-fs@4.2.11 deduped
│ │ │ ├─┬ jest-circus@29.7.0
│ │ │ │ ├── @jest/environment@29.7.0 deduped
│ │ │ │ ├─┬ @jest/expect@29.7.0
│ │ │ │ │ ├── expect@29.7.0 deduped
│ │ │ │ │ └── jest-snapshot@29.7.0 deduped
│ │ │ │ ├── @jest/test-result@29.7.0 deduped
│ │ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ │ ├── @types/node@20.14.11 deduped
│ │ │ │ ├── chalk@4.1.2 deduped
│ │ │ │ ├── co@4.6.0
│ │ │ │ ├─┬ dedent@1.5.3
│ │ │ │ │ └── UNMET OPTIONAL DEPENDENCY babel-plugin-macros@^3.1.0
│ │ │ │ ├── is-generator-fn@2.1.0
│ │ │ │ ├─┬ jest-each@29.7.0
│ │ │ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ │ │ ├── chalk@4.1.2 deduped
│ │ │ │ │ ├── jest-get-type@29.6.3 deduped
│ │ │ │ │ ├── jest-util@29.7.0 deduped
│ │ │ │ │ └── pretty-format@29.7.0 deduped
│ │ │ │ ├── jest-matcher-utils@29.7.0 deduped
│ │ │ │ ├── jest-message-util@29.7.0 deduped
│ │ │ │ ├── jest-runtime@29.7.0 deduped
│ │ │ │ ├── jest-snapshot@29.7.0 deduped
│ │ │ │ ├── jest-util@29.7.0 deduped
│ │ │ │ ├── p-limit@3.1.0 deduped
│ │ │ │ ├── pretty-format@29.7.0 deduped
│ │ │ │ ├── pure-rand@6.1.0
│ │ │ │ ├── slash@3.0.0 deduped
│ │ │ │ └── stack-utils@2.0.6 deduped
│ │ │ ├─┬ jest-environment-node@29.7.0
│ │ │ │ ├── @jest/environment@29.7.0 deduped
│ │ │ │ ├── @jest/fake-timers@29.7.0 deduped
│ │ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ │ ├── @types/node@20.14.11 deduped
│ │ │ │ ├── jest-mock@29.7.0 deduped
│ │ │ │ └── jest-util@29.7.0 deduped
│ │ │ ├── jest-get-type@29.6.3 deduped
│ │ │ ├── jest-regex-util@29.6.3 deduped
│ │ │ ├── jest-resolve@29.7.0 deduped
│ │ │ ├── jest-runner@29.7.0 deduped
│ │ │ ├── jest-util@29.7.0 deduped
│ │ │ ├── jest-validate@29.7.0 deduped
│ │ │ ├── micromatch@4.0.7 deduped
│ │ │ ├─┬ parse-json@5.2.0
│ │ │ │ ├── @babel/code-frame@7.24.6 deduped
│ │ │ │ ├─┬ error-ex@1.3.2
│ │ │ │ │ └── is-arrayish@0.2.1
│ │ │ │ ├── json-parse-even-better-errors@2.3.1
│ │ │ │ └── lines-and-columns@1.2.4
│ │ │ ├── pretty-format@29.7.0 deduped
│ │ │ ├── slash@3.0.0 deduped
│ │ │ ├── strip-json-comments@3.1.1 deduped
│ │ │ └── ts-node@10.9.2 deduped
│ │ ├─┬ jest-haste-map@29.7.0
│ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ ├─┬ @types/graceful-fs@4.1.9
│ │ │ │ └── @types/node@20.14.11 deduped
│ │ │ ├── @types/node@20.14.11 deduped
│ │ │ ├─┬ anymatch@3.1.3
│ │ │ │ ├── normalize-path@3.0.0
│ │ │ │ └── picomatch@2.3.1 deduped
│ │ │ ├─┬ fb-watchman@2.0.2
│ │ │ │ └─┬ bser@2.1.1
│ │ │ │   └── node-int64@0.4.0
│ │ │ ├── UNMET OPTIONAL DEPENDENCY fsevents@^2.3.2
│ │ │ ├── graceful-fs@4.2.11 deduped
│ │ │ ├── jest-regex-util@29.6.3 deduped
│ │ │ ├── jest-util@29.7.0 deduped
│ │ │ ├── jest-worker@29.7.0 deduped
│ │ │ ├── micromatch@4.0.7 deduped
│ │ │ └─┬ walker@1.0.8
│ │ │   └─┬ makeerror@1.0.12
│ │ │     └── tmpl@1.0.5
│ │ ├── jest-message-util@29.7.0 deduped
│ │ ├── jest-regex-util@29.6.3
│ │ ├─┬ jest-resolve-dependencies@29.7.0
│ │ │ ├── jest-regex-util@29.6.3 deduped
│ │ │ └── jest-snapshot@29.7.0 deduped
│ │ ├─┬ jest-resolve@29.7.0
│ │ │ ├── chalk@4.1.2 deduped
│ │ │ ├── graceful-fs@4.2.11 deduped
│ │ │ ├── jest-haste-map@29.7.0 deduped
│ │ │ ├─┬ jest-pnp-resolver@1.2.3
│ │ │ │ └── jest-resolve@29.7.0 deduped
│ │ │ ├── jest-util@29.7.0 deduped
│ │ │ ├── jest-validate@29.7.0 deduped
│ │ │ ├── resolve.exports@2.0.2
│ │ │ ├─┬ resolve@1.22.8
│ │ │ │ ├─┬ is-core-module@2.13.1
│ │ │ │ │ └─┬ hasown@2.0.2
│ │ │ │ │   └── function-bind@1.1.2
│ │ │ │ ├── path-parse@1.0.7
│ │ │ │ └── supports-preserve-symlinks-flag@1.0.0
│ │ │ └── slash@3.0.0 deduped
│ │ ├─┬ jest-runner@29.7.0
│ │ │ ├── @jest/console@29.7.0 deduped
│ │ │ ├─┬ @jest/environment@29.7.0
│ │ │ │ ├── @jest/fake-timers@29.7.0 deduped
│ │ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ │ ├── @types/node@20.14.11 deduped
│ │ │ │ └── jest-mock@29.7.0 deduped
│ │ │ ├── @jest/test-result@29.7.0 deduped
│ │ │ ├── @jest/transform@29.7.0 deduped
│ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ ├── @types/node@20.14.11 deduped
│ │ │ ├── chalk@4.1.2 deduped
│ │ │ ├── emittery@0.13.1
│ │ │ ├── graceful-fs@4.2.11 deduped
│ │ │ ├─┬ jest-docblock@29.7.0
│ │ │ │ └── detect-newline@3.1.0
│ │ │ ├── jest-environment-node@29.7.0 deduped
│ │ │ ├── jest-haste-map@29.7.0 deduped
│ │ │ ├─┬ jest-leak-detector@29.7.0
│ │ │ │ ├── jest-get-type@29.6.3 deduped
│ │ │ │ └── pretty-format@29.7.0 deduped
│ │ │ ├── jest-message-util@29.7.0 deduped
│ │ │ ├── jest-resolve@29.7.0 deduped
│ │ │ ├── jest-runtime@29.7.0 deduped
│ │ │ ├── jest-util@29.7.0 deduped
│ │ │ ├── jest-watcher@29.7.0 deduped
│ │ │ ├── jest-worker@29.7.0 deduped
│ │ │ ├── p-limit@3.1.0 deduped
│ │ │ └─┬ source-map-support@0.5.13
│ │ │   ├── buffer-from@1.1.2
│ │ │   └── source-map@0.6.1 deduped
│ │ ├─┬ jest-runtime@29.7.0
│ │ │ ├── @jest/environment@29.7.0 deduped
│ │ │ ├─┬ @jest/fake-timers@29.7.0
│ │ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ │ ├─┬ @sinonjs/fake-timers@10.3.0
│ │ │ │ │ └─┬ @sinonjs/commons@3.0.1
│ │ │ │ │   └── type-detect@4.0.8
│ │ │ │ ├── @types/node@20.14.11 deduped
│ │ │ │ ├── jest-message-util@29.7.0 deduped
│ │ │ │ ├── jest-mock@29.7.0 deduped
│ │ │ │ └── jest-util@29.7.0 deduped
│ │ │ ├─┬ @jest/globals@29.7.0
│ │ │ │ ├── @jest/environment@29.7.0 deduped
│ │ │ │ ├── @jest/expect@29.7.0 deduped
│ │ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ │ └── jest-mock@29.7.0 deduped
│ │ │ ├─┬ @jest/source-map@29.6.3
│ │ │ │ ├── @jridgewell/trace-mapping@0.3.25 deduped
│ │ │ │ ├── callsites@3.1.0 deduped
│ │ │ │ └── graceful-fs@4.2.11 deduped
│ │ │ ├── @jest/test-result@29.7.0 deduped
│ │ │ ├── @jest/transform@29.7.0 deduped
│ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ ├── @types/node@20.14.11 deduped
│ │ │ ├── chalk@4.1.2 deduped
│ │ │ ├── cjs-module-lexer@1.3.1
│ │ │ ├── collect-v8-coverage@1.0.2 deduped
│ │ │ ├── glob@7.2.3 deduped
│ │ │ ├── graceful-fs@4.2.11 deduped
│ │ │ ├── jest-haste-map@29.7.0 deduped
│ │ │ ├── jest-message-util@29.7.0 deduped
│ │ │ ├─┬ jest-mock@29.7.0
│ │ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ │ ├── @types/node@20.14.11 deduped
│ │ │ │ └── jest-util@29.7.0 deduped
│ │ │ ├── jest-regex-util@29.6.3 deduped
│ │ │ ├── jest-resolve@29.7.0 deduped
│ │ │ ├── jest-snapshot@29.7.0 deduped
│ │ │ ├── jest-util@29.7.0 deduped
│ │ │ ├── slash@3.0.0 deduped
│ │ │ └── strip-bom@4.0.0
│ │ ├─┬ jest-snapshot@29.7.0
│ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ ├── @babel/generator@7.24.6 deduped
│ │ │ ├─┬ @babel/plugin-syntax-jsx@7.24.6
│ │ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ │ └── @babel/helper-plugin-utils@7.24.6 deduped
│ │ │ ├─┬ @babel/plugin-syntax-typescript@7.24.6
│ │ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ │ └── @babel/helper-plugin-utils@7.24.6 deduped
│ │ │ ├── @babel/types@7.24.6 deduped
│ │ │ ├── @jest/expect-utils@29.7.0 deduped
│ │ │ ├── @jest/transform@29.7.0 deduped
│ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ ├─┬ babel-preset-current-node-syntax@1.0.1
│ │ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ │ ├─┬ @babel/plugin-syntax-async-generators@7.8.4
│ │ │ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ │ │ └── @babel/helper-plugin-utils@7.24.6 deduped
│ │ │ │ ├─┬ @babel/plugin-syntax-bigint@7.8.3
│ │ │ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ │ │ └── @babel/helper-plugin-utils@7.24.6 deduped
│ │ │ │ ├─┬ @babel/plugin-syntax-class-properties@7.12.13
│ │ │ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ │ │ └── @babel/helper-plugin-utils@7.24.6 deduped
│ │ │ │ ├─┬ @babel/plugin-syntax-import-meta@7.10.4
│ │ │ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ │ │ └── @babel/helper-plugin-utils@7.24.6 deduped
│ │ │ │ ├─┬ @babel/plugin-syntax-json-strings@7.8.3
│ │ │ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ │ │ └── @babel/helper-plugin-utils@7.24.6 deduped
│ │ │ │ ├─┬ @babel/plugin-syntax-logical-assignment-operators@7.10.4
│ │ │ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ │ │ └── @babel/helper-plugin-utils@7.24.6 deduped
│ │ │ │ ├─┬ @babel/plugin-syntax-nullish-coalescing-operator@7.8.3
│ │ │ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ │ │ └── @babel/helper-plugin-utils@7.24.6 deduped
│ │ │ │ ├─┬ @babel/plugin-syntax-numeric-separator@7.10.4
│ │ │ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ │ │ └── @babel/helper-plugin-utils@7.24.6 deduped
│ │ │ │ ├─┬ @babel/plugin-syntax-object-rest-spread@7.8.3
│ │ │ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ │ │ └── @babel/helper-plugin-utils@7.24.6 deduped
│ │ │ │ ├─┬ @babel/plugin-syntax-optional-catch-binding@7.8.3
│ │ │ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ │ │ └── @babel/helper-plugin-utils@7.24.6 deduped
│ │ │ │ ├─┬ @babel/plugin-syntax-optional-chaining@7.8.3
│ │ │ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ │ │ └── @babel/helper-plugin-utils@7.24.6 deduped
│ │ │ │ └─┬ @babel/plugin-syntax-top-level-await@7.14.5
│ │ │ │   ├── @babel/core@7.24.6 deduped
│ │ │ │   └── @babel/helper-plugin-utils@7.24.6 deduped
│ │ │ ├── chalk@4.1.2 deduped
│ │ │ ├── expect@29.7.0 deduped
│ │ │ ├── graceful-fs@4.2.11 deduped
│ │ │ ├── jest-diff@29.7.0 deduped
│ │ │ ├── jest-get-type@29.6.3 deduped
│ │ │ ├── jest-matcher-utils@29.7.0 deduped
│ │ │ ├── jest-message-util@29.7.0 deduped
│ │ │ ├── jest-util@29.7.0 deduped
│ │ │ ├── natural-compare@1.4.0 deduped
│ │ │ ├── pretty-format@29.7.0 deduped
│ │ │ └── semver@7.6.3 deduped
│ │ ├── jest-util@29.7.0 deduped
│ │ ├─┬ jest-validate@29.7.0
│ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ ├── camelcase@6.3.0
│ │ │ ├── chalk@4.1.2 deduped
│ │ │ ├── jest-get-type@29.6.3 deduped
│ │ │ ├── leven@3.1.0
│ │ │ └── pretty-format@29.7.0 deduped
│ │ ├─┬ jest-watcher@29.7.0
│ │ │ ├── @jest/test-result@29.7.0 deduped
│ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ ├── @types/node@20.14.11 deduped
│ │ │ ├── ansi-escapes@4.3.2 deduped
│ │ │ ├── chalk@4.1.2 deduped
│ │ │ ├── emittery@0.13.1 deduped
│ │ │ ├── jest-util@29.7.0 deduped
│ │ │ └── string-length@4.0.2 deduped
│ │ ├─┬ micromatch@4.0.7
│ │ │ ├─┬ braces@3.0.3
│ │ │ │ └─┬ fill-range@7.1.1
│ │ │ │   └─┬ to-regex-range@5.0.1
│ │ │ │     └── is-number@7.0.0
│ │ │ └── picomatch@2.3.1 deduped
│ │ ├── UNMET OPTIONAL DEPENDENCY node-notifier@^8.0.1 || ^9.0.0 || ^10.0.0
│ │ ├── pretty-format@29.7.0 deduped
│ │ ├── slash@3.0.0
│ │ └── strip-ansi@6.0.1 deduped
│ ├─┬ @jest/types@29.6.3
│ │ ├── @jest/schemas@29.6.3 deduped
│ │ ├── @types/istanbul-lib-coverage@2.0.6
│ │ ├─┬ @types/istanbul-reports@3.0.4
│ │ │ └─┬ @types/istanbul-lib-report@3.0.3
│ │ │   └── @types/istanbul-lib-coverage@2.0.6 deduped
│ │ ├── @types/node@20.14.11 deduped
│ │ ├─┬ @types/yargs@17.0.32
│ │ │ └── @types/yargs-parser@21.0.3
│ │ └── chalk@4.1.2 deduped
│ ├─┬ import-local@3.1.0
│ │ ├─┬ pkg-dir@4.2.0
│ │ │ └─┬ find-up@4.1.0
│ │ │   ├─┬ locate-path@5.0.0
│ │ │   │ └─┬ p-locate@4.1.0
│ │ │   │   └─┬ p-limit@2.3.0
│ │ │   │     └── p-try@2.2.0 deduped
│ │ │   └── path-exists@4.0.0 deduped
│ │ └─┬ resolve-cwd@3.0.0
│ │   └── resolve-from@5.0.0
│ ├─┬ jest-cli@29.7.0
│ │ ├── @jest/core@29.7.0 deduped
│ │ ├── @jest/test-result@29.7.0 deduped
│ │ ├── @jest/types@29.6.3 deduped
│ │ ├── chalk@4.1.2 deduped
│ │ ├─┬ create-jest@29.7.0
│ │ │ ├── @jest/types@29.6.3 deduped
│ │ │ ├── chalk@4.1.2 deduped
│ │ │ ├── exit@0.1.2 deduped
│ │ │ ├── graceful-fs@4.2.11 deduped
│ │ │ ├── jest-config@29.7.0 deduped
│ │ │ ├── jest-util@29.7.0 deduped
│ │ │ └─┬ prompts@2.4.2
│ │ │   ├── kleur@3.0.3
│ │ │   └── sisteransi@1.0.5
│ │ ├── exit@0.1.2 deduped
│ │ ├── import-local@3.1.0 deduped
│ │ ├── jest-config@29.7.0 deduped
│ │ ├── jest-util@29.7.0 deduped
│ │ ├── jest-validate@29.7.0 deduped
│ │ ├── UNMET OPTIONAL DEPENDENCY node-notifier@^8.0.1 || ^9.0.0 || ^10.0.0
│ │ └─┬ yargs@17.7.2
│ │   ├─┬ cliui@8.0.1
│ │   │ ├── string-width@4.2.3 deduped
│ │   │ ├── strip-ansi@6.0.1 deduped
│ │   │ └─┬ wrap-ansi@7.0.0
│ │   │   ├── ansi-styles@4.3.0 deduped
│ │   │   ├── string-width@4.2.3 deduped
│ │   │   └── strip-ansi@6.0.1 deduped
│ │   ├── escalade@3.1.2
│ │   ├── get-caller-file@2.0.5 deduped
│ │   ├── require-directory@2.1.1 deduped
│ │   ├── string-width@4.2.3 deduped
│ │   ├── y18n@5.0.8
│ │   └── yargs-parser@21.1.1 deduped
│ └── UNMET OPTIONAL DEPENDENCY node-notifier@^8.0.1 || ^9.0.0 || ^10.0.0
├─┬ nyc@17.0.0
│ ├─┬ @istanbuljs/load-nyc-config@1.1.0
│ │ ├── camelcase@5.3.1
│ │ ├─┬ find-up@4.1.0
│ │ │ ├─┬ locate-path@5.0.0
│ │ │ │ └─┬ p-locate@4.1.0
│ │ │ │   └─┬ p-limit@2.3.0
│ │ │ │     └── p-try@2.2.0 deduped
│ │ │ └── path-exists@4.0.0 deduped
│ │ ├── get-package-type@0.1.0 deduped
│ │ ├─┬ js-yaml@3.14.1
│ │ │ ├─┬ argparse@1.0.10
│ │ │ │ └── sprintf-js@1.0.3
│ │ │ └── esprima@4.0.1
│ │ └── resolve-from@5.0.0
│ ├── @istanbuljs/schema@0.1.3
│ ├─┬ caching-transform@4.0.0
│ │ ├─┬ hasha@5.2.2
│ │ │ ├── is-stream@2.0.1
│ │ │ └── type-fest@0.8.1
│ │ ├─┬ make-dir@3.1.0
│ │ │ └── semver@6.3.1
│ │ ├─┬ package-hash@4.0.0
│ │ │ ├── graceful-fs@4.2.11 deduped
│ │ │ ├── hasha@5.2.2 deduped
│ │ │ ├── lodash.flattendeep@4.4.0
│ │ │ └─┬ release-zalgo@1.0.0
│ │ │   └── es6-error@4.1.1
│ │ └─┬ write-file-atomic@3.0.3
│ │   ├── imurmurhash@0.1.4 deduped
│ │   ├── is-typedarray@1.0.0
│ │   ├── signal-exit@3.0.7 deduped
│ │   └─┬ typedarray-to-buffer@3.1.5
│ │     └── is-typedarray@1.0.0 deduped
│ ├── convert-source-map@1.9.0
│ ├── decamelize@1.2.0
│ ├─┬ find-cache-dir@3.3.2
│ │ ├── commondir@1.0.1
│ │ ├─┬ make-dir@3.1.0
│ │ │ └── semver@6.3.1
│ │ └── pkg-dir@4.2.0 deduped
│ ├─┬ find-up@4.1.0
│ │ ├─┬ locate-path@5.0.0
│ │ │ └─┬ p-locate@4.1.0
│ │ │   └─┬ p-limit@2.3.0
│ │ │     └── p-try@2.2.0
│ │ └── path-exists@4.0.0 deduped
│ ├─┬ foreground-child@2.0.0
│ │ ├── cross-spawn@7.0.3 deduped
│ │ └── signal-exit@3.0.7 deduped
│ ├── get-package-type@0.1.0
│ ├─┬ glob@7.2.3
│ │ ├── fs.realpath@1.0.0
│ │ ├─┬ inflight@1.0.6
│ │ │ ├── once@1.4.0 deduped
│ │ │ └── wrappy@1.0.2
│ │ ├── inherits@2.0.4
│ │ ├── minimatch@3.1.2 deduped
│ │ ├─┬ once@1.4.0
│ │ │ └── wrappy@1.0.2 deduped
│ │ └── path-is-absolute@1.0.1
│ ├── istanbul-lib-coverage@3.2.2
│ ├─┬ istanbul-lib-hook@3.0.0
│ │ └─┬ append-transform@2.0.0
│ │   └─┬ default-require-extensions@3.0.1
│ │     └── strip-bom@4.0.0 deduped
│ ├─┬ istanbul-lib-instrument@6.0.2
│ │ ├── @babel/core@7.24.6 deduped
│ │ ├── @babel/parser@7.24.6
│ │ ├── @istanbuljs/schema@0.1.3 deduped
│ │ ├── istanbul-lib-coverage@3.2.2 deduped
│ │ └── semver@7.6.3 deduped
│ ├─┬ istanbul-lib-processinfo@2.0.3
│ │ ├── archy@1.0.0
│ │ ├── cross-spawn@7.0.3 deduped
│ │ ├── istanbul-lib-coverage@3.2.2 deduped
│ │ ├── p-map@3.0.0 deduped
│ │ ├── rimraf@3.0.2 deduped
│ │ └── uuid@8.3.2
│ ├─┬ istanbul-lib-report@3.0.1
│ │ ├── istanbul-lib-coverage@3.2.2 deduped
│ │ ├─┬ make-dir@4.0.0
│ │ │ └── semver@7.6.3 deduped
│ │ └── supports-color@7.2.0 deduped
│ ├─┬ istanbul-lib-source-maps@4.0.1
│ │ ├── debug@4.3.4 deduped
│ │ ├── istanbul-lib-coverage@3.2.2 deduped
│ │ └── source-map@0.6.1
│ ├─┬ istanbul-reports@3.1.7
│ │ ├── html-escaper@2.0.2
│ │ └── istanbul-lib-report@3.0.1 deduped
│ ├─┬ make-dir@3.1.0
│ │ └── semver@6.3.1
│ ├─┬ node-preload@0.2.1
│ │ └── process-on-spawn@1.0.0 deduped
│ ├─┬ p-map@3.0.0
│ │ └─┬ aggregate-error@3.1.0
│ │   ├── clean-stack@2.2.0
│ │   └── indent-string@4.0.0
│ ├─┬ process-on-spawn@1.0.0
│ │ └── fromentries@1.3.2
│ ├── resolve-from@5.0.0
│ ├─┬ rimraf@3.0.2
│ │ └── glob@7.2.3 deduped
│ ├── signal-exit@3.0.7
│ ├─┬ spawn-wrap@2.0.0
│ │ ├── foreground-child@2.0.0 deduped
│ │ ├── is-windows@1.0.2
│ │ ├─┬ make-dir@3.1.0
│ │ │ └── semver@6.3.1
│ │ ├── rimraf@3.0.2 deduped
│ │ ├── signal-exit@3.0.7 deduped
│ │ └── which@2.0.2 deduped
│ ├─┬ test-exclude@6.0.0
│ │ ├── @istanbuljs/schema@0.1.3 deduped
│ │ ├── glob@7.2.3 deduped
│ │ └── minimatch@3.1.2 deduped
│ └─┬ yargs@15.4.1
│   ├─┬ cliui@6.0.0
│   │ ├── string-width@4.2.3 deduped
│   │ ├── strip-ansi@6.0.1 deduped
│   │ └─┬ wrap-ansi@6.2.0
│   │   ├── ansi-styles@4.3.0 deduped
│   │   ├── string-width@4.2.3 deduped
│   │   └── strip-ansi@6.0.1 deduped
│   ├── decamelize@1.2.0 deduped
│   ├── find-up@4.1.0 deduped
│   ├── get-caller-file@2.0.5
│   ├── require-directory@2.1.1
│   ├── require-main-filename@2.0.0
│   ├── set-blocking@2.0.0
│   ├─┬ string-width@4.2.3
│   │ ├── emoji-regex@8.0.0
│   │ ├── is-fullwidth-code-point@3.0.0
│   │ └── strip-ansi@6.0.1 deduped
│   ├── which-module@2.0.1
│   ├── y18n@4.0.3
│   └─┬ yargs-parser@18.1.3
│     ├── camelcase@5.3.1 deduped
│     └── decamelize@1.2.0 deduped
├─┬ pbf@3.2.1
│ ├── ieee754@1.2.1
│ └─┬ resolve-protobuf-schema@2.1.0
│   └── protocol-buffers-schema@3.6.0
├── prettier@3.3.3
├── semver@7.6.3
├─┬ ts-jest@29.2.3
│ ├─┬ @babel/core@7.24.6
│ │ ├─┬ @ampproject/remapping@2.3.0
│ │ │ ├─┬ @jridgewell/gen-mapping@0.3.5
│ │ │ │ ├── @jridgewell/set-array@1.2.1
│ │ │ │ ├── @jridgewell/sourcemap-codec@1.4.15 deduped
│ │ │ │ └── @jridgewell/trace-mapping@0.3.25 deduped
│ │ │ └── @jridgewell/trace-mapping@0.3.25 deduped
│ │ ├─┬ @babel/code-frame@7.24.6
│ │ │ ├─┬ @babel/highlight@7.24.6
│ │ │ │ ├── @babel/helper-validator-identifier@7.24.6 deduped
│ │ │ │ ├─┬ chalk@2.4.2
│ │ │ │ │ ├─┬ ansi-styles@3.2.1
│ │ │ │ │ │ └─┬ color-convert@1.9.3
│ │ │ │ │ │   └── color-name@1.1.3
│ │ │ │ │ ├── escape-string-regexp@1.0.5
│ │ │ │ │ └─┬ supports-color@5.5.0
│ │ │ │ │   └── has-flag@3.0.0
│ │ │ │ ├── js-tokens@4.0.0
│ │ │ │ └── picocolors@1.0.1 deduped
│ │ │ └── picocolors@1.0.1
│ │ ├─┬ @babel/generator@7.24.6
│ │ │ ├── @babel/types@7.24.6 deduped
│ │ │ ├── @jridgewell/gen-mapping@0.3.5 deduped
│ │ │ ├── @jridgewell/trace-mapping@0.3.25 deduped
│ │ │ └── jsesc@2.5.2
│ │ ├─┬ @babel/helper-compilation-targets@7.24.6
│ │ │ ├── @babel/compat-data@7.24.6
│ │ │ ├── @babel/helper-validator-option@7.24.6
│ │ │ ├─┬ browserslist@4.23.0
│ │ │ │ ├── caniuse-lite@1.0.30001624
│ │ │ │ ├── electron-to-chromium@1.4.783
│ │ │ │ ├── node-releases@2.0.14
│ │ │ │ └─┬ update-browserslist-db@1.0.16
│ │ │ │   ├── browserslist@4.23.0 deduped
│ │ │ │   ├── escalade@3.1.2 deduped
│ │ │ │   └── picocolors@1.0.1 deduped
│ │ │ ├─┬ lru-cache@5.1.1
│ │ │ │ └── yallist@3.1.1
│ │ │ └── semver@6.3.1
│ │ ├─┬ @babel/helper-module-transforms@7.24.6
│ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ ├── @babel/helper-environment-visitor@7.24.6
│ │ │ ├─┬ @babel/helper-module-imports@7.24.6
│ │ │ │ └── @babel/types@7.24.6 deduped
│ │ │ ├─┬ @babel/helper-simple-access@7.24.6
│ │ │ │ └── @babel/types@7.24.6 deduped
│ │ │ ├─┬ @babel/helper-split-export-declaration@7.24.6
│ │ │ │ └── @babel/types@7.24.6 deduped
│ │ │ └── @babel/helper-validator-identifier@7.24.6
│ │ ├─┬ @babel/helpers@7.24.6
│ │ │ ├── @babel/template@7.24.6 deduped
│ │ │ └── @babel/types@7.24.6 deduped
│ │ ├── @babel/parser@7.24.6 deduped
│ │ ├─┬ @babel/template@7.24.6
│ │ │ ├── @babel/code-frame@7.24.6 deduped
│ │ │ ├── @babel/parser@7.24.6 deduped
│ │ │ └── @babel/types@7.24.6 deduped
│ │ ├─┬ @babel/traverse@7.24.6
│ │ │ ├── @babel/code-frame@7.24.6 deduped
│ │ │ ├── @babel/generator@7.24.6 deduped
│ │ │ ├── @babel/helper-environment-visitor@7.24.6 deduped
│ │ │ ├─┬ @babel/helper-function-name@7.24.6
│ │ │ │ ├── @babel/template@7.24.6 deduped
│ │ │ │ └── @babel/types@7.24.6 deduped
│ │ │ ├─┬ @babel/helper-hoist-variables@7.24.6
│ │ │ │ └── @babel/types@7.24.6 deduped
│ │ │ ├── @babel/helper-split-export-declaration@7.24.6 deduped
│ │ │ ├── @babel/parser@7.24.6 deduped
│ │ │ ├── @babel/types@7.24.6 deduped
│ │ │ ├── debug@4.3.4 deduped
│ │ │ └── globals@11.12.0
│ │ ├─┬ @babel/types@7.24.6
│ │ │ ├── @babel/helper-string-parser@7.24.6
│ │ │ ├── @babel/helper-validator-identifier@7.24.6 deduped
│ │ │ └── to-fast-properties@2.0.0
│ │ ├── convert-source-map@2.0.0
│ │ ├── debug@4.3.4 deduped
│ │ ├── gensync@1.0.0-beta.2
│ │ ├── json5@2.2.3 deduped
│ │ └── semver@6.3.1
│ ├─┬ @jest/transform@29.7.0
│ │ ├── @babel/core@7.24.6 deduped
│ │ ├── @jest/types@29.6.3 deduped
│ │ ├─┬ @jridgewell/trace-mapping@0.3.25
│ │ │ ├── @jridgewell/resolve-uri@3.1.2
│ │ │ └── @jridgewell/sourcemap-codec@1.4.15
│ │ ├─┬ babel-plugin-istanbul@6.1.1
│ │ │ ├── @babel/helper-plugin-utils@7.24.6
│ │ │ ├── @istanbuljs/load-nyc-config@1.1.0 deduped
│ │ │ ├── @istanbuljs/schema@0.1.3 deduped
│ │ │ ├─┬ istanbul-lib-instrument@5.2.1
│ │ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ │ ├── @babel/parser@7.24.6 deduped
│ │ │ │ ├── @istanbuljs/schema@0.1.3 deduped
│ │ │ │ ├── istanbul-lib-coverage@3.2.2 deduped
│ │ │ │ └── semver@6.3.1
│ │ │ └── test-exclude@6.0.0 deduped
│ │ ├── chalk@4.1.2 deduped
│ │ ├── convert-source-map@2.0.0 deduped
│ │ ├── fast-json-stable-stringify@2.1.0 deduped
│ │ ├── graceful-fs@4.2.11 deduped
│ │ ├── jest-haste-map@29.7.0 deduped
│ │ ├── jest-regex-util@29.6.3 deduped
│ │ ├── jest-util@29.7.0 deduped
│ │ ├── micromatch@4.0.7 deduped
│ │ ├── pirates@4.0.6
│ │ ├── slash@3.0.0 deduped
│ │ └─┬ write-file-atomic@4.0.2
│ │   ├── imurmurhash@0.1.4 deduped
│ │   └── signal-exit@3.0.7 deduped
│ ├── @jest/types@29.6.3 deduped
│ ├─┬ babel-jest@29.7.0
│ │ ├── @babel/core@7.24.6 deduped
│ │ ├── @jest/transform@29.7.0 deduped
│ │ ├─┬ @types/babel__core@7.20.5
│ │ │ ├── @babel/parser@7.24.6 deduped
│ │ │ ├── @babel/types@7.24.6 deduped
│ │ │ ├─┬ @types/babel__generator@7.6.8
│ │ │ │ └── @babel/types@7.24.6 deduped
│ │ │ ├─┬ @types/babel__template@7.4.4
│ │ │ │ ├── @babel/parser@7.24.6 deduped
│ │ │ │ └── @babel/types@7.24.6 deduped
│ │ │ └─┬ @types/babel__traverse@7.20.6
│ │ │   └── @babel/types@7.24.6 deduped
│ │ ├── babel-plugin-istanbul@6.1.1 deduped
│ │ ├─┬ babel-preset-jest@29.6.3
│ │ │ ├── @babel/core@7.24.6 deduped
│ │ │ ├─┬ babel-plugin-jest-hoist@29.6.3
│ │ │ │ ├── @babel/template@7.24.6 deduped
│ │ │ │ ├── @babel/types@7.24.6 deduped
│ │ │ │ ├── @types/babel__core@7.20.5 deduped
│ │ │ │ └── @types/babel__traverse@7.20.6 deduped
│ │ │ └── babel-preset-current-node-syntax@1.0.1 deduped
│ │ ├── chalk@4.1.2 deduped
│ │ ├── graceful-fs@4.2.11 deduped
│ │ └── slash@3.0.0 deduped
│ ├─┬ bs-logger@0.2.6
│ │ └── fast-json-stable-stringify@2.1.0 deduped
│ ├─┬ ejs@3.1.10
│ │ └─┬ jake@10.9.1
│ │   ├── async@3.2.5
│ │   ├── chalk@4.1.2 deduped
│ │   ├─┬ filelist@1.0.4
│ │   │ └─┬ minimatch@5.1.6
│ │   │   └─┬ brace-expansion@2.0.1
│ │   │     └── balanced-match@1.0.2 deduped
│ │   └── minimatch@3.1.2 deduped
│ ├── fast-json-stable-stringify@2.1.0
│ ├─┬ jest-util@29.7.0
│ │ ├── @jest/types@29.6.3 deduped
│ │ ├── @types/node@20.14.11 deduped
│ │ ├── chalk@4.1.2 deduped
│ │ ├── ci-info@3.9.0 deduped
│ │ ├── graceful-fs@4.2.11 deduped
│ │ └── picomatch@2.3.1
│ ├── jest@29.7.0 deduped
│ ├── json5@2.2.3
│ ├── lodash.memoize@4.1.2
│ ├── make-error@1.3.6
│ ├── semver@7.6.3 deduped
│ ├── typescript@5.5.3 deduped
│ └── yargs-parser@21.1.1
├─┬ ts-node@10.9.2
│ ├─┬ @cspotcode/source-map-support@0.8.1
│ │ └─┬ @jridgewell/trace-mapping@0.3.9
│ │   ├── @jridgewell/resolve-uri@3.1.2 deduped
│ │   └── @jridgewell/sourcemap-codec@1.4.15 deduped
│ ├── UNMET OPTIONAL DEPENDENCY @swc/core@>=1.2.50
│ ├── UNMET OPTIONAL DEPENDENCY @swc/wasm@>=1.2.50
│ ├── @tsconfig/node10@1.0.11
│ ├── @tsconfig/node12@1.0.11
│ ├── @tsconfig/node14@1.0.3
│ ├── @tsconfig/node16@1.0.4
│ ├── @types/node@20.14.11 deduped
│ ├── acorn-walk@8.3.2
│ ├── acorn@8.11.3
│ ├── arg@4.1.3
│ ├── create-require@1.1.1
│ ├── diff@4.0.2
│ ├── make-error@1.3.6 deduped
│ ├── typescript@5.5.3 deduped
│ ├── v8-compile-cache-lib@3.0.1
│ └── yn@3.1.1
├── typescript@5.5.3
└── varint@6.0.0

The problem is how many of these are actually used in production? Well to check we can filter:

 npm list --production --all
npm warn config production Use `--omit=dev` instead.
 npm list --omit=dev --all
@maplibre/maplibre-tile-spec@0.0.1-alpha.4 /Users/craigoconnor/Documents/Projects/javascript/maplibre-tile-spec/js
├── @bufbuild/protobuf@1.10.0
├─┬ @types/bytebuffer@5.0.49
│ ├── @types/long@3.0.32
│ └─┬ @types/node@20.14.11
│   └── undici-types@5.26.5
├── bitset@5.1.1
└─┬ bytebuffer@5.0.1
  └── long@3.2.0

You can see the package is not listed anymore. One of the primary reasons for this the package not carrying over is because it comes for a dev-dependency: @mapbox/vector-tile. However, if you switched @mapbox/vector-tile over to a dependency this would fix it, but you would then be claiming the entirety of @mapbox/vector-tile should be accessible/utilized in production which is probably not ideal for this project.

To be more precise, I'd argue even if @mapbox/vector-tile was production, you should access Point from @mapbox/vector-tile otherwise if you use the package inside your production code like so, it should be listed in your package.json dependency list.

Also, like I said before, because you don't have control over the versioning using this method, you are using an outdated package.

If you're still not convinced, no worries feel free to close this issue.

wipfli commented 3 months ago

Thanks for pointing to this line @CraigglesO.

Why are we using require()?

CraigglesO commented 3 months ago

Ye I agree, the correct ES6+ syntax is import x from '...'.