fix(providence): pin oxc-parser; fix default edge cases

This commit is contained in:
Thijs Louisse 2025-02-03 09:59:13 +01:00 committed by Thijs Louisse
parent 4210edf798
commit 103df25306
14 changed files with 502 additions and 410 deletions

View file

@ -0,0 +1,6 @@
---
'providence-analytics': patch
---
- pin oxc-parser for stability/predictability
- fix export default edge cases in `find-exports`

753
package-lock.json generated
View file

@ -4237,6 +4237,119 @@
"lit-html": "^2.0.0 || ^3.0.0"
}
},
"node_modules/@oxc-parser/binding-darwin-arm64": {
"version": "0.48.2",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.48.2.tgz",
"integrity": "sha512-3JY3K6AXq6QyloxLJkK9s7VFcrGU7Of8tG0bf9lIFzeNzmJDQAGUMYUkfUzDubx9prlNLCbxsgBTww5PjKgQeQ==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@oxc-parser/binding-darwin-x64": {
"version": "0.48.2",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.48.2.tgz",
"integrity": "sha512-v1MQnfx2iwoy1eMJYHRwHsp8FA9HK4xa+oqx6XEhxft6yVwrt+gVIBAU6jUAk783OGkmvIbZbw8uVosg+YYOGA==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@oxc-parser/binding-linux-arm64-gnu": {
"version": "0.48.2",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.48.2.tgz",
"integrity": "sha512-g9FUS++WwVJmrsZHS3vi7mlLQYHKL/tbX7H8ERlQhLp01JzD3zyyHzieVqeClV7B+nQSctyurpwmYuOD4grZPw==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@oxc-parser/binding-linux-arm64-musl": {
"version": "0.48.2",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.48.2.tgz",
"integrity": "sha512-r5S+2IRW8QCL8eSv1gzp/nMTt1WbS04etm5mvM/55SH2G6bXJ8MNfcj3KATjmD/JvfNvsDVB80VlwI6HUNX+WQ==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@oxc-parser/binding-linux-x64-gnu": {
"version": "0.48.2",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.48.2.tgz",
"integrity": "sha512-f10drS9TBekdHh37TSWYSGLgKBAofC7zuRjnTTuH1sXWTxRzmshs8p4WNVYcqImfgix48o3H0uwIFNm/UsSkfA==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@oxc-parser/binding-linux-x64-musl": {
"version": "0.48.2",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.48.2.tgz",
"integrity": "sha512-rUAOgodK1wW++RO2xBjvXJtALVyKbXDkaiG61Ob5+f9M4gfD6kfci2cqOT4dD5z2+zxB4dC71DaaOdwM20Yx9Q==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@oxc-parser/binding-win32-arm64-msvc": {
"version": "0.48.2",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.48.2.tgz",
"integrity": "sha512-xHMx56Xd0gXp3nwrIJ8Z6Hny2Mvj5jSAUUkd8cYakItA7LNGWYl3EeFKErRXh/Qyd9uhuB4BqSr0CjiMU40vsg==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@oxc-parser/binding-win32-x64-msvc": {
"version": "0.48.2",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.48.2.tgz",
"integrity": "sha512-lOszFeGRNeiShsS2GJBzFBrMiDFhxCi0ddBc3tewtmjXsrb84dNuzM8+JgG6x9WQMIcLB68YZGjtOL+63cC/EQ==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@oxc-project/types": {
"version": "0.48.2",
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.48.2.tgz",
"integrity": "sha512-i2+xs0EKA7Ich5GP4rNyQnO+1Oio6XqzmQQSSVlNxyCPRUvp4V0ovY/e28K4F1vwakc51B251iSKbtHw03sZOw==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/Boshen"
}
},
"node_modules/@oxc-resolver/binding-darwin-arm64": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-1.12.0.tgz",
@ -5783,215 +5896,6 @@
"sourcemap-codec": "^1.4.8"
}
},
"node_modules/@swc/core": {
"version": "1.7.36",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.36.tgz",
"integrity": "sha512-bu7ymMX+LCJOSSrKank25Jaq66ymLVA9fOUuy4ck3/6rbXdLw+pIJPnIDKQ9uNcxww8KDxOuJk9Ui9pqR+aGFw==",
"dev": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
"@swc/counter": "^0.1.3",
"@swc/types": "^0.1.13"
},
"engines": {
"node": ">=10"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/swc"
},
"optionalDependencies": {
"@swc/core-darwin-arm64": "1.7.36",
"@swc/core-darwin-x64": "1.7.36",
"@swc/core-linux-arm-gnueabihf": "1.7.36",
"@swc/core-linux-arm64-gnu": "1.7.36",
"@swc/core-linux-arm64-musl": "1.7.36",
"@swc/core-linux-x64-gnu": "1.7.36",
"@swc/core-linux-x64-musl": "1.7.36",
"@swc/core-win32-arm64-msvc": "1.7.36",
"@swc/core-win32-ia32-msvc": "1.7.36",
"@swc/core-win32-x64-msvc": "1.7.36"
},
"peerDependencies": {
"@swc/helpers": "*"
},
"peerDependenciesMeta": {
"@swc/helpers": {
"optional": true
}
}
},
"node_modules/@swc/core-darwin-arm64": {
"version": "1.7.36",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.36.tgz",
"integrity": "sha512-8vDczXzCgv3ceTPhEivlpGprN44YlrCK1nbfU9g2TrhV/Aiqi09W/eM5zLesdoM1Z3mJl492gc/8nlTkpDdusw==",
"cpu": [
"arm64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-darwin-x64": {
"version": "1.7.36",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.36.tgz",
"integrity": "sha512-Pa2Gao7+Wf5m3SsK4abKRtd48AtoUnJInvaC3d077swBfgZjbjUbQvcpdc2dOeQtWwo49rFqUZJonMsL0jnPgQ==",
"cpu": [
"x64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-arm-gnueabihf": {
"version": "1.7.36",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.36.tgz",
"integrity": "sha512-3YsMWd7V+WZEjbfBnLkkz/olcRBa8nyoK0iIOnNARJBMcYaJxjkJSMZpmSojCnIVwvjA1N83CPAbUL+W+fCnHg==",
"cpu": [
"arm"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-arm64-gnu": {
"version": "1.7.36",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.36.tgz",
"integrity": "sha512-lqM3aBB7kJazJYOwHeA5OGNLqXoQPZ/76b3dV+XcjN1GhD0CcXz6mW5PRYVin6OSN1eKrKBKJjtDA1mqADDEvw==",
"cpu": [
"arm64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-arm64-musl": {
"version": "1.7.36",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.36.tgz",
"integrity": "sha512-bqei2YDzvUfG0pth5W2xJaj0eG4XWYk0d/NJ75vBX6bkIzK6dC8iuKQ41jOfUWonnrAs7rTDDJW0sTn/evvRdw==",
"cpu": [
"arm64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-x64-gnu": {
"version": "1.7.36",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.36.tgz",
"integrity": "sha512-03maXTUyaBjeCxlDltmdzHje1ryQt1C4OWmmNgSSRXjLb+GNnAenwOJMSrcvHP/aNClD2pwsFCnYKDGy+sYE6w==",
"cpu": [
"x64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-x64-musl": {
"version": "1.7.36",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.36.tgz",
"integrity": "sha512-XXysqLkvjtQnXm1zHqLhy00UYPv/gk5OtwR732X+piNisnEbcJBqI8Qp9O7YvLWllRcoP8IMBGDWLGdGLSpViA==",
"cpu": [
"x64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-win32-arm64-msvc": {
"version": "1.7.36",
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.36.tgz",
"integrity": "sha512-k7+dmb13a/zPw+E4XYfPmLZFWJgcOcBRKIjYl9nQErtYsgsg3Ji6TBbsvJVETy23lNHyewZ17V5Vq6NzaG0hzg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-win32-ia32-msvc": {
"version": "1.7.36",
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.36.tgz",
"integrity": "sha512-ridD3ay6YM2PEYHZXXFN+edYEv0FOynaqOBP+NSnGNHA35azItIjoIe+KNi4WltGtAjpKCHSpjGCNfna12wdYQ==",
"cpu": [
"ia32"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-win32-x64-msvc": {
"version": "1.7.36",
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.36.tgz",
"integrity": "sha512-j1z2Z1Ln9d0E3dHsPkC1K9XDh0ojhRPwV+GfRTu4D61PE+aYhYLvbJC6xPvL4/204QrStRS7eDu3m+BcDp3rgQ==",
"cpu": [
"x64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/counter": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
@ -5999,16 +5903,6 @@
"dev": true,
"license": "Apache-2.0"
},
"node_modules/@swc/types": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.13.tgz",
"integrity": "sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@swc/counter": "^0.1.3"
}
},
"node_modules/@szmarczak/http-timer": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz",
@ -20653,6 +20547,28 @@
"dev": true,
"license": "MIT"
},
"node_modules/oxc-parser": {
"version": "0.48.2",
"resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.48.2.tgz",
"integrity": "sha512-UlCh4q1FrPNlc0WzPA5cw0SRnGprpn8o4aRU05ceeqTfbT2KoRus9X1bkHGngSP6n7IXUHUPJ6hs3mJW1GBu/w==",
"license": "MIT",
"dependencies": {
"@oxc-project/types": "^0.48.2"
},
"funding": {
"url": "https://github.com/sponsors/Boshen"
},
"optionalDependencies": {
"@oxc-parser/binding-darwin-arm64": "0.48.2",
"@oxc-parser/binding-darwin-x64": "0.48.2",
"@oxc-parser/binding-linux-arm64-gnu": "0.48.2",
"@oxc-parser/binding-linux-arm64-musl": "0.48.2",
"@oxc-parser/binding-linux-x64-gnu": "0.48.2",
"@oxc-parser/binding-linux-x64-musl": "0.48.2",
"@oxc-parser/binding-win32-arm64-msvc": "0.48.2",
"@oxc-parser/binding-win32-x64-msvc": "0.48.2"
}
},
"node_modules/oxc-resolver": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/oxc-resolver/-/oxc-resolver-1.12.0.tgz",
@ -28335,7 +28251,7 @@
"dependencies": {
"@rollup/plugin-node-resolve": "^16.0.0",
"commander": "^2.20.3",
"oxc-parser": "^0.48.1",
"oxc-parser": "0.48.2",
"parse5": "^7.2.1",
"semver": "^7.7.0"
},
@ -28343,14 +28259,14 @@
"providence": "src/cli/index.js"
},
"devDependencies": {
"@babel/parser": "^7.26.3",
"@babel/parser": "^7.26.7",
"@babel/plugin-syntax-import-assertions": "^7.26.0",
"@babel/traverse": "^7.26.3",
"@swc/core": "^1.7.36",
"@babel/traverse": "^7.26.7",
"@swc/core": "^1.10.12",
"@types/inquirer": "^9.0.7",
"@types/mocha": "^10.0.10",
"@web/dev-server": "^0.4.6",
"@web/dev-server-core": "^0.7.4",
"@web/dev-server-core": "^0.7.5",
"globby": "^14.0.2",
"lit-element": "^4.1.1",
"mock-fs": "^5.4.1"
@ -28379,13 +28295,14 @@
}
},
"packages-node/providence-analytics/node_modules/@babel/generator": {
"version": "7.26.3",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz",
"integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==",
"version": "7.26.5",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz",
"integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.26.3",
"@babel/types": "^7.26.3",
"@babel/parser": "^7.26.5",
"@babel/types": "^7.26.5",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^3.0.2"
@ -28422,12 +28339,13 @@
}
},
"packages-node/providence-analytics/node_modules/@babel/parser": {
"version": "7.26.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz",
"integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==",
"version": "7.26.7",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz",
"integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.26.3"
"@babel/types": "^7.26.7"
},
"bin": {
"parser": "bin/babel-parser.js"
@ -28466,16 +28384,17 @@
}
},
"packages-node/providence-analytics/node_modules/@babel/traverse": {
"version": "7.26.4",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz",
"integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==",
"version": "7.26.7",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz",
"integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.26.2",
"@babel/generator": "^7.26.3",
"@babel/parser": "^7.26.3",
"@babel/generator": "^7.26.5",
"@babel/parser": "^7.26.7",
"@babel/template": "^7.25.9",
"@babel/types": "^7.26.3",
"@babel/types": "^7.26.7",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@ -28484,10 +28403,11 @@
}
},
"packages-node/providence-analytics/node_modules/@babel/types": {
"version": "7.26.3",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz",
"integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
"version": "7.26.7",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz",
"integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9"
@ -28496,110 +28416,6 @@
"node": ">=6.9.0"
}
},
"packages-node/providence-analytics/node_modules/@oxc-parser/binding-darwin-arm64": {
"version": "0.34.0",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.34.0.tgz",
"integrity": "sha512-1G99sWa40ylI1bX8VxUnvl3eEnT7C045t6HJ5UkYg+B6XoJouUgo/wrhFn53+kRBm9gT65YHBGs4gCLpk8b8dw==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"packages-node/providence-analytics/node_modules/@oxc-parser/binding-darwin-x64": {
"version": "0.34.0",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.34.0.tgz",
"integrity": "sha512-7+EcaPjG7PlnM/Oj2Cpf1tYFCXmABlO7P9uYNa/aiNVHv4oZklL2q1HT3fSsU/7nNa09IDKsl8yvQHhwfkNbWw==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"packages-node/providence-analytics/node_modules/@oxc-parser/binding-linux-arm64-gnu": {
"version": "0.34.0",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.34.0.tgz",
"integrity": "sha512-uiQfQESB5WLxVUwWe+/wiaujoT0we5tDm7fz3EwpgqKDsqA3Y/IobLsymIPp5/dfOmOUElB9dMUZUaDTrQeWtA==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"packages-node/providence-analytics/node_modules/@oxc-parser/binding-linux-arm64-musl": {
"version": "0.34.0",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.34.0.tgz",
"integrity": "sha512-08ChBq0X4U60B6ervmNDdSIjxleeCLrztbhul/cFFRcqUNj10F7ZLgz7/rucfxD80hE8Cf2PsbVK5e89qY7Y/Q==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"packages-node/providence-analytics/node_modules/@oxc-parser/binding-linux-x64-gnu": {
"version": "0.34.0",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.34.0.tgz",
"integrity": "sha512-OVXEcQu9/FxUeSK1RGgvBzHNKQYjiYL536GahOzuptCyYjYUhrz+eopu7P0wIB/1irrMv33gCNt211inVnWaZQ==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"packages-node/providence-analytics/node_modules/@oxc-parser/binding-linux-x64-musl": {
"version": "0.34.0",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.34.0.tgz",
"integrity": "sha512-/9WFKdTDKVRs2JJh4oxF1gEbnlJcZtoIAH6yToTqftghal7NFLoHBGdp1Jo8b2m0Vn4L3yiDE/sAbrB0XgIAsw==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"packages-node/providence-analytics/node_modules/@oxc-parser/binding-win32-arm64-msvc": {
"version": "0.34.0",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.34.0.tgz",
"integrity": "sha512-eKO8BmgDSWl47SoKBtxj+XQjvn8SqXbpZ/NuZbcYkZVzpwWui4Ycqo76GRLrEhp+ykN3Nj9gl29nka3oenrk7A==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"packages-node/providence-analytics/node_modules/@oxc-parser/binding-win32-x64-msvc": {
"version": "0.34.0",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.34.0.tgz",
"integrity": "sha512-7KWqCm7DmkFVd8MRMp14/HjxpYgWaj9k2E2pAQGOnExPCuzzF2Wji0qHcNzuMQMjTDKswjRkAOg6gk5b45JQRQ==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"packages-node/providence-analytics/node_modules/@rollup/plugin-node-resolve": {
"version": "16.0.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz",
@ -28624,6 +28440,225 @@
}
}
},
"packages-node/providence-analytics/node_modules/@swc/core": {
"version": "1.10.12",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.10.12.tgz",
"integrity": "sha512-+iUL0PYpPm6N9AdV1wvafakvCqFegQus1aoEDxgFsv3/uNVNIyRaupf/v/Zkp5hbep2EzhtoJR0aiJIzDbXWHg==",
"dev": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
"@swc/counter": "^0.1.3",
"@swc/types": "^0.1.17"
},
"engines": {
"node": ">=10"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/swc"
},
"optionalDependencies": {
"@swc/core-darwin-arm64": "1.10.12",
"@swc/core-darwin-x64": "1.10.12",
"@swc/core-linux-arm-gnueabihf": "1.10.12",
"@swc/core-linux-arm64-gnu": "1.10.12",
"@swc/core-linux-arm64-musl": "1.10.12",
"@swc/core-linux-x64-gnu": "1.10.12",
"@swc/core-linux-x64-musl": "1.10.12",
"@swc/core-win32-arm64-msvc": "1.10.12",
"@swc/core-win32-ia32-msvc": "1.10.12",
"@swc/core-win32-x64-msvc": "1.10.12"
},
"peerDependencies": {
"@swc/helpers": "*"
},
"peerDependenciesMeta": {
"@swc/helpers": {
"optional": true
}
}
},
"packages-node/providence-analytics/node_modules/@swc/core-darwin-arm64": {
"version": "1.10.12",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.12.tgz",
"integrity": "sha512-pOANQegUTAriW7jq3SSMZGM5l89yLVMs48R0F2UG6UZsH04SiViCnDctOGlA/Sa++25C+rL9MGMYM1jDLylBbg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=10"
}
},
"packages-node/providence-analytics/node_modules/@swc/core-darwin-x64": {
"version": "1.10.12",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.10.12.tgz",
"integrity": "sha512-m4kbpIDDsN1FrwfNQMU+FTrss356xsXvatLbearwR+V0lqOkjLBP0VmRvQfHEg+uy13VPyrT9gj4HLoztlci7w==",
"cpu": [
"x64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=10"
}
},
"packages-node/providence-analytics/node_modules/@swc/core-linux-arm-gnueabihf": {
"version": "1.10.12",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.12.tgz",
"integrity": "sha512-OY9LcupgqEu8zVK+rJPes6LDJJwPDmwaShU96beTaxX2K6VrXbpwm5WbPS/8FfQTsmpnuA7dCcMPUKhNgmzTrQ==",
"cpu": [
"arm"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"packages-node/providence-analytics/node_modules/@swc/core-linux-arm64-gnu": {
"version": "1.10.12",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.12.tgz",
"integrity": "sha512-nJD587rO0N4y4VZszz3xzVr7JIiCzSMhEMWnPjuh+xmPxDBz0Qccpr8xCr1cSxpl1uY7ERkqAGlKr6CwoV5kVg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"packages-node/providence-analytics/node_modules/@swc/core-linux-arm64-musl": {
"version": "1.10.12",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.12.tgz",
"integrity": "sha512-oqhSmV+XauSf0C//MoQnVErNUB/5OzmSiUzuazyLsD5pwqKNN+leC3JtRQ/QVzaCpr65jv9bKexT9+I2Tt3xDw==",
"cpu": [
"arm64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"packages-node/providence-analytics/node_modules/@swc/core-linux-x64-gnu": {
"version": "1.10.12",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.12.tgz",
"integrity": "sha512-XldSIHyjD7m1Gh+/8rxV3Ok711ENLI420CU2EGEqSe3VSGZ7pHJvJn9ZFbYpWhsLxPqBYMFjp3Qw+J6OXCPXCA==",
"cpu": [
"x64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"packages-node/providence-analytics/node_modules/@swc/core-linux-x64-musl": {
"version": "1.10.12",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.12.tgz",
"integrity": "sha512-wvPXzJxzPgTqhyp1UskOx1hRTtdWxlyFD1cGWOxgLsMik0V9xKRgqKnMPv16Nk7L9xl6quQ6DuUHj9ID7L3oVw==",
"cpu": [
"x64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"packages-node/providence-analytics/node_modules/@swc/core-win32-arm64-msvc": {
"version": "1.10.12",
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.12.tgz",
"integrity": "sha512-TUYzWuu1O7uyIcRfxdm6Wh1u+gNnrW5M1DUgDOGZLsyQzgc2Zjwfh2llLhuAIilvCVg5QiGbJlpibRYJ/8QGsg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=10"
}
},
"packages-node/providence-analytics/node_modules/@swc/core-win32-ia32-msvc": {
"version": "1.10.12",
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.12.tgz",
"integrity": "sha512-4Qrw+0Xt+Fe2rz4OJ/dEPMeUf/rtuFWWAj/e0vL7J5laUHirzxawLRE5DCJLQTarOiYR6mWnmadt9o3EKzV6Xg==",
"cpu": [
"ia32"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=10"
}
},
"packages-node/providence-analytics/node_modules/@swc/core-win32-x64-msvc": {
"version": "1.10.12",
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.12.tgz",
"integrity": "sha512-YiloZXLW7rUxJpALwHXaGjVaAEn+ChoblG7/3esque+Y7QCyheoBUJp2DVM1EeVA43jBfZ8tvYF0liWd9Tpz1A==",
"cpu": [
"x64"
],
"dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=10"
}
},
"packages-node/providence-analytics/node_modules/@swc/types": {
"version": "0.1.17",
"resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz",
"integrity": "sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@swc/counter": "^0.1.3"
}
},
"packages-node/providence-analytics/node_modules/@types/mocha": {
"version": "10.0.10",
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz",
@ -28631,10 +28666,11 @@
"dev": true
},
"packages-node/providence-analytics/node_modules/@web/dev-server-core": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.7.4.tgz",
"integrity": "sha512-nHSNrJ1J9GjmSceKNHpWRMjvpfE2NTV9EYUffPIr7j0sIV59gK7NI/4+9slotJ/ODXw0+e1gSeJshTOhjjVNxQ==",
"version": "0.7.5",
"resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.7.5.tgz",
"integrity": "sha512-Da65zsiN6iZPMRuj4Oa6YPwvsmZmo5gtPWhW2lx3GTUf5CAEapjVpZVlUXnKPL7M7zRuk72jSsIl8lo+XpTCtw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/koa": "^2.11.6",
"@types/ws": "^7.4.0",
@ -28704,25 +28740,6 @@
"node": ">=12.0.0"
}
},
"packages-node/providence-analytics/node_modules/oxc-parser": {
"version": "0.34.0",
"resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.34.0.tgz",
"integrity": "sha512-k9PJKDD4+U3VzLic2Pup+N4YNIlBhzUkEWZP6yVkXtwEVZn1gIp1ixAt1e9+9EagzzAiY/Kx6EPEsZxNb3d1fg==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/Boshen"
},
"optionalDependencies": {
"@oxc-parser/binding-darwin-arm64": "0.34.0",
"@oxc-parser/binding-darwin-x64": "0.34.0",
"@oxc-parser/binding-linux-arm64-gnu": "0.34.0",
"@oxc-parser/binding-linux-arm64-musl": "0.34.0",
"@oxc-parser/binding-linux-x64-gnu": "0.34.0",
"@oxc-parser/binding-linux-x64-musl": "0.34.0",
"@oxc-parser/binding-win32-arm64-msvc": "0.34.0",
"@oxc-parser/binding-win32-x64-msvc": "0.34.0"
}
},
"packages-node/providence-analytics/node_modules/parse5": {
"version": "7.2.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",

View file

@ -39,7 +39,7 @@
"dependencies": {
"@rollup/plugin-node-resolve": "^16.0.0",
"commander": "^2.20.3",
"oxc-parser": "^0.48.1",
"oxc-parser": "0.48.2",
"parse5": "^7.2.1",
"semver": "^7.7.0"
},
@ -49,14 +49,14 @@
"@swc/core": "^1.7.36"
},
"devDependencies": {
"@babel/parser": "^7.26.3",
"@babel/parser": "^7.26.7",
"@babel/plugin-syntax-import-assertions": "^7.26.0",
"@babel/traverse": "^7.26.3",
"@swc/core": "^1.7.36",
"@babel/traverse": "^7.26.7",
"@swc/core": "^1.10.12",
"@types/inquirer": "^9.0.7",
"@types/mocha": "^10.0.10",
"@web/dev-server": "^0.4.6",
"@web/dev-server-core": "^0.7.4",
"@web/dev-server-core": "^0.7.5",
"globby": "^14.0.2",
"lit-element": "^4.1.1",
"mock-fs": "^5.4.1"
@ -77,5 +77,13 @@
},
"publishConfig": {
"access": "public"
},
"comments": {
"dependencies": {
"@rollup/plugin-node-resolve": "Move to devDep (for mocking require.resolve) later and use require.resolve for prod later",
"commander": "Can't be easily moved to latest. Move to parseArgs from node:util later",
"oxc-parser": "Pin it as long as the api is unstable, to prevent unpredictable behavior",
"semver": "Only needed for one check. Create internal util later"
}
}
}

View file

@ -74,7 +74,10 @@ function findCustomElementsPerAstFile(oxcAst) {
let tagName;
let constructorIdentifier;
if (astPath.node.arguments[0].type === 'StringLiteral') {
if (
astPath.node.arguments[0].type === 'StringLiteral' ||
astPath.node.arguments[0].type === 'Literal'
) {
tagName = astPath.node.arguments[0].value;
} else {
// No Literal found. For now, we only mark them as '[variable]'

View file

@ -195,6 +195,7 @@ function findExportsPerAstFile(oxcAst, { skipFileImports }) {
const exportSpecifiers = ['[default]'];
const { node } = astPath;
let source;
// Is it an inline declaration like "export default class X {};" ?
if (
node.decl?.type === 'Identifier' ||

View file

@ -17,9 +17,13 @@ import { Analyzer } from '../core/Analyzer.js';
* @typedef {import("@swc/core").Node} SwcNode
*/
// const exportedNames = ['exported'];
// const importedNames = ['orig', 'imported', 'local'];
// const valueNames = ['name', 'value'];
/**
* @param {SwcNode|undefined} node
* @returns {boolean}
*/
function isLiteral(node) {
return node?.type === 'Literal' || node?.type === 'StringLiteral';
}
/**
* Intends to work for oxc, swc, and babel asts
@ -69,6 +73,8 @@ function getImportOrReexportsSpecifiers(node) {
function findImportsPerAstFile(oxcAst) {
LogService.debug(`Analyzer "find-imports": started findImportsPerAstFile method`);
// TODO: possibly make traversal quicker by using import/export data from oxcAst.module
// https://github.com/babel/babel/blob/672a58660f0b15691c44582f1f3fdcdac0fa0d2f/packages/babel-core/src/transformation/index.ts#L110
// Visit AST...
/** @type {Partial<FindImportsAnalyzerEntry>[]} */
@ -125,8 +131,7 @@ function findImportsPerAstFile(oxcAst) {
// TODO: also check for ['file']
const importSpecifiers = ['[default]'];
const dynamicImportExpression = node.arguments[0].expression;
const source =
dynamicImportExpression.type === 'StringLiteral'
const source = isLiteral(dynamicImportExpression)
? dynamicImportExpression.value
: '[variable]';
transformedFile.push({ importSpecifiers, source });
@ -140,8 +145,7 @@ function findImportsPerAstFile(oxcAst) {
// TODO: also check for ['file']
const importSpecifiers = ['[default]'];
const dynamicImportExpression = node.expression;
const source =
dynamicImportExpression.source?.type === 'StringLiteral'
const source = isLiteral(dynamicImportExpression.source)
? dynamicImportExpression.source.value
: '[variable]';
transformedFile.push({ importSpecifiers, source });

View file

@ -74,16 +74,19 @@ export class AstService {
/**
* Compiles an array of file paths using swc.
* @param {string} code
* @param {ParserOptions} parserOptions
* @param {object} opts
* @param {string} [opts.filePath]
* @param {ParserOptions} [opts.parserOptions]
* @returns {Promise<OxcParseResult>}
*/
static async _getOxcAst(code, parserOptions = {}) {
static async _getOxcAst(code, { filePath = '', parserOptions = {} } = {}) {
if (!oxcParser) {
// eslint-disable-next-line import/no-extraneous-dependencies
oxcParser = (await import('oxc-parser')).default;
}
return oxcParser.parseSync(code, parserOptions).program;
// we can only send stringified data with napi
return oxcParser.parseSync(filePath, code, parserOptions);
}
/**
@ -126,7 +129,7 @@ export class AstService {
return await this._getSwcAst(code);
}
if (astType === 'oxc') {
return await this._getOxcAst(code);
return await this._getOxcAst(code, { filePath });
}
throw new Error(`astType "${astType}" not supported.`);
} catch (e) {

View file

@ -30,6 +30,16 @@ export function getFilePathOrExternalSource({ rootPath, localPath }) {
);
}
/**
* Checks whether we are a Declaration (like class X {}) or Declarator (like const x = 88)
* @param {SwcNode} node
* @returns {boolean}
*/
function containsIdentifier(node) {
// @ts-expect-error
return node.id || node.identifier;
}
/**
* Assume we had:
* ```js
@ -47,25 +57,33 @@ export function getFilePathOrExternalSource({ rootPath, localPath }) {
*/
export function getReferencedDeclaration({ referencedIdentifierName, globalScopeBindings }) {
// We go from referencedIdentifierName 'y' to binding (VariableDeclarator path) 'y';
const refDeclaratorBinding = globalScopeBindings[referencedIdentifierName];
const identifierBinding = /** @type {SwcBinding} */ (
globalScopeBindings[referencedIdentifierName]
);
// We provided a referencedIdentifierName that is not in the globalScopeBindings
if (!refDeclaratorBinding) {
return null;
if (!identifierBinding) return null;
const { type } = identifierBinding.path.node;
const isNonRefDeclaration = type.endsWith('Declaration');
if (isNonRefDeclaration && !containsIdentifier(identifierBinding.path.node)) {
throw new Error('Make sure entries added to globalScopeBindings contains an identifier');
}
if (['ImportSpecifier', 'ImportDefaultSpecifier'].includes(refDeclaratorBinding.path.node.type)) {
return refDeclaratorBinding.path;
const isImportingSpecifier = ['ImportSpecifier', 'ImportDefaultSpecifier'].includes(type);
if (isImportingSpecifier || isNonRefDeclaration) {
return identifierBinding.path;
}
if (refDeclaratorBinding.path.node.init.type === 'Identifier') {
const isRefDeclarator = identifierBinding.path.node.init.type === 'Identifier';
if (isRefDeclarator) {
return getReferencedDeclaration({
referencedIdentifierName: nameOf(refDeclaratorBinding.path.node.init),
referencedIdentifierName: nameOf(identifierBinding.path.node.init),
globalScopeBindings,
});
}
return refDeclaratorBinding.path.get('init');
return /** @type {SwcPath} */ (identifierBinding.path.get('init'));
}
/**

View file

@ -1,14 +1,15 @@
/**
* @typedef {import('../../../types/index.js').SwcTraversalContext} SwcTraversalContext
* @typedef {import('@swc/core').VariableDeclarator} SwcVariableDeclarator
* @typedef {import('@swc/core').Identifier} SwcIdentifierNode
* @typedef {import('@swc/core').Module} SwcAstModule
* @typedef {import('@swc/core').Node} SwcNode
* @typedef {import('../../../types/index.js').SwcPath} SwcPath
* @typedef {import('../../../types/index.js').SwcScope} SwcScope
* @typedef {import('../../../types/index.js').SwcVisitor} SwcVisitor
* @typedef {import('../../../types/index.js').SwcBinding} SwcBinding
* @typedef {import('../../../types/index.js').SwcScope} SwcScope
* @typedef {import('../../../types/index.js').SwcPath} SwcPath
* @typedef {import("oxc-parser").ParseResult} OxcParseResult
* @typedef {import('@swc/core').Identifier} SwcIdentifierNode
* @typedef {import('oxc-parser').ParseResult} OxcNode
* @typedef {import('@swc/core').Module} SwcAstModule
* @typedef {import('@swc/core').Node} SwcNode
*/
/**
@ -308,12 +309,15 @@ function visit(swcPath, visitor, traversalContext) {
/**
* Simple traversal for swc ast.
* @param {SwcAstModule|SwcNode} oxcAst
* @param {OxcParseResult|SwcAstModule|SwcNode} oxcAst
* @param {SwcVisitor} visitor
* @param {object} config
* @param {boolean} [config.needsAdvancedPaths] needs a full traversal before starting the visitor, which is less performant. Only enable when path.get() is used
*/
export function oxcTraverse(oxcAst, visitor, { needsAdvancedPaths = false } = {}) {
// @ts-expect-error
// Before traversing, normalize so that we're still compatible with both oxc and swc
const ast = oxcAst.program || oxcAst;
/**
* For performance, the author of a visitor can call this to stop further traversal
*/
@ -401,9 +405,9 @@ export function oxcTraverse(oxcAst, visitor, { needsAdvancedPaths = false } = {}
if (needsAdvancedPaths) {
// Do one full traversal to prepare advanced path functionality like path.get() and path.scope.bindings
// TODO: improve with on the fly, partial tree traversal for best performance
prepareTree(oxcAst, null, initialScope, traversalContext);
prepareTree(ast, null, initialScope, traversalContext);
}
visitTree(oxcAst, null, initialScope, { hasPreparedTree: needsAdvancedPaths }, traversalContext);
visitTree(ast, null, initialScope, { hasPreparedTree: needsAdvancedPaths }, traversalContext);
// @ts-expect-error
traversalContext.visitOnExitFns.reverse().forEach(fn => fn());
}

View file

@ -313,7 +313,7 @@ async function trackDownIdentifierFn(
ExportDeclaration: handleExportDeclOrNamedDecl,
};
oxcTraverse(oxcAst, visitor, { needsAdvancedPaths: true });
oxcTraverse(oxcAst.program, visitor, { needsAdvancedPaths: true });
if (pendingTrackDownPromise) {
// We can't handle promises inside Babel traverse, so we do it here...

View file

@ -100,6 +100,33 @@ describe('Analyzer "find-exports"', async () => {
expect(firstEntry.result[0].source).to.equal('y');
});
it(`supports "const x = 0; export default x;" (default, referenced export)`, async () => {
mockProject([`const x = 0; export default x;`]);
const queryResults = await providence(findExportsQueryConfig, _providenceCfg);
const firstEntry = getEntry(queryResults[0]);
expect(firstEntry.result[0].exportSpecifiers.length).to.equal(1);
expect(firstEntry.result[0].exportSpecifiers[0]).to.equal('[default]');
expect(firstEntry.result[0].source).to.equal(undefined);
});
it(`supports "class X {}; export default X;" (default, referenced ClassDeclaration export)`, async () => {
mockProject([`class X {}; export default X;`]);
const queryResults = await providence(findExportsQueryConfig, _providenceCfg);
const firstEntry = getEntry(queryResults[0]);
expect(firstEntry.result[0].exportSpecifiers.length).to.equal(1);
expect(firstEntry.result[0].exportSpecifiers[0]).to.equal('[default]');
expect(firstEntry.result[0].source).to.equal(undefined);
});
it(`supports "function x() {}; export default x;" (default, referenced FunctionDeclaration export)`, async () => {
mockProject([`function x() {}; export default x;`]);
const queryResults = await providence(findExportsQueryConfig, _providenceCfg);
const firstEntry = getEntry(queryResults[0]);
expect(firstEntry.result[0].exportSpecifiers.length).to.equal(1);
expect(firstEntry.result[0].exportSpecifiers[0]).to.equal('[default]');
expect(firstEntry.result[0].source).to.equal(undefined);
});
it(`supports "export { x } from 'my/source'" (re-export named specifier)`, async () => {
mockProject([`export { x } from 'my/source'`]);
const queryResults = await providence(findExportsQueryConfig, _providenceCfg);

View file

@ -23,6 +23,7 @@ describe('Analyzer "find-imports"', async () => {
describe('Import notations', () => {
it(`supports [import 'imported/source'] (no specifiers)`, async () => {
mockProject([`import 'imported/source'`]);
const queryResults = await providence(findImportsQueryConfig, _providenceCfg);
const queryResult = queryResults[0];
const firstEntry = getEntry(queryResult);

View file

@ -73,7 +73,7 @@ describe('oxcTraverse', () => {
'ImportDeclaration',
'ImportDefaultSpecifier',
'Identifier',
'StringLiteral',
'Literal',
]);
});

View file

@ -1,11 +1,11 @@
import { IdentifierName } from "../index.js";
import { IdentifierName } from '../index.js';
export type SwcScope = {
id: number;
parentScope?: Scope;
bindings: { [key: string]: SwcBinding };
path: SwcPath | null;
getBinding: (IdentifierName:string) => SwcBinding;
getBinding: (IdentifierName: string) => SwcBinding;
_pendingRefsWithoutBinding: SwcNode[];
_isIsolatedBlockStatement: boolean;
};
@ -15,7 +15,7 @@ export type SwcBinding = {
identifier: SwcNode;
// kind: string;
refs: SwcNode[];
path: SwcPath | null | undefined;
path: SwcPath;
};
export type SwcPath = {