@platforma-sdk/block-tools 2.5.92 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -2
- package/dist/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +208 -129
- package/dist/cli.mjs.map +1 -1
- package/dist/cmd/index.d.ts +14 -10
- package/dist/cmd/list-overview-snapshots.d.ts +9 -0
- package/dist/cmd/restore-overview-from-snapshot.d.ts +10 -0
- package/dist/config-DjpRXRy9.js +3 -0
- package/dist/config-DjpRXRy9.js.map +1 -0
- package/dist/config-XBQ2O39y.mjs +2020 -0
- package/dist/config-XBQ2O39y.mjs.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/registry_v1/config_schema.d.ts +5 -5
- package/dist/v2/model/block_description.d.ts +7329 -1422
- package/dist/v2/model/block_meta.d.ts +481 -88
- package/dist/v2/registry/registry.d.ts +16 -1
- package/dist/v2/registry/registry_reader.d.ts +2 -3
- package/dist/v2/registry/schema_internal.d.ts +7 -1
- package/package.json +7 -7
- package/src/cmd/index.ts +14 -10
- package/src/cmd/list-overview-snapshots.ts +46 -0
- package/src/cmd/restore-overview-from-snapshot.ts +78 -0
- package/src/v2/registry/registry.test.ts +176 -4
- package/src/v2/registry/registry.ts +146 -13
- package/src/v2/registry/registry_reader.ts +5 -6
- package/src/v2/registry/schema_internal.ts +16 -1
- package/src/v2/registry/schema_public.ts +5 -5
- package/dist/config-VnABe7ki.mjs +0 -1951
- package/dist/config-VnABe7ki.mjs.map +0 -1
- package/dist/config-t7F2nAAr.js +0 -3
- package/dist/config-t7F2nAAr.js.map +0 -1
- package/dist/v2/registry/schema_public.d.ts +0 -18475
package/dist/cli.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.mjs","sources":["../src/cmd/build-meta.ts","../src/cmd/build-model.ts","../src/cmd/mark-stable.ts","../src/cmd/pack.ts","../src/cmd/publish.ts","../src/cmd/refresh-registry.ts","../src/registry_v1/flags.ts","../src/cmd/upload-package-v1.ts","../src/cmd/index.ts"],"sourcesContent":["import { Command, Flags } from '@oclif/core';\nimport path from 'path';\nimport fs from 'fs';\nimport { loadPackDescriptionRaw } from '../v2';\nimport { BlockPackMetaDescription, BlockPackMetaEmbedAbsoluteBase64 } from '../v2/model/block_meta';\n\nexport default class BuildMeta extends Command {\n static override description =\n 'Extracts meta information from blocks package.json and outputs meta.json with embedded binary ' +\n 'and textual information linked from the meta section.';\n\n static flags = {\n modulePath: Flags.string({\n char: 'i',\n summary: 'input module path',\n helpValue: '<path>',\n default: '.'\n }),\n\n destination: Flags.string({\n char: 'o',\n summary: 'output meta.json file',\n helpValue: '<path>',\n required: true\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(BuildMeta);\n const modulePath = path.resolve(flags.modulePath);\n const descriptionRaw = await loadPackDescriptionRaw(modulePath);\n const metaEmbedded = await BlockPackMetaEmbedAbsoluteBase64.parseAsync(\n BlockPackMetaDescription(modulePath).parse(descriptionRaw.meta)\n );\n\n await fs.promises.writeFile(path.resolve(flags.destination), JSON.stringify(metaEmbedded));\n }\n}\n","import { Command, Flags } from '@oclif/core';\nimport fs from 'fs';\nimport path from 'path';\n\nasync function getFileContent(path: string) {\n try {\n return await fs.promises.readFile(path, 'utf8');\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n return undefined;\n }\n throw error;\n }\n}\n\nexport default class BuildModel extends Command {\n static override description =\n 'Extracts and outputs block model JSON from pre-built block model module';\n\n static flags = {\n modulePath: Flags.string({\n char: 'i',\n summary: 'input module path',\n helpValue: '<path>',\n default: '.'\n }),\n\n sourceBundle: Flags.string({\n char: 'b',\n summary: 'bundled model code to embed into the model for callback-based rendering to work',\n helpValue: '<path>',\n default: './dist/bundle.js'\n }),\n\n destination: Flags.string({\n char: 'o',\n summary: 'output model file',\n helpValue: '<path>',\n default: './dist/model.json'\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(BuildModel);\n const modulePath = path.resolve(flags.modulePath); // i.e. folder with package.json file\n let { model, platforma } = require(modulePath);\n\n if (!model) model = platforma;\n if (!model) throw new Error('\"model\" export not found');\n\n const { config } = model;\n\n if (!config)\n throw new Error(\n 'Malformed \"model\" object, check it is created with \"BlockModel\" ' +\n 'and \".done()\" is executed as the call in the chain.'\n );\n\n if (\n !('canRun' in config || 'inputsValid' in config) ||\n !('outputs' in config) ||\n !('sections' in config)\n )\n throw new Error('\"config\" has unexpected structure');\n\n const code = await getFileContent(flags.sourceBundle);\n if (code !== undefined) {\n config.code = {\n type: 'plain',\n content: code\n };\n }\n\n await fs.promises.writeFile(path.resolve(flags.destination), JSON.stringify(config));\n }\n}\n","import { Command, Flags } from '@oclif/core';\nimport { BlockRegistryV2, loadPackDescriptionRaw } from '../v2';\nimport path from 'path';\nimport {\n overrideDescriptionVersion,\n overrideManifestVersion,\n StableChannel\n} from '@milaboratories/pl-model-middle-layer';\nimport { storageByUrl } from '../io';\nimport { OclifLoggerAdapter } from '@milaboratories/ts-helpers-oclif';\n\nexport default class MarkStable extends Command {\n static description = 'Mark target block stable';\n\n static flags = {\n modulePath: Flags.string({\n char: 'i',\n summary: 'input module path',\n helpValue: '<path>',\n default: '.'\n }),\n\n channel: Flags.string({\n char: 'c',\n hidden: true,\n summary: 'custom channel',\n helpValue: '<channel name>',\n default: StableChannel\n }),\n\n 'version-override': Flags.file({\n char: 'v',\n summary: 'override package version'\n }),\n\n registry: Flags.string({\n char: 'r',\n summary: 'full address of the registry',\n helpValue: '<address>',\n env: 'PL_REGISTRY',\n required: true\n }),\n\n refresh: Flags.boolean({\n summary: 'refresh repository after adding the package',\n default: true,\n allowNo: true,\n env: 'PL_REGISTRY_REFRESH'\n }),\n\n unmark: Flags.boolean({\n summary:\n 'reverses meaning of this command, flag can be used to remove \"stable\" flag from the package',\n default: false\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(MarkStable);\n let description = await loadPackDescriptionRaw(path.resolve(flags.modulePath));\n if (flags['version-override'])\n description = overrideDescriptionVersion(description, flags['version-override']);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n if (flags.unmark) await registry.removePackageFromChannel(description.id, flags.channel);\n else await registry.addPackageToChannel(description.id, flags.channel);\n\n if (flags.refresh) await registry.updateIfNeeded();\n }\n}\n","import { Command, Flags } from '@oclif/core';\nimport { loadPackDescription } from '../v2/source_package';\nimport path from 'path';\nimport { buildBlockPackDist } from '../v2/build_dist';\n\nexport default class PackBlock extends Command {\n static description =\n 'Builds block pack and outputs a block pack manifest consolidating all ' +\n 'references assets into a single folder';\n\n static flags = {\n modulePath: Flags.string({\n char: 'i',\n summary: 'input module path',\n helpValue: '<path>',\n default: '.'\n }),\n\n destinationPath: Flags.string({\n char: 'o',\n summary: 'output folder',\n helpValue: '<path>',\n default: './block-pack'\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(PackBlock);\n const description = await loadPackDescription(path.resolve(flags.modulePath));\n await buildBlockPackDist(description, path.resolve(flags.destinationPath));\n }\n}\n","import { Command, Flags } from '@oclif/core';\nimport fs from 'node:fs';\nimport { OclifLoggerAdapter } from '@milaboratories/ts-helpers-oclif';\nimport { ManifestFileName } from '../v2/registry/schema_public';\nimport { BlockPackManifest, overrideManifestVersion, StableChannel } from '@milaboratories/pl-model-middle-layer';\nimport { storageByUrl } from '../io/storage';\nimport { BlockRegistryV2 } from '../v2/registry/registry';\nimport path from 'node:path';\n\nfunction simpleDeepMerge<T extends Record<string, unknown>>(\n target: Record<string, unknown>,\n source: T\n): T {\n const result = { ...target };\n\n for (const key in source) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n if (result[key] && typeof result[key] === 'object' && !Array.isArray(result[key])) {\n result[key] = simpleDeepMerge(result[key] as Record<string, unknown>, source[key] as Record<string, unknown>);\n } else {\n result[key] = source[key];\n }\n } else {\n result[key] = source[key];\n }\n }\n\n return result as T;\n}\n\nexport default class Publish extends Command {\n static description =\n 'Publishes the block package and refreshes the registry (for v2 block-pack schema)';\n\n static flags = {\n registry: Flags.string({\n char: 'r',\n summary: 'full address of the registry',\n helpValue: '<address>',\n env: 'PL_REGISTRY',\n required: true\n }),\n\n manifest: Flags.file({\n char: 'm',\n summary: 'manifest file path',\n exists: true,\n default: `./block-pack/${ManifestFileName}`\n }),\n\n 'version-override': Flags.file({\n char: 'v',\n summary: 'override package version'\n }),\n\n refresh: Flags.boolean({\n summary: 'refresh repository after adding the package',\n default: true,\n allowNo: true,\n env: 'PL_REGISTRY_REFRESH'\n }),\n\n unstable: Flags.boolean({\n summary: 'do not add the published package to stable channel',\n default: false,\n env: 'PL_PUBLISH_UNSTABLE'\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Publish);\n\n const manifestPath = path.resolve(flags.manifest);\n const rawManifest = JSON.parse(await fs.promises.readFile(manifestPath, { encoding: 'utf-8' }));\n let manifest = BlockPackManifest.parse(rawManifest);\n // To keep extra fields from the manifest and keep coerced fields\n manifest = simpleDeepMerge(rawManifest, manifest);\n const manifestRoot = path.dirname(manifestPath);\n\n this.log(`Manifest root = ${manifestRoot}`);\n\n if (flags['version-override'])\n manifest = overrideManifestVersion(manifest, flags['version-override']);\n\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n await registry.publishPackage(manifest, async (file) =>\n Buffer.from(await fs.promises.readFile(path.resolve(manifestRoot, file)))\n );\n\n if (!flags.unstable) {\n this.log(`Adding package to ${StableChannel} channel...`);\n await registry.addPackageToChannel(manifest.description.id, StableChannel);\n }\n\n if (flags.refresh) await registry.updateIfNeeded();\n }\n}\n","import { Command, Flags } from '@oclif/core';\nimport { BlockRegistryV2, loadPackDescriptionRaw } from '../v2';\nimport path from 'path';\nimport {\n overrideDescriptionVersion,\n overrideManifestVersion,\n StableChannel\n} from '@milaboratories/pl-model-middle-layer';\nimport { storageByUrl } from '../io';\nimport { OclifLoggerAdapter } from '@milaboratories/ts-helpers-oclif';\n\nexport default class RefreshRegistry extends Command {\n static description = 'Refresh overview files based on published but not proecessed artefacts';\n\n static flags = {\n registry: Flags.string({\n char: 'r',\n summary: 'full address of the registry',\n helpValue: '<address>',\n env: 'PL_REGISTRY',\n required: true\n }),\n\n mode: Flags.string({\n char: 'm',\n summary: 'refresh mode (allowed valiues: \"force\", \"normal\", \"dry-run\")',\n helpValue: '<mode>',\n options: ['force', 'normal', 'dry-run'],\n env: 'PL_REGISTRY_REFRESH_DRY_RUN',\n default: 'normal'\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(RefreshRegistry);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n await registry.updateIfNeeded(flags.mode as 'force' | 'normal' | 'dry-run');\n }\n}\n","import { Flags } from '@oclif/core';\nimport path from 'node:path';\n\nexport interface TargetFile {\n src: string;\n destName: string;\n}\n\nfunction parseTargetFile(arg: string): TargetFile {\n const match = arg.match(/(?<destName>[^\\/\\\\]+)=(?<src>.*)/);\n if (match) {\n const { src, destName } = match.groups!;\n return { src, destName };\n } else {\n return { src: arg, destName: path.basename(arg) };\n }\n}\n\nexport const targetFile = Flags.custom<TargetFile>({\n summary: 'target files to upload',\n helpValue: 'file_path | package_name=file_path',\n parse: async (arg) => parseTargetFile(arg)\n});\n","import { Command, Flags } from '@oclif/core';\nimport { getConfig } from '../registry_v1/config';\nimport { targetFile } from '../registry_v1/flags';\nimport fs from 'node:fs';\nimport YAML from 'yaml';\nimport { PlRegPackageConfigDataShard } from '../registry_v1/config_schema';\nimport { OclifLoggerAdapter } from '@milaboratories/ts-helpers-oclif';\n\ntype BasicConfigField = keyof PlRegPackageConfigDataShard &\n ('registry' | 'organization' | 'package' | 'version');\nconst BasicConfigFields: BasicConfigField[] = ['registry', 'organization', 'package', 'version'];\n\nexport default class UploadPackageV1 extends Command {\n static description = 'Uploads V1 package and refreshes the registry';\n\n static flags = {\n registry: Flags.string({\n char: 'r',\n summary: 'full address of the registry or alias from .pl.reg',\n helpValue: '<address|alias>',\n env: 'PL_REGISTRY'\n }),\n\n organization: Flags.string({\n char: 'o',\n summary: 'target organisation',\n env: 'PL_PACKAGE_ORGANIZATION'\n }),\n\n package: Flags.string({\n char: 'p',\n summary: 'target package',\n env: 'PL_PACKAGE_NAME'\n }),\n\n version: Flags.string({\n char: 'v',\n summary: 'target version',\n env: 'PL_PACKAGE_VERSION'\n }),\n\n meta: Flags.file({\n char: 'm',\n summary: 'json file containing meta information to associate with tha package',\n exists: true\n }),\n\n file: targetFile({\n char: 'f',\n summary: 'package files',\n multiple: true,\n default: []\n }),\n\n refresh: Flags.boolean({\n summary: 'refresh repository after adding the package',\n default: true,\n allowNo: true,\n env: 'PL_REGISTRY_REFRESH'\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(UploadPackageV1);\n const configFromFlags: PlRegPackageConfigDataShard = PlRegPackageConfigDataShard.parse({});\n\n for (const field of BasicConfigFields) if (flags[field]) configFromFlags[field] = flags[field];\n\n if (flags.meta) {\n if (flags.meta.endsWith('.json'))\n configFromFlags.meta = JSON.parse(\n await fs.promises.readFile(flags.meta, { encoding: 'utf-8' })\n );\n else if (flags.meta.endsWith('.yaml'))\n configFromFlags.meta = YAML.parse(\n await fs.promises.readFile(flags.meta, { encoding: 'utf-8' })\n );\n }\n\n for (const targetFile of flags.file) {\n configFromFlags.files[targetFile.destName] = targetFile.src;\n }\n\n const conf = await getConfig(configFromFlags);\n\n this.log(YAML.stringify(conf.conf));\n\n const registry = conf.createRegistry(new OclifLoggerAdapter(this));\n const name = conf.fullPackageName;\n\n const builder = registry.constructNewPackage(name);\n\n for (const [dst, src] of Object.entries(conf.conf.files)) {\n this.log(`Uploading ${src} -> ${dst} ...`);\n const content = await fs.promises.readFile(src);\n await builder.addFile(dst, content);\n }\n\n this.log(`Uploading meta information...`);\n await builder.writeMeta(conf.conf.meta);\n await builder.finish();\n\n if (flags.refresh) await registry.updateIfNeeded();\n }\n}\n","// DO NOT EDIT. This file was generated by oclif-index utility.\n\nimport Cmd0 from './build-meta';\nimport Cmd1 from './build-model';\nimport Cmd3 from './mark-stable';\nimport Cmd4 from './pack';\nimport Cmd5 from './publish';\nimport Cmd6 from './refresh-registry';\nimport Cmd7 from './upload-package-v1';\n\n// prettier-ignore\nexport const COMMANDS = {\n 'build-meta': Cmd0,\n 'build-model': Cmd1,\n 'mark-stable': Cmd3,\n 'pack': Cmd4,\n 'publish': Cmd5,\n 'refresh-registry': Cmd6,\n 'upload-package-v1': Cmd7\n};\n"],"names":["_BuildMeta","Command","flags","modulePath","path","descriptionRaw","loadPackDescriptionRaw","metaEmbedded","BlockPackMetaEmbedAbsoluteBase64","BlockPackMetaDescription","fs","__publicField","Flags","BuildMeta","getFileContent","error","_BuildModel","model","platforma","config","code","BuildModel","_MarkStable","description","overrideDescriptionVersion","storage","storageByUrl","registry","BlockRegistryV2","OclifLoggerAdapter","StableChannel","MarkStable","_PackBlock","loadPackDescription","buildBlockPackDist","PackBlock","simpleDeepMerge","target","source","result","key","_Publish","manifestPath","rawManifest","manifest","BlockPackManifest","manifestRoot","overrideManifestVersion","file","ManifestFileName","Publish","_RefreshRegistry","RefreshRegistry","parseTargetFile","arg","match","src","destName","targetFile","BasicConfigFields","_UploadPackageV1","configFromFlags","PlRegPackageConfigDataShard","field","YAML","conf","getConfig","name","builder","dst","content","UploadPackageV1","COMMANDS","Cmd0","Cmd1","Cmd3","Cmd4","Cmd5","Cmd6","Cmd7"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.mjs","sources":["../src/cmd/build-meta.ts","../src/cmd/build-model.ts","../src/cmd/list-overview-snapshots.ts","../src/cmd/mark-stable.ts","../src/cmd/pack.ts","../src/cmd/publish.ts","../src/cmd/refresh-registry.ts","../src/cmd/restore-overview-from-snapshot.ts","../src/registry_v1/flags.ts","../src/cmd/upload-package-v1.ts","../src/cmd/index.ts"],"sourcesContent":["import { Command, Flags } from '@oclif/core';\nimport path from 'path';\nimport fs from 'fs';\nimport { loadPackDescriptionRaw } from '../v2';\nimport { BlockPackMetaDescription, BlockPackMetaEmbedAbsoluteBase64 } from '../v2/model/block_meta';\n\nexport default class BuildMeta extends Command {\n static override description =\n 'Extracts meta information from blocks package.json and outputs meta.json with embedded binary ' +\n 'and textual information linked from the meta section.';\n\n static flags = {\n modulePath: Flags.string({\n char: 'i',\n summary: 'input module path',\n helpValue: '<path>',\n default: '.'\n }),\n\n destination: Flags.string({\n char: 'o',\n summary: 'output meta.json file',\n helpValue: '<path>',\n required: true\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(BuildMeta);\n const modulePath = path.resolve(flags.modulePath);\n const descriptionRaw = await loadPackDescriptionRaw(modulePath);\n const metaEmbedded = await BlockPackMetaEmbedAbsoluteBase64.parseAsync(\n BlockPackMetaDescription(modulePath).parse(descriptionRaw.meta)\n );\n\n await fs.promises.writeFile(path.resolve(flags.destination), JSON.stringify(metaEmbedded));\n }\n}\n","import { Command, Flags } from '@oclif/core';\nimport fs from 'fs';\nimport path from 'path';\n\nasync function getFileContent(path: string) {\n try {\n return await fs.promises.readFile(path, 'utf8');\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n return undefined;\n }\n throw error;\n }\n}\n\nexport default class BuildModel extends Command {\n static override description =\n 'Extracts and outputs block model JSON from pre-built block model module';\n\n static flags = {\n modulePath: Flags.string({\n char: 'i',\n summary: 'input module path',\n helpValue: '<path>',\n default: '.'\n }),\n\n sourceBundle: Flags.string({\n char: 'b',\n summary: 'bundled model code to embed into the model for callback-based rendering to work',\n helpValue: '<path>',\n default: './dist/bundle.js'\n }),\n\n destination: Flags.string({\n char: 'o',\n summary: 'output model file',\n helpValue: '<path>',\n default: './dist/model.json'\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(BuildModel);\n const modulePath = path.resolve(flags.modulePath); // i.e. folder with package.json file\n let { model, platforma } = require(modulePath);\n\n if (!model) model = platforma;\n if (!model) throw new Error('\"model\" export not found');\n\n const { config } = model;\n\n if (!config)\n throw new Error(\n 'Malformed \"model\" object, check it is created with \"BlockModel\" ' +\n 'and \".done()\" is executed as the call in the chain.'\n );\n\n if (\n !('canRun' in config || 'inputsValid' in config) ||\n !('outputs' in config) ||\n !('sections' in config)\n )\n throw new Error('\"config\" has unexpected structure');\n\n const code = await getFileContent(flags.sourceBundle);\n if (code !== undefined) {\n config.code = {\n type: 'plain',\n content: code\n };\n }\n\n await fs.promises.writeFile(path.resolve(flags.destination), JSON.stringify(config));\n }\n}\n","import { Command, Flags } from '@oclif/core';\nimport { BlockRegistryV2 } from '../v2/registry/registry';\nimport { storageByUrl } from '../io/storage';\nimport { OclifLoggerAdapter } from '@milaboratories/ts-helpers-oclif';\n\nexport default class ListOverviewSnapshots extends Command {\n static description = 'List all available global overview snapshots in the registry';\n\n static flags = {\n registry: Flags.string({\n char: 'r',\n summary: 'full address of the registry',\n helpValue: '<address>',\n env: 'PL_REGISTRY',\n required: true\n }),\n\n json: Flags.boolean({\n summary: 'output in JSON format',\n default: false\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(ListOverviewSnapshots);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n \n const snapshots = await registry.listGlobalOverviewSnapshots();\n \n if (flags.json) {\n this.log(JSON.stringify(snapshots, null, 2));\n } else {\n if (snapshots.length === 0) {\n this.log('No snapshots found.');\n } else {\n this.log(`Found ${snapshots.length} snapshot(s):\\n`);\n for (const snapshot of snapshots) {\n this.log(` ${snapshot.timestamp}`);\n this.log(` Path: ${snapshot.path}`);\n this.log('');\n }\n }\n }\n }\n}\n","import { Command, Flags } from '@oclif/core';\nimport { BlockRegistryV2, loadPackDescriptionRaw } from '../v2';\nimport path from 'path';\nimport {\n overrideDescriptionVersion,\n overrideManifestVersion,\n StableChannel\n} from '@milaboratories/pl-model-middle-layer';\nimport { storageByUrl } from '../io';\nimport { OclifLoggerAdapter } from '@milaboratories/ts-helpers-oclif';\n\nexport default class MarkStable extends Command {\n static description = 'Mark target block stable';\n\n static flags = {\n modulePath: Flags.string({\n char: 'i',\n summary: 'input module path',\n helpValue: '<path>',\n default: '.'\n }),\n\n channel: Flags.string({\n char: 'c',\n hidden: true,\n summary: 'custom channel',\n helpValue: '<channel name>',\n default: StableChannel\n }),\n\n 'version-override': Flags.file({\n char: 'v',\n summary: 'override package version'\n }),\n\n registry: Flags.string({\n char: 'r',\n summary: 'full address of the registry',\n helpValue: '<address>',\n env: 'PL_REGISTRY',\n required: true\n }),\n\n refresh: Flags.boolean({\n summary: 'refresh repository after adding the package',\n default: true,\n allowNo: true,\n env: 'PL_REGISTRY_REFRESH'\n }),\n\n unmark: Flags.boolean({\n summary:\n 'reverses meaning of this command, flag can be used to remove \"stable\" flag from the package',\n default: false\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(MarkStable);\n let description = await loadPackDescriptionRaw(path.resolve(flags.modulePath));\n if (flags['version-override'])\n description = overrideDescriptionVersion(description, flags['version-override']);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n if (flags.unmark) await registry.removePackageFromChannel(description.id, flags.channel);\n else await registry.addPackageToChannel(description.id, flags.channel);\n\n if (flags.refresh) await registry.updateIfNeeded();\n }\n}\n","import { Command, Flags } from '@oclif/core';\nimport { loadPackDescription } from '../v2/source_package';\nimport path from 'path';\nimport { buildBlockPackDist } from '../v2/build_dist';\n\nexport default class PackBlock extends Command {\n static description =\n 'Builds block pack and outputs a block pack manifest consolidating all ' +\n 'references assets into a single folder';\n\n static flags = {\n modulePath: Flags.string({\n char: 'i',\n summary: 'input module path',\n helpValue: '<path>',\n default: '.'\n }),\n\n destinationPath: Flags.string({\n char: 'o',\n summary: 'output folder',\n helpValue: '<path>',\n default: './block-pack'\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(PackBlock);\n const description = await loadPackDescription(path.resolve(flags.modulePath));\n await buildBlockPackDist(description, path.resolve(flags.destinationPath));\n }\n}\n","import { Command, Flags } from '@oclif/core';\nimport fs from 'node:fs';\nimport { OclifLoggerAdapter } from '@milaboratories/ts-helpers-oclif';\nimport { ManifestFileName } from '../v2/registry/schema_public';\nimport { BlockPackManifest, overrideManifestVersion, StableChannel } from '@milaboratories/pl-model-middle-layer';\nimport { storageByUrl } from '../io/storage';\nimport { BlockRegistryV2 } from '../v2/registry/registry';\nimport path from 'node:path';\n\nfunction simpleDeepMerge<T extends Record<string, unknown>>(\n target: Record<string, unknown>,\n source: T\n): T {\n const result = { ...target };\n\n for (const key in source) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n if (result[key] && typeof result[key] === 'object' && !Array.isArray(result[key])) {\n result[key] = simpleDeepMerge(result[key] as Record<string, unknown>, source[key] as Record<string, unknown>);\n } else {\n result[key] = source[key];\n }\n } else {\n result[key] = source[key];\n }\n }\n\n return result as T;\n}\n\nexport default class Publish extends Command {\n static description =\n 'Publishes the block package and refreshes the registry (for v2 block-pack schema)';\n\n static flags = {\n registry: Flags.string({\n char: 'r',\n summary: 'full address of the registry',\n helpValue: '<address>',\n env: 'PL_REGISTRY',\n required: true\n }),\n\n manifest: Flags.file({\n char: 'm',\n summary: 'manifest file path',\n exists: true,\n default: `./block-pack/${ManifestFileName}`\n }),\n\n 'version-override': Flags.file({\n char: 'v',\n summary: 'override package version'\n }),\n\n refresh: Flags.boolean({\n summary: 'refresh repository after adding the package',\n default: true,\n allowNo: true,\n env: 'PL_REGISTRY_REFRESH'\n }),\n\n unstable: Flags.boolean({\n summary: 'do not add the published package to stable channel',\n default: false,\n env: 'PL_PUBLISH_UNSTABLE'\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Publish);\n\n const manifestPath = path.resolve(flags.manifest);\n const rawManifest = JSON.parse(await fs.promises.readFile(manifestPath, { encoding: 'utf-8' }));\n let manifest = BlockPackManifest.parse(rawManifest);\n // To keep extra fields from the manifest and keep coerced fields\n manifest = simpleDeepMerge(rawManifest, manifest);\n const manifestRoot = path.dirname(manifestPath);\n\n this.log(`Manifest root = ${manifestRoot}`);\n\n if (flags['version-override'])\n manifest = overrideManifestVersion(manifest, flags['version-override']);\n\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n await registry.publishPackage(manifest, async (file) =>\n Buffer.from(await fs.promises.readFile(path.resolve(manifestRoot, file)))\n );\n\n if (!flags.unstable) {\n this.log(`Adding package to ${StableChannel} channel...`);\n await registry.addPackageToChannel(manifest.description.id, StableChannel);\n }\n\n if (flags.refresh) await registry.updateIfNeeded();\n }\n}\n","import { Command, Flags } from '@oclif/core';\nimport { BlockRegistryV2, loadPackDescriptionRaw } from '../v2';\nimport path from 'path';\nimport {\n overrideDescriptionVersion,\n overrideManifestVersion,\n StableChannel\n} from '@milaboratories/pl-model-middle-layer';\nimport { storageByUrl } from '../io';\nimport { OclifLoggerAdapter } from '@milaboratories/ts-helpers-oclif';\n\nexport default class RefreshRegistry extends Command {\n static description = 'Refresh overview files based on published but not proecessed artefacts';\n\n static flags = {\n registry: Flags.string({\n char: 'r',\n summary: 'full address of the registry',\n helpValue: '<address>',\n env: 'PL_REGISTRY',\n required: true\n }),\n\n mode: Flags.string({\n char: 'm',\n summary: 'refresh mode (allowed valiues: \"force\", \"normal\", \"dry-run\")',\n helpValue: '<mode>',\n options: ['force', 'normal', 'dry-run'],\n env: 'PL_REGISTRY_REFRESH_DRY_RUN',\n default: 'normal'\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(RefreshRegistry);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n await registry.updateIfNeeded(flags.mode as 'force' | 'normal' | 'dry-run');\n }\n}\n","import { Command, Flags } from '@oclif/core';\nimport { BlockRegistryV2 } from '../v2/registry/registry';\nimport { storageByUrl } from '../io/storage';\nimport { OclifLoggerAdapter } from '@milaboratories/ts-helpers-oclif';\n\nexport default class RestoreOverviewFromSnapshot extends Command {\n static description = 'Restore global overview from a snapshot';\n\n static flags = {\n registry: Flags.string({\n char: 'r',\n summary: 'full address of the registry',\n helpValue: '<address>',\n env: 'PL_REGISTRY',\n required: true\n }),\n\n snapshot: Flags.string({\n char: 's',\n summary: 'snapshot timestamp ID to restore from',\n helpValue: '<timestamp>',\n required: true\n }),\n\n 'skip-confirmation': Flags.boolean({\n summary: 'skip confirmation prompt (use with caution)',\n default: false\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(RestoreOverviewFromSnapshot);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n \n // Check if snapshot exists\n const snapshots = await registry.listGlobalOverviewSnapshots();\n const targetSnapshot = snapshots.find(s => s.timestamp === flags.snapshot);\n \n if (!targetSnapshot) {\n this.error(`Snapshot '${flags.snapshot}' not found. Available snapshots:\\n${\n snapshots.map(s => ` - ${s.timestamp}`).join('\\n') || ' (none)'\n }`);\n }\n\n // Confirmation prompt (unless skipped)\n if (!flags['skip-confirmation']) {\n const readline = await import('node:readline');\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout\n });\n\n const answer = await new Promise<string>((resolve) => {\n rl.question(\n `⚠️ This will overwrite the current global overview with snapshot '${flags.snapshot}'.\\n` +\n `Are you sure you want to continue? (y/N): `,\n resolve\n );\n });\n \n rl.close();\n\n if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {\n this.log('Restore cancelled.');\n return;\n }\n }\n\n // Perform restore\n try {\n await registry.restoreGlobalOverviewFromSnapshot(flags.snapshot);\n this.log(`✅ Successfully restored global overview from snapshot '${flags.snapshot}'`);\n } catch (error) {\n this.error(`Failed to restore from snapshot: ${error}`);\n }\n }\n}\n","import { Flags } from '@oclif/core';\nimport path from 'node:path';\n\nexport interface TargetFile {\n src: string;\n destName: string;\n}\n\nfunction parseTargetFile(arg: string): TargetFile {\n const match = arg.match(/(?<destName>[^\\/\\\\]+)=(?<src>.*)/);\n if (match) {\n const { src, destName } = match.groups!;\n return { src, destName };\n } else {\n return { src: arg, destName: path.basename(arg) };\n }\n}\n\nexport const targetFile = Flags.custom<TargetFile>({\n summary: 'target files to upload',\n helpValue: 'file_path | package_name=file_path',\n parse: async (arg) => parseTargetFile(arg)\n});\n","import { Command, Flags } from '@oclif/core';\nimport { getConfig } from '../registry_v1/config';\nimport { targetFile } from '../registry_v1/flags';\nimport fs from 'node:fs';\nimport YAML from 'yaml';\nimport { PlRegPackageConfigDataShard } from '../registry_v1/config_schema';\nimport { OclifLoggerAdapter } from '@milaboratories/ts-helpers-oclif';\n\ntype BasicConfigField = keyof PlRegPackageConfigDataShard &\n ('registry' | 'organization' | 'package' | 'version');\nconst BasicConfigFields: BasicConfigField[] = ['registry', 'organization', 'package', 'version'];\n\nexport default class UploadPackageV1 extends Command {\n static description = 'Uploads V1 package and refreshes the registry';\n\n static flags = {\n registry: Flags.string({\n char: 'r',\n summary: 'full address of the registry or alias from .pl.reg',\n helpValue: '<address|alias>',\n env: 'PL_REGISTRY'\n }),\n\n organization: Flags.string({\n char: 'o',\n summary: 'target organisation',\n env: 'PL_PACKAGE_ORGANIZATION'\n }),\n\n package: Flags.string({\n char: 'p',\n summary: 'target package',\n env: 'PL_PACKAGE_NAME'\n }),\n\n version: Flags.string({\n char: 'v',\n summary: 'target version',\n env: 'PL_PACKAGE_VERSION'\n }),\n\n meta: Flags.file({\n char: 'm',\n summary: 'json file containing meta information to associate with tha package',\n exists: true\n }),\n\n file: targetFile({\n char: 'f',\n summary: 'package files',\n multiple: true,\n default: []\n }),\n\n refresh: Flags.boolean({\n summary: 'refresh repository after adding the package',\n default: true,\n allowNo: true,\n env: 'PL_REGISTRY_REFRESH'\n })\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(UploadPackageV1);\n const configFromFlags: PlRegPackageConfigDataShard = PlRegPackageConfigDataShard.parse({});\n\n for (const field of BasicConfigFields) if (flags[field]) configFromFlags[field] = flags[field];\n\n if (flags.meta) {\n if (flags.meta.endsWith('.json'))\n configFromFlags.meta = JSON.parse(\n await fs.promises.readFile(flags.meta, { encoding: 'utf-8' })\n );\n else if (flags.meta.endsWith('.yaml'))\n configFromFlags.meta = YAML.parse(\n await fs.promises.readFile(flags.meta, { encoding: 'utf-8' })\n );\n }\n\n for (const targetFile of flags.file) {\n configFromFlags.files[targetFile.destName] = targetFile.src;\n }\n\n const conf = await getConfig(configFromFlags);\n\n this.log(YAML.stringify(conf.conf));\n\n const registry = conf.createRegistry(new OclifLoggerAdapter(this));\n const name = conf.fullPackageName;\n\n const builder = registry.constructNewPackage(name);\n\n for (const [dst, src] of Object.entries(conf.conf.files)) {\n this.log(`Uploading ${src} -> ${dst} ...`);\n const content = await fs.promises.readFile(src);\n await builder.addFile(dst, content);\n }\n\n this.log(`Uploading meta information...`);\n await builder.writeMeta(conf.conf.meta);\n await builder.finish();\n\n if (flags.refresh) await registry.updateIfNeeded();\n }\n}\n","// DO NOT EDIT. This file was generated by oclif-index utility.\n\nimport Cmd0 from './build-meta';\nimport Cmd1 from './build-model';\nimport Cmd3 from './list-overview-snapshots';\nimport Cmd4 from './mark-stable';\nimport Cmd5 from './pack';\nimport Cmd6 from './publish';\nimport Cmd7 from './refresh-registry';\nimport Cmd8 from './restore-overview-from-snapshot';\nimport Cmd9 from './upload-package-v1';\n\n// prettier-ignore\nexport const COMMANDS = {\n 'build-meta': Cmd0,\n 'build-model': Cmd1,\n 'list-overview-snapshots': Cmd3,\n 'mark-stable': Cmd4,\n 'pack': Cmd5,\n 'publish': Cmd6,\n 'refresh-registry': Cmd7,\n 'restore-overview-from-snapshot': Cmd8,\n 'upload-package-v1': Cmd9,\n};\n"],"names":["_BuildMeta","Command","flags","modulePath","path","descriptionRaw","loadPackDescriptionRaw","metaEmbedded","BlockPackMetaEmbedAbsoluteBase64","BlockPackMetaDescription","fs","__publicField","Flags","BuildMeta","getFileContent","error","_BuildModel","model","platforma","config","code","BuildModel","_ListOverviewSnapshots","storage","storageByUrl","snapshots","BlockRegistryV2","OclifLoggerAdapter","snapshot","ListOverviewSnapshots","_MarkStable","description","overrideDescriptionVersion","registry","StableChannel","MarkStable","_PackBlock","loadPackDescription","buildBlockPackDist","PackBlock","simpleDeepMerge","target","source","result","key","_Publish","manifestPath","rawManifest","manifest","BlockPackManifest","manifestRoot","overrideManifestVersion","file","ManifestFileName","Publish","_RefreshRegistry","RefreshRegistry","_RestoreOverviewFromSnapshot","s","rl","answer","resolve","RestoreOverviewFromSnapshot","parseTargetFile","arg","match","src","destName","targetFile","BasicConfigFields","_UploadPackageV1","configFromFlags","PlRegPackageConfigDataShard","field","YAML","conf","getConfig","name","builder","dst","content","UploadPackageV1","COMMANDS","Cmd0","Cmd1","Cmd3","Cmd4","Cmd5","Cmd6","Cmd7","Cmd8","Cmd9"],"mappings":"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"}
|
package/dist/cmd/index.d.ts
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { default as Cmd0 } from './build-meta';
|
|
2
2
|
import { default as Cmd1 } from './build-model';
|
|
3
|
-
import { default as Cmd3 } from './
|
|
4
|
-
import { default as Cmd4 } from './
|
|
5
|
-
import { default as Cmd5 } from './
|
|
6
|
-
import { default as Cmd6 } from './
|
|
7
|
-
import { default as Cmd7 } from './
|
|
3
|
+
import { default as Cmd3 } from './list-overview-snapshots';
|
|
4
|
+
import { default as Cmd4 } from './mark-stable';
|
|
5
|
+
import { default as Cmd5 } from './pack';
|
|
6
|
+
import { default as Cmd6 } from './publish';
|
|
7
|
+
import { default as Cmd7 } from './refresh-registry';
|
|
8
|
+
import { default as Cmd8 } from './restore-overview-from-snapshot';
|
|
9
|
+
import { default as Cmd9 } from './upload-package-v1';
|
|
8
10
|
export declare const COMMANDS: {
|
|
9
11
|
'build-meta': typeof Cmd0;
|
|
10
12
|
'build-model': typeof Cmd1;
|
|
11
|
-
'
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
'
|
|
13
|
+
'list-overview-snapshots': typeof Cmd3;
|
|
14
|
+
'mark-stable': typeof Cmd4;
|
|
15
|
+
pack: typeof Cmd5;
|
|
16
|
+
publish: typeof Cmd6;
|
|
17
|
+
'refresh-registry': typeof Cmd7;
|
|
18
|
+
'restore-overview-from-snapshot': typeof Cmd8;
|
|
19
|
+
'upload-package-v1': typeof Cmd9;
|
|
16
20
|
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class ListOverviewSnapshots extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
registry: import('@oclif/core/interfaces').OptionFlag<string, import('@oclif/core/interfaces').CustomOptions>;
|
|
6
|
+
json: import('@oclif/core/interfaces').BooleanFlag<boolean>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class RestoreOverviewFromSnapshot extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
registry: import('@oclif/core/interfaces').OptionFlag<string, import('@oclif/core/interfaces').CustomOptions>;
|
|
6
|
+
snapshot: import('@oclif/core/interfaces').OptionFlag<string, import('@oclif/core/interfaces').CustomOptions>;
|
|
7
|
+
'skip-confirmation': import('@oclif/core/interfaces').BooleanFlag<boolean>;
|
|
8
|
+
};
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";var Cn=Object.defineProperty;var In=(t,e,r)=>e in t?Cn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var J=(t,e,r)=>In(t,typeof e!="symbol"?e+"":e,r);const g=require("@milaboratories/pl-model-middle-layer"),T=require("zod"),z=require("node:path"),M=require("node:fs/promises"),Nn=require("mime-types"),Tn=require("tar"),_r=require("@milaboratories/resolve-helper"),It=require("@milaboratories/ts-helpers"),Ut=require("node:zlib"),Vt=require("node:util"),Ln=require("@milaboratories/pl-model-common"),jr=require("node:crypto"),An=require("yaml"),Fn=require("node:os"),U=require("node:path/posix"),Mr=require("@aws-sdk/client-s3"),bn=require("node:fs");function he(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const n=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,n.get?n:{enumerable:!0,get:()=>t[r]})}}return e.default=t,Object.freeze(e)}const pe=he(Nn),Bn=he(Tn),Xt=he(Fn),Z=he(bn);function Ur(t){return T.z.string().transform((e,r)=>{const n=_r.tryResolve(t,e);return n===void 0?(r.addIssue({code:T.z.ZodIssueCode.custom,message:`Can't resolve ${e} against ${t}`}),T.z.NEVER):{type:"absolute-file",file:n}})}function Vr(t,...e){return T.z.string().transform((r,n)=>{const i=r.endsWith("/")?r:`${r}/`;for(const l of e){const a=_r.tryResolve(t,i+l);if(a!==void 0){if(!a.endsWith(l))throw new Error(`Unexpected resolve result ${a} with index file ${l}`);return{type:"absolute-folder",folder:a.slice(0,a.length-l.length)}}}return n.addIssue({code:T.z.ZodIssueCode.custom,message:`Can't resolve ${r} folder against ${t}, no index file found (${e.join(", ")})`}),T.z.NEVER})}function wt(t){return e=>e.type==="relative"?{type:"absolute-file",file:z.resolve(t,e.path)}:e}function Nt(){return async t=>t.type==="absolute-file"?await M.readFile(t.file,{encoding:"utf-8"}):t.content}function Xr(){return async t=>{if(t.type==="absolute-file"){const e=pe.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 M.readFile(t.file,{encoding:"base64"})}}else return t}}function Jr(){return async t=>{if(t.type==="absolute-file"){const e=pe.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 M.readFile(t.file))}}else return t.type==="explicit-base64"?{type:"explicit-bytes",mimeType:t.mimeType,content:Buffer.from(t.content,"base64")}:t}}function ce(t,e){return async r=>{if(r.type==="absolute-file"){const n=z.basename(r.file),i=z.resolve(t,n);return e==null||e.push(n),await M.cp(r.file,i),{type:"relative",path:n}}else return r}}function Wr(t,e,r){if(!e.endsWith(".tgz"))throw new Error(`Unexpected tgz file name: ${e}`);return async n=>{const i=z.resolve(t,e);return await Bn.create({gzip:!0,file:i,cwd:n.folder},["."]),r==null||r.push(e),{type:"relative",path:e}}}function ge(t){return async e=>e.type==="explicit-string"?e:{type:"explicit-string",content:(await t(e.path)).toString("utf8")}}function Hr(t){return async e=>e.type==="explicit-string"?e.content:(await t(e.path)).toString("utf8")}function Dn(t){return async e=>{if(e.type==="explicit-base64")return e;const r=pe.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 te(t){return async e=>{if(e.type==="explicit-base64")return{type:"explicit-bytes",mimeType:e.mimeType,content:Buffer.from(e.content,"base64")};const r=pe.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 Yr(t){return g.BlockPackMeta(g.DescriptionContentText.transform(wt(t)),g.DescriptionContentBinary.transform(wt(t)))}function Zr(t,e){return g.BlockPackMeta(g.ContentAbsoluteTextLocal.transform(ce(t,e)),g.ContentAbsoluteBinaryLocal.transform(ce(t,e)))}const qn=g.BlockPackMeta(g.ContentAbsoluteTextLocal.transform(Nt()),g.ContentAbsoluteBinaryLocal.transform(Xr())).pipe(g.BlockPackMetaEmbeddedBase64),zn=g.BlockPackMeta(g.ContentAbsoluteTextLocal.transform(Nt()),g.ContentAbsoluteBinaryLocal.transform(Jr())).pipe(g.BlockPackMetaEmbeddedBytes);function xn(t){return g.BlockPackMeta(g.ContentRelativeText.transform(Hr(t)),g.ContentRelativeBinary.transform(te(t))).pipe(g.BlockPackMetaEmbeddedBytes)}function Kr(t){return g.BlockComponents(Ur(t),Vr(t,"index.html"))}function Qr(t,e){return g.BlockComponents(g.ContentAbsoluteBinaryLocal.transform(ce(t,e)),g.ContentAbsoluteFolder.transform(Wr(t,"ui.tgz",e))).pipe(g.BlockComponentsManifest)}function Gn(t){return g.BlockComponents(g.ContentRelative.transform(g.mapRemoteToAbsolute(t)),g.ContentRelative.transform(g.mapRemoteToAbsolute(t)))}function Tt(t){return g.CreateBlockPackDescriptionSchema(Kr(t),Yr(t)).transform(async(e,r)=>{const i=Ln.extractConfigGeneric(JSON.parse(await M.readFile(e.components.model.file,"utf-8"))).featureFlags;return{...e,featureFlags:i}})}function en(t,e){return g.CreateBlockPackDescriptionSchema(Qr(t,e),Zr(t,e)).pipe(g.BlockPackDescriptionManifest)}function Rt(t){const e=g.addPrefixToRelative(t);return g.BlockPackDescriptionManifest.pipe(g.CreateBlockPackDescriptionSchema(g.BlockComponents(g.ContentRelative.transform(e),g.ContentRelative.transform(e)),g.BlockPackMeta(g.ContentRelativeText.transform(e),g.ContentRelativeBinary.transform(e)))).pipe(g.BlockPackDescriptionManifest)}async function Lt(t,e){try{return e(await M.readFile(t))}catch(r){if(r.code=="ENOENT")return;throw new Error("",{cause:r})}}async function le(t){return Buffer.from(await crypto.subtle.digest("sha-256",t)).toString("hex").toUpperCase()}async function _n(t,e){await M.mkdir(e,{recursive:!0});const r=[],n=await en(e,r).parseAsync(t),i=await Promise.all(r.map(async a=>{const h=await M.readFile(z.resolve(e,a)),c=await le(h);return{name:a,size:h.length,sha256:c}})),l=g.BlockPackManifest.parse({schema:"v2",description:{...n},files:i,timestamp:Date.now()});return await M.writeFile(z.resolve(e,g.BlockPackManifestFile),JSON.stringify(l)),l}const ue="block",jn=/(?:@[a-zA-Z0-9-.]+\/)?(?<organization>[a-zA-Z0-9-]+)\.(?<name>[a-zA-Z0-9-]+)/;function At(t){const e=t.match(jn);if(!e)throw new Error(`Malformed package name (${t}), can't infer organization and block pack name.`);const{name:r,organization:n}=e.groups;return{name:r,organization:n}}async function Mn(t,e){const r=z.resolve(t,"package.json");try{const n=await Lt(r,h=>JSON.parse(h.toString("utf-8")));if(n===void 0)return;const i=n[ue];if(i===void 0)return;const l={...g.BlockPackDescriptionFromPackageJsonRaw.parse(i),id:{...At(It.notEmpty(n.name,`"name" not found in ${r}`)),version:g.SemVer.parse(n.version)}},a=await Tt(t).safeParseAsync(l);if(a.success)return a.data;e==null||e.warn(a.error);return}catch(n){e==null||e.warn(n);return}}async function tn(t){const e=z.resolve(t,"package.json"),r=JSON.parse(await M.readFile(e,{encoding:"utf-8"})),n=r[ue];if(n===void 0)throw new Error(`Block description (field ${ue}) not found in ${e}.`);return{...g.BlockPackDescriptionFromPackageJsonRaw.parse(n),id:{...At(It.notEmpty(r.name,`"name" not found in ${e}`)),version:g.SemVer.parse(r.version)},featureFlags:{}}}async function Un(t){const e=await tn(t);return await Tt(t).parseAsync(e)}function Vn(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var ne={exports:{}},Ce,Jt;function de(){if(Jt)return Ce;Jt=1;const t="2.0.0",e=256,r=Number.MAX_SAFE_INTEGER||9007199254740991,n=16,i=e-6;return Ce={MAX_LENGTH:e,MAX_SAFE_COMPONENT_LENGTH:n,MAX_SAFE_BUILD_LENGTH:i,MAX_SAFE_INTEGER:r,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:t,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2},Ce}var Ie,Wt;function me(){return Wt||(Wt=1,Ie=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{}),Ie}var Ht;function re(){return Ht||(Ht=1,function(t,e){const{MAX_SAFE_COMPONENT_LENGTH:r,MAX_SAFE_BUILD_LENGTH:n,MAX_LENGTH:i}=de(),l=me();e=t.exports={};const a=e.re=[],h=e.safeRe=[],c=e.src=[],o=e.safeSrc=[],s=e.t={};let u=0;const f="[a-zA-Z0-9-]",d=[["\\s",1],["\\d",i],[f,n]],v=P=>{for(const[O,R]of d)P=P.split(`${O}*`).join(`${O}{0,${R}}`).split(`${O}+`).join(`${O}{1,${R}}`);return P},p=(P,O,R)=>{const k=v(O),A=u++;l(P,A,O),s[P]=A,c[A]=O,o[A]=k,a[A]=new RegExp(O,R?"g":void 0),h[A]=new RegExp(k,R?"g":void 0)};p("NUMERICIDENTIFIER","0|[1-9]\\d*"),p("NUMERICIDENTIFIERLOOSE","\\d+"),p("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${f}*`),p("MAINVERSION",`(${c[s.NUMERICIDENTIFIER]})\\.(${c[s.NUMERICIDENTIFIER]})\\.(${c[s.NUMERICIDENTIFIER]})`),p("MAINVERSIONLOOSE",`(${c[s.NUMERICIDENTIFIERLOOSE]})\\.(${c[s.NUMERICIDENTIFIERLOOSE]})\\.(${c[s.NUMERICIDENTIFIERLOOSE]})`),p("PRERELEASEIDENTIFIER",`(?:${c[s.NONNUMERICIDENTIFIER]}|${c[s.NUMERICIDENTIFIER]})`),p("PRERELEASEIDENTIFIERLOOSE",`(?:${c[s.NONNUMERICIDENTIFIER]}|${c[s.NUMERICIDENTIFIERLOOSE]})`),p("PRERELEASE",`(?:-(${c[s.PRERELEASEIDENTIFIER]}(?:\\.${c[s.PRERELEASEIDENTIFIER]})*))`),p("PRERELEASELOOSE",`(?:-?(${c[s.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${c[s.PRERELEASEIDENTIFIERLOOSE]})*))`),p("BUILDIDENTIFIER",`${f}+`),p("BUILD",`(?:\\+(${c[s.BUILDIDENTIFIER]}(?:\\.${c[s.BUILDIDENTIFIER]})*))`),p("FULLPLAIN",`v?${c[s.MAINVERSION]}${c[s.PRERELEASE]}?${c[s.BUILD]}?`),p("FULL",`^${c[s.FULLPLAIN]}$`),p("LOOSEPLAIN",`[v=\\s]*${c[s.MAINVERSIONLOOSE]}${c[s.PRERELEASELOOSE]}?${c[s.BUILD]}?`),p("LOOSE",`^${c[s.LOOSEPLAIN]}$`),p("GTLT","((?:<|>)?=?)"),p("XRANGEIDENTIFIERLOOSE",`${c[s.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),p("XRANGEIDENTIFIER",`${c[s.NUMERICIDENTIFIER]}|x|X|\\*`),p("XRANGEPLAIN",`[v=\\s]*(${c[s.XRANGEIDENTIFIER]})(?:\\.(${c[s.XRANGEIDENTIFIER]})(?:\\.(${c[s.XRANGEIDENTIFIER]})(?:${c[s.PRERELEASE]})?${c[s.BUILD]}?)?)?`),p("XRANGEPLAINLOOSE",`[v=\\s]*(${c[s.XRANGEIDENTIFIERLOOSE]})(?:\\.(${c[s.XRANGEIDENTIFIERLOOSE]})(?:\\.(${c[s.XRANGEIDENTIFIERLOOSE]})(?:${c[s.PRERELEASELOOSE]})?${c[s.BUILD]}?)?)?`),p("XRANGE",`^${c[s.GTLT]}\\s*${c[s.XRANGEPLAIN]}$`),p("XRANGELOOSE",`^${c[s.GTLT]}\\s*${c[s.XRANGEPLAINLOOSE]}$`),p("COERCEPLAIN",`(^|[^\\d])(\\d{1,${r}})(?:\\.(\\d{1,${r}}))?(?:\\.(\\d{1,${r}}))?`),p("COERCE",`${c[s.COERCEPLAIN]}(?:$|[^\\d])`),p("COERCEFULL",c[s.COERCEPLAIN]+`(?:${c[s.PRERELEASE]})?(?:${c[s.BUILD]})?(?:$|[^\\d])`),p("COERCERTL",c[s.COERCE],!0),p("COERCERTLFULL",c[s.COERCEFULL],!0),p("LONETILDE","(?:~>?)"),p("TILDETRIM",`(\\s*)${c[s.LONETILDE]}\\s+`,!0),e.tildeTrimReplace="$1~",p("TILDE",`^${c[s.LONETILDE]}${c[s.XRANGEPLAIN]}$`),p("TILDELOOSE",`^${c[s.LONETILDE]}${c[s.XRANGEPLAINLOOSE]}$`),p("LONECARET","(?:\\^)"),p("CARETTRIM",`(\\s*)${c[s.LONECARET]}\\s+`,!0),e.caretTrimReplace="$1^",p("CARET",`^${c[s.LONECARET]}${c[s.XRANGEPLAIN]}$`),p("CARETLOOSE",`^${c[s.LONECARET]}${c[s.XRANGEPLAINLOOSE]}$`),p("COMPARATORLOOSE",`^${c[s.GTLT]}\\s*(${c[s.LOOSEPLAIN]})$|^$`),p("COMPARATOR",`^${c[s.GTLT]}\\s*(${c[s.FULLPLAIN]})$|^$`),p("COMPARATORTRIM",`(\\s*)${c[s.GTLT]}\\s*(${c[s.LOOSEPLAIN]}|${c[s.XRANGEPLAIN]})`,!0),e.comparatorTrimReplace="$1$2$3",p("HYPHENRANGE",`^\\s*(${c[s.XRANGEPLAIN]})\\s+-\\s+(${c[s.XRANGEPLAIN]})\\s*$`),p("HYPHENRANGELOOSE",`^\\s*(${c[s.XRANGEPLAINLOOSE]})\\s+-\\s+(${c[s.XRANGEPLAINLOOSE]})\\s*$`),p("STAR","(<|>)?=?\\s*\\*"),p("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),p("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")}(ne,ne.exports)),ne.exports}var Ne,Yt;function Ft(){if(Yt)return Ne;Yt=1;const t=Object.freeze({loose:!0}),e=Object.freeze({});return Ne=n=>n?typeof n!="object"?t:n:e,Ne}var Te,Zt;function rn(){if(Zt)return Te;Zt=1;const t=/^[0-9]+$/,e=(n,i)=>{const l=t.test(n),a=t.test(i);return l&&a&&(n=+n,i=+i),n===i?0:l&&!a?-1:a&&!l?1:n<i?-1:1};return Te={compareIdentifiers:e,rcompareIdentifiers:(n,i)=>e(i,n)},Te}var Le,Kt;function G(){if(Kt)return Le;Kt=1;const t=me(),{MAX_LENGTH:e,MAX_SAFE_INTEGER:r}=de(),{safeRe:n,t:i}=re(),l=Ft(),{compareIdentifiers:a}=rn();class h{constructor(o,s){if(s=l(s),o instanceof h){if(o.loose===!!s.loose&&o.includePrerelease===!!s.includePrerelease)return o;o=o.version}else if(typeof o!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof o}".`);if(o.length>e)throw new TypeError(`version is longer than ${e} characters`);t("SemVer",o,s),this.options=s,this.loose=!!s.loose,this.includePrerelease=!!s.includePrerelease;const u=o.trim().match(s.loose?n[i.LOOSE]:n[i.FULL]);if(!u)throw new TypeError(`Invalid Version: ${o}`);if(this.raw=o,this.major=+u[1],this.minor=+u[2],this.patch=+u[3],this.major>r||this.major<0)throw new TypeError("Invalid major version");if(this.minor>r||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>r||this.patch<0)throw new TypeError("Invalid patch version");u[4]?this.prerelease=u[4].split(".").map(f=>{if(/^[0-9]+$/.test(f)){const d=+f;if(d>=0&&d<r)return d}return f}):this.prerelease=[],this.build=u[5]?u[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(o){if(t("SemVer.compare",this.version,this.options,o),!(o instanceof h)){if(typeof o=="string"&&o===this.version)return 0;o=new h(o,this.options)}return o.version===this.version?0:this.compareMain(o)||this.comparePre(o)}compareMain(o){return o instanceof h||(o=new h(o,this.options)),a(this.major,o.major)||a(this.minor,o.minor)||a(this.patch,o.patch)}comparePre(o){if(o instanceof h||(o=new h(o,this.options)),this.prerelease.length&&!o.prerelease.length)return-1;if(!this.prerelease.length&&o.prerelease.length)return 1;if(!this.prerelease.length&&!o.prerelease.length)return 0;let s=0;do{const u=this.prerelease[s],f=o.prerelease[s];if(t("prerelease compare",s,u,f),u===void 0&&f===void 0)return 0;if(f===void 0)return 1;if(u===void 0)return-1;if(u===f)continue;return a(u,f)}while(++s)}compareBuild(o){o instanceof h||(o=new h(o,this.options));let s=0;do{const u=this.build[s],f=o.build[s];if(t("build compare",s,u,f),u===void 0&&f===void 0)return 0;if(f===void 0)return 1;if(u===void 0)return-1;if(u===f)continue;return a(u,f)}while(++s)}inc(o,s,u){if(o.startsWith("pre")){if(!s&&u===!1)throw new Error("invalid increment argument: identifier is empty");if(s){const f=`-${s}`.match(this.options.loose?n[i.PRERELEASELOOSE]:n[i.PRERELEASE]);if(!f||f[1]!==s)throw new Error(`invalid identifier: ${s}`)}}switch(o){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",s,u);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",s,u);break;case"prepatch":this.prerelease.length=0,this.inc("patch",s,u),this.inc("pre",s,u);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",s,u),this.inc("pre",s,u);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;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 f=Number(u)?1:0;if(this.prerelease.length===0)this.prerelease=[f];else{let d=this.prerelease.length;for(;--d>=0;)typeof this.prerelease[d]=="number"&&(this.prerelease[d]++,d=-2);if(d===-1){if(s===this.prerelease.join(".")&&u===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(f)}}if(s){let d=[s,f];u===!1&&(d=[s]),a(this.prerelease[0],s)===0?isNaN(this.prerelease[1])&&(this.prerelease=d):this.prerelease=d}break}default:throw new Error(`invalid increment argument: ${o}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}return Le=h,Le}var Ae,Qt;function W(){if(Qt)return Ae;Qt=1;const t=G();return Ae=(r,n,i=!1)=>{if(r instanceof t)return r;try{return new t(r,n)}catch(l){if(!i)return null;throw l}},Ae}var Fe,er;function Xn(){if(er)return Fe;er=1;const t=W();return Fe=(r,n)=>{const i=t(r,n);return i?i.version:null},Fe}var be,tr;function Jn(){if(tr)return be;tr=1;const t=W();return be=(r,n)=>{const i=t(r.trim().replace(/^[=v]+/,""),n);return i?i.version:null},be}var Be,rr;function Wn(){if(rr)return Be;rr=1;const t=G();return Be=(r,n,i,l,a)=>{typeof i=="string"&&(a=l,l=i,i=void 0);try{return new t(r instanceof t?r.version:r,i).inc(n,l,a).version}catch{return null}},Be}var De,nr;function Hn(){if(nr)return De;nr=1;const t=W();return De=(r,n)=>{const i=t(r,null,!0),l=t(n,null,!0),a=i.compare(l);if(a===0)return null;const h=a>0,c=h?i:l,o=h?l:i,s=!!c.prerelease.length;if(!!o.prerelease.length&&!s){if(!o.patch&&!o.minor)return"major";if(o.compareMain(c)===0)return o.minor&&!o.patch?"minor":"patch"}const f=s?"pre":"";return i.major!==l.major?f+"major":i.minor!==l.minor?f+"minor":i.patch!==l.patch?f+"patch":"prerelease"},De}var qe,sr;function Yn(){if(sr)return qe;sr=1;const t=G();return qe=(r,n)=>new t(r,n).major,qe}var ze,ir;function Zn(){if(ir)return ze;ir=1;const t=G();return ze=(r,n)=>new t(r,n).minor,ze}var xe,ar;function Kn(){if(ar)return xe;ar=1;const t=G();return xe=(r,n)=>new t(r,n).patch,xe}var Ge,or;function Qn(){if(or)return Ge;or=1;const t=W();return Ge=(r,n)=>{const i=t(r,n);return i&&i.prerelease.length?i.prerelease:null},Ge}var _e,cr;function _(){if(cr)return _e;cr=1;const t=G();return _e=(r,n,i)=>new t(r,i).compare(new t(n,i)),_e}var je,lr;function es(){if(lr)return je;lr=1;const t=_();return je=(r,n,i)=>t(n,r,i),je}var Me,ur;function ts(){if(ur)return Me;ur=1;const t=_();return Me=(r,n)=>t(r,n,!0),Me}var Ue,fr;function bt(){if(fr)return Ue;fr=1;const t=G();return Ue=(r,n,i)=>{const l=new t(r,i),a=new t(n,i);return l.compare(a)||l.compareBuild(a)},Ue}var Ve,hr;function rs(){if(hr)return Ve;hr=1;const t=bt();return Ve=(r,n)=>r.sort((i,l)=>t(i,l,n)),Ve}var Xe,pr;function ns(){if(pr)return Xe;pr=1;const t=bt();return Xe=(r,n)=>r.sort((i,l)=>t(l,i,n)),Xe}var Je,gr;function ve(){if(gr)return Je;gr=1;const t=_();return Je=(r,n,i)=>t(r,n,i)>0,Je}var We,dr;function Bt(){if(dr)return We;dr=1;const t=_();return We=(r,n,i)=>t(r,n,i)<0,We}var He,mr;function nn(){if(mr)return He;mr=1;const t=_();return He=(r,n,i)=>t(r,n,i)===0,He}var Ye,vr;function sn(){if(vr)return Ye;vr=1;const t=_();return Ye=(r,n,i)=>t(r,n,i)!==0,Ye}var Ze,Er;function Dt(){if(Er)return Ze;Er=1;const t=_();return Ze=(r,n,i)=>t(r,n,i)>=0,Ze}var Ke,$r;function qt(){if($r)return Ke;$r=1;const t=_();return Ke=(r,n,i)=>t(r,n,i)<=0,Ke}var Qe,wr;function an(){if(wr)return Qe;wr=1;const t=nn(),e=sn(),r=ve(),n=Dt(),i=Bt(),l=qt();return Qe=(h,c,o,s)=>{switch(c){case"===":return typeof h=="object"&&(h=h.version),typeof o=="object"&&(o=o.version),h===o;case"!==":return typeof h=="object"&&(h=h.version),typeof o=="object"&&(o=o.version),h!==o;case"":case"=":case"==":return t(h,o,s);case"!=":return e(h,o,s);case">":return r(h,o,s);case">=":return n(h,o,s);case"<":return i(h,o,s);case"<=":return l(h,o,s);default:throw new TypeError(`Invalid operator: ${c}`)}},Qe}var et,Rr;function ss(){if(Rr)return et;Rr=1;const t=G(),e=W(),{safeRe:r,t:n}=re();return et=(l,a)=>{if(l instanceof t)return l;if(typeof l=="number"&&(l=String(l)),typeof l!="string")return null;a=a||{};let h=null;if(!a.rtl)h=l.match(a.includePrerelease?r[n.COERCEFULL]:r[n.COERCE]);else{const d=a.includePrerelease?r[n.COERCERTLFULL]:r[n.COERCERTL];let v;for(;(v=d.exec(l))&&(!h||h.index+h[0].length!==l.length);)(!h||v.index+v[0].length!==h.index+h[0].length)&&(h=v),d.lastIndex=v.index+v[1].length+v[2].length;d.lastIndex=-1}if(h===null)return null;const c=h[2],o=h[3]||"0",s=h[4]||"0",u=a.includePrerelease&&h[5]?`-${h[5]}`:"",f=a.includePrerelease&&h[6]?`+${h[6]}`:"";return e(`${c}.${o}.${s}${u}${f}`,a)},et}var tt,kr;function is(){if(kr)return tt;kr=1;class t{constructor(){this.max=1e3,this.map=new Map}get(r){const n=this.map.get(r);if(n!==void 0)return this.map.delete(r),this.map.set(r,n),n}delete(r){return this.map.delete(r)}set(r,n){if(!this.delete(r)&&n!==void 0){if(this.map.size>=this.max){const l=this.map.keys().next().value;this.delete(l)}this.map.set(r,n)}return this}}return tt=t,tt}var rt,Pr;function j(){if(Pr)return rt;Pr=1;const t=/\s+/g;class e{constructor(m,S){if(S=i(S),m instanceof e)return m.loose===!!S.loose&&m.includePrerelease===!!S.includePrerelease?m:new e(m.raw,S);if(m instanceof l)return this.raw=m.value,this.set=[[m]],this.formatted=void 0,this;if(this.options=S,this.loose=!!S.loose,this.includePrerelease=!!S.includePrerelease,this.raw=m.trim().replace(t," "),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(y=>!p(y[0])),this.set.length===0)this.set=[$];else if(this.set.length>1){for(const y of this.set)if(y.length===1&&P(y[0])){this.set=[y];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let m=0;m<this.set.length;m++){m>0&&(this.formatted+="||");const S=this.set[m];for(let $=0;$<S.length;$++)$>0&&(this.formatted+=" "),this.formatted+=S[$].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(m){const $=((this.options.includePrerelease&&d)|(this.options.loose&&v))+":"+m,y=n.get($);if(y)return y;const w=this.options.loose,I=w?c[o.HYPHENRANGELOOSE]:c[o.HYPHENRANGE];m=m.replace(I,ye(this.options.includePrerelease)),a("hyphen replace",m),m=m.replace(c[o.COMPARATORTRIM],s),a("comparator trim",m),m=m.replace(c[o.TILDETRIM],u),a("tilde trim",m),m=m.replace(c[o.CARETTRIM],f),a("caret trim",m);let L=m.split(" ").map(q=>R(q,this.options)).join(" ").split(/\s+/).map(q=>Se(q,this.options));w&&(L=L.filter(q=>(a("loose invalid filter",q,this.options),!!q.match(c[o.COMPARATORLOOSE])))),a("range list",L);const N=new Map,b=L.map(q=>new l(q,this.options));for(const q of b){if(p(q))return[q];N.set(q.value,q)}N.size>1&&N.has("")&&N.delete("");const x=[...N.values()];return n.set($,x),x}intersects(m,S){if(!(m instanceof e))throw new TypeError("a Range is required");return this.set.some($=>O($,S)&&m.set.some(y=>O(y,S)&&$.every(w=>y.every(I=>w.intersects(I,S)))))}test(m){if(!m)return!1;if(typeof m=="string")try{m=new h(m,this.options)}catch{return!1}for(let S=0;S<this.set.length;S++)if(Oe(this.set[S],m,this.options))return!0;return!1}}rt=e;const r=is(),n=new r,i=Ft(),l=Ee(),a=me(),h=G(),{safeRe:c,t:o,comparatorTrimReplace:s,tildeTrimReplace:u,caretTrimReplace:f}=re(),{FLAG_INCLUDE_PRERELEASE:d,FLAG_LOOSE:v}=de(),p=E=>E.value==="<0.0.0-0",P=E=>E.value==="",O=(E,m)=>{let S=!0;const $=E.slice();let y=$.pop();for(;S&&$.length;)S=$.every(w=>y.intersects(w,m)),y=$.pop();return S},R=(E,m)=>(a("comp",E,m),E=F(E,m),a("caret",E),E=A(E,m),a("tildes",E),E=C(E,m),a("xrange",E),E=Pe(E,m),a("stars",E),E),k=E=>!E||E.toLowerCase()==="x"||E==="*",A=(E,m)=>E.trim().split(/\s+/).map(S=>B(S,m)).join(" "),B=(E,m)=>{const S=m.loose?c[o.TILDELOOSE]:c[o.TILDE];return E.replace(S,($,y,w,I,L)=>{a("tilde",E,$,y,w,I,L);let N;return k(y)?N="":k(w)?N=`>=${y}.0.0 <${+y+1}.0.0-0`:k(I)?N=`>=${y}.${w}.0 <${y}.${+w+1}.0-0`:L?(a("replaceTilde pr",L),N=`>=${y}.${w}.${I}-${L} <${y}.${+w+1}.0-0`):N=`>=${y}.${w}.${I} <${y}.${+w+1}.0-0`,a("tilde return",N),N})},F=(E,m)=>E.trim().split(/\s+/).map(S=>D(S,m)).join(" "),D=(E,m)=>{a("caret",E,m);const S=m.loose?c[o.CARETLOOSE]:c[o.CARET],$=m.includePrerelease?"-0":"";return E.replace(S,(y,w,I,L,N)=>{a("caret",E,y,w,I,L,N);let b;return k(w)?b="":k(I)?b=`>=${w}.0.0${$} <${+w+1}.0.0-0`:k(L)?w==="0"?b=`>=${w}.${I}.0${$} <${w}.${+I+1}.0-0`:b=`>=${w}.${I}.0${$} <${+w+1}.0.0-0`:N?(a("replaceCaret pr",N),w==="0"?I==="0"?b=`>=${w}.${I}.${L}-${N} <${w}.${I}.${+L+1}-0`:b=`>=${w}.${I}.${L}-${N} <${w}.${+I+1}.0-0`:b=`>=${w}.${I}.${L}-${N} <${+w+1}.0.0-0`):(a("no pr"),w==="0"?I==="0"?b=`>=${w}.${I}.${L}${$} <${w}.${I}.${+L+1}-0`:b=`>=${w}.${I}.${L}${$} <${w}.${+I+1}.0-0`:b=`>=${w}.${I}.${L} <${+w+1}.0.0-0`),a("caret return",b),b})},C=(E,m)=>(a("replaceXRanges",E,m),E.split(/\s+/).map(S=>H(S,m)).join(" ")),H=(E,m)=>{E=E.trim();const S=m.loose?c[o.XRANGELOOSE]:c[o.XRANGE];return E.replace(S,($,y,w,I,L,N)=>{a("xRange",E,$,y,w,I,L,N);const b=k(w),x=b||k(I),q=x||k(L),Y=q;return y==="="&&Y&&(y=""),N=m.includePrerelease?"-0":"",b?y===">"||y==="<"?$="<0.0.0-0":$="*":y&&Y?(x&&(I=0),L=0,y===">"?(y=">=",x?(w=+w+1,I=0,L=0):(I=+I+1,L=0)):y==="<="&&(y="<",x?w=+w+1:I=+I+1),y==="<"&&(N="-0"),$=`${y+w}.${I}.${L}${N}`):x?$=`>=${w}.0.0${N} <${+w+1}.0.0-0`:q&&($=`>=${w}.${I}.0${N} <${w}.${+I+1}.0-0`),a("xRange return",$),$})},Pe=(E,m)=>(a("replaceStars",E,m),E.trim().replace(c[o.STAR],"")),Se=(E,m)=>(a("replaceGTE0",E,m),E.trim().replace(c[m.includePrerelease?o.GTE0PRE:o.GTE0],"")),ye=E=>(m,S,$,y,w,I,L,N,b,x,q,Y)=>(k($)?S="":k(y)?S=`>=${$}.0.0${E?"-0":""}`:k(w)?S=`>=${$}.${y}.0${E?"-0":""}`:I?S=`>=${S}`:S=`>=${S}${E?"-0":""}`,k(b)?N="":k(x)?N=`<${+b+1}.0.0-0`:k(q)?N=`<${b}.${+x+1}.0-0`:Y?N=`<=${b}.${x}.${q}-${Y}`:E?N=`<${b}.${x}.${+q+1}-0`:N=`<=${N}`,`${S} ${N}`.trim()),Oe=(E,m,S)=>{for(let $=0;$<E.length;$++)if(!E[$].test(m))return!1;if(m.prerelease.length&&!S.includePrerelease){for(let $=0;$<E.length;$++)if(a(E[$].semver),E[$].semver!==l.ANY&&E[$].semver.prerelease.length>0){const y=E[$].semver;if(y.major===m.major&&y.minor===m.minor&&y.patch===m.patch)return!0}return!1}return!0};return rt}var nt,Sr;function Ee(){if(Sr)return nt;Sr=1;const t=Symbol("SemVer ANY");class e{static get ANY(){return t}constructor(s,u){if(u=r(u),s instanceof e){if(s.loose===!!u.loose)return s;s=s.value}s=s.trim().split(/\s+/).join(" "),a("comparator",s,u),this.options=u,this.loose=!!u.loose,this.parse(s),this.semver===t?this.value="":this.value=this.operator+this.semver.version,a("comp",this)}parse(s){const u=this.options.loose?n[i.COMPARATORLOOSE]:n[i.COMPARATOR],f=s.match(u);if(!f)throw new TypeError(`Invalid comparator: ${s}`);this.operator=f[1]!==void 0?f[1]:"",this.operator==="="&&(this.operator=""),f[2]?this.semver=new h(f[2],this.options.loose):this.semver=t}toString(){return this.value}test(s){if(a("Comparator.test",s,this.options.loose),this.semver===t||s===t)return!0;if(typeof s=="string")try{s=new h(s,this.options)}catch{return!1}return l(s,this.operator,this.semver,this.options)}intersects(s,u){if(!(s instanceof e))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new c(s.value,u).test(this.value):s.operator===""?s.value===""?!0:new c(this.value,u).test(s.semver):(u=r(u),u.includePrerelease&&(this.value==="<0.0.0-0"||s.value==="<0.0.0-0")||!u.includePrerelease&&(this.value.startsWith("<0.0.0")||s.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&s.operator.startsWith(">")||this.operator.startsWith("<")&&s.operator.startsWith("<")||this.semver.version===s.semver.version&&this.operator.includes("=")&&s.operator.includes("=")||l(this.semver,"<",s.semver,u)&&this.operator.startsWith(">")&&s.operator.startsWith("<")||l(this.semver,">",s.semver,u)&&this.operator.startsWith("<")&&s.operator.startsWith(">")))}}nt=e;const r=Ft(),{safeRe:n,t:i}=re(),l=an(),a=me(),h=G(),c=j();return nt}var st,yr;function $e(){if(yr)return st;yr=1;const t=j();return st=(r,n,i)=>{try{n=new t(n,i)}catch{return!1}return n.test(r)},st}var it,Or;function as(){if(Or)return it;Or=1;const t=j();return it=(r,n)=>new t(r,n).set.map(i=>i.map(l=>l.value).join(" ").trim().split(" ")),it}var at,Cr;function os(){if(Cr)return at;Cr=1;const t=G(),e=j();return at=(n,i,l)=>{let a=null,h=null,c=null;try{c=new e(i,l)}catch{return null}return n.forEach(o=>{c.test(o)&&(!a||h.compare(o)===-1)&&(a=o,h=new t(a,l))}),a},at}var ot,Ir;function cs(){if(Ir)return ot;Ir=1;const t=G(),e=j();return ot=(n,i,l)=>{let a=null,h=null,c=null;try{c=new e(i,l)}catch{return null}return n.forEach(o=>{c.test(o)&&(!a||h.compare(o)===1)&&(a=o,h=new t(a,l))}),a},ot}var ct,Nr;function ls(){if(Nr)return ct;Nr=1;const t=G(),e=j(),r=ve();return ct=(i,l)=>{i=new e(i,l);let a=new t("0.0.0");if(i.test(a)||(a=new t("0.0.0-0"),i.test(a)))return a;a=null;for(let h=0;h<i.set.length;++h){const c=i.set[h];let o=null;c.forEach(s=>{const u=new t(s.semver.version);switch(s.operator){case">":u.prerelease.length===0?u.patch++:u.prerelease.push(0),u.raw=u.format();case"":case">=":(!o||r(u,o))&&(o=u);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${s.operator}`)}}),o&&(!a||r(a,o))&&(a=o)}return a&&i.test(a)?a:null},ct}var lt,Tr;function us(){if(Tr)return lt;Tr=1;const t=j();return lt=(r,n)=>{try{return new t(r,n).range||"*"}catch{return null}},lt}var ut,Lr;function zt(){if(Lr)return ut;Lr=1;const t=G(),e=Ee(),{ANY:r}=e,n=j(),i=$e(),l=ve(),a=Bt(),h=qt(),c=Dt();return ut=(s,u,f,d)=>{s=new t(s,d),u=new n(u,d);let v,p,P,O,R;switch(f){case">":v=l,p=h,P=a,O=">",R=">=";break;case"<":v=a,p=c,P=l,O="<",R="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(i(s,u,d))return!1;for(let k=0;k<u.set.length;++k){const A=u.set[k];let B=null,F=null;if(A.forEach(D=>{D.semver===r&&(D=new e(">=0.0.0")),B=B||D,F=F||D,v(D.semver,B.semver,d)?B=D:P(D.semver,F.semver,d)&&(F=D)}),B.operator===O||B.operator===R||(!F.operator||F.operator===O)&&p(s,F.semver))return!1;if(F.operator===R&&P(s,F.semver))return!1}return!0},ut}var ft,Ar;function fs(){if(Ar)return ft;Ar=1;const t=zt();return ft=(r,n,i)=>t(r,n,">",i),ft}var ht,Fr;function hs(){if(Fr)return ht;Fr=1;const t=zt();return ht=(r,n,i)=>t(r,n,"<",i),ht}var pt,br;function ps(){if(br)return pt;br=1;const t=j();return pt=(r,n,i)=>(r=new t(r,i),n=new t(n,i),r.intersects(n,i)),pt}var gt,Br;function gs(){if(Br)return gt;Br=1;const t=$e(),e=_();return gt=(r,n,i)=>{const l=[];let a=null,h=null;const c=r.sort((f,d)=>e(f,d,i));for(const f of c)t(f,n,i)?(h=f,a||(a=f)):(h&&l.push([a,h]),h=null,a=null);a&&l.push([a,null]);const o=[];for(const[f,d]of l)f===d?o.push(f):!d&&f===c[0]?o.push("*"):d?f===c[0]?o.push(`<=${d}`):o.push(`${f} - ${d}`):o.push(`>=${f}`);const s=o.join(" || "),u=typeof n.raw=="string"?n.raw:String(n);return s.length<u.length?s:n},gt}var dt,Dr;function ds(){if(Dr)return dt;Dr=1;const t=j(),e=Ee(),{ANY:r}=e,n=$e(),i=_(),l=(u,f,d={})=>{if(u===f)return!0;u=new t(u,d),f=new t(f,d);let v=!1;e:for(const p of u.set){for(const P of f.set){const O=c(p,P,d);if(v=v||O!==null,O)continue e}if(v)return!1}return!0},a=[new e(">=0.0.0-0")],h=[new e(">=0.0.0")],c=(u,f,d)=>{if(u===f)return!0;if(u.length===1&&u[0].semver===r){if(f.length===1&&f[0].semver===r)return!0;d.includePrerelease?u=a:u=h}if(f.length===1&&f[0].semver===r){if(d.includePrerelease)return!0;f=h}const v=new Set;let p,P;for(const C of u)C.operator===">"||C.operator===">="?p=o(p,C,d):C.operator==="<"||C.operator==="<="?P=s(P,C,d):v.add(C.semver);if(v.size>1)return null;let O;if(p&&P){if(O=i(p.semver,P.semver,d),O>0)return null;if(O===0&&(p.operator!==">="||P.operator!=="<="))return null}for(const C of v){if(p&&!n(C,String(p),d)||P&&!n(C,String(P),d))return null;for(const H of f)if(!n(C,String(H),d))return!1;return!0}let R,k,A,B,F=P&&!d.includePrerelease&&P.semver.prerelease.length?P.semver:!1,D=p&&!d.includePrerelease&&p.semver.prerelease.length?p.semver:!1;F&&F.prerelease.length===1&&P.operator==="<"&&F.prerelease[0]===0&&(F=!1);for(const C of f){if(B=B||C.operator===">"||C.operator===">=",A=A||C.operator==="<"||C.operator==="<=",p){if(D&&C.semver.prerelease&&C.semver.prerelease.length&&C.semver.major===D.major&&C.semver.minor===D.minor&&C.semver.patch===D.patch&&(D=!1),C.operator===">"||C.operator===">="){if(R=o(p,C,d),R===C&&R!==p)return!1}else if(p.operator===">="&&!n(p.semver,String(C),d))return!1}if(P){if(F&&C.semver.prerelease&&C.semver.prerelease.length&&C.semver.major===F.major&&C.semver.minor===F.minor&&C.semver.patch===F.patch&&(F=!1),C.operator==="<"||C.operator==="<="){if(k=s(P,C,d),k===C&&k!==P)return!1}else if(P.operator==="<="&&!n(P.semver,String(C),d))return!1}if(!C.operator&&(P||p)&&O!==0)return!1}return!(p&&A&&!P&&O!==0||P&&B&&!p&&O!==0||D||F)},o=(u,f,d)=>{if(!u)return f;const v=i(u.semver,f.semver,d);return v>0?u:v<0||f.operator===">"&&u.operator===">="?f:u},s=(u,f,d)=>{if(!u)return f;const v=i(u.semver,f.semver,d);return v<0?u:v>0||f.operator==="<"&&u.operator==="<="?f:u};return dt=l,dt}var mt,qr;function ms(){if(qr)return mt;qr=1;const t=re(),e=de(),r=G(),n=rn(),i=W(),l=Xn(),a=Jn(),h=Wn(),c=Hn(),o=Yn(),s=Zn(),u=Kn(),f=Qn(),d=_(),v=es(),p=ts(),P=bt(),O=rs(),R=ns(),k=ve(),A=Bt(),B=nn(),F=sn(),D=Dt(),C=qt(),H=an(),Pe=ss(),Se=Ee(),ye=j(),Oe=$e(),E=as(),m=os(),S=cs(),$=ls(),y=us(),w=zt(),I=fs(),L=hs(),N=ps(),b=gs(),x=ds();return mt={parse:i,valid:l,clean:a,inc:h,diff:c,major:o,minor:s,patch:u,prerelease:f,compare:d,rcompare:v,compareLoose:p,compareBuild:P,sort:O,rsort:R,gt:k,lt:A,eq:B,neq:F,gte:D,lte:C,cmp:H,coerce:Pe,Comparator:Se,Range:ye,satisfies:Oe,toComparators:E,maxSatisfying:m,minSatisfying:S,minVersion:$,validRange:y,outside:w,gtr:I,ltr:L,intersects:N,simplifyRange:b,subset:x,SemVer:r,re:t.re,src:t.src,tokens:t.t,SEMVER_SPEC_VERSION:e.SEMVER_SPEC_VERSION,RELEASE_TYPES:e.RELEASE_TYPES,compareIdentifiers:n.compareIdentifiers,rcompareIdentifiers:n.rcompareIdentifiers},mt}var on=ms();const cn=Vn(on),kt="_updates_v2/per_package_version/";function vs(t,e){return`${kt}${t.organization}/${t.name}/${t.version}/${e}`}const Es=/(?<packageKeyWithoutVersion>(?<organization>[^\/]+)\/(?<name>[^\/]+))\/(?<version>[^\/]+)\/(?<seed>[^\/]+)$/,vt="_updates_v2/_global_update_in",zr="_updates_v2/_global_update_out",Pt="_overview_snapshots_v2/global/",$s="_overview_snapshots_v2/per_package/",ws=/^(?<timestamp>\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}\.\d{3}Z-[a-z0-9]+)\.json\.gz$/;function xr(t){return`${Pt}${t}.json.gz`}function Rs(t,e){return`${$s}${t.organization}/${t.name}/${e}.json.gz`}const X="v2/",ln="overview.json",un="overview.json.gz",fn="overview.json",ee="manifest.json",fe="channels",se=/^[-a-z0-9]+$/;function xt(t){return`${t.organization}/${t.name}/${t.version}`}function K(t){return`${X}${xt(t)}`}const hn="/"+ee,pn=T.z.object({description:g.BlockPackDescriptionManifest,channels:T.z.array(T.z.string()).default(()=>[]),manifestSha256:g.Sha256Schema}).passthrough(),ie=T.z.object({schema:T.z.literal("v2"),versions:T.z.array(pn)}).passthrough();function gn(t){return`${t.organization}/${t.name}/${fn}`}function St(t){return`${X}${gn(t)}`}function dn(t){return`${xt(t)}/${fe}/`}function mn(t){return`${X}${dn(t)}`}const vn=/(?<packageKeyWithoutVersion>(?<organization>[^\/]+)\/(?<name>[^\/]+))\/(?<version>[^\/]+)\/manifest\.json$/,Q=`${X}${ln}`,yt=`${X}${un}`;function Gt(t){const e=T.z.object({id:g.BlockPackIdNoVersion,allVersions:T.z.array(T.z.string()).optional(),allVersionsWithChannels:T.z.array(g.VersionWithChannels).optional(),latest:t,latestManifestSha256:g.Sha256Schema,latestByChannel:T.z.record(T.z.string(),T.z.object({description:t,manifestSha256:g.Sha256Schema}).passthrough()).default({})}).passthrough();return e.transform(r=>r.allVersionsWithChannels?r:{...r,allVersionsWithChannels:r.allVersions.map(n=>({version:n,channels:[]}))}).transform(r=>r.latestByChannel[g.AnyChannel]?r:{...r,latestByChannel:{...r.latestByChannel,[g.AnyChannel]:{description:r.latest,manifestSha256:r.latestManifestSha256}}}).pipe(e.required({allVersionsWithChannels:!0}))}const ks=Gt(g.BlockPackDescriptionManifest);function we(t){return T.z.object({schema:T.z.literal("v2"),packages:T.z.array(Gt(t))}).passthrough()}const ae=we(g.BlockPackDescriptionManifest);function Ps(t){return g.CreateBlockPackDescriptionSchema(g.BlockComponentsManifest,g.BlockPackMeta(g.ContentRelativeText.transform(ge(t)),g.ContentRelativeBinary.transform(te(t))))}function Ss(t){return we(g.CreateBlockPackDescriptionSchema(g.BlockComponentsManifest,g.BlockPackMeta(g.ContentRelativeText.transform(ge(t)),g.ContentRelativeBinary.transform(te(t)))))}function ys(t){return we(g.CreateBlockPackDescriptionSchema(g.BlockComponentsManifest,g.BlockPackMeta(g.ContentRelativeText.transform(ge(t)),g.ContentRelativeBinary.transform(te(t)))))}class Os{constructor(e,r=new It.ConsoleLoggerAdapter,n={}){J(this,"gzipAsync",Vt.promisify(Ut.gzip));J(this,"gunzipAsync",Vt.promisify(Ut.gunzip));this.storage=e,this.logger=r,this.settings=n}generateTimestamp(){const e=new Date().toISOString().replace(/:/g,"-").replace(/\.(\d{3})Z$/,".$1Z"),r=Math.random().toString(36).substring(2,6);return`${e}-${r}`}generatePreWriteTimestamp(){const e=new Date().toISOString().replace(/:/g,"-").replace(/\.(\d{3})Z$/,".$1Z"),r=Math.random().toString(36).substring(2,6);return`${e}-prewrite-${r}`}async createGlobalOverviewSnapshot(e,r){if(!this.settings.skipSnapshotCreation)try{const n=await this.gzipAsync(e),i=xr(r);await this.storage.putFile(i,Buffer.from(n)),this.logger.info(`Global overview snapshot created at ${i}`)}catch(n){this.logger.warn(`Failed to create global overview snapshot: ${n}`)}}async createPackageOverviewSnapshot(e,r,n){if(!this.settings.skipSnapshotCreation)try{const i=JSON.stringify(r),l=await this.gzipAsync(i),a=Rs(e,n);await this.storage.putFile(a,Buffer.from(l)),this.logger.info(`Package overview snapshot created at ${a} for ${e.organization}:${e.name}`)}catch(i){this.logger.warn(`Failed to create package overview snapshot for ${e.organization}:${e.name}: ${i}`)}}async updateRegistry(e="normal"){this.logger.info("Initiating registry refresh...");const r=this.generateTimestamp(),n=new Map,i=[],l=await this.storage.listFiles(kt),a=({organization:s,name:u,version:f})=>{const d=`${s}:${u}`;let v=n.get(d);if(v){if(!v.versions.has(f))return v.versions.add(f),!0}else return n.set(d,{package:{organization:s,name:u},versions:new Set([f])}),!0;return!1};this.logger.info("Packages to be updated:");for(const s of l){const u=s.match(Es);if(!u)continue;i.push(s);const{organization:f,name:d,version:v,seed:p}=u.groups,P=a({organization:f,name:d,version:v});this.logger.info(` - ${f}:${d}:${v} added:${P}`)}if(e==="force"){const s=await this.storage.listFiles(X);for(const u of s){const f=u.match(vn);if(!f)continue;const{organization:d,name:v,version:p}=f.groups,P=a({organization:d,name:v,version:p});this.logger.info(` - ${d}:${v}:${p} force_added:${P}`)}}const h=await this.storage.getFile(Q);if(e==="force"&&h!==void 0){const s=this.generatePreWriteTimestamp();await this.createGlobalOverviewSnapshot(h.toString(),s)}let o=(e==="force"?{packages:[]}:h===void 0?{packages:[]}:ae.parse(JSON.parse(h.toString()))).packages;this.logger.info(`Global overview ${e==="force"?"starting empty (force mode)":"loaded"}, ${o.length} records`);for(const[,s]of n.entries()){const u=St(s.package),f=await this.storage.getFile(u);if(e==="force"&&f!==void 0){const R=this.generatePreWriteTimestamp(),k=ie.parse(JSON.parse(f.toString()));await this.createPackageOverviewSnapshot(s.package,k,R)}const d=e==="force"?{versions:[]}:f===void 0?{versions:[]}:ie.parse(JSON.parse(f.toString()));this.logger.info(`Updating ${s.package.organization}:${s.package.name} overview${e==="force"?" (starting empty in force mode)":""}, ${d.versions.length} records`);const v=d.versions.filter(R=>!s.versions.has(R.description.id.version));for(const[R]of s.versions.entries()){const k=R.toString(),A={...s.package,version:k},B=await this.storage.getFile(K(A)+hn);if(!B)continue;const F=await le(B),D=(await this.storage.listFiles(mn(A))).filter(C=>C.match(se)?!0:(this.logger.warn(`Unexpected channel in ${g.blockPackIdToString(A)}: ${C}`),!1));v.push({description:Rt(k).parse(g.BlockPackManifest.parse(JSON.parse(B.toString("utf8"))).description),manifestSha256:F,channels:D})}v.sort((R,k)=>on.compare(k.description.id.version,R.description.id.version));const p={schema:"v2",versions:v};e!=="dry-run"&&(await this.storage.putFile(u,Buffer.from(JSON.stringify(p))),await this.createPackageOverviewSnapshot(s.package,p,r)),this.logger.info(`Done (${v.length} records)`);const P=new Set;for(const R of v)for(const k of R.channels)P.add(k);o=o.filter(R=>R.id.organization!==s.package.organization||R.id.name!==s.package.name);const O=Rt(`${s.package.organization}/${s.package.name}`);o.push({id:{organization:s.package.organization,name:s.package.name},allVersions:v.map(R=>R.description.id.version).reverse(),allVersionsWithChannels:v.map(R=>({version:R.description.id.version,channels:R.channels})).reverse(),latest:O.parse(v[0].description),latestManifestSha256:v[0].manifestSha256,latestByChannel:Object.fromEntries([...P,g.AnyChannel].map(R=>{const k=v.find(A=>R===g.AnyChannel||A.channels.indexOf(R)!==-1);if(!k)throw new Error("Assertion error");return[R,{description:O.parse(k.description),manifestSha256:k==null?void 0:k.manifestSha256}]}))})}if(e!=="dry-run"){const s=JSON.stringify({schema:"v2",packages:o}),u=Buffer.from(s);await this.storage.putFile(Q,u);const f=await this.gzipAsync(s);await this.storage.putFile(yt,Buffer.from(f)),await this.createGlobalOverviewSnapshot(s,r)}this.logger.info(`Global overview updated (${o.length} records)`),e!=="dry-run"&&await this.storage.deleteFiles(...i.map(s=>`${kt}${s}`)),this.logger.info("Version update requests cleared")}async updateIfNeeded(e="normal"){this.logger.info("Checking if registry requires refresh...");const r=await this.storage.getFile(vt),n=await this.storage.getFile(zr);if(e!=="force"&&r===void 0&&n===void 0){this.logger.info("No global seed files found, update not needed.");return}if(e!=="force"&&r!==void 0&&n!==void 0&&r.equals(n)){this.logger.info("Registry is up to date.");return}await this.updateRegistry(e),r&&(e!=="dry-run"&&await this.storage.putFile(zr,r),this.logger.info("Refresh finished."))}async getPackageOverview(e){const r=await this.storage.getFile(St(e));if(r!==void 0)return ie.parse(JSON.parse(r.toString()))}async getGlobalOverview(){const e=await this.storage.getFile(Q);if(e!==void 0)return ae.parse(JSON.parse(e.toString()))}async marchChanged(e){const r=jr.randomUUID(),n=vs(e,r);this.logger.info(`Creating update seed at ${n} ...`),await this.storage.putFile(n,Buffer.from(r)),this.logger.info(`Touching global update seed ${vt} ...`),await this.storage.putFile(vt,Buffer.from(r))}async addPackageToChannel(e,r){if(!r.match(se))throw new Error(`Illegal characters in channel name: ${r}`);const n=K(e);if(await this.storage.getFile(`${n}/${ee}`)===void 0)throw new Error(`Package ${g.blockPackIdToString(e)} not found in the registry.`);await this.storage.putFile(`${n}/${fe}/${r}`,Buffer.from(r)),await this.marchChanged(e)}async removePackageFromChannel(e,r){if(!r.match(se))throw new Error(`Illegal characters in channel name: ${r}`);const n=K(e);if(await this.storage.getFile(`${n}/${ee}`)===void 0)throw new Error(`Package ${g.blockPackIdToString(e)} not found in the registry.`);await this.storage.deleteFiles(`${n}/${fe}/${r}`),await this.marchChanged(e)}async listGlobalOverviewSnapshots(){const e=await this.storage.listFiles(Pt),r=[];for(const n of e){const i=n.indexOf("/")===-1?n:n.substring(n.lastIndexOf("/")+1),l=i.match(ws);l&&r.push({timestamp:l.groups.timestamp,path:Pt+i})}return r.sort((n,i)=>i.timestamp.localeCompare(n.timestamp)),r}async restoreGlobalOverviewFromSnapshot(e){const r=xr(e),n=await this.storage.getFile(r);if(!n)throw new Error(`Snapshot ${e} not found at ${r}`);const l=(await this.gunzipAsync(n)).toString("utf8");try{ae.parse(JSON.parse(l))}catch(c){throw new Error(`Invalid snapshot data in ${e}: ${c}`)}const a=Buffer.from(l);await this.storage.putFile(Q,a);const h=await this.gzipAsync(l);await this.storage.putFile(yt,Buffer.from(h)),this.logger.info(`Global overview restored from snapshot ${e}`)}async publishPackage(e,r){const n=K(e.description.id);for(const l of e.files){const a=await r(l.name);if(a.length!==l.size)throw new Error(`Actual file size don't match file size from the manifest file for ${l.name} (actual = ${a.length}; manifest = ${l.size})`);const h=await le(a);if(h!==l.sha256.toUpperCase())throw new Error(`Actual file SHA-256 don't match the checksum from the manifest file for ${l.name} (actual = ${h}; manifest = ${l.sha256.toUpperCase()})`);const c=n+"/"+l.name;this.logger.info(`Uploading ${l.name} -> ${c} ...`),await this.storage.putFile(c,a)}const i=n+"/"+ee;this.logger.info(`Uploading manifest to ${i} ...`),await this.storage.putFile(i,Buffer.from(JSON.stringify(e))),await this.marchChanged(e.description.id)}}class En{constructor(e,r,n){this.client=e,this.bucket=r,this.root=n}async getFile(e){try{return Buffer.from(await(await this.client.getObject({Bucket:this.bucket,Key:U.join(this.root,e)})).Body.transformToByteArray())}catch(r){if(r.name==="NoSuchKey")return;throw r}}async listFiles(e){const r=U.join(this.root,e),n=Mr.paginateListObjectsV2({client:this.client},{Bucket:this.bucket,Prefix:r}),i=[];for await(const l of n)i.push(...(l.Contents??[]).map(a=>U.relative(r,a.Key)));return i}async putFile(e,r){await this.client.putObject({Bucket:this.bucket,Key:U.join(this.root,e),Body:r})}async deleteFiles(...e){const r=await this.client.deleteObjects({Bucket:this.bucket,Delete:{Objects:e.map(n=>({Key:U.join(this.root,n)}))}});if(r.Errors!==void 0&&r.Errors.length>0)throw new Error(`Errors encountered while deleting files: ${r.Errors.join(`
|
|
2
|
+
`)}`)}}class $n{constructor(e){J(this,"root");this.root=z.resolve(e)}toAbsolutePath(e){if(U.isAbsolute(e))throw new Error("absolute path");return z.resolve(this.root,e.split(U.sep).join(z.sep))}async getFile(e){try{return await Z.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 Z.promises.readdir(r,{recursive:!0,withFileTypes:!0})).filter(n=>n.isFile()).map(n=>z.relative(r,z.resolve(n.parentPath,n.name)).split(z.sep).join(U.sep))}catch(r){if(r.code=="ENOENT")return[];throw new Error("",{cause:r})}}async putFile(e,r){const n=this.toAbsolutePath(e);await Z.promises.mkdir(z.dirname(n),{recursive:!0}),await Z.promises.writeFile(n,r)}async deleteFiles(...e){for(const r of e)await Z.promises.rm(this.toAbsolutePath(r))}}function wn(t){const e=new URL(t,`file:${z.resolve(".").split(z.sep).join(U.sep)}/`);switch(e.protocol){case"file:":const r=z.resolve(e.pathname);return new $n(r);case"s3:":const n={},i=e.searchParams.get("region");i&&(n.region=i);const l=e.hostname;return new En(new Mr.S3(n),l,e.pathname.replace(/^\//,""));default:throw new Error(`Unknown protocol: ${e.protocol}`)}}const Cs=T.z.string().regex(/^(?:s3:|file:)/),Rn=T.z.object({organization:T.z.string(),package:T.z.string(),version:g.SemVer.optional(),files:T.z.record(T.z.string().regex(/^[^\/]+$/),T.z.string()).default({}),meta:T.z.object({}).passthrough()}),kn=T.z.object({registries:T.z.record(T.z.string(),Cs).default({}),registry:T.z.string().optional()}),_t=kn.merge(Rn).required({registry:!0,version:!0}),Re=_t.partial().required({registries:!0,files:!0}),Pn="pl.package.json",Sn="pl.package.yaml",ke="v1/";function Is(t){return`${ke}${t.organization}/${t.package}/${t.version}`}function jt(t,e){return`${ke}${t.organization}/${t.package}/${t.version}/${e}`}function Ot(t){return`${ke}${t.organization}/${t.package}/overview.json`}const oe=`${ke}overview.json`,Mt="meta.json",Ct="_updates_v1/per_package_version/";function Ns(t,e){return`${Ct}${t.organization}/${t.package}/${t.version}/${e}`}const Ts=/(?<packageKeyWithoutVersion>(?<organization>[^\/]+)\/(?<pkg>[^\/]+))\/(?<version>[^\/]+)\/(?<seed>[^\/]+)$/,yn="_updates_v1/_global_update_in",Gr="_updates_v1/_global_update_out";class Ls{constructor(e,r){this.storage=e,this.logger=r}constructNewPackage(e){return new As(this.storage,e)}async updateRegistry(){var a,h,c,o,s,u,f,d;(a=this.logger)==null||a.info("Initiating registry refresh...");const e=new Map,r=[],n=await this.storage.listFiles(Ct);(h=this.logger)==null||h.info("Packages to be updated:");for(const v of n){const p=v.match(Ts);if(!p)continue;r.push(v);const{packageKeyWithoutVersion:P,organization:O,pkg:R,version:k,seed:A}=p.groups;let B=e.get(P);B?B.versions.has(k)||B.versions.add(k):e.set(P,{package:{organization:O,package:R},versions:new Set([k])}),(c=this.logger)==null||c.info(` - ${O}:${R}:${k}`)}const i=await this.storage.getFile(oe);let l=i===void 0?[]:JSON.parse(i.toString());(o=this.logger)==null||o.info(`Global overview loaded, ${l.length} records`);for(const[,v]of e.entries()){const p=Ot(v.package),P=await this.storage.getFile(p);let O=P===void 0?[]:JSON.parse(P.toString());(s=this.logger)==null||s.info(`Updating ${v.package.organization}:${v.package.package} overview, ${O.length} records`),O=O.filter(R=>!v.versions.has(R.version));for(const[R]of v.versions.entries()){const k=R.toString(),A=await this.storage.getFile(jt({...v.package,version:k},Mt));A&&O.push({version:k,meta:JSON.parse(A.toString())})}O.sort((R,k)=>cn.compare(k.version,R.version)),await this.storage.putFile(p,Buffer.from(JSON.stringify(O))),(u=this.logger)==null||u.info(`Done (${O.length} records)`),l=l.filter(R=>R.organization!==v.package.organization||R.package!==v.package.package),l.push({organization:v.package.organization,package:v.package.package,allVersions:O.map(R=>R.version).reverse(),latestVersion:O[0].version,latestMeta:O[0].meta})}await this.storage.putFile(oe,Buffer.from(JSON.stringify(l))),(f=this.logger)==null||f.info(`Global overview updated (${l.length} records)`),await this.storage.deleteFiles(...r.map(v=>`${Ct}${v}`)),(d=this.logger)==null||d.info("Version update requests cleared")}async updateIfNeeded(e=!1){var i,l;(i=this.logger)==null||i.info("Checking if registry requires refresh...");const r=await this.storage.getFile(yn),n=await this.storage.getFile(Gr);!e&&r===void 0&&n===void 0||!e&&r!==void 0&&n!==void 0&&r.equals(n)||(await this.updateRegistry(),r&&(await this.storage.putFile(Gr,r),(l=this.logger)==null||l.info("Refresh finished")))}async getPackageOverview(e){const r=await this.storage.getFile(Ot(e));if(r!==void 0)return JSON.parse(r.toString())}async getGlobalOverview(){const e=await this.storage.getFile(oe);if(e!==void 0)return JSON.parse(e.toString())}}class As{constructor(e,r){J(this,"metaAdded",!1);J(this,"seed",jr.randomUUID());this.storage=e,this.name=r}async addFile(e,r){await this.storage.putFile(jt(this.name,e),r)}async writeMeta(e){await this.addFile(Mt,Buffer.from(JSON.stringify(e))),this.metaAdded=!0}async finish(){if(!this.metaAdded)throw new Error("meta not added");await this.storage.putFile(Ns(this.name,this.seed),Buffer.of(0)),await this.storage.putFile(yn,Buffer.from(this.seed))}}function V(t,e){return e===void 0?t:{...t,...e,registries:{...t.registries,...e.registries},files:{...t.files,...e.files}}}async function Et(t){return Lt(t,e=>Re.parse(JSON.parse(e.toString())))}async function $t(t){return Lt(t,e=>Re.parse(An.parse(e.toString())))}async function Fs(){let t=Re.parse({});return t=V(t,await Et("./.pl.reg.json")),t=V(t,await $t("./.pl.reg.yaml")),t=V(t,await Et(`${Xt.homedir()}/.pl.reg.json`)),t=V(t,await $t(`${Xt.homedir()}/.pl.reg.yaml`)),t=V(t,await Et(Pn)),t=V(t,await $t(Sn)),t}class On{constructor(e){this.conf=e}createRegistry(e){let r=this.conf.registry;if(!r.startsWith("file:")&&!r.startsWith("s3:")){const n=this.conf.registries[r];if(!n)throw new Error(`Registry with alias "${r}" not found`);r=n}return new Ls(wn(r),e)}get fullPackageName(){return{organization:this.conf.organization,package:this.conf.package,version:this.conf.version}}}async function bs(t){const e=await Fs();return new On(_t.parse(V(e,t)))}exports.BlockComponentsAbsoluteUrl=Gn;exports.BlockComponentsConsolidate=Qr;exports.BlockComponentsDescription=Kr;exports.BlockDescriptionPackageJsonField=ue;exports.BlockDescriptionToExplicitBinaryBytes=Ps;exports.BlockPackDescriptionConsolidateToFolder=en;exports.BlockPackDescriptionManifestAddRelativePathPrefix=Rt;exports.BlockPackMetaConsolidate=Zr;exports.BlockPackMetaDescription=Yr;exports.BlockPackMetaEmbedAbsoluteBase64=qn;exports.BlockPackMetaEmbedAbsoluteBytes=zn;exports.BlockPackMetaEmbedBytes=xn;exports.BlockRegistryV2=Os;exports.ChannelNameRegexp=se;exports.ChannelsFolder=fe;exports.FSStorage=$n;exports.GlobalOverview=we;exports.GlobalOverviewEntry=Gt;exports.GlobalOverviewEntryReg=ks;exports.GlobalOverviewFileName=ln;exports.GlobalOverviewGzFileName=un;exports.GlobalOverviewGzPath=yt;exports.GlobalOverviewPath=oe;exports.GlobalOverviewPath$1=Q;exports.GlobalOverviewReg=ae;exports.GlobalOverviewToExplicitBinaryBase64=ys;exports.GlobalOverviewToExplicitBinaryBytes=Ss;exports.MainPrefix=X;exports.ManifestFileName=ee;exports.ManifestSuffix=hn;exports.MetaFile=Mt;exports.PackageManifestPattern=vn;exports.PackageOverview=ie;exports.PackageOverviewFileName=fn;exports.PackageOverviewVersionEntry=pn;exports.PlPackageConfigData=Rn;exports.PlPackageJsonConfigFile=Pn;exports.PlPackageYamlConfigFile=Sn;exports.PlRegCommonConfigData=kn;exports.PlRegFullPackageConfigData=_t;exports.PlRegPackageConfig=On;exports.PlRegPackageConfigDataShard=Re;exports.ResolvedBlockPackDescriptionFromPackageJson=Tt;exports.ResolvedModuleFile=Ur;exports.ResolvedModuleFolder=Vr;exports.S3Storage=En;exports.absoluteToBase64=Xr;exports.absoluteToBytes=Jr;exports.absoluteToString=Nt;exports.buildBlockPackDist=_n;exports.calculateSha256=le;exports.cpAbsoluteToRelative=ce;exports.getConfig=bs;exports.loadPackDescription=Un;exports.loadPackDescriptionRaw=tn;exports.mapLocalToAbsolute=wt;exports.packFolderToRelativeTgz=Wr;exports.packageChannelPrefix=mn;exports.packageChannelPrefixInsideV2=dn;exports.packageContentPrefix=Is;exports.packageContentPrefix$1=K;exports.packageContentPrefixInsideV2=xt;exports.packageOverviewPath=Ot;exports.packageOverviewPath$1=St;exports.packageOverviewPathInsideV2=gn;exports.parsePackageName=At;exports.payloadFilePath=jt;exports.relativeToContentString=Hr;exports.relativeToExplicitBinary64=Dn;exports.relativeToExplicitBytes=te;exports.relativeToExplicitString=ge;exports.semver=cn;exports.storageByUrl=wn;exports.tryLoadPackDescription=Mn;
|
|
3
|
+
//# sourceMappingURL=config-DjpRXRy9.js.map
|