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.
- package/autoguess_config.txt +1 -0
- package/guess-js-deps.sh +26 -9
- package/manif_script_cmd2pkg.sed +1 -0
- package/package.json +3 -2
- package/scan_webpack_config.js +53 -0
package/autoguess_config.txt
CHANGED
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
|
|
118
|
-
|
|
119
|
-
|
|
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
|
|
696
|
-
|
|
697
|
-
DEP_TYPE='
|
|
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
|
package/manif_script_cmd2pkg.sed
CHANGED
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{ "name": "guess-js-deps-bash",
|
|
2
|
-
"version": "0.1.
|
|
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
|
-
"
|
|
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;
|