@platforma-sdk/block-tools 2.3.0 → 2.3.2
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/cli.js +1 -1
- package/dist/cli.mjs +1 -1
- package/dist/{config-YukCegnp.mjs → config-BbxbO3Iw.mjs} +514 -500
- package/dist/config-BbxbO3Iw.mjs.map +1 -0
- package/dist/config-BczgUC2N.js +3 -0
- package/dist/config-BczgUC2N.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +109 -95
- package/dist/index.mjs.map +1 -1
- package/dist/io/folder_reader.d.ts +1 -15
- package/dist/io/folder_reader.d.ts.map +1 -1
- package/dist/util.d.ts +1 -0
- package/dist/util.d.ts.map +1 -1
- package/dist/v2/build_dist.d.ts.map +1 -1
- package/dist/v2/model/block_components.d.ts +297 -19
- package/dist/v2/model/block_components.d.ts.map +1 -1
- package/dist/v2/model/block_description.d.ts +281 -62
- package/dist/v2/model/block_description.d.ts.map +1 -1
- package/dist/v2/registry/registry.d.ts.map +1 -1
- package/dist/v2/registry/registry_reader.d.ts +6 -4
- package/dist/v2/registry/registry_reader.d.ts.map +1 -1
- package/dist/v2/registry/schema_public.d.ts +218 -100
- package/dist/v2/registry/schema_public.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/io/folder_reader.ts +19 -9
- package/src/util.ts +6 -0
- package/src/v2/build_dist.ts +2 -1
- package/src/v2/model/block_components.ts +10 -8
- package/src/v2/registry/registry.ts +3 -6
- package/src/v2/registry/registry_reader.test.ts +19 -0
- package/src/v2/registry/registry_reader.ts +25 -15
- package/src/v2/registry/schema_public.ts +5 -1
- package/dist/config-B1U40s2a.js +0 -3
- package/dist/config-B1U40s2a.js.map +0 -1
- package/dist/config-YukCegnp.mjs.map +0 -1
package/src/io/folder_reader.ts
CHANGED
|
@@ -5,19 +5,20 @@ import pathPosix from 'node:path/posix';
|
|
|
5
5
|
import fsp from 'node:fs/promises';
|
|
6
6
|
|
|
7
7
|
export interface FolderReader {
|
|
8
|
+
readonly rootUrl: URL;
|
|
8
9
|
relativeReader(relativePath: string): FolderReader;
|
|
9
10
|
readFile(file: string): Promise<Buffer>;
|
|
10
11
|
getContentReader(relativePath?: string): RelativeContentReader;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
class HttpFolderReader implements FolderReader {
|
|
14
15
|
constructor(
|
|
15
|
-
|
|
16
|
+
public readonly rootUrl: URL,
|
|
16
17
|
private readonly httpDispatcher: Dispatcher
|
|
17
18
|
) {}
|
|
18
19
|
|
|
19
20
|
public async readFile(file: string): Promise<Buffer> {
|
|
20
|
-
const targetUrl = new URL(file, this.
|
|
21
|
+
const targetUrl = new URL(file, this.rootUrl);
|
|
21
22
|
const response = await request(targetUrl, {
|
|
22
23
|
dispatcher: this.httpDispatcher
|
|
23
24
|
});
|
|
@@ -25,7 +26,8 @@ export class HttpFolderReader implements FolderReader {
|
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
public relativeReader(relativePath: string): HttpFolderReader {
|
|
28
|
-
|
|
29
|
+
if (!relativePath.endsWith('/')) relativePath = relativePath + '/';
|
|
30
|
+
return new HttpFolderReader(new URL(relativePath, this.rootUrl), this.httpDispatcher);
|
|
29
31
|
}
|
|
30
32
|
|
|
31
33
|
public getContentReader(relativePath?: string): RelativeContentReader {
|
|
@@ -35,8 +37,11 @@ export class HttpFolderReader implements FolderReader {
|
|
|
35
37
|
}
|
|
36
38
|
}
|
|
37
39
|
|
|
38
|
-
|
|
39
|
-
constructor(
|
|
40
|
+
class FSFolderReader implements FolderReader {
|
|
41
|
+
constructor(
|
|
42
|
+
public readonly rootUrl: URL,
|
|
43
|
+
private readonly root: string
|
|
44
|
+
) {}
|
|
40
45
|
|
|
41
46
|
public async readFile(file: string): Promise<Buffer> {
|
|
42
47
|
const targetPath = path.join(this.root, ...file.split(pathPosix.sep));
|
|
@@ -44,7 +49,11 @@ export class FSFolderReader implements FolderReader {
|
|
|
44
49
|
}
|
|
45
50
|
|
|
46
51
|
public relativeReader(relativePath: string): FSFolderReader {
|
|
47
|
-
|
|
52
|
+
if (!relativePath.endsWith('/')) relativePath = relativePath + '/';
|
|
53
|
+
return new FSFolderReader(
|
|
54
|
+
new URL(relativePath, this.rootUrl),
|
|
55
|
+
path.join(this.root, ...relativePath.split(pathPosix.sep))
|
|
56
|
+
);
|
|
48
57
|
}
|
|
49
58
|
|
|
50
59
|
public getContentReader(relativePath?: string): RelativeContentReader {
|
|
@@ -63,11 +72,12 @@ function localToPosix(p: string): string {
|
|
|
63
72
|
}
|
|
64
73
|
|
|
65
74
|
export function folderReaderByUrl(address: string, httpDispatcher?: Dispatcher): FolderReader {
|
|
75
|
+
if (!address.endsWith('/')) address = address + '/';
|
|
66
76
|
const url = new URL(address, `file:${localToPosix(path.resolve('.'))}/`);
|
|
67
77
|
switch (url.protocol) {
|
|
68
78
|
case 'file:':
|
|
69
|
-
const
|
|
70
|
-
return new FSFolderReader(
|
|
79
|
+
const rootPath = posixToLocalPath(url.pathname);
|
|
80
|
+
return new FSFolderReader(url, rootPath);
|
|
71
81
|
case 'https:':
|
|
72
82
|
case 'http:':
|
|
73
83
|
return new HttpFolderReader(url, httpDispatcher ?? new Agent());
|
package/src/util.ts
CHANGED
|
@@ -23,3 +23,9 @@ export async function tryStat(path: string): Promise<BigIntStats | undefined> {
|
|
|
23
23
|
throw error;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
+
|
|
27
|
+
export async function calculateSha256(bytes: ArrayBuffer) {
|
|
28
|
+
return Buffer.from(await crypto.subtle.digest('sha-256', bytes))
|
|
29
|
+
.toString('hex')
|
|
30
|
+
.toUpperCase();
|
|
31
|
+
}
|
package/src/v2/build_dist.ts
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
import { BlockPackDescriptionAbsolute, BlockPackDescriptionConsolidateToFolder } from './model';
|
|
8
8
|
import fsp from 'node:fs/promises';
|
|
9
9
|
import path from 'node:path';
|
|
10
|
+
import { calculateSha256 } from '../util';
|
|
10
11
|
|
|
11
12
|
export async function buildBlockPackDist(
|
|
12
13
|
description: BlockPackDescriptionAbsolute,
|
|
@@ -19,7 +20,7 @@ export async function buildBlockPackDist(
|
|
|
19
20
|
const filesForManifest = await Promise.all(
|
|
20
21
|
files.map(async (f): Promise<ManifestFileInfo> => {
|
|
21
22
|
const bytes = await fsp.readFile(path.resolve(dst, f));
|
|
22
|
-
const sha256 =
|
|
23
|
+
const sha256 = await calculateSha256(bytes);
|
|
23
24
|
return { name: f, size: bytes.length, sha256 };
|
|
24
25
|
})
|
|
25
26
|
);
|
|
@@ -9,7 +9,9 @@ import {
|
|
|
9
9
|
BlockComponents,
|
|
10
10
|
BlockComponentsManifest,
|
|
11
11
|
ContentAbsoluteBinaryLocal,
|
|
12
|
-
ContentAbsoluteFolder
|
|
12
|
+
ContentAbsoluteFolder,
|
|
13
|
+
ContentRelative,
|
|
14
|
+
mapRemoteToAbsolute
|
|
13
15
|
} from '@milaboratories/pl-model-middle-layer';
|
|
14
16
|
|
|
15
17
|
export function BlockComponentsDescription(moduleRoot: string) {
|
|
@@ -27,10 +29,10 @@ export function BlockComponentsConsolidate(dstFolder: string, fileAccumulator?:
|
|
|
27
29
|
).pipe(BlockComponentsManifest);
|
|
28
30
|
}
|
|
29
31
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
export function BlockComponentsAbsoluteUrl(prefix: string) {
|
|
33
|
+
return BlockComponents(
|
|
34
|
+
ContentRelative.transform(mapRemoteToAbsolute(prefix)),
|
|
35
|
+
ContentRelative.transform(mapRemoteToAbsolute(prefix))
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
export type BlockComponentsAbsoluteUrl = z.infer<ReturnType<typeof BlockComponentsAbsoluteUrl>>;
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
} from './schema_public';
|
|
21
21
|
import { BlockPackDescriptionManifestAddRelativePathPrefix, RelativeContentReader } from '../model';
|
|
22
22
|
import { randomUUID } from 'node:crypto';
|
|
23
|
+
import { calculateSha256 } from '../../util';
|
|
23
24
|
|
|
24
25
|
type PackageUpdateInfo = {
|
|
25
26
|
package: BlockPackIdNoVersion;
|
|
@@ -98,9 +99,7 @@ export class BlockRegistryV2 {
|
|
|
98
99
|
}) + ManifestSuffix
|
|
99
100
|
);
|
|
100
101
|
if (!manifestContent) continue; // absent package
|
|
101
|
-
const sha256 =
|
|
102
|
-
.toString('hex')
|
|
103
|
-
.toUpperCase();
|
|
102
|
+
const sha256 = await calculateSha256(manifestContent);
|
|
104
103
|
newVersions.push({
|
|
105
104
|
description: BlockPackDescriptionManifestAddRelativePathPrefix(version).parse(
|
|
106
105
|
BlockPackManifest.parse(JSON.parse(manifestContent.toString('utf8'))).description
|
|
@@ -211,9 +210,7 @@ export class BlockRegistryV2 {
|
|
|
211
210
|
throw new Error(
|
|
212
211
|
`Actual file size don't match file size from the manifest file for ${f.name} (actual = ${bytes.length}; manifest = ${f.size})`
|
|
213
212
|
);
|
|
214
|
-
const sha256 =
|
|
215
|
-
.toString('hex')
|
|
216
|
-
.toUpperCase();
|
|
213
|
+
const sha256 = await calculateSha256(bytes);
|
|
217
214
|
if (sha256 !== f.sha256.toUpperCase())
|
|
218
215
|
throw new Error(
|
|
219
216
|
`Actual file SHA-256 don't match the checksum from the manifest file for ${f.name} (actual = ${sha256}; manifest = ${f.sha256.toUpperCase()})`
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { expect, test } from '@jest/globals';
|
|
2
|
+
import { RegistryV2Reader } from './registry_reader';
|
|
3
|
+
import { folderReaderByUrl } from '../../io';
|
|
4
|
+
|
|
5
|
+
test('test listing packets from global registry', async () => {
|
|
6
|
+
const registryReader = new RegistryV2Reader(folderReaderByUrl('https://blocks.pl-open.science'));
|
|
7
|
+
const listing = await registryReader.listBlockPacks();
|
|
8
|
+
expect(listing.length).toBeGreaterThanOrEqual(1);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test('test getting components from global registry', async () => {
|
|
12
|
+
const registryReader = new RegistryV2Reader(folderReaderByUrl('https://blocks.pl-open.science'));
|
|
13
|
+
const components = await registryReader.getComponents({
|
|
14
|
+
organization: 'milaboratories',
|
|
15
|
+
name: 'samples-and-data',
|
|
16
|
+
version: '1.3.0'
|
|
17
|
+
});
|
|
18
|
+
console.dir(components, { depth: 5 });
|
|
19
|
+
});
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
BlockPackId,
|
|
3
|
+
BlockPackManifest,
|
|
3
4
|
BlockPackMetaEmbeddedBytes,
|
|
4
|
-
BlockPackMetaManifest,
|
|
5
5
|
BlockPackOverview
|
|
6
6
|
} from '@milaboratories/pl-model-middle-layer';
|
|
7
7
|
import { FolderReader } from '../../io';
|
|
8
8
|
import canonicalize from 'canonicalize';
|
|
9
9
|
import {
|
|
10
|
-
GlobalOverview,
|
|
11
10
|
GlobalOverviewEntryReg,
|
|
12
11
|
GlobalOverviewFileName,
|
|
13
12
|
GlobalOverviewReg,
|
|
14
13
|
MainPrefix,
|
|
15
|
-
ManifestFileName
|
|
14
|
+
ManifestFileName,
|
|
15
|
+
packageContentPrefix,
|
|
16
|
+
packageContentPrefixInsideV2
|
|
16
17
|
} from './schema_public';
|
|
17
|
-
import { BlockPackMetaEmbedBytes } from '../model';
|
|
18
|
+
import { BlockComponentsAbsoluteUrl, BlockPackMetaEmbedBytes } from '../model';
|
|
18
19
|
|
|
19
20
|
export type BlockPackOverviewNoRegLabel = Omit<BlockPackOverview, 'registryId'>;
|
|
20
21
|
|
|
@@ -24,13 +25,10 @@ export class RegistryV2Reader {
|
|
|
24
25
|
{ sha256: string; meta: BlockPackMetaEmbeddedBytes }
|
|
25
26
|
>();
|
|
26
27
|
|
|
27
|
-
private readonly
|
|
28
|
+
private readonly v2RootFolderReader: FolderReader;
|
|
28
29
|
|
|
29
|
-
constructor(
|
|
30
|
-
|
|
31
|
-
reader: FolderReader
|
|
32
|
-
) {
|
|
33
|
-
this.rootFolderReader = reader.relativeReader(MainPrefix);
|
|
30
|
+
constructor(private readonly registryReader: FolderReader) {
|
|
31
|
+
this.v2RootFolderReader = registryReader.relativeReader(MainPrefix);
|
|
34
32
|
}
|
|
35
33
|
|
|
36
34
|
private async embedMetaContent(
|
|
@@ -39,17 +37,17 @@ export class RegistryV2Reader {
|
|
|
39
37
|
const id = canonicalize(entry.id)!;
|
|
40
38
|
const fromCache = this.metaCache.get(id);
|
|
41
39
|
if (fromCache && fromCache.sha256 === entry.latestManifestSha256) return fromCache.meta;
|
|
42
|
-
const rootContentReader = this.
|
|
40
|
+
const rootContentReader = this.v2RootFolderReader.getContentReader();
|
|
43
41
|
const meta = await BlockPackMetaEmbedBytes(rootContentReader).parseAsync(entry.latest.meta);
|
|
44
42
|
this.metaCache.set(id, { sha256: entry.latestManifestSha256, meta });
|
|
45
43
|
return meta;
|
|
46
44
|
}
|
|
47
45
|
|
|
48
46
|
public async listBlockPacks(): Promise<BlockPackOverviewNoRegLabel[]> {
|
|
49
|
-
const rootContentReader = this.
|
|
47
|
+
const rootContentReader = this.v2RootFolderReader.getContentReader();
|
|
50
48
|
const globalOverview = GlobalOverviewReg.parse(
|
|
51
49
|
JSON.parse(
|
|
52
|
-
Buffer.from(await this.
|
|
50
|
+
Buffer.from(await this.v2RootFolderReader.readFile(GlobalOverviewFileName)).toString()
|
|
53
51
|
)
|
|
54
52
|
);
|
|
55
53
|
return await Promise.all(
|
|
@@ -61,11 +59,23 @@ export class RegistryV2Reader {
|
|
|
61
59
|
spec: {
|
|
62
60
|
type: 'from-registry-v2',
|
|
63
61
|
id: p.latest.id,
|
|
64
|
-
registryUrl: this.
|
|
62
|
+
registryUrl: this.registryReader.rootUrl.toString()
|
|
65
63
|
},
|
|
66
64
|
otherVersions: p.allVersions
|
|
67
65
|
}) satisfies BlockPackOverviewNoRegLabel
|
|
68
66
|
)
|
|
69
67
|
);
|
|
70
68
|
}
|
|
69
|
+
|
|
70
|
+
public async getComponents(id: BlockPackId): Promise<BlockComponentsAbsoluteUrl> {
|
|
71
|
+
const packageFolderReader = this.v2RootFolderReader.relativeReader(
|
|
72
|
+
packageContentPrefixInsideV2(id)
|
|
73
|
+
);
|
|
74
|
+
const manifest = BlockPackManifest.parse(
|
|
75
|
+
JSON.parse(Buffer.from(await packageFolderReader.readFile(ManifestFileName)).toString())
|
|
76
|
+
);
|
|
77
|
+
return BlockComponentsAbsoluteUrl(packageFolderReader.rootUrl.toString()).parse(
|
|
78
|
+
manifest.description.components
|
|
79
|
+
);
|
|
80
|
+
}
|
|
71
81
|
}
|
|
@@ -19,8 +19,12 @@ export const GlobalOverviewFileName = 'overview.json';
|
|
|
19
19
|
export const PackageOverviewFileName = 'overview.json';
|
|
20
20
|
export const ManifestFileName = 'manifest.json';
|
|
21
21
|
|
|
22
|
+
export function packageContentPrefixInsideV2(bp: BlockPackId): string {
|
|
23
|
+
return `${bp.organization}/${bp.name}/${bp.version}`;
|
|
24
|
+
}
|
|
25
|
+
|
|
22
26
|
export function packageContentPrefix(bp: BlockPackId): string {
|
|
23
|
-
return `${MainPrefix}${bp
|
|
27
|
+
return `${MainPrefix}${packageContentPrefixInsideV2(bp)}`;
|
|
24
28
|
}
|
|
25
29
|
|
|
26
30
|
export const ManifestSuffix = '/' + ManifestFileName;
|
package/dist/config-B1U40s2a.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
"use strict";var gr=Object.defineProperty;var dr=(t,e,r)=>e in t?gr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Q=(t,e,r)=>dr(t,typeof e!="symbol"?e+"":e,r);const h=require("@milaboratories/pl-model-middle-layer"),N=require("zod"),B=require("node:path"),U=require("node:fs/promises"),mr=require("mime-types"),$r=require("tar"),St=require("@milaboratories/resolve-helper"),Ot=require("@milaboratories/ts-helpers"),It=require("node:crypto"),Er=require("yaml"),vr=require("node:os"),M=require("node:path/posix"),Nt=require("@aws-sdk/client-s3"),wr=require("node:fs");function ce(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const s=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,s.get?s:{enumerable:!0,get:()=>t[r]})}}return e.default=t,Object.freeze(e)}const le=ce(mr),Rr=ce($r),tt=ce(vr),W=ce(wr);function Tt(t){return N.z.string().transform((e,r)=>{const s=St.tryResolve(t,e);return s===void 0?(r.addIssue({code:N.z.ZodIssueCode.custom,message:`Can't resolve ${e} against ${t}`}),N.z.NEVER):{type:"absolute-file",file:s}})}function Lt(t,...e){return N.z.string().transform((r,s)=>{const a=r.endsWith("/")?r:`${r}/`;for(const o of e){const c=St.tryResolve(t,a+o);if(c!==void 0){if(!c.endsWith(o))throw new Error(`Unexpected resolve result ${c} with index file ${o}`);return{type:"absolute-folder",folder:c.slice(0,c.length-o.length)}}}return s.addIssue({code:N.z.ZodIssueCode.custom,message:`Can't resolve ${r} folder against ${t}, no index file found (${e.join(", ")})`}),N.z.NEVER})}function Ne(t){return e=>e.type==="relative"?{type:"absolute-file",file:B.resolve(t,e.path)}:e}function xe(){return async t=>t.type==="absolute-file"?await U.readFile(t.file,{encoding:"utf-8"}):t.content}function Ct(){return async t=>{if(t.type==="absolute-file"){const e=le.lookup(t.file);if(!e)throw new Error(`Can't recognize mime type of the file: ${t.file}.`);return{type:"explicit-base64",mimeType:e,content:await U.readFile(t.file,{encoding:"base64"})}}else return t}}function At(){return async t=>{if(t.type==="absolute-file"){const e=le.lookup(t.file);if(!e)throw new Error(`Can't recognize mime type of the file: ${t.file}.`);return{type:"explicit-bytes",mimeType:e,content:Buffer.from(await U.readFile(t.file))}}else return t.type==="explicit-base64"?{type:"explicit-bytes",mimeType:t.mimeType,content:Buffer.from(t.content,"base64")}:t}}function ae(t,e){return async r=>{if(r.type==="absolute-file"){const s=B.basename(r.file),a=B.resolve(t,s);return e==null||e.push(s),await U.cp(r.file,a),{type:"relative",path:s}}else return r}}function Ft(t,e,r){if(!e.endsWith(".tgz"))throw new Error(`Unexpected tgz file name: ${e}`);return async s=>{const a=B.resolve(t,e);return await Rr.create({gzip:!0,file:a,cwd:s.folder},[s.folder]),r==null||r.push(e),{type:"relative",path:e}}}function fe(t){return async e=>e.type==="explicit-string"?e:{type:"explicit-string",content:(await t(e.path)).toString("utf8")}}function Bt(t){return async e=>e.type==="explicit-string"?e.content:(await t(e.path)).toString("utf8")}function kr(t){return async e=>{if(e.type==="explicit-base64")return e;const r=le.lookup(e.path);if(!r)throw new Error(`Can't recognize mime type of the file: ${e.path}.`);return{type:"explicit-base64",mimeType:r,content:(await t(e.path)).toString("base64")}}}function K(t){return async e=>{if(e.type==="explicit-base64")return{type:"explicit-bytes",mimeType:e.mimeType,content:Buffer.from(e.content,"base64")};const r=le.lookup(e.path);if(!r)throw new Error(`Can't recognize mime type of the file: ${e.path}.`);return{type:"explicit-bytes",mimeType:r,content:await t(e.path)}}}function bt(t){return h.BlockPackMeta(h.DescriptionContentText.transform(Ne(t)),h.DescriptionContentBinary.transform(Ne(t)))}function Dt(t,e){return h.BlockPackMeta(h.ContentAbsoluteTextLocal.transform(ae(t,e)),h.ContentAbsoluteBinaryLocal.transform(ae(t,e)))}const Pr=h.BlockPackMeta(h.ContentAbsoluteTextLocal.transform(xe()),h.ContentAbsoluteBinaryLocal.transform(Ct())).pipe(h.BlockPackMetaEmbeddedBase64),yr=h.BlockPackMeta(h.ContentAbsoluteTextLocal.transform(xe()),h.ContentAbsoluteBinaryLocal.transform(At())).pipe(h.BlockPackMetaEmbeddedBytes);function Sr(t){return h.BlockPackMeta(h.ContentRelativeText.transform(Bt(t)),h.ContentRelativeBinary.transform(K(t))).pipe(h.BlockPackMetaEmbeddedBytes)}function _t(t){return h.BlockComponents(Tt(t),Lt(t,"index.html"))}function xt(t,e){return h.BlockComponents(h.ContentAbsoluteBinaryLocal.transform(ae(t,e)),h.ContentAbsoluteFolder.transform(Ft(t,"ui.tgz",e))).pipe(h.BlockComponentsManifest)}function Ge(t){return h.CreateBlockPackDescriptionSchema(_t(t),bt(t))}function Gt(t,e){return h.CreateBlockPackDescriptionSchema(xt(t,e),Dt(t,e)).pipe(h.BlockPackDescriptionManifest)}function Te(t){const e=h.addPrefixToRelative(t);return h.BlockPackDescriptionManifest.pipe(h.CreateBlockPackDescriptionSchema(h.BlockComponents(h.ContentRelative.transform(e),h.ContentRelative.transform(e)),h.BlockPackMeta(h.ContentRelativeText.transform(e),h.ContentRelativeBinary.transform(e)))).pipe(h.BlockPackDescriptionManifest)}async function Or(t,e){await U.mkdir(e,{recursive:!0});const r=[],s=await Gt(e,r).parseAsync(t),a=await Promise.all(r.map(async c=>{const E=await U.readFile(B.resolve(e,c)),n=Buffer.from(await crypto.subtle.digest("sha-256",E)).toString("hex");return{name:c,size:E.length,sha256:n}})),o=h.BlockPackManifest.parse({schema:"v2",description:s,files:a});return await U.writeFile(B.resolve(e,h.BlockPackManifestFile),JSON.stringify(o)),o}async function je(t,e){try{return e(await U.readFile(t))}catch(r){if(r.code=="ENOENT")return;throw new Error("",{cause:r})}}const oe="block",Ir=/(?:@[a-zA-Z0-9-.]+\/)?(?<organization>[a-zA-Z0-9-]+)\.(?<name>[a-zA-Z0-9-]+)/;function ze(t){const e=t.match(Ir);if(!e)throw new Error(`Malformed package name (${t}), can't infer organization and block pack name.`);const{name:r,organization:s}=e.groups;return{name:r,organization:s}}async function Nr(t){const e=B.resolve(t,"package.json");try{const r=await je(e,c=>JSON.parse(c.toString("utf-8")));if(r===void 0)return;const s=r[oe];if(s===void 0)return;const a={...h.BlockPackDescriptionFromPackageJsonRaw.parse(s),id:{...ze(Ot.notEmpty(r.name,`"name" not found in ${e}`)),version:h.SemVer.parse(r.version)}},o=await Ge(t).safeParseAsync(a);return o.success?o.data:void 0}catch{return}}async function jt(t){const e=B.resolve(t,"package.json"),r=JSON.parse(await U.readFile(e,{encoding:"utf-8"})),s=r[oe];if(s===void 0)throw new Error(`Block description (field ${oe}) not found in ${e}.`);return{...h.BlockPackDescriptionFromPackageJsonRaw.parse(s),id:{...ze(Ot.notEmpty(r.name,`"name" not found in ${e}`)),version:h.SemVer.parse(r.version)}}}async function Tr(t){const e=await jt(t);return await Ge(t).parseAsync(e)}function Lr(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Le={exports:{}};const Cr="2.0.0",zt=256,Ar=Number.MAX_SAFE_INTEGER||9007199254740991,Fr=16,Br=zt-6,br=["major","premajor","minor","preminor","patch","prepatch","prerelease"];var ue={MAX_LENGTH:zt,MAX_SAFE_COMPONENT_LENGTH:Fr,MAX_SAFE_BUILD_LENGTH:Br,MAX_SAFE_INTEGER:Ar,RELEASE_TYPES:br,SEMVER_SPEC_VERSION:Cr,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2};const Dr=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};var pe=Dr;(function(t,e){const{MAX_SAFE_COMPONENT_LENGTH:r,MAX_SAFE_BUILD_LENGTH:s,MAX_LENGTH:a}=ue,o=pe;e=t.exports={};const c=e.re=[],E=e.safeRe=[],n=e.src=[],i=e.t={};let f=0;const p="[a-zA-Z0-9-]",P=[["\\s",1],["\\d",a],[p,s]],d=S=>{for(const[T,O]of P)S=S.split(`${T}*`).join(`${T}{0,${O}}`).split(`${T}+`).join(`${T}{1,${O}}`);return S},u=(S,T,O)=>{const L=d(T),R=f++;o(S,R,T),i[S]=R,n[R]=T,c[R]=new RegExp(T,O?"g":void 0),E[R]=new RegExp(L,O?"g":void 0)};u("NUMERICIDENTIFIER","0|[1-9]\\d*"),u("NUMERICIDENTIFIERLOOSE","\\d+"),u("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${p}*`),u("MAINVERSION",`(${n[i.NUMERICIDENTIFIER]})\\.(${n[i.NUMERICIDENTIFIER]})\\.(${n[i.NUMERICIDENTIFIER]})`),u("MAINVERSIONLOOSE",`(${n[i.NUMERICIDENTIFIERLOOSE]})\\.(${n[i.NUMERICIDENTIFIERLOOSE]})\\.(${n[i.NUMERICIDENTIFIERLOOSE]})`),u("PRERELEASEIDENTIFIER",`(?:${n[i.NUMERICIDENTIFIER]}|${n[i.NONNUMERICIDENTIFIER]})`),u("PRERELEASEIDENTIFIERLOOSE",`(?:${n[i.NUMERICIDENTIFIERLOOSE]}|${n[i.NONNUMERICIDENTIFIER]})`),u("PRERELEASE",`(?:-(${n[i.PRERELEASEIDENTIFIER]}(?:\\.${n[i.PRERELEASEIDENTIFIER]})*))`),u("PRERELEASELOOSE",`(?:-?(${n[i.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${n[i.PRERELEASEIDENTIFIERLOOSE]})*))`),u("BUILDIDENTIFIER",`${p}+`),u("BUILD",`(?:\\+(${n[i.BUILDIDENTIFIER]}(?:\\.${n[i.BUILDIDENTIFIER]})*))`),u("FULLPLAIN",`v?${n[i.MAINVERSION]}${n[i.PRERELEASE]}?${n[i.BUILD]}?`),u("FULL",`^${n[i.FULLPLAIN]}$`),u("LOOSEPLAIN",`[v=\\s]*${n[i.MAINVERSIONLOOSE]}${n[i.PRERELEASELOOSE]}?${n[i.BUILD]}?`),u("LOOSE",`^${n[i.LOOSEPLAIN]}$`),u("GTLT","((?:<|>)?=?)"),u("XRANGEIDENTIFIERLOOSE",`${n[i.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),u("XRANGEIDENTIFIER",`${n[i.NUMERICIDENTIFIER]}|x|X|\\*`),u("XRANGEPLAIN",`[v=\\s]*(${n[i.XRANGEIDENTIFIER]})(?:\\.(${n[i.XRANGEIDENTIFIER]})(?:\\.(${n[i.XRANGEIDENTIFIER]})(?:${n[i.PRERELEASE]})?${n[i.BUILD]}?)?)?`),u("XRANGEPLAINLOOSE",`[v=\\s]*(${n[i.XRANGEIDENTIFIERLOOSE]})(?:\\.(${n[i.XRANGEIDENTIFIERLOOSE]})(?:\\.(${n[i.XRANGEIDENTIFIERLOOSE]})(?:${n[i.PRERELEASELOOSE]})?${n[i.BUILD]}?)?)?`),u("XRANGE",`^${n[i.GTLT]}\\s*${n[i.XRANGEPLAIN]}$`),u("XRANGELOOSE",`^${n[i.GTLT]}\\s*${n[i.XRANGEPLAINLOOSE]}$`),u("COERCEPLAIN",`(^|[^\\d])(\\d{1,${r}})(?:\\.(\\d{1,${r}}))?(?:\\.(\\d{1,${r}}))?`),u("COERCE",`${n[i.COERCEPLAIN]}(?:$|[^\\d])`),u("COERCEFULL",n[i.COERCEPLAIN]+`(?:${n[i.PRERELEASE]})?(?:${n[i.BUILD]})?(?:$|[^\\d])`),u("COERCERTL",n[i.COERCE],!0),u("COERCERTLFULL",n[i.COERCEFULL],!0),u("LONETILDE","(?:~>?)"),u("TILDETRIM",`(\\s*)${n[i.LONETILDE]}\\s+`,!0),e.tildeTrimReplace="$1~",u("TILDE",`^${n[i.LONETILDE]}${n[i.XRANGEPLAIN]}$`),u("TILDELOOSE",`^${n[i.LONETILDE]}${n[i.XRANGEPLAINLOOSE]}$`),u("LONECARET","(?:\\^)"),u("CARETTRIM",`(\\s*)${n[i.LONECARET]}\\s+`,!0),e.caretTrimReplace="$1^",u("CARET",`^${n[i.LONECARET]}${n[i.XRANGEPLAIN]}$`),u("CARETLOOSE",`^${n[i.LONECARET]}${n[i.XRANGEPLAINLOOSE]}$`),u("COMPARATORLOOSE",`^${n[i.GTLT]}\\s*(${n[i.LOOSEPLAIN]})$|^$`),u("COMPARATOR",`^${n[i.GTLT]}\\s*(${n[i.FULLPLAIN]})$|^$`),u("COMPARATORTRIM",`(\\s*)${n[i.GTLT]}\\s*(${n[i.LOOSEPLAIN]}|${n[i.XRANGEPLAIN]})`,!0),e.comparatorTrimReplace="$1$2$3",u("HYPHENRANGE",`^\\s*(${n[i.XRANGEPLAIN]})\\s+-\\s+(${n[i.XRANGEPLAIN]})\\s*$`),u("HYPHENRANGELOOSE",`^\\s*(${n[i.XRANGEPLAINLOOSE]})\\s+-\\s+(${n[i.XRANGEPLAINLOOSE]})\\s*$`),u("STAR","(<|>)?=?\\s*\\*"),u("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),u("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")})(Le,Le.exports);var Z=Le.exports;const _r=Object.freeze({loose:!0}),xr=Object.freeze({}),Gr=t=>t?typeof t!="object"?_r:t:xr;var Me=Gr;const rt=/^[0-9]+$/,Mt=(t,e)=>{const r=rt.test(t),s=rt.test(e);return r&&s&&(t=+t,e=+e),t===e?0:r&&!s?-1:s&&!r?1:t<e?-1:1},jr=(t,e)=>Mt(e,t);var Ut={compareIdentifiers:Mt,rcompareIdentifiers:jr};const ee=pe,{MAX_LENGTH:st,MAX_SAFE_INTEGER:te}=ue,{safeRe:nt,t:it}=Z,zr=Me,{compareIdentifiers:q}=Ut;let Mr=class j{constructor(e,r){if(r=zr(r),e instanceof j){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>st)throw new TypeError(`version is longer than ${st} characters`);ee("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;const s=e.trim().match(r.loose?nt[it.LOOSE]:nt[it.FULL]);if(!s)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+s[1],this.minor=+s[2],this.patch=+s[3],this.major>te||this.major<0)throw new TypeError("Invalid major version");if(this.minor>te||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>te||this.patch<0)throw new TypeError("Invalid patch version");s[4]?this.prerelease=s[4].split(".").map(a=>{if(/^[0-9]+$/.test(a)){const o=+a;if(o>=0&&o<te)return o}return a}):this.prerelease=[],this.build=s[5]?s[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(e){if(ee("SemVer.compare",this.version,this.options,e),!(e instanceof j)){if(typeof e=="string"&&e===this.version)return 0;e=new j(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof j||(e=new j(e,this.options)),q(this.major,e.major)||q(this.minor,e.minor)||q(this.patch,e.patch)}comparePre(e){if(e instanceof j||(e=new j(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{const s=this.prerelease[r],a=e.prerelease[r];if(ee("prerelease compare",r,s,a),s===void 0&&a===void 0)return 0;if(a===void 0)return 1;if(s===void 0)return-1;if(s===a)continue;return q(s,a)}while(++r)}compareBuild(e){e instanceof j||(e=new j(e,this.options));let r=0;do{const s=this.build[r],a=e.build[r];if(ee("build compare",r,s,a),s===void 0&&a===void 0)return 0;if(a===void 0)return 1;if(s===void 0)return-1;if(s===a)continue;return q(s,a)}while(++r)}inc(e,r,s){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,s);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,s);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,s),this.inc("pre",r,s);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",r,s),this.inc("pre",r,s);break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{const a=Number(s)?1:0;if(!r&&s===!1)throw new Error("invalid increment argument: identifier is empty");if(this.prerelease.length===0)this.prerelease=[a];else{let o=this.prerelease.length;for(;--o>=0;)typeof this.prerelease[o]=="number"&&(this.prerelease[o]++,o=-2);if(o===-1){if(r===this.prerelease.join(".")&&s===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(a)}}if(r){let o=[r,a];s===!1&&(o=[r]),q(this.prerelease[0],r)===0?isNaN(this.prerelease[1])&&(this.prerelease=o):this.prerelease=o}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};var b=Mr;const at=b,Ur=(t,e,r=!1)=>{if(t instanceof at)return t;try{return new at(t,e)}catch(s){if(!r)return null;throw s}};var J=Ur;const Vr=J,Xr=(t,e)=>{const r=Vr(t,e);return r?r.version:null};var qr=Xr;const Jr=J,Hr=(t,e)=>{const r=Jr(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};var Wr=Hr;const ot=b,Yr=(t,e,r,s,a)=>{typeof r=="string"&&(a=s,s=r,r=void 0);try{return new ot(t instanceof ot?t.version:t,r).inc(e,s,a).version}catch{return null}};var Kr=Yr;const ct=J,Zr=(t,e)=>{const r=ct(t,null,!0),s=ct(e,null,!0),a=r.compare(s);if(a===0)return null;const o=a>0,c=o?r:s,E=o?s:r,n=!!c.prerelease.length;if(!!E.prerelease.length&&!n)return!E.patch&&!E.minor?"major":c.patch?"patch":c.minor?"minor":"major";const f=n?"pre":"";return r.major!==s.major?f+"major":r.minor!==s.minor?f+"minor":r.patch!==s.patch?f+"patch":"prerelease"};var Qr=Zr;const es=b,ts=(t,e)=>new es(t,e).major;var rs=ts;const ss=b,ns=(t,e)=>new ss(t,e).minor;var is=ns;const as=b,os=(t,e)=>new as(t,e).patch;var cs=os;const ls=J,fs=(t,e)=>{const r=ls(t,e);return r&&r.prerelease.length?r.prerelease:null};var us=fs;const lt=b,ps=(t,e,r)=>new lt(t,r).compare(new lt(e,r));var x=ps;const hs=x,gs=(t,e,r)=>hs(e,t,r);var ds=gs;const ms=x,$s=(t,e)=>ms(t,e,!0);var Es=$s;const ft=b,vs=(t,e,r)=>{const s=new ft(t,r),a=new ft(e,r);return s.compare(a)||s.compareBuild(a)};var Ue=vs;const ws=Ue,Rs=(t,e)=>t.sort((r,s)=>ws(r,s,e));var ks=Rs;const Ps=Ue,ys=(t,e)=>t.sort((r,s)=>Ps(s,r,e));var Ss=ys;const Os=x,Is=(t,e,r)=>Os(t,e,r)>0;var he=Is;const Ns=x,Ts=(t,e,r)=>Ns(t,e,r)<0;var Ve=Ts;const Ls=x,Cs=(t,e,r)=>Ls(t,e,r)===0;var Vt=Cs;const As=x,Fs=(t,e,r)=>As(t,e,r)!==0;var Xt=Fs;const Bs=x,bs=(t,e,r)=>Bs(t,e,r)>=0;var Xe=bs;const Ds=x,_s=(t,e,r)=>Ds(t,e,r)<=0;var qe=_s;const xs=Vt,Gs=Xt,js=he,zs=Xe,Ms=Ve,Us=qe,Vs=(t,e,r,s)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return xs(t,r,s);case"!=":return Gs(t,r,s);case">":return js(t,r,s);case">=":return zs(t,r,s);case"<":return Ms(t,r,s);case"<=":return Us(t,r,s);default:throw new TypeError(`Invalid operator: ${e}`)}};var qt=Vs;const Xs=b,qs=J,{safeRe:re,t:se}=Z,Js=(t,e)=>{if(t instanceof Xs)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(e.includePrerelease?re[se.COERCEFULL]:re[se.COERCE]);else{const n=e.includePrerelease?re[se.COERCERTLFULL]:re[se.COERCERTL];let i;for(;(i=n.exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||i.index+i[0].length!==r.index+r[0].length)&&(r=i),n.lastIndex=i.index+i[1].length+i[2].length;n.lastIndex=-1}if(r===null)return null;const s=r[2],a=r[3]||"0",o=r[4]||"0",c=e.includePrerelease&&r[5]?`-${r[5]}`:"",E=e.includePrerelease&&r[6]?`+${r[6]}`:"";return qs(`${s}.${a}.${o}${c}${E}`,e)};var Hs=Js;class Ws{constructor(){this.max=1e3,this.map=new Map}get(e){const r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}delete(e){return this.map.delete(e)}set(e,r){if(!this.delete(e)&&r!==void 0){if(this.map.size>=this.max){const a=this.map.keys().next().value;this.delete(a)}this.map.set(e,r)}return this}}var Ys=Ws,we,ut;function G(){if(ut)return we;ut=1;const t=/\s+/g;class e{constructor(l,v){if(v=a(v),l instanceof e)return l.loose===!!v.loose&&l.includePrerelease===!!v.includePrerelease?l:new e(l.raw,v);if(l instanceof o)return this.raw=l.value,this.set=[[l]],this.formatted=void 0,this;if(this.options=v,this.loose=!!v.loose,this.includePrerelease=!!v.includePrerelease,this.raw=l.trim().replace(t," "),this.set=this.raw.split("||").map(m=>this.parseRange(m.trim())).filter(m=>m.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){const m=this.set[0];if(this.set=this.set.filter(w=>!S(w[0])),this.set.length===0)this.set=[m];else if(this.set.length>1){for(const w of this.set)if(w.length===1&&T(w[0])){this.set=[w];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let l=0;l<this.set.length;l++){l>0&&(this.formatted+="||");const v=this.set[l];for(let m=0;m<v.length;m++)m>0&&(this.formatted+=" "),this.formatted+=v[m].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(l){const m=((this.options.includePrerelease&&d)|(this.options.loose&&u))+":"+l,w=s.get(m);if(w)return w;const $=this.options.loose,k=$?n[i.HYPHENRANGELOOSE]:n[i.HYPHENRANGE];l=l.replace(k,pr(this.options.includePrerelease)),c("hyphen replace",l),l=l.replace(n[i.COMPARATORTRIM],f),c("comparator trim",l),l=l.replace(n[i.TILDETRIM],p),c("tilde trim",l),l=l.replace(n[i.CARETTRIM],P),c("caret trim",l);let I=l.split(" ").map(F=>L(F,this.options)).join(" ").split(/\s+/).map(F=>ur(F,this.options));$&&(I=I.filter(F=>(c("loose invalid filter",F,this.options),!!F.match(n[i.COMPARATORLOOSE])))),c("range list",I);const y=new Map,C=I.map(F=>new o(F,this.options));for(const F of C){if(S(F))return[F];y.set(F.value,F)}y.size>1&&y.has("")&&y.delete("");const D=[...y.values()];return s.set(m,D),D}intersects(l,v){if(!(l instanceof e))throw new TypeError("a Range is required");return this.set.some(m=>O(m,v)&&l.set.some(w=>O(w,v)&&m.every($=>w.every(k=>$.intersects(k,v)))))}test(l){if(!l)return!1;if(typeof l=="string")try{l=new E(l,this.options)}catch{return!1}for(let v=0;v<this.set.length;v++)if(hr(this.set[v],l,this.options))return!0;return!1}}we=e;const r=Ys,s=new r,a=Me,o=ge(),c=pe,E=b,{safeRe:n,t:i,comparatorTrimReplace:f,tildeTrimReplace:p,caretTrimReplace:P}=Z,{FLAG_INCLUDE_PRERELEASE:d,FLAG_LOOSE:u}=ue,S=g=>g.value==="<0.0.0-0",T=g=>g.value==="",O=(g,l)=>{let v=!0;const m=g.slice();let w=m.pop();for(;v&&m.length;)v=m.every($=>w.intersects($,l)),w=m.pop();return v},L=(g,l)=>(c("comp",g,l),g=z(g,l),c("caret",g),g=A(g,l),c("tildes",g),g=cr(g,l),c("xrange",g),g=fr(g,l),c("stars",g),g),R=g=>!g||g.toLowerCase()==="x"||g==="*",A=(g,l)=>g.trim().split(/\s+/).map(v=>_(v,l)).join(" "),_=(g,l)=>{const v=l.loose?n[i.TILDELOOSE]:n[i.TILDE];return g.replace(v,(m,w,$,k,I)=>{c("tilde",g,m,w,$,k,I);let y;return R(w)?y="":R($)?y=`>=${w}.0.0 <${+w+1}.0.0-0`:R(k)?y=`>=${w}.${$}.0 <${w}.${+$+1}.0-0`:I?(c("replaceTilde pr",I),y=`>=${w}.${$}.${k}-${I} <${w}.${+$+1}.0-0`):y=`>=${w}.${$}.${k} <${w}.${+$+1}.0-0`,c("tilde return",y),y})},z=(g,l)=>g.trim().split(/\s+/).map(v=>V(v,l)).join(" "),V=(g,l)=>{c("caret",g,l);const v=l.loose?n[i.CARETLOOSE]:n[i.CARET],m=l.includePrerelease?"-0":"";return g.replace(v,(w,$,k,I,y)=>{c("caret",g,w,$,k,I,y);let C;return R($)?C="":R(k)?C=`>=${$}.0.0${m} <${+$+1}.0.0-0`:R(I)?$==="0"?C=`>=${$}.${k}.0${m} <${$}.${+k+1}.0-0`:C=`>=${$}.${k}.0${m} <${+$+1}.0.0-0`:y?(c("replaceCaret pr",y),$==="0"?k==="0"?C=`>=${$}.${k}.${I}-${y} <${$}.${k}.${+I+1}-0`:C=`>=${$}.${k}.${I}-${y} <${$}.${+k+1}.0-0`:C=`>=${$}.${k}.${I}-${y} <${+$+1}.0.0-0`):(c("no pr"),$==="0"?k==="0"?C=`>=${$}.${k}.${I}${m} <${$}.${k}.${+I+1}-0`:C=`>=${$}.${k}.${I}${m} <${$}.${+k+1}.0-0`:C=`>=${$}.${k}.${I} <${+$+1}.0.0-0`),c("caret return",C),C})},cr=(g,l)=>(c("replaceXRanges",g,l),g.split(/\s+/).map(v=>lr(v,l)).join(" ")),lr=(g,l)=>{g=g.trim();const v=l.loose?n[i.XRANGELOOSE]:n[i.XRANGE];return g.replace(v,(m,w,$,k,I,y)=>{c("xRange",g,m,w,$,k,I,y);const C=R($),D=C||R(k),F=D||R(I),H=F;return w==="="&&H&&(w=""),y=l.includePrerelease?"-0":"",C?w===">"||w==="<"?m="<0.0.0-0":m="*":w&&H?(D&&(k=0),I=0,w===">"?(w=">=",D?($=+$+1,k=0,I=0):(k=+k+1,I=0)):w==="<="&&(w="<",D?$=+$+1:k=+k+1),w==="<"&&(y="-0"),m=`${w+$}.${k}.${I}${y}`):D?m=`>=${$}.0.0${y} <${+$+1}.0.0-0`:F&&(m=`>=${$}.${k}.0${y} <${$}.${+k+1}.0-0`),c("xRange return",m),m})},fr=(g,l)=>(c("replaceStars",g,l),g.trim().replace(n[i.STAR],"")),ur=(g,l)=>(c("replaceGTE0",g,l),g.trim().replace(n[l.includePrerelease?i.GTE0PRE:i.GTE0],"")),pr=g=>(l,v,m,w,$,k,I,y,C,D,F,H)=>(R(m)?v="":R(w)?v=`>=${m}.0.0${g?"-0":""}`:R($)?v=`>=${m}.${w}.0${g?"-0":""}`:k?v=`>=${v}`:v=`>=${v}${g?"-0":""}`,R(C)?y="":R(D)?y=`<${+C+1}.0.0-0`:R(F)?y=`<${C}.${+D+1}.0-0`:H?y=`<=${C}.${D}.${F}-${H}`:g?y=`<${C}.${D}.${+F+1}-0`:y=`<=${y}`,`${v} ${y}`.trim()),hr=(g,l,v)=>{for(let m=0;m<g.length;m++)if(!g[m].test(l))return!1;if(l.prerelease.length&&!v.includePrerelease){for(let m=0;m<g.length;m++)if(c(g[m].semver),g[m].semver!==o.ANY&&g[m].semver.prerelease.length>0){const w=g[m].semver;if(w.major===l.major&&w.minor===l.minor&&w.patch===l.patch)return!0}return!1}return!0};return we}var Re,pt;function ge(){if(pt)return Re;pt=1;const t=Symbol("SemVer ANY");class e{static get ANY(){return t}constructor(f,p){if(p=r(p),f instanceof e){if(f.loose===!!p.loose)return f;f=f.value}f=f.trim().split(/\s+/).join(" "),c("comparator",f,p),this.options=p,this.loose=!!p.loose,this.parse(f),this.semver===t?this.value="":this.value=this.operator+this.semver.version,c("comp",this)}parse(f){const p=this.options.loose?s[a.COMPARATORLOOSE]:s[a.COMPARATOR],P=f.match(p);if(!P)throw new TypeError(`Invalid comparator: ${f}`);this.operator=P[1]!==void 0?P[1]:"",this.operator==="="&&(this.operator=""),P[2]?this.semver=new E(P[2],this.options.loose):this.semver=t}toString(){return this.value}test(f){if(c("Comparator.test",f,this.options.loose),this.semver===t||f===t)return!0;if(typeof f=="string")try{f=new E(f,this.options)}catch{return!1}return o(f,this.operator,this.semver,this.options)}intersects(f,p){if(!(f instanceof e))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new n(f.value,p).test(this.value):f.operator===""?f.value===""?!0:new n(this.value,p).test(f.semver):(p=r(p),p.includePrerelease&&(this.value==="<0.0.0-0"||f.value==="<0.0.0-0")||!p.includePrerelease&&(this.value.startsWith("<0.0.0")||f.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&f.operator.startsWith(">")||this.operator.startsWith("<")&&f.operator.startsWith("<")||this.semver.version===f.semver.version&&this.operator.includes("=")&&f.operator.includes("=")||o(this.semver,"<",f.semver,p)&&this.operator.startsWith(">")&&f.operator.startsWith("<")||o(this.semver,">",f.semver,p)&&this.operator.startsWith("<")&&f.operator.startsWith(">")))}}Re=e;const r=Me,{safeRe:s,t:a}=Z,o=qt,c=pe,E=b,n=G();return Re}const Ks=G(),Zs=(t,e,r)=>{try{e=new Ks(e,r)}catch{return!1}return e.test(t)};var de=Zs;const Qs=G(),en=(t,e)=>new Qs(t,e).set.map(r=>r.map(s=>s.value).join(" ").trim().split(" "));var tn=en;const rn=b,sn=G(),nn=(t,e,r)=>{let s=null,a=null,o=null;try{o=new sn(e,r)}catch{return null}return t.forEach(c=>{o.test(c)&&(!s||a.compare(c)===-1)&&(s=c,a=new rn(s,r))}),s};var an=nn;const on=b,cn=G(),ln=(t,e,r)=>{let s=null,a=null,o=null;try{o=new cn(e,r)}catch{return null}return t.forEach(c=>{o.test(c)&&(!s||a.compare(c)===1)&&(s=c,a=new on(s,r))}),s};var fn=ln;const ke=b,un=G(),ht=he,pn=(t,e)=>{t=new un(t,e);let r=new ke("0.0.0");if(t.test(r)||(r=new ke("0.0.0-0"),t.test(r)))return r;r=null;for(let s=0;s<t.set.length;++s){const a=t.set[s];let o=null;a.forEach(c=>{const E=new ke(c.semver.version);switch(c.operator){case">":E.prerelease.length===0?E.patch++:E.prerelease.push(0),E.raw=E.format();case"":case">=":(!o||ht(E,o))&&(o=E);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${c.operator}`)}}),o&&(!r||ht(r,o))&&(r=o)}return r&&t.test(r)?r:null};var hn=pn;const gn=G(),dn=(t,e)=>{try{return new gn(t,e).range||"*"}catch{return null}};var mn=dn;const $n=b,Jt=ge(),{ANY:En}=Jt,vn=G(),wn=de,gt=he,dt=Ve,Rn=qe,kn=Xe,Pn=(t,e,r,s)=>{t=new $n(t,s),e=new vn(e,s);let a,o,c,E,n;switch(r){case">":a=gt,o=Rn,c=dt,E=">",n=">=";break;case"<":a=dt,o=kn,c=gt,E="<",n="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(wn(t,e,s))return!1;for(let i=0;i<e.set.length;++i){const f=e.set[i];let p=null,P=null;if(f.forEach(d=>{d.semver===En&&(d=new Jt(">=0.0.0")),p=p||d,P=P||d,a(d.semver,p.semver,s)?p=d:c(d.semver,P.semver,s)&&(P=d)}),p.operator===E||p.operator===n||(!P.operator||P.operator===E)&&o(t,P.semver))return!1;if(P.operator===n&&c(t,P.semver))return!1}return!0};var Je=Pn;const yn=Je,Sn=(t,e,r)=>yn(t,e,">",r);var On=Sn;const In=Je,Nn=(t,e,r)=>In(t,e,"<",r);var Tn=Nn;const mt=G(),Ln=(t,e,r)=>(t=new mt(t,r),e=new mt(e,r),t.intersects(e,r));var Cn=Ln;const An=de,Fn=x;var Bn=(t,e,r)=>{const s=[];let a=null,o=null;const c=t.sort((f,p)=>Fn(f,p,r));for(const f of c)An(f,e,r)?(o=f,a||(a=f)):(o&&s.push([a,o]),o=null,a=null);a&&s.push([a,null]);const E=[];for(const[f,p]of s)f===p?E.push(f):!p&&f===c[0]?E.push("*"):p?f===c[0]?E.push(`<=${p}`):E.push(`${f} - ${p}`):E.push(`>=${f}`);const n=E.join(" || "),i=typeof e.raw=="string"?e.raw:String(e);return n.length<i.length?n:e};const $t=G(),He=ge(),{ANY:Pe}=He,Y=de,We=x,bn=(t,e,r={})=>{if(t===e)return!0;t=new $t(t,r),e=new $t(e,r);let s=!1;e:for(const a of t.set){for(const o of e.set){const c=_n(a,o,r);if(s=s||c!==null,c)continue e}if(s)return!1}return!0},Dn=[new He(">=0.0.0-0")],Et=[new He(">=0.0.0")],_n=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===Pe){if(e.length===1&&e[0].semver===Pe)return!0;r.includePrerelease?t=Dn:t=Et}if(e.length===1&&e[0].semver===Pe){if(r.includePrerelease)return!0;e=Et}const s=new Set;let a,o;for(const d of t)d.operator===">"||d.operator===">="?a=vt(a,d,r):d.operator==="<"||d.operator==="<="?o=wt(o,d,r):s.add(d.semver);if(s.size>1)return null;let c;if(a&&o){if(c=We(a.semver,o.semver,r),c>0)return null;if(c===0&&(a.operator!==">="||o.operator!=="<="))return null}for(const d of s){if(a&&!Y(d,String(a),r)||o&&!Y(d,String(o),r))return null;for(const u of e)if(!Y(d,String(u),r))return!1;return!0}let E,n,i,f,p=o&&!r.includePrerelease&&o.semver.prerelease.length?o.semver:!1,P=a&&!r.includePrerelease&&a.semver.prerelease.length?a.semver:!1;p&&p.prerelease.length===1&&o.operator==="<"&&p.prerelease[0]===0&&(p=!1);for(const d of e){if(f=f||d.operator===">"||d.operator===">=",i=i||d.operator==="<"||d.operator==="<=",a){if(P&&d.semver.prerelease&&d.semver.prerelease.length&&d.semver.major===P.major&&d.semver.minor===P.minor&&d.semver.patch===P.patch&&(P=!1),d.operator===">"||d.operator===">="){if(E=vt(a,d,r),E===d&&E!==a)return!1}else if(a.operator===">="&&!Y(a.semver,String(d),r))return!1}if(o){if(p&&d.semver.prerelease&&d.semver.prerelease.length&&d.semver.major===p.major&&d.semver.minor===p.minor&&d.semver.patch===p.patch&&(p=!1),d.operator==="<"||d.operator==="<="){if(n=wt(o,d,r),n===d&&n!==o)return!1}else if(o.operator==="<="&&!Y(o.semver,String(d),r))return!1}if(!d.operator&&(o||a)&&c!==0)return!1}return!(a&&i&&!o&&c!==0||o&&f&&!a&&c!==0||P||p)},vt=(t,e,r)=>{if(!t)return e;const s=We(t.semver,e.semver,r);return s>0?t:s<0||e.operator===">"&&t.operator===">="?e:t},wt=(t,e,r)=>{if(!t)return e;const s=We(t.semver,e.semver,r);return s<0?t:s>0||e.operator==="<"&&t.operator==="<="?e:t};var xn=bn;const ye=Z,Rt=ue,Gn=b,kt=Ut,jn=J,zn=qr,Mn=Wr,Un=Kr,Vn=Qr,Xn=rs,qn=is,Jn=cs,Hn=us,Wn=x,Yn=ds,Kn=Es,Zn=Ue,Qn=ks,ei=Ss,ti=he,ri=Ve,si=Vt,ni=Xt,ii=Xe,ai=qe,oi=qt,ci=Hs,li=ge(),fi=G(),ui=de,pi=tn,hi=an,gi=fn,di=hn,mi=mn,$i=Je,Ei=On,vi=Tn,wi=Cn,Ri=Bn,ki=xn;var Ht={parse:jn,valid:zn,clean:Mn,inc:Un,diff:Vn,major:Xn,minor:qn,patch:Jn,prerelease:Hn,compare:Wn,rcompare:Yn,compareLoose:Kn,compareBuild:Zn,sort:Qn,rsort:ei,gt:ti,lt:ri,eq:si,neq:ni,gte:ii,lte:ai,cmp:oi,coerce:ci,Comparator:li,Range:fi,satisfies:ui,toComparators:pi,maxSatisfying:hi,minSatisfying:gi,minVersion:di,validRange:mi,outside:$i,gtr:Ei,ltr:vi,intersects:wi,simplifyRange:Ri,subset:ki,SemVer:Gn,re:ye.re,src:ye.src,tokens:ye.t,SEMVER_SPEC_VERSION:Rt.SEMVER_SPEC_VERSION,RELEASE_TYPES:Rt.RELEASE_TYPES,compareIdentifiers:kt.compareIdentifiers,rcompareIdentifiers:kt.rcompareIdentifiers};const Pi=Lr(Ht),Ce="_updates_v2/per_package_version/";function yi(t,e){return`${Ce}${t.organization}/${t.name}/${t.version}/${e}`}const Si=/(?<packageKeyWithoutVersion>(?<organization>[^\/]+)\/(?<name>[^\/]+))\/(?<version>[^\/]+)\/(?<seed>[^\/]+)$/,Se="_updates_v2/_global_update_in",Pt="_updates_v2/_global_update_out",me="v2/",Wt="overview.json",Yt="overview.json",Ye="manifest.json";function Ae(t){return`${me}${t.organization}/${t.name}/${t.version}`}const Kt="/"+Ye,Zt=N.z.object({description:h.BlockPackDescriptionManifest,manifestSha256:h.Sha256Schema}),Fe=N.z.object({schema:N.z.literal("v2"),versions:N.z.array(Zt)});function Be(t){return`${me}${t.organization}/${t.name}/${Yt}`}const ne=`${me}${Wt}`;function Ke(t){return N.z.object({id:h.BlockPackIdNoVersion,allVersions:N.z.array(N.z.string()),latest:t,latestManifestSha256:h.Sha256Schema})}const Oi=Ke(h.BlockPackDescriptionManifest);function $e(t){return N.z.object({schema:N.z.literal("v2"),packages:N.z.array(Ke(t))})}const be=$e(h.BlockPackDescriptionManifest);function Ii(t){return h.CreateBlockPackDescriptionSchema(h.BlockComponentsManifest,h.BlockPackMeta(h.ContentRelativeText.transform(fe(t)),h.ContentRelativeBinary.transform(K(t))))}function Ni(t){return $e(h.CreateBlockPackDescriptionSchema(h.BlockComponentsManifest,h.BlockPackMeta(h.ContentRelativeText.transform(fe(t)),h.ContentRelativeBinary.transform(K(t)))))}function Ti(t){return $e(h.CreateBlockPackDescriptionSchema(h.BlockComponentsManifest,h.BlockPackMeta(h.ContentRelativeText.transform(fe(t)),h.ContentRelativeBinary.transform(K(t)))))}class Li{constructor(e,r){this.storage=e,this.logger=r}async updateRegistry(){var E,n,i,f,p,P,d,u;(E=this.logger)==null||E.info("Initiating registry refresh...");const e=new Map,r=[],s=await this.storage.listFiles(Ce);(n=this.logger)==null||n.info("Packages to be updated:");for(const S of s){const T=S.match(Si);if(!T)continue;r.push(S);const{packageKeyWithoutVersion:O,organization:L,name:R,version:A,seed:_}=T.groups;let z=e.get(O),V=!1;z?z.versions.has(A)||(z.versions.add(A),V=!0):(e.set(O,{package:{organization:L,name:R},versions:new Set([A])}),V=!0),(i=this.logger)==null||i.info(` - ${L}:${R}:${A} added:${V}`)}const a=await this.storage.getFile(ne);let c=(a===void 0?{schema:"v2",packages:[]}:be.parse(JSON.parse(a.toString()))).packages;(f=this.logger)==null||f.info(`Global overview loaded, ${c.length} records`);for(const[,S]of e.entries()){const T=Be(S.package),O=await this.storage.getFile(T),L=O===void 0?{schema:"v2",versions:[]}:Fe.parse(JSON.parse(O.toString()));(p=this.logger)==null||p.info(`Updating ${S.package.organization}:${S.package.name} overview, ${L.versions.length} records`);const R=L.versions.filter(A=>!S.versions.has(A.description.id.version));for(const[A]of S.versions.entries()){const _=A.toString(),z=await this.storage.getFile(Ae({...S.package,version:_})+Kt);if(!z)continue;const V=Buffer.from(await crypto.subtle.digest("sha-256",z)).toString("hex").toUpperCase();R.push({description:Te(_).parse(h.BlockPackManifest.parse(JSON.parse(z.toString("utf8"))).description),manifestSha256:V})}R.sort((A,_)=>Ht.compare(_.description.id.version,A.description.id.version)),await this.storage.putFile(T,Buffer.from(JSON.stringify({schema:"v2",versions:R}))),(P=this.logger)==null||P.info(`Done (${R.length} records)`),c=c.filter(A=>A.id.organization!==S.package.organization||A.id.name!==S.package.name),c.push({id:{organization:S.package.organization,name:S.package.name},allVersions:R.map(A=>A.description.id.version).reverse(),latest:Te(`${S.package.organization}/${S.package.name}`).parse(R[0].description),latestManifestSha256:R[0].manifestSha256})}await this.storage.putFile(ne,Buffer.from(JSON.stringify({schema:"v2",packages:c}))),(d=this.logger)==null||d.info(`Global overview updated (${c.length} records)`),await this.storage.deleteFiles(...r.map(S=>`${Ce}${S}`)),(u=this.logger)==null||u.info("Version update requests cleared")}async updateIfNeeded(e=!1){var a,o;(a=this.logger)==null||a.info("Checking if registry requires refresh...");const r=await this.storage.getFile(Se),s=await this.storage.getFile(Pt);!e&&r===void 0&&s===void 0||!e&&r!==void 0&&s!==void 0&&r.equals(s)||(await this.updateRegistry(),r&&(await this.storage.putFile(Pt,r),(o=this.logger)==null||o.info("Refresh finished")))}async getPackageOverview(e){const r=await this.storage.getFile(Be(e));if(r!==void 0)return Fe.parse(JSON.parse(r.toString()))}async getGlobalOverview(){const e=await this.storage.getFile(ne);if(e!==void 0)return be.parse(JSON.parse(e.toString()))}async publishPackage(e,r){var E,n,i,f;const s=Ae(e.description.id);for(const p of e.files){const P=await r(p.name);if(P.length!==p.size)throw new Error(`Actual file size don't match file size from the manifest file for ${p.name} (actual = ${P.length}; manifest = ${p.size})`);const d=Buffer.from(await crypto.subtle.digest("sha-256",P)).toString("hex").toUpperCase();if(d!==p.sha256.toUpperCase())throw new Error(`Actual file SHA-256 don't match the checksum from the manifest file for ${p.name} (actual = ${d}; manifest = ${p.sha256.toUpperCase()})`);const u=s+"/"+p.name;(E=this.logger)==null||E.info(`Uploading ${p.name} -> ${u} ...`),await this.storage.putFile(u,P)}const a=s+"/"+Ye;(n=this.logger)==null||n.info(`Uploading manifest to ${a} ...`),await this.storage.putFile(a,Buffer.from(JSON.stringify(e)));const o=It.randomUUID(),c=yi(e.description.id,o);(i=this.logger)==null||i.info(`Creating update seed at ${c} ...`),await this.storage.putFile(c,Buffer.from(o)),(f=this.logger)==null||f.info(`Touching global update seed ${Se} ...`),await this.storage.putFile(Se,Buffer.from(o))}}class Qt{constructor(e,r,s){this.client=e,this.bucket=r,this.root=s}async getFile(e){try{return Buffer.from(await(await this.client.getObject({Bucket:this.bucket,Key:M.join(this.root,e)})).Body.transformToByteArray())}catch(r){if(r.name==="NoSuchKey")return;throw r}}async listFiles(e){const r=M.join(this.root,e),s=Nt.paginateListObjectsV2({client:this.client},{Bucket:this.bucket,Prefix:r}),a=[];for await(const o of s)a.push(...o.Contents.map(c=>M.relative(r,c.Key)));return a}async putFile(e,r){await this.client.putObject({Bucket:this.bucket,Key:M.join(this.root,e),Body:r})}async deleteFiles(...e){const r=await this.client.deleteObjects({Bucket:this.bucket,Delete:{Objects:e.map(s=>({Key:M.join(this.root,s)}))}});if(r.Errors!==void 0&&r.Errors.length>0)throw new Error(`Errors encountered while deleting files: ${r.Errors.join(`
|
|
2
|
-
`)}`)}}class er{constructor(e){Q(this,"root");this.root=B.resolve(e)}toAbsolutePath(e){if(M.isAbsolute(e))throw new Error("absolute path");return B.resolve(this.root,e.split(M.sep).join(B.sep))}async getFile(e){try{return await W.promises.readFile(this.toAbsolutePath(e))}catch(r){if(r.code=="ENOENT")return;throw new Error("",{cause:r})}}async listFiles(e){try{const r=this.toAbsolutePath(e);return(await W.promises.readdir(r,{recursive:!0,withFileTypes:!0})).filter(s=>s.isFile()).map(s=>B.relative(r,B.resolve(s.path,s.name)).split(B.sep).join(M.sep))}catch(r){if(r.code=="ENOENT")return[];throw new Error("",{cause:r})}}async putFile(e,r){const s=this.toAbsolutePath(e);await W.promises.mkdir(B.dirname(s),{recursive:!0}),await W.promises.writeFile(s,r)}async deleteFiles(...e){for(const r of e)await W.promises.rm(this.toAbsolutePath(r))}}function tr(t){const e=new URL(t,`file:${B.resolve(".").split(B.sep).join(M.sep)}/`);switch(e.protocol){case"file:":const r=B.resolve(e.pathname);return new er(r);case"s3:":const s={},a=e.searchParams.get("region");a&&(s.region=a);const o=e.hostname;return new Qt(new Nt.S3(s),o,e.pathname.replace(/^\//,""));default:throw new Error(`Unknown protocol: ${e.protocol}`)}}const Ci=N.z.string().regex(/^(?:s3:|file:)/),rr=N.z.object({organization:N.z.string(),package:N.z.string(),version:h.SemVer.optional(),files:N.z.record(N.z.string().regex(/^[^\/]+$/),N.z.string()).default({}),meta:N.z.object({}).passthrough()}),sr=N.z.object({registries:N.z.record(N.z.string(),Ci).default({}),registry:N.z.string().optional()}),Ze=sr.merge(rr).required({registry:!0,version:!0}),Ee=Ze.partial().required({registries:!0,files:!0}),nr="pl.package.json",ir="pl.package.yaml",ve="v1/";function Ai(t){return`${ve}${t.organization}/${t.package}/${t.version}`}function Qe(t,e){return`${ve}${t.organization}/${t.package}/${t.version}/${e}`}function De(t){return`${ve}${t.organization}/${t.package}/overview.json`}const ie=`${ve}overview.json`,et="meta.json",_e="_updates_v1/per_package_version/";function Fi(t,e){return`${_e}${t.organization}/${t.package}/${t.version}/${e}`}const Bi=/(?<packageKeyWithoutVersion>(?<organization>[^\/]+)\/(?<pkg>[^\/]+))\/(?<version>[^\/]+)\/(?<seed>[^\/]+)$/,ar="_updates_v1/_global_update_in",yt="_updates_v1/_global_update_out";class bi{constructor(e,r){this.storage=e,this.logger=r}constructNewPackage(e){return new Di(this.storage,e)}async updateRegistry(){var c,E,n,i,f,p,P,d;(c=this.logger)==null||c.info("Initiating registry refresh...");const e=new Map,r=[],s=await this.storage.listFiles(_e);(E=this.logger)==null||E.info("Packages to be updated:");for(const u of s){const S=u.match(Bi);if(!S)continue;r.push(u);const{packageKeyWithoutVersion:T,organization:O,pkg:L,version:R,seed:A}=S.groups;let _=e.get(T);_?_.versions.has(R)||_.versions.add(R):e.set(T,{package:{organization:O,package:L},versions:new Set([R])}),(n=this.logger)==null||n.info(` - ${O}:${L}:${R}`)}const a=await this.storage.getFile(ie);let o=a===void 0?[]:JSON.parse(a.toString());(i=this.logger)==null||i.info(`Global overview loaded, ${o.length} records`);for(const[,u]of e.entries()){const S=De(u.package),T=await this.storage.getFile(S);let O=T===void 0?[]:JSON.parse(T.toString());(f=this.logger)==null||f.info(`Updating ${u.package.organization}:${u.package.package} overview, ${O.length} records`),O=O.filter(L=>!u.versions.has(L.version));for(const[L]of u.versions.entries()){const R=L.toString(),A=await this.storage.getFile(Qe({...u.package,version:R},et));A&&O.push({version:R,meta:JSON.parse(A.toString())})}O.sort((L,R)=>Pi.compare(R.version,L.version)),await this.storage.putFile(S,Buffer.from(JSON.stringify(O))),(p=this.logger)==null||p.info(`Done (${O.length} records)`),o=o.filter(L=>L.organization!==u.package.organization||L.package!==u.package.package),o.push({organization:u.package.organization,package:u.package.package,allVersions:O.map(L=>L.version).reverse(),latestVersion:O[0].version,latestMeta:O[0].meta})}await this.storage.putFile(ie,Buffer.from(JSON.stringify(o))),(P=this.logger)==null||P.info(`Global overview updated (${o.length} records)`),await this.storage.deleteFiles(...r.map(u=>`${_e}${u}`)),(d=this.logger)==null||d.info("Version update requests cleared")}async updateIfNeeded(e=!1){var a,o;(a=this.logger)==null||a.info("Checking if registry requires refresh...");const r=await this.storage.getFile(ar),s=await this.storage.getFile(yt);!e&&r===void 0&&s===void 0||!e&&r!==void 0&&s!==void 0&&r.equals(s)||(await this.updateRegistry(),r&&(await this.storage.putFile(yt,r),(o=this.logger)==null||o.info("Refresh finished")))}async getPackageOverview(e){const r=await this.storage.getFile(De(e));if(r!==void 0)return JSON.parse(r.toString())}async getGlobalOverview(){const e=await this.storage.getFile(ie);if(e!==void 0)return JSON.parse(e.toString())}}class Di{constructor(e,r){Q(this,"metaAdded",!1);Q(this,"seed",It.randomUUID());this.storage=e,this.name=r}async addFile(e,r){await this.storage.putFile(Qe(this.name,e),r)}async writeMeta(e){await this.addFile(et,Buffer.from(JSON.stringify(e))),this.metaAdded=!0}async finish(){if(!this.metaAdded)throw new Error("meta not added");await this.storage.putFile(Fi(this.name,this.seed),Buffer.of(0)),await this.storage.putFile(ar,Buffer.from(this.seed))}}function X(t,e){return e===void 0?t:{...t,...e,registries:{...t.registries,...e.registries},files:{...t.files,...e.files}}}async function Oe(t){return je(t,e=>Ee.parse(JSON.parse(e.toString())))}async function Ie(t){return je(t,e=>Ee.parse(Er.parse(e.toString())))}async function _i(){let t=Ee.parse({});return t=X(t,await Oe("./.pl.reg.json")),t=X(t,await Ie("./.pl.reg.yaml")),t=X(t,await Oe(`${tt.homedir()}/.pl.reg.json`)),t=X(t,await Ie(`${tt.homedir()}/.pl.reg.yaml`)),t=X(t,await Oe(nr)),t=X(t,await Ie(ir)),t}class or{constructor(e){this.conf=e}createRegistry(e){let r=this.conf.registry;if(!r.startsWith("file:")&&!r.startsWith("s3:")){const s=this.conf.registries[r];if(!s)throw new Error(`Registry with alias "${r}" not found`);r=s}return new bi(tr(r),e)}get fullPackageName(){return{organization:this.conf.organization,package:this.conf.package,version:this.conf.version}}}async function xi(t){const e=await _i();return new or(Ze.parse(X(e,t)))}exports.BlockComponentsConsolidate=xt;exports.BlockComponentsDescription=_t;exports.BlockDescriptionPackageJsonField=oe;exports.BlockDescriptionToExplicitBinaryBytes=Ii;exports.BlockPackDescriptionConsolidateToFolder=Gt;exports.BlockPackDescriptionManifestAddRelativePathPrefix=Te;exports.BlockPackMetaConsolidate=Dt;exports.BlockPackMetaDescription=bt;exports.BlockPackMetaEmbedAbsoluteBase64=Pr;exports.BlockPackMetaEmbedAbsoluteBytes=yr;exports.BlockPackMetaEmbedBytes=Sr;exports.BlockRegistryV2=Li;exports.FSStorage=er;exports.GlobalOverview=$e;exports.GlobalOverviewEntry=Ke;exports.GlobalOverviewEntryReg=Oi;exports.GlobalOverviewFileName=Wt;exports.GlobalOverviewPath=ie;exports.GlobalOverviewPath$1=ne;exports.GlobalOverviewReg=be;exports.GlobalOverviewToExplicitBinaryBase64=Ti;exports.GlobalOverviewToExplicitBinaryBytes=Ni;exports.MainPrefix=me;exports.ManifestFileName=Ye;exports.ManifestSuffix=Kt;exports.MetaFile=et;exports.PackageOverview=Fe;exports.PackageOverviewFileName=Yt;exports.PackageOverviewVersionEntry=Zt;exports.PlPackageConfigData=rr;exports.PlPackageJsonConfigFile=nr;exports.PlPackageYamlConfigFile=ir;exports.PlRegCommonConfigData=sr;exports.PlRegFullPackageConfigData=Ze;exports.PlRegPackageConfig=or;exports.PlRegPackageConfigDataShard=Ee;exports.ResolvedBlockPackDescriptionFromPackageJson=Ge;exports.ResolvedModuleFile=Tt;exports.ResolvedModuleFolder=Lt;exports.S3Storage=Qt;exports.absoluteToBase64=Ct;exports.absoluteToBytes=At;exports.absoluteToString=xe;exports.buildBlockPackDist=Or;exports.cpAbsoluteToRelative=ae;exports.getConfig=xi;exports.loadPackDescription=Tr;exports.loadPackDescriptionRaw=jt;exports.mapLocalToAbsolute=Ne;exports.packFolderToRelativeTgz=Ft;exports.packageContentPrefix=Ai;exports.packageContentPrefix$1=Ae;exports.packageOverviewPath=De;exports.packageOverviewPath$1=Be;exports.parsePackageName=ze;exports.payloadFilePath=Qe;exports.relativeToContentString=Bt;exports.relativeToExplicitBinary64=kr;exports.relativeToExplicitBytes=K;exports.relativeToExplicitString=fe;exports.storageByUrl=tr;exports.tryLoadPackDescription=Nr;
|
|
3
|
-
//# sourceMappingURL=config-B1U40s2a.js.map
|