summaryrefslogtreecommitdiff
path: root/node_modules/@11ty/eleventy/src/Util/JavaScriptDependencies.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@11ty/eleventy/src/Util/JavaScriptDependencies.js')
-rw-r--r--node_modules/@11ty/eleventy/src/Util/JavaScriptDependencies.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/node_modules/@11ty/eleventy/src/Util/JavaScriptDependencies.js b/node_modules/@11ty/eleventy/src/Util/JavaScriptDependencies.js
new file mode 100644
index 0000000..7f6e809
--- /dev/null
+++ b/node_modules/@11ty/eleventy/src/Util/JavaScriptDependencies.js
@@ -0,0 +1,55 @@
+import dependencyTree from "@11ty/dependency-tree";
+import { find } from "@11ty/dependency-tree-esm";
+import { TemplatePath } from "@11ty/eleventy-utils";
+
+import EleventyBaseError from "../Errors/EleventyBaseError.js";
+
+class JavaScriptDependencies {
+ static getErrorMessage(file, type) {
+ return `A problem was encountered looking for JavaScript dependencies in ${type} file: ${file}. This only affects --watch and --serve behavior and does not affect your build.`;
+ }
+
+ static async getDependencies(inputFiles, isProjectUsingEsm) {
+ let depSet = new Set();
+
+ // TODO does this need to work with aliasing? what other JS extensions will have deps?
+ let commonJsFiles = inputFiles.filter(
+ (file) => (!isProjectUsingEsm && file.endsWith(".js")) || file.endsWith(".cjs"),
+ );
+
+ for (let file of commonJsFiles) {
+ try {
+ let modules = dependencyTree(file, {
+ nodeModuleNames: "exclude",
+ allowNotFound: true,
+ }).map((dependency) => {
+ return TemplatePath.addLeadingDotSlash(TemplatePath.relativePath(dependency));
+ });
+
+ for (let dep of modules) {
+ depSet.add(dep);
+ }
+ } catch (e) {
+ throw new EleventyBaseError(this.getErrorMessage(file, "CommonJS"), e);
+ }
+ }
+
+ let esmFiles = inputFiles.filter(
+ (file) => (isProjectUsingEsm && file.endsWith(".js")) || file.endsWith(".mjs"),
+ );
+ for (let file of esmFiles) {
+ try {
+ let modules = await find(file);
+ for (let dep of modules) {
+ depSet.add(dep);
+ }
+ } catch (e) {
+ throw new EleventyBaseError(this.getErrorMessage(file, "ESM"), e);
+ }
+ }
+
+ return Array.from(depSet).sort();
+ }
+}
+
+export default JavaScriptDependencies;