node-janitor 1.0.1 → 1.1.0
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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +97 -7
- package/dist/cli.js.map +1 -1
- package/dist/commands/schedule.d.ts +35 -0
- package/dist/commands/schedule.d.ts.map +1 -0
- package/dist/commands/schedule.js +123 -0
- package/dist/commands/schedule.js.map +1 -0
- package/dist/commands/watch.d.ts +17 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +110 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/core/config.d.ts +21 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +103 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/scanner.d.ts +5 -0
- package/dist/core/scanner.d.ts.map +1 -1
- package/dist/core/scanner.js +19 -0
- package/dist/core/scanner.js.map +1 -1
- package/dist/utils/git-utils.d.ts +40 -0
- package/dist/utils/git-utils.d.ts.map +1 -0
- package/dist/utils/git-utils.js +122 -0
- package/dist/utils/git-utils.js.map +1 -0
- package/dist/utils/i18n.d.ts +60 -0
- package/dist/utils/i18n.d.ts.map +1 -0
- package/dist/utils/i18n.js +302 -0
- package/dist/utils/i18n.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { cosmiconfig } from 'cosmiconfig';
|
|
2
|
+
import logger from '../utils/logger.js';
|
|
3
|
+
const MODULE_NAME = 'janitor';
|
|
4
|
+
/**
|
|
5
|
+
* Load configuration from .janitorrc, .janitorrc.json, .janitorrc.yaml,
|
|
6
|
+
* janitor.config.js, or package.json "janitor" key
|
|
7
|
+
*/
|
|
8
|
+
export async function loadConfig(configPath) {
|
|
9
|
+
const explorer = cosmiconfig(MODULE_NAME, {
|
|
10
|
+
searchPlaces: [
|
|
11
|
+
'package.json',
|
|
12
|
+
`.${MODULE_NAME}rc`,
|
|
13
|
+
`.${MODULE_NAME}rc.json`,
|
|
14
|
+
`.${MODULE_NAME}rc.yaml`,
|
|
15
|
+
`.${MODULE_NAME}rc.yml`,
|
|
16
|
+
`.${MODULE_NAME}rc.js`,
|
|
17
|
+
`.${MODULE_NAME}rc.cjs`,
|
|
18
|
+
`${MODULE_NAME}.config.js`,
|
|
19
|
+
`${MODULE_NAME}.config.cjs`,
|
|
20
|
+
],
|
|
21
|
+
});
|
|
22
|
+
try {
|
|
23
|
+
let result;
|
|
24
|
+
if (configPath) {
|
|
25
|
+
result = await explorer.load(configPath);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
result = await explorer.search();
|
|
29
|
+
}
|
|
30
|
+
if (result && result.config) {
|
|
31
|
+
logger.debug(`Loaded config from: ${result.filepath}`);
|
|
32
|
+
return validateConfig(result.config);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
logger.debug(`Config load error: ${error instanceof Error ? error.message : String(error)}`);
|
|
37
|
+
}
|
|
38
|
+
return getDefaultConfig();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get default configuration
|
|
42
|
+
*/
|
|
43
|
+
export function getDefaultConfig() {
|
|
44
|
+
return {
|
|
45
|
+
exclude: [],
|
|
46
|
+
excludePattern: [],
|
|
47
|
+
defaultOlderThan: undefined,
|
|
48
|
+
defaultPath: undefined,
|
|
49
|
+
defaultDepth: undefined,
|
|
50
|
+
lang: 'en',
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Validate and normalize config
|
|
55
|
+
*/
|
|
56
|
+
function validateConfig(config) {
|
|
57
|
+
const defaultConfig = getDefaultConfig();
|
|
58
|
+
if (typeof config !== 'object' || config === null) {
|
|
59
|
+
return defaultConfig;
|
|
60
|
+
}
|
|
61
|
+
const cfg = config;
|
|
62
|
+
return {
|
|
63
|
+
exclude: Array.isArray(cfg.exclude) ? cfg.exclude.filter(s => typeof s === 'string') : defaultConfig.exclude,
|
|
64
|
+
excludePattern: Array.isArray(cfg.excludePattern) ? cfg.excludePattern.filter(s => typeof s === 'string') : defaultConfig.excludePattern,
|
|
65
|
+
defaultOlderThan: typeof cfg.defaultOlderThan === 'string' ? cfg.defaultOlderThan : defaultConfig.defaultOlderThan,
|
|
66
|
+
defaultPath: typeof cfg.defaultPath === 'string' ? cfg.defaultPath : defaultConfig.defaultPath,
|
|
67
|
+
defaultDepth: typeof cfg.defaultDepth === 'number' ? cfg.defaultDepth : defaultConfig.defaultDepth,
|
|
68
|
+
lang: typeof cfg.lang === 'string' ? cfg.lang : defaultConfig.lang,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Merge CLI options with config file options (CLI takes precedence)
|
|
73
|
+
*/
|
|
74
|
+
export function mergeOptions(cliOptions, config) {
|
|
75
|
+
const merged = { ...cliOptions };
|
|
76
|
+
// Apply config defaults only if CLI option is not provided
|
|
77
|
+
if (!merged.path && config.defaultPath) {
|
|
78
|
+
merged.path = config.defaultPath;
|
|
79
|
+
}
|
|
80
|
+
if (!merged.depth && config.defaultDepth) {
|
|
81
|
+
merged.depth = config.defaultDepth;
|
|
82
|
+
}
|
|
83
|
+
if (!merged.olderThan && config.defaultOlderThan) {
|
|
84
|
+
merged.olderThan = config.defaultOlderThan;
|
|
85
|
+
}
|
|
86
|
+
if (!merged.lang && config.lang) {
|
|
87
|
+
merged.lang = config.lang;
|
|
88
|
+
}
|
|
89
|
+
// Merge exclude patterns
|
|
90
|
+
if (config.exclude && config.exclude.length > 0) {
|
|
91
|
+
const cliExclude = merged.exclude || '';
|
|
92
|
+
const cliPatterns = cliExclude ? cliExclude.split(',').map(s => s.trim()) : [];
|
|
93
|
+
const allPatterns = [...new Set([...cliPatterns, ...config.exclude])];
|
|
94
|
+
merged.exclude = allPatterns.join(',');
|
|
95
|
+
}
|
|
96
|
+
return merged;
|
|
97
|
+
}
|
|
98
|
+
export default {
|
|
99
|
+
loadConfig,
|
|
100
|
+
getDefaultConfig,
|
|
101
|
+
mergeOptions,
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/scanner.d.ts
CHANGED
|
@@ -15,6 +15,10 @@ export declare function filterBySize(folders: NodeModulesInfo[], minSize?: numbe
|
|
|
15
15
|
* Filter folders that have lockfile
|
|
16
16
|
*/
|
|
17
17
|
export declare function filterWithLockfile(folders: NodeModulesInfo[]): NodeModulesInfo[];
|
|
18
|
+
/**
|
|
19
|
+
* Filter folders by git status (skip dirty repos)
|
|
20
|
+
*/
|
|
21
|
+
export declare function filterByGitStatus(folders: NodeModulesInfo[], skipDirty?: boolean, onlyInGitRepo?: boolean): NodeModulesInfo[];
|
|
18
22
|
/**
|
|
19
23
|
* Calculate totals
|
|
20
24
|
*/
|
|
@@ -28,6 +32,7 @@ declare const _default: {
|
|
|
28
32
|
scanNodeModules: typeof scanNodeModules;
|
|
29
33
|
filterByAge: typeof filterByAge;
|
|
30
34
|
filterBySize: typeof filterBySize;
|
|
35
|
+
filterByGitStatus: typeof filterByGitStatus;
|
|
31
36
|
filterWithLockfile: typeof filterWithLockfile;
|
|
32
37
|
calculateTotals: typeof calculateTotals;
|
|
33
38
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAyBtE;;GAEG;AACH,wBAAsB,eAAe,CACjC,OAAO,EAAE,WAAW,EACpB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GACpE,OAAO,CAAC,eAAe,EAAE,CAAC,CA2F5B;AA+CD;;GAEG;AACH,wBAAgB,WAAW,CACvB,OAAO,EAAE,eAAe,EAAE,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GACpB,eAAe,EAAE,CAUnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CACxB,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACjB,eAAe,EAAE,CAUnB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAIhF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,OAAO,EAAE,eAAe,EAAE,EAC1B,SAAS,UAAQ,EACjB,aAAa,UAAQ,GACtB,eAAe,EAAE,CAUnB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB,CAYA;;;;;;;;;AAED,wBAOE"}
|
package/dist/core/scanner.js
CHANGED
|
@@ -2,6 +2,7 @@ import fs from 'fs-extra';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { getFolderSizeFast, getLastModified, countPackages, fileExists, } from '../utils/fs-utils.js';
|
|
4
4
|
import { getAgeDays } from '../utils/formatter.js';
|
|
5
|
+
import { getGitStatus } from '../utils/git-utils.js';
|
|
5
6
|
import logger from '../utils/logger.js';
|
|
6
7
|
// Folders to skip when scanning
|
|
7
8
|
const SKIP_FOLDERS = new Set([
|
|
@@ -116,6 +117,8 @@ async function getNodeModulesInfo(nodeModulesPath, projectPath, quick = false) {
|
|
|
116
117
|
fileExists(path.join(projectPath, 'yarn.lock')),
|
|
117
118
|
fileExists(path.join(projectPath, 'pnpm-lock.yaml')),
|
|
118
119
|
]);
|
|
120
|
+
// Get git status
|
|
121
|
+
const gitStatus = await getGitStatus(projectPath);
|
|
119
122
|
return {
|
|
120
123
|
path: nodeModulesPath,
|
|
121
124
|
projectPath,
|
|
@@ -126,6 +129,7 @@ async function getNodeModulesInfo(nodeModulesPath, projectPath, quick = false) {
|
|
|
126
129
|
hasYarnLock,
|
|
127
130
|
hasPnpmLock,
|
|
128
131
|
ageDays,
|
|
132
|
+
gitStatus,
|
|
129
133
|
};
|
|
130
134
|
}
|
|
131
135
|
/**
|
|
@@ -162,6 +166,20 @@ export function filterBySize(folders, minSize, maxSize) {
|
|
|
162
166
|
export function filterWithLockfile(folders) {
|
|
163
167
|
return folders.filter(folder => folder.hasPackageLock || folder.hasYarnLock || folder.hasPnpmLock);
|
|
164
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Filter folders by git status (skip dirty repos)
|
|
171
|
+
*/
|
|
172
|
+
export function filterByGitStatus(folders, skipDirty = false, onlyInGitRepo = false) {
|
|
173
|
+
return folders.filter(folder => {
|
|
174
|
+
if (onlyInGitRepo && !folder.gitStatus?.isGitRepo) {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
if (skipDirty && folder.gitStatus?.isDirty) {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
return true;
|
|
181
|
+
});
|
|
182
|
+
}
|
|
165
183
|
/**
|
|
166
184
|
* Calculate totals
|
|
167
185
|
*/
|
|
@@ -180,6 +198,7 @@ export default {
|
|
|
180
198
|
scanNodeModules,
|
|
181
199
|
filterByAge,
|
|
182
200
|
filterBySize,
|
|
201
|
+
filterByGitStatus,
|
|
183
202
|
filterWithLockfile,
|
|
184
203
|
calculateTotals,
|
|
185
204
|
};
|
package/dist/core/scanner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { GitStatus } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Check if a directory is inside a git repository
|
|
4
|
+
*/
|
|
5
|
+
export declare function isGitRepo(dir: string): Promise<boolean>;
|
|
6
|
+
/**
|
|
7
|
+
* Get the root of the git repository
|
|
8
|
+
*/
|
|
9
|
+
export declare function getGitRoot(dir: string): Promise<string | null>;
|
|
10
|
+
/**
|
|
11
|
+
* Check if there are uncommitted changes in the repository
|
|
12
|
+
*/
|
|
13
|
+
export declare function isDirty(dir: string): Promise<boolean>;
|
|
14
|
+
/**
|
|
15
|
+
* Get the current branch name
|
|
16
|
+
*/
|
|
17
|
+
export declare function getCurrentBranch(dir: string): Promise<string | null>;
|
|
18
|
+
/**
|
|
19
|
+
* Check if the current branch is merged into main/master
|
|
20
|
+
*/
|
|
21
|
+
export declare function isMergedToMain(dir: string): Promise<boolean>;
|
|
22
|
+
/**
|
|
23
|
+
* Get full git status for a project directory
|
|
24
|
+
*/
|
|
25
|
+
export declare function getGitStatus(projectPath: string): Promise<GitStatus | undefined>;
|
|
26
|
+
/**
|
|
27
|
+
* Check if node_modules is in gitignore
|
|
28
|
+
*/
|
|
29
|
+
export declare function isNodeModulesIgnored(projectPath: string): Promise<boolean>;
|
|
30
|
+
declare const _default: {
|
|
31
|
+
isGitRepo: typeof isGitRepo;
|
|
32
|
+
getGitRoot: typeof getGitRoot;
|
|
33
|
+
isDirty: typeof isDirty;
|
|
34
|
+
getCurrentBranch: typeof getCurrentBranch;
|
|
35
|
+
isMergedToMain: typeof isMergedToMain;
|
|
36
|
+
getGitStatus: typeof getGitStatus;
|
|
37
|
+
isNodeModulesIgnored: typeof isNodeModulesIgnored;
|
|
38
|
+
};
|
|
39
|
+
export default _default;
|
|
40
|
+
//# sourceMappingURL=git-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../../src/utils/git-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAInD;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOpE;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO3D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAO1E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BlE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAgBtF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYhF;;;;;;;;;;AAED,wBAQE"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
const execAsync = promisify(exec);
|
|
5
|
+
/**
|
|
6
|
+
* Check if a directory is inside a git repository
|
|
7
|
+
*/
|
|
8
|
+
export async function isGitRepo(dir) {
|
|
9
|
+
try {
|
|
10
|
+
await execAsync('git rev-parse --is-inside-work-tree', { cwd: dir });
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get the root of the git repository
|
|
19
|
+
*/
|
|
20
|
+
export async function getGitRoot(dir) {
|
|
21
|
+
try {
|
|
22
|
+
const { stdout } = await execAsync('git rev-parse --show-toplevel', { cwd: dir });
|
|
23
|
+
return stdout.trim();
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Check if there are uncommitted changes in the repository
|
|
31
|
+
*/
|
|
32
|
+
export async function isDirty(dir) {
|
|
33
|
+
try {
|
|
34
|
+
const { stdout } = await execAsync('git status --porcelain', { cwd: dir });
|
|
35
|
+
return stdout.trim().length > 0;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get the current branch name
|
|
43
|
+
*/
|
|
44
|
+
export async function getCurrentBranch(dir) {
|
|
45
|
+
try {
|
|
46
|
+
const { stdout } = await execAsync('git rev-parse --abbrev-ref HEAD', { cwd: dir });
|
|
47
|
+
return stdout.trim();
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if the current branch is merged into main/master
|
|
55
|
+
*/
|
|
56
|
+
export async function isMergedToMain(dir) {
|
|
57
|
+
try {
|
|
58
|
+
const branch = await getCurrentBranch(dir);
|
|
59
|
+
if (!branch || branch === 'main' || branch === 'master') {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
// Try to check if merged into main or master
|
|
63
|
+
const mainBranches = ['main', 'master'];
|
|
64
|
+
for (const mainBranch of mainBranches) {
|
|
65
|
+
try {
|
|
66
|
+
const { stdout } = await execAsync(`git branch --merged ${mainBranch} 2>/dev/null | grep -E "^\\s*${branch}$"`, { cwd: dir });
|
|
67
|
+
if (stdout.trim()) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get full git status for a project directory
|
|
83
|
+
*/
|
|
84
|
+
export async function getGitStatus(projectPath) {
|
|
85
|
+
const isRepo = await isGitRepo(projectPath);
|
|
86
|
+
if (!isRepo) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
const [dirty, branch] = await Promise.all([
|
|
90
|
+
isDirty(projectPath),
|
|
91
|
+
getCurrentBranch(projectPath),
|
|
92
|
+
]);
|
|
93
|
+
return {
|
|
94
|
+
isGitRepo: true,
|
|
95
|
+
isDirty: dirty,
|
|
96
|
+
branch: branch || undefined,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check if node_modules is in gitignore
|
|
101
|
+
*/
|
|
102
|
+
export async function isNodeModulesIgnored(projectPath) {
|
|
103
|
+
try {
|
|
104
|
+
const nodeModulesPath = path.join(projectPath, 'node_modules');
|
|
105
|
+
const { stdout } = await execAsync(`git check-ignore -q "${nodeModulesPath}" && echo "ignored" || echo "tracked"`, { cwd: projectPath });
|
|
106
|
+
return stdout.trim() === 'ignored';
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// If git command fails, assume it's ignored (safe default)
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
export default {
|
|
114
|
+
isGitRepo,
|
|
115
|
+
getGitRoot,
|
|
116
|
+
isDirty,
|
|
117
|
+
getCurrentBranch,
|
|
118
|
+
isMergedToMain,
|
|
119
|
+
getGitStatus,
|
|
120
|
+
isNodeModulesIgnored,
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=git-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../../src/utils/git-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internationalization (i18n) support for node-janitor
|
|
3
|
+
*/
|
|
4
|
+
export type Language = 'en' | 'vi' | 'zh' | 'ja' | 'ko' | 'es' | 'fr' | 'de';
|
|
5
|
+
export interface Translations {
|
|
6
|
+
found: string;
|
|
7
|
+
folders: string;
|
|
8
|
+
scanning: string;
|
|
9
|
+
noFolders: string;
|
|
10
|
+
cancelled: string;
|
|
11
|
+
goodbye: string;
|
|
12
|
+
deleting: string;
|
|
13
|
+
deleted: string;
|
|
14
|
+
freed: string;
|
|
15
|
+
cleaning: string;
|
|
16
|
+
deepCleaning: string;
|
|
17
|
+
processed: string;
|
|
18
|
+
removed: string;
|
|
19
|
+
files: string;
|
|
20
|
+
scanPath: string;
|
|
21
|
+
ageFilter: string;
|
|
22
|
+
confirmDelete: string;
|
|
23
|
+
viewList: string;
|
|
24
|
+
selectAction: string;
|
|
25
|
+
report: string;
|
|
26
|
+
totalFolders: string;
|
|
27
|
+
totalSize: string;
|
|
28
|
+
oldest: string;
|
|
29
|
+
newest: string;
|
|
30
|
+
breakdown: string;
|
|
31
|
+
recommendations: string;
|
|
32
|
+
scanFailed: string;
|
|
33
|
+
errors: string;
|
|
34
|
+
dryRunMode: string;
|
|
35
|
+
backupSaved: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Set the current language
|
|
39
|
+
*/
|
|
40
|
+
export declare function setLanguage(lang: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Get a translated string
|
|
43
|
+
*/
|
|
44
|
+
export declare function t(key: keyof Translations): string;
|
|
45
|
+
/**
|
|
46
|
+
* Get all available languages
|
|
47
|
+
*/
|
|
48
|
+
export declare function getAvailableLanguages(): Language[];
|
|
49
|
+
/**
|
|
50
|
+
* Get current language
|
|
51
|
+
*/
|
|
52
|
+
export declare function getCurrentLanguage(): Language;
|
|
53
|
+
declare const _default: {
|
|
54
|
+
setLanguage: typeof setLanguage;
|
|
55
|
+
t: typeof t;
|
|
56
|
+
getAvailableLanguages: typeof getAvailableLanguages;
|
|
57
|
+
getCurrentLanguage: typeof getCurrentLanguage;
|
|
58
|
+
};
|
|
59
|
+
export default _default;
|
|
60
|
+
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/utils/i18n.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7E,MAAM,WAAW,YAAY;IAEzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAGhB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IAGd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IAGrB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IAGxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IAGf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB;AA+SD;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAU9C;AAED;;GAEG;AACH,wBAAgB,CAAC,CAAC,GAAG,EAAE,MAAM,YAAY,GAAG,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,EAAE,CAElD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,CAE7C;;;;;;;AAED,wBAKE"}
|