@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.
Files changed (51) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/alpine/apkindexreader.d.ts +87 -0
  3. package/dist_ts/alpine/apkindexreader.js +193 -0
  4. package/dist_ts/arch/indexreader.d.ts +35 -0
  5. package/dist_ts/arch/indexreader.js +45 -0
  6. package/dist_ts/arch/reader.js +2 -2
  7. package/dist_ts/debian/indexbuilder.js +8 -23
  8. package/dist_ts/debian/indexreader.d.ts +107 -0
  9. package/dist_ts/debian/indexreader.js +274 -0
  10. package/dist_ts/debian/reader.js +6 -2
  11. package/dist_ts/debian/rules.d.ts +18 -0
  12. package/dist_ts/debian/rules.js +81 -2
  13. package/dist_ts/index.d.ts +14 -4
  14. package/dist_ts/index.js +9 -3
  15. package/dist_ts/readers/decompress.d.ts +14 -5
  16. package/dist_ts/readers/decompress.js +401 -26
  17. package/dist_ts/readers/document.d.ts +36 -0
  18. package/dist_ts/readers/document.js +110 -0
  19. package/dist_ts/rpm/repodata.d.ts +3 -2
  20. package/dist_ts/rpm/repodata.js +5 -4
  21. package/dist_ts/rpm/repodatareader.d.ts +173 -0
  22. package/dist_ts/rpm/repodatareader.js +414 -0
  23. package/dist_ts/rpm/xmlreader.d.ts +70 -0
  24. package/dist_ts/rpm/xmlreader.js +576 -0
  25. package/dist_ts/shared/errors.d.ts +12 -4
  26. package/dist_ts/shared/errors.js +1 -1
  27. package/dist_ts/shared/limits.d.ts +9 -2
  28. package/dist_ts/shared/limits.js +5 -2
  29. package/dist_ts/shared/types.d.ts +2 -0
  30. package/dist_ts/signing/verifiers.d.ts +43 -0
  31. package/dist_ts/signing/verifiers.js +81 -2
  32. package/package.json +1 -1
  33. package/readme.md +56 -3
  34. package/ts/00_commitinfo_data.ts +1 -1
  35. package/ts/alpine/apkindexreader.ts +265 -0
  36. package/ts/arch/indexreader.ts +66 -0
  37. package/ts/arch/reader.ts +3 -2
  38. package/ts/debian/indexbuilder.ts +13 -23
  39. package/ts/debian/indexreader.ts +372 -0
  40. package/ts/debian/reader.ts +7 -2
  41. package/ts/debian/rules.ts +83 -1
  42. package/ts/index.ts +40 -2
  43. package/ts/readers/decompress.ts +442 -32
  44. package/ts/readers/document.ts +136 -0
  45. package/ts/rpm/repodata.ts +4 -3
  46. package/ts/rpm/repodatareader.ts +582 -0
  47. package/ts/rpm/xmlreader.ts +680 -0
  48. package/ts/shared/errors.ts +13 -4
  49. package/ts/shared/limits.ts +10 -2
  50. package/ts/shared/types.ts +3 -0
  51. 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 isPrimaryPath(pathArg: string): boolean;
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. */
@@ -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 isPrimaryPath(pathArg) {
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 || isPrimaryPath(file.path));
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb2RhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9ycG0vcmVwb2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUg7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLE9BQWU7SUFDM0MsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sS0FBSyxtQkFBbUIsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BHLENBQUM7QUFFRCx3RkFBd0Y7QUFDeEYsTUFBTSxVQUFVLHFCQUFxQixDQUFDLFNBQTRCO0lBQ2hFLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztBQUM3RSxDQUFDO0FBRUQsbUdBQW1HO0FBQ25HLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUE0QjtJQUM3RCxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxTQUFTLENBQUM7SUFDbEQsT0FBTyxXQUFXLElBQUksSUFBSSxPQUFPLElBQUksWUFBWSxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksWUFBWSxNQUFNLENBQUM7QUFDN0YsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsVUFBK0I7SUFDM0QsT0FBTyxRQUFRLENBQ2IsVUFBVSxFQUNWO1FBQ0UsQ0FBQyxPQUFPLEVBQUUsdUNBQXVDLENBQUM7UUFDbEQsQ0FBQyxXQUFXLEVBQUUsb0NBQW9DLENBQUM7UUFDbkQsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQztLQUNoQyxFQUNELFVBQVUsQ0FBQyxHQUFHLENB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
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>;