@push.rocks/smartlinuxrepo 1.1.1 → 1.2.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_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/alpine/apkindexreader.d.ts +87 -0
- package/dist_ts/alpine/apkindexreader.js +193 -0
- package/dist_ts/arch/indexreader.d.ts +35 -0
- package/dist_ts/arch/indexreader.js +45 -0
- package/dist_ts/arch/reader.js +2 -2
- package/dist_ts/debian/indexbuilder.js +8 -23
- package/dist_ts/debian/indexreader.d.ts +107 -0
- package/dist_ts/debian/indexreader.js +274 -0
- package/dist_ts/debian/reader.js +6 -2
- package/dist_ts/debian/rules.d.ts +18 -0
- package/dist_ts/debian/rules.js +81 -2
- package/dist_ts/index.d.ts +14 -4
- package/dist_ts/index.js +9 -3
- package/dist_ts/readers/decompress.d.ts +14 -5
- package/dist_ts/readers/decompress.js +401 -26
- package/dist_ts/readers/document.d.ts +36 -0
- package/dist_ts/readers/document.js +110 -0
- package/dist_ts/rpm/repodata.d.ts +3 -2
- package/dist_ts/rpm/repodata.js +5 -4
- package/dist_ts/rpm/repodatareader.d.ts +173 -0
- package/dist_ts/rpm/repodatareader.js +414 -0
- package/dist_ts/rpm/xmlreader.d.ts +70 -0
- package/dist_ts/rpm/xmlreader.js +576 -0
- package/dist_ts/shared/errors.d.ts +12 -4
- package/dist_ts/shared/errors.js +1 -1
- package/dist_ts/shared/limits.d.ts +9 -2
- package/dist_ts/shared/limits.js +5 -2
- package/dist_ts/shared/types.d.ts +2 -0
- package/dist_ts/signing/verifiers.d.ts +43 -0
- package/dist_ts/signing/verifiers.js +81 -2
- package/package.json +1 -1
- package/readme.md +56 -3
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/alpine/apkindexreader.ts +265 -0
- package/ts/arch/indexreader.ts +66 -0
- package/ts/arch/reader.ts +3 -2
- package/ts/debian/indexbuilder.ts +13 -23
- package/ts/debian/indexreader.ts +372 -0
- package/ts/debian/reader.ts +7 -2
- package/ts/debian/rules.ts +83 -1
- package/ts/index.ts +40 -2
- package/ts/readers/decompress.ts +442 -32
- package/ts/readers/document.ts +136 -0
- package/ts/rpm/repodata.ts +4 -3
- package/ts/rpm/repodatareader.ts +582 -0
- package/ts/rpm/xmlreader.ts +680 -0
- package/ts/shared/errors.ts +13 -4
- package/ts/shared/limits.ts +10 -2
- package/ts/shared/types.ts +3 -0
- package/ts/signing/verifiers.ts +113 -1
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { LinuxRepoError, limitExceeded } from '../shared/errors.js';
|
|
2
|
+
import { assertBytes } from '../shared/validation.js';
|
|
3
|
+
import { BufferReader, READ_CHUNK_BYTES } from './bytes.js';
|
|
4
|
+
import { withDecompressingReader } from './decompress.js';
|
|
5
|
+
/**
|
|
6
|
+
* The shared parts of the index readers (1.2.0): decoding one index document
|
|
7
|
+
* into a buffer the reader owns, and the line lexer of the line formats
|
|
8
|
+
* (Debian `Packages` and `Release`, `APKINDEX`).
|
|
9
|
+
*/
|
|
10
|
+
const COMPRESSIONS = new Set(['none', 'gzip', 'xz', 'zstd']);
|
|
11
|
+
const LF = 0x0a;
|
|
12
|
+
/** Refuses a reader argument that is not an object (`invalid-input`, `input`). */
|
|
13
|
+
export function assertReaderInput(inputArg) {
|
|
14
|
+
if (inputArg === null || typeof inputArg !== 'object') {
|
|
15
|
+
throw new LinuxRepoError('invalid-input', 'input must be an object', { field: 'input' });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** Refuses a `bytes` argument that is not a `Uint8Array` (`invalid-input`, `bytes`). */
|
|
19
|
+
export function assertReaderBytes(valueArg) {
|
|
20
|
+
assertBytes(valueArg, 'bytes');
|
|
21
|
+
}
|
|
22
|
+
/** Refuses a compression that is not a `TLinuxCompression` (`invalid-input`, `compression`). */
|
|
23
|
+
export function assertLinuxCompression(valueArg) {
|
|
24
|
+
if (typeof valueArg !== 'string' || !COMPRESSIONS.has(valueArg)) {
|
|
25
|
+
throw new LinuxRepoError('invalid-input', "compression must be 'none', 'gzip', 'xz' or 'zstd'", {
|
|
26
|
+
field: 'compression',
|
|
27
|
+
value: typeof valueArg === 'string' ? valueArg : typeof valueArg,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Decodes one index document into a new buffer the reader owns, through
|
|
33
|
+
* `withDecompressingReader` for every compression (`'none'` passes the input
|
|
34
|
+
* through and copies it), bounded by `maxIndexBytes`. The decoder's own
|
|
35
|
+
* mapping applies: a stream that ends early is `truncated`, corrupt data
|
|
36
|
+
* `malformed-archive`, output past the bound `limit-exceeded`
|
|
37
|
+
* (`maxIndexBytes`). The result never aliases `bytesArg`.
|
|
38
|
+
*/
|
|
39
|
+
export async function readIndexDocument(bytesArg, compressionArg, limitsArg) {
|
|
40
|
+
if (compressionArg === 'none' && bytesArg.length > limitsArg.maxIndexBytes) {
|
|
41
|
+
throw limitExceeded('maxIndexBytes', limitsArg.maxIndexBytes, 'index document');
|
|
42
|
+
}
|
|
43
|
+
const chunks = [];
|
|
44
|
+
let total = 0;
|
|
45
|
+
await withDecompressingReader(new BufferReader(bytesArg), compressionArg, { maxOutputBytes: limitsArg.maxIndexBytes, outputLimit: 'maxIndexBytes', maxZstdFrames: limitsArg.maxEntries }, async (readerArg) => {
|
|
46
|
+
for (let chunk = await readerArg.read(READ_CHUNK_BYTES); chunk !== null; chunk = await readerArg.read(READ_CHUNK_BYTES)) {
|
|
47
|
+
chunks.push(chunk);
|
|
48
|
+
total += chunk.length;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
const decoded = new Uint8Array(total);
|
|
52
|
+
let offset = 0;
|
|
53
|
+
for (const chunk of chunks) {
|
|
54
|
+
decoded.set(chunk, offset);
|
|
55
|
+
offset += chunk.length;
|
|
56
|
+
}
|
|
57
|
+
return decoded;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The common line lexer of the line formats: lines end in LF and the last
|
|
61
|
+
* line must have one too (`malformed-index`, `detail.value` the offset of
|
|
62
|
+
* the unterminated line); a line longer than `maxHeaderBytes` (without its
|
|
63
|
+
* LF) is `limit-exceeded`. CR is an ordinary byte; nothing is trimmed. An
|
|
64
|
+
* empty document has no lines.
|
|
65
|
+
*/
|
|
66
|
+
export function* lines(bytesArg, maxLineBytesArg, whatArg) {
|
|
67
|
+
let start = 0;
|
|
68
|
+
while (start < bytesArg.length) {
|
|
69
|
+
const end = bytesArg.indexOf(LF, start);
|
|
70
|
+
if (end < 0) {
|
|
71
|
+
if (bytesArg.length - start > maxLineBytesArg) {
|
|
72
|
+
throw limitExceeded('maxHeaderBytes', maxLineBytesArg, `${whatArg} line`);
|
|
73
|
+
}
|
|
74
|
+
throw new LinuxRepoError('malformed-index', `the last line of the ${whatArg} has no line feed`, {
|
|
75
|
+
field: whatArg,
|
|
76
|
+
value: start,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
if (end - start > maxLineBytesArg) {
|
|
80
|
+
throw limitExceeded('maxHeaderBytes', maxLineBytesArg, `${whatArg} line`);
|
|
81
|
+
}
|
|
82
|
+
yield { start, end };
|
|
83
|
+
start = end + 1;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** True when the line holds only spaces or tabs (at least one). */
|
|
87
|
+
export function isBlankLine(bytesArg, lineArg) {
|
|
88
|
+
if (lineArg.end === lineArg.start) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
for (let i = lineArg.start; i < lineArg.end; i++) {
|
|
92
|
+
if (bytesArg[i] !== 0x20 && bytesArg[i] !== 0x09) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
/** Counts one more unit of a document against `maxEntries`. */
|
|
99
|
+
export function countUnit(countArg, limitsArg, whatArg) {
|
|
100
|
+
if (countArg > limitsArg.maxEntries) {
|
|
101
|
+
throw limitExceeded('maxEntries', limitsArg.maxEntries, `${whatArg} count`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/** Refuses one unit larger than `maxMetadataBytes`. */
|
|
105
|
+
export function checkUnitBytes(lengthArg, limitsArg, whatArg) {
|
|
106
|
+
if (lengthArg > limitsArg.maxMetadataBytes) {
|
|
107
|
+
throw limitExceeded('maxMetadataBytes', limitsArg.maxMetadataBytes, whatArg);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9yZWFkZXJzL2RvY3VtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUQ7Ozs7R0FJRztBQUVILE1BQU0sWUFBWSxHQUF3QixJQUFJLEdBQUcsQ0FBb0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JHLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztBQUVoQixrRkFBa0Y7QUFDbEYsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFFBQWlCO0lBQ2pELElBQUksUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0RCxNQUFNLElBQUksY0FBYyxDQUFDLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzNGLENBQUM7QUFDSCxDQUFDO0FBRUQsd0ZBQXdGO0FBQ3hGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxRQUFpQjtJQUNqRCxXQUFXLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxnR0FBZ0c7QUFDaEcsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFFBQWlCO0lBQ3RELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sSUFBSSxj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
|
|
@@ -20,9 +20,10 @@ import type { IRpmPackageRecord } from '../shared/types.js';
|
|
|
20
20
|
* createrepo_c 1.2.6 `cr_is_primary` (`src/misc.h:111-119`): paths under
|
|
21
21
|
* `/etc/`, exactly `/usr/lib/sendmail`, or containing `bin/` anywhere. It is
|
|
22
22
|
* applied to every file entry, directories and ghosts included
|
|
23
|
-
* (`src/xml_dump.c:206`).
|
|
23
|
+
* (`src/xml_dump.c:206`). `buildRpmIndex` lists such files in `primary`
|
|
24
|
+
* besides the executable ones, where Gitea lists only the executable ones.
|
|
24
25
|
*/
|
|
25
|
-
export declare function
|
|
26
|
+
export declare function isRpmPrimaryPath(pathArg: string): boolean;
|
|
26
27
|
/** The architecture every document lists: `src` for a source RPM, else the ARCH tag. */
|
|
27
28
|
export declare function rpmListedArchitecture(recordArg: IRpmPackageRecord): string;
|
|
28
29
|
/** Gitea's package location below the repository root (`repository.go:420`), with the ARCH tag. */
|
package/dist_ts/rpm/repodata.js
CHANGED
|
@@ -20,9 +20,10 @@ import { element, textElement, XML_HEADER } from './xml.js';
|
|
|
20
20
|
* createrepo_c 1.2.6 `cr_is_primary` (`src/misc.h:111-119`): paths under
|
|
21
21
|
* `/etc/`, exactly `/usr/lib/sendmail`, or containing `bin/` anywhere. It is
|
|
22
22
|
* applied to every file entry, directories and ghosts included
|
|
23
|
-
* (`src/xml_dump.c:206`).
|
|
23
|
+
* (`src/xml_dump.c:206`). `buildRpmIndex` lists such files in `primary`
|
|
24
|
+
* besides the executable ones, where Gitea lists only the executable ones.
|
|
24
25
|
*/
|
|
25
|
-
export function
|
|
26
|
+
export function isRpmPrimaryPath(pathArg) {
|
|
26
27
|
return pathArg.startsWith('/etc/') || pathArg === '/usr/lib/sendmail' || pathArg.includes('bin/');
|
|
27
28
|
}
|
|
28
29
|
/** The architecture every document lists: `src` for a source RPM, else the ARCH tag. */
|
|
@@ -75,7 +76,7 @@ export function renderRepomd(dataArg) {
|
|
|
75
76
|
}
|
|
76
77
|
function renderPrimaryPackage(recordArg) {
|
|
77
78
|
const metadata = recordArg.metadata;
|
|
78
|
-
const files = metadata.files.filter((file) => file.isExecutable ||
|
|
79
|
+
const files = metadata.files.filter((file) => file.isExecutable || isRpmPrimaryPath(file.path));
|
|
79
80
|
return element('package', [['type', 'rpm']], [
|
|
80
81
|
textElement('name', recordArg.name),
|
|
81
82
|
textElement('arch', rpmListedArchitecture(recordArg)),
|
|
@@ -145,4 +146,4 @@ function dependencyList(nameArg, dependenciesArg) {
|
|
|
145
146
|
function fileElement(fileArg) {
|
|
146
147
|
return textElement('file', fileArg.path, [['type', fileArg.type || undefined]]);
|
|
147
148
|
}
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb2RhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9ycG0vcmVwb2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE9BQWU7SUFDOUMsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sS0FBSyxtQkFBbUIsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BHLENBQUM7QUFFRCx3RkFBd0Y7QUFDeEYsTUFBTSxVQUFVLHFCQUFxQixDQUFDLFNBQTRCO0lBQ2hFLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztBQUM3RSxDQUFDO0FBRUQsbUdBQW1HO0FBQ25HLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUE0QjtJQUM3RCxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxTQUFTLENBQUM7SUFDbEQsT0FBTyxXQUFXLElBQUksSUFBSSxPQUFPLElBQUksWUFBWSxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksWUFBWSxNQUFNLENBQUM7QUFDN0YsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsVUFBK0I7SUFDM0QsT0FBTyxRQUFRLENBQ2IsVUFBVSxFQUNWO1FBQ0UsQ0FBQyxPQUFPLEVBQUUsdUNBQXVDLENBQUM7UUFDbEQsQ0FBQyxXQUFXLEVBQUUsb0NBQW9DLENBQUM7UUFDbkQsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQztLQUNoQyxFQUNELFVBQVUsQ0FBQyxHQUFH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
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { type ILinuxPackageLimits } from '../shared/limits.js';
|
|
2
|
+
import type { TLinuxCompression } from '../shared/types.js';
|
|
3
|
+
/** One attribute of a root element, its value decoded. */
|
|
4
|
+
export interface IRpmXmlAttribute {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly value: string;
|
|
7
|
+
}
|
|
8
|
+
/** The parts of a repodata document outside its units, as exact bytes. */
|
|
9
|
+
export interface IRpmXmlFrame {
|
|
10
|
+
/** The bytes before the root start tag (XML declaration, comments, whitespace). */
|
|
11
|
+
readonly prolog: Uint8Array;
|
|
12
|
+
readonly rootName: string;
|
|
13
|
+
/** The exact root start tag, `<metadata …>`. */
|
|
14
|
+
readonly rootStartTag: Uint8Array;
|
|
15
|
+
/** The root's attributes in order, values decoded. */
|
|
16
|
+
readonly rootAttributes: readonly IRpmXmlAttribute[];
|
|
17
|
+
/** The root's `xmlns` value; `''` when absent. */
|
|
18
|
+
readonly namespace: string;
|
|
19
|
+
/** The exact root end tag, `</metadata>`; empty for an empty-element root. */
|
|
20
|
+
readonly rootEndTag: Uint8Array;
|
|
21
|
+
/** The bytes after the root end tag. */
|
|
22
|
+
readonly trailer: Uint8Array;
|
|
23
|
+
}
|
|
24
|
+
/** Which repodata document `readRpmRepodata` reads; the caller names it from the repomd `type`. */
|
|
25
|
+
export type TRpmRepodataDocument = 'primary' | 'filelists' | 'other';
|
|
26
|
+
/** One `<file>` of a package. */
|
|
27
|
+
export interface IRpmRepodataFile {
|
|
28
|
+
readonly path: string;
|
|
29
|
+
/** The `type` attribute as written (`dir`, `ghost`); `''` when absent. */
|
|
30
|
+
readonly type: string;
|
|
31
|
+
}
|
|
32
|
+
/** One `<package>` unit of primary, filelists or other. */
|
|
33
|
+
export interface IRpmRepodataPackage {
|
|
34
|
+
/** The element from `<` of its start tag to `>` of its end tag (a view into `decoded`). */
|
|
35
|
+
readonly bytes: Uint8Array;
|
|
36
|
+
/** The element's offset in `decoded`. */
|
|
37
|
+
readonly offset: number;
|
|
38
|
+
/** primary: the text of `<checksum pkgid="YES">`; filelists and other: the `pkgid` attribute. */
|
|
39
|
+
readonly pkgid: string;
|
|
40
|
+
/** primary: the `<name>` and `<arch>` text; filelists and other: the attributes. `''` when absent. */
|
|
41
|
+
readonly name: string;
|
|
42
|
+
readonly arch: string;
|
|
43
|
+
/** The `<version>` attributes `epoch`, `ver`, `rel`; `''` when absent. */
|
|
44
|
+
readonly epoch: string;
|
|
45
|
+
readonly version: string;
|
|
46
|
+
readonly release: string;
|
|
47
|
+
/** primary's `<size>` attributes (`''` when absent); null when there is no `<size>` element (always in filelists and other). */
|
|
48
|
+
readonly size: {
|
|
49
|
+
readonly package: string;
|
|
50
|
+
readonly installed: string;
|
|
51
|
+
readonly archive: string;
|
|
52
|
+
} | null;
|
|
53
|
+
/** primary `<format><file>`, filelists `<file>`, in order; `[]` when none (always in `other`). */
|
|
54
|
+
readonly files: readonly IRpmRepodataFile[];
|
|
55
|
+
}
|
|
56
|
+
/** A primary, filelists or other document read into its frame and packages. */
|
|
57
|
+
export interface IRpmRepodata extends IRpmXmlFrame {
|
|
58
|
+
/** The decompressed document (a copy for `'none'`); every `offset` indexes into it. */
|
|
59
|
+
readonly decoded: Uint8Array;
|
|
60
|
+
readonly document: TRpmRepodataDocument;
|
|
61
|
+
/** Every `<package>` in document order, duplicates included. */
|
|
62
|
+
readonly packages: readonly IRpmRepodataPackage[];
|
|
63
|
+
}
|
|
64
|
+
/** A `<checksum>` or `<open-checksum>` of repomd. */
|
|
65
|
+
export interface IRpmRepomdChecksum {
|
|
66
|
+
/** The `type` attribute; `''` when absent. */
|
|
67
|
+
readonly type: string;
|
|
68
|
+
readonly value: string;
|
|
69
|
+
}
|
|
70
|
+
/** One `<data>` unit of repomd. */
|
|
71
|
+
export interface IRpmRepomdData {
|
|
72
|
+
readonly bytes: Uint8Array;
|
|
73
|
+
readonly offset: number;
|
|
74
|
+
readonly type: string;
|
|
75
|
+
/** The `<location href>`. */
|
|
76
|
+
readonly location: string;
|
|
77
|
+
readonly checksum: IRpmRepomdChecksum;
|
|
78
|
+
readonly openChecksum: IRpmRepomdChecksum | null;
|
|
79
|
+
/** The `<timestamp>`, `<size>` and `<open-size>` text as written; null when absent. */
|
|
80
|
+
readonly timestamp: string | null;
|
|
81
|
+
readonly size: string | null;
|
|
82
|
+
readonly openSize: string | null;
|
|
83
|
+
}
|
|
84
|
+
/** A root child of repomd other than `<data>` (createrepo_c's `<revision>`, `<tags>`), raw. */
|
|
85
|
+
export interface IRpmRepomdElement {
|
|
86
|
+
readonly name: string;
|
|
87
|
+
readonly bytes: Uint8Array;
|
|
88
|
+
readonly offset: number;
|
|
89
|
+
}
|
|
90
|
+
/** A `repomd.xml` read into its frame, `<data>` units and other elements. */
|
|
91
|
+
export interface IRpmRepomd extends IRpmXmlFrame {
|
|
92
|
+
readonly data: readonly IRpmRepomdData[];
|
|
93
|
+
readonly otherElements: readonly IRpmRepomdElement[];
|
|
94
|
+
}
|
|
95
|
+
/** One package of an `<update>`'s `<pkglist>`. */
|
|
96
|
+
export interface IRpmUpdateInfoPackage {
|
|
97
|
+
/** The enclosing `<collection short>`; `''` when absent. */
|
|
98
|
+
readonly collection: string;
|
|
99
|
+
/** The `<package>` attributes; `''` when absent. */
|
|
100
|
+
readonly name: string;
|
|
101
|
+
readonly epoch: string;
|
|
102
|
+
readonly version: string;
|
|
103
|
+
readonly release: string;
|
|
104
|
+
readonly arch: string;
|
|
105
|
+
readonly src: string;
|
|
106
|
+
/** The `<filename>` text; `''` when absent. */
|
|
107
|
+
readonly fileName: string;
|
|
108
|
+
}
|
|
109
|
+
/** One `<update>` unit of updateinfo. */
|
|
110
|
+
export interface IRpmUpdateInfoUpdate {
|
|
111
|
+
readonly bytes: Uint8Array;
|
|
112
|
+
readonly offset: number;
|
|
113
|
+
/** The `<id>` text: the unit key. */
|
|
114
|
+
readonly id: string;
|
|
115
|
+
/** Every package of every collection, in order. */
|
|
116
|
+
readonly packages: readonly IRpmUpdateInfoPackage[];
|
|
117
|
+
}
|
|
118
|
+
/** An `updateinfo` document read into its frame and updates. */
|
|
119
|
+
export interface IRpmUpdateInfo extends IRpmXmlFrame {
|
|
120
|
+
/** The decompressed document (a copy for `'none'`); every `offset` indexes into it. */
|
|
121
|
+
readonly decoded: Uint8Array;
|
|
122
|
+
/** Every `<update>` in document order, duplicates included. */
|
|
123
|
+
readonly updates: readonly IRpmUpdateInfoUpdate[];
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Reads a `primary`, `filelists` or `other` document (`.xml`, `.xml.gz`,
|
|
127
|
+
* `.xml.xz`, `.xml.zst`; the caller names `compression` and `document`) into
|
|
128
|
+
* its frame and `<package>` units. The XML rules are the strict scanner's
|
|
129
|
+
* (see `IRpmXmlFrame`; any refusal is `malformed-index`): the root must be
|
|
130
|
+
* `<metadata>`, `<filelists>` or `<otherdata>` for the document, and its
|
|
131
|
+
* children `<package>` elements with only whitespace between them, which is
|
|
132
|
+
* not returned. A package without its key (primary `<checksum pkgid="YES">`,
|
|
133
|
+
* filelists and other `pkgid`) is `missing-field` (`pkgid`); a package with
|
|
134
|
+
* two of an element the view reads (`<name>`, `<arch>`, `<version>`, `<size>`,
|
|
135
|
+
* a key `<checksum>`) is `malformed-index`.
|
|
136
|
+
*
|
|
137
|
+
* Bounds: the decoded document by `maxIndexBytes`, packages and files per
|
|
138
|
+
* package by `maxEntries`, one package by `maxMetadataBytes`, one start tag
|
|
139
|
+
* by `maxHeaderBytes`. Duplicates are kept; all bytes are views into `decoded`.
|
|
140
|
+
*/
|
|
141
|
+
export declare function readRpmRepodata(inputArg: {
|
|
142
|
+
bytes: Uint8Array;
|
|
143
|
+
compression: TLinuxCompression;
|
|
144
|
+
document: TRpmRepodataDocument;
|
|
145
|
+
limits?: Partial<ILinuxPackageLimits>;
|
|
146
|
+
}): Promise<IRpmRepodata>;
|
|
147
|
+
/**
|
|
148
|
+
* Reads an `updateinfo` document into its frame and `<update>` units: the
|
|
149
|
+
* root must be `<updates>`, the unit key is the `<id>` text (none is
|
|
150
|
+
* `missing-field`, two are `malformed-index`), and the packages are the
|
|
151
|
+
* `<pkglist><collection short><package …><filename>` entries in order (a
|
|
152
|
+
* package with two `<filename>` elements is `malformed-index`). XML rules,
|
|
153
|
+
* bounds and ownership as `readRpmRepodata`; packages per update count against
|
|
154
|
+
* `maxEntries`.
|
|
155
|
+
*/
|
|
156
|
+
export declare function readRpmUpdateInfo(inputArg: {
|
|
157
|
+
bytes: Uint8Array;
|
|
158
|
+
compression: TLinuxCompression;
|
|
159
|
+
limits?: Partial<ILinuxPackageLimits>;
|
|
160
|
+
}): Promise<IRpmUpdateInfo>;
|
|
161
|
+
/**
|
|
162
|
+
* Reads a plain `repomd.xml` into its frame, `<data>` units and the other
|
|
163
|
+
* root children (kept raw, in `otherElements`). A `<data>` without a `type`
|
|
164
|
+
* attribute, `<checksum>` or `<location href>` is `missing-field`; a `<data>`
|
|
165
|
+
* with two of `<checksum>`, `<open-checksum>`, `<location>`, `<timestamp>`,
|
|
166
|
+
* `<size>` or `<open-size>` is `malformed-index`. XML rules and bounds as
|
|
167
|
+
* `readRpmRepodata` (the plain input counts against `maxIndexBytes`); all
|
|
168
|
+
* bytes are views into a copy of the input.
|
|
169
|
+
*/
|
|
170
|
+
export declare function readRpmRepomd(inputArg: {
|
|
171
|
+
bytes: Uint8Array;
|
|
172
|
+
limits?: Partial<ILinuxPackageLimits>;
|
|
173
|
+
}): Promise<IRpmRepomd>;
|