@platforma-sdk/block-tools 2.3.1 → 2.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var k=Object.defineProperty;var v=(o,t,a)=>t in o?k(o,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):o[t]=a;var n=(o,t,a)=>v(o,typeof t!="symbol"?t+"":t,a);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./config-BczgUC2N.js"),g=require("undici"),r=require("node:path"),l=require("node:path/posix"),P=require("node:fs/promises"),u=require("@milaboratories/pl-model-middle-layer"),f=require("canonicalize");require("zod");require("mime-types");require("tar");require("@milaboratories/resolve-helper");class B{constructor(t){n(this,"metaCache",new Map);n(this,"v2RootFolderReader");this.registryReader=t,this.v2RootFolderReader=t.relativeReader(e.MainPrefix)}async embedMetaContent(t){const a=f(t.id),i=this.metaCache.get(a);if(i&&i.sha256===t.latestManifestSha256)return i.meta;const p=this.v2RootFolderReader.getContentReader(),d=await e.BlockPackMetaEmbedBytes(p).parseAsync(t.latest.meta);return this.metaCache.set(a,{sha256:t.latestManifestSha256,meta:d}),d}async listBlockPacks(){this.v2RootFolderReader.getContentReader();const t=e.GlobalOverviewReg.parse(JSON.parse(Buffer.from(await this.v2RootFolderReader.readFile(e.GlobalOverviewFileName)).toString()));return await Promise.all(t.packages.map(async a=>({id:a.latest.id,meta:await this.embedMetaContent(a),spec:{type:"from-registry-v2",id:a.latest.id,registryUrl:this.registryReader.rootUrl.toString()},otherVersions:a.allVersions})))}async getComponents(t){const a=this.v2RootFolderReader.relativeReader(e.packageContentPrefixInsideV2(t)),i=u.BlockPackManifest.parse(JSON.parse(Buffer.from(await a.readFile(e.ManifestFileName)).toString()));return e.BlockComponentsAbsoluteUrl(a.rootUrl.toString()).parse(i.description.components)}}const R=Object.freeze(Object.defineProperty({__proto__:null,GlobalOverviewPath:e.GlobalOverviewPath,MetaFile:e.MetaFile,PlPackageConfigData:e.PlPackageConfigData,PlPackageJsonConfigFile:e.PlPackageJsonConfigFile,PlPackageYamlConfigFile:e.PlPackageYamlConfigFile,PlRegCommonConfigData:e.PlRegCommonConfigData,PlRegFullPackageConfigData:e.PlRegFullPackageConfigData,PlRegPackageConfig:e.PlRegPackageConfig,PlRegPackageConfigDataShard:e.PlRegPackageConfigDataShard,packageContentPrefix:e.packageContentPrefix,packageOverviewPath:e.packageOverviewPath,payloadFilePath:e.payloadFilePath},Symbol.toStringTag,{value:"Module"}));class s{constructor(t,a){this.rootUrl=t,this.httpDispatcher=a}async readFile(t){const a=new URL(t,this.rootUrl),i=await g.request(a,{dispatcher:this.httpDispatcher});return Buffer.from(await i.body.arrayBuffer())}relativeReader(t){return new s(new URL(t,this.rootUrl),this.httpDispatcher)}getContentReader(t){let a=this;return t!==void 0&&(a=a.relativeReader(t)),i=>a.readFile(i)}}class c{constructor(t,a){this.rootUrl=t,this.root=a}async readFile(t){const a=r.join(this.root,...t.split(l.sep));return await P.readFile(a)}relativeReader(t){return new c(new URL(t,this.rootUrl),r.join(this.root,...t.split(l.sep)))}getContentReader(t){let a=this;return t!==void 0&&(a=a.relativeReader(t)),i=>a.readFile(i)}}function h(o){return o.split(l.sep).join(r.sep)}function m(o){return o.split(r.sep).join(l.sep)}function b(o,t){o.endsWith("/")||(o=o+"/");const a=new URL(o,`file:${m(r.resolve("."))}/`);switch(a.protocol){case"file:":const i=h(a.pathname);return new c(a,i);case"https:":case"http:":return new s(a,t??new g.Agent);default:throw new Error(`Unknown protocol: ${a.protocol}`)}}exports.BlockComponentsAbsoluteUrl=e.BlockComponentsAbsoluteUrl;exports.BlockComponentsConsolidate=e.BlockComponentsConsolidate;exports.BlockComponentsDescription=e.BlockComponentsDescription;exports.BlockDescriptionPackageJsonField=e.BlockDescriptionPackageJsonField;exports.BlockDescriptionToExplicitBinaryBytes=e.BlockDescriptionToExplicitBinaryBytes;exports.BlockPackDescriptionConsolidateToFolder=e.BlockPackDescriptionConsolidateToFolder;exports.BlockPackDescriptionManifestAddRelativePathPrefix=e.BlockPackDescriptionManifestAddRelativePathPrefix;exports.BlockPackMetaConsolidate=e.BlockPackMetaConsolidate;exports.BlockPackMetaDescription=e.BlockPackMetaDescription;exports.BlockPackMetaEmbedAbsoluteBase64=e.BlockPackMetaEmbedAbsoluteBase64;exports.BlockPackMetaEmbedAbsoluteBytes=e.BlockPackMetaEmbedAbsoluteBytes;exports.BlockPackMetaEmbedBytes=e.BlockPackMetaEmbedBytes;exports.BlockRegistryV2=e.BlockRegistryV2;exports.FSStorage=e.FSStorage;exports.GlobalOverview=e.GlobalOverview;exports.GlobalOverviewEntry=e.GlobalOverviewEntry;exports.GlobalOverviewEntryReg=e.GlobalOverviewEntryReg;exports.GlobalOverviewFileName=e.GlobalOverviewFileName;exports.GlobalOverviewPath=e.GlobalOverviewPath$1;exports.GlobalOverviewReg=e.GlobalOverviewReg;exports.GlobalOverviewToExplicitBinaryBase64=e.GlobalOverviewToExplicitBinaryBase64;exports.GlobalOverviewToExplicitBinaryBytes=e.GlobalOverviewToExplicitBinaryBytes;exports.MainPrefix=e.MainPrefix;exports.ManifestFileName=e.ManifestFileName;exports.ManifestSuffix=e.ManifestSuffix;exports.PackageOverview=e.PackageOverview;exports.PackageOverviewFileName=e.PackageOverviewFileName;exports.PackageOverviewVersionEntry=e.PackageOverviewVersionEntry;exports.ResolvedBlockPackDescriptionFromPackageJson=e.ResolvedBlockPackDescriptionFromPackageJson;exports.ResolvedModuleFile=e.ResolvedModuleFile;exports.ResolvedModuleFolder=e.ResolvedModuleFolder;exports.S3Storage=e.S3Storage;exports.absoluteToBase64=e.absoluteToBase64;exports.absoluteToBytes=e.absoluteToBytes;exports.absoluteToString=e.absoluteToString;exports.buildBlockPackDist=e.buildBlockPackDist;exports.cpAbsoluteToRelative=e.cpAbsoluteToRelative;exports.loadPackDescription=e.loadPackDescription;exports.loadPackDescriptionRaw=e.loadPackDescriptionRaw;exports.mapLocalToAbsolute=e.mapLocalToAbsolute;exports.packFolderToRelativeTgz=e.packFolderToRelativeTgz;exports.packageContentPrefix=e.packageContentPrefix$1;exports.packageContentPrefixInsideV2=e.packageContentPrefixInsideV2;exports.packageOverviewPath=e.packageOverviewPath$1;exports.parsePackageName=e.parsePackageName;exports.relativeToContentString=e.relativeToContentString;exports.relativeToExplicitBinary64=e.relativeToExplicitBinary64;exports.relativeToExplicitBytes=e.relativeToExplicitBytes;exports.relativeToExplicitString=e.relativeToExplicitString;exports.storageByUrl=e.storageByUrl;exports.tryLoadPackDescription=e.tryLoadPackDescription;exports.RegistryV1=R;exports.RegistryV2Reader=B;exports.folderReaderByUrl=b;
1
+ "use strict";var k=Object.defineProperty;var v=(o,t,a)=>t in o?k(o,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):o[t]=a;var n=(o,t,a)=>v(o,typeof t!="symbol"?t+"":t,a);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./config-BczgUC2N.js"),g=require("undici"),r=require("node:path"),l=require("node:path/posix"),P=require("node:fs/promises"),f=require("@milaboratories/pl-model-middle-layer"),u=require("canonicalize");require("zod");require("mime-types");require("tar");require("@milaboratories/resolve-helper");class B{constructor(t){n(this,"metaCache",new Map);n(this,"v2RootFolderReader");this.registryReader=t,this.v2RootFolderReader=t.relativeReader(e.MainPrefix)}async embedMetaContent(t){const a=u(t.id),i=this.metaCache.get(a);if(i&&i.sha256===t.latestManifestSha256)return i.meta;const p=this.v2RootFolderReader.getContentReader(),d=await e.BlockPackMetaEmbedBytes(p).parseAsync(t.latest.meta);return this.metaCache.set(a,{sha256:t.latestManifestSha256,meta:d}),d}async listBlockPacks(){this.v2RootFolderReader.getContentReader();const t=e.GlobalOverviewReg.parse(JSON.parse(Buffer.from(await this.v2RootFolderReader.readFile(e.GlobalOverviewFileName)).toString()));return await Promise.all(t.packages.map(async a=>({id:a.latest.id,meta:await this.embedMetaContent(a),spec:{type:"from-registry-v2",id:a.latest.id,registryUrl:this.registryReader.rootUrl.toString()},otherVersions:a.allVersions})))}async getComponents(t){const a=this.v2RootFolderReader.relativeReader(e.packageContentPrefixInsideV2(t)),i=f.BlockPackManifest.parse(JSON.parse(Buffer.from(await a.readFile(e.ManifestFileName)).toString()));return e.BlockComponentsAbsoluteUrl(a.rootUrl.toString()).parse(i.description.components)}}const R=Object.freeze(Object.defineProperty({__proto__:null,GlobalOverviewPath:e.GlobalOverviewPath,MetaFile:e.MetaFile,PlPackageConfigData:e.PlPackageConfigData,PlPackageJsonConfigFile:e.PlPackageJsonConfigFile,PlPackageYamlConfigFile:e.PlPackageYamlConfigFile,PlRegCommonConfigData:e.PlRegCommonConfigData,PlRegFullPackageConfigData:e.PlRegFullPackageConfigData,PlRegPackageConfig:e.PlRegPackageConfig,PlRegPackageConfigDataShard:e.PlRegPackageConfigDataShard,packageContentPrefix:e.packageContentPrefix,packageOverviewPath:e.packageOverviewPath,payloadFilePath:e.payloadFilePath},Symbol.toStringTag,{value:"Module"}));class s{constructor(t,a){this.rootUrl=t,this.httpDispatcher=a}async readFile(t){const a=new URL(t,this.rootUrl),i=await g.request(a,{dispatcher:this.httpDispatcher});return Buffer.from(await i.body.arrayBuffer())}relativeReader(t){return t.endsWith("/")||(t=t+"/"),new s(new URL(t,this.rootUrl),this.httpDispatcher)}getContentReader(t){let a=this;return t!==void 0&&(a=a.relativeReader(t)),i=>a.readFile(i)}}class c{constructor(t,a){this.rootUrl=t,this.root=a}async readFile(t){const a=r.join(this.root,...t.split(l.sep));return await P.readFile(a)}relativeReader(t){return t.endsWith("/")||(t=t+"/"),new c(new URL(t,this.rootUrl),r.join(this.root,...t.split(l.sep)))}getContentReader(t){let a=this;return t!==void 0&&(a=a.relativeReader(t)),i=>a.readFile(i)}}function h(o){return o.split(l.sep).join(r.sep)}function m(o){return o.split(r.sep).join(l.sep)}function b(o,t){o.endsWith("/")||(o=o+"/");const a=new URL(o,`file:${m(r.resolve("."))}/`);switch(a.protocol){case"file:":const i=h(a.pathname);return new c(a,i);case"https:":case"http:":return new s(a,t??new g.Agent);default:throw new Error(`Unknown protocol: ${a.protocol}`)}}exports.BlockComponentsAbsoluteUrl=e.BlockComponentsAbsoluteUrl;exports.BlockComponentsConsolidate=e.BlockComponentsConsolidate;exports.BlockComponentsDescription=e.BlockComponentsDescription;exports.BlockDescriptionPackageJsonField=e.BlockDescriptionPackageJsonField;exports.BlockDescriptionToExplicitBinaryBytes=e.BlockDescriptionToExplicitBinaryBytes;exports.BlockPackDescriptionConsolidateToFolder=e.BlockPackDescriptionConsolidateToFolder;exports.BlockPackDescriptionManifestAddRelativePathPrefix=e.BlockPackDescriptionManifestAddRelativePathPrefix;exports.BlockPackMetaConsolidate=e.BlockPackMetaConsolidate;exports.BlockPackMetaDescription=e.BlockPackMetaDescription;exports.BlockPackMetaEmbedAbsoluteBase64=e.BlockPackMetaEmbedAbsoluteBase64;exports.BlockPackMetaEmbedAbsoluteBytes=e.BlockPackMetaEmbedAbsoluteBytes;exports.BlockPackMetaEmbedBytes=e.BlockPackMetaEmbedBytes;exports.BlockRegistryV2=e.BlockRegistryV2;exports.FSStorage=e.FSStorage;exports.GlobalOverview=e.GlobalOverview;exports.GlobalOverviewEntry=e.GlobalOverviewEntry;exports.GlobalOverviewEntryReg=e.GlobalOverviewEntryReg;exports.GlobalOverviewFileName=e.GlobalOverviewFileName;exports.GlobalOverviewPath=e.GlobalOverviewPath$1;exports.GlobalOverviewReg=e.GlobalOverviewReg;exports.GlobalOverviewToExplicitBinaryBase64=e.GlobalOverviewToExplicitBinaryBase64;exports.GlobalOverviewToExplicitBinaryBytes=e.GlobalOverviewToExplicitBinaryBytes;exports.MainPrefix=e.MainPrefix;exports.ManifestFileName=e.ManifestFileName;exports.ManifestSuffix=e.ManifestSuffix;exports.PackageOverview=e.PackageOverview;exports.PackageOverviewFileName=e.PackageOverviewFileName;exports.PackageOverviewVersionEntry=e.PackageOverviewVersionEntry;exports.ResolvedBlockPackDescriptionFromPackageJson=e.ResolvedBlockPackDescriptionFromPackageJson;exports.ResolvedModuleFile=e.ResolvedModuleFile;exports.ResolvedModuleFolder=e.ResolvedModuleFolder;exports.S3Storage=e.S3Storage;exports.absoluteToBase64=e.absoluteToBase64;exports.absoluteToBytes=e.absoluteToBytes;exports.absoluteToString=e.absoluteToString;exports.buildBlockPackDist=e.buildBlockPackDist;exports.cpAbsoluteToRelative=e.cpAbsoluteToRelative;exports.loadPackDescription=e.loadPackDescription;exports.loadPackDescriptionRaw=e.loadPackDescriptionRaw;exports.mapLocalToAbsolute=e.mapLocalToAbsolute;exports.packFolderToRelativeTgz=e.packFolderToRelativeTgz;exports.packageContentPrefix=e.packageContentPrefix$1;exports.packageContentPrefixInsideV2=e.packageContentPrefixInsideV2;exports.packageOverviewPath=e.packageOverviewPath$1;exports.parsePackageName=e.parsePackageName;exports.relativeToContentString=e.relativeToContentString;exports.relativeToExplicitBinary64=e.relativeToExplicitBinary64;exports.relativeToExplicitBytes=e.relativeToExplicitBytes;exports.relativeToExplicitString=e.relativeToExplicitString;exports.storageByUrl=e.storageByUrl;exports.tryLoadPackDescription=e.tryLoadPackDescription;exports.RegistryV1=R;exports.RegistryV2Reader=B;exports.folderReaderByUrl=b;
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/v2/registry/registry_reader.ts","../src/io/folder_reader.ts"],"sourcesContent":["import {\n BlockPackId,\n BlockPackManifest,\n BlockPackMetaEmbeddedBytes,\n BlockPackOverview\n} from '@milaboratories/pl-model-middle-layer';\nimport { FolderReader } from '../../io';\nimport canonicalize from 'canonicalize';\nimport {\n GlobalOverviewEntryReg,\n GlobalOverviewFileName,\n GlobalOverviewReg,\n MainPrefix,\n ManifestFileName,\n packageContentPrefix,\n packageContentPrefixInsideV2\n} from './schema_public';\nimport { BlockComponentsAbsoluteUrl, BlockPackMetaEmbedBytes } from '../model';\n\nexport type BlockPackOverviewNoRegLabel = Omit<BlockPackOverview, 'registryId'>;\n\nexport class RegistryV2Reader {\n private readonly metaCache = new Map<\n string,\n { sha256: string; meta: BlockPackMetaEmbeddedBytes }\n >();\n\n private readonly v2RootFolderReader: FolderReader;\n\n constructor(private readonly registryReader: FolderReader) {\n this.v2RootFolderReader = registryReader.relativeReader(MainPrefix);\n }\n\n private async embedMetaContent(\n entry: GlobalOverviewEntryReg\n ): Promise<BlockPackMetaEmbeddedBytes> {\n const id = canonicalize(entry.id)!;\n const fromCache = this.metaCache.get(id);\n if (fromCache && fromCache.sha256 === entry.latestManifestSha256) return fromCache.meta;\n const rootContentReader = this.v2RootFolderReader.getContentReader();\n const meta = await BlockPackMetaEmbedBytes(rootContentReader).parseAsync(entry.latest.meta);\n this.metaCache.set(id, { sha256: entry.latestManifestSha256, meta });\n return meta;\n }\n\n public async listBlockPacks(): Promise<BlockPackOverviewNoRegLabel[]> {\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 return await Promise.all(\n globalOverview.packages.map(\n async (p) =>\n ({\n id: p.latest.id,\n meta: await this.embedMetaContent(p),\n spec: {\n type: 'from-registry-v2',\n id: p.latest.id,\n registryUrl: this.registryReader.rootUrl.toString()\n },\n otherVersions: p.allVersions\n }) satisfies BlockPackOverviewNoRegLabel\n )\n );\n }\n\n public async getComponents(id: BlockPackId): Promise<BlockComponentsAbsoluteUrl> {\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 }\n}\n","import { Agent, 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';\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 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 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 ?? new Agent());\n default:\n throw new Error(`Unknown protocol: ${url.protocol}`);\n }\n}\n"],"names":["RegistryV2Reader","registryReader","__publicField","MainPrefix","entry","id","canonicalize","fromCache","rootContentReader","meta","BlockPackMetaEmbedBytes","globalOverview","GlobalOverviewReg","GlobalOverviewFileName","p","packageFolderReader","packageContentPrefixInsideV2","manifest","BlockPackManifest","ManifestFileName","BlockComponentsAbsoluteUrl","HttpFolderReader","rootUrl","httpDispatcher","file","targetUrl","response","request","relativePath","reader","path","FSFolderReader","root","targetPath","pathPosix","fsp","posixToLocalPath","localToPosix","folderReaderByUrl","address","url","rootPath","Agent"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/v2/registry/registry_reader.ts","../src/io/folder_reader.ts"],"sourcesContent":["import {\n BlockPackId,\n BlockPackManifest,\n BlockPackMetaEmbeddedBytes,\n BlockPackOverview\n} from '@milaboratories/pl-model-middle-layer';\nimport { FolderReader } from '../../io';\nimport canonicalize from 'canonicalize';\nimport {\n GlobalOverviewEntryReg,\n GlobalOverviewFileName,\n GlobalOverviewReg,\n MainPrefix,\n ManifestFileName,\n packageContentPrefix,\n packageContentPrefixInsideV2\n} from './schema_public';\nimport { BlockComponentsAbsoluteUrl, BlockPackMetaEmbedBytes } from '../model';\n\nexport type BlockPackOverviewNoRegLabel = Omit<BlockPackOverview, 'registryId'>;\n\nexport class RegistryV2Reader {\n private readonly metaCache = new Map<\n string,\n { sha256: string; meta: BlockPackMetaEmbeddedBytes }\n >();\n\n private readonly v2RootFolderReader: FolderReader;\n\n constructor(private readonly registryReader: FolderReader) {\n this.v2RootFolderReader = registryReader.relativeReader(MainPrefix);\n }\n\n private async embedMetaContent(\n entry: GlobalOverviewEntryReg\n ): Promise<BlockPackMetaEmbeddedBytes> {\n const id = canonicalize(entry.id)!;\n const fromCache = this.metaCache.get(id);\n if (fromCache && fromCache.sha256 === entry.latestManifestSha256) return fromCache.meta;\n const rootContentReader = this.v2RootFolderReader.getContentReader();\n const meta = await BlockPackMetaEmbedBytes(rootContentReader).parseAsync(entry.latest.meta);\n this.metaCache.set(id, { sha256: entry.latestManifestSha256, meta });\n return meta;\n }\n\n public async listBlockPacks(): Promise<BlockPackOverviewNoRegLabel[]> {\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 return await Promise.all(\n globalOverview.packages.map(\n async (p) =>\n ({\n id: p.latest.id,\n meta: await this.embedMetaContent(p),\n spec: {\n type: 'from-registry-v2',\n id: p.latest.id,\n registryUrl: this.registryReader.rootUrl.toString()\n },\n otherVersions: p.allVersions\n }) satisfies BlockPackOverviewNoRegLabel\n )\n );\n }\n\n public async getComponents(id: BlockPackId): Promise<BlockComponentsAbsoluteUrl> {\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 }\n}\n","import { Agent, 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';\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 ?? new Agent());\n default:\n throw new Error(`Unknown protocol: ${url.protocol}`);\n }\n}\n"],"names":["RegistryV2Reader","registryReader","__publicField","MainPrefix","entry","id","canonicalize","fromCache","rootContentReader","meta","BlockPackMetaEmbedBytes","globalOverview","GlobalOverviewReg","GlobalOverviewFileName","p","packageFolderReader","packageContentPrefixInsideV2","manifest","BlockPackManifest","ManifestFileName","BlockComponentsAbsoluteUrl","HttpFolderReader","rootUrl","httpDispatcher","file","targetUrl","response","request","relativePath","reader","path","FSFolderReader","root","targetPath","pathPosix","fsp","posixToLocalPath","localToPosix","folderReaderByUrl","address","url","rootPath","Agent"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,11 +1,11 @@
1
1
  var d = Object.defineProperty;
2
2
  var g = (t, e, a) => e in t ? d(t, e, { enumerable: !0, configurable: !0, writable: !0, value: a }) : t[e] = a;
3
3
  var i = (t, e, a) => g(t, typeof e != "symbol" ? e + "" : e, a);
4
- import { e as f, f as m, G as h, h as v, p as k, M as P, i as R, j as u, k as w, m as B, n as y, o as C, q as F, r as b, t as M, P as O, u as S, v as x, w as D } from "./config-BbxbO3Iw.mjs";
5
- import { Q as te, O as oe, W as re, a7 as se, U as ie, V as le, L as ne, a as ce, B as pe, N as de, d as ge, F as fe, a6 as me, a4 as he, a5 as ve, a3 as ke, a9 as Pe, a8 as Re, $ as ue, a1 as we, Z as Be, a0 as ye, T as Ce, R as Fe, x as be, S as Me, A as Oe, C as Se, z as xe, c as De, D as Te, b as Ue, l as Ee, y as Ge, E as Ae, _ as Le, a2 as Ve, X as je, I as Ne, J as Je, K as ze, H as _e, s as $e, Y as qe } from "./config-BbxbO3Iw.mjs";
4
+ import { e as f, f as m, G as k, h, p as v, M as R, i as u, j as P, k as w, m as B, n as y, o as C, q as F, r as b, t as M, P as O, u as S, v as x, w as D } from "./config-BbxbO3Iw.mjs";
5
+ import { Q as te, O as oe, W as se, a7 as re, U as ie, V as le, L as ne, a as ce, B as pe, N as de, d as ge, F as fe, a6 as me, a4 as ke, a5 as he, a3 as ve, a9 as Re, a8 as ue, $ as Pe, a1 as we, Z as Be, a0 as ye, T as Ce, R as Fe, x as be, S as Me, A as Oe, C as Se, z as xe, c as De, D as Te, b as Ue, l as Ee, y as Ge, E as Ae, _ as Le, a2 as Ve, X as je, I as Ne, J as Je, K as ze, H as We, s as _e, Y as $e } from "./config-BbxbO3Iw.mjs";
6
6
  import { Agent as T, request as U } from "undici";
7
- import r from "node:path";
8
- import s from "node:path/posix";
7
+ import s from "node:path";
8
+ import r from "node:path/posix";
9
9
  import E from "node:fs/promises";
10
10
  import { BlockPackManifest as G } from "@milaboratories/pl-model-middle-layer";
11
11
  import A from "canonicalize";
@@ -27,9 +27,9 @@ class Q {
27
27
  }
28
28
  async listBlockPacks() {
29
29
  this.v2RootFolderReader.getContentReader();
30
- const e = h.parse(
30
+ const e = k.parse(
31
31
  JSON.parse(
32
- Buffer.from(await this.v2RootFolderReader.readFile(v)).toString()
32
+ Buffer.from(await this.v2RootFolderReader.readFile(h)).toString()
33
33
  )
34
34
  );
35
35
  return await Promise.all(
@@ -49,18 +49,18 @@ class Q {
49
49
  }
50
50
  async getComponents(e) {
51
51
  const a = this.v2RootFolderReader.relativeReader(
52
- k(e)
52
+ v(e)
53
53
  ), o = G.parse(
54
- JSON.parse(Buffer.from(await a.readFile(P)).toString())
54
+ JSON.parse(Buffer.from(await a.readFile(R)).toString())
55
55
  );
56
- return R(a.rootUrl.toString()).parse(
56
+ return u(a.rootUrl.toString()).parse(
57
57
  o.description.components
58
58
  );
59
59
  }
60
60
  }
61
61
  const X = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
62
62
  __proto__: null,
63
- GlobalOverviewPath: u,
63
+ GlobalOverviewPath: P,
64
64
  MetaFile: w,
65
65
  PlPackageConfigData: B,
66
66
  PlPackageJsonConfigFile: y,
@@ -84,7 +84,7 @@ class l {
84
84
  return Buffer.from(await o.body.arrayBuffer());
85
85
  }
86
86
  relativeReader(e) {
87
- return new l(new URL(e, this.rootUrl), this.httpDispatcher);
87
+ return e.endsWith("/") || (e = e + "/"), new l(new URL(e, this.rootUrl), this.httpDispatcher);
88
88
  }
89
89
  getContentReader(e) {
90
90
  let a = this;
@@ -96,13 +96,13 @@ class n {
96
96
  this.rootUrl = e, this.root = a;
97
97
  }
98
98
  async readFile(e) {
99
- const a = r.join(this.root, ...e.split(s.sep));
99
+ const a = s.join(this.root, ...e.split(r.sep));
100
100
  return await E.readFile(a);
101
101
  }
102
102
  relativeReader(e) {
103
- return new n(
103
+ return e.endsWith("/") || (e = e + "/"), new n(
104
104
  new URL(e, this.rootUrl),
105
- r.join(this.root, ...e.split(s.sep))
105
+ s.join(this.root, ...e.split(r.sep))
106
106
  );
107
107
  }
108
108
  getContentReader(e) {
@@ -111,14 +111,14 @@ class n {
111
111
  }
112
112
  }
113
113
  function L(t) {
114
- return t.split(s.sep).join(r.sep);
114
+ return t.split(r.sep).join(s.sep);
115
115
  }
116
116
  function V(t) {
117
- return t.split(r.sep).join(s.sep);
117
+ return t.split(s.sep).join(r.sep);
118
118
  }
119
119
  function Z(t, e) {
120
120
  t.endsWith("/") || (t = t + "/");
121
- const a = new URL(t, `file:${V(r.resolve("."))}/`);
121
+ const a = new URL(t, `file:${V(s.resolve("."))}/`);
122
122
  switch (a.protocol) {
123
123
  case "file:":
124
124
  const o = L(a.pathname);
@@ -131,11 +131,11 @@ function Z(t, e) {
131
131
  }
132
132
  }
133
133
  export {
134
- R as BlockComponentsAbsoluteUrl,
134
+ u as BlockComponentsAbsoluteUrl,
135
135
  te as BlockComponentsConsolidate,
136
136
  oe as BlockComponentsDescription,
137
- re as BlockDescriptionPackageJsonField,
138
- se as BlockDescriptionToExplicitBinaryBytes,
137
+ se as BlockDescriptionPackageJsonField,
138
+ re as BlockDescriptionToExplicitBinaryBytes,
139
139
  ie as BlockPackDescriptionConsolidateToFolder,
140
140
  le as BlockPackDescriptionManifestAddRelativePathPrefix,
141
141
  ne as BlockPackMetaConsolidate,
@@ -146,16 +146,16 @@ export {
146
146
  ge as BlockRegistryV2,
147
147
  fe as FSStorage,
148
148
  me as GlobalOverview,
149
- he as GlobalOverviewEntry,
150
- ve as GlobalOverviewEntryReg,
151
- v as GlobalOverviewFileName,
152
- ke as GlobalOverviewPath,
153
- h as GlobalOverviewReg,
154
- Pe as GlobalOverviewToExplicitBinaryBase64,
155
- Re as GlobalOverviewToExplicitBinaryBytes,
149
+ ke as GlobalOverviewEntry,
150
+ he as GlobalOverviewEntryReg,
151
+ h as GlobalOverviewFileName,
152
+ ve as GlobalOverviewPath,
153
+ k as GlobalOverviewReg,
154
+ Re as GlobalOverviewToExplicitBinaryBase64,
155
+ ue as GlobalOverviewToExplicitBinaryBytes,
156
156
  f as MainPrefix,
157
- P as ManifestFileName,
158
- ue as ManifestSuffix,
157
+ R as ManifestFileName,
158
+ Pe as ManifestSuffix,
159
159
  we as PackageOverview,
160
160
  Be as PackageOverviewFileName,
161
161
  ye as PackageOverviewVersionEntry,
@@ -176,14 +176,14 @@ export {
176
176
  Ge as mapLocalToAbsolute,
177
177
  Ae as packFolderToRelativeTgz,
178
178
  Le as packageContentPrefix,
179
- k as packageContentPrefixInsideV2,
179
+ v as packageContentPrefixInsideV2,
180
180
  Ve as packageOverviewPath,
181
181
  je as parsePackageName,
182
182
  Ne as relativeToContentString,
183
183
  Je as relativeToExplicitBinary64,
184
184
  ze as relativeToExplicitBytes,
185
- _e as relativeToExplicitString,
186
- $e as storageByUrl,
187
- qe as tryLoadPackDescription
185
+ We as relativeToExplicitString,
186
+ _e as storageByUrl,
187
+ $e as tryLoadPackDescription
188
188
  };
189
189
  //# sourceMappingURL=index.mjs.map
@@ -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 BlockPackManifest,\n BlockPackMetaEmbeddedBytes,\n BlockPackOverview\n} from '@milaboratories/pl-model-middle-layer';\nimport { FolderReader } from '../../io';\nimport canonicalize from 'canonicalize';\nimport {\n GlobalOverviewEntryReg,\n GlobalOverviewFileName,\n GlobalOverviewReg,\n MainPrefix,\n ManifestFileName,\n packageContentPrefix,\n packageContentPrefixInsideV2\n} from './schema_public';\nimport { BlockComponentsAbsoluteUrl, BlockPackMetaEmbedBytes } from '../model';\n\nexport type BlockPackOverviewNoRegLabel = Omit<BlockPackOverview, 'registryId'>;\n\nexport class RegistryV2Reader {\n private readonly metaCache = new Map<\n string,\n { sha256: string; meta: BlockPackMetaEmbeddedBytes }\n >();\n\n private readonly v2RootFolderReader: FolderReader;\n\n constructor(private readonly registryReader: FolderReader) {\n this.v2RootFolderReader = registryReader.relativeReader(MainPrefix);\n }\n\n private async embedMetaContent(\n entry: GlobalOverviewEntryReg\n ): Promise<BlockPackMetaEmbeddedBytes> {\n const id = canonicalize(entry.id)!;\n const fromCache = this.metaCache.get(id);\n if (fromCache && fromCache.sha256 === entry.latestManifestSha256) return fromCache.meta;\n const rootContentReader = this.v2RootFolderReader.getContentReader();\n const meta = await BlockPackMetaEmbedBytes(rootContentReader).parseAsync(entry.latest.meta);\n this.metaCache.set(id, { sha256: entry.latestManifestSha256, meta });\n return meta;\n }\n\n public async listBlockPacks(): Promise<BlockPackOverviewNoRegLabel[]> {\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 return await Promise.all(\n globalOverview.packages.map(\n async (p) =>\n ({\n id: p.latest.id,\n meta: await this.embedMetaContent(p),\n spec: {\n type: 'from-registry-v2',\n id: p.latest.id,\n registryUrl: this.registryReader.rootUrl.toString()\n },\n otherVersions: p.allVersions\n }) satisfies BlockPackOverviewNoRegLabel\n )\n );\n }\n\n public async getComponents(id: BlockPackId): Promise<BlockComponentsAbsoluteUrl> {\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 }\n}\n","import { Agent, 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';\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 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 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 ?? new Agent());\n default:\n throw new Error(`Unknown protocol: ${url.protocol}`);\n }\n}\n"],"names":["RegistryV2Reader","registryReader","__publicField","MainPrefix","entry","id","canonicalize","fromCache","rootContentReader","meta","BlockPackMetaEmbedBytes","globalOverview","GlobalOverviewReg","GlobalOverviewFileName","p","packageFolderReader","packageContentPrefixInsideV2","manifest","BlockPackManifest","ManifestFileName","BlockComponentsAbsoluteUrl","HttpFolderReader","rootUrl","httpDispatcher","file","targetUrl","response","request","relativePath","reader","path","FSFolderReader","root","targetPath","pathPosix","fsp","posixToLocalPath","localToPosix","folderReaderByUrl","address","url","rootPath","Agent"],"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 BlockPackManifest,\n BlockPackMetaEmbeddedBytes,\n BlockPackOverview\n} from '@milaboratories/pl-model-middle-layer';\nimport { FolderReader } from '../../io';\nimport canonicalize from 'canonicalize';\nimport {\n GlobalOverviewEntryReg,\n GlobalOverviewFileName,\n GlobalOverviewReg,\n MainPrefix,\n ManifestFileName,\n packageContentPrefix,\n packageContentPrefixInsideV2\n} from './schema_public';\nimport { BlockComponentsAbsoluteUrl, BlockPackMetaEmbedBytes } from '../model';\n\nexport type BlockPackOverviewNoRegLabel = Omit<BlockPackOverview, 'registryId'>;\n\nexport class RegistryV2Reader {\n private readonly metaCache = new Map<\n string,\n { sha256: string; meta: BlockPackMetaEmbeddedBytes }\n >();\n\n private readonly v2RootFolderReader: FolderReader;\n\n constructor(private readonly registryReader: FolderReader) {\n this.v2RootFolderReader = registryReader.relativeReader(MainPrefix);\n }\n\n private async embedMetaContent(\n entry: GlobalOverviewEntryReg\n ): Promise<BlockPackMetaEmbeddedBytes> {\n const id = canonicalize(entry.id)!;\n const fromCache = this.metaCache.get(id);\n if (fromCache && fromCache.sha256 === entry.latestManifestSha256) return fromCache.meta;\n const rootContentReader = this.v2RootFolderReader.getContentReader();\n const meta = await BlockPackMetaEmbedBytes(rootContentReader).parseAsync(entry.latest.meta);\n this.metaCache.set(id, { sha256: entry.latestManifestSha256, meta });\n return meta;\n }\n\n public async listBlockPacks(): Promise<BlockPackOverviewNoRegLabel[]> {\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 return await Promise.all(\n globalOverview.packages.map(\n async (p) =>\n ({\n id: p.latest.id,\n meta: await this.embedMetaContent(p),\n spec: {\n type: 'from-registry-v2',\n id: p.latest.id,\n registryUrl: this.registryReader.rootUrl.toString()\n },\n otherVersions: p.allVersions\n }) satisfies BlockPackOverviewNoRegLabel\n )\n );\n }\n\n public async getComponents(id: BlockPackId): Promise<BlockComponentsAbsoluteUrl> {\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 }\n}\n","import { Agent, 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';\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 ?? new Agent());\n default:\n throw new Error(`Unknown protocol: ${url.protocol}`);\n }\n}\n"],"names":["RegistryV2Reader","registryReader","__publicField","MainPrefix","entry","id","canonicalize","fromCache","rootContentReader","meta","BlockPackMetaEmbedBytes","globalOverview","GlobalOverviewReg","GlobalOverviewFileName","p","packageFolderReader","packageContentPrefixInsideV2","manifest","BlockPackManifest","ManifestFileName","BlockComponentsAbsoluteUrl","HttpFolderReader","rootUrl","httpDispatcher","file","targetUrl","response","request","relativePath","reader","path","FSFolderReader","root","targetPath","pathPosix","fsp","posixToLocalPath","localToPosix","folderReaderByUrl","address","url","rootPath","Agent"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"folder_reader.d.ts","sourceRoot":"","sources":["../../src/io/folder_reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAW,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAK9C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,gBAAgB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,qBAAqB,CAAC;CAChE;AA4DD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,UAAU,GAAG,YAAY,CAa5F"}
1
+ {"version":3,"file":"folder_reader.d.ts","sourceRoot":"","sources":["../../src/io/folder_reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAW,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAK9C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,gBAAgB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,qBAAqB,CAAC;CAChE;AA8DD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,UAAU,GAAG,YAAY,CAa5F"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platforma-sdk/block-tools",
3
- "version": "2.3.1",
3
+ "version": "2.3.2",
4
4
  "description": "Utility to manipulate Platforma Blocks and Block Registry",
5
5
  "types": "./dist/lib.d.ts",
6
6
  "main": "./dist/index.js",
@@ -26,6 +26,7 @@ class HttpFolderReader implements FolderReader {
26
26
  }
27
27
 
28
28
  public relativeReader(relativePath: string): HttpFolderReader {
29
+ if (!relativePath.endsWith('/')) relativePath = relativePath + '/';
29
30
  return new HttpFolderReader(new URL(relativePath, this.rootUrl), this.httpDispatcher);
30
31
  }
31
32
 
@@ -48,6 +49,7 @@ class FSFolderReader implements FolderReader {
48
49
  }
49
50
 
50
51
  public relativeReader(relativePath: string): FSFolderReader {
52
+ if (!relativePath.endsWith('/')) relativePath = relativePath + '/';
51
53
  return new FSFolderReader(
52
54
  new URL(relativePath, this.rootUrl),
53
55
  path.join(this.root, ...relativePath.split(pathPosix.sep))
@@ -0,0 +1,19 @@
1
+ import { expect, test } from '@jest/globals';
2
+ import { RegistryV2Reader } from './registry_reader';
3
+ import { folderReaderByUrl } from '../../io';
4
+
5
+ test('test listing packets from global registry', async () => {
6
+ const registryReader = new RegistryV2Reader(folderReaderByUrl('https://blocks.pl-open.science'));
7
+ const listing = await registryReader.listBlockPacks();
8
+ expect(listing.length).toBeGreaterThanOrEqual(1);
9
+ });
10
+
11
+ test('test getting components from global registry', async () => {
12
+ const registryReader = new RegistryV2Reader(folderReaderByUrl('https://blocks.pl-open.science'));
13
+ const components = await registryReader.getComponents({
14
+ organization: 'milaboratories',
15
+ name: 'samples-and-data',
16
+ version: '1.3.0'
17
+ });
18
+ console.dir(components, { depth: 5 });
19
+ });