watskeburt 0.11.0 → 0.11.1
Sign up to get free protection for your applications and to get access to all the features.
package/README.md
CHANGED
@@ -35,13 +35,14 @@ console.log(getSHASync());
|
|
35
35
|
// files not staged for commit and files not under revision control)
|
36
36
|
/** @type {import('watskeburt').IChange[]} */
|
37
37
|
const lChangedFiles = await list("main");
|
38
|
-
// or
|
38
|
+
// or with the synchronous interface:
|
39
39
|
// const lChangedFiles = listSync("main");
|
40
40
|
|
41
41
|
// list all files that differ between 'v0.6.1' and 'v0.7.1' (by definition
|
42
42
|
// won't include files staged for commit and/ or not under revision control)
|
43
43
|
/** @type {import('watskeburt').IChange[]} */
|
44
44
|
const lChangedFiles = await list("v0.6.1", "v0.7.1");
|
45
|
+
// or with the synchronous interface:
|
45
46
|
// const lChangedFiles = listSync("v0.6.1", "v0.7.1");
|
46
47
|
|
47
48
|
// As a third parameter you can pass some options
|
@@ -52,8 +53,8 @@ const lChangedFiles = await list("main", null, {
|
|
52
53
|
trackedOnly: false, // when set to true leaves out files not under revision control
|
53
54
|
outputType: "object", // other options: "json" and "regex" (as used in the CLI)
|
54
55
|
});
|
55
|
-
// or with synchronous
|
56
|
-
// const lChangedFiles =
|
56
|
+
// or with the synchronous interface:
|
57
|
+
// const lChangedFiles = listSync("main", null, {
|
57
58
|
// trackedOnly: false, // when set to true leaves out files not under revision control
|
58
59
|
// outputType: "object", // other options: "json" and "regex" (as used in the CLI)
|
59
60
|
// });
|
package/bin/version.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
// generated by tools/get-version.ts - edits will be overwritten
|
2
|
-
export const VERSION = "0.11.
|
2
|
+
export const VERSION = "0.11.1";
|
@@ -1,7 +1,3 @@
|
|
1
|
-
// the security (and unicorn) plugins don't seem to detect named caption
|
2
|
-
// groups very well - false-flagging below regular expressions to be susceptible
|
3
|
-
// to redos attacks.
|
4
|
-
/* eslint-disable unicorn/no-unsafe-regex, security/detect-unsafe-regex */
|
5
1
|
import { EOL } from "node:os";
|
6
2
|
const DIFF_NAME_STATUS_LINE_PATTERN = /^(?<changeType>[ACDMRTUXB])(?<similarity>[0-9]{3})?[ \t]+(?<name>[^ \t]+)[ \t]*(?<newName>[^ \t]+)?$/;
|
7
3
|
const DIFF_SHORT_STATUS_LINE_PATTERN = /^(?<stagedChangeType>[ ACDMRTUXB?!])(?<unStagedChangeType>[ ACDMRTUXB?!])[ \t]+(?<name>[^ \t]+)(( -> )(?<newName>[^ \t]+))?$/;
|
@@ -17,10 +13,8 @@ const CHANGE_CHAR_2_CHANGE_TYPE = {
|
|
17
13
|
" ": "unmodified",
|
18
14
|
"?": "untracked",
|
19
15
|
"!": "ignored",
|
20
|
-
// X: "unknown"
|
21
16
|
};
|
22
17
|
function changeChar2ChangeType(pChar) {
|
23
|
-
// eslint-disable-next-line security/detect-object-injection
|
24
18
|
return CHANGE_CHAR_2_CHANGE_TYPE[pChar] ?? "unknown";
|
25
19
|
}
|
26
20
|
export function convertStatusLine(pString) {
|
@@ -30,7 +30,6 @@ export default function formatToRegex(pChanges, pExtensions = DEFAULT_EXTENSIONS
|
|
30
30
|
.filter((pChange) => pChangeTypes.has(pChange.changeType))
|
31
31
|
.map(({ name }) => name)
|
32
32
|
.filter((pName) => pExtensions.has(extname(pName)))
|
33
|
-
// .replace(/\./g, "\\\\.")
|
34
33
|
.join("|");
|
35
34
|
return `^(${lChanges})$`;
|
36
35
|
}
|
@@ -7,7 +7,6 @@ function stringifyOutStream(pError) {
|
|
7
7
|
return pError;
|
8
8
|
}
|
9
9
|
}
|
10
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
11
10
|
function throwSpawnError(pError) {
|
12
11
|
if (pError.code === "ENOENT") {
|
13
12
|
throw new Error("git executable not found");
|
@@ -16,13 +15,9 @@ function throwSpawnError(pError) {
|
|
16
15
|
throw new Error(`internal spawn error: ${pError}`);
|
17
16
|
}
|
18
17
|
}
|
19
|
-
/**
|
20
|
-
* @throws {Error}
|
21
|
-
*/
|
22
18
|
function getGitResultSync(pArguments, pErrorMap, pSpawnFunction) {
|
23
19
|
const lGitResult = pSpawnFunction("git", pArguments, {
|
24
20
|
cwd: process.cwd(),
|
25
|
-
// eslint-disable-next-line node/no-process-env
|
26
21
|
env: process.env,
|
27
22
|
});
|
28
23
|
if (lGitResult.error) {
|
@@ -36,19 +31,12 @@ function getGitResultSync(pArguments, pErrorMap, pSpawnFunction) {
|
|
36
31
|
`internal git error: ${lGitResult.status} (${stringifyOutStream(lGitResult.stderr)})`);
|
37
32
|
}
|
38
33
|
}
|
39
|
-
/**
|
40
|
-
* @throws {Error}
|
41
|
-
*/
|
42
34
|
export function getStatusShortSync(pSpawnFunction = spawnSync) {
|
43
35
|
const lErrorMap = {
|
44
36
|
129: `'${process.cwd()}' does not seem to be a git repository`,
|
45
37
|
};
|
46
38
|
return getGitResultSync(["status", "--porcelain"], lErrorMap, pSpawnFunction);
|
47
39
|
}
|
48
|
-
/**
|
49
|
-
*
|
50
|
-
* @throws {Error}
|
51
|
-
*/
|
52
40
|
export function getDiffLinesSync(pOldRevision, pNewRevision, pSpawnFunction = spawnSync) {
|
53
41
|
const lErrorMap = {
|
54
42
|
128: `revision '${pOldRevision}' ${pNewRevision ? `(or '${pNewRevision}') ` : ""}unknown`,
|
@@ -1,4 +1,3 @@
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
2
1
|
import { spawn } from "node:child_process";
|
3
2
|
function stringifyOutStream(pBufferOrString) {
|
4
3
|
if (pBufferOrString instanceof Buffer) {
|
@@ -8,13 +7,9 @@ function stringifyOutStream(pBufferOrString) {
|
|
8
7
|
return pBufferOrString;
|
9
8
|
}
|
10
9
|
}
|
11
|
-
/**
|
12
|
-
* @throws {Error}
|
13
|
-
*/
|
14
10
|
function getGitResult(pArguments, pErrorMap, pSpawnFunction) {
|
15
11
|
const lGit = pSpawnFunction("git", pArguments, {
|
16
12
|
cwd: process.cwd(),
|
17
|
-
// eslint-disable-next-line node/no-process-env
|
18
13
|
env: process.env,
|
19
14
|
});
|
20
15
|
let lStdOutData = "";
|
@@ -45,9 +40,6 @@ function getGitResult(pArguments, pErrorMap, pSpawnFunction) {
|
|
45
40
|
});
|
46
41
|
});
|
47
42
|
}
|
48
|
-
/**
|
49
|
-
* @throws {Error}
|
50
|
-
*/
|
51
43
|
export async function getStatusShort(pSpawnFunction = spawn) {
|
52
44
|
const lErrorMap = {
|
53
45
|
129: `'${process.cwd()}' does not seem to be a git repository`,
|
@@ -55,10 +47,6 @@ export async function getStatusShort(pSpawnFunction = spawn) {
|
|
55
47
|
const lResult = await getGitResult(["status", "--porcelain"], lErrorMap, pSpawnFunction);
|
56
48
|
return lResult;
|
57
49
|
}
|
58
|
-
/**
|
59
|
-
*
|
60
|
-
* @throws {Error}
|
61
|
-
*/
|
62
50
|
export async function getDiffLines(pOldRevision, pNewRevision, pSpawnFunction = spawn) {
|
63
51
|
const lErrorMap = {
|
64
52
|
128: `revision '${pOldRevision}' ${pNewRevision ? `(or '${pNewRevision}') ` : ""}unknown`,
|
package/dist/esm/main.js
CHANGED
@@ -16,7 +16,7 @@ export async function list(pOldRevision, pNewRevision, pOptions) {
|
|
16
16
|
const lOptions = pOptions || {};
|
17
17
|
const [lDiffLines, lStatusLines] = await Promise.all([
|
18
18
|
getDiffLines(lOldRevision, pNewRevision),
|
19
|
-
lOptions.trackedOnly ?
|
19
|
+
!lOptions.trackedOnly ? getStatusShort() : "",
|
20
20
|
]);
|
21
21
|
let lChanges = convertDiffLines(lDiffLines);
|
22
22
|
if (!lOptions.trackedOnly) {
|