@platforma-sdk/block-tools 2.1.10 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/cli.mjs +266 -80
  4. package/dist/cli.mjs.map +1 -1
  5. package/dist/cmd/index.d.ts +2 -0
  6. package/dist/cmd/index.d.ts.map +1 -1
  7. package/dist/cmd/publish.d.ts +11 -0
  8. package/dist/cmd/publish.d.ts.map +1 -0
  9. package/dist/config-DJqN5LSx.js +3 -0
  10. package/dist/config-DJqN5LSx.js.map +1 -0
  11. package/dist/{config-jteHItEq.mjs → config-rGaQLD-7.mjs} +634 -609
  12. package/dist/config-rGaQLD-7.mjs.map +1 -0
  13. package/dist/index.js +1 -1
  14. package/dist/index.mjs +29 -27
  15. package/dist/registry_v1/config_schema.d.ts +13 -13
  16. package/dist/v2/build_dist.d.ts +2 -1
  17. package/dist/v2/build_dist.d.ts.map +1 -1
  18. package/dist/v2/model/block_components.d.ts +169 -177
  19. package/dist/v2/model/block_components.d.ts.map +1 -1
  20. package/dist/v2/model/block_description.d.ts +2873 -0
  21. package/dist/v2/model/block_description.d.ts.map +1 -0
  22. package/dist/v2/model/{meta.d.ts → block_meta.d.ts} +1 -1
  23. package/dist/v2/model/block_meta.d.ts.map +1 -0
  24. package/dist/v2/model/content_conversion.d.ts +5 -2
  25. package/dist/v2/model/content_conversion.d.ts.map +1 -1
  26. package/dist/v2/model/index.d.ts +3 -2079
  27. package/dist/v2/model/index.d.ts.map +1 -1
  28. package/dist/v2/registry/registry.d.ts +16 -0
  29. package/dist/v2/registry/registry.d.ts.map +1 -0
  30. package/dist/v2/registry/schema_internal.d.ts +7 -0
  31. package/dist/v2/registry/schema_internal.d.ts.map +1 -0
  32. package/dist/v2/registry/schema_public.d.ts +2828 -0
  33. package/dist/v2/registry/schema_public.d.ts.map +1 -0
  34. package/package.json +11 -10
  35. package/src/cmd/build-meta.ts +1 -1
  36. package/src/cmd/index.ts +2 -0
  37. package/src/cmd/publish.ts +69 -0
  38. package/src/registry_v1/registry.ts +1 -1
  39. package/src/v2/build_dist.ts +16 -12
  40. package/src/v2/model/block_components.ts +14 -10
  41. package/src/v2/model/block_description.ts +49 -0
  42. package/src/v2/model/{meta.ts → block_meta.ts} +1 -1
  43. package/src/v2/model/content_conversion.ts +50 -21
  44. package/src/v2/model/index.ts +3 -44
  45. package/src/v2/registry/registry.ts +233 -0
  46. package/src/v2/registry/schema_internal.ts +13 -0
  47. package/src/v2/registry/schema_public.ts +90 -0
  48. package/dist/config-B8NlJ02C.js +0 -3
  49. package/dist/config-B8NlJ02C.js.map +0 -1
  50. package/dist/config-jteHItEq.mjs.map +0 -1
  51. package/dist/v2/model/common.d.ts +0 -3
  52. package/dist/v2/model/common.d.ts.map +0 -1
  53. package/dist/v2/model/content_types.d.ts +0 -478
  54. package/dist/v2/model/content_types.d.ts.map +0 -1
  55. package/dist/v2/model/meta.d.ts.map +0 -1
  56. package/dist/v2/registry/schema.d.ts +0 -15
  57. package/dist/v2/registry/schema.d.ts.map +0 -1
  58. package/src/v2/model/common.ts +0 -2
  59. package/src/v2/model/content_types.ts +0 -233
  60. package/src/v2/registry/schema.ts +0 -29
@@ -0,0 +1,233 @@
1
+ import { MiLogger } from '@milaboratories/ts-helpers';
2
+ import { compare as compareSemver, satisfies } from 'semver';
3
+ import { RegistryStorage } from '../../lib/storage';
4
+ import { BlockPackIdNoVersion, BlockPackManifest } from '@milaboratories/pl-model-middle-layer';
5
+ import {
6
+ GlobalUpdateSeedInFile,
7
+ GlobalUpdateSeedOutFile,
8
+ PackageUpdatePattern,
9
+ packageUpdateSeedPath,
10
+ VersionUpdatesPrefix
11
+ } from './schema_internal';
12
+ import {
13
+ GlobalOverviewReg,
14
+ GlobalOverviewPath,
15
+ ManifestSuffix,
16
+ packageContentPrefix,
17
+ PackageOverview,
18
+ packageOverviewPath,
19
+ ManifestFileName
20
+ } from './schema_public';
21
+ import { BlockPackDescriptionManifestAddRelativePathPrefix, RelativeContentReader } from '../model';
22
+ import { randomUUID } from 'node:crypto';
23
+
24
+ type PackageUpdateInfo = {
25
+ package: BlockPackIdNoVersion;
26
+ versions: Set<String>;
27
+ };
28
+
29
+ export class BlockRegistryV2 {
30
+ constructor(
31
+ private readonly storage: RegistryStorage,
32
+ private readonly logger?: MiLogger
33
+ ) {}
34
+
35
+ private async updateRegistry() {
36
+ this.logger?.info('Initiating registry refresh...');
37
+
38
+ // reading update requests
39
+ const packagesToUpdate = new Map<string, PackageUpdateInfo>();
40
+ const seedPaths: string[] = [];
41
+ const rawSeedPaths = await this.storage.listFiles(VersionUpdatesPrefix);
42
+ this.logger?.info('Packages to be updated:');
43
+ for (const seedPath of rawSeedPaths) {
44
+ const match = seedPath.match(PackageUpdatePattern);
45
+ if (!match) continue;
46
+ seedPaths.push(seedPath);
47
+ const { packageKeyWithoutVersion, organization, name, version, seed } = match.groups!;
48
+
49
+ let update = packagesToUpdate.get(packageKeyWithoutVersion);
50
+ let added = false;
51
+ if (!update) {
52
+ packagesToUpdate.set(packageKeyWithoutVersion, {
53
+ package: { organization, name },
54
+ versions: new Set([version])
55
+ });
56
+ added = true;
57
+ } else if (!update.versions.has(version)) {
58
+ update.versions.add(version);
59
+ added = true;
60
+ }
61
+ this.logger?.info(` - ${organization}:${name}:${version} added:${added}`);
62
+ }
63
+
64
+ // loading global overview
65
+ const overviewContent = await this.storage.getFile(GlobalOverviewPath);
66
+ const overview: GlobalOverviewReg =
67
+ overviewContent === undefined
68
+ ? { schema: 'v2', packages: [] }
69
+ : GlobalOverviewReg.parse(JSON.parse(overviewContent.toString()));
70
+ let overviewPackages = overview.packages;
71
+ this.logger?.info(`Global overview loaded, ${overviewPackages.length} records`);
72
+
73
+ // updating packages
74
+ for (const [, packageInfo] of packagesToUpdate.entries()) {
75
+ // reading existing overview
76
+ const overviewFile = packageOverviewPath(packageInfo.package);
77
+ const pOverviewContent = await this.storage.getFile(overviewFile);
78
+ let packageOverview: PackageOverview =
79
+ pOverviewContent === undefined
80
+ ? { schema: 'v2', versions: [] }
81
+ : PackageOverview.parse(JSON.parse(pOverviewContent.toString()));
82
+ this.logger?.info(
83
+ `Updating ${packageInfo.package.organization}:${packageInfo.package.name} overview, ${packageOverview.versions.length} records`
84
+ );
85
+
86
+ // removing versions that we will update
87
+ const newVersions = packageOverview.versions.filter(
88
+ (e) => !packageInfo.versions.has(e.id.version)
89
+ );
90
+
91
+ // reading new entries
92
+ for (const [v] of packageInfo.versions.entries()) {
93
+ const version = v.toString();
94
+ const manifestContent = await this.storage.getFile(
95
+ packageContentPrefix({
96
+ ...packageInfo.package,
97
+ version
98
+ }) + ManifestSuffix
99
+ );
100
+ if (!manifestContent) continue; // absent package
101
+ newVersions.push(
102
+ BlockPackDescriptionManifestAddRelativePathPrefix(version).parse(
103
+ BlockPackManifest.parse(JSON.parse(manifestContent.toString('utf8'))).description
104
+ )
105
+ );
106
+ }
107
+
108
+ // sorting entries according to version
109
+ newVersions.sort((e1, e2) => compareSemver(e2.id.version, e1.id.version));
110
+
111
+ // write package overview back
112
+ await this.storage.putFile(
113
+ overviewFile,
114
+ Buffer.from(
115
+ JSON.stringify({ schema: 'v2', versions: newVersions } satisfies PackageOverview)
116
+ )
117
+ );
118
+ this.logger?.info(`Done (${newVersions.length} records)`);
119
+
120
+ // patching corresponding entry in overview
121
+ overviewPackages = overviewPackages.filter(
122
+ (e) =>
123
+ e.id.organization !== packageInfo.package.organization ||
124
+ e.id.name !== packageInfo.package.name
125
+ );
126
+ overviewPackages.push({
127
+ id: {
128
+ organization: packageInfo.package.organization,
129
+ name: packageInfo.package.name
130
+ },
131
+ allVersions: newVersions.map((e) => e.id.version).reverse(),
132
+ latest: BlockPackDescriptionManifestAddRelativePathPrefix(packageInfo.package.name).parse(
133
+ newVersions[0]
134
+ )
135
+ });
136
+ }
137
+
138
+ // writing global overview
139
+ await this.storage.putFile(
140
+ GlobalOverviewPath,
141
+ Buffer.from(
142
+ JSON.stringify({ schema: 'v2', packages: overviewPackages } satisfies GlobalOverviewReg)
143
+ )
144
+ );
145
+ this.logger?.info(`Global overview updated (${overviewPackages.length} records)`);
146
+
147
+ // deleting seeds
148
+ await this.storage.deleteFiles(...seedPaths.map((sp) => `${VersionUpdatesPrefix}${sp}`));
149
+ this.logger?.info(`Version update requests cleared`);
150
+ }
151
+
152
+ public async updateIfNeeded(force: boolean = false): Promise<void> {
153
+ // implementation of main convergence algorithm
154
+
155
+ this.logger?.info(`Checking if registry requires refresh...`);
156
+ const updateRequestSeed = await this.storage.getFile(GlobalUpdateSeedInFile);
157
+ const currentUpdatedSeed = await this.storage.getFile(GlobalUpdateSeedOutFile);
158
+ if (!force && updateRequestSeed === undefined && currentUpdatedSeed === undefined) return;
159
+ if (
160
+ !force &&
161
+ updateRequestSeed !== undefined &&
162
+ currentUpdatedSeed !== undefined &&
163
+ updateRequestSeed.equals(currentUpdatedSeed)
164
+ )
165
+ return;
166
+
167
+ await this.updateRegistry();
168
+
169
+ if (updateRequestSeed) {
170
+ await this.storage.putFile(GlobalUpdateSeedOutFile, updateRequestSeed);
171
+ this.logger?.info(`Refresh finished`);
172
+ }
173
+ }
174
+
175
+ public async getPackageOverview(
176
+ name: BlockPackIdNoVersion
177
+ ): Promise<undefined | PackageOverview> {
178
+ const content = await this.storage.getFile(packageOverviewPath(name));
179
+ if (content === undefined) return undefined;
180
+ return PackageOverview.parse(JSON.parse(content.toString()));
181
+ }
182
+
183
+ public async getGlobalOverview(): Promise<undefined | GlobalOverviewReg> {
184
+ const content = await this.storage.getFile(GlobalOverviewPath);
185
+ if (content === undefined) return undefined;
186
+ return GlobalOverviewReg.parse(JSON.parse(content.toString()));
187
+ }
188
+
189
+ // public async getGlobalOverviewExplicitBytes(): Promise<undefined | GlobalOverviewReg> {
190
+ // const content = await this.storage.getFile(GlobalOverviewPath);
191
+ // if (content === undefined) return undefined;
192
+ // return GlobalOverviewReg.parse(JSON.parse(content.toString()));
193
+ // }
194
+
195
+ public async publishPackage(
196
+ manifest: BlockPackManifest,
197
+ fileReader: RelativeContentReader
198
+ ): Promise<void> {
199
+ const prefix = packageContentPrefix(manifest.description.id);
200
+ // uploading content files
201
+ for (const f of manifest.files) {
202
+ const bytes = await fileReader(f.name);
203
+ if (bytes.length !== f.size)
204
+ throw new Error(
205
+ `Actual file size don't match file size from the manifest file for ${f.name} (actual = ${bytes.length}; manifest = ${f.size})`
206
+ );
207
+ const sha256 = Buffer.from(await crypto.subtle.digest('sha-256', bytes))
208
+ .toString('hex')
209
+ .toUpperCase();
210
+ if (sha256 !== f.sha256.toUpperCase())
211
+ throw new Error(
212
+ `Actual file SHA-256 don't match the checksum from the manifest file for ${f.name} (actual = ${sha256}; manifest = ${f.sha256.toUpperCase()})`
213
+ );
214
+
215
+ const dst = prefix + '/' + f.name;
216
+ this.logger?.info(`Uploading ${f.name} -> ${dst} ...`);
217
+ await this.storage.putFile(dst, bytes);
218
+ }
219
+
220
+ // uploading manifest as the last upload action
221
+ const manifestDst = prefix + '/' + ManifestFileName;
222
+ this.logger?.info(`Uploading manifest to ${manifestDst} ...`);
223
+ await this.storage.putFile(manifestDst, Buffer.from(JSON.stringify(manifest)));
224
+
225
+ // adding update seed
226
+ const seed = randomUUID();
227
+ const seedPath = packageUpdateSeedPath(manifest.description.id, seed);
228
+ this.logger?.info(`Creating update seed at ${seedPath} ...`);
229
+ await this.storage.putFile(seedPath, Buffer.from(seed));
230
+ this.logger?.info(`Touching global update seed ${GlobalUpdateSeedInFile} ...`);
231
+ await this.storage.putFile(GlobalUpdateSeedInFile, Buffer.from(seed));
232
+ }
233
+ }
@@ -0,0 +1,13 @@
1
+ import { BlockPackId } from '@milaboratories/pl-model-middle-layer';
2
+
3
+ export const VersionUpdatesPrefix = '_updates_v2/per_package_version/';
4
+
5
+ export function packageUpdateSeedPath(bp: BlockPackId, seed: string): string {
6
+ return `${VersionUpdatesPrefix}${bp.organization}/${bp.name}/${bp.version}/${seed}`;
7
+ }
8
+
9
+ export const PackageUpdatePattern =
10
+ /(?<packageKeyWithoutVersion>(?<organization>[^\/]+)\/(?<name>[^\/]+))\/(?<version>[^\/]+)\/(?<seed>[^\/]+)$/;
11
+
12
+ export const GlobalUpdateSeedInFile = '_updates_v2/_global_update_in';
13
+ export const GlobalUpdateSeedOutFile = '_updates_v2/_global_update_out';
@@ -0,0 +1,90 @@
1
+ import {
2
+ BlockComponentsManifest,
3
+ BlockPackDescriptionManifest,
4
+ BlockPackId,
5
+ BlockPackIdNoVersion,
6
+ BlockPackMeta,
7
+ ContentRelativeBinary,
8
+ ContentRelativeText,
9
+ CreateBlockPackDescriptionSchema
10
+ } from '@milaboratories/pl-model-middle-layer';
11
+ import { z } from 'zod';
12
+ import { RelativeContentReader, relativeToExplicitBytes, relativeToExplicitText } from '../model';
13
+
14
+ const MainPrefix = 'v2/';
15
+
16
+ export const ManifestFileName = 'manifest.json';
17
+
18
+ export function packageContentPrefix(bp: BlockPackId): string {
19
+ return `${MainPrefix}${bp.organization}/${bp.name}/${bp.version}`;
20
+ }
21
+
22
+ export const ManifestSuffix = '/' + ManifestFileName;
23
+
24
+ // export function payloadFilePath(bp: BlockPackId, file: string): string {
25
+ // return `${MainPrefix}${bp.organization}/${bp.name}/${bp.version}/${file}`;
26
+ // }
27
+
28
+ export const PackageOverview = z.object({
29
+ schema: z.literal('v2'),
30
+ versions: z.array(BlockPackDescriptionManifest)
31
+ });
32
+ export type PackageOverview = z.infer<typeof PackageOverview>;
33
+
34
+ export function packageOverviewPath(bp: BlockPackIdNoVersion): string {
35
+ return `${MainPrefix}${bp.organization}/${bp.name}/overview.json`;
36
+ }
37
+
38
+ export const GlobalOverviewPath = `${MainPrefix}overview.json`;
39
+
40
+ export function GlobalOverviewEntry<const Description extends z.ZodTypeAny>(
41
+ descriptionType: Description
42
+ ) {
43
+ return z.object({
44
+ id: BlockPackIdNoVersion,
45
+ allVersions: z.array(z.string()),
46
+ latest: descriptionType
47
+ });
48
+ }
49
+
50
+ export function GlobalOverview<const Description extends z.ZodTypeAny>(
51
+ descriptionType: Description
52
+ ) {
53
+ return z.object({
54
+ schema: z.literal('v2'),
55
+ packages: z.array(GlobalOverviewEntry(descriptionType))
56
+ });
57
+ }
58
+
59
+ export const GlobalOverviewReg = GlobalOverview(BlockPackDescriptionManifest);
60
+ export type GlobalOverviewReg = z.infer<typeof GlobalOverviewReg>;
61
+
62
+ export function GlobalOverviewToExplicitBinaryBytes(reader: RelativeContentReader) {
63
+ return GlobalOverview(
64
+ CreateBlockPackDescriptionSchema(
65
+ BlockComponentsManifest,
66
+ BlockPackMeta(
67
+ ContentRelativeText.transform(relativeToExplicitText(reader)),
68
+ ContentRelativeBinary.transform(relativeToExplicitBytes(reader))
69
+ )
70
+ )
71
+ );
72
+ }
73
+ export type GlobalOverviewExplicitBinaryBytes = z.infer<
74
+ ReturnType<typeof GlobalOverviewToExplicitBinaryBytes>
75
+ >;
76
+
77
+ export function GlobalOverviewToExplicitBinaryBase64(reader: RelativeContentReader) {
78
+ return GlobalOverview(
79
+ CreateBlockPackDescriptionSchema(
80
+ BlockComponentsManifest,
81
+ BlockPackMeta(
82
+ ContentRelativeText.transform(relativeToExplicitText(reader)),
83
+ ContentRelativeBinary.transform(relativeToExplicitBytes(reader))
84
+ )
85
+ )
86
+ );
87
+ }
88
+ export type GlobalOverviewExplicitBinaryBase64 = z.infer<
89
+ ReturnType<typeof GlobalOverviewToExplicitBinaryBase64>
90
+ >;
@@ -1,3 +0,0 @@
1
- "use strict";var xt=Object.defineProperty;var Xt=(r,e,t)=>e in r?xt(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var Y=(r,e,t)=>Xt(r,typeof e!="symbol"?e+"":e,t);const z=require("node:fs/promises"),C=require("node:path"),k=require("zod"),qt=require("mime-types"),Jt=require("tar"),N=require("@milaboratories/pl-model-middle-layer"),ct=require("@milaboratories/ts-helpers"),Ht=require("yaml"),Wt=require("node:os"),Yt=require("node:crypto"),G=require("node:path/posix"),lt=require("@aws-sdk/client-s3"),Kt=require("node:fs");function ne(r){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const t in r)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(r,t);Object.defineProperty(e,t,s.get?s:{enumerable:!0,get:()=>r[t]})}}return e.default=r,Object.freeze(e)}const Zt=ne(qt),Qt=ne(Jt),Ge=ne(Wt),J=ne(Kt);function ut(r,e){try{return require.resolve(e,{paths:[r]})}catch(t){if(t.code!=="MODULE_NOT_FOUND")throw t}}function ft(r){return k.z.string().transform((e,t)=>{const s=ut(r,e);return s===void 0?(t.addIssue({code:k.z.ZodIssueCode.custom,message:`Can't resolve ${e} against ${r}`}),k.z.NEVER):{type:"absolute-file",file:s}})}function ht(r,...e){return k.z.string().transform((t,s)=>{const o=t.endsWith("/")?t:`${t}/`;for(const a of e){const c=ut(r,o+a);if(c!==void 0){if(!c.endsWith(a))throw new Error(`Unexpected resolve result ${c} with index file ${a}`);return{type:"absolute-folder",folder:c.slice(0,c.length-a.length)}}}return s.addIssue({code:k.z.ZodIssueCode.custom,message:`Can't resolve ${t} folder against ${r}, no index file found (${e.join(", ")})`}),k.z.NEVER})}function Re(r){return e=>e.type==="relative"?{type:"absolute-file",file:C.resolve(r,e.path)}:e}function pt(){return async r=>r.type==="absolute-file"?await z.readFile(r.file,{encoding:"utf-8"}):r.content}function Et(){return async r=>{if(r.type==="absolute-file"){const e=Zt.lookup(r.file);if(!e)throw new Error(`Can't recognize mime type of the file: ${r.file}.`);return{type:"explicit-base64",mimeType:e,content:await z.readFile(r.file,{encoding:"base64"})}}else return r}}function re(r,e){return async t=>{if(t.type==="absolute-file"){const s=C.basename(t.file),o=C.resolve(r,s);return e==null||e.push(s),await z.cp(t.file,o),{type:"relative",path:s}}else return t}}function $t(r,e,t){if(!e.endsWith(".tgz"))throw new Error(`Unexpected tgz file name: ${e}`);return async s=>{const o=C.resolve(r,e);return await Qt.create({gzip:!0,file:o,cwd:s.folder},[s.folder]),t==null||t.push(e),{type:"relative",path:e}}}function ve(r){const e=r.endsWith("/")?r:`${r}/`;return t=>t.type==="relative"?{type:"absolute-url",url:e+t.path}:t}function dt(r){return N.BlockComponents(ft(r),ht(r,"index.html"))}function gt(r,e){return N.BlockComponents(N.ContentAbsoluteBinaryLocal.transform(re(r,e)),N.ContentAbsoluteFolder.transform($t(r,"ui.tgz",e))).pipe(N.BlockComponentsManifest)}function er(r){return N.BlockComponents(N.ContentRelativeBinary.transform(ve(r)),N.ContentRelativeBinary.transform(ve(r)))}function mt(r){return N.BlockPackMeta(N.DescriptionContentText.transform(Re(r)),N.DescriptionContentBinary.transform(Re(r)))}function tr(r,e){return N.BlockPackMeta(N.ContentAbsoluteTextLocal.transform(re(r,e)),N.ContentAbsoluteBinaryLocal.transform(re(r,e)))}const rr=N.BlockPackMeta(N.ContentAbsoluteTextLocal.transform(pt()),N.ContentAbsoluteBinaryLocal.transform(Et())).pipe(N.BlockPackMetaEmbeddedContent);function Se(r){return N.CreateBlockPackDescriptionSchema(dt(r),mt(r))}function Rt(r,e){return N.CreateBlockPackDescriptionSchema(gt(r,e),tr(r,e)).pipe(Ne)}const Ne=N.CreateBlockPackDescriptionSchema(N.BlockComponentsManifest,N.BlockPackMetaManifest),vt=Ne.extend({schema:k.z.literal("v1"),files:k.z.array(k.z.string())}),wt="manifest.json";async function sr(r,e){await z.mkdir(e,{recursive:!0});const t=[],s=await Rt(e,t).parseAsync(r),o=vt.parse({schema:"v1",...s,files:t});return await z.writeFile(C.resolve(e,wt),JSON.stringify(o)),o}async function Oe(r,e){try{return e(await z.readFile(r))}catch(t){if(t.code=="ENOENT")return;throw new Error("",{cause:t})}}const se="block",nr=/(?:@[a-zA-Z0-9-.]+\/)?(?<organization>[a-zA-Z0-9-]+)\.(?<name>[a-zA-Z0-9-]+)/;function Le(r){const e=r.match(nr);if(!e)throw new Error(`Malformed package name (${r}), can't infer organization and block pack name.`);const{name:t,organization:s}=e.groups;return{name:t,organization:s}}async function ir(r){const e=C.resolve(r,"package.json");try{const t=await Oe(e,c=>JSON.parse(c.toString("utf-8")));if(t===void 0)return;const s=t[se];if(s===void 0)return;const o={...N.BlockPackDescriptionFromPackageJsonRaw.parse(s),id:{...Le(ct.notEmpty(t.name,`"name" not found in ${e}`)),version:N.SemVer.parse(t.version)}},a=await Se(r).safeParseAsync(o);return a.success?a.data:void 0}catch{return}}async function It(r){const e=C.resolve(r,"package.json"),t=JSON.parse(await z.readFile(e,{encoding:"utf-8"})),s=t[se];if(s===void 0)throw new Error(`Block description (field ${se}) not found in ${e}.`);return{...N.BlockPackDescriptionFromPackageJsonRaw.parse(s),id:{...Le(ct.notEmpty(t.name,`"name" not found in ${e}`)),version:N.SemVer.parse(t.version)}}}async function or(r){const e=await It(r);return await Se(r).parseAsync(e)}const ar=k.z.string().regex(/^(?:s3:|file:)/),Pt=k.z.object({organization:k.z.string(),package:k.z.string(),version:N.SemVer.optional(),files:k.z.record(k.z.string().regex(/^[^\/]+$/),k.z.string()).default({}),meta:k.z.object({}).passthrough()}),St=k.z.object({registries:k.z.record(k.z.string(),ar).default({}),registry:k.z.string().optional()}),ke=St.merge(Pt).required({registry:!0,version:!0}),ie=ke.partial().required({registries:!0,files:!0}),Nt="pl.package.json",Ot="pl.package.yaml";function cr(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}var we={exports:{}};const lr="2.0.0",Lt=256,ur=Number.MAX_SAFE_INTEGER||9007199254740991,fr=16,hr=Lt-6,pr=["major","premajor","minor","preminor","patch","prepatch","prerelease"];var oe={MAX_LENGTH:Lt,MAX_SAFE_COMPONENT_LENGTH:fr,MAX_SAFE_BUILD_LENGTH:hr,MAX_SAFE_INTEGER:ur,RELEASE_TYPES:pr,SEMVER_SPEC_VERSION:lr,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2};const Er=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error("SEMVER",...r):()=>{};var ae=Er;(function(r,e){const{MAX_SAFE_COMPONENT_LENGTH:t,MAX_SAFE_BUILD_LENGTH:s,MAX_LENGTH:o}=oe,a=ae;e=r.exports={};const c=e.re=[],v=e.safeRe=[],n=e.src=[],i=e.t={};let u=0;const p="[a-zA-Z0-9-]",P=[["\\s",1],["\\d",o],[p,s]],E=F=>{for(const[y,L]of P)F=F.split(`${y}*`).join(`${y}{0,${L}}`).split(`${y}+`).join(`${y}{1,${L}}`);return F},f=(F,y,L)=>{const A=E(y),I=u++;a(F,I,y),i[F]=I,n[I]=y,c[I]=new RegExp(y,L?"g":void 0),v[I]=new RegExp(A,L?"g":void 0)};f("NUMERICIDENTIFIER","0|[1-9]\\d*"),f("NUMERICIDENTIFIERLOOSE","\\d+"),f("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${p}*`),f("MAINVERSION",`(${n[i.NUMERICIDENTIFIER]})\\.(${n[i.NUMERICIDENTIFIER]})\\.(${n[i.NUMERICIDENTIFIER]})`),f("MAINVERSIONLOOSE",`(${n[i.NUMERICIDENTIFIERLOOSE]})\\.(${n[i.NUMERICIDENTIFIERLOOSE]})\\.(${n[i.NUMERICIDENTIFIERLOOSE]})`),f("PRERELEASEIDENTIFIER",`(?:${n[i.NUMERICIDENTIFIER]}|${n[i.NONNUMERICIDENTIFIER]})`),f("PRERELEASEIDENTIFIERLOOSE",`(?:${n[i.NUMERICIDENTIFIERLOOSE]}|${n[i.NONNUMERICIDENTIFIER]})`),f("PRERELEASE",`(?:-(${n[i.PRERELEASEIDENTIFIER]}(?:\\.${n[i.PRERELEASEIDENTIFIER]})*))`),f("PRERELEASELOOSE",`(?:-?(${n[i.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${n[i.PRERELEASEIDENTIFIERLOOSE]})*))`),f("BUILDIDENTIFIER",`${p}+`),f("BUILD",`(?:\\+(${n[i.BUILDIDENTIFIER]}(?:\\.${n[i.BUILDIDENTIFIER]})*))`),f("FULLPLAIN",`v?${n[i.MAINVERSION]}${n[i.PRERELEASE]}?${n[i.BUILD]}?`),f("FULL",`^${n[i.FULLPLAIN]}$`),f("LOOSEPLAIN",`[v=\\s]*${n[i.MAINVERSIONLOOSE]}${n[i.PRERELEASELOOSE]}?${n[i.BUILD]}?`),f("LOOSE",`^${n[i.LOOSEPLAIN]}$`),f("GTLT","((?:<|>)?=?)"),f("XRANGEIDENTIFIERLOOSE",`${n[i.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),f("XRANGEIDENTIFIER",`${n[i.NUMERICIDENTIFIER]}|x|X|\\*`),f("XRANGEPLAIN",`[v=\\s]*(${n[i.XRANGEIDENTIFIER]})(?:\\.(${n[i.XRANGEIDENTIFIER]})(?:\\.(${n[i.XRANGEIDENTIFIER]})(?:${n[i.PRERELEASE]})?${n[i.BUILD]}?)?)?`),f("XRANGEPLAINLOOSE",`[v=\\s]*(${n[i.XRANGEIDENTIFIERLOOSE]})(?:\\.(${n[i.XRANGEIDENTIFIERLOOSE]})(?:\\.(${n[i.XRANGEIDENTIFIERLOOSE]})(?:${n[i.PRERELEASELOOSE]})?${n[i.BUILD]}?)?)?`),f("XRANGE",`^${n[i.GTLT]}\\s*${n[i.XRANGEPLAIN]}$`),f("XRANGELOOSE",`^${n[i.GTLT]}\\s*${n[i.XRANGEPLAINLOOSE]}$`),f("COERCEPLAIN",`(^|[^\\d])(\\d{1,${t}})(?:\\.(\\d{1,${t}}))?(?:\\.(\\d{1,${t}}))?`),f("COERCE",`${n[i.COERCEPLAIN]}(?:$|[^\\d])`),f("COERCEFULL",n[i.COERCEPLAIN]+`(?:${n[i.PRERELEASE]})?(?:${n[i.BUILD]})?(?:$|[^\\d])`),f("COERCERTL",n[i.COERCE],!0),f("COERCERTLFULL",n[i.COERCEFULL],!0),f("LONETILDE","(?:~>?)"),f("TILDETRIM",`(\\s*)${n[i.LONETILDE]}\\s+`,!0),e.tildeTrimReplace="$1~",f("TILDE",`^${n[i.LONETILDE]}${n[i.XRANGEPLAIN]}$`),f("TILDELOOSE",`^${n[i.LONETILDE]}${n[i.XRANGEPLAINLOOSE]}$`),f("LONECARET","(?:\\^)"),f("CARETTRIM",`(\\s*)${n[i.LONECARET]}\\s+`,!0),e.caretTrimReplace="$1^",f("CARET",`^${n[i.LONECARET]}${n[i.XRANGEPLAIN]}$`),f("CARETLOOSE",`^${n[i.LONECARET]}${n[i.XRANGEPLAINLOOSE]}$`),f("COMPARATORLOOSE",`^${n[i.GTLT]}\\s*(${n[i.LOOSEPLAIN]})$|^$`),f("COMPARATOR",`^${n[i.GTLT]}\\s*(${n[i.FULLPLAIN]})$|^$`),f("COMPARATORTRIM",`(\\s*)${n[i.GTLT]}\\s*(${n[i.LOOSEPLAIN]}|${n[i.XRANGEPLAIN]})`,!0),e.comparatorTrimReplace="$1$2$3",f("HYPHENRANGE",`^\\s*(${n[i.XRANGEPLAIN]})\\s+-\\s+(${n[i.XRANGEPLAIN]})\\s*$`),f("HYPHENRANGELOOSE",`^\\s*(${n[i.XRANGEPLAINLOOSE]})\\s+-\\s+(${n[i.XRANGEPLAINLOOSE]})\\s*$`),f("STAR","(<|>)?=?\\s*\\*"),f("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),f("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")})(we,we.exports);var W=we.exports;const $r=Object.freeze({loose:!0}),dr=Object.freeze({}),gr=r=>r?typeof r!="object"?$r:r:dr;var Te=gr;const Ue=/^[0-9]+$/,kt=(r,e)=>{const t=Ue.test(r),s=Ue.test(e);return t&&s&&(r=+r,e=+e),r===e?0:t&&!s?-1:s&&!t?1:r<e?-1:1},mr=(r,e)=>kt(e,r);var Tt={compareIdentifiers:kt,rcompareIdentifiers:mr};const K=ae,{MAX_LENGTH:ze,MAX_SAFE_INTEGER:Z}=oe,{safeRe:Ve,t:Me}=W,Rr=Te,{compareIdentifiers:V}=Tt;let vr=class B{constructor(e,t){if(t=Rr(t),e instanceof B){if(e.loose===!!t.loose&&e.includePrerelease===!!t.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>ze)throw new TypeError(`version is longer than ${ze} characters`);K("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;const s=e.trim().match(t.loose?Ve[Me.LOOSE]:Ve[Me.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>Z||this.major<0)throw new TypeError("Invalid major version");if(this.minor>Z||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>Z||this.patch<0)throw new TypeError("Invalid patch version");s[4]?this.prerelease=s[4].split(".").map(o=>{if(/^[0-9]+$/.test(o)){const a=+o;if(a>=0&&a<Z)return a}return o}):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(K("SemVer.compare",this.version,this.options,e),!(e instanceof B)){if(typeof e=="string"&&e===this.version)return 0;e=new B(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof B||(e=new B(e,this.options)),V(this.major,e.major)||V(this.minor,e.minor)||V(this.patch,e.patch)}comparePre(e){if(e instanceof B||(e=new B(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 t=0;do{const s=this.prerelease[t],o=e.prerelease[t];if(K("prerelease compare",t,s,o),s===void 0&&o===void 0)return 0;if(o===void 0)return 1;if(s===void 0)return-1;if(s===o)continue;return V(s,o)}while(++t)}compareBuild(e){e instanceof B||(e=new B(e,this.options));let t=0;do{const s=this.build[t],o=e.build[t];if(K("build compare",t,s,o),s===void 0&&o===void 0)return 0;if(o===void 0)return 1;if(s===void 0)return-1;if(s===o)continue;return V(s,o)}while(++t)}inc(e,t,s){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t,s);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t,s);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t,s),this.inc("pre",t,s);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",t,s),this.inc("pre",t,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 o=Number(s)?1:0;if(!t&&s===!1)throw new Error("invalid increment argument: identifier is empty");if(this.prerelease.length===0)this.prerelease=[o];else{let a=this.prerelease.length;for(;--a>=0;)typeof this.prerelease[a]=="number"&&(this.prerelease[a]++,a=-2);if(a===-1){if(t===this.prerelease.join(".")&&s===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(o)}}if(t){let a=[t,o];s===!1&&(a=[t]),V(this.prerelease[0],t)===0?isNaN(this.prerelease[1])&&(this.prerelease=a):this.prerelease=a}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};var D=vr;const xe=D,wr=(r,e,t=!1)=>{if(r instanceof xe)return r;try{return new xe(r,e)}catch(s){if(!t)return null;throw s}};var M=wr;const Ir=M,Pr=(r,e)=>{const t=Ir(r,e);return t?t.version:null};var Sr=Pr;const Nr=M,Or=(r,e)=>{const t=Nr(r.trim().replace(/^[=v]+/,""),e);return t?t.version:null};var Lr=Or;const Xe=D,kr=(r,e,t,s,o)=>{typeof t=="string"&&(o=s,s=t,t=void 0);try{return new Xe(r instanceof Xe?r.version:r,t).inc(e,s,o).version}catch{return null}};var Tr=kr;const qe=M,yr=(r,e)=>{const t=qe(r,null,!0),s=qe(e,null,!0),o=t.compare(s);if(o===0)return null;const a=o>0,c=a?t:s,v=a?s:t,n=!!c.prerelease.length;if(!!v.prerelease.length&&!n)return!v.patch&&!v.minor?"major":c.patch?"patch":c.minor?"minor":"major";const u=n?"pre":"";return t.major!==s.major?u+"major":t.minor!==s.minor?u+"minor":t.patch!==s.patch?u+"patch":"prerelease"};var Ar=yr;const Cr=D,Fr=(r,e)=>new Cr(r,e).major;var Dr=Fr;const br=D,_r=(r,e)=>new br(r,e).minor;var jr=_r;const Br=D,Gr=(r,e)=>new Br(r,e).patch;var Ur=Gr;const zr=M,Vr=(r,e)=>{const t=zr(r,e);return t&&t.prerelease.length?t.prerelease:null};var Mr=Vr;const Je=D,xr=(r,e,t)=>new Je(r,t).compare(new Je(e,t));var _=xr;const Xr=_,qr=(r,e,t)=>Xr(e,r,t);var Jr=qr;const Hr=_,Wr=(r,e)=>Hr(r,e,!0);var Yr=Wr;const He=D,Kr=(r,e,t)=>{const s=new He(r,t),o=new He(e,t);return s.compare(o)||s.compareBuild(o)};var ye=Kr;const Zr=ye,Qr=(r,e)=>r.sort((t,s)=>Zr(t,s,e));var es=Qr;const ts=ye,rs=(r,e)=>r.sort((t,s)=>ts(s,t,e));var ss=rs;const ns=_,is=(r,e,t)=>ns(r,e,t)>0;var ce=is;const os=_,as=(r,e,t)=>os(r,e,t)<0;var Ae=as;const cs=_,ls=(r,e,t)=>cs(r,e,t)===0;var yt=ls;const us=_,fs=(r,e,t)=>us(r,e,t)!==0;var At=fs;const hs=_,ps=(r,e,t)=>hs(r,e,t)>=0;var Ce=ps;const Es=_,$s=(r,e,t)=>Es(r,e,t)<=0;var Fe=$s;const ds=yt,gs=At,ms=ce,Rs=Ce,vs=Ae,ws=Fe,Is=(r,e,t,s)=>{switch(e){case"===":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r===t;case"!==":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r!==t;case"":case"=":case"==":return ds(r,t,s);case"!=":return gs(r,t,s);case">":return ms(r,t,s);case">=":return Rs(r,t,s);case"<":return vs(r,t,s);case"<=":return ws(r,t,s);default:throw new TypeError(`Invalid operator: ${e}`)}};var Ct=Is;const Ps=D,Ss=M,{safeRe:Q,t:ee}=W,Ns=(r,e)=>{if(r instanceof Ps)return r;if(typeof r=="number"&&(r=String(r)),typeof r!="string")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(e.includePrerelease?Q[ee.COERCEFULL]:Q[ee.COERCE]);else{const n=e.includePrerelease?Q[ee.COERCERTLFULL]:Q[ee.COERCERTL];let i;for(;(i=n.exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),n.lastIndex=i.index+i[1].length+i[2].length;n.lastIndex=-1}if(t===null)return null;const s=t[2],o=t[3]||"0",a=t[4]||"0",c=e.includePrerelease&&t[5]?`-${t[5]}`:"",v=e.includePrerelease&&t[6]?`+${t[6]}`:"";return Ss(`${s}.${o}.${a}${c}${v}`,e)};var Os=Ns;class Ls{constructor(){this.max=1e3,this.map=new Map}get(e){const t=this.map.get(e);if(t!==void 0)return this.map.delete(e),this.map.set(e,t),t}delete(e){return this.map.delete(e)}set(e,t){if(!this.delete(e)&&t!==void 0){if(this.map.size>=this.max){const o=this.map.keys().next().value;this.delete(o)}this.map.set(e,t)}return this}}var ks=Ls,he,We;function j(){if(We)return he;We=1;const r=/\s+/g;class e{constructor(l,g){if(g=o(g),l instanceof e)return l.loose===!!g.loose&&l.includePrerelease===!!g.includePrerelease?l:new e(l.raw,g);if(l instanceof a)return this.raw=l.value,this.set=[[l]],this.formatted=void 0,this;if(this.options=g,this.loose=!!g.loose,this.includePrerelease=!!g.includePrerelease,this.raw=l.trim().replace(r," "),this.set=this.raw.split("||").map($=>this.parseRange($.trim())).filter($=>$.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){const $=this.set[0];if(this.set=this.set.filter(m=>!F(m[0])),this.set.length===0)this.set=[$];else if(this.set.length>1){for(const m of this.set)if(m.length===1&&y(m[0])){this.set=[m];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 g=this.set[l];for(let $=0;$<g.length;$++)$>0&&(this.formatted+=" "),this.formatted+=g[$].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(l){const $=((this.options.includePrerelease&&E)|(this.options.loose&&f))+":"+l,m=s.get($);if(m)return m;const d=this.options.loose,R=d?n[i.HYPHENRANGELOOSE]:n[i.HYPHENRANGE];l=l.replace(R,Vt(this.options.includePrerelease)),c("hyphen replace",l),l=l.replace(n[i.COMPARATORTRIM],u),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 S=l.split(" ").map(T=>A(T,this.options)).join(" ").split(/\s+/).map(T=>zt(T,this.options));d&&(S=S.filter(T=>(c("loose invalid filter",T,this.options),!!T.match(n[i.COMPARATORLOOSE])))),c("range list",S);const w=new Map,O=S.map(T=>new a(T,this.options));for(const T of O){if(F(T))return[T];w.set(T.value,T)}w.size>1&&w.has("")&&w.delete("");const b=[...w.values()];return s.set($,b),b}intersects(l,g){if(!(l instanceof e))throw new TypeError("a Range is required");return this.set.some($=>L($,g)&&l.set.some(m=>L(m,g)&&$.every(d=>m.every(R=>d.intersects(R,g)))))}test(l){if(!l)return!1;if(typeof l=="string")try{l=new v(l,this.options)}catch{return!1}for(let g=0;g<this.set.length;g++)if(Mt(this.set[g],l,this.options))return!0;return!1}}he=e;const t=ks,s=new t,o=Te,a=le(),c=ae,v=D,{safeRe:n,t:i,comparatorTrimReplace:u,tildeTrimReplace:p,caretTrimReplace:P}=W,{FLAG_INCLUDE_PRERELEASE:E,FLAG_LOOSE:f}=oe,F=h=>h.value==="<0.0.0-0",y=h=>h.value==="",L=(h,l)=>{let g=!0;const $=h.slice();let m=$.pop();for(;g&&$.length;)g=$.every(d=>m.intersects(d,l)),m=$.pop();return g},A=(h,l)=>(c("comp",h,l),h=_t(h,l),c("caret",h),h=x(h,l),c("tildes",h),h=Bt(h,l),c("xrange",h),h=Ut(h,l),c("stars",h),h),I=h=>!h||h.toLowerCase()==="x"||h==="*",x=(h,l)=>h.trim().split(/\s+/).map(g=>X(g,l)).join(" "),X=(h,l)=>{const g=l.loose?n[i.TILDELOOSE]:n[i.TILDE];return h.replace(g,($,m,d,R,S)=>{c("tilde",h,$,m,d,R,S);let w;return I(m)?w="":I(d)?w=`>=${m}.0.0 <${+m+1}.0.0-0`:I(R)?w=`>=${m}.${d}.0 <${m}.${+d+1}.0-0`:S?(c("replaceTilde pr",S),w=`>=${m}.${d}.${R}-${S} <${m}.${+d+1}.0-0`):w=`>=${m}.${d}.${R} <${m}.${+d+1}.0-0`,c("tilde return",w),w})},_t=(h,l)=>h.trim().split(/\s+/).map(g=>jt(g,l)).join(" "),jt=(h,l)=>{c("caret",h,l);const g=l.loose?n[i.CARETLOOSE]:n[i.CARET],$=l.includePrerelease?"-0":"";return h.replace(g,(m,d,R,S,w)=>{c("caret",h,m,d,R,S,w);let O;return I(d)?O="":I(R)?O=`>=${d}.0.0${$} <${+d+1}.0.0-0`:I(S)?d==="0"?O=`>=${d}.${R}.0${$} <${d}.${+R+1}.0-0`:O=`>=${d}.${R}.0${$} <${+d+1}.0.0-0`:w?(c("replaceCaret pr",w),d==="0"?R==="0"?O=`>=${d}.${R}.${S}-${w} <${d}.${R}.${+S+1}-0`:O=`>=${d}.${R}.${S}-${w} <${d}.${+R+1}.0-0`:O=`>=${d}.${R}.${S}-${w} <${+d+1}.0.0-0`):(c("no pr"),d==="0"?R==="0"?O=`>=${d}.${R}.${S}${$} <${d}.${R}.${+S+1}-0`:O=`>=${d}.${R}.${S}${$} <${d}.${+R+1}.0-0`:O=`>=${d}.${R}.${S} <${+d+1}.0.0-0`),c("caret return",O),O})},Bt=(h,l)=>(c("replaceXRanges",h,l),h.split(/\s+/).map(g=>Gt(g,l)).join(" ")),Gt=(h,l)=>{h=h.trim();const g=l.loose?n[i.XRANGELOOSE]:n[i.XRANGE];return h.replace(g,($,m,d,R,S,w)=>{c("xRange",h,$,m,d,R,S,w);const O=I(d),b=O||I(R),T=b||I(S),q=T;return m==="="&&q&&(m=""),w=l.includePrerelease?"-0":"",O?m===">"||m==="<"?$="<0.0.0-0":$="*":m&&q?(b&&(R=0),S=0,m===">"?(m=">=",b?(d=+d+1,R=0,S=0):(R=+R+1,S=0)):m==="<="&&(m="<",b?d=+d+1:R=+R+1),m==="<"&&(w="-0"),$=`${m+d}.${R}.${S}${w}`):b?$=`>=${d}.0.0${w} <${+d+1}.0.0-0`:T&&($=`>=${d}.${R}.0${w} <${d}.${+R+1}.0-0`),c("xRange return",$),$})},Ut=(h,l)=>(c("replaceStars",h,l),h.trim().replace(n[i.STAR],"")),zt=(h,l)=>(c("replaceGTE0",h,l),h.trim().replace(n[l.includePrerelease?i.GTE0PRE:i.GTE0],"")),Vt=h=>(l,g,$,m,d,R,S,w,O,b,T,q)=>(I($)?g="":I(m)?g=`>=${$}.0.0${h?"-0":""}`:I(d)?g=`>=${$}.${m}.0${h?"-0":""}`:R?g=`>=${g}`:g=`>=${g}${h?"-0":""}`,I(O)?w="":I(b)?w=`<${+O+1}.0.0-0`:I(T)?w=`<${O}.${+b+1}.0-0`:q?w=`<=${O}.${b}.${T}-${q}`:h?w=`<${O}.${b}.${+T+1}-0`:w=`<=${w}`,`${g} ${w}`.trim()),Mt=(h,l,g)=>{for(let $=0;$<h.length;$++)if(!h[$].test(l))return!1;if(l.prerelease.length&&!g.includePrerelease){for(let $=0;$<h.length;$++)if(c(h[$].semver),h[$].semver!==a.ANY&&h[$].semver.prerelease.length>0){const m=h[$].semver;if(m.major===l.major&&m.minor===l.minor&&m.patch===l.patch)return!0}return!1}return!0};return he}var pe,Ye;function le(){if(Ye)return pe;Ye=1;const r=Symbol("SemVer ANY");class e{static get ANY(){return r}constructor(u,p){if(p=t(p),u instanceof e){if(u.loose===!!p.loose)return u;u=u.value}u=u.trim().split(/\s+/).join(" "),c("comparator",u,p),this.options=p,this.loose=!!p.loose,this.parse(u),this.semver===r?this.value="":this.value=this.operator+this.semver.version,c("comp",this)}parse(u){const p=this.options.loose?s[o.COMPARATORLOOSE]:s[o.COMPARATOR],P=u.match(p);if(!P)throw new TypeError(`Invalid comparator: ${u}`);this.operator=P[1]!==void 0?P[1]:"",this.operator==="="&&(this.operator=""),P[2]?this.semver=new v(P[2],this.options.loose):this.semver=r}toString(){return this.value}test(u){if(c("Comparator.test",u,this.options.loose),this.semver===r||u===r)return!0;if(typeof u=="string")try{u=new v(u,this.options)}catch{return!1}return a(u,this.operator,this.semver,this.options)}intersects(u,p){if(!(u instanceof e))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new n(u.value,p).test(this.value):u.operator===""?u.value===""?!0:new n(this.value,p).test(u.semver):(p=t(p),p.includePrerelease&&(this.value==="<0.0.0-0"||u.value==="<0.0.0-0")||!p.includePrerelease&&(this.value.startsWith("<0.0.0")||u.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&u.operator.startsWith(">")||this.operator.startsWith("<")&&u.operator.startsWith("<")||this.semver.version===u.semver.version&&this.operator.includes("=")&&u.operator.includes("=")||a(this.semver,"<",u.semver,p)&&this.operator.startsWith(">")&&u.operator.startsWith("<")||a(this.semver,">",u.semver,p)&&this.operator.startsWith("<")&&u.operator.startsWith(">")))}}pe=e;const t=Te,{safeRe:s,t:o}=W,a=Ct,c=ae,v=D,n=j();return pe}const Ts=j(),ys=(r,e,t)=>{try{e=new Ts(e,t)}catch{return!1}return e.test(r)};var ue=ys;const As=j(),Cs=(r,e)=>new As(r,e).set.map(t=>t.map(s=>s.value).join(" ").trim().split(" "));var Fs=Cs;const Ds=D,bs=j(),_s=(r,e,t)=>{let s=null,o=null,a=null;try{a=new bs(e,t)}catch{return null}return r.forEach(c=>{a.test(c)&&(!s||o.compare(c)===-1)&&(s=c,o=new Ds(s,t))}),s};var js=_s;const Bs=D,Gs=j(),Us=(r,e,t)=>{let s=null,o=null,a=null;try{a=new Gs(e,t)}catch{return null}return r.forEach(c=>{a.test(c)&&(!s||o.compare(c)===1)&&(s=c,o=new Bs(s,t))}),s};var zs=Us;const Ee=D,Vs=j(),Ke=ce,Ms=(r,e)=>{r=new Vs(r,e);let t=new Ee("0.0.0");if(r.test(t)||(t=new Ee("0.0.0-0"),r.test(t)))return t;t=null;for(let s=0;s<r.set.length;++s){const o=r.set[s];let a=null;o.forEach(c=>{const v=new Ee(c.semver.version);switch(c.operator){case">":v.prerelease.length===0?v.patch++:v.prerelease.push(0),v.raw=v.format();case"":case">=":(!a||Ke(v,a))&&(a=v);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${c.operator}`)}}),a&&(!t||Ke(t,a))&&(t=a)}return t&&r.test(t)?t:null};var xs=Ms;const Xs=j(),qs=(r,e)=>{try{return new Xs(r,e).range||"*"}catch{return null}};var Js=qs;const Hs=D,Ft=le(),{ANY:Ws}=Ft,Ys=j(),Ks=ue,Ze=ce,Qe=Ae,Zs=Fe,Qs=Ce,en=(r,e,t,s)=>{r=new Hs(r,s),e=new Ys(e,s);let o,a,c,v,n;switch(t){case">":o=Ze,a=Zs,c=Qe,v=">",n=">=";break;case"<":o=Qe,a=Qs,c=Ze,v="<",n="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(Ks(r,e,s))return!1;for(let i=0;i<e.set.length;++i){const u=e.set[i];let p=null,P=null;if(u.forEach(E=>{E.semver===Ws&&(E=new Ft(">=0.0.0")),p=p||E,P=P||E,o(E.semver,p.semver,s)?p=E:c(E.semver,P.semver,s)&&(P=E)}),p.operator===v||p.operator===n||(!P.operator||P.operator===v)&&a(r,P.semver))return!1;if(P.operator===n&&c(r,P.semver))return!1}return!0};var De=en;const tn=De,rn=(r,e,t)=>tn(r,e,">",t);var sn=rn;const nn=De,on=(r,e,t)=>nn(r,e,"<",t);var an=on;const et=j(),cn=(r,e,t)=>(r=new et(r,t),e=new et(e,t),r.intersects(e,t));var ln=cn;const un=ue,fn=_;var hn=(r,e,t)=>{const s=[];let o=null,a=null;const c=r.sort((u,p)=>fn(u,p,t));for(const u of c)un(u,e,t)?(a=u,o||(o=u)):(a&&s.push([o,a]),a=null,o=null);o&&s.push([o,null]);const v=[];for(const[u,p]of s)u===p?v.push(u):!p&&u===c[0]?v.push("*"):p?u===c[0]?v.push(`<=${p}`):v.push(`${u} - ${p}`):v.push(`>=${u}`);const n=v.join(" || "),i=typeof e.raw=="string"?e.raw:String(e);return n.length<i.length?n:e};const tt=j(),be=le(),{ANY:$e}=be,H=ue,_e=_,pn=(r,e,t={})=>{if(r===e)return!0;r=new tt(r,t),e=new tt(e,t);let s=!1;e:for(const o of r.set){for(const a of e.set){const c=$n(o,a,t);if(s=s||c!==null,c)continue e}if(s)return!1}return!0},En=[new be(">=0.0.0-0")],rt=[new be(">=0.0.0")],$n=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===$e){if(e.length===1&&e[0].semver===$e)return!0;t.includePrerelease?r=En:r=rt}if(e.length===1&&e[0].semver===$e){if(t.includePrerelease)return!0;e=rt}const s=new Set;let o,a;for(const E of r)E.operator===">"||E.operator===">="?o=st(o,E,t):E.operator==="<"||E.operator==="<="?a=nt(a,E,t):s.add(E.semver);if(s.size>1)return null;let c;if(o&&a){if(c=_e(o.semver,a.semver,t),c>0)return null;if(c===0&&(o.operator!==">="||a.operator!=="<="))return null}for(const E of s){if(o&&!H(E,String(o),t)||a&&!H(E,String(a),t))return null;for(const f of e)if(!H(E,String(f),t))return!1;return!0}let v,n,i,u,p=a&&!t.includePrerelease&&a.semver.prerelease.length?a.semver:!1,P=o&&!t.includePrerelease&&o.semver.prerelease.length?o.semver:!1;p&&p.prerelease.length===1&&a.operator==="<"&&p.prerelease[0]===0&&(p=!1);for(const E of e){if(u=u||E.operator===">"||E.operator===">=",i=i||E.operator==="<"||E.operator==="<=",o){if(P&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===P.major&&E.semver.minor===P.minor&&E.semver.patch===P.patch&&(P=!1),E.operator===">"||E.operator===">="){if(v=st(o,E,t),v===E&&v!==o)return!1}else if(o.operator===">="&&!H(o.semver,String(E),t))return!1}if(a){if(p&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===p.major&&E.semver.minor===p.minor&&E.semver.patch===p.patch&&(p=!1),E.operator==="<"||E.operator==="<="){if(n=nt(a,E,t),n===E&&n!==a)return!1}else if(a.operator==="<="&&!H(a.semver,String(E),t))return!1}if(!E.operator&&(a||o)&&c!==0)return!1}return!(o&&i&&!a&&c!==0||a&&u&&!o&&c!==0||P||p)},st=(r,e,t)=>{if(!r)return e;const s=_e(r.semver,e.semver,t);return s>0?r:s<0||e.operator===">"&&r.operator===">="?e:r},nt=(r,e,t)=>{if(!r)return e;const s=_e(r.semver,e.semver,t);return s<0?r:s>0||e.operator==="<"&&r.operator==="<="?e:r};var dn=pn;const de=W,it=oe,gn=D,ot=Tt,mn=M,Rn=Sr,vn=Lr,wn=Tr,In=Ar,Pn=Dr,Sn=jr,Nn=Ur,On=Mr,Ln=_,kn=Jr,Tn=Yr,yn=ye,An=es,Cn=ss,Fn=ce,Dn=Ae,bn=yt,_n=At,jn=Ce,Bn=Fe,Gn=Ct,Un=Os,zn=le(),Vn=j(),Mn=ue,xn=Fs,Xn=js,qn=zs,Jn=xs,Hn=Js,Wn=De,Yn=sn,Kn=an,Zn=ln,Qn=hn,ei=dn;var ti={parse:mn,valid:Rn,clean:vn,inc:wn,diff:In,major:Pn,minor:Sn,patch:Nn,prerelease:On,compare:Ln,rcompare:kn,compareLoose:Tn,compareBuild:yn,sort:An,rsort:Cn,gt:Fn,lt:Dn,eq:bn,neq:_n,gte:jn,lte:Bn,cmp:Gn,coerce:Un,Comparator:zn,Range:Vn,satisfies:Mn,toComparators:xn,maxSatisfying:Xn,minSatisfying:qn,minVersion:Jn,validRange:Hn,outside:Wn,gtr:Yn,ltr:Kn,intersects:Zn,simplifyRange:Qn,subset:ei,SemVer:gn,re:de.re,src:de.src,tokens:de.t,SEMVER_SPEC_VERSION:it.SEMVER_SPEC_VERSION,RELEASE_TYPES:it.RELEASE_TYPES,compareIdentifiers:ot.compareIdentifiers,rcompareIdentifiers:ot.rcompareIdentifiers},ri=ti;const si=cr(ri),fe="v1/";function ni(r){return`${fe}${r.organization}/${r.package}/${r.version}`}function je(r,e){return`${fe}${r.organization}/${r.package}/${r.version}/${e}`}function Ie(r){return`${fe}${r.organization}/${r.package}/overview.json`}const te=`${fe}overview.json`,Be="meta.json",Pe="_updates_v1/per_package_version/";function ii(r,e){return`${Pe}${r.organization}/${r.package}/${r.version}/${e}`}const oi=/(?<packageKeyWithoutVersion>(?<organization>[^\/]+)\/(?<pkg>[^\/]+))\/(?<version>[^\/]+)\/(?<seed>[^\/]+)$/,Dt="_updates_v1/_global_update_in",at="_updates_v1/_global_update_out";class ai{constructor(e,t){this.storage=e,this.logger=t}constructNewPackage(e){return new ci(this.storage,e)}async updateRegistry(){var c,v,n,i,u,p,P,E;(c=this.logger)==null||c.info("Initiating registry refresh...");const e=new Map,t=[],s=await this.storage.listFiles(Pe);(v=this.logger)==null||v.info("Packages to be updated:");for(const f of s){const F=f.match(oi);if(!F)continue;t.push(f);const{packageKeyWithoutVersion:y,organization:L,pkg:A,version:I,seed:x}=F.groups;let X=e.get(y);X?X.versions.has(I)||X.versions.add(I):e.set(y,{package:{organization:L,package:A},versions:new Set([I])}),(n=this.logger)==null||n.info(` - ${L}:${A}:${I}`)}const o=await this.storage.getFile(te);let a=o===void 0?[]:JSON.parse(o.toString());(i=this.logger)==null||i.info(`Global overview loaded, ${a.length} records`);for(const[,f]of e.entries()){const F=Ie(f.package),y=await this.storage.getFile(F);let L=y===void 0?[]:JSON.parse(y.toString());(u=this.logger)==null||u.info(`Updating ${f.package.organization}:${f.package.package} overview, ${L.length} records`),L=L.filter(A=>!f.versions.has(A.version));for(const[A]of f.versions.entries()){const I=A.toString(),x=await this.storage.getFile(je({...f.package,version:I},Be));x&&L.push({version:I,meta:JSON.parse(x.toString())})}L.sort((A,I)=>si.compare(I.version,A.version)),await this.storage.putFile(F,Buffer.from(JSON.stringify(L))),(p=this.logger)==null||p.info(`Done (${L.length} records)`),a=a.filter(A=>A.organization!==f.package.organization||A.package!==f.package.package),a.push({organization:f.package.organization,package:f.package.package,allVersions:L.map(A=>A.version).reverse(),latestVersion:L[0].version,latestMeta:L[0].meta})}await this.storage.putFile(te,Buffer.from(JSON.stringify(a))),(P=this.logger)==null||P.info(`Global overview updated (${a.length} records)`),await this.storage.deleteFiles(...t.map(f=>`${Pe}${f}`)),(E=this.logger)==null||E.info("Version update requests cleared")}async updateIfNeeded(e=!1){var o,a;(o=this.logger)==null||o.info("Checking if registry requires refresh...");const t=await this.storage.getFile(Dt),s=await this.storage.getFile(at);!e&&t===void 0&&s===void 0||!e&&t!==void 0&&s!==void 0&&t.equals(s)||(await this.updateRegistry(),t&&(await this.storage.putFile(at,t),(a=this.logger)==null||a.info("Refresh finished")))}async getPackageOverview(e){const t=await this.storage.getFile(Ie(e));if(t!==void 0)return JSON.parse(t.toString())}async getGlobalOverview(){const e=await this.storage.getFile(te);if(e!==void 0)return JSON.parse(e.toString())}}class ci{constructor(e,t){Y(this,"metaAdded",!1);Y(this,"seed",Yt.randomUUID());this.storage=e,this.name=t}async addFile(e,t){await this.storage.putFile(je(this.name,e),t)}async writeMeta(e){await this.addFile(Be,Buffer.from(JSON.stringify(e))),this.metaAdded=!0}async finish(){if(!this.metaAdded)throw new Error("meta not added");await this.storage.putFile(ii(this.name,this.seed),Buffer.of(0)),await this.storage.putFile(Dt,Buffer.from(this.seed))}}class li{constructor(e,t,s){this.client=e,this.bucket=t,this.root=s}async getFile(e){try{return Buffer.from(await(await this.client.getObject({Bucket:this.bucket,Key:G.join(this.root,e)})).Body.transformToByteArray())}catch(t){if(t.name==="NoSuchKey")return;throw t}}async listFiles(e){const t=G.join(this.root,e),s=lt.paginateListObjectsV2({client:this.client},{Bucket:this.bucket,Prefix:t}),o=[];for await(const a of s)o.push(...a.Contents.map(c=>G.relative(t,c.Key)));return o}async putFile(e,t){await this.client.putObject({Bucket:this.bucket,Key:G.join(this.root,e),Body:t})}async deleteFiles(...e){const t=await this.client.deleteObjects({Bucket:this.bucket,Delete:{Objects:e.map(s=>({Key:G.join(this.root,s)}))}});if(t.Errors!==void 0&&t.Errors.length>0)throw new Error(`Errors encountered while deleting files: ${t.Errors.join(`
2
- `)}`)}}class ui{constructor(e){Y(this,"root");this.root=C.resolve(e)}toAbsolutePath(e){if(G.isAbsolute(e))throw new Error("absolute path");return C.resolve(this.root,e.split(G.sep).join(C.sep))}async getFile(e){try{return await J.promises.readFile(this.toAbsolutePath(e))}catch(t){if(t.code=="ENOENT")return;throw new Error("",{cause:t})}}async listFiles(e){try{const t=this.toAbsolutePath(e);return(await J.promises.readdir(t,{recursive:!0,withFileTypes:!0})).filter(s=>s.isFile()).map(s=>C.relative(t,C.resolve(s.path,s.name)).split(C.sep).join(G.sep))}catch(t){if(t.code=="ENOENT")return[];throw new Error("",{cause:t})}}async putFile(e,t){const s=this.toAbsolutePath(e);await J.promises.mkdir(C.dirname(s),{recursive:!0}),await J.promises.writeFile(s,t)}async deleteFiles(...e){for(const t of e)await J.promises.rm(this.toAbsolutePath(t))}}function fi(r){const e=new URL(r,`file:${C.resolve(".").split(C.sep).join(G.sep)}/`);switch(e.protocol){case"file:":const t=C.resolve(e.pathname);return new ui(t);case"s3:":const s={},o=e.searchParams.get("region");o&&(s.region=o);const a=e.hostname;return new li(new lt.S3(s),a,e.pathname.replace(/^\//,""));default:throw new Error(`Unknown protocol: ${e.protocol}`)}}function U(r,e){return e===void 0?r:{...r,...e,registries:{...r.registries,...e.registries},files:{...r.files,...e.files}}}async function ge(r){return Oe(r,e=>ie.parse(JSON.parse(e.toString())))}async function me(r){return Oe(r,e=>ie.parse(Ht.parse(e.toString())))}async function hi(){let r=ie.parse({});return r=U(r,await ge("./.pl.reg.json")),r=U(r,await me("./.pl.reg.yaml")),r=U(r,await ge(`${Ge.homedir()}/.pl.reg.json`)),r=U(r,await me(`${Ge.homedir()}/.pl.reg.yaml`)),r=U(r,await ge(Nt)),r=U(r,await me(Ot)),r}class bt{constructor(e){this.conf=e}createRegistry(e){let t=this.conf.registry;if(!t.startsWith("file:")&&!t.startsWith("s3:")){const s=this.conf.registries[t];if(!s)throw new Error(`Registry with alias "${t}" not found`);t=s}return new ai(fi(t),e)}get fullPackageName(){return{organization:this.conf.organization,package:this.conf.package,version:this.conf.version}}}async function pi(r){const e=await hi();return new bt(ke.parse(U(e,r)))}exports.BlockComponentsAbsoluteUrl=er;exports.BlockComponentsConsolidate=gt;exports.BlockComponentsDescription=dt;exports.BlockDescriptionPackageJsonField=se;exports.BlockPackDescriptionConsolidateToFolder=Rt;exports.BlockPackDescriptionManifest=Ne;exports.BlockPackManifest=vt;exports.BlockPackManifestFile=wt;exports.BlockPackMetaDescription=mt;exports.BlockPackMetaEmbed=rr;exports.GlobalOverviewPath=te;exports.MetaFile=Be;exports.PlPackageConfigData=Pt;exports.PlPackageJsonConfigFile=Nt;exports.PlPackageYamlConfigFile=Ot;exports.PlRegCommonConfigData=St;exports.PlRegFullPackageConfigData=ke;exports.PlRegPackageConfig=bt;exports.PlRegPackageConfigDataShard=ie;exports.ResolvedBlockPackDescriptionFromPackageJson=Se;exports.ResolvedModuleFile=ft;exports.ResolvedModuleFolder=ht;exports.absoluteToBase64=Et;exports.absoluteToString=pt;exports.buildBlockPackDist=sr;exports.cpAbsoluteToRelative=re;exports.getConfig=pi;exports.loadPackDescription=or;exports.loadPackDescriptionRaw=It;exports.mapLocalToAbsolute=Re;exports.mapRemoteToAbsolute=ve;exports.packFolderToRelativeTgz=$t;exports.packageContentPrefix=ni;exports.packageOverviewPath=Ie;exports.parsePackageName=Le;exports.payloadFilePath=je;exports.tryLoadPackDescription=ir;
3
- //# sourceMappingURL=config-B8NlJ02C.js.map