guess-js-deps-bash 0.1.62 → 0.1.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -24,6 +24,7 @@ local AUTOGUESS_BUILD_UTIL_CMDS=(
24
24
  libdir-binlinks-cfg-linker-pmb
25
25
  npm-ci-utils-pmb
26
26
  uglifyjs
27
+ webpack
27
28
  yamllint
28
29
  yaml-lint-all-recursive
29
30
 
package/guess-js-deps.sh CHANGED
@@ -106,7 +106,7 @@ function init_resolve_cache () {
106
106
 
107
107
 
108
108
  function init_resolve_cache__prep () {
109
- init_resolve_cache__webpack_cfg || return $?
109
+ init_resolve_cache__webpack_cfg eval || return $?
110
110
  init_resolve_cache__forced_custom || return $?
111
111
  }
112
112
 
@@ -114,9 +114,17 @@ function init_resolve_cache__prep () {
114
114
  function init_resolve_cache__webpack_cfg () {
115
115
  local WPCFG='./webpack.config.js'
116
116
  [ -f "$WPCFG" ] || return 0
117
- local VAL="$(nodejs -p "Object.keys(require('$WPCFG'
118
- ).resolve.alias).join('\n')" 2>/dev/null)"
119
- [ -z "$VAL" ] || RESOLVE_CACHE['?packer/alias_pkgnames']+="$VAL"$'\n'
117
+ local SCAN="$SELFPATH"/scan_webpack_config.js
118
+ local LEARN='
119
+ const scan = require(process.env.SCAN);
120
+ const wpcfg = require(process.env.WPCFG);
121
+ JSON.stringify(scan(wpcfg), null, 2)
122
+ '
123
+ LEARN="$(WPCFG="$WPCFG" SCAN="$SCAN" nodejs -e "$LEARN")" || return $?$(
124
+ echo "E: $FUNCNAME: Failed to scan $WPCFG" >&2)
125
+ local NEXT="${1:-echo}"; shift
126
+ "$NEXT" "$@" "$LEARN" || return $?$(
127
+ echo "E: $FUNCNAME: Failed to '$NEXT' the scan report" >&2)
120
128
  }
121
129
 
122
130
 
@@ -165,6 +173,8 @@ function scan_all_scannable_files_in_project () {
165
173
  progress "found ${#IMPORTS[@]}"
166
174
 
167
175
  progress 'I: Searching for require()s/imports: '
176
+ eval "$(init_resolve_cache)"
177
+ find_webpack_config_cached_deps
168
178
  find_imports_in_files "${IMPORTS[@]}"
169
179
  find_manif_script_deps
170
180
  find_manif_eslint_deps
@@ -172,6 +182,12 @@ function scan_all_scannable_files_in_project () {
172
182
  }
173
183
 
174
184
 
185
+ function find_webpack_config_cached_deps () {
186
+ local KEY='bundler://webpack/config/needs'
187
+ <<<"${RESOLVE_CACHE["?$KEY"]}" grep -oPe '\S+' | sed -re 's~$~\t'"$KEY~"
188
+ }
189
+
190
+
175
191
  function find_imports_in_project () {
176
192
  local THEN=( "$@" )
177
193
  local CWD_PKG_NAME="$(guess_cwd_pkg_name)"
@@ -238,6 +254,7 @@ function find_manif_eslint_deps () {
238
254
 
239
255
  local ECNP='eslint-config-nodejs-pmb'
240
256
  case "$BUF" in
257
+ *"¶ eslint-config-jslint-compat-pmb "* | \
241
258
  *"¶ $ECNP "* )
242
259
  local PEER_DEPS="$ECNP/test/expectedPeerDependencies.js"
243
260
  PEER_DEPS="require('$PEER_DEPS').join('\n')"
@@ -567,7 +584,6 @@ function find_imports_in_files () {
567
584
  [ "$#" == 0 ] && return 0
568
585
  eval "$(init_resolve_cache)"
569
586
  local SBC_RGX='($bogus^'"$(printf '|%s' "${AUTOGUESS_SHEBANG_CMDS[@]}"))"
570
-
571
587
  LANG=C grep -PHone '#!.*$|^(\xEF\xBB\xBF|)\s*'$(
572
588
  )'(import|\W*from)\s.*$|require\([^()]+\)' -- "$@" \
573
589
  | tr "'" '"' | LANG=C sed -rf <(echo '
@@ -692,9 +708,9 @@ function guess_one_dep_type () {
692
708
  esac
693
709
 
694
710
  if [ -z "$DEP_VER" ]; then
695
- case $'\n'"${RESOLVE_CACHE['?packer/alias_pkgnames']}"$'\n' in
696
- *$'\n'"${REQ_MOD%%/*}"$'\n'* )
697
- DEP_TYPE='packer-alias'
711
+ case " ${RESOLVE_CACHE['?bundler://alias_pkgnames']} " in
712
+ *" ${REQ_MOD%%/*} "* )
713
+ DEP_TYPE='bundler-alias'
698
714
  DEP_VER='*';;
699
715
  esac
700
716
  fi
@@ -751,9 +767,10 @@ function guess_one_dep_type () {
751
767
  esac
752
768
 
753
769
  case "$REQ_NORM_FEXT" in
770
+ bundler://* | \
771
+ manif://lint | \
754
772
  manif://scripts/*lint* | \
755
773
  manif://scripts/*test* | \
756
- manif://lint | \
757
774
  . ) DEP_TYPE=devDep;;
758
775
  */* ) ;; # files in subdirs are handled above
759
776
  # below: top-level files
@@ -4,3 +4,4 @@
4
4
  s~^(demo-util-160404)-test-demos(\t)~lib-\1\2~
5
5
  s~^(uglify)(js\t)~\1-\2~
6
6
  s~^(yaml)(lint\t)~\1-\2~
7
+ s~^(webpack)~\1-cli~
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  { "name": "guess-js-deps-bash",
2
- "version": "0.1.62",
2
+ "version": "0.1.63",
3
3
  "description": "A bash attempt at npm-forgot: Guess JavaScript require() dependencies, detect their versions, compare with package.json.",
4
4
 
5
5
  "keywords": [
@@ -28,10 +28,11 @@
28
28
  "bin": { "guess-js-deps": "guess-js-deps.sh" },
29
29
  "scripts": { "test": "nodejs test/all.js" },
30
30
  "directories": { "test": "test" },
31
+ "eslintConfig": { "extends": "nodejs-pmb" },
31
32
 
32
33
  "dependencies": {},
33
34
  "devDependencies": {},
34
35
 
35
36
 
36
- "npm vs. BOM = Unexpected token": "-*- coding: UTF-8 -*-"
37
+ "engines": { "npm": ">=7.0.0", "node": ">=16.0.0" }
37
38
  }
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ // const same = require('assert').deepStrictEqual;
4
+
5
+ function orf(x) { return x || false; }
6
+ function shellQuoteNoApos(s) { return "'" + s.replace(/'/g, '') + "'"; }
7
+
8
+ function setSlotNoApos(k, v, op) {
9
+ console.log("RESOLVE_CACHE['" + k + "']" + (op || '') + '='
10
+ + shellQuoteNoApos(v));
11
+ }
12
+
13
+
14
+ const EX = function scanWebpackConfig(wpCfg) {
15
+ const scan = {
16
+ wpCfg,
17
+ needPkgs: new Set(EX.alwaysNeededPkgs),
18
+ };
19
+ EX.aliases(scan);
20
+ EX.resourceLoaders(scan);
21
+
22
+ setSlotNoApos('?bundler://webpack/config/needs',
23
+ Array.from(scan.needPkgs.values()).sort().join(' '));
24
+ };
25
+
26
+
27
+ Object.assign(EX, {
28
+
29
+ alwaysNeededPkgs: [
30
+ 'browserslist',
31
+ ],
32
+
33
+
34
+ aliases(scan) {
35
+ const alNames = Object.keys(orf(orf(scan.wpCfg.resolve).alias)).join(' ');
36
+ if (!alNames) { return; }
37
+ setSlotNoApos('?bundler://alias_pkgnames', (' ' + alNames + ' '), '+');
38
+ },
39
+
40
+
41
+ resourceLoaders(scan) {
42
+ [].concat(orf(scan.wpCfg.module).rules).forEach(function foundRule(rule) {
43
+ if (!rule) { return; }
44
+ const ldr = (rule.loader || orf(rule.use).loader);
45
+ if (!ldr) { return; }
46
+ scan.needPkgs.add(ldr);
47
+ });
48
+ },
49
+
50
+
51
+ });
52
+
53
+ module.exports = EX;