@verdaccio/core 9.0.0-next-9.3 → 9.0.0-next-9.4
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/build/_virtual/_rolldown/runtime.js +33 -0
- package/build/_virtual/_rolldown/runtime.mjs +13 -0
- package/build/auth-utils.d.ts +1 -1
- package/build/auth-utils.js +23 -25
- package/build/auth-utils.js.map +1 -1
- package/build/auth-utils.mjs +32 -0
- package/build/auth-utils.mjs.map +1 -0
- package/build/constants.js +179 -155
- package/build/constants.js.map +1 -1
- package/build/constants.mjs +163 -0
- package/build/constants.mjs.map +1 -0
- package/build/crypto-utils.d.ts +1 -1
- package/build/crypto-utils.js +33 -29
- package/build/crypto-utils.js.map +1 -1
- package/build/crypto-utils.mjs +40 -0
- package/build/crypto-utils.mjs.map +1 -0
- package/build/error-utils.d.ts +1 -1
- package/build/error-utils.js +92 -80
- package/build/error-utils.js.map +1 -1
- package/build/error-utils.mjs +107 -0
- package/build/error-utils.mjs.map +1 -0
- package/build/file-utils.js +35 -31
- package/build/file-utils.js.map +1 -1
- package/build/file-utils.mjs +35 -0
- package/build/file-utils.mjs.map +1 -0
- package/build/index.d.ts +2 -1
- package/build/index.js +118 -183
- package/build/index.mjs +14 -0
- package/build/pkg-utils.d.ts +1 -1
- package/build/pkg-utils.js +60 -76
- package/build/pkg-utils.js.map +1 -1
- package/build/pkg-utils.mjs +69 -0
- package/build/pkg-utils.mjs.map +1 -0
- package/build/plugin-utils.d.ts +4 -4
- package/build/plugin-utils.js +27 -78
- package/build/plugin-utils.js.map +1 -1
- package/build/plugin-utils.mjs +26 -0
- package/build/plugin-utils.mjs.map +1 -0
- package/build/schemes/publish-manifest.js +33 -43
- package/build/schemes/publish-manifest.js.map +1 -1
- package/build/schemes/publish-manifest.mjs +36 -0
- package/build/schemes/publish-manifest.mjs.map +1 -0
- package/build/schemes/unpublish-manifest.js +51 -72
- package/build/schemes/unpublish-manifest.js.map +1 -1
- package/build/schemes/unpublish-manifest.mjs +54 -0
- package/build/schemes/unpublish-manifest.mjs.map +1 -0
- package/build/search-utils.js +9 -9
- package/build/search-utils.js.map +1 -1
- package/build/search-utils.mjs +8 -0
- package/build/search-utils.mjs.map +1 -0
- package/build/stream-utils.d.ts +1 -2
- package/build/stream-utils.js +29 -28
- package/build/stream-utils.js.map +1 -1
- package/build/stream-utils.mjs +30 -0
- package/build/stream-utils.mjs.map +1 -0
- package/build/string-utils.js +31 -34
- package/build/string-utils.js.map +1 -1
- package/build/string-utils.mjs +31 -0
- package/build/string-utils.mjs.map +1 -0
- package/build/tarball-utils.js +40 -39
- package/build/tarball-utils.js.map +1 -1
- package/build/tarball-utils.mjs +46 -0
- package/build/tarball-utils.mjs.map +1 -0
- package/build/validation-utils.d.ts +1 -1
- package/build/validation-utils.js +78 -112
- package/build/validation-utils.js.map +1 -1
- package/build/validation-utils.mjs +91 -0
- package/build/validation-utils.mjs.map +1 -0
- package/build/warning-utils.js +52 -52
- package/build/warning-utils.js.map +1 -1
- package/build/warning-utils.mjs +62 -0
- package/build/warning-utils.mjs.map +1 -0
- package/package.json +17 -6
- package/build/index.js.map +0 -1
- package/build/path-utils.js +0 -2
- package/build/path-utils.js.map +0 -1
|
@@ -1,77 +1,56 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.js");
|
|
2
|
+
let ajv = require("ajv");
|
|
3
|
+
ajv = require_runtime.__toESM(ajv);
|
|
4
|
+
//#region src/schemes/unpublish-manifest.ts
|
|
5
|
+
var validate = new ajv.default().compile({
|
|
6
|
+
type: "object",
|
|
7
|
+
properties: {
|
|
8
|
+
name: { type: "string" },
|
|
9
|
+
versions: {
|
|
10
|
+
type: "object",
|
|
11
|
+
minProperties: 1
|
|
12
|
+
},
|
|
13
|
+
_rev: { type: "string" },
|
|
14
|
+
_id: { type: "string" },
|
|
15
|
+
time: {
|
|
16
|
+
type: "object",
|
|
17
|
+
properties: {
|
|
18
|
+
created: { type: "string" },
|
|
19
|
+
modified: { type: "string" }
|
|
20
|
+
},
|
|
21
|
+
patternProperties: { "^[0-9]+\\.[0-9]+\\.[0-9]+-\\d+$": { type: "string" } },
|
|
22
|
+
additionalProperties: true
|
|
23
|
+
},
|
|
24
|
+
readme: { type: "string" },
|
|
25
|
+
"dist-tags": {
|
|
26
|
+
type: "object",
|
|
27
|
+
properties: { latest: { type: "string" } },
|
|
28
|
+
required: ["latest"],
|
|
29
|
+
additionalProperties: true
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
required: [
|
|
33
|
+
"name",
|
|
34
|
+
"versions",
|
|
35
|
+
"dist-tags",
|
|
36
|
+
"_rev",
|
|
37
|
+
"_id",
|
|
38
|
+
"readme",
|
|
39
|
+
"time"
|
|
40
|
+
],
|
|
41
|
+
additionalProperties: true
|
|
5
42
|
});
|
|
6
|
-
exports.validateUnPublishSingleVersion = validateUnPublishSingleVersion;
|
|
7
|
-
var _ajv = _interopRequireDefault(require("ajv"));
|
|
8
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
-
const ajv = new _ajv.default();
|
|
10
|
-
// @ts-ignore
|
|
11
|
-
const schema = {
|
|
12
|
-
type: 'object',
|
|
13
|
-
properties: {
|
|
14
|
-
name: {
|
|
15
|
-
type: 'string'
|
|
16
|
-
},
|
|
17
|
-
versions: {
|
|
18
|
-
type: 'object',
|
|
19
|
-
minProperties: 1
|
|
20
|
-
},
|
|
21
|
-
_rev: {
|
|
22
|
-
type: 'string'
|
|
23
|
-
},
|
|
24
|
-
_id: {
|
|
25
|
-
type: 'string'
|
|
26
|
-
},
|
|
27
|
-
time: {
|
|
28
|
-
type: 'object',
|
|
29
|
-
properties: {
|
|
30
|
-
created: {
|
|
31
|
-
type: 'string'
|
|
32
|
-
},
|
|
33
|
-
modified: {
|
|
34
|
-
type: 'string'
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
patternProperties: {
|
|
38
|
-
'^[0-9]+\\.[0-9]+\\.[0-9]+-\\d+$': {
|
|
39
|
-
type: 'string'
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
additionalProperties: true
|
|
43
|
-
},
|
|
44
|
-
readme: {
|
|
45
|
-
type: 'string'
|
|
46
|
-
},
|
|
47
|
-
'dist-tags': {
|
|
48
|
-
type: 'object',
|
|
49
|
-
properties: {
|
|
50
|
-
latest: {
|
|
51
|
-
type: 'string'
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
required: ['latest'],
|
|
55
|
-
additionalProperties: true
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
required: ['name', 'versions', 'dist-tags', '_rev', '_id', 'readme', 'time'],
|
|
59
|
-
additionalProperties: true
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
// validate is a type guard for MyData - type is inferred from schema type
|
|
63
|
-
const validate = ajv.compile(schema);
|
|
64
|
-
|
|
65
43
|
/**
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
44
|
+
* Validate if a manifest has the correct structure when a new package
|
|
45
|
+
* is being created. The properties name, versions and _attachments must contain 1 element.
|
|
46
|
+
* @param data a manifest object
|
|
47
|
+
* @returns boolean
|
|
48
|
+
*/
|
|
71
49
|
function validateUnPublishSingleVersion(manifest) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
return validate(manifest);
|
|
50
|
+
if (!manifest) return false;
|
|
51
|
+
return validate(manifest);
|
|
76
52
|
}
|
|
53
|
+
//#endregion
|
|
54
|
+
exports.validateUnPublishSingleVersion = validateUnPublishSingleVersion;
|
|
55
|
+
|
|
77
56
|
//# sourceMappingURL=unpublish-manifest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unpublish-manifest.js","names":[
|
|
1
|
+
{"version":3,"file":"unpublish-manifest.js","names":[],"sources":["../../src/schemes/unpublish-manifest.ts"],"sourcesContent":["import type { JSONSchemaType } from 'ajv';\nimport Ajv from 'ajv';\n\nconst ajv = new Ajv();\n\ninterface Manifest {\n name: string;\n versions: Record<string, unknown>;\n _rev: string;\n _id: string;\n time: {\n created: string;\n modified: string;\n [key: string]: string; // Allows pattern properties such as version numbers\n };\n readme: string;\n 'dist-tags': {\n latest: string;\n [key: string]: unknown; // Allows additional properties\n };\n}\n\n// @ts-ignore\nconst schema: JSONSchemaType<Manifest> = {\n type: 'object',\n properties: {\n name: { type: 'string' },\n versions: { type: 'object', minProperties: 1 },\n _rev: { type: 'string' },\n _id: { type: 'string' },\n time: {\n type: 'object',\n properties: {\n created: { type: 'string' },\n modified: { type: 'string' },\n },\n patternProperties: {\n '^[0-9]+\\\\.[0-9]+\\\\.[0-9]+-\\\\d+$': { type: 'string' },\n },\n additionalProperties: true,\n },\n readme: { type: 'string' },\n 'dist-tags': {\n type: 'object',\n properties: {\n latest: { type: 'string' },\n },\n required: ['latest'],\n additionalProperties: true,\n },\n },\n required: ['name', 'versions', 'dist-tags', '_rev', '_id', 'readme', 'time'],\n additionalProperties: true,\n};\n\n// validate is a type guard for MyData - type is inferred from schema type\nconst validate = ajv.compile(schema);\n\n/**\n * Validate if a manifest has the correct structure when a new package\n * is being created. The properties name, versions and _attachments must contain 1 element.\n * @param data a manifest object\n * @returns boolean\n */\nexport function validateUnPublishSingleVersion(manifest: any) {\n if (!manifest) {\n return false;\n }\n return validate(manifest);\n}\n"],"mappings":";;;;AAwDA,IAAM,WArDM,IAAI,IAAA,SAAK,CAqDA,QAjCoB;CACvC,MAAM;CACN,YAAY;EACV,MAAM,EAAE,MAAM,UAAU;EACxB,UAAU;GAAE,MAAM;GAAU,eAAe;GAAG;EAC9C,MAAM,EAAE,MAAM,UAAU;EACxB,KAAK,EAAE,MAAM,UAAU;EACvB,MAAM;GACJ,MAAM;GACN,YAAY;IACV,SAAS,EAAE,MAAM,UAAU;IAC3B,UAAU,EAAE,MAAM,UAAU;IAC7B;GACD,mBAAmB,EACjB,mCAAmC,EAAE,MAAM,UAAU,EACtD;GACD,sBAAsB;GACvB;EACD,QAAQ,EAAE,MAAM,UAAU;EAC1B,aAAa;GACX,MAAM;GACN,YAAY,EACV,QAAQ,EAAE,MAAM,UAAU,EAC3B;GACD,UAAU,CAAC,SAAS;GACpB,sBAAsB;GACvB;EACF;CACD,UAAU;EAAC;EAAQ;EAAY;EAAa;EAAQ;EAAO;EAAU;EAAO;CAC5E,sBAAsB;CACvB,CAGmC;;;;;;;AAQpC,SAAgB,+BAA+B,UAAe;AAC5D,KAAI,CAAC,SACH,QAAO;AAET,QAAO,SAAS,SAAS"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import Ajv from "ajv";
|
|
2
|
+
//#region src/schemes/unpublish-manifest.ts
|
|
3
|
+
var validate = new Ajv().compile({
|
|
4
|
+
type: "object",
|
|
5
|
+
properties: {
|
|
6
|
+
name: { type: "string" },
|
|
7
|
+
versions: {
|
|
8
|
+
type: "object",
|
|
9
|
+
minProperties: 1
|
|
10
|
+
},
|
|
11
|
+
_rev: { type: "string" },
|
|
12
|
+
_id: { type: "string" },
|
|
13
|
+
time: {
|
|
14
|
+
type: "object",
|
|
15
|
+
properties: {
|
|
16
|
+
created: { type: "string" },
|
|
17
|
+
modified: { type: "string" }
|
|
18
|
+
},
|
|
19
|
+
patternProperties: { "^[0-9]+\\.[0-9]+\\.[0-9]+-\\d+$": { type: "string" } },
|
|
20
|
+
additionalProperties: true
|
|
21
|
+
},
|
|
22
|
+
readme: { type: "string" },
|
|
23
|
+
"dist-tags": {
|
|
24
|
+
type: "object",
|
|
25
|
+
properties: { latest: { type: "string" } },
|
|
26
|
+
required: ["latest"],
|
|
27
|
+
additionalProperties: true
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
required: [
|
|
31
|
+
"name",
|
|
32
|
+
"versions",
|
|
33
|
+
"dist-tags",
|
|
34
|
+
"_rev",
|
|
35
|
+
"_id",
|
|
36
|
+
"readme",
|
|
37
|
+
"time"
|
|
38
|
+
],
|
|
39
|
+
additionalProperties: true
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Validate if a manifest has the correct structure when a new package
|
|
43
|
+
* is being created. The properties name, versions and _attachments must contain 1 element.
|
|
44
|
+
* @param data a manifest object
|
|
45
|
+
* @returns boolean
|
|
46
|
+
*/
|
|
47
|
+
function validateUnPublishSingleVersion(manifest) {
|
|
48
|
+
if (!manifest) return false;
|
|
49
|
+
return validate(manifest);
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { validateUnPublishSingleVersion };
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=unpublish-manifest.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unpublish-manifest.mjs","names":[],"sources":["../../src/schemes/unpublish-manifest.ts"],"sourcesContent":["import type { JSONSchemaType } from 'ajv';\nimport Ajv from 'ajv';\n\nconst ajv = new Ajv();\n\ninterface Manifest {\n name: string;\n versions: Record<string, unknown>;\n _rev: string;\n _id: string;\n time: {\n created: string;\n modified: string;\n [key: string]: string; // Allows pattern properties such as version numbers\n };\n readme: string;\n 'dist-tags': {\n latest: string;\n [key: string]: unknown; // Allows additional properties\n };\n}\n\n// @ts-ignore\nconst schema: JSONSchemaType<Manifest> = {\n type: 'object',\n properties: {\n name: { type: 'string' },\n versions: { type: 'object', minProperties: 1 },\n _rev: { type: 'string' },\n _id: { type: 'string' },\n time: {\n type: 'object',\n properties: {\n created: { type: 'string' },\n modified: { type: 'string' },\n },\n patternProperties: {\n '^[0-9]+\\\\.[0-9]+\\\\.[0-9]+-\\\\d+$': { type: 'string' },\n },\n additionalProperties: true,\n },\n readme: { type: 'string' },\n 'dist-tags': {\n type: 'object',\n properties: {\n latest: { type: 'string' },\n },\n required: ['latest'],\n additionalProperties: true,\n },\n },\n required: ['name', 'versions', 'dist-tags', '_rev', '_id', 'readme', 'time'],\n additionalProperties: true,\n};\n\n// validate is a type guard for MyData - type is inferred from schema type\nconst validate = ajv.compile(schema);\n\n/**\n * Validate if a manifest has the correct structure when a new package\n * is being created. The properties name, versions and _attachments must contain 1 element.\n * @param data a manifest object\n * @returns boolean\n */\nexport function validateUnPublishSingleVersion(manifest: any) {\n if (!manifest) {\n return false;\n }\n return validate(manifest);\n}\n"],"mappings":";;AAwDA,IAAM,WArDM,IAAI,KAAK,CAqDA,QAjCoB;CACvC,MAAM;CACN,YAAY;EACV,MAAM,EAAE,MAAM,UAAU;EACxB,UAAU;GAAE,MAAM;GAAU,eAAe;GAAG;EAC9C,MAAM,EAAE,MAAM,UAAU;EACxB,KAAK,EAAE,MAAM,UAAU;EACvB,MAAM;GACJ,MAAM;GACN,YAAY;IACV,SAAS,EAAE,MAAM,UAAU;IAC3B,UAAU,EAAE,MAAM,UAAU;IAC7B;GACD,mBAAmB,EACjB,mCAAmC,EAAE,MAAM,UAAU,EACtD;GACD,sBAAsB;GACvB;EACD,QAAQ,EAAE,MAAM,UAAU;EAC1B,aAAa;GACX,MAAM;GACN,YAAY,EACV,QAAQ,EAAE,MAAM,UAAU,EAC3B;GACD,UAAU,CAAC,SAAS;GACpB,sBAAsB;GACvB;EACF;CACD,UAAU;EAAC;EAAQ;EAAY;EAAa;EAAQ;EAAO;EAAU;EAAO;CAC5E,sBAAsB;CACvB,CAGmC;;;;;;;AAQpC,SAAgB,+BAA+B,UAAe;AAC5D,KAAI,CAAC,SACH,QAAO;AAET,QAAO,SAAS,SAAS"}
|
package/build/search-utils.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
//#region src/search-utils.ts
|
|
2
|
+
var search_utils_exports = /* @__PURE__ */ require("./_virtual/_rolldown/runtime.js").__exportAll({ UNSCOPED: () => UNSCOPED });
|
|
3
|
+
var UNSCOPED = "unscoped";
|
|
4
|
+
//#endregion
|
|
5
|
+
Object.defineProperty(exports, "search_utils_exports", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return search_utils_exports;
|
|
9
|
+
}
|
|
5
10
|
});
|
|
6
|
-
exports.UNSCOPED = void 0;
|
|
7
|
-
// @deprecated use @verdaccio/types
|
|
8
|
-
|
|
9
|
-
// @deprecated use @verdaccio/types
|
|
10
11
|
|
|
11
|
-
const UNSCOPED = exports.UNSCOPED = 'unscoped';
|
|
12
12
|
//# sourceMappingURL=search-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-utils.js","names":[
|
|
1
|
+
{"version":3,"file":"search-utils.js","names":[],"sources":["../src/search-utils.ts"],"sourcesContent":["export type SearchMetrics = {\n quality: number;\n popularity: number;\n maintenance: number;\n};\nexport type UnStable = {\n flags?: {\n // if is false is not be included in search results (majority are stable)\n unstable?: boolean;\n };\n};\nexport type SearchItemPkg = {\n name: string;\n scoped?: string;\n path?: string;\n time?: number | Date;\n};\n\ntype PrivatePackage = {\n // note: prefixed to avoid external conflicts\n\n // the package is published as private\n verdaccioPrivate?: boolean;\n // if the package is not private but is cached\n verdaccioPkgCached?: boolean;\n};\n\nexport interface SearchItem extends UnStable, PrivatePackage {\n package: SearchItemPkg;\n score: Score;\n}\n\nexport type Score = {\n final: number;\n detail: SearchMetrics;\n};\n\nexport type SearchResults = {\n objects: SearchItemPkg[];\n total: number;\n time: string;\n};\n\n// @deprecated use @verdaccio/types\ntype PublisherMaintainer = {\n username: string;\n email: string;\n};\n\n// @deprecated use @verdaccio/types\nexport type SearchPackageBody = {\n name: string;\n scope: string;\n description: string;\n author: string | PublisherMaintainer;\n version: string;\n keywords: string | string[] | undefined;\n date: string;\n links?: {\n npm: string; // only include placeholder for URL eg: {url}/{packageName}\n homepage?: string;\n repository?: string;\n bugs?: string;\n };\n publisher?: any;\n maintainers?: PublisherMaintainer[];\n};\n\nexport interface SearchPackageItem extends UnStable, PrivatePackage {\n package: SearchPackageBody;\n score: Score;\n searchScore?: number;\n}\n\nexport const UNSCOPED = 'unscoped';\n\nexport type SearchQuery = {\n text: string;\n size?: number;\n from?: number;\n} & SearchMetrics;\n"],"mappings":";;AA0EA,IAAa,WAAW"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { __exportAll } from "./_virtual/_rolldown/runtime.mjs";
|
|
2
|
+
//#region src/search-utils.ts
|
|
3
|
+
var search_utils_exports = /* @__PURE__ */ __exportAll({ UNSCOPED: () => UNSCOPED });
|
|
4
|
+
var UNSCOPED = "unscoped";
|
|
5
|
+
//#endregion
|
|
6
|
+
export { search_utils_exports };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=search-utils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-utils.mjs","names":[],"sources":["../src/search-utils.ts"],"sourcesContent":["export type SearchMetrics = {\n quality: number;\n popularity: number;\n maintenance: number;\n};\nexport type UnStable = {\n flags?: {\n // if is false is not be included in search results (majority are stable)\n unstable?: boolean;\n };\n};\nexport type SearchItemPkg = {\n name: string;\n scoped?: string;\n path?: string;\n time?: number | Date;\n};\n\ntype PrivatePackage = {\n // note: prefixed to avoid external conflicts\n\n // the package is published as private\n verdaccioPrivate?: boolean;\n // if the package is not private but is cached\n verdaccioPkgCached?: boolean;\n};\n\nexport interface SearchItem extends UnStable, PrivatePackage {\n package: SearchItemPkg;\n score: Score;\n}\n\nexport type Score = {\n final: number;\n detail: SearchMetrics;\n};\n\nexport type SearchResults = {\n objects: SearchItemPkg[];\n total: number;\n time: string;\n};\n\n// @deprecated use @verdaccio/types\ntype PublisherMaintainer = {\n username: string;\n email: string;\n};\n\n// @deprecated use @verdaccio/types\nexport type SearchPackageBody = {\n name: string;\n scope: string;\n description: string;\n author: string | PublisherMaintainer;\n version: string;\n keywords: string | string[] | undefined;\n date: string;\n links?: {\n npm: string; // only include placeholder for URL eg: {url}/{packageName}\n homepage?: string;\n repository?: string;\n bugs?: string;\n };\n publisher?: any;\n maintainers?: PublisherMaintainer[];\n};\n\nexport interface SearchPackageItem extends UnStable, PrivatePackage {\n package: SearchPackageBody;\n score: Score;\n searchScore?: number;\n}\n\nexport const UNSCOPED = 'unscoped';\n\nexport type SearchQuery = {\n text: string;\n size?: number;\n from?: number;\n} & SearchMetrics;\n"],"mappings":";;;AA0EA,IAAa,WAAW"}
|
package/build/stream-utils.d.ts
CHANGED
package/build/stream-utils.js
CHANGED
|
@@ -1,34 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
const require_runtime = require("./_virtual/_rolldown/runtime.js");
|
|
2
|
+
let node_stream = require("node:stream");
|
|
3
|
+
//#region src/stream-utils.ts
|
|
4
|
+
var stream_utils_exports = /* @__PURE__ */ require_runtime.__exportAll({
|
|
5
|
+
readableToString: () => readableToString,
|
|
6
|
+
transformObjectToString: () => transformObjectToString
|
|
5
7
|
});
|
|
6
|
-
exports.transformObjectToString = exports.readableToString = void 0;
|
|
7
|
-
var _nodeStream = require("node:stream");
|
|
8
8
|
/**
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
const buffer = Buffer.concat(chunks);
|
|
17
|
-
const str = buffer.toString('utf-8');
|
|
18
|
-
return str;
|
|
9
|
+
* Converts a buffer stream to a string.
|
|
10
|
+
*/
|
|
11
|
+
var readableToString = async (stream) => {
|
|
12
|
+
const chunks = [];
|
|
13
|
+
for await (const chunk of stream) chunks.push(Buffer.from(chunk));
|
|
14
|
+
return Buffer.concat(chunks).toString("utf-8");
|
|
19
15
|
};
|
|
20
|
-
|
|
21
16
|
/**
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
});
|
|
17
|
+
* Transform stream object mode to string
|
|
18
|
+
**/
|
|
19
|
+
var transformObjectToString = () => {
|
|
20
|
+
return new node_stream.Transform({
|
|
21
|
+
objectMode: true,
|
|
22
|
+
transform: (chunk, encoding, callback) => {
|
|
23
|
+
callback(null, JSON.stringify(chunk));
|
|
24
|
+
}
|
|
25
|
+
});
|
|
32
26
|
};
|
|
33
|
-
|
|
27
|
+
//#endregion
|
|
28
|
+
Object.defineProperty(exports, "stream_utils_exports", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
get: function() {
|
|
31
|
+
return stream_utils_exports;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
|
|
34
35
|
//# sourceMappingURL=stream-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-utils.js","names":[
|
|
1
|
+
{"version":3,"file":"stream-utils.js","names":[],"sources":["../src/stream-utils.ts"],"sourcesContent":["import type { Readable } from 'node:stream';\nimport { Transform } from 'node:stream';\n\n/**\n * Converts a buffer stream to a string.\n */\nconst readableToString = async (stream: Readable) => {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n chunks.push(Buffer.from(chunk));\n }\n const buffer = Buffer.concat(chunks);\n const str = buffer.toString('utf-8');\n return str;\n};\n\n/**\n * Transform stream object mode to string\n **/\nconst transformObjectToString = () => {\n return new Transform({\n objectMode: true,\n transform: (chunk, encoding, callback) => {\n callback(null, JSON.stringify(chunk));\n },\n });\n};\n\nexport { readableToString, transformObjectToString };\n"],"mappings":";;;;;;;;;;AAMA,IAAM,mBAAmB,OAAO,WAAqB;CACnD,MAAM,SAAmB,EAAE;AAC3B,YAAW,MAAM,SAAS,OACxB,QAAO,KAAK,OAAO,KAAK,MAAM,CAAC;AAIjC,QAFe,OAAO,OAAO,OAAO,CACjB,SAAS,QAAQ;;;;;AAOtC,IAAM,gCAAgC;AACpC,QAAO,IAAI,YAAA,UAAU;EACnB,YAAY;EACZ,YAAY,OAAO,UAAU,aAAa;AACxC,YAAS,MAAM,KAAK,UAAU,MAAM,CAAC;;EAExC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { __exportAll } from "./_virtual/_rolldown/runtime.mjs";
|
|
2
|
+
import { Transform } from "node:stream";
|
|
3
|
+
//#region src/stream-utils.ts
|
|
4
|
+
var stream_utils_exports = /* @__PURE__ */ __exportAll({
|
|
5
|
+
readableToString: () => readableToString,
|
|
6
|
+
transformObjectToString: () => transformObjectToString
|
|
7
|
+
});
|
|
8
|
+
/**
|
|
9
|
+
* Converts a buffer stream to a string.
|
|
10
|
+
*/
|
|
11
|
+
var readableToString = async (stream) => {
|
|
12
|
+
const chunks = [];
|
|
13
|
+
for await (const chunk of stream) chunks.push(Buffer.from(chunk));
|
|
14
|
+
return Buffer.concat(chunks).toString("utf-8");
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Transform stream object mode to string
|
|
18
|
+
**/
|
|
19
|
+
var transformObjectToString = () => {
|
|
20
|
+
return new Transform({
|
|
21
|
+
objectMode: true,
|
|
22
|
+
transform: (chunk, encoding, callback) => {
|
|
23
|
+
callback(null, JSON.stringify(chunk));
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
//#endregion
|
|
28
|
+
export { stream_utils_exports };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=stream-utils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-utils.mjs","names":[],"sources":["../src/stream-utils.ts"],"sourcesContent":["import type { Readable } from 'node:stream';\nimport { Transform } from 'node:stream';\n\n/**\n * Converts a buffer stream to a string.\n */\nconst readableToString = async (stream: Readable) => {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n chunks.push(Buffer.from(chunk));\n }\n const buffer = Buffer.concat(chunks);\n const str = buffer.toString('utf-8');\n return str;\n};\n\n/**\n * Transform stream object mode to string\n **/\nconst transformObjectToString = () => {\n return new Transform({\n objectMode: true,\n transform: (chunk, encoding, callback) => {\n callback(null, JSON.stringify(chunk));\n },\n });\n};\n\nexport { readableToString, transformObjectToString };\n"],"mappings":";;;;;;;;;;AAMA,IAAM,mBAAmB,OAAO,WAAqB;CACnD,MAAM,SAAmB,EAAE;AAC3B,YAAW,MAAM,SAAS,OACxB,QAAO,KAAK,OAAO,KAAK,MAAM,CAAC;AAIjC,QAFe,OAAO,OAAO,OAAO,CACjB,SAAS,QAAQ;;;;;AAOtC,IAAM,gCAAgC;AACpC,QAAO,IAAI,UAAU;EACnB,YAAY;EACZ,YAAY,OAAO,UAAU,aAAa;AACxC,YAAS,MAAM,KAAK,UAAU,MAAM,CAAC;;EAExC,CAAC"}
|
package/build/string-utils.js
CHANGED
|
@@ -1,38 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getByQualityPriorityValue = getByQualityPriorityValue;
|
|
1
|
+
//#region src/string-utils.ts
|
|
2
|
+
var string_utils_exports = /* @__PURE__ */ require("./_virtual/_rolldown/runtime.js").__exportAll({ getByQualityPriorityValue: () => getByQualityPriorityValue });
|
|
7
3
|
/**
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
4
|
+
* Quality values, or q-values and q-factors, are used to describe the order
|
|
5
|
+
* of priority of values in a comma-separated list.
|
|
6
|
+
* It is a special syntax allowed in some HTTP headers and in HTML.
|
|
7
|
+
* https://developer.mozilla.org/en-US/docs/Glossary/Quality_values
|
|
8
|
+
* @param headerValue
|
|
9
|
+
*/
|
|
14
10
|
function getByQualityPriorityValue(headerValue) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
acc.push([qList[0], 0]);
|
|
31
|
-
}
|
|
32
|
-
return acc;
|
|
33
|
-
}, []).sort(function (a, b) {
|
|
34
|
-
return b[1] - a[1];
|
|
35
|
-
});
|
|
36
|
-
return header[0];
|
|
11
|
+
if (typeof headerValue !== "string") return "";
|
|
12
|
+
const split = headerValue.split(",");
|
|
13
|
+
if (split.length <= 1) return split[0].split(";")[0];
|
|
14
|
+
const [header] = split.reduce((acc, item) => {
|
|
15
|
+
const qList = item.split(";");
|
|
16
|
+
if (qList.length > 1) {
|
|
17
|
+
const [accept, q] = qList;
|
|
18
|
+
const [, query] = q.split("=");
|
|
19
|
+
acc.push([accept.trim(), query ? query : 0]);
|
|
20
|
+
} else acc.push([qList[0], 0]);
|
|
21
|
+
return acc;
|
|
22
|
+
}, []).sort(function(a, b) {
|
|
23
|
+
return b[1] - a[1];
|
|
24
|
+
});
|
|
25
|
+
return header[0];
|
|
37
26
|
}
|
|
27
|
+
//#endregion
|
|
28
|
+
Object.defineProperty(exports, "string_utils_exports", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
get: function() {
|
|
31
|
+
return string_utils_exports;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
|
|
38
35
|
//# sourceMappingURL=string-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string-utils.js","names":[
|
|
1
|
+
{"version":3,"file":"string-utils.js","names":[],"sources":["../src/string-utils.ts"],"sourcesContent":["/**\n * Quality values, or q-values and q-factors, are used to describe the order\n * of priority of values in a comma-separated list.\n * It is a special syntax allowed in some HTTP headers and in HTML.\n * https://developer.mozilla.org/en-US/docs/Glossary/Quality_values\n * @param headerValue\n */\nexport function getByQualityPriorityValue(headerValue: string | undefined | null): string {\n if (typeof headerValue !== 'string') {\n return '';\n }\n\n const split = headerValue.split(',');\n\n if (split.length <= 1) {\n const qList = split[0].split(';');\n return qList[0];\n }\n\n const [header] = split\n .reduce((acc, item: string) => {\n const qList = item.split(';');\n if (qList.length > 1) {\n const [accept, q] = qList;\n const [, query] = q.split('=');\n acc.push([accept.trim(), query ? query : 0]);\n } else {\n acc.push([qList[0], 0]);\n }\n return acc;\n }, [] as any)\n .sort(function (a: number[], b: number[]) {\n return b[1] - a[1];\n });\n return header[0];\n}\n"],"mappings":";;;;;;;;;AAOA,SAAgB,0BAA0B,aAAgD;AACxF,KAAI,OAAO,gBAAgB,SACzB,QAAO;CAGT,MAAM,QAAQ,YAAY,MAAM,IAAI;AAEpC,KAAI,MAAM,UAAU,EAElB,QADc,MAAM,GAAG,MAAM,IAAI,CACpB;CAGf,MAAM,CAAC,UAAU,MACd,QAAQ,KAAK,SAAiB;EAC7B,MAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,MAAI,MAAM,SAAS,GAAG;GACpB,MAAM,CAAC,QAAQ,KAAK;GACpB,MAAM,GAAG,SAAS,EAAE,MAAM,IAAI;AAC9B,OAAI,KAAK,CAAC,OAAO,MAAM,EAAE,QAAQ,QAAQ,EAAE,CAAC;QAE5C,KAAI,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;AAEzB,SAAO;IACN,EAAE,CAAQ,CACZ,KAAK,SAAU,GAAa,GAAa;AACxC,SAAO,EAAE,KAAK,EAAE;GAChB;AACJ,QAAO,OAAO"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { __exportAll } from "./_virtual/_rolldown/runtime.mjs";
|
|
2
|
+
//#region src/string-utils.ts
|
|
3
|
+
var string_utils_exports = /* @__PURE__ */ __exportAll({ getByQualityPriorityValue: () => getByQualityPriorityValue });
|
|
4
|
+
/**
|
|
5
|
+
* Quality values, or q-values and q-factors, are used to describe the order
|
|
6
|
+
* of priority of values in a comma-separated list.
|
|
7
|
+
* It is a special syntax allowed in some HTTP headers and in HTML.
|
|
8
|
+
* https://developer.mozilla.org/en-US/docs/Glossary/Quality_values
|
|
9
|
+
* @param headerValue
|
|
10
|
+
*/
|
|
11
|
+
function getByQualityPriorityValue(headerValue) {
|
|
12
|
+
if (typeof headerValue !== "string") return "";
|
|
13
|
+
const split = headerValue.split(",");
|
|
14
|
+
if (split.length <= 1) return split[0].split(";")[0];
|
|
15
|
+
const [header] = split.reduce((acc, item) => {
|
|
16
|
+
const qList = item.split(";");
|
|
17
|
+
if (qList.length > 1) {
|
|
18
|
+
const [accept, q] = qList;
|
|
19
|
+
const [, query] = q.split("=");
|
|
20
|
+
acc.push([accept.trim(), query ? query : 0]);
|
|
21
|
+
} else acc.push([qList[0], 0]);
|
|
22
|
+
return acc;
|
|
23
|
+
}, []).sort(function(a, b) {
|
|
24
|
+
return b[1] - a[1];
|
|
25
|
+
});
|
|
26
|
+
return header[0];
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { string_utils_exports };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=string-utils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-utils.mjs","names":[],"sources":["../src/string-utils.ts"],"sourcesContent":["/**\n * Quality values, or q-values and q-factors, are used to describe the order\n * of priority of values in a comma-separated list.\n * It is a special syntax allowed in some HTTP headers and in HTML.\n * https://developer.mozilla.org/en-US/docs/Glossary/Quality_values\n * @param headerValue\n */\nexport function getByQualityPriorityValue(headerValue: string | undefined | null): string {\n if (typeof headerValue !== 'string') {\n return '';\n }\n\n const split = headerValue.split(',');\n\n if (split.length <= 1) {\n const qList = split[0].split(';');\n return qList[0];\n }\n\n const [header] = split\n .reduce((acc, item: string) => {\n const qList = item.split(';');\n if (qList.length > 1) {\n const [accept, q] = qList;\n const [, query] = q.split('=');\n acc.push([accept.trim(), query ? query : 0]);\n } else {\n acc.push([qList[0], 0]);\n }\n return acc;\n }, [] as any)\n .sort(function (a: number[], b: number[]) {\n return b[1] - a[1];\n });\n return header[0];\n}\n"],"mappings":";;;;;;;;;;AAOA,SAAgB,0BAA0B,aAAgD;AACxF,KAAI,OAAO,gBAAgB,SACzB,QAAO;CAGT,MAAM,QAAQ,YAAY,MAAM,IAAI;AAEpC,KAAI,MAAM,UAAU,EAElB,QADc,MAAM,GAAG,MAAM,IAAI,CACpB;CAGf,MAAM,CAAC,UAAU,MACd,QAAQ,KAAK,SAAiB;EAC7B,MAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,MAAI,MAAM,SAAS,GAAG;GACpB,MAAM,CAAC,QAAQ,KAAK;GACpB,MAAM,GAAG,SAAS,EAAE,MAAM,IAAI;AAC9B,OAAI,KAAK,CAAC,OAAO,MAAM,EAAE,QAAQ,QAAQ,EAAE,CAAC;QAE5C,KAAI,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;AAEzB,SAAO;IACN,EAAE,CAAQ,CACZ,KAAK,SAAU,GAAa,GAAa;AACxC,SAAO,EAAE,KAAK,EAAE;GAChB;AACJ,QAAO,OAAO"}
|
package/build/tarball-utils.js
CHANGED
|
@@ -1,50 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
const require_runtime = require("./_virtual/_rolldown/runtime.js");
|
|
2
|
+
let node_url = require("node:url");
|
|
3
|
+
//#region src/tarball-utils.ts
|
|
4
|
+
var tarball_utils_exports = /* @__PURE__ */ require_runtime.__exportAll({
|
|
5
|
+
composeTarballFromPackage: () => composeTarballFromPackage,
|
|
6
|
+
extractTarballFromUrl: () => extractTarballFromUrl,
|
|
7
|
+
getVersionFromTarball: () => getVersionFromTarball
|
|
5
8
|
});
|
|
6
|
-
exports.composeTarballFromPackage = composeTarballFromPackage;
|
|
7
|
-
exports.extractTarballFromUrl = extractTarballFromUrl;
|
|
8
|
-
exports.getVersionFromTarball = getVersionFromTarball;
|
|
9
|
-
var _nodeUrl = require("node:url");
|
|
10
9
|
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
* Return package version from tarball name
|
|
11
|
+
*
|
|
12
|
+
* test-1.2.4.tgz -> 1.2.4
|
|
13
|
+
* @param {String} fileName
|
|
14
|
+
* @returns {String}
|
|
15
|
+
*/
|
|
17
16
|
function getVersionFromTarball(fileName) {
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
const groups = fileName.replace(/\.tgz$/, "").match(/^[^/]+-(\d+\.\d+\.\d+.*)/);
|
|
18
|
+
return groups !== null ? groups[1] : void 0;
|
|
20
19
|
}
|
|
21
|
-
|
|
22
20
|
/**
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
21
|
+
* Extract the tarball name from a registry dist url
|
|
22
|
+
*
|
|
23
|
+
* https://registry.npmjs.org/test/-/test-0.0.2.tgz -> test-0.0.2.tgz
|
|
24
|
+
* @param tarball tarball url
|
|
25
|
+
* @returns tarball filename
|
|
26
|
+
*/
|
|
29
27
|
function extractTarballFromUrl(url) {
|
|
30
|
-
|
|
31
|
-
return urlObject.pathname.replace(/^.*\//, '');
|
|
28
|
+
return new node_url.URL(url).pathname.replace(/^.*\//, "");
|
|
32
29
|
}
|
|
33
|
-
|
|
34
30
|
/**
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
31
|
+
* Build the tarball filename from paackage name and version
|
|
32
|
+
*
|
|
33
|
+
* test, 1.2.4 -> test-1.2.4.tgz
|
|
34
|
+
* @scope/name, 1.2.4 -> name-1.2.4.tgz
|
|
35
|
+
* @param name package name
|
|
36
|
+
* @param version package version
|
|
37
|
+
* @returns tarball filename
|
|
38
|
+
*/
|
|
43
39
|
function composeTarballFromPackage(name, version) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
} else {
|
|
47
|
-
return `${name}-${version}.tgz`;
|
|
48
|
-
}
|
|
40
|
+
if (name.includes("/")) return `${name.split("/")[1]}-${version}.tgz`;
|
|
41
|
+
else return `${name}-${version}.tgz`;
|
|
49
42
|
}
|
|
43
|
+
//#endregion
|
|
44
|
+
Object.defineProperty(exports, "tarball_utils_exports", {
|
|
45
|
+
enumerable: true,
|
|
46
|
+
get: function() {
|
|
47
|
+
return tarball_utils_exports;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
50
51
|
//# sourceMappingURL=tarball-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tarball-utils.js","names":[
|
|
1
|
+
{"version":3,"file":"tarball-utils.js","names":[],"sources":["../src/tarball-utils.ts"],"sourcesContent":["import { URL } from 'node:url';\n\n/**\n * Return package version from tarball name\n *\n * test-1.2.4.tgz -> 1.2.4\n * @param {String} fileName\n * @returns {String}\n */\nexport function getVersionFromTarball(fileName: string): string | void {\n const groups = fileName.replace(/\\.tgz$/, '').match(/^[^/]+-(\\d+\\.\\d+\\.\\d+.*)/);\n\n return groups !== null ? groups[1] : undefined;\n}\n\n/**\n * Extract the tarball name from a registry dist url\n *\n * https://registry.npmjs.org/test/-/test-0.0.2.tgz -> test-0.0.2.tgz\n * @param tarball tarball url\n * @returns tarball filename\n */\nexport function extractTarballFromUrl(url: string): string {\n const urlObject = new URL(url);\n return urlObject.pathname.replace(/^.*\\//, '');\n}\n\n/**\n * Build the tarball filename from paackage name and version\n *\n * test, 1.2.4 -> test-1.2.4.tgz\n * @scope/name, 1.2.4 -> name-1.2.4.tgz\n * @param name package name\n * @param version package version\n * @returns tarball filename\n */\nexport function composeTarballFromPackage(name: string, version: string): string {\n if (name.includes('/')) {\n return `${name.split('/')[1]}-${version}.tgz`;\n } else {\n return `${name}-${version}.tgz`;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AASA,SAAgB,sBAAsB,UAAiC;CACrE,MAAM,SAAS,SAAS,QAAQ,UAAU,GAAG,CAAC,MAAM,2BAA2B;AAE/E,QAAO,WAAW,OAAO,OAAO,KAAK,KAAA;;;;;;;;;AAUvC,SAAgB,sBAAsB,KAAqB;AAEzD,QADkB,IAAI,SAAA,IAAI,IAAI,CACb,SAAS,QAAQ,SAAS,GAAG;;;;;;;;;;;AAYhD,SAAgB,0BAA0B,MAAc,SAAyB;AAC/E,KAAI,KAAK,SAAS,IAAI,CACpB,QAAO,GAAG,KAAK,MAAM,IAAI,CAAC,GAAG,GAAG,QAAQ;KAExC,QAAO,GAAG,KAAK,GAAG,QAAQ"}
|