diff --git a/dependenciesListGenerator.mjs b/dependenciesListGenerator.mjs
new file mode 100644
index 0000000..7f553c3
--- /dev/null
+++ b/dependenciesListGenerator.mjs
@@ -0,0 +1,161 @@
+import fs from "fs";
+import path from "path";
+import registryURL from "registry-url";
+import { fileURLToPath } from "url";
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+const src = path.join(__dirname, "src"),
+ pages = path.join(src, "pages"),
+ components = path.join(src, "components"),
+ stores = path.join(src, "stores"),
+ router = path.join(src, "router"),
+ utils = path.join(components, "utils"),
+ packageJson = path.join(__dirname, "package.json"),
+ thankYouPageDir = path.join(pages, "ThankYou"),
+ npmRegistryURL = registryURL();
+
+const NPMPackageLink = `https://www.npmjs.com/package/`;
+
+let modules = [];
+
+/*
+ Single module looks like this
+ module = {
+ "name": string,
+ "link": string,
+ "description": string,
+ "homepage": string
+ }
+
+ link here is the npm link to the package
+*/
+
+async function getPackageDetails(name) {
+ try {
+ const data = await (await fetch(npmRegistryURL + name)).json();
+
+ return {
+ success: {
+ description: data.description,
+ homepage: data.homepage,
+ },
+ error: false,
+ };
+ } catch (e) {
+ return {
+ success: false,
+ error: e,
+ };
+ }
+}
+
+function extractModules(content) {
+ const lines = content.split(/\n/g);
+
+ let modules = [];
+
+ let j = 0;
+
+ while (lines[j]) {
+ if (lines[j].match("from") || lines[j].startsWith("import")) {
+ lines[j] = lines[j]
+ .split(/\s/)
+ .at(-2)
+ .replace(/\"|\'|;/g, "");
+ if (!lines[j].match(/^\.[\/\\\.]*/g)) {
+ modules.push(lines[j]);
+ }
+ }
+ j++;
+ }
+ modules = new Set(modules);
+ modules = Array.from(modules);
+ return modules;
+}
+
+function getDirModules(dir) {
+ const files = fs.readdirSync(dir);
+ let tempModules = [];
+
+ for (let i = 0; i < files.length; i++) {
+ if (files[i].match(/\./)) {
+ const content = fs.readFileSync(path.join(dir, files[i]), "utf-8");
+ tempModules = new Set([...tempModules, ...extractModules(content)]);
+
+ tempModules = Array.from(tempModules);
+ }
+ }
+ return tempModules;
+}
+
+function getSrcModules(src) {
+ const moduleFolders = fs.readdirSync(src);
+ let tempModules = [];
+ for (let i = 0; i < moduleFolders.length; i++) {
+ tempModules = new Set([
+ ...tempModules,
+ ...getDirModules(path.join(src, moduleFolders[i])),
+ ]);
+
+ tempModules = Array.from(tempModules);
+ }
+ return tempModules;
+}
+
+async function generateDependenciesList() {
+ console.log(`Generating list of dependencies for thank you page... 👷♂️`);
+ modules = new Set(
+ [
+ ...getSrcModules(pages),
+ ...getSrcModules(components),
+ ...getDirModules(router),
+ ...getDirModules(stores),
+ ...getDirModules(utils),
+ ...getDirModules(src),
+ ].map((e) => (e.startsWith("@") ? e : e.split(/[\/\\]/)[0]))
+ );
+
+ modules = Array.from(modules);
+
+ // there are a lot of garbage generated
+ // let's clean that now by checking
+ // if the module found exists in the package.json file
+ const packageJsonContent = JSON.parse(fs.readFileSync(packageJson, "utf-8"));
+
+ const realDependencies = Object.keys(packageJsonContent.dependencies);
+
+ modules = modules.filter((e) => realDependencies.includes(e));
+
+ for (let i = 0; i < modules.length; i++) {
+ let details = await getPackageDetails(modules[i]);
+ let final = {
+ name: modules[i],
+ link: NPMPackageLink + modules[i],
+ description: details.success?.description || undefined,
+ homepage: details.success?.homepage || undefined,
+ };
+ modules[i] = final;
+ }
+
+ const dependenciesFile = `const dependencies = ${JSON.stringify(
+ modules,
+ null,
+ 4
+ )}; \n\n export default dependencies;`;
+
+ fs.writeFileSync(
+ path.join(thankYouPageDir, "dependencies.js"),
+ dependenciesFile,
+ "utf-8"
+ );
+
+ console.log(`List of dependencies successfully generated ✨`);
+}
+
+export default () => ({
+ name: "dependencies-list-generator",
+ apply: "build",
+ async configResolved() {
+ await generateDependenciesList();
+ },
+});
diff --git a/package-lock.json b/package-lock.json
index fda6665..706232f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -24,6 +24,7 @@
"moment": "^2.29.4",
"moment-timezone": "^0.5.43",
"pinia": "^2.1.6",
+ "registry-url": "^6.0.1",
"sql-formatter": "^12.2.4",
"sql-query-identifier": "^2.5.0",
"vue": "^3.3.4",
@@ -596,6 +597,14 @@
"date-fns": ">=2.0.0"
}
},
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
"node_modules/discontinuous-range": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz",
@@ -674,6 +683,11 @@
"node": ">=12.0.0"
}
},
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+ },
"node_modules/jose": {
"version": "4.14.4",
"resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz",
@@ -725,6 +739,14 @@
"node": ">= 16"
}
},
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/moment": {
"version": "2.29.4",
"license": "MIT",
@@ -880,10 +902,38 @@
"node": ">=0.12"
}
},
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
"node_modules/regenerator-runtime": {
"version": "0.13.11",
"license": "MIT"
},
+ "node_modules/registry-url": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz",
+ "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==",
+ "dependencies": {
+ "rc": "1.2.8"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/remedial": {
"version": "1.0.8",
"license": "(MIT OR Apache-2.0)",
@@ -946,6 +996,14 @@
"node": ">= 10.13"
}
},
+ "node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/vite": {
"version": "4.4.9",
"resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz",
diff --git a/package.json b/package.json
index 6028c23..97b5ac8 100644
--- a/package.json
+++ b/package.json
@@ -25,6 +25,7 @@
"moment": "^2.29.4",
"moment-timezone": "^0.5.43",
"pinia": "^2.1.6",
+ "registry-url": "^6.0.1",
"sql-formatter": "^12.2.4",
"sql-query-identifier": "^2.5.0",
"vue": "^3.3.4",
diff --git a/src/components/Pageheader/index.vue b/src/components/Pageheader/index.vue
index 15c3488..8db5eb0 100644
--- a/src/components/Pageheader/index.vue
+++ b/src/components/Pageheader/index.vue
@@ -1,14 +1,14 @@