@platforma-sdk/block-tools 2.5.3 → 2.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -1
- package/dist/cli.mjs +1 -1
- package/dist/{config-Dvh9BG_1.mjs → config-BhgCn4u4.mjs} +62 -59
- package/dist/config-BhgCn4u4.mjs.map +1 -0
- package/dist/config-CnMHgekz.js +3 -0
- package/dist/config-CnMHgekz.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +191 -178
- package/dist/index.mjs.map +1 -1
- package/dist/v2/model/block_components.d.ts +5 -5
- package/dist/v2/model/block_description.d.ts +48 -48
- package/dist/v2/registry/registry_reader.d.ts +4 -1
- package/dist/v2/registry/registry_reader.d.ts.map +1 -1
- package/dist/v2/registry/schema_public.d.ts +639 -639
- package/dist/v2/source_package.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/v2/registry/registry.test.ts +52 -1
- package/src/v2/registry/registry_reader.ts +50 -8
- package/src/v2/source_package.ts +2 -2
- package/dist/config-B2n8i1gx.js +0 -3
- package/dist/config-B2n8i1gx.js.map +0 -1
- package/dist/config-Dvh9BG_1.mjs.map +0 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/v2/registry/registry_reader.ts","../src/io/folder_reader.ts"],"sourcesContent":["import {\n BlockPackId,\n BlockPackIdNoVersion,\n blockPackIdNoVersionEquals,\n BlockPackManifest,\n BlockPackMetaEmbeddedBytes,\n BlockPackMetaManifest,\n BlockPackOverview,\n SingleBlockPackOverview\n} from '@milaboratories/pl-model-middle-layer';\nimport { FolderReader } from '../../io';\nimport canonicalize from 'canonicalize';\nimport {\n GlobalOverviewFileName,\n GlobalOverviewReg,\n MainPrefix,\n ManifestFileName,\n ManifestSuffix,\n packageContentPrefixInsideV2\n} from './schema_public';\nimport { BlockComponentsAbsoluteUrl, BlockPackMetaEmbedBytes } from '../model';\nimport { LRUCache } from 'lru-cache';\nimport { calculateSha256 } from '../../util';\nimport { retry, Retry2TimesWithDelay } from '@milaboratories/ts-helpers';\n\nexport type BlockPackOverviewNoRegLabel = Omit<BlockPackOverview, 'registryId'>;\n\nexport type RegistryV2ReaderOps = {\n /** Number of milliseconds to cache retrieved block list for */\n cacheBlockListFor: number;\n /** Number of milliseconds to keep cached retrieved block list for, if new requests returns error */\n keepStaleBlockListFor: number;\n};\n\nconst DefaultRegistryV2ReaderOps: RegistryV2ReaderOps = {\n cacheBlockListFor: 45e3, // 45 seconds\n keepStaleBlockListFor: 300e3 // 5 minutes\n};\n\nexport class RegistryV2Reader {\n private readonly v2RootFolderReader: FolderReader;\n private readonly ops: RegistryV2ReaderOps;\n\n constructor(\n private readonly registryReader: FolderReader,\n ops?: Partial<RegistryV2ReaderOps>\n ) {\n this.v2RootFolderReader = registryReader.relativeReader(MainPrefix);\n this.ops = { ...DefaultRegistryV2ReaderOps, ...(ops ?? {}) };\n }\n\n /**\n * Embeds meta infromation relative to registry root.\n * Meta information that looks like:\n *\n * */\n private readonly embeddedGlobalMetaCache = new LRUCache<\n string,\n BlockPackMetaEmbeddedBytes,\n { meta: BlockPackMetaManifest; relativeTo?: BlockPackId }\n >({\n max: 500,\n fetchMethod: async (_key, _staleValue, options) =>\n await retry(async () => {\n const contentReader =\n options.context.relativeTo !== undefined\n ? this.v2RootFolderReader\n .relativeReader(packageContentPrefixInsideV2(options.context.relativeTo))\n .getContentReader()\n : this.v2RootFolderReader.getContentReader();\n return await BlockPackMetaEmbedBytes(contentReader).parseAsync(options.context.meta);\n }, Retry2TimesWithDelay)\n });\n\n private async embedMetaContent(\n id: BlockPackId,\n sha256: string,\n absolutePath: boolean,\n meta: BlockPackMetaManifest\n ): Promise<BlockPackMetaEmbeddedBytes> {\n return await this.embeddedGlobalMetaCache.forceFetch(\n canonicalize({ id, sha256, absolutePath })!,\n { context: { meta, relativeTo: absolutePath ? undefined : id } }\n );\n }\n\n private listCacheTimestamp: number = 0;\n private listCache: BlockPackOverviewNoRegLabel[] | undefined = undefined;\n\n public async listBlockPacks(): Promise<BlockPackOverviewNoRegLabel[]> {\n if (\n this.listCache !== undefined &&\n Date.now() - this.listCacheTimestamp <= this.ops.cacheBlockListFor\n )\n return this.listCache;\n try {\n return await retry(async () => {\n // const rootContentReader = this.v2RootFolderReader.getContentReader();\n const globalOverview = GlobalOverviewReg.parse(\n JSON.parse(\n Buffer.from(await this.v2RootFolderReader.readFile(GlobalOverviewFileName)).toString()\n )\n );\n\n const result = await Promise.all(\n globalOverview.packages.map(async (p) => {\n const byChannelEntries = await Promise.all(\n Object.entries(p.latestByChannel).map(async ([channel, data]) => [\n channel,\n {\n id: data.description.id,\n meta: await this.embedMetaContent(\n data.description.id,\n data.manifestSha256,\n true,\n data.description.meta\n ),\n spec: {\n type: 'from-registry-v2',\n id: data.description.id,\n registryUrl: this.registryReader.rootUrl.toString(),\n channel\n }\n }\n ])\n );\n return {\n id: p.id,\n latestByChannel: Object.fromEntries(byChannelEntries),\n allVersions: p.allVersionsWithChannels\n } satisfies BlockPackOverviewNoRegLabel;\n })\n );\n\n this.listCache = result;\n this.listCacheTimestamp = Date.now();\n\n return result;\n }, Retry2TimesWithDelay);\n } catch (e: unknown) {\n if (\n this.listCache !== undefined &&\n Date.now() - this.listCacheTimestamp <= this.ops.keepStaleBlockListFor\n )\n return this.listCache;\n throw e;\n }\n }\n\n public async getLatestOverview(\n id: BlockPackIdNoVersion,\n channel: string\n ): Promise<SingleBlockPackOverview | undefined> {\n return await retry(async () => {\n const overview = (await this.listBlockPacks()).find((e) =>\n blockPackIdNoVersionEquals(id, e.id)\n );\n if (overview === undefined) return undefined;\n return overview.latestByChannel[channel];\n }, Retry2TimesWithDelay);\n }\n\n public async getSpecificOverview(\n id: BlockPackId,\n channel: string\n ): Promise<SingleBlockPackOverview> {\n return await retry(async () => {\n const manifestContent = await this.v2RootFolderReader.readFile(\n packageContentPrefixInsideV2(id) + ManifestSuffix\n );\n const overview = BlockPackManifest.parse(JSON.parse(Buffer.from(manifestContent).toString()));\n return {\n id: id,\n meta: await this.embedMetaContent(\n id,\n await calculateSha256(manifestContent),\n false,\n overview.description.meta\n ),\n spec: {\n type: 'from-registry-v2',\n id,\n registryUrl: this.registryReader.rootUrl.toString(),\n channel\n }\n };\n }, Retry2TimesWithDelay);\n }\n\n private readonly componentsCache = new LRUCache<string, BlockComponentsAbsoluteUrl, BlockPackId>({\n max: 500,\n fetchMethod: async (key, staleValue, { context: id }) =>\n await retry(async () => {\n const packageFolderReader = this.v2RootFolderReader.relativeReader(\n packageContentPrefixInsideV2(id)\n );\n const manifest = BlockPackManifest.parse(\n JSON.parse(Buffer.from(await packageFolderReader.readFile(ManifestFileName)).toString())\n );\n return BlockComponentsAbsoluteUrl(packageFolderReader.rootUrl.toString()).parse(\n manifest.description.components\n );\n }, Retry2TimesWithDelay)\n });\n\n public async getComponents(id: BlockPackId): Promise<BlockComponentsAbsoluteUrl> {\n return await this.componentsCache.forceFetch(canonicalize(id)!, { context: id });\n }\n}\n","import { Dispatcher, request } from 'undici';\nimport { RelativeContentReader } from '../v2';\nimport path from 'node:path';\nimport pathPosix from 'node:path/posix';\nimport fsp from 'node:fs/promises';\nimport { defaultHttpDispatcher } from '@milaboratories/pl-http';\n\nexport interface FolderReader {\n readonly rootUrl: URL;\n relativeReader(relativePath: string): FolderReader;\n readFile(file: string): Promise<Buffer>;\n getContentReader(relativePath?: string): RelativeContentReader;\n}\n\nclass HttpFolderReader implements FolderReader {\n constructor(\n public readonly rootUrl: URL,\n private readonly httpDispatcher: Dispatcher\n ) {}\n\n public async readFile(file: string): Promise<Buffer> {\n const targetUrl = new URL(file, this.rootUrl);\n const response = await request(targetUrl, {\n dispatcher: this.httpDispatcher\n });\n return Buffer.from(await response.body.arrayBuffer());\n }\n\n public relativeReader(relativePath: string): HttpFolderReader {\n if (!relativePath.endsWith('/')) relativePath = relativePath + '/';\n return new HttpFolderReader(new URL(relativePath, this.rootUrl), this.httpDispatcher);\n }\n\n public getContentReader(relativePath?: string): RelativeContentReader {\n let reader: HttpFolderReader = this;\n if (relativePath !== undefined) reader = reader.relativeReader(relativePath);\n return (path) => reader.readFile(path);\n }\n}\n\nclass FSFolderReader implements FolderReader {\n constructor(\n public readonly rootUrl: URL,\n private readonly root: string\n ) {}\n\n public async readFile(file: string): Promise<Buffer> {\n const targetPath = path.join(this.root, ...file.split(pathPosix.sep));\n return await fsp.readFile(targetPath);\n }\n\n public relativeReader(relativePath: string): FSFolderReader {\n if (!relativePath.endsWith('/')) relativePath = relativePath + '/';\n return new FSFolderReader(\n new URL(relativePath, this.rootUrl),\n path.join(this.root, ...relativePath.split(pathPosix.sep))\n );\n }\n\n public getContentReader(relativePath?: string): RelativeContentReader {\n let reader: FSFolderReader = this;\n if (relativePath !== undefined) reader = reader.relativeReader(relativePath);\n return (path) => reader.readFile(path);\n }\n}\n\nfunction posixToLocalPath(p: string): string {\n return p.split(pathPosix.sep).join(path.sep);\n}\n\nfunction localToPosix(p: string): string {\n return p.split(path.sep).join(pathPosix.sep);\n}\n\nexport function folderReaderByUrl(address: string, httpDispatcher?: Dispatcher): FolderReader {\n if (!address.endsWith('/')) address = address + '/';\n const url = new URL(address, `file:${localToPosix(path.resolve('.'))}/`);\n switch (url.protocol) {\n case 'file:':\n const rootPath = posixToLocalPath(url.pathname);\n return new FSFolderReader(url, rootPath);\n case 'https:':\n case 'http:':\n return new HttpFolderReader(url, httpDispatcher ?? defaultHttpDispatcher());\n default:\n throw new Error(`Unknown protocol: ${url.protocol}`);\n }\n}\n"],"names":["DefaultRegistryV2ReaderOps","RegistryV2Reader","registryReader","ops","__publicField","LRUCache","_key","_staleValue","options","retry","contentReader","packageContentPrefixInsideV2","BlockPackMetaEmbedBytes","Retry2TimesWithDelay","key","staleValue","id","packageFolderReader","manifest","BlockPackManifest","ManifestFileName","BlockComponentsAbsoluteUrl","MainPrefix","sha256","absolutePath","meta","canonicalize","globalOverview","GlobalOverviewReg","GlobalOverviewFileName","result","p","byChannelEntries","channel","data","overview","e","blockPackIdNoVersionEquals","manifestContent","ManifestSuffix","calculateSha256","HttpFolderReader","rootUrl","httpDispatcher","file","targetUrl","response","request","relativePath","reader","path","FSFolderReader","root","targetPath","pathPosix","fsp","posixToLocalPath","localToPosix","folderReaderByUrl","address","url","rootPath","defaultHttpDispatcher"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/v2/registry/registry_reader.ts","../src/io/folder_reader.ts"],"sourcesContent":["import {\n BlockPackId,\n BlockPackIdNoVersion,\n blockPackIdNoVersionEquals,\n BlockPackManifest,\n BlockPackMetaEmbeddedBytes,\n BlockPackMetaManifest,\n BlockPackOverview,\n UpdateSuggestions,\n SingleBlockPackOverview,\n AnyChannel\n} from '@milaboratories/pl-model-middle-layer';\nimport { FolderReader } from '../../io';\nimport canonicalize from 'canonicalize';\nimport {\n GlobalOverviewFileName,\n GlobalOverviewReg,\n MainPrefix,\n ManifestFileName,\n ManifestSuffix,\n packageContentPrefixInsideV2\n} from './schema_public';\nimport { BlockComponentsAbsoluteUrl, BlockPackMetaEmbedBytes } from '../model';\nimport { LRUCache } from 'lru-cache';\nimport semver from 'semver';\nimport { calculateSha256 } from '../../util';\nimport { retry, Retry2TimesWithDelay } from '@milaboratories/ts-helpers';\n\nexport type BlockPackOverviewNoRegLabel = Omit<BlockPackOverview, 'registryId'>;\n\nexport type RegistryV2ReaderOps = {\n /** Number of milliseconds to cache retrieved block list for */\n cacheBlockListFor: number;\n /** Number of milliseconds to keep cached retrieved block list for, if new requests returns error */\n keepStaleBlockListFor: number;\n};\n\nconst DefaultRegistryV2ReaderOps: RegistryV2ReaderOps = {\n cacheBlockListFor: 45e3, // 45 seconds\n keepStaleBlockListFor: 300e3 // 5 minutes\n};\n\n/** @param availableVersions must be reverse sorted (from highest version to lowest) */\nexport function inferUpdateSuggestions(currentVersion: string, availableVersions: string[]) {\n const nextMinor = semver.inc(currentVersion, 'minor')!;\n const nextMajor = semver.inc(currentVersion, 'major')!;\n\n // first found = the highest (given the search criteria)\n\n const suggestions: UpdateSuggestions<string> = [];\n\n const patch = availableVersions.find(\n (v) => semver.gt(v, currentVersion) && semver.lt(v, nextMinor)\n );\n const minor = availableVersions.find((v) => semver.gte(v, nextMinor) && semver.lt(v, nextMajor));\n const major = availableVersions.find((v) => semver.gte(v, nextMajor));\n\n if (patch) suggestions.push({ type: 'patch', update: patch });\n if (minor) suggestions.push({ type: 'minor', update: minor });\n if (major) suggestions.push({ type: 'major', update: major });\n\n return suggestions;\n}\n\nexport class RegistryV2Reader {\n private readonly v2RootFolderReader: FolderReader;\n private readonly ops: RegistryV2ReaderOps;\n\n constructor(\n private readonly registryReader: FolderReader,\n ops?: Partial<RegistryV2ReaderOps>\n ) {\n this.v2RootFolderReader = registryReader.relativeReader(MainPrefix);\n this.ops = { ...DefaultRegistryV2ReaderOps, ...(ops ?? {}) };\n }\n\n /**\n * Embeds meta infromation relative to registry root.\n * Meta information that looks like:\n *\n * */\n private readonly embeddedGlobalMetaCache = new LRUCache<\n string,\n BlockPackMetaEmbeddedBytes,\n { meta: BlockPackMetaManifest; relativeTo?: BlockPackId }\n >({\n max: 500,\n fetchMethod: async (_key, _staleValue, options) =>\n await retry(async () => {\n const contentReader =\n options.context.relativeTo !== undefined\n ? this.v2RootFolderReader\n .relativeReader(packageContentPrefixInsideV2(options.context.relativeTo))\n .getContentReader()\n : this.v2RootFolderReader.getContentReader();\n return await BlockPackMetaEmbedBytes(contentReader).parseAsync(options.context.meta);\n }, Retry2TimesWithDelay)\n });\n\n private async embedMetaContent(\n id: BlockPackId,\n sha256: string,\n absolutePath: boolean,\n meta: BlockPackMetaManifest\n ): Promise<BlockPackMetaEmbeddedBytes> {\n return await this.embeddedGlobalMetaCache.forceFetch(\n canonicalize({ id, sha256, absolutePath })!,\n { context: { meta, relativeTo: absolutePath ? undefined : id } }\n );\n }\n\n private listCacheTimestamp: number = 0;\n private listCache: BlockPackOverviewNoRegLabel[] | undefined = undefined;\n\n public async listBlockPacks(): Promise<BlockPackOverviewNoRegLabel[]> {\n if (\n this.listCache !== undefined &&\n Date.now() - this.listCacheTimestamp <= this.ops.cacheBlockListFor\n )\n return this.listCache;\n try {\n return await retry(async () => {\n // const rootContentReader = this.v2RootFolderReader.getContentReader();\n const globalOverview = GlobalOverviewReg.parse(\n JSON.parse(\n Buffer.from(await this.v2RootFolderReader.readFile(GlobalOverviewFileName)).toString()\n )\n );\n\n const result = await Promise.all(\n globalOverview.packages.map(async (p) => {\n const byChannelEntries = await Promise.all(\n Object.entries(p.latestByChannel).map(async ([channel, data]) => [\n channel,\n {\n id: data.description.id,\n meta: await this.embedMetaContent(\n data.description.id,\n data.manifestSha256,\n true,\n data.description.meta\n ),\n spec: {\n type: 'from-registry-v2',\n id: data.description.id,\n registryUrl: this.registryReader.rootUrl.toString(),\n channel\n }\n }\n ])\n );\n return {\n id: p.id,\n latestByChannel: Object.fromEntries(byChannelEntries),\n allVersions: p.allVersionsWithChannels\n } satisfies BlockPackOverviewNoRegLabel;\n })\n );\n\n this.listCache = result;\n this.listCacheTimestamp = Date.now();\n\n return result;\n }, Retry2TimesWithDelay);\n } catch (e: unknown) {\n if (\n this.listCache !== undefined &&\n Date.now() - this.listCacheTimestamp <= this.ops.keepStaleBlockListFor\n )\n return this.listCache;\n throw e;\n }\n }\n\n public async getLatestOverview(\n id: BlockPackIdNoVersion,\n channel: string\n ): Promise<SingleBlockPackOverview | undefined> {\n const overview = (await this.listBlockPacks()).find((e) =>\n blockPackIdNoVersionEquals(id, e.id)\n );\n if (overview === undefined) return undefined;\n return overview.latestByChannel[channel];\n }\n\n public async getUpdateSuggestions(\n id: BlockPackId,\n channel: string\n ): Promise<UpdateSuggestions<string> | undefined> {\n const overview = (await this.listBlockPacks()).find((e) =>\n blockPackIdNoVersionEquals(id, e.id)\n );\n if (overview === undefined) return undefined;\n\n const versionCandidates = overview.allVersions\n .filter((v) => channel === AnyChannel || v.channels.indexOf(channel) >= 0)\n .map((v) => v.version);\n\n // versions are sorted\n versionCandidates.reverse(); // changing sorting order to opposite\n\n return inferUpdateSuggestions(id.version, versionCandidates);\n }\n\n public async getSpecificOverview(\n id: BlockPackId,\n channel: string\n ): Promise<SingleBlockPackOverview> {\n return await retry(async () => {\n const manifestContent = await this.v2RootFolderReader.readFile(\n packageContentPrefixInsideV2(id) + ManifestSuffix\n );\n const overview = BlockPackManifest.parse(JSON.parse(Buffer.from(manifestContent).toString()));\n return {\n id: id,\n meta: await this.embedMetaContent(\n id,\n await calculateSha256(manifestContent),\n false,\n overview.description.meta\n ),\n spec: {\n type: 'from-registry-v2',\n id,\n registryUrl: this.registryReader.rootUrl.toString(),\n channel\n }\n };\n }, Retry2TimesWithDelay);\n }\n\n private readonly componentsCache = new LRUCache<string, BlockComponentsAbsoluteUrl, BlockPackId>({\n max: 500,\n fetchMethod: async (key, staleValue, { context: id }) =>\n await retry(async () => {\n const packageFolderReader = this.v2RootFolderReader.relativeReader(\n packageContentPrefixInsideV2(id)\n );\n const manifest = BlockPackManifest.parse(\n JSON.parse(Buffer.from(await packageFolderReader.readFile(ManifestFileName)).toString())\n );\n return BlockComponentsAbsoluteUrl(packageFolderReader.rootUrl.toString()).parse(\n manifest.description.components\n );\n }, Retry2TimesWithDelay)\n });\n\n public async getComponents(id: BlockPackId): Promise<BlockComponentsAbsoluteUrl> {\n return await this.componentsCache.forceFetch(canonicalize(id)!, { context: id });\n }\n}\n","import { Dispatcher, request } from 'undici';\nimport { RelativeContentReader } from '../v2';\nimport path from 'node:path';\nimport pathPosix from 'node:path/posix';\nimport fsp from 'node:fs/promises';\nimport { defaultHttpDispatcher } from '@milaboratories/pl-http';\n\nexport interface FolderReader {\n readonly rootUrl: URL;\n relativeReader(relativePath: string): FolderReader;\n readFile(file: string): Promise<Buffer>;\n getContentReader(relativePath?: string): RelativeContentReader;\n}\n\nclass HttpFolderReader implements FolderReader {\n constructor(\n public readonly rootUrl: URL,\n private readonly httpDispatcher: Dispatcher\n ) {}\n\n public async readFile(file: string): Promise<Buffer> {\n const targetUrl = new URL(file, this.rootUrl);\n const response = await request(targetUrl, {\n dispatcher: this.httpDispatcher\n });\n return Buffer.from(await response.body.arrayBuffer());\n }\n\n public relativeReader(relativePath: string): HttpFolderReader {\n if (!relativePath.endsWith('/')) relativePath = relativePath + '/';\n return new HttpFolderReader(new URL(relativePath, this.rootUrl), this.httpDispatcher);\n }\n\n public getContentReader(relativePath?: string): RelativeContentReader {\n let reader: HttpFolderReader = this;\n if (relativePath !== undefined) reader = reader.relativeReader(relativePath);\n return (path) => reader.readFile(path);\n }\n}\n\nclass FSFolderReader implements FolderReader {\n constructor(\n public readonly rootUrl: URL,\n private readonly root: string\n ) {}\n\n public async readFile(file: string): Promise<Buffer> {\n const targetPath = path.join(this.root, ...file.split(pathPosix.sep));\n return await fsp.readFile(targetPath);\n }\n\n public relativeReader(relativePath: string): FSFolderReader {\n if (!relativePath.endsWith('/')) relativePath = relativePath + '/';\n return new FSFolderReader(\n new URL(relativePath, this.rootUrl),\n path.join(this.root, ...relativePath.split(pathPosix.sep))\n );\n }\n\n public getContentReader(relativePath?: string): RelativeContentReader {\n let reader: FSFolderReader = this;\n if (relativePath !== undefined) reader = reader.relativeReader(relativePath);\n return (path) => reader.readFile(path);\n }\n}\n\nfunction posixToLocalPath(p: string): string {\n return p.split(pathPosix.sep).join(path.sep);\n}\n\nfunction localToPosix(p: string): string {\n return p.split(path.sep).join(pathPosix.sep);\n}\n\nexport function folderReaderByUrl(address: string, httpDispatcher?: Dispatcher): FolderReader {\n if (!address.endsWith('/')) address = address + '/';\n const url = new URL(address, `file:${localToPosix(path.resolve('.'))}/`);\n switch (url.protocol) {\n case 'file:':\n const rootPath = posixToLocalPath(url.pathname);\n return new FSFolderReader(url, rootPath);\n case 'https:':\n case 'http:':\n return new HttpFolderReader(url, httpDispatcher ?? defaultHttpDispatcher());\n default:\n throw new Error(`Unknown protocol: ${url.protocol}`);\n }\n}\n"],"names":["DefaultRegistryV2ReaderOps","inferUpdateSuggestions","currentVersion","availableVersions","nextMinor","semver","nextMajor","suggestions","patch","v","minor","major","RegistryV2Reader","registryReader","ops","__publicField","LRUCache","_key","_staleValue","options","retry","contentReader","packageContentPrefixInsideV2","BlockPackMetaEmbedBytes","Retry2TimesWithDelay","key","staleValue","id","packageFolderReader","manifest","BlockPackManifest","ManifestFileName","BlockComponentsAbsoluteUrl","MainPrefix","sha256","absolutePath","meta","canonicalize","globalOverview","GlobalOverviewReg","GlobalOverviewFileName","result","p","byChannelEntries","channel","data","overview","e","blockPackIdNoVersionEquals","versionCandidates","AnyChannel","manifestContent","ManifestSuffix","calculateSha256","HttpFolderReader","rootUrl","httpDispatcher","file","targetUrl","response","request","relativePath","reader","path","FSFolderReader","root","targetPath","pathPosix","fsp","posixToLocalPath","localToPosix","folderReaderByUrl","address","url","rootPath","defaultHttpDispatcher"],"mappings":"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"}
|
|
@@ -455,6 +455,10 @@ export declare function BlockComponentsConsolidate(dstFolder: string, fileAccumu
|
|
|
455
455
|
path: string;
|
|
456
456
|
}>;
|
|
457
457
|
}, "strip", z.ZodTypeAny, {
|
|
458
|
+
ui: {
|
|
459
|
+
type: "relative";
|
|
460
|
+
path: string;
|
|
461
|
+
};
|
|
458
462
|
workflow: {
|
|
459
463
|
type: "workflow-v1";
|
|
460
464
|
main: {
|
|
@@ -466,11 +470,11 @@ export declare function BlockComponentsConsolidate(dstFolder: string, fileAccumu
|
|
|
466
470
|
type: "relative";
|
|
467
471
|
path: string;
|
|
468
472
|
};
|
|
473
|
+
}, {
|
|
469
474
|
ui: {
|
|
470
475
|
type: "relative";
|
|
471
476
|
path: string;
|
|
472
477
|
};
|
|
473
|
-
}, {
|
|
474
478
|
workflow: {
|
|
475
479
|
type: "relative";
|
|
476
480
|
path: string;
|
|
@@ -485,10 +489,6 @@ export declare function BlockComponentsConsolidate(dstFolder: string, fileAccumu
|
|
|
485
489
|
type: "relative";
|
|
486
490
|
path: string;
|
|
487
491
|
};
|
|
488
|
-
ui: {
|
|
489
|
-
type: "relative";
|
|
490
|
-
path: string;
|
|
491
|
-
};
|
|
492
492
|
}>>;
|
|
493
493
|
export declare function BlockComponentsAbsoluteUrl(prefix: string): z.ZodObject<{
|
|
494
494
|
workflow: z.ZodUnion<[z.ZodPipeline<z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
@@ -1052,6 +1052,10 @@ export declare function BlockPackDescriptionConsolidateToFolder(dstFolder: strin
|
|
|
1052
1052
|
path: string;
|
|
1053
1053
|
}>;
|
|
1054
1054
|
}, "strip", z.ZodTypeAny, {
|
|
1055
|
+
ui: {
|
|
1056
|
+
type: "relative";
|
|
1057
|
+
path: string;
|
|
1058
|
+
};
|
|
1055
1059
|
workflow: {
|
|
1056
1060
|
type: "workflow-v1";
|
|
1057
1061
|
main: {
|
|
@@ -1063,11 +1067,11 @@ export declare function BlockPackDescriptionConsolidateToFolder(dstFolder: strin
|
|
|
1063
1067
|
type: "relative";
|
|
1064
1068
|
path: string;
|
|
1065
1069
|
};
|
|
1070
|
+
}, {
|
|
1066
1071
|
ui: {
|
|
1067
1072
|
type: "relative";
|
|
1068
1073
|
path: string;
|
|
1069
1074
|
};
|
|
1070
|
-
}, {
|
|
1071
1075
|
workflow: {
|
|
1072
1076
|
type: "relative";
|
|
1073
1077
|
path: string;
|
|
@@ -1082,10 +1086,6 @@ export declare function BlockPackDescriptionConsolidateToFolder(dstFolder: strin
|
|
|
1082
1086
|
type: "relative";
|
|
1083
1087
|
path: string;
|
|
1084
1088
|
};
|
|
1085
|
-
ui: {
|
|
1086
|
-
type: "relative";
|
|
1087
|
-
path: string;
|
|
1088
|
-
};
|
|
1089
1089
|
}>>;
|
|
1090
1090
|
meta: z.ZodObject<{
|
|
1091
1091
|
title: z.ZodString;
|
|
@@ -1347,6 +1347,10 @@ export declare function BlockPackDescriptionConsolidateToFolder(dstFolder: strin
|
|
|
1347
1347
|
version: string;
|
|
1348
1348
|
};
|
|
1349
1349
|
components: {
|
|
1350
|
+
ui: {
|
|
1351
|
+
type: "relative";
|
|
1352
|
+
path: string;
|
|
1353
|
+
};
|
|
1350
1354
|
workflow: {
|
|
1351
1355
|
type: "workflow-v1";
|
|
1352
1356
|
main: {
|
|
@@ -1358,10 +1362,6 @@ export declare function BlockPackDescriptionConsolidateToFolder(dstFolder: strin
|
|
|
1358
1362
|
type: "relative";
|
|
1359
1363
|
path: string;
|
|
1360
1364
|
};
|
|
1361
|
-
ui: {
|
|
1362
|
-
type: "relative";
|
|
1363
|
-
path: string;
|
|
1364
|
-
};
|
|
1365
1365
|
};
|
|
1366
1366
|
meta: {
|
|
1367
1367
|
title: string;
|
|
@@ -1590,6 +1590,10 @@ export declare function BlockPackDescriptionConsolidateToFolder(dstFolder: strin
|
|
|
1590
1590
|
path: string;
|
|
1591
1591
|
}>;
|
|
1592
1592
|
}, "strip", z.ZodTypeAny, {
|
|
1593
|
+
ui: {
|
|
1594
|
+
type: "relative";
|
|
1595
|
+
path: string;
|
|
1596
|
+
};
|
|
1593
1597
|
workflow: {
|
|
1594
1598
|
type: "workflow-v1";
|
|
1595
1599
|
main: {
|
|
@@ -1601,11 +1605,11 @@ export declare function BlockPackDescriptionConsolidateToFolder(dstFolder: strin
|
|
|
1601
1605
|
type: "relative";
|
|
1602
1606
|
path: string;
|
|
1603
1607
|
};
|
|
1608
|
+
}, {
|
|
1604
1609
|
ui: {
|
|
1605
1610
|
type: "relative";
|
|
1606
1611
|
path: string;
|
|
1607
1612
|
};
|
|
1608
|
-
}, {
|
|
1609
1613
|
workflow: {
|
|
1610
1614
|
type: "relative";
|
|
1611
1615
|
path: string;
|
|
@@ -1620,10 +1624,6 @@ export declare function BlockPackDescriptionConsolidateToFolder(dstFolder: strin
|
|
|
1620
1624
|
type: "relative";
|
|
1621
1625
|
path: string;
|
|
1622
1626
|
};
|
|
1623
|
-
ui: {
|
|
1624
|
-
type: "relative";
|
|
1625
|
-
path: string;
|
|
1626
|
-
};
|
|
1627
1627
|
}>;
|
|
1628
1628
|
meta: z.ZodObject<{
|
|
1629
1629
|
title: z.ZodString;
|
|
@@ -1828,6 +1828,10 @@ export declare function BlockPackDescriptionConsolidateToFolder(dstFolder: strin
|
|
|
1828
1828
|
}>;
|
|
1829
1829
|
}, "strip", z.ZodTypeAny, {
|
|
1830
1830
|
components: {
|
|
1831
|
+
ui: {
|
|
1832
|
+
type: "relative";
|
|
1833
|
+
path: string;
|
|
1834
|
+
};
|
|
1831
1835
|
workflow: {
|
|
1832
1836
|
type: "workflow-v1";
|
|
1833
1837
|
main: {
|
|
@@ -1839,10 +1843,6 @@ export declare function BlockPackDescriptionConsolidateToFolder(dstFolder: strin
|
|
|
1839
1843
|
type: "relative";
|
|
1840
1844
|
path: string;
|
|
1841
1845
|
};
|
|
1842
|
-
ui: {
|
|
1843
|
-
type: "relative";
|
|
1844
|
-
path: string;
|
|
1845
|
-
};
|
|
1846
1846
|
};
|
|
1847
1847
|
meta: {
|
|
1848
1848
|
organization: {
|
|
@@ -1894,6 +1894,10 @@ export declare function BlockPackDescriptionConsolidateToFolder(dstFolder: strin
|
|
|
1894
1894
|
};
|
|
1895
1895
|
}, {
|
|
1896
1896
|
components: {
|
|
1897
|
+
ui: {
|
|
1898
|
+
type: "relative";
|
|
1899
|
+
path: string;
|
|
1900
|
+
};
|
|
1897
1901
|
workflow: {
|
|
1898
1902
|
type: "relative";
|
|
1899
1903
|
path: string;
|
|
@@ -1908,10 +1912,6 @@ export declare function BlockPackDescriptionConsolidateToFolder(dstFolder: strin
|
|
|
1908
1912
|
type: "relative";
|
|
1909
1913
|
path: string;
|
|
1910
1914
|
};
|
|
1911
|
-
ui: {
|
|
1912
|
-
type: "relative";
|
|
1913
|
-
path: string;
|
|
1914
|
-
};
|
|
1915
1915
|
};
|
|
1916
1916
|
meta: {
|
|
1917
1917
|
organization: {
|
|
@@ -2065,6 +2065,10 @@ export declare function BlockPackDescriptionManifestAddRelativePathPrefix(prefix
|
|
|
2065
2065
|
path: string;
|
|
2066
2066
|
}>;
|
|
2067
2067
|
}, "strip", z.ZodTypeAny, {
|
|
2068
|
+
ui: {
|
|
2069
|
+
type: "relative";
|
|
2070
|
+
path: string;
|
|
2071
|
+
};
|
|
2068
2072
|
workflow: {
|
|
2069
2073
|
type: "workflow-v1";
|
|
2070
2074
|
main: {
|
|
@@ -2076,11 +2080,11 @@ export declare function BlockPackDescriptionManifestAddRelativePathPrefix(prefix
|
|
|
2076
2080
|
type: "relative";
|
|
2077
2081
|
path: string;
|
|
2078
2082
|
};
|
|
2083
|
+
}, {
|
|
2079
2084
|
ui: {
|
|
2080
2085
|
type: "relative";
|
|
2081
2086
|
path: string;
|
|
2082
2087
|
};
|
|
2083
|
-
}, {
|
|
2084
2088
|
workflow: {
|
|
2085
2089
|
type: "relative";
|
|
2086
2090
|
path: string;
|
|
@@ -2095,10 +2099,6 @@ export declare function BlockPackDescriptionManifestAddRelativePathPrefix(prefix
|
|
|
2095
2099
|
type: "relative";
|
|
2096
2100
|
path: string;
|
|
2097
2101
|
};
|
|
2098
|
-
ui: {
|
|
2099
|
-
type: "relative";
|
|
2100
|
-
path: string;
|
|
2101
|
-
};
|
|
2102
2102
|
}>;
|
|
2103
2103
|
meta: z.ZodObject<{
|
|
2104
2104
|
title: z.ZodString;
|
|
@@ -2303,6 +2303,10 @@ export declare function BlockPackDescriptionManifestAddRelativePathPrefix(prefix
|
|
|
2303
2303
|
}>;
|
|
2304
2304
|
}, "strip", z.ZodTypeAny, {
|
|
2305
2305
|
components: {
|
|
2306
|
+
ui: {
|
|
2307
|
+
type: "relative";
|
|
2308
|
+
path: string;
|
|
2309
|
+
};
|
|
2306
2310
|
workflow: {
|
|
2307
2311
|
type: "workflow-v1";
|
|
2308
2312
|
main: {
|
|
@@ -2314,10 +2318,6 @@ export declare function BlockPackDescriptionManifestAddRelativePathPrefix(prefix
|
|
|
2314
2318
|
type: "relative";
|
|
2315
2319
|
path: string;
|
|
2316
2320
|
};
|
|
2317
|
-
ui: {
|
|
2318
|
-
type: "relative";
|
|
2319
|
-
path: string;
|
|
2320
|
-
};
|
|
2321
2321
|
};
|
|
2322
2322
|
meta: {
|
|
2323
2323
|
organization: {
|
|
@@ -2369,6 +2369,10 @@ export declare function BlockPackDescriptionManifestAddRelativePathPrefix(prefix
|
|
|
2369
2369
|
};
|
|
2370
2370
|
}, {
|
|
2371
2371
|
components: {
|
|
2372
|
+
ui: {
|
|
2373
|
+
type: "relative";
|
|
2374
|
+
path: string;
|
|
2375
|
+
};
|
|
2372
2376
|
workflow: {
|
|
2373
2377
|
type: "relative";
|
|
2374
2378
|
path: string;
|
|
@@ -2383,10 +2387,6 @@ export declare function BlockPackDescriptionManifestAddRelativePathPrefix(prefix
|
|
|
2383
2387
|
type: "relative";
|
|
2384
2388
|
path: string;
|
|
2385
2389
|
};
|
|
2386
|
-
ui: {
|
|
2387
|
-
type: "relative";
|
|
2388
|
-
path: string;
|
|
2389
|
-
};
|
|
2390
2390
|
};
|
|
2391
2391
|
meta: {
|
|
2392
2392
|
organization: {
|
|
@@ -3107,6 +3107,10 @@ export declare function BlockPackDescriptionManifestAddRelativePathPrefix(prefix
|
|
|
3107
3107
|
path: string;
|
|
3108
3108
|
}>;
|
|
3109
3109
|
}, "strip", z.ZodTypeAny, {
|
|
3110
|
+
ui: {
|
|
3111
|
+
type: "relative";
|
|
3112
|
+
path: string;
|
|
3113
|
+
};
|
|
3110
3114
|
workflow: {
|
|
3111
3115
|
type: "workflow-v1";
|
|
3112
3116
|
main: {
|
|
@@ -3118,11 +3122,11 @@ export declare function BlockPackDescriptionManifestAddRelativePathPrefix(prefix
|
|
|
3118
3122
|
type: "relative";
|
|
3119
3123
|
path: string;
|
|
3120
3124
|
};
|
|
3125
|
+
}, {
|
|
3121
3126
|
ui: {
|
|
3122
3127
|
type: "relative";
|
|
3123
3128
|
path: string;
|
|
3124
3129
|
};
|
|
3125
|
-
}, {
|
|
3126
3130
|
workflow: {
|
|
3127
3131
|
type: "relative";
|
|
3128
3132
|
path: string;
|
|
@@ -3137,10 +3141,6 @@ export declare function BlockPackDescriptionManifestAddRelativePathPrefix(prefix
|
|
|
3137
3141
|
type: "relative";
|
|
3138
3142
|
path: string;
|
|
3139
3143
|
};
|
|
3140
|
-
ui: {
|
|
3141
|
-
type: "relative";
|
|
3142
|
-
path: string;
|
|
3143
|
-
};
|
|
3144
3144
|
}>;
|
|
3145
3145
|
meta: z.ZodObject<{
|
|
3146
3146
|
title: z.ZodString;
|
|
@@ -3345,6 +3345,10 @@ export declare function BlockPackDescriptionManifestAddRelativePathPrefix(prefix
|
|
|
3345
3345
|
}>;
|
|
3346
3346
|
}, "strip", z.ZodTypeAny, {
|
|
3347
3347
|
components: {
|
|
3348
|
+
ui: {
|
|
3349
|
+
type: "relative";
|
|
3350
|
+
path: string;
|
|
3351
|
+
};
|
|
3348
3352
|
workflow: {
|
|
3349
3353
|
type: "workflow-v1";
|
|
3350
3354
|
main: {
|
|
@@ -3356,10 +3360,6 @@ export declare function BlockPackDescriptionManifestAddRelativePathPrefix(prefix
|
|
|
3356
3360
|
type: "relative";
|
|
3357
3361
|
path: string;
|
|
3358
3362
|
};
|
|
3359
|
-
ui: {
|
|
3360
|
-
type: "relative";
|
|
3361
|
-
path: string;
|
|
3362
|
-
};
|
|
3363
3363
|
};
|
|
3364
3364
|
meta: {
|
|
3365
3365
|
organization: {
|
|
@@ -3411,6 +3411,10 @@ export declare function BlockPackDescriptionManifestAddRelativePathPrefix(prefix
|
|
|
3411
3411
|
};
|
|
3412
3412
|
}, {
|
|
3413
3413
|
components: {
|
|
3414
|
+
ui: {
|
|
3415
|
+
type: "relative";
|
|
3416
|
+
path: string;
|
|
3417
|
+
};
|
|
3414
3418
|
workflow: {
|
|
3415
3419
|
type: "relative";
|
|
3416
3420
|
path: string;
|
|
@@ -3425,10 +3429,6 @@ export declare function BlockPackDescriptionManifestAddRelativePathPrefix(prefix
|
|
|
3425
3429
|
type: "relative";
|
|
3426
3430
|
path: string;
|
|
3427
3431
|
};
|
|
3428
|
-
ui: {
|
|
3429
|
-
type: "relative";
|
|
3430
|
-
path: string;
|
|
3431
|
-
};
|
|
3432
3432
|
};
|
|
3433
3433
|
meta: {
|
|
3434
3434
|
organization: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BlockPackId, BlockPackIdNoVersion, BlockPackOverview, SingleBlockPackOverview } from '@milaboratories/pl-model-middle-layer';
|
|
1
|
+
import { BlockPackId, BlockPackIdNoVersion, BlockPackOverview, UpdateSuggestions, SingleBlockPackOverview } from '@milaboratories/pl-model-middle-layer';
|
|
2
2
|
import { FolderReader } from '../../io';
|
|
3
3
|
import { BlockComponentsAbsoluteUrl } from '../model';
|
|
4
4
|
export type BlockPackOverviewNoRegLabel = Omit<BlockPackOverview, 'registryId'>;
|
|
@@ -8,6 +8,8 @@ export type RegistryV2ReaderOps = {
|
|
|
8
8
|
/** Number of milliseconds to keep cached retrieved block list for, if new requests returns error */
|
|
9
9
|
keepStaleBlockListFor: number;
|
|
10
10
|
};
|
|
11
|
+
/** @param availableVersions must be reverse sorted (from highest version to lowest) */
|
|
12
|
+
export declare function inferUpdateSuggestions(currentVersion: string, availableVersions: string[]): UpdateSuggestions<string>;
|
|
11
13
|
export declare class RegistryV2Reader {
|
|
12
14
|
private readonly registryReader;
|
|
13
15
|
private readonly v2RootFolderReader;
|
|
@@ -24,6 +26,7 @@ export declare class RegistryV2Reader {
|
|
|
24
26
|
private listCache;
|
|
25
27
|
listBlockPacks(): Promise<BlockPackOverviewNoRegLabel[]>;
|
|
26
28
|
getLatestOverview(id: BlockPackIdNoVersion, channel: string): Promise<SingleBlockPackOverview | undefined>;
|
|
29
|
+
getUpdateSuggestions(id: BlockPackId, channel: string): Promise<UpdateSuggestions<string> | undefined>;
|
|
27
30
|
getSpecificOverview(id: BlockPackId, channel: string): Promise<SingleBlockPackOverview>;
|
|
28
31
|
private readonly componentsCache;
|
|
29
32
|
getComponents(id: BlockPackId): Promise<BlockComponentsAbsoluteUrl>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry_reader.d.ts","sourceRoot":"","sources":["../../../src/v2/registry/registry_reader.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,oBAAoB,EAKpB,iBAAiB,EACjB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"registry_reader.d.ts","sourceRoot":"","sources":["../../../src/v2/registry/registry_reader.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,oBAAoB,EAKpB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EAExB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAUxC,OAAO,EAAE,0BAA0B,EAA2B,MAAM,UAAU,CAAC;AAM/E,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;AAEhF,MAAM,MAAM,mBAAmB,GAAG;IAChC,+DAA+D;IAC/D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oGAAoG;IACpG,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAOF,uFAAuF;AACvF,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,6BAmBzF;AAED,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAJjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAe;IAClD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAsB;gBAGvB,cAAc,EAAE,YAAY,EAC7C,GAAG,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAMpC;;;;SAIK;IACL,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAgBrC;YAEW,gBAAgB;IAY9B,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,SAAS,CAAwD;IAE5D,cAAc,IAAI,OAAO,CAAC,2BAA2B,EAAE,CAAC;IA4DxD,iBAAiB,CAC5B,EAAE,EAAE,oBAAoB,EACxB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAQlC,oBAAoB,CAC/B,EAAE,EAAE,WAAW,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAgBpC,mBAAmB,CAC9B,EAAE,EAAE,WAAW,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,uBAAuB,CAAC;IAwBnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAc7B;IAEU,aAAa,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,0BAA0B,CAAC;CAGjF"}
|