@uxf/scripts 11.23.1 → 11.28.2

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.
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ require("../src/uxf-unused/cli")()
3
+ .then((exitCode) => {
4
+ process.exitCode = exitCode;
5
+ })
6
+ .catch((e) => {
7
+ console.error(e);
8
+ process.exitCode = 1;
9
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/scripts",
3
- "version": "11.23.1",
3
+ "version": "11.28.2",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -9,7 +9,8 @@
9
9
  "uxf-release": "bin/uxf-release.js",
10
10
  "uxf-sitemap-check": "bin/uxf-sitemap-check.js",
11
11
  "uxf-sitemap-meta-export": "bin/uxf-sitemap-meta-export.js",
12
- "uxf-i18n-namespaces-gen": "bin/uxf-i18n-namespaces-gen.js"
12
+ "uxf-i18n-namespaces-gen": "bin/uxf-i18n-namespaces-gen.js",
13
+ "uxf-unused": "bin/uxf-unused.js"
13
14
  },
14
15
  "scripts": {
15
16
  "build": "",
@@ -29,7 +30,8 @@
29
30
  "axios": "1.6.7",
30
31
  "cheerio": "1.0.0-rc.12",
31
32
  "dayjs": "1.11.10",
32
- "madge": "6.1.0",
33
+ "fast-glob": "3.3.2",
34
+ "madge": "8.0.0",
33
35
  "yargs": "17.7.2"
34
36
  }
35
37
  }
@@ -0,0 +1,50 @@
1
+ const fg = require("fast-glob");
2
+ const madge = require("madge");
3
+ const path = require("path");
4
+ const fs = require("fs");
5
+
6
+ function getTSConfig() {
7
+ const tsConfigPath = path.resolve(process.cwd(), "tsconfig.json");
8
+ return fs.existsSync(tsConfigPath) ? tsConfigPath : undefined;
9
+ }
10
+
11
+ function getTree(subtree, tree, destination, viewedFiles = []) {
12
+ if (!subtree || subtree.length === 0) {
13
+ return;
14
+ }
15
+
16
+ for (let child of subtree) {
17
+ if (viewedFiles.includes(child)) {
18
+ continue;
19
+ }
20
+
21
+ const nextSubtree = tree[child];
22
+
23
+ viewedFiles.push(child);
24
+
25
+ if (nextSubtree) {
26
+ destination.push(nextSubtree);
27
+ }
28
+
29
+ if (nextSubtree && nextSubtree.length > 0) {
30
+ getTree(nextSubtree, tree, destination, viewedFiles);
31
+ }
32
+ }
33
+ }
34
+
35
+ module.exports = function loadPageImports(directory, fileExtensions = ["ts", "tsx"]) {
36
+ const pages = fg.sync(directory);
37
+
38
+ return madge(process.cwd(), { tsConfig: getTSConfig(), fileExtensions }).then((res) => {
39
+ const tree = res.obj();
40
+
41
+ return pages.reduce((previousValue, currentValue) => {
42
+ const filesOnPath = [];
43
+ getTree([currentValue], tree, filesOnPath);
44
+
45
+ previousValue[currentValue] = Array.from(new Set(filesOnPath.flat(Number.POSITIVE_INFINITY)));
46
+
47
+ return previousValue;
48
+ }, {});
49
+ });
50
+ };
@@ -1,43 +1,7 @@
1
1
  const GitLab = require("../GitLab");
2
2
  const Slack = require("../Slack");
3
3
  const GoogleChat = require("../GoogleChat");
4
-
5
- function parseCommitMessage(commitMessage) {
6
- /* fix(bo): [KLK-123] commit message */
7
- const result = /^(.*)\((.*)\): \[(.*)\] (.*)/.exec(commitMessage);
8
-
9
- if (result !== null) {
10
- return {
11
- type: result[1],
12
- issues: result[3].replace(" ", "").split(","),
13
- message: result[4],
14
- };
15
- }
16
-
17
- /* fix: [KLK-123] commit message */
18
- const result_1 = /^(.*): \[(.*)\] (.*)/.exec(commitMessage);
19
-
20
- if (result_1 !== null) {
21
- return {
22
- type: result_1[1],
23
- issues: result_1[3].replace(" ", "").split(","),
24
- message: result_1[4],
25
- };
26
- }
27
-
28
- /* [KLK-123] commit message */
29
- const result_2 = /^\[(.*)\] (.*)/.exec(commitMessage);
30
-
31
- if (result_2 !== null) {
32
- return {
33
- type: null,
34
- issues: result_2[1].replace(" ", "").split(","),
35
- message: result_2[2],
36
- };
37
- }
38
-
39
- return null;
40
- }
4
+ const parseCommitMessage = require("./utils/parse-commit-message");
41
5
 
42
6
  function generateSlackCommitMessage(commit) {
43
7
  const { title, short_id, web_url, author_email } = commit;
@@ -0,0 +1,38 @@
1
+ function parseCommitMessage(commitMessage) {
2
+ /* fix(bo): [KLK-123] commit message */
3
+ const result = /^(.*)\((.*)\): \[(.*)\] (.*)/.exec(commitMessage);
4
+
5
+ if (result !== null) {
6
+ return {
7
+ type: result[1],
8
+ issues: result[3].replace(" ", "").split(","),
9
+ message: result[4],
10
+ };
11
+ }
12
+
13
+ /* fix: [KLK-123] commit message */
14
+ const result_1 = /^(.*): \[(.*)\] (.*)/.exec(commitMessage);
15
+
16
+ if (result_1 !== null) {
17
+ return {
18
+ type: result_1[1],
19
+ issues: result_1[2].replace(" ", "").split(","),
20
+ message: result_1[3],
21
+ };
22
+ }
23
+
24
+ /* [KLK-123] commit message */
25
+ const result_2 = /^\[(.*)\] (.*)/.exec(commitMessage);
26
+
27
+ if (result_2 !== null) {
28
+ return {
29
+ type: null,
30
+ issues: result_2[1].replace(" ", "").split(","),
31
+ message: result_2[2],
32
+ };
33
+ }
34
+
35
+ return null;
36
+ }
37
+
38
+ module.exports = parseCommitMessage;
@@ -0,0 +1,24 @@
1
+ const parseCommitMessage = require("./parse-commit-message");
2
+
3
+ test("strings (variadic)", () => {
4
+ expect(parseCommitMessage("fix(bo): [KLK-1,KLK-2] message")).toEqual({
5
+ type: "fix",
6
+ issues: ["KLK-1", "KLK-2"],
7
+ message: "message",
8
+ });
9
+ expect(parseCommitMessage("fix(bo): [KLK-1] message")).toEqual({
10
+ type: "fix",
11
+ issues: ["KLK-1"],
12
+ message: "message",
13
+ });
14
+ expect(parseCommitMessage("fix: [KLK-1] message")).toEqual({
15
+ type: "fix",
16
+ issues: ["KLK-1"],
17
+ message: "message",
18
+ });
19
+ expect(parseCommitMessage("[KLK-1,KLK-2] message")).toEqual({
20
+ type: null,
21
+ issues: ["KLK-1", "KLK-2"],
22
+ message: "message",
23
+ });
24
+ });
@@ -0,0 +1,29 @@
1
+ const { argv, env } = require("process");
2
+
3
+ module.exports = async () => {
4
+ const cli = require("yargs")
5
+ .command("$0", "UXF find and remove unused files NextJS project", (yargs) => {
6
+ yargs.demandCommand(0, 0).usage(`
7
+ Usage:
8
+ uxf-unused [options]`);
9
+ })
10
+ .option("p", { alias: "pagesDirectory", default: "src/pages/**/*.(ts|tsx)" })
11
+ .option("f", { alias: "allFilesDirectory", default: "src/**/*.(ts|tsx)" })
12
+ .option("r", { alias: "removeFiles", boolean: true, default: false })
13
+ .option("h", { alias: "help" })
14
+ .strict(false)
15
+ .exitProcess(false);
16
+
17
+ try {
18
+ const { help, pagesDirectory, allFilesDirectory, removeFiles } = cli.parse(argv.slice(2));
19
+
20
+ if (Boolean(help)) {
21
+ return 0;
22
+ }
23
+
24
+ await require("./index")(pagesDirectory, allFilesDirectory, removeFiles);
25
+ } catch (e) {
26
+ console.error(e);
27
+ return 1;
28
+ }
29
+ };
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env node
2
+ const loadPageImports = require("../shared/load-page-imports");
3
+ const fg = require("fast-glob");
4
+ const path = require("path");
5
+ const fs = require("fs");
6
+
7
+ function unique(value, index, array) {
8
+ return array.indexOf(value) === index;
9
+ }
10
+
11
+ async function main(pagesDirectory, allFilesDirectory, shouldRemoveFiles) {
12
+ const pageImports = await loadPageImports(pagesDirectory);
13
+
14
+ const pages = Object.keys(pageImports);
15
+
16
+ const usedFiles = Object.values(pageImports).flat().filter(unique).map(path.normalize);
17
+ const allFiles = fg.sync(allFilesDirectory).map(path.normalize);
18
+
19
+ allFiles
20
+ .filter((e) => !usedFiles.includes(e) && !pages.includes(e))
21
+ .forEach((unusedFile) => {
22
+ if (shouldRemoveFiles) {
23
+ fs.rmSync(unusedFile);
24
+ }
25
+ console.log(unusedFile);
26
+ });
27
+ }
28
+
29
+ module.exports = main;