@openge/forge-text-integrity 0.1.0-rc.1 → 0.1.1
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/node/scan.d.ts.map +1 -1
- package/dist/node/scan.js +7 -4
- package/dist/node/scan.js.map +1 -1
- package/package.json +4 -1
- package/dist/node/git.d.ts +0 -4
- package/dist/node/git.d.ts.map +0 -1
- package/dist/node/git.js +0 -110
- package/dist/node/git.js.map +0 -1
package/dist/node/scan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/node/scan.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/node/scan.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAA0B,MAAM,iBAAiB,CAAC;AAElF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAiB/D,eAAO,MAAM,sBAAsB,GACjC,OAAO,SAAS,MAAM,EAAE,EACxB,UAAS,wBAA6B,KACrC,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAYvC,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,UAAS,wBAA6B,KACrC,OAAO,CAAC,SAAS,kBAAkB,EAAE,CASvC,CAAC"}
|
package/dist/node/scan.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { readFile } from 'node:fs/promises';
|
|
2
2
|
import { relative, resolve } from 'node:path';
|
|
3
|
+
import { filterIgnoredRepositoryPaths, listChangedRepositoryFiles, } from '@openge/forge-repository-files';
|
|
3
4
|
import { inspectTextIntegrity } from '../inspection.js';
|
|
4
5
|
import { createScanConfiguration } from './configuration.js';
|
|
5
|
-
import {
|
|
6
|
-
import { collectTextFiles, compareNormalizedPaths, normalizeRepoPath, } from './paths.js';
|
|
6
|
+
import { collectTextFiles, compareNormalizedPaths, isIgnoredPath, isTextFile, normalizeRepoPath, } from './paths.js';
|
|
7
7
|
const issueCodeOrder = {
|
|
8
8
|
'question-placeholder': 0,
|
|
9
9
|
'replacement-character': 1,
|
|
@@ -16,14 +16,17 @@ export const scanTextIntegrityPaths = async (paths, options = {}) => {
|
|
|
16
16
|
const configuration = createScanConfiguration(options);
|
|
17
17
|
const collectedFiles = await collectTextFiles(paths, cwd, configuration);
|
|
18
18
|
const files = configuration.respectGitIgnore
|
|
19
|
-
? await
|
|
19
|
+
? (await filterIgnoredRepositoryPaths(collectedFiles.map((file) => normalizeRepoPath(relative(cwd, file))), { cwd })).map((file) => resolve(cwd, file))
|
|
20
20
|
: collectedFiles;
|
|
21
21
|
return scanFiles(files, cwd, options, configuration.concurrency);
|
|
22
22
|
};
|
|
23
23
|
export const scanChangedTextIntegrityFiles = async (options = {}) => {
|
|
24
24
|
const cwd = resolve(options.cwd ?? process.cwd());
|
|
25
25
|
const configuration = createScanConfiguration(options);
|
|
26
|
-
const files = await
|
|
26
|
+
const files = (await listChangedRepositoryFiles({ cwd }))
|
|
27
|
+
.map((filePath) => resolve(cwd, filePath))
|
|
28
|
+
.filter((filePath) => !isIgnoredPath(filePath, cwd, configuration))
|
|
29
|
+
.filter((filePath) => isTextFile(filePath, configuration));
|
|
27
30
|
return scanFiles(files, cwd, options, configuration.concurrency);
|
|
28
31
|
};
|
|
29
32
|
const scanFiles = async (files, cwd, options, concurrency) => {
|
package/dist/node/scan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/node/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/node/scan.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openge/forge-text-integrity",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Runtime-neutral text integrity inspection and Node.js repository scanning",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -41,6 +41,9 @@
|
|
|
41
41
|
"bugs": {
|
|
42
42
|
"url": "https://github.com/zopenge/foundation-forge/issues"
|
|
43
43
|
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@openge/forge-repository-files": "^0.1.0"
|
|
46
|
+
},
|
|
44
47
|
"scripts": {
|
|
45
48
|
"build": "tsc -p tsconfig.build.json",
|
|
46
49
|
"lint": "eslint . --max-warnings 0",
|
package/dist/node/git.d.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { TextIntegrityScanConfiguration } from './configuration.js';
|
|
2
|
-
export declare const filterGitRelevantFiles: (files: readonly string[]) => Promise<readonly string[]>;
|
|
3
|
-
export declare const collectChangedTextFiles: (cwd: string, configuration: TextIntegrityScanConfiguration) => Promise<readonly string[]>;
|
|
4
|
-
//# sourceMappingURL=git.d.ts.map
|
package/dist/node/git.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/node/git.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAUzE,eAAO,MAAM,sBAAsB,GACjC,OAAO,SAAS,MAAM,EAAE,KACvB,OAAO,CAAC,SAAS,MAAM,EAAE,CA+B3B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,KAAK,MAAM,EACX,eAAe,8BAA8B,KAC5C,OAAO,CAAC,SAAS,MAAM,EAAE,CAe3B,CAAC"}
|
package/dist/node/git.js
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { execFile, spawn } from 'node:child_process';
|
|
2
|
-
import { dirname, relative, resolve } from 'node:path';
|
|
3
|
-
import { promisify } from 'node:util';
|
|
4
|
-
import { compareNormalizedPaths, isIgnoredPath, isTextFile, normalizeRepoPath, } from './paths.js';
|
|
5
|
-
const execFileAsync = promisify(execFile);
|
|
6
|
-
export const filterGitRelevantFiles = async (files) => {
|
|
7
|
-
const rootCache = new Map();
|
|
8
|
-
const filesByRoot = new Map();
|
|
9
|
-
const nonGitFiles = [];
|
|
10
|
-
for (const file of files) {
|
|
11
|
-
const root = await findGitRoot(dirname(file), rootCache);
|
|
12
|
-
if (root === undefined) {
|
|
13
|
-
nonGitFiles.push(file);
|
|
14
|
-
continue;
|
|
15
|
-
}
|
|
16
|
-
const group = filesByRoot.get(root) ?? [];
|
|
17
|
-
group.push(file);
|
|
18
|
-
filesByRoot.set(root, group);
|
|
19
|
-
}
|
|
20
|
-
const filtered = [...nonGitFiles];
|
|
21
|
-
for (const [root, rootFiles] of filesByRoot) {
|
|
22
|
-
const relativePaths = rootFiles.map((file) => normalizeRepoPath(relative(root, file)));
|
|
23
|
-
const ignoredPaths = await collectGitIgnoredPaths(root, relativePaths);
|
|
24
|
-
for (const [index, file] of rootFiles.entries()) {
|
|
25
|
-
const relativePath = relativePaths[index];
|
|
26
|
-
if (relativePath !== undefined && !ignoredPaths.has(relativePath)) {
|
|
27
|
-
filtered.push(file);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return filtered.sort((left, right) => compareNormalizedPaths(normalizeRepoPath(left), normalizeRepoPath(right)));
|
|
32
|
-
};
|
|
33
|
-
export const collectChangedTextFiles = async (cwd, configuration) => {
|
|
34
|
-
const { stdout } = await execFileAsync('git', ['status', '--porcelain=v1', '-z', '--untracked-files=all'], { cwd, encoding: 'utf8', maxBuffer: 16 * 1_024 * 1_024 });
|
|
35
|
-
const files = parseGitStatusPorcelain(stdout)
|
|
36
|
-
.map((filePath) => resolve(cwd, filePath))
|
|
37
|
-
.filter((filePath) => !isIgnoredPath(filePath, cwd, configuration))
|
|
38
|
-
.filter((filePath) => isTextFile(filePath, configuration));
|
|
39
|
-
return [...new Set(files)].sort((left, right) => compareNormalizedPaths(normalizeRepoPath(relative(cwd, left)), normalizeRepoPath(relative(cwd, right))));
|
|
40
|
-
};
|
|
41
|
-
const parseGitStatusPorcelain = (output) => {
|
|
42
|
-
const paths = [];
|
|
43
|
-
const entries = output.split('\0');
|
|
44
|
-
for (let index = 0; index < entries.length; index += 1) {
|
|
45
|
-
const entry = entries[index];
|
|
46
|
-
if (entry === undefined || entry.length === 0) {
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
const status = entry.slice(0, 2);
|
|
50
|
-
const filePath = entry.slice(3);
|
|
51
|
-
if (!status.includes('D')) {
|
|
52
|
-
paths.push(filePath);
|
|
53
|
-
}
|
|
54
|
-
if (status[0] === 'R' || status[0] === 'C') {
|
|
55
|
-
index += 1;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return paths;
|
|
59
|
-
};
|
|
60
|
-
const findGitRoot = async (directory, cache) => {
|
|
61
|
-
const resolvedDirectory = resolve(directory);
|
|
62
|
-
if (cache.has(resolvedDirectory)) {
|
|
63
|
-
return cache.get(resolvedDirectory);
|
|
64
|
-
}
|
|
65
|
-
try {
|
|
66
|
-
const { stdout } = await execFileAsync('git', ['rev-parse', '--show-toplevel'], { cwd: resolvedDirectory, encoding: 'utf8', maxBuffer: 1_024 * 1_024 });
|
|
67
|
-
const root = resolve(stdout.trim());
|
|
68
|
-
cache.set(resolvedDirectory, root);
|
|
69
|
-
return root;
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
if (isExitCode(error, 128)) {
|
|
73
|
-
cache.set(resolvedDirectory, undefined);
|
|
74
|
-
return undefined;
|
|
75
|
-
}
|
|
76
|
-
throw error;
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
const collectGitIgnoredPaths = (root, relativePaths) => new Promise((resolvePromise, reject) => {
|
|
80
|
-
if (relativePaths.length === 0) {
|
|
81
|
-
resolvePromise(new Set());
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
const child = spawn('git', ['check-ignore', '-z', '--stdin'], {
|
|
85
|
-
cwd: root,
|
|
86
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
87
|
-
});
|
|
88
|
-
const stdoutChunks = [];
|
|
89
|
-
const stderrChunks = [];
|
|
90
|
-
child.stdout.on('data', (chunk) => stdoutChunks.push(chunk));
|
|
91
|
-
child.stderr.on('data', (chunk) => stderrChunks.push(chunk));
|
|
92
|
-
child.on('error', reject);
|
|
93
|
-
child.on('close', (code) => {
|
|
94
|
-
if (code !== 0 && code !== 1) {
|
|
95
|
-
const diagnostic = Buffer.concat(stderrChunks).toString('utf8').trim();
|
|
96
|
-
reject(new Error(diagnostic || `git check-ignore failed with exit code ${String(code)}`));
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
const output = Buffer.concat(stdoutChunks).toString('utf8');
|
|
100
|
-
resolvePromise(new Set(output.split('\0').filter((path) => path.length > 0)));
|
|
101
|
-
});
|
|
102
|
-
child.stdin.end(`${relativePaths.join('\0')}\0`, 'utf8');
|
|
103
|
-
});
|
|
104
|
-
const isExitCode = (error, expected) => {
|
|
105
|
-
if (typeof error !== 'object' || error === null || !('code' in error)) {
|
|
106
|
-
return false;
|
|
107
|
-
}
|
|
108
|
-
return error.code === expected;
|
|
109
|
-
};
|
|
110
|
-
//# sourceMappingURL=git.js.map
|
package/dist/node/git.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/node/git.ts"],"names":[],"mappings":"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"}
|