Skip to content

Instantly share code, notes, and snippets.

@TotallyInformation
Last active May 1, 2024 13:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TotallyInformation/eb29b1a45c044706009d2ef47e59f51f to your computer and use it in GitHub Desktop.
Save TotallyInformation/eb29b1a45c044706009d2ef47e59f51f to your computer and use it in GitHub Desktop.
Flow to capture all node modules installed

Count of total modules + list of module names

If you want to know which node modules you have installed, the answer is in the ~/.node-red/.config.json file.

So we can easily grab that data and summarise it using the marvelous JSONata:

payload.nodes {
    "TOTAL": $count($keys($)),
    "node_modules": $keys($)
}

Below is an example flow. Note the example has two file read's to illustrate Linux and Windows file paths. You will need to adjust the file paths to suit your own installation.

List of module names with their node names

This JSONata will give you a list of objects where each object contains the name of the module and a list of the node names for that module.

(
    $each(payload.nodes,function($v, $k) {
        {
            "name": $k,
            "nodes": $keys($v.nodes)
        }
    }); 
)

Which gives output that looks like this (I've removed the node-red module as it is long):

[
  {
    "name": "node-red-node-twitter",
    "nodes": [
      "twitter"
    ]
  },
  {
    "name": "node-red-contrib-uibuilder",
    "nodes": [
      "uibuilder"
    ]
  }
]

Or, more compactly:

$each(payload.nodes,function($v, $k) {
    {$k: $keys($v.nodes)}
})

which gives:

[
  ...
  {
    "node-red-node-google": [
      "google plus",
      "google places",
      "google-api-config",
      "google geocoding",
      "google directions",
      "google calendar"
    ]
  },
  {
    "node-red-contrib-blockly": [
      "blockly"
    ]
  },
  ...
]

A more compact alternative would be:

$sort(payload.nodes.*.nodes.(
    $each($, function($v, $k) {
    	$k & " : " & $v.module
    })
))

Gives a list of nodes sorted by node name and each node shows the module it comes from.

[
  ...
  "file : node-red",
  "function : node-red",
  "google calendar : node-red-node-google",
  "google directions : node-red-node-google",
  "google geocoding : node-red-node-google",
  "google places : node-red-node-google",
  "google plus : node-red-node-google",
  "google-api-config : node-red-node-google",
  "httpin : node-red",
  "httprequest : node-red",
  "humanizer : node-red-contrib-moment",
  ...
]
[{"id":"57f9f3a.e32620c","type":"file in","z":"d480ffdb.73b02","name":"","filename":"/home/pi//node/nrlive/.data/.config.json","format":"utf8","chunk":false,"sendError":false,"x":470,"y":1040,"wires":[["d1d4a711.9a25d8"]]},{"id":"d1d4a711.9a25d8","type":"json","z":"d480ffdb.73b02","name":"","pretty":false,"x":690,"y":1040,"wires":[["e1bdf411.316238"]]},{"id":"e1bdf411.316238","type":"change","z":"d480ffdb.73b02","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.nodes {\t \"TOTAL\": $count($keys($)),\t \"node_modules\": $keys($)\t}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":860,"y":1040,"wires":[["1a0235f0.8c486a"]]},{"id":"1a0235f0.8c486a","type":"debug","z":"d480ffdb.73b02","name":"","active":true,"console":"false","complete":"false","x":1050,"y":1040,"wires":[]},{"id":"b6c696f6.b0bbe8","type":"inject","z":"d480ffdb.73b02","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":240,"y":1040,"wires":[["57f9f3a.e32620c","62b31849.ce3328"]]},{"id":"bae74244.be8fa","type":"comment","z":"d480ffdb.73b02","name":"How Many Node modules in my configuration?","info":"","x":350,"y":1000,"wires":[]},{"id":"62b31849.ce3328","type":"file in","z":"d480ffdb.73b02","name":"","filename":"C:\\src\\nr\\data\\.config.json","format":"utf8","chunk":false,"sendError":false,"x":430,"y":1080,"wires":[["d1d4a711.9a25d8"]]}]
@K5OZ
Copy link

K5OZ commented May 1, 2024

Hello Totallyinformation,
I am trying to use your flow; however I cannot find the path to the config.json file. I do not see any of the directories in your example flow path. Can you help me find the path to config.json? Here is my .node-red tree

pi@raspberrypi:~/.node-red $ tree -d
.
├── lib
│   └── flows
└── node_modules
├── accepts
│   └── node_modules
├── ajv
│   ├── dist
│   ├── lib
│   │   ├── compile
│   │   ├── dot
│   │   ├── dotjs
│   │   └── refs
│   └── scripts
├── ansi-colors
│   └── types
├── ansi-regex
├── ansi-styles
├── anymatch
├── argparse
│   └── lib
├── array-find-index
├── array-uniq
├── asap
├── asn1
│   └── lib
│   └── ber
├── assert-plus
├── async
│   ├── dist
│   ├── internal
│   └── node_modules
│   └── lodash
│   └── fp
├── async-await-retry
├── asynckit
│   └── lib
├── aws4
├── aws-sign2
├── axios
│   ├── dist
│   ├── lib
│   │   ├── adapters
│   │   ├── cancel
│   │   ├── core
│   │   ├── defaults
│   │   │   └── env
│   │   ├── env
│   │   └── helpers
│   └── node_modules
│   └── form-data
│   └── lib
├── balanced-match
├── base64id
│   └── lib
├── base64-js
├── bcrypt-pbkdf
├── binary-extensions
├── bl
│   ├── node_modules
│   │   ├── readable-stream
│   │   │   └── lib
│   │   │   └── internal
│   │   │   └── streams
│   │   ├── safe-buffer
│   │   └── string_decoder
│   │   └── lib
│   └── test
├── bluebird
│   └── js
│   ├── browser
│   └── release
├── boolbase
├── brace-expansion
├── braces
│   └── lib
├── browser-stdout
├── buffer
├── buffer-from
├── byline
│   └── lib
├── bytes
├── cacheable-request
│   ├── node_modules
│   │   ├── get-stream
│   │   └── lowercase-keys
│   └── src
├── call-bind
│   └── test
├── caller-id
│   ├── lib
│   └── test
├── camelcase
├── camelcase-keys
├── caseless
├── chalk
│   ├── node_modules
│   │   └── supports-color
│   └── source
├── cheerio
│   ├── lib
│   │   └── api
│   ├── scripts
│   └── test
│   └── api
├── child_process
├── chokidar
│   ├── lib
│   └── types
├── cliui
│   └── build
│   └── lib
├── clone-response
│   ├── node_modules
│   │   └── mimic-response
│   └── src
├── co
├── color-convert
├── color-name
├── combined-stream
│   └── lib
├── commist
├── compressible
├── compression
│   └── node_modules
│   ├── debug
│   │   └── src
│   └── ms
├── concat-map
│   ├── example
│   └── test
├── concat-stream
│   └── node_modules
│   ├── readable-stream
│   │   └── lib
│   │   └── internal
│   │   └── streams
│   ├── safe-buffer
│   └── string_decoder
│   └── lib
├── cookie
├── core-util-is
│   └── lib
├── cors
│   └── lib
├── cross-spawn
│   └── lib
│   └── util
├── crypto
├── crypto-js
│   └── docs
├── css-select
│   └── lib
├── css-what
├── currently-unhandled
├── dashdash
│   ├── etc
│   └── lib
├── debug
│   └── src
├── decamelize
├── default-gateway
├── defer-to-connect
│   └── dist
├── define-data-property
│   └── test
├── delayed-stream
│   └── lib
├── depd
│   └── lib
│   └── browser
├── destroy
├── diff
│   ├── dist
│   └── lib
│   ├── convert
│   ├── diff
│   ├── patch
│   └── util
├── dns-packet
├── dns-socket
├── domain
│   ├── demo
│   │   └── test
│   ├── dist
│   │   ├── lib
│   │   └── test
│   ├── lib
│   └── test
├── domelementtype
├── domhandler
│   ├── lib
│   └── test
│   └── cases
├── dom-serializer
├── domutils
│   ├── lib
│   └── test
│   └── tests
├── dotty
│   ├── docs
│   │   └── public
│   │   ├── fonts
│   │   └── stylesheets
│   ├── lib
│   └── test
├── duplexer
│   └── test
├── duplexer3
├── duplexify
│   └── node_modules
│   ├── readable-stream
│   │   └── lib
│   │   └── internal
│   │   └── streams
│   ├── safe-buffer
│   └── string_decoder
│   └── lib
├── ecc-jsbn
│   └── lib
├── ee-first
├── emitter-component
│   └── test
├── emoji-regex
│   └── es2015
├── encodeurl
├── end-of-stream
├── engine.io
│   └── build
│   ├── parser-v3
│   ├── transports
│   └── transports-uws
├── engine.io-parser
│   └── build
│   ├── cjs
│   │   └── contrib
│   └── esm
│   └── contrib
├── entities
│   ├── lib
│   ├── maps
│   └── test
├── error-ex
├── escalade
│   ├── dist
│   └── sync
├── escape-html
├── escape-string-regexp
├── es-define-property
│   └── test
├── es-errors
│   └── test
├── etag
├── eventemitter3
│   └── umd
├── eventstore
│   ├── lib
│   │   └── databases
│   └── node_modules
│   ├── debug
│   │   └── src
│   ├── lodash
│   │   └── fp
│   └── ms
├── event-stream
│   ├── examples
│   └── test
│   └── helper
├── execa
│   └── lib
├── extend
├── extsprintf
│   └── lib
├── fast-deep-equal
│   └── es6
├── fast-json-stable-stringify
│   ├── benchmark
│   ├── example
│   └── test
├── filesize
│   └── lib
├── fill-range
├── find-up
├── flat
│   └── test
├── follow-redirects
├── forever-agent
├── form-data
│   └── lib
├── fresh
├── from
│   └── test
├── fs
├── fs.realpath
├── ftp
│   ├── lib
│   └── test
├── function-bind
│   └── test
├── get-caller-file
├── get-hrefs
│   ├── bin
│   ├── node_modules
│   │   ├── normalize-url
│   │   └── prepend-http
│   ├── src
│   └── test
├── get-intrinsic
│   └── test
├── getpass
│   └── lib
├── get-stdin
├── get-stream
├── glob
├── glob-parent
├── gopd
│   └── test
├── got
│   ├── node_modules
│   │   ├── decompress-response
│   │   ├── get-stream
│   │   └── mimic-response
│   └── source
│   └── utils
├── graceful-fs
├── gridstack
│   ├── dist
│   └── doc
├── har-schema
│   └── lib
├── har-validator
│   └── lib
├── has
│   ├── src
│   └── test
├── has-flag
├── hasown
├── has-property-descriptors
│   └── test
├── has-proto
│   └── test
├── has-symbols
│   └── test
│   └── shams
├── he
│   ├── bin
│   └── man
├── help-me
│   ├── doc
│   ├── fixture
│   │   ├── basic
│   │   ├── dir
│   │   │   └── a
│   │   ├── no-ext
│   │   ├── sameprefix
│   │   └── shortnames
│   └── node_modules
│   ├── readable-stream
│   │   └── lib
│   │   └── internal
│   │   └── streams
│   ├── safe-buffer
│   └── string_decoder
│   └── lib
├── hosted-git-info
├── htmlparser2
│   ├── lib
│   ├── node_modules
│   │   ├── domutils
│   │   │   ├── lib
│   │   │   └── test
│   │   │   └── tests
│   │   └── entities
│   │   ├── lib
│   │   ├── maps
│   │   └── test
│   └── test
│   ├── Documents
│   ├── Events
│   ├── Feeds
│   └── Stream
├── http-cache-semantics
├── http-errors
├── http-signature
│   └── lib
├── human-signals
│   └── build
│   └── src
├── iconv-lite
│   ├── encodings
│   │   └── tables
│   └── lib
├── ieee754
├── indent-string
├── inflight
├── inherits
├── internal-ip
├── ipaddr.js
│   └── lib
├── ip-regex
├── isarray
│   └── build
├── is-arrayish
├── is-binary-path
├── is-core-module
│   └── test
├── isexe
│   └── test
├── is-extglob
├── is-finite
├── is-fullwidth-code-point
├── is-glob
├── is-ip
├── is-number
├── is-plain-obj
├── is-stream
├── isstream
├── is-typedarray
├── is-unicode-supported
├── is-utf8
├── jquery
│   ├── dist
│   ├── external
│   │   └── sizzle
│   │   └── dist
│   └── src
│   ├── ajax
│   │   └── var
│   ├── attributes
│   ├── core
│   │   └── var
│   ├── css
│   │   └── var
│   ├── data
│   │   └── var
│   ├── deferred
│   ├── deprecated
│   ├── effects
│   ├── event
│   ├── exports
│   ├── manipulation
│   │   └── var
│   ├── queue
│   ├── traversing
│   │   └── var
│   └── var
├── jsbn
├── json-buffer
│   └── test
├── jsondate
├── json-schema
│   └── lib
├── json-schema-traverse
│   └── spec
│   └── fixtures
├── json-stringify-safe
│   └── test
├── jsprim
│   └── lib
├── js-sdsl
│   └── dist
│   ├── cjs
│   │   ├── container
│   │   │   ├── ContainerBase
│   │   │   ├── HashContainer
│   │   │   │   └── Base
│   │   │   ├── OtherContainer
│   │   │   ├── SequentialContainer
│   │   │   │   └── Base
│   │   │   └── TreeContainer
│   │   │   └── Base
│   │   └── utils
│   ├── esm
│   │   ├── container
│   │   │   ├── ContainerBase
│   │   │   ├── HashContainer
│   │   │   │   └── Base
│   │   │   ├── OtherContainer
│   │   │   ├── SequentialContainer
│   │   │   │   └── Base
│   │   │   └── TreeContainer
│   │   │   └── Base
│   │   └── utils
│   └── umd
├── js-yaml
│   ├── bin
│   ├── dist
│   └── lib
│   ├── schema
│   └── type
├── keyv
│   └── src
├── @leichtgewicht
│   └── ip-codec
│   └── types
├── leven
├── load-json-file
├── locate-path
├── lodash
│   ├── array
│   ├── chain
│   ├── collection
│   ├── date
│   ├── function
│   ├── internal
│   ├── lang
│   ├── math
│   ├── number
│   ├── object
│   ├── string
│   └── utility
├── log-symbols
├── loud-rejection
├── lowercase-keys
├── lru-cache
├── map-obj
├── map-stream
│   ├── examples
│   └── test
├── meow
├── merge-stream
├── mime
│   └── src
├── mime-db
├── mime-types
├── mimic-fn
├── minimatch
├── minimist
│   ├── example
│   └── test
├── mocha
│   ├── bin
│   ├── lib
│   │   ├── browser
│   │   ├── cli
│   │   ├── interfaces
│   │   ├── nodejs
│   │   │   └── reporters
│   │   └── reporters
│   └── node_modules
│   ├── brace-expansion
│   ├── find-up
│   ├── glob
│   ├── minimatch
│   │   └── lib
│   ├── ms
│   └── path-exists
├── moment
│   ├── dist
│   │   └── locale
│   ├── locale
│   ├── min
│   ├── src
│   │   ├── lib
│   │   │   ├── create
│   │   │   ├── duration
│   │   │   ├── format
│   │   │   ├── locale
│   │   │   ├── moment
│   │   │   ├── parse
│   │   │   ├── units
│   │   │   └── utils
│   │   └── locale
│   └── ts3.1-typings
├── mqtt
│   ├── bin
│   ├── dist
│   ├── doc
│   ├── lib
│   │   └── connect
│   ├── node_modules
│   │   ├── readable-stream
│   │   │   └── lib
│   │   │   └── internal
│   │   │   └── streams
│   │   ├── safe-buffer
│   │   ├── string_decoder
│   │   │   └── lib
│   │   └── ws
│   │   └── lib
│   └── types
│   └── lib
│   └── connect
├── mqtt-packet
│   ├── benchmarks
│   └── types
├── ms
├── mustache
│   ├── bin
│   └── wrappers
│   ├── dojo
│   ├── jquery
│   ├── mootools
│   ├── qooxdoo
│   └── yui3
├── nanoid
│   ├── async
│   └── non-secure
├── needle
│   ├── bin
│   ├── examples
│   │   └── stream-multiple
│   ├── lib
│   └── test
│   ├── files
│   └── utils
├── negotiator
│   └── lib
├── node-addon-api
│   └── tools
├── node-gyp-build
├── node-red-biglib
├── node-red-contrib-aggregator
│   └── aggregator
├── node-red-contrib-arp
│   └── arp
├── node-red-contrib-bigexec
│   └── bigexec
│   ├── icons
│   └── locales
│   └── en-US
├── node-red-contrib-boolean-logic
│   └── boolean-logic
├── node-red-contrib-bool-gate
│   ├── examples
│   ├── lib
│   └── nodes
│   └── icons
├── node-red-contrib-buffer-parser
│   ├── examples
│   ├── images
│   └── test
├── node-red-contrib-calc
│   ├── examples
│   ├── icons
│   └── images
├── node-red-contrib-countdown-2
│   ├── examples
│   ├── icons
│   └── images
├── node-red-contrib-cpu
│   ├── icons
│   └── images
├── node-red-contrib-device-stats
│   ├── dist
│   │   └── locales
│   │   └── en-US
│   ├── examples
│   └── node_modules
│   ├── source-map
│   │   ├── dist
│   │   └── lib
│   └── source-map-support
├── node-red-contrib-frequency-meter
├── node-red-contrib-ftp-client
│   └── examples
├── node-red-contrib-fullsplitter
│   └── icons
├── node-red-contrib-get-hrefs
│   ├── src
│   │   └── icons
│   └── test
├── node-red-contrib-ip
│   └── locales
│   └── en-US
├── node-red-contrib-isonline
│   └── isonline
├── node-red-contrib-latching-router
│   ├── icons
│   ├── node_modules
│   │   └── lodash
│   │   └── fp
│   └── tests
├── node-red-contrib-play-audio
│   ├── examples
│   └── locales
│   ├── en-US
│   └── ja
├── node-red-contrib-rpi-shutdown
├── node-red-contrib-string
│   └── string
│   ├── demo
│   └── icons
├── node-red-contrib-timed-counter
│   └── icons
├── node-red-contrib-tuya-auth
│   ├── examples
│   ├── icons
│   ├── lib
│   ├── node_modules
│   │   └── qs
│   │   ├── dist
│   │   ├── lib
│   │   └── test
│   └── test
├── node-red-contrib-tuya-devices
│   ├── img
│   ├── lib
│   └── nodes
│   └── icons
├── node-red-contrib-tuya-local
│   ├── icons
│   ├── images
│   ├── lib
│   └── node_modules
│   ├── debug
│   │   ├── dist
│   │   └── src
│   ├── p-retry
│   ├── retry
│   │   ├── example
│   │   ├── lib
│   │   └── test
│   │   └── integration
│   └── tuyapi
│   └── lib
├── node-red-contrib-tuya-smart-device
│   ├── examples
│   ├── img
│   └── src
│   └── icons
├── node-red-contrib-ui-led
│   └── dist
│   └── nodes
│   └── ui_led
│   ├── icons
│   └── shared
├── node-red-contrib-wifiscan
│   ├── icons
│   └── wifiscan
├── node-red-dashboard
│   ├── dist
│   │   ├── css
│   │   ├── fonts
│   │   └── js
│   └── nodes
│   ├── icons
│   └── locales
│   ├── de
│   ├── en-US
│   └── ja
├── node-red-node-email
│   ├── locales
│   │   ├── de
│   │   ├── en-US
│   │   └── ja
│   └── node_modules
│   ├── base32.js
│   │   ├── dist
│   │   └── test
│   ├── core-util-is
│   │   └── lib
│   ├── deepmerge
│   │   └── dist
│   ├── domelementtype
│   │   └── lib
│   │   └── esm
│   ├── domhandler
│   │   └── lib
│   │   └── esm
│   ├── dom-serializer
│   │   └── lib
│   │   └── esm
│   ├── domutils
│   │   └── lib
│   │   └── esm
│   ├── encoding-japanese
│   │   └── src
│   ├── entities
│   │   └── lib
│   │   ├── esm
│   │   │   └── generated
│   │   └── generated
│   ├── he
│   │   ├── bin
│   │   └── man
│   ├── htmlparser2
│   │   └── lib
│   │   └── esm
│   ├── html-to-text
│   │   └── lib
│   ├── iconv-lite
│   │   ├── encodings
│   │   │   └── tables
│   │   └── lib
│   ├── imap
│   │   ├── deps
│   │   │   └── encoding
│   │   ├── lib
│   │   └── test
│   ├── inherits
│   ├── ipv6-normalize
│   ├── isarray
│   │   └── build
│   ├── leac
│   │   └── lib
│   ├── libbase64
│   │   └── lib
│   ├── libmime
│   │   └── lib
│   ├── libqp
│   │   ├── lib
│   │   └── test
│   ├── linkify-it
│   │   ├── build
│   │   └── lib
│   ├── mailparser
│   │   ├── lib
│   │   └── node_modules
│   │   └── nodemailer
│   │   └── lib
│   │   ├── addressparser
│   │   ├── base64
│   │   ├── dkim
│   │   ├── fetch
│   │   ├── json-transport
│   │   ├── mail-composer
│   │   ├── mailer
│   │   ├── mime-funcs
│   │   ├── mime-node
│   │   ├── punycode
│   │   ├── qp
│   │   ├── sendmail-transport
│   │   ├── ses-transport
│   │   ├── shared
│   │   ├── smtp-connection
│   │   ├── smtp-pool
│   │   ├── smtp-transport
│   │   ├── stream-transport
│   │   ├── well-known
│   │   └── xoauth2
│   ├── mailsplit
│   │   ├── lib
│   │   └── node_modules
│   │   ├── libbase64
│   │   │   └── lib
│   │   ├── libmime
│   │   │   └── lib
│   │   └── libqp
│   │   ├── lib
│   │   └── test
│   ├── nodemailer
│   │   └── lib
│   │   ├── addressparser
│   │   ├── base64
│   │   ├── dkim
│   │   ├── fetch
│   │   ├── json-transport
│   │   ├── mail-composer
│   │   ├── mailer
│   │   ├── mime-funcs
│   │   ├── mime-node
│   │   ├── punycode
│   │   ├── qp
│   │   ├── sendmail-transport
│   │   ├── ses-transport
│   │   ├── shared
│   │   ├── smtp-connection
│   │   ├── smtp-pool
│   │   ├── smtp-transport
│   │   ├── stream-transport
│   │   ├── well-known
│   │   └── xoauth2
│   ├── node-pop3
│   │   ├── bin
│   │   ├── dist
│   │   │   ├── bin
│   │   │   └── src
│   │   ├── docs
│   │   ├── lib
│   │   └── src
│   ├── parseley
│   │   └── lib
│   ├── peberminta
│   │   └── lib
│   ├── punycode
│   ├── readable-stream
│   │   └── lib
│   ├── safer-buffer
│   ├── @selderee
│   │   └── plugin-htmlparser2
│   │   └── lib
│   ├── selderee
│   │   └── lib
│   ├── semver
│   │   └── bin
│   ├── smtp-server
│   │   ├── examples
│   │   ├── lib
│   │   ├── node_modules
│   │   │   └── nodemailer
│   │   │   └── lib
│   │   │   ├── addressparser
│   │   │   ├── base64
│   │   │   ├── dkim
│   │   │   ├── fetch
│   │   │   ├── json-transport
│   │   │   ├── mail-composer
│   │   │   ├── mailer
│   │   │   ├── mime-funcs
│   │   │   ├── mime-node
│   │   │   ├── punycode
│   │   │   ├── qp
│   │   │   ├── sendmail-transport
│   │   │   ├── ses-transport
│   │   │   ├── shared
│   │   │   ├── smtp-connection
│   │   │   ├── smtp-pool
│   │   │   ├── smtp-transport
│   │   │   ├── stream-transport
│   │   │   ├── well-known
│   │   │   └── xoauth2
│   │   └── test
│   ├── string_decoder
│   ├── tlds
│   ├── uc.micro
│   │   ├── build
│   │   ├── categories
│   │   │   ├── Cc
│   │   │   ├── Cf
│   │   │   ├── P
│   │   │   ├── S
│   │   │   └── Z
│   │   └── properties
│   │   └── Any
│   └── utf7
│   └── test
├── node-red-node-pi-gpio
│   └── locales
│   ├── de
│   ├── en-US
│   ├── ja
│   └── ko
├── node-red-node-ping
│   └── locales
│   ├── de
│   ├── en-US
│   └── ja
├── node-red-node-random
│   └── locales
│   ├── de
│   ├── en-US
│   └── ja
├── node-red-node-serialport
│   └── locales
│   ├── de
│   ├── en-US
│   └── ja
├── node-red-node-smooth
│   └── icons
├── node-wifiscanner
│   ├── examples
│   ├── lib
│   └── tests
│   └── fixtures
│   └── airport
├── normalize-package-data
│   └── lib
├── normalize-path
├── normalize-url
├── npm-run-path
├── nth-check
├── number-allocator
│   ├── lib
│   ├── test
│   │   └── typescript
│   └── types
│   └── lib
├── oauth-sign
├── object-assign
├── object-inspect
│   ├── example
│   └── test
│   └── browser
├── once
├── onetime
├── on-finished
├── on-headers
├── parent-require
├── parse-json
│   └── vendor
├── parseurl
├── path-exists
├── path-is-absolute
├── path-key
├── path-parse
├── path-type
├── pause-stream
│   └── test
├── p-cancelable
├── performance-now
│   ├── lib
│   ├── src
│   └── test
│   └── scripts
├── p-event
├── p-finally
├── picomatch
│   └── lib
├── pify
├── pinkie
├── pinkie-promise
├── p-limit
├── p-locate
├── p-queue
│   └── dist
├── prepend-http
├── p-retry
├── process-nextick-args
├── promise
│   ├── domains
│   ├── lib
│   ├── setimmediate
│   └── src
├── psl
│   ├── data
│   └── dist
├── p-timeout
├── public-ip
├── pump
├── punycode
├── qs
│   ├── dist
│   ├── lib
│   └── test
├── query-string
├── randombytes
├── range-parser
├── readable-stream
│   └── lib
├── readdirp
├── read-pkg
├── read-pkg-up
├── redent
├── reinterval
│   └── tests
├── repeating
├── request
│   └── lib
├── require-directory
├── resolve
│   ├── bin
│   ├── example
│   ├── lib
│   └── test
│   ├── dotdot
│   │   └── abc
│   ├── module_dir
│   │   ├── xmodules
│   │   │   └── aaa
│   │   ├── ymodules
│   │   │   └── aaa
│   │   └── zmodules
│   │   └── bbb
│   ├── node_path
│   │   ├── x
│   │   │   ├── aaa
│   │   │   └── ccc
│   │   └── y
│   │   ├── bbb
│   │   └── ccc
│   ├── pathfilter
│   │   └── deep_ref
│   ├── precedence
│   │   ├── aaa
│   │   └── bbb
│   ├── resolver
│   │   ├── baz
│   │   ├── browser_field
│   │   ├── dot_main
│   │   ├── dot_slash_main
│   │   ├── false_main
│   │   ├── incorrect_main
│   │   ├── invalid_main
│   │   ├── malformed_package_json
│   │   ├── multirepo
│   │   │   └── packages
│   │   │   ├── package-a
│   │   │   └── package-b
│   │   ├── nested_symlinks
│   │   │   └── mylib
│   │   ├── other_path
│   │   │   └── lib
│   │   ├── quux
│   │   │   └── foo
│   │   ├── same_names
│   │   │   └── foo
│   │   ├── symlinked
│   │   │   ├── _
│   │   │   │   ├── node_modules
│   │   │   │   └── symlink_target
│   │   │   └── package
│   │   └── without_basedir
│   └── shadowed_core
│   └── node_modules
│   └── util
├── responselike
│   └── src
├── retry
│   ├── example
│   └── lib
├── rfdc
│   └── test
├── safe-buffer
├── safer-buffer
├── sax
│   └── lib
├── semver
│   └── bin
├── send
│   └── node_modules
│   ├── debug
│   │   ├── node_modules
│   │   │   └── ms
│   │   └── src
│   └── ms
├── serialize-javascript
├── @serialport
│   ├── binding-mock
│   │   └── dist
│   ├── bindings-cpp
│   │   ├── dist
│   │   ├── node_modules
│   │   │   └── @serialport
│   │   │   ├── parser-delimiter
│   │   │   │   └── dist
│   │   │   └── parser-readline
│   │   │   └── dist
│   │   ├── prebuilds
│   │   │   ├── android-arm
│   │   │   ├── android-arm64
│   │   │   ├── darwin-x64+arm64
│   │   │   ├── linux-arm
│   │   │   ├── linux-arm64
│   │   │   ├── linux-x64
│   │   │   ├── win32-ia32
│   │   │   └── win32-x64
│   │   └── src
│   ├── bindings-interface
│   │   └── dist
│   ├── parser-byte-length
│   │   └── dist
│   ├── parser-cctalk
│   │   └── dist
│   ├── parser-delimiter
│   │   └── dist
│   ├── parser-inter-byte-timeout
│   │   └── dist
│   ├── parser-packet-length
│   │   └── dist
│   ├── parser-readline
│   │   └── dist
│   ├── parser-ready
│   │   └── dist
│   ├── parser-regex
│   │   └── dist
│   ├── parser-slip-encoder
│   │   └── dist
│   ├── parser-spacepacket
│   │   └── dist
│   └── stream
│   └── dist
├── serialport
│   └── dist
├── serve-static
├── set-function-length
├── setprototypeof
│   └── test
├── shebang-command
├── shebang-regex
├── shell-quote
│   ├── example
│   └── test
├── shortid
│   └── lib
│   ├── random
│   └── util
├── should
│   └── lib
│   └── ext
├── should-equal
├── should-format
│   └── tests
│   └── browser
├── should-type
├── side-channel
│   └── test
├── signal-exit
├── simple-statistics
│   ├── dist
│   └── src
├── @sindresorhus
│   └── is
│   └── dist
├── @socket.io
│   └── component-emitter
├── socket.io
│   ├── client-dist
│   └── dist
├── socket.io-adapter
│   └── dist
│   └── contrib
├── socket.io-parser
│   └── build
│   ├── cjs
│   ├── esm
│   └── esm-debug
├── sort-keys
├── spdx-correct
├── spdx-exceptions
├── spdx-expression-parse
├── spdx-license-ids
├── split
│   ├── examples
│   └── test
├── split2
│   └── node_modules
│   ├── readable-stream
│   │   └── lib
│   │   └── internal
│   │   └── streams
│   ├── safe-buffer
│   └── string_decoder
│   └── lib
├── sshpk
│   ├── bin
│   ├── lib
│   │   └── formats
│   └── man
│   └── man1
├── stack-trace
│   └── lib
├── statuses
├── stream
├── stream-combiner
│   └── test
├── stream-shift
├── strict-uri-encode
├── string
│   ├── dist
│   ├── lib
│   └── test
├── string_decoder
├── string-width
├── strip-ansi
├── strip-bom
├── strip-final-newline
├── strip-indent
│   └── node_modules
│   └── get-stdin
├── strip-json-comments
├── suncalc
├── supports-color
├── supports-preserve-symlinks-flag
│   └── test
├── systeminformation
│   └── lib
├── @szmarczak
│   └── http-timer
│   └── source
├── thingzi-logic-timers
│   ├── icons
│   ├── images
│   ├── node_modules
│   │   └── lodash
│   │   └── fp
│   └── schedule
├── through
│   └── test
├── thunkify
│   └── test
├── toidentifier
├── tolerance
├── to-readable-stream
├── to-regex-range
├── tough-cookie
│   └── lib
├── trim-newlines
├── ttb-node-red-counter
├── tunnel-agent
├── tuya-cloud-sdk-nodejs-ex
│   ├── example
│   │   ├── common
│   │   ├── device
│   │   └── user
│   └── tuyacloud
│   ├── client
│   │   ├── automation
│   │   ├── data
│   │   ├── device
│   │   ├── devicecontrol
│   │   ├── devicegroup
│   │   ├── devicemember
│   │   ├── home
│   │   ├── paringtoken
│   │   ├── scene
│   │   ├── time
│   │   ├── token
│   │   ├── user
│   │   └── weather
│   ├── common
│   └── exception
├── tuyapi
│   └── lib
├── tweetnacl
├── typedarray
│   ├── example
│   └── test
│   └── server
├── @types
│   ├── cookie
│   ├── cors
│   ├── node
│   │   ├── assert
│   │   ├── dns
│   │   ├── fs
│   │   ├── readline
│   │   ├── stream
│   │   └── timers
│   └── retry
├── undici-types
├── uri-js
│   └── dist
│   ├── es5
│   └── esnext
│   └── schemes
├── url-parse-lax
├── util-deprecate
├── uuid
│   ├── bin
│   └── lib
├── validate-npm-package-license
├── vary
├── verror
│   └── lib
├── which
│   └── bin
├── workerpool
│   ├── dist
│   └── src
│   └── generated
├── wrap-ansi
├── wrappy
├── ws
│   └── lib
├── xregexp
│   └── tests
├── xtend
├── y18n
│   └── build
│   └── lib
│   └── platform-shims
├── yallist
├── yargs
│   ├── build
│   │   └── lib
│   │   ├── typings
│   │   └── utils
│   ├── helpers
│   ├── lib
│   │   └── platform-shims
│   └── locales
├── yargs-parser
│   └── build
│   └── lib
├── yargs-unparser
│   └── node_modules
│   ├── camelcase
│   ├── decamelize
│   └── is-plain-obj
└── yocto-queue

1370 directories

Thanks,
Dave

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment