@platforma-sdk/block-tools 2.1.10 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +266 -80
- package/dist/cli.mjs.map +1 -1
- package/dist/cmd/index.d.ts +2 -0
- package/dist/cmd/index.d.ts.map +1 -1
- package/dist/cmd/publish.d.ts +11 -0
- package/dist/cmd/publish.d.ts.map +1 -0
- package/dist/config-DJqN5LSx.js +3 -0
- package/dist/config-DJqN5LSx.js.map +1 -0
- package/dist/{config-jteHItEq.mjs → config-rGaQLD-7.mjs} +634 -609
- package/dist/config-rGaQLD-7.mjs.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.mjs +29 -27
- package/dist/registry_v1/config_schema.d.ts +13 -13
- package/dist/v2/build_dist.d.ts +2 -1
- package/dist/v2/build_dist.d.ts.map +1 -1
- package/dist/v2/model/block_components.d.ts +169 -177
- package/dist/v2/model/block_components.d.ts.map +1 -1
- package/dist/v2/model/block_description.d.ts +2873 -0
- package/dist/v2/model/block_description.d.ts.map +1 -0
- package/dist/v2/model/{meta.d.ts → block_meta.d.ts} +1 -1
- package/dist/v2/model/block_meta.d.ts.map +1 -0
- package/dist/v2/model/content_conversion.d.ts +5 -2
- package/dist/v2/model/content_conversion.d.ts.map +1 -1
- package/dist/v2/model/index.d.ts +3 -2079
- package/dist/v2/model/index.d.ts.map +1 -1
- package/dist/v2/registry/registry.d.ts +16 -0
- package/dist/v2/registry/registry.d.ts.map +1 -0
- package/dist/v2/registry/schema_internal.d.ts +7 -0
- package/dist/v2/registry/schema_internal.d.ts.map +1 -0
- package/dist/v2/registry/schema_public.d.ts +2828 -0
- package/dist/v2/registry/schema_public.d.ts.map +1 -0
- package/package.json +11 -10
- package/src/cmd/build-meta.ts +1 -1
- package/src/cmd/index.ts +2 -0
- package/src/cmd/publish.ts +69 -0
- package/src/registry_v1/registry.ts +1 -1
- package/src/v2/build_dist.ts +16 -12
- package/src/v2/model/block_components.ts +14 -10
- package/src/v2/model/block_description.ts +49 -0
- package/src/v2/model/{meta.ts → block_meta.ts} +1 -1
- package/src/v2/model/content_conversion.ts +50 -21
- package/src/v2/model/index.ts +3 -44
- package/src/v2/registry/registry.ts +233 -0
- package/src/v2/registry/schema_internal.ts +13 -0
- package/src/v2/registry/schema_public.ts +90 -0
- package/dist/config-B8NlJ02C.js +0 -3
- package/dist/config-B8NlJ02C.js.map +0 -1
- package/dist/config-jteHItEq.mjs.map +0 -1
- package/dist/v2/model/common.d.ts +0 -3
- package/dist/v2/model/common.d.ts.map +0 -1
- package/dist/v2/model/content_types.d.ts +0 -478
- package/dist/v2/model/content_types.d.ts.map +0 -1
- package/dist/v2/model/meta.d.ts.map +0 -1
- package/dist/v2/registry/schema.d.ts +0 -15
- package/dist/v2/registry/schema.d.ts.map +0 -1
- package/src/v2/model/common.ts +0 -2
- package/src/v2/model/content_types.ts +0 -233
- package/src/v2/registry/schema.ts +0 -29
package/dist/cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var v=Object.defineProperty;var E=(i,e,t)=>e in i?v(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var n=(i,e,t)=>E(i,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("@oclif/core"),c=require("node:path"),u=require("node:fs"),l=require("./config-B8NlJ02C.js"),P=require("yaml"),A=require("@milaboratories/ts-helpers-oclif"),f=class f extends a.Command{async run(){const{flags:e}=await this.parse(f),t=c.resolve(e.modulePath),s=await l.loadPackDescriptionRaw(t),d=await l.BlockPackMetaEmbed.parseAsync(l.BlockPackMetaDescription(t).parse(s.meta));await u.promises.writeFile(c.resolve(e.destination),JSON.stringify(d))}};n(f,"description","Extracts meta information from blocks package.json and outputs meta.json with embedded binary and textual information linked from the meta section."),n(f,"flags",{modulePath:a.Flags.string({char:"i",summary:"input module path",helpValue:"<path>",default:"."}),destination:a.Flags.string({char:"o",summary:"output meta.json file",helpValue:"<path>",required:!0})});let w=f;async function O(i){try{return await u.promises.readFile(i,"utf8")}catch(e){if(e.code==="ENOENT")return;throw e}}const p=class p extends a.Command{async run(){const{flags:e}=await this.parse(p),t=c.resolve(e.modulePath);let{model:s,platforma:d}=require(t);if(s||(s=d),!s)throw new Error('"model" export not found');const{config:r}=s;if(!r)throw new Error('Malformed "model" object, check it is created with "BlockModel" and ".done()" is executed as the call in the chain.');if(!("canRun"in r||"inputsValid"in r)||!("outputs"in r)||!("sections"in r))throw new Error('"config" has unexpected structure');const m=await O(e.sourceBundle);m!==void 0&&(r.code={type:"plain",content:m}),await u.promises.writeFile(c.resolve(e.destination),JSON.stringify(r))}};n(p,"description","Extracts and outputs block model JSON from pre-built block model module"),n(p,"flags",{modulePath:a.Flags.string({char:"i",summary:"input module path",helpValue:"<path>",default:"."}),sourceBundle:a.Flags.string({char:"b",summary:"bundled model code to embed into the model for callback-based rendering to work",helpValue:"<path>",default:"./dist/bundle.js"}),destination:a.Flags.string({char:"o",summary:"output model file",helpValue:"<path>",default:"./dist/model.json"})});let y=p;const g=class g extends a.Command{async run(){const{flags:e}=await this.parse(g),t=await l.loadPackDescription(c.resolve(e.modulePath));await l.buildBlockPackDist(t,c.resolve(e.destinationPath))}};n(g,"description","Builds block pack and outputs a block pack manifest consolidating all references assets into a single folder"),n(g,"flags",{modulePath:a.Flags.string({char:"i",summary:"input module path",helpValue:"<path>",default:"."}),destinationPath:a.Flags.string({char:"o",summary:"output folder",helpValue:"<path>",default:"./block-pack"})});let F=g;function C(i){const e=i.match(/(?<destName>[^\/\\]+)=(?<src>.*)/);if(e){const{src:t,destName:s}=e.groups;return{src:t,destName:s}}else return{src:i,destName:c.basename(i)}}const R=a.Flags.custom({summary:"target files to upload",helpValue:"file_path | package_name=file_path",parse:async i=>C(i)}),S=["registry","organization","package","version"],h=class h extends a.Command{async run(){const{flags:e}=await this.parse(h),t=l.PlRegPackageConfigDataShard.parse({});for(const o of S)e[o]&&(t[o]=e[o]);e.meta&&(e.meta.endsWith(".json")?t.meta=JSON.parse(await u.promises.readFile(e.meta,{encoding:"utf-8"})):e.meta.endsWith(".yaml")&&(t.meta=P.parse(await u.promises.readFile(e.meta,{encoding:"utf-8"}))));for(const o of e.file)t.files[o.destName]=o.src;const s=await l.getConfig(t);this.log(P.stringify(s.conf));const d=s.createRegistry(new A.OclifLoggerAdapter(this)),r=s.fullPackageName,m=d.constructNewPackage(r);for(const[o,k]of Object.entries(s.conf.files)){this.log(`Uploading ${k} -> ${o} ...`);const N=await u.promises.readFile(k);await m.addFile(o,N)}this.log("Uploading meta information..."),await m.writeMeta(s.conf.meta),await m.finish(),e.refresh&&await d.updateIfNeeded()}};n(h,"description","Uploads V1 package and refreshes the registry"),n(h,"flags",{registry:a.Flags.string({char:"r",summary:"full address of the registry or alias from .pl.reg",helpValue:"<address|alias>",env:"PL_REGISTRY"}),organization:a.Flags.string({char:"o",summary:"target organisation",env:"PL_PACKAGE_ORGANIZATION"}),package:a.Flags.string({char:"p",summary:"target package",env:"PL_PACKAGE_NAME"}),version:a.Flags.string({char:"v",summary:"target version",env:"PL_PACKAGE_VERSION"}),meta:a.Flags.file({char:"m",summary:"json file containing meta information to associate with tha package",exists:!0}),file:R({char:"f",summary:"package files",multiple:!0,default:[]}),refresh:a.Flags.boolean({summary:"refresh repository after adding the package",default:!0,allowNo:!0,env:"PL_REGISTRY_REFRESH"})});let b=h;const x={"upload-package-v1":b,pack:F,"build-model":y,"build-meta":w};exports.COMMANDS=x;
|
|
1
|
+
"use strict";var X=Object.defineProperty;var ee=(a,e,t)=>e in a?X(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var f=(a,e,t)=>ee(a,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("@oclif/core"),p=require("node:path"),w=require("node:fs"),m=require("zod");require("mime-types");require("tar");require("@milaboratories/resolve-helper");const u=require("./config-DJqN5LSx.js"),q=require("@milaboratories/pl-model-middle-layer"),Q=require("@milaboratories/ts-helpers-oclif"),te=require("node:crypto"),T=require("yaml"),z=class z extends i.Command{async run(){const{flags:e}=await this.parse(z),t=p.resolve(e.modulePath),s=await u.loadPackDescriptionRaw(t),n=await u.BlockPackMetaEmbed.parseAsync(u.BlockPackMetaDescription(t).parse(s.meta));await w.promises.writeFile(p.resolve(e.destination),JSON.stringify(n))}};f(z,"description","Extracts meta information from blocks package.json and outputs meta.json with embedded binary and textual information linked from the meta section."),f(z,"flags",{modulePath:i.Flags.string({char:"i",summary:"input module path",helpValue:"<path>",default:"."}),destination:i.Flags.string({char:"o",summary:"output meta.json file",helpValue:"<path>",required:!0})});let j=z;async function ae(a){try{return await w.promises.readFile(a,"utf8")}catch(e){if(e.code==="ENOENT")return;throw e}}const E=class E extends i.Command{async run(){const{flags:e}=await this.parse(E),t=p.resolve(e.modulePath);let{model:s,platforma:n}=require(t);if(s||(s=n),!s)throw new Error('"model" export not found');const{config:r}=s;if(!r)throw new Error('Malformed "model" object, check it is created with "BlockModel" and ".done()" is executed as the call in the chain.');if(!("canRun"in r||"inputsValid"in r)||!("outputs"in r)||!("sections"in r))throw new Error('"config" has unexpected structure');const o=await ae(e.sourceBundle);o!==void 0&&(r.code={type:"plain",content:o}),await w.promises.writeFile(p.resolve(e.destination),JSON.stringify(r))}};f(E,"description","Extracts and outputs block model JSON from pre-built block model module"),f(E,"flags",{modulePath:i.Flags.string({char:"i",summary:"input module path",helpValue:"<path>",default:"."}),sourceBundle:i.Flags.string({char:"b",summary:"bundled model code to embed into the model for callback-based rendering to work",helpValue:"<path>",default:"./dist/bundle.js"}),destination:i.Flags.string({char:"o",summary:"output model file",helpValue:"<path>",default:"./dist/model.json"})});let U=E;const C=class C extends i.Command{async run(){const{flags:e}=await this.parse(C),t=await u.loadPackDescription(p.resolve(e.modulePath));await u.buildBlockPackDist(t,p.resolve(e.destinationPath))}};f(C,"description","Builds block pack and outputs a block pack manifest consolidating all references assets into a single folder"),f(C,"flags",{modulePath:i.Flags.string({char:"i",summary:"input module path",helpValue:"<path>",default:"."}),destinationPath:i.Flags.string({char:"o",summary:"output folder",helpValue:"<path>",default:"./block-pack"})});let B=C;const J="v2/",L="manifest.json";function K(a){return`${J}${a.organization}/${a.name}/${a.version}`}const se="/"+L,Y=m.z.object({schema:m.z.literal("v2"),versions:m.z.array(q.BlockPackDescriptionManifest)});function H(a){return`${J}${a.organization}/${a.name}/overview.json`}const V=`${J}overview.json`;function ie(a){return m.z.object({id:q.BlockPackIdNoVersion,allVersions:m.z.array(m.z.string()),latest:a})}function re(a){return m.z.object({schema:m.z.literal("v2"),packages:m.z.array(ie(a))})}const W=re(q.BlockPackDescriptionManifest),I="_updates_v2/per_package_version/";function oe(a,e){return`${I}${a.organization}/${a.name}/${a.version}/${e}`}const ne=/(?<packageKeyWithoutVersion>(?<organization>[^\/]+)\/(?<name>[^\/]+))\/(?<version>[^\/]+)\/(?<seed>[^\/]+)$/,G="_updates_v2/_global_update_in",Z="_updates_v2/_global_update_out";class ce{constructor(e,t){this.storage=e,this.logger=t}async updateRegistry(){var c,v,k,P,g,y,b,S;(c=this.logger)==null||c.info("Initiating registry refresh...");const e=new Map,t=[],s=await this.storage.listFiles(I);(v=this.logger)==null||v.info("Packages to be updated:");for(const l of s){const $=l.match(ne);if(!$)continue;t.push(l);const{packageKeyWithoutVersion:O,organization:N,name:h,version:d,seed:R}=$.groups;let F=e.get(O),M=!1;F?F.versions.has(d)||(F.versions.add(d),M=!0):(e.set(O,{package:{organization:N,name:h},versions:new Set([d])}),M=!0),(k=this.logger)==null||k.info(` - ${N}:${h}:${d} added:${M}`)}const n=await this.storage.getFile(V);let o=(n===void 0?{schema:"v2",packages:[]}:W.parse(JSON.parse(n.toString()))).packages;(P=this.logger)==null||P.info(`Global overview loaded, ${o.length} records`);for(const[,l]of e.entries()){const $=H(l.package),O=await this.storage.getFile($);let N=O===void 0?{schema:"v2",versions:[]}:Y.parse(JSON.parse(O.toString()));(g=this.logger)==null||g.info(`Updating ${l.package.organization}:${l.package.name} overview, ${N.versions.length} records`);const h=N.versions.filter(d=>!l.versions.has(d.id.version));for(const[d]of l.versions.entries()){const R=d.toString(),F=await this.storage.getFile(K({...l.package,version:R})+se);F&&h.push(u.BlockPackDescriptionManifestAddRelativePathPrefix(R).parse(q.BlockPackManifest.parse(JSON.parse(F.toString("utf8"))).description))}h.sort((d,R)=>u.semver.compare(R.id.version,d.id.version)),await this.storage.putFile($,Buffer.from(JSON.stringify({schema:"v2",versions:h}))),(y=this.logger)==null||y.info(`Done (${h.length} records)`),o=o.filter(d=>d.id.organization!==l.package.organization||d.id.name!==l.package.name),o.push({id:{organization:l.package.organization,name:l.package.name},allVersions:h.map(d=>d.id.version).reverse(),latest:u.BlockPackDescriptionManifestAddRelativePathPrefix(l.package.name).parse(h[0])})}await this.storage.putFile(V,Buffer.from(JSON.stringify({schema:"v2",packages:o}))),(b=this.logger)==null||b.info(`Global overview updated (${o.length} records)`),await this.storage.deleteFiles(...t.map(l=>`${I}${l}`)),(S=this.logger)==null||S.info("Version update requests cleared")}async updateIfNeeded(e=!1){var n,r;(n=this.logger)==null||n.info("Checking if registry requires refresh...");const t=await this.storage.getFile(G),s=await this.storage.getFile(Z);!e&&t===void 0&&s===void 0||!e&&t!==void 0&&s!==void 0&&t.equals(s)||(await this.updateRegistry(),t&&(await this.storage.putFile(Z,t),(r=this.logger)==null||r.info("Refresh finished")))}async getPackageOverview(e){const t=await this.storage.getFile(H(e));if(t!==void 0)return Y.parse(JSON.parse(t.toString()))}async getGlobalOverview(){const e=await this.storage.getFile(V);if(e!==void 0)return W.parse(JSON.parse(e.toString()))}async publishPackage(e,t){var c,v,k,P;const s=K(e.description.id);for(const g of e.files){const y=await t(g.name);if(y.length!==g.size)throw new Error(`Actual file size don't match file size from the manifest file for ${g.name} (actual = ${y.length}; manifest = ${g.size})`);const b=Buffer.from(await crypto.subtle.digest("sha-256",y)).toString("hex").toUpperCase();if(b!==g.sha256.toUpperCase())throw new Error(`Actual file SHA-256 don't match the checksum from the manifest file for ${g.name} (actual = ${b}; manifest = ${g.sha256.toUpperCase()})`);const S=s+"/"+g.name;(c=this.logger)==null||c.info(`Uploading ${g.name} -> ${S} ...`),await this.storage.putFile(S,y)}const n=s+"/"+L;(v=this.logger)==null||v.info(`Uploading manifest to ${n} ...`),await this.storage.putFile(n,Buffer.from(JSON.stringify(e)));const r=te.randomUUID(),o=oe(e.description.id,r);(k=this.logger)==null||k.info(`Creating update seed at ${o} ...`),await this.storage.putFile(o,Buffer.from(r)),(P=this.logger)==null||P.info(`Touching global update seed ${G} ...`),await this.storage.putFile(G,Buffer.from(r))}}const x=class x extends i.Command{async run(){const{flags:e}=await this.parse(x),t=p.resolve(e.manifest),s=q.BlockPackManifest.parse(JSON.parse(await w.promises.readFile(t,{encoding:"utf-8"}))),n=p.dirname(t);this.log(`Manifest root = ${n}`);const r=u.storageByUrl(e.registry),o=new ce(r,new Q.OclifLoggerAdapter(this));await o.publishPackage(s,async c=>Buffer.from(await w.promises.readFile(p.resolve(n,c)))),e.refresh&&await o.updateIfNeeded()}};f(x,"description","Publishes the block package and refreshes the registry (for v2 block-pack schema)"),f(x,"flags",{registry:i.Flags.string({char:"r",summary:"full address of the registry",helpValue:"<address>",env:"PL_REGISTRY",required:!0}),manifest:i.Flags.file({char:"m",summary:"manifest file path",exists:!0,default:`./block-pack/${L}`}),refresh:i.Flags.boolean({summary:"refresh repository after adding the package",default:!0,allowNo:!0,env:"PL_REGISTRY_REFRESH"})});let _=x;function le(a){const e=a.match(/(?<destName>[^\/\\]+)=(?<src>.*)/);if(e){const{src:t,destName:s}=e.groups;return{src:t,destName:s}}else return{src:a,destName:p.basename(a)}}const de=i.Flags.custom({summary:"target files to upload",helpValue:"file_path | package_name=file_path",parse:async a=>le(a)}),ge=["registry","organization","package","version"],A=class A extends i.Command{async run(){const{flags:e}=await this.parse(A),t=u.PlRegPackageConfigDataShard.parse({});for(const c of ge)e[c]&&(t[c]=e[c]);e.meta&&(e.meta.endsWith(".json")?t.meta=JSON.parse(await w.promises.readFile(e.meta,{encoding:"utf-8"})):e.meta.endsWith(".yaml")&&(t.meta=T.parse(await w.promises.readFile(e.meta,{encoding:"utf-8"}))));for(const c of e.file)t.files[c.destName]=c.src;const s=await u.getConfig(t);this.log(T.stringify(s.conf));const n=s.createRegistry(new Q.OclifLoggerAdapter(this)),r=s.fullPackageName,o=n.constructNewPackage(r);for(const[c,v]of Object.entries(s.conf.files)){this.log(`Uploading ${v} -> ${c} ...`);const k=await w.promises.readFile(v);await o.addFile(c,k)}this.log("Uploading meta information..."),await o.writeMeta(s.conf.meta),await o.finish(),e.refresh&&await n.updateIfNeeded()}};f(A,"description","Uploads V1 package and refreshes the registry"),f(A,"flags",{registry:i.Flags.string({char:"r",summary:"full address of the registry or alias from .pl.reg",helpValue:"<address|alias>",env:"PL_REGISTRY"}),organization:i.Flags.string({char:"o",summary:"target organisation",env:"PL_PACKAGE_ORGANIZATION"}),package:i.Flags.string({char:"p",summary:"target package",env:"PL_PACKAGE_NAME"}),version:i.Flags.string({char:"v",summary:"target version",env:"PL_PACKAGE_VERSION"}),meta:i.Flags.file({char:"m",summary:"json file containing meta information to associate with tha package",exists:!0}),file:de({char:"f",summary:"package files",multiple:!0,default:[]}),refresh:i.Flags.boolean({summary:"refresh repository after adding the package",default:!0,allowNo:!0,env:"PL_REGISTRY_REFRESH"})});let D=A;const fe={"upload-package-v1":D,pack:B,"build-model":U,"build-meta":j,publish:_};exports.COMMANDS=fe;
|
|
2
2
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sources":["../src/cmd/build-meta.ts","../src/cmd/build-model.ts","../src/cmd/pack-block.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, BlockPackMetaEmbed } from '../v2/model/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 BlockPackMetaEmbed.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 { 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 { 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","import BuildMeta from './build-meta';\nimport BuildModel from './build-model';\nimport PackBlock from './pack-block';\nimport UploadPackageV1 from './upload-package-v1';\n\n// prettier-ignore\nexport const COMMANDS = {\n 'upload-package-v1': UploadPackageV1,\n 'pack': PackBlock,\n 'build-model': BuildModel,\n 'build-meta': BuildMeta,\n};\n"],"names":["_BuildMeta","Command","flags","modulePath","path","descriptionRaw","loadPackDescriptionRaw","metaEmbedded","BlockPackMetaEmbed","BlockPackMetaDescription","fs","__publicField","Flags","BuildMeta","getFileContent","error","_BuildModel","model","platforma","config","code","BuildModel","_PackBlock","description","loadPackDescription","buildBlockPackDist","PackBlock","parseTargetFile","arg","match","src","destName","targetFile","BasicConfigFields","_UploadPackageV1","configFromFlags","PlRegPackageConfigDataShard","field","YAML","conf","getConfig","registry","OclifLoggerAdapter","name","builder","dst","content","UploadPackageV1","COMMANDS"],"mappings":"iaAMqBA,EAArB,MAAqBA,UAAkBC,EAAAA,OAAQ,CAqB7C,MAAa,KAAqB,CAChC,KAAM,CAAE,MAAAC,CAAM,EAAI,MAAM,KAAK,MAAMF,CAAS,EACtCG,EAAaC,EAAK,QAAQF,EAAM,UAAU,EAC1CG,EAAiB,MAAMC,yBAAuBH,CAAU,EACxDI,EAAe,MAAMC,EAAAA,mBAAmB,WAC5CC,EAAAA,yBAAyBN,CAAU,EAAE,MAAME,EAAe,IAAI,CAAA,EAG1D,MAAAK,EAAG,SAAS,UAAUN,EAAK,QAAQF,EAAM,WAAW,EAAG,KAAK,UAAUK,CAAY,CAAC,CAC3F,CACF,EA9BEI,EADmBX,EACH,cACd,uJAGFW,EALmBX,EAKZ,QAAQ,CACb,WAAYY,QAAM,OAAO,CACvB,KAAM,IACN,QAAS,oBACT,UAAW,SACX,QAAS,GAAA,CACV,EAED,YAAaA,QAAM,OAAO,CACxB,KAAM,IACN,QAAS,wBACT,UAAW,SACX,SAAU,EAAA,CACX,CAAA,GAlBL,IAAqBC,EAArBb,ECFA,eAAec,EAAeV,EAAc,CACtC,GAAA,CACF,OAAO,MAAMM,EAAG,SAAS,SAASN,EAAM,MAAM,QACvCW,EAAY,CACf,GAAAA,EAAM,OAAS,SACV,OAEH,MAAAA,CACR,CACF,CAEA,MAAqBC,EAArB,MAAqBA,UAAmBf,EAAAA,OAAQ,CA2B9C,MAAa,KAAqB,CAChC,KAAM,CAAE,MAAAC,CAAM,EAAI,MAAM,KAAK,MAAMc,CAAU,EACvCb,EAAaC,EAAK,QAAQF,EAAM,UAAU,EAChD,GAAI,CAAE,MAAAe,EAAO,UAAAC,CAAU,EAAI,QAAQf,CAAU,EAG7C,GADKc,IAAeA,EAAAC,GAChB,CAACD,EAAa,MAAA,IAAI,MAAM,0BAA0B,EAEhD,KAAA,CAAE,OAAAE,CAAW,EAAAF,EAEnB,GAAI,CAACE,EACH,MAAM,IAAI,MACR,qHAAA,EAKF,GAAA,EAAE,WAAYA,GAAU,gBAAiBA,IACzC,EAAE,YAAaA,IACf,EAAE,aAAcA,GAEV,MAAA,IAAI,MAAM,mCAAmC,EAErD,MAAMC,EAAO,MAAMN,EAAeZ,EAAM,YAAY,EAChDkB,IAAS,SACXD,EAAO,KAAO,CACZ,KAAM,QACN,QAASC,CAAA,GAIP,MAAAV,EAAG,SAAS,UAAUN,EAAK,QAAQF,EAAM,WAAW,EAAG,KAAK,UAAUiB,CAAM,CAAC,CACrF,CACF,EA3DER,EADmBK,EACH,cACd,2EAEFL,EAJmBK,EAIZ,QAAQ,CACb,WAAYJ,QAAM,OAAO,CACvB,KAAM,IACN,QAAS,oBACT,UAAW,SACX,QAAS,GAAA,CACV,EAED,aAAcA,QAAM,OAAO,CACzB,KAAM,IACN,QAAS,kFACT,UAAW,SACX,QAAS,kBAAA,CACV,EAED,YAAaA,QAAM,OAAO,CACxB,KAAM,IACN,QAAS,oBACT,UAAW,SACX,QAAS,mBAAA,CACV,CAAA,GAxBL,IAAqBS,EAArBL,ECVA,MAAqBM,EAArB,MAAqBA,UAAkBrB,EAAAA,OAAQ,CAqB7C,MAAa,KAAqB,CAChC,KAAM,CAAE,MAAAC,CAAM,EAAI,MAAM,KAAK,MAAMoB,CAAS,EACtCC,EAAc,MAAMC,sBAAoBpB,EAAK,QAAQF,EAAM,UAAU,CAAC,EAC5E,MAAMuB,EAAAA,mBAAmBF,EAAanB,EAAK,QAAQF,EAAM,eAAe,CAAC,CAC3E,CACF,EAzBES,EADmBW,EACZ,cACL,gHAGFX,EALmBW,EAKZ,QAAQ,CACb,WAAYV,QAAM,OAAO,CACvB,KAAM,IACN,QAAS,oBACT,UAAW,SACX,QAAS,GAAA,CACV,EAED,gBAAiBA,QAAM,OAAO,CAC5B,KAAM,IACN,QAAS,gBACT,UAAW,SACX,QAAS,cAAA,CACV,CAAA,GAlBL,IAAqBc,EAArBJ,ECGA,SAASK,EAAgBC,EAAyB,CAC1C,MAAAC,EAAQD,EAAI,MAAM,kCAAkC,EAC1D,GAAIC,EAAO,CACT,KAAM,CAAE,IAAAC,EAAK,SAAAC,GAAaF,EAAM,OACzB,MAAA,CAAE,IAAAC,EAAK,SAAAC,EAAS,KAEvB,OAAO,CAAE,IAAKH,EAAK,SAAUxB,EAAK,SAASwB,CAAG,EAElD,CAEa,MAAAI,EAAapB,QAAM,OAAmB,CACjD,QAAS,yBACT,UAAW,qCACX,MAAO,MAAOgB,GAAQD,EAAgBC,CAAG,CAC3C,CAAC,ECZKK,EAAwC,CAAC,WAAY,eAAgB,UAAW,SAAS,EAE1EC,EAArB,MAAqBA,UAAwBjC,EAAAA,OAAQ,CAkDnD,MAAa,KAAqB,CAChC,KAAM,CAAE,MAAAC,CAAM,EAAI,MAAM,KAAK,MAAMgC,CAAe,EAC5CC,EAA+CC,EAAAA,4BAA4B,MAAM,CAAE,CAAA,EAE9E,UAAAC,KAASJ,EAAuB/B,EAAMmC,CAAK,IAAmBF,EAAAE,CAAK,EAAInC,EAAMmC,CAAK,GAEzFnC,EAAM,OACJA,EAAM,KAAK,SAAS,OAAO,EAC7BiC,EAAgB,KAAO,KAAK,MAC1B,MAAMzB,EAAG,SAAS,SAASR,EAAM,KAAM,CAAE,SAAU,QAAS,CAAA,EAEvDA,EAAM,KAAK,SAAS,OAAO,IAClCiC,EAAgB,KAAOG,EAAK,MAC1B,MAAM5B,EAAG,SAAS,SAASR,EAAM,KAAM,CAAE,SAAU,QAAS,CAAA,IAIvD8B,UAAAA,KAAc9B,EAAM,KAC7BiC,EAAgB,MAAMH,EAAW,QAAQ,EAAIA,EAAW,IAGpD,MAAAO,EAAO,MAAMC,YAAUL,CAAe,EAE5C,KAAK,IAAIG,EAAK,UAAUC,EAAK,IAAI,CAAC,EAElC,MAAME,EAAWF,EAAK,eAAe,IAAIG,EAAA,mBAAmB,IAAI,CAAC,EAC3DC,EAAOJ,EAAK,gBAEZK,EAAUH,EAAS,oBAAoBE,CAAI,EAEtC,SAAA,CAACE,EAAKf,CAAG,IAAK,OAAO,QAAQS,EAAK,KAAK,KAAK,EAAG,CACxD,KAAK,IAAI,aAAaT,CAAG,OAAOe,CAAG,MAAM,EACzC,MAAMC,EAAU,MAAMpC,EAAG,SAAS,SAASoB,CAAG,EACxC,MAAAc,EAAQ,QAAQC,EAAKC,CAAO,CACpC,CAEA,KAAK,IAAI,+BAA+B,EACxC,MAAMF,EAAQ,UAAUL,EAAK,KAAK,IAAI,EACtC,MAAMK,EAAQ,SAEV1C,EAAM,SAAe,MAAAuC,EAAS,eAAe,CACnD,CACF,EA3FE9B,EADmBuB,EACZ,cAAc,iDAErBvB,EAHmBuB,EAGZ,QAAQ,CACb,SAAUtB,QAAM,OAAO,CACrB,KAAM,IACN,QAAS,qDACT,UAAW,kBACX,IAAK,aAAA,CACN,EAED,aAAcA,QAAM,OAAO,CACzB,KAAM,IACN,QAAS,sBACT,IAAK,yBAAA,CACN,EAED,QAASA,QAAM,OAAO,CACpB,KAAM,IACN,QAAS,iBACT,IAAK,iBAAA,CACN,EAED,QAASA,QAAM,OAAO,CACpB,KAAM,IACN,QAAS,iBACT,IAAK,oBAAA,CACN,EAED,KAAMA,QAAM,KAAK,CACf,KAAM,IACN,QAAS,sEACT,OAAQ,EAAA,CACT,EAED,KAAMoB,EAAW,CACf,KAAM,IACN,QAAS,gBACT,SAAU,GACV,QAAS,CAAC,CAAA,CACX,EAED,QAASpB,QAAM,QAAQ,CACrB,QAAS,8CACT,QAAS,GACT,QAAS,GACT,IAAK,qBAAA,CACN,CAAA,GA/CL,IAAqBmC,EAArBb,ECNO,MAAMc,EAAW,CACtB,oBAAqBD,EACrB,KAAQrB,EACR,cAAeL,EACf,aAAcR,CAChB"}
|
|
1
|
+
{"version":3,"file":"cli.js","sources":["../src/cmd/build-meta.ts","../src/cmd/build-model.ts","../src/cmd/pack-block.ts","../src/v2/registry/schema_public.ts","../src/v2/registry/schema_internal.ts","../src/v2/registry/registry.ts","../src/cmd/publish.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, BlockPackMetaEmbed } 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 BlockPackMetaEmbed.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 { 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 {\n BlockComponentsManifest,\n BlockPackDescriptionManifest,\n BlockPackId,\n BlockPackIdNoVersion,\n BlockPackMeta,\n ContentRelativeBinary,\n ContentRelativeText,\n CreateBlockPackDescriptionSchema\n} from '@milaboratories/pl-model-middle-layer';\nimport { z } from 'zod';\nimport { RelativeContentReader, relativeToExplicitBytes, relativeToExplicitText } from '../model';\n\nconst MainPrefix = 'v2/';\n\nexport const ManifestFileName = 'manifest.json';\n\nexport function packageContentPrefix(bp: BlockPackId): string {\n return `${MainPrefix}${bp.organization}/${bp.name}/${bp.version}`;\n}\n\nexport const ManifestSuffix = '/' + ManifestFileName;\n\n// export function payloadFilePath(bp: BlockPackId, file: string): string {\n// return `${MainPrefix}${bp.organization}/${bp.name}/${bp.version}/${file}`;\n// }\n\nexport const PackageOverview = z.object({\n schema: z.literal('v2'),\n versions: z.array(BlockPackDescriptionManifest)\n});\nexport type PackageOverview = z.infer<typeof PackageOverview>;\n\nexport function packageOverviewPath(bp: BlockPackIdNoVersion): string {\n return `${MainPrefix}${bp.organization}/${bp.name}/overview.json`;\n}\n\nexport const GlobalOverviewPath = `${MainPrefix}overview.json`;\n\nexport function GlobalOverviewEntry<const Description extends z.ZodTypeAny>(\n descriptionType: Description\n) {\n return z.object({\n id: BlockPackIdNoVersion,\n allVersions: z.array(z.string()),\n latest: descriptionType\n });\n}\n\nexport function GlobalOverview<const Description extends z.ZodTypeAny>(\n descriptionType: Description\n) {\n return z.object({\n schema: z.literal('v2'),\n packages: z.array(GlobalOverviewEntry(descriptionType))\n });\n}\n\nexport const GlobalOverviewReg = GlobalOverview(BlockPackDescriptionManifest);\nexport type GlobalOverviewReg = z.infer<typeof GlobalOverviewReg>;\n\nexport function GlobalOverviewToExplicitBinaryBytes(reader: RelativeContentReader) {\n return GlobalOverview(\n CreateBlockPackDescriptionSchema(\n BlockComponentsManifest,\n BlockPackMeta(\n ContentRelativeText.transform(relativeToExplicitText(reader)),\n ContentRelativeBinary.transform(relativeToExplicitBytes(reader))\n )\n )\n );\n}\nexport type GlobalOverviewExplicitBinaryBytes = z.infer<\n ReturnType<typeof GlobalOverviewToExplicitBinaryBytes>\n>;\n\nexport function GlobalOverviewToExplicitBinaryBase64(reader: RelativeContentReader) {\n return GlobalOverview(\n CreateBlockPackDescriptionSchema(\n BlockComponentsManifest,\n BlockPackMeta(\n ContentRelativeText.transform(relativeToExplicitText(reader)),\n ContentRelativeBinary.transform(relativeToExplicitBytes(reader))\n )\n )\n );\n}\nexport type GlobalOverviewExplicitBinaryBase64 = z.infer<\n ReturnType<typeof GlobalOverviewToExplicitBinaryBase64>\n>;\n","import { BlockPackId } from '@milaboratories/pl-model-middle-layer';\n\nexport const VersionUpdatesPrefix = '_updates_v2/per_package_version/';\n\nexport function packageUpdateSeedPath(bp: BlockPackId, seed: string): string {\n return `${VersionUpdatesPrefix}${bp.organization}/${bp.name}/${bp.version}/${seed}`;\n}\n\nexport const PackageUpdatePattern =\n /(?<packageKeyWithoutVersion>(?<organization>[^\\/]+)\\/(?<name>[^\\/]+))\\/(?<version>[^\\/]+)\\/(?<seed>[^\\/]+)$/;\n\nexport const GlobalUpdateSeedInFile = '_updates_v2/_global_update_in';\nexport const GlobalUpdateSeedOutFile = '_updates_v2/_global_update_out';\n","import { MiLogger } from '@milaboratories/ts-helpers';\nimport { compare as compareSemver, satisfies } from 'semver';\nimport { RegistryStorage } from '../../lib/storage';\nimport { BlockPackIdNoVersion, BlockPackManifest } from '@milaboratories/pl-model-middle-layer';\nimport {\n GlobalUpdateSeedInFile,\n GlobalUpdateSeedOutFile,\n PackageUpdatePattern,\n packageUpdateSeedPath,\n VersionUpdatesPrefix\n} from './schema_internal';\nimport {\n GlobalOverviewReg,\n GlobalOverviewPath,\n ManifestSuffix,\n packageContentPrefix,\n PackageOverview,\n packageOverviewPath,\n ManifestFileName\n} from './schema_public';\nimport { BlockPackDescriptionManifestAddRelativePathPrefix, RelativeContentReader } from '../model';\nimport { randomUUID } from 'node:crypto';\n\ntype PackageUpdateInfo = {\n package: BlockPackIdNoVersion;\n versions: Set<String>;\n};\n\nexport class BlockRegistryV2 {\n constructor(\n private readonly storage: RegistryStorage,\n private readonly logger?: MiLogger\n ) {}\n\n private async updateRegistry() {\n this.logger?.info('Initiating registry refresh...');\n\n // reading update requests\n const packagesToUpdate = new Map<string, PackageUpdateInfo>();\n const seedPaths: string[] = [];\n const rawSeedPaths = await this.storage.listFiles(VersionUpdatesPrefix);\n this.logger?.info('Packages to be updated:');\n for (const seedPath of rawSeedPaths) {\n const match = seedPath.match(PackageUpdatePattern);\n if (!match) continue;\n seedPaths.push(seedPath);\n const { packageKeyWithoutVersion, organization, name, version, seed } = match.groups!;\n\n let update = packagesToUpdate.get(packageKeyWithoutVersion);\n let added = false;\n if (!update) {\n packagesToUpdate.set(packageKeyWithoutVersion, {\n package: { organization, name },\n versions: new Set([version])\n });\n added = true;\n } else if (!update.versions.has(version)) {\n update.versions.add(version);\n added = true;\n }\n this.logger?.info(` - ${organization}:${name}:${version} added:${added}`);\n }\n\n // loading global overview\n const overviewContent = await this.storage.getFile(GlobalOverviewPath);\n const overview: GlobalOverviewReg =\n overviewContent === undefined\n ? { schema: 'v2', packages: [] }\n : GlobalOverviewReg.parse(JSON.parse(overviewContent.toString()));\n let overviewPackages = overview.packages;\n this.logger?.info(`Global overview loaded, ${overviewPackages.length} records`);\n\n // updating packages\n for (const [, packageInfo] of packagesToUpdate.entries()) {\n // reading existing overview\n const overviewFile = packageOverviewPath(packageInfo.package);\n const pOverviewContent = await this.storage.getFile(overviewFile);\n let packageOverview: PackageOverview =\n pOverviewContent === undefined\n ? { schema: 'v2', versions: [] }\n : PackageOverview.parse(JSON.parse(pOverviewContent.toString()));\n this.logger?.info(\n `Updating ${packageInfo.package.organization}:${packageInfo.package.name} overview, ${packageOverview.versions.length} records`\n );\n\n // removing versions that we will update\n const newVersions = packageOverview.versions.filter(\n (e) => !packageInfo.versions.has(e.id.version)\n );\n\n // reading new entries\n for (const [v] of packageInfo.versions.entries()) {\n const version = v.toString();\n const manifestContent = await this.storage.getFile(\n packageContentPrefix({\n ...packageInfo.package,\n version\n }) + ManifestSuffix\n );\n if (!manifestContent) continue; // absent package\n newVersions.push(\n BlockPackDescriptionManifestAddRelativePathPrefix(version).parse(\n BlockPackManifest.parse(JSON.parse(manifestContent.toString('utf8'))).description\n )\n );\n }\n\n // sorting entries according to version\n newVersions.sort((e1, e2) => compareSemver(e2.id.version, e1.id.version));\n\n // write package overview back\n await this.storage.putFile(\n overviewFile,\n Buffer.from(\n JSON.stringify({ schema: 'v2', versions: newVersions } satisfies PackageOverview)\n )\n );\n this.logger?.info(`Done (${newVersions.length} records)`);\n\n // patching corresponding entry in overview\n overviewPackages = overviewPackages.filter(\n (e) =>\n e.id.organization !== packageInfo.package.organization ||\n e.id.name !== packageInfo.package.name\n );\n overviewPackages.push({\n id: {\n organization: packageInfo.package.organization,\n name: packageInfo.package.name\n },\n allVersions: newVersions.map((e) => e.id.version).reverse(),\n latest: BlockPackDescriptionManifestAddRelativePathPrefix(packageInfo.package.name).parse(\n newVersions[0]\n )\n });\n }\n\n // writing global overview\n await this.storage.putFile(\n GlobalOverviewPath,\n Buffer.from(\n JSON.stringify({ schema: 'v2', packages: overviewPackages } satisfies GlobalOverviewReg)\n )\n );\n this.logger?.info(`Global overview updated (${overviewPackages.length} records)`);\n\n // deleting seeds\n await this.storage.deleteFiles(...seedPaths.map((sp) => `${VersionUpdatesPrefix}${sp}`));\n this.logger?.info(`Version update requests cleared`);\n }\n\n public async updateIfNeeded(force: boolean = false): Promise<void> {\n // implementation of main convergence algorithm\n\n this.logger?.info(`Checking if registry requires refresh...`);\n const updateRequestSeed = await this.storage.getFile(GlobalUpdateSeedInFile);\n const currentUpdatedSeed = await this.storage.getFile(GlobalUpdateSeedOutFile);\n if (!force && updateRequestSeed === undefined && currentUpdatedSeed === undefined) return;\n if (\n !force &&\n updateRequestSeed !== undefined &&\n currentUpdatedSeed !== undefined &&\n updateRequestSeed.equals(currentUpdatedSeed)\n )\n return;\n\n await this.updateRegistry();\n\n if (updateRequestSeed) {\n await this.storage.putFile(GlobalUpdateSeedOutFile, updateRequestSeed);\n this.logger?.info(`Refresh finished`);\n }\n }\n\n public async getPackageOverview(\n name: BlockPackIdNoVersion\n ): Promise<undefined | PackageOverview> {\n const content = await this.storage.getFile(packageOverviewPath(name));\n if (content === undefined) return undefined;\n return PackageOverview.parse(JSON.parse(content.toString()));\n }\n\n public async getGlobalOverview(): Promise<undefined | GlobalOverviewReg> {\n const content = await this.storage.getFile(GlobalOverviewPath);\n if (content === undefined) return undefined;\n return GlobalOverviewReg.parse(JSON.parse(content.toString()));\n }\n\n // public async getGlobalOverviewExplicitBytes(): Promise<undefined | GlobalOverviewReg> {\n // const content = await this.storage.getFile(GlobalOverviewPath);\n // if (content === undefined) return undefined;\n // return GlobalOverviewReg.parse(JSON.parse(content.toString()));\n // }\n\n public async publishPackage(\n manifest: BlockPackManifest,\n fileReader: RelativeContentReader\n ): Promise<void> {\n const prefix = packageContentPrefix(manifest.description.id);\n // uploading content files\n for (const f of manifest.files) {\n const bytes = await fileReader(f.name);\n if (bytes.length !== f.size)\n throw new Error(\n `Actual file size don't match file size from the manifest file for ${f.name} (actual = ${bytes.length}; manifest = ${f.size})`\n );\n const sha256 = Buffer.from(await crypto.subtle.digest('sha-256', bytes))\n .toString('hex')\n .toUpperCase();\n if (sha256 !== f.sha256.toUpperCase())\n throw new Error(\n `Actual file SHA-256 don't match the checksum from the manifest file for ${f.name} (actual = ${sha256}; manifest = ${f.sha256.toUpperCase()})`\n );\n\n const dst = prefix + '/' + f.name;\n this.logger?.info(`Uploading ${f.name} -> ${dst} ...`);\n await this.storage.putFile(dst, bytes);\n }\n\n // uploading manifest as the last upload action\n const manifestDst = prefix + '/' + ManifestFileName;\n this.logger?.info(`Uploading manifest to ${manifestDst} ...`);\n await this.storage.putFile(manifestDst, Buffer.from(JSON.stringify(manifest)));\n\n // adding update seed\n const seed = randomUUID();\n const seedPath = packageUpdateSeedPath(manifest.description.id, seed);\n this.logger?.info(`Creating update seed at ${seedPath} ...`);\n await this.storage.putFile(seedPath, Buffer.from(seed));\n this.logger?.info(`Touching global update seed ${GlobalUpdateSeedInFile} ...`);\n await this.storage.putFile(GlobalUpdateSeedInFile, Buffer.from(seed));\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 } from '@milaboratories/pl-model-middle-layer';\nimport { storageByUrl } from '../lib/storage';\nimport { BlockRegistryV2 } from '../v2/registry/registry';\nimport path from 'node:path';\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 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(Publish);\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 const manifestPath = path.resolve(flags.manifest);\n const manifest = BlockPackManifest.parse(\n JSON.parse(await fs.promises.readFile(manifestPath, { encoding: 'utf-8' }))\n );\n const manifestRoot = path.dirname(manifestPath);\n\n this.log(`Manifest root = ${manifestRoot}`);\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.refresh) await registry.updateIfNeeded();\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","import BuildMeta from './build-meta';\nimport BuildModel from './build-model';\nimport PackBlock from './pack-block';\nimport Publish from './publish';\nimport UploadPackageV1 from './upload-package-v1';\n\n// prettier-ignore\nexport const COMMANDS = {\n 'upload-package-v1': UploadPackageV1,\n 'pack': PackBlock,\n 'build-model': BuildModel,\n 'build-meta': BuildMeta,\n 'publish': Publish,\n};\n"],"names":["_BuildMeta","Command","flags","modulePath","path","descriptionRaw","loadPackDescriptionRaw","metaEmbedded","BlockPackMetaEmbed","BlockPackMetaDescription","fs","__publicField","Flags","BuildMeta","getFileContent","error","_BuildModel","model","platforma","config","code","BuildModel","_PackBlock","description","loadPackDescription","buildBlockPackDist","PackBlock","MainPrefix","ManifestFileName","packageContentPrefix","bp","ManifestSuffix","PackageOverview","z","BlockPackDescriptionManifest","packageOverviewPath","GlobalOverviewPath","GlobalOverviewEntry","descriptionType","BlockPackIdNoVersion","GlobalOverview","GlobalOverviewReg","VersionUpdatesPrefix","packageUpdateSeedPath","seed","PackageUpdatePattern","GlobalUpdateSeedInFile","GlobalUpdateSeedOutFile","BlockRegistryV2","storage","logger","_a","packagesToUpdate","seedPaths","rawSeedPaths","_b","seedPath","match","packageKeyWithoutVersion","organization","name","version","update","added","_c","overviewContent","overviewPackages","_d","packageInfo","overviewFile","pOverviewContent","packageOverview","_e","newVersions","e","v","manifestContent","BlockPackDescriptionManifestAddRelativePathPrefix","BlockPackManifest","e1","e2","compareSemver","_f","_g","sp","_h","force","updateRequestSeed","currentUpdatedSeed","content","manifest","fileReader","prefix","f","bytes","sha256","dst","manifestDst","randomUUID","_Publish","manifestPath","manifestRoot","storageByUrl","registry","OclifLoggerAdapter","file","Publish","parseTargetFile","arg","src","destName","targetFile","BasicConfigFields","_UploadPackageV1","configFromFlags","PlRegPackageConfigDataShard","field","YAML","conf","getConfig","builder","UploadPackageV1","COMMANDS"],"mappings":"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"}
|
package/dist/cli.mjs
CHANGED
|
@@ -1,187 +1,373 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { Command as
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
|
|
1
|
+
var te = Object.defineProperty;
|
|
2
|
+
var ae = (a, e, t) => e in a ? te(a, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : a[e] = t;
|
|
3
|
+
var g = (a, e, t) => ae(a, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
+
import { Command as z, Flags as c } from "@oclif/core";
|
|
5
|
+
import p from "node:path";
|
|
6
|
+
import v from "node:fs";
|
|
7
|
+
import { z as u } from "zod";
|
|
8
|
+
import "mime-types";
|
|
9
|
+
import "tar";
|
|
10
|
+
import "@milaboratories/resolve-helper";
|
|
11
|
+
import { l as se, B as ie, a as re, b as oe, c as ne, d as T, s as ce, e as le, P as de, g as fe } from "./config-rGaQLD-7.mjs";
|
|
12
|
+
import { BlockPackDescriptionManifest as Q, BlockPackIdNoVersion as ge, BlockPackManifest as X } from "@milaboratories/pl-model-middle-layer";
|
|
13
|
+
import { OclifLoggerAdapter as ee } from "@milaboratories/ts-helpers-oclif";
|
|
14
|
+
import { randomUUID as pe } from "node:crypto";
|
|
15
|
+
import q from "yaml";
|
|
16
|
+
const R = class R extends z {
|
|
11
17
|
async run() {
|
|
12
|
-
const { flags: e } = await this.parse(
|
|
13
|
-
|
|
18
|
+
const { flags: e } = await this.parse(R), t = p.resolve(e.modulePath), s = await se(t), o = await ie.parseAsync(
|
|
19
|
+
re(t).parse(s.meta)
|
|
14
20
|
);
|
|
15
|
-
await
|
|
21
|
+
await v.promises.writeFile(p.resolve(e.destination), JSON.stringify(o));
|
|
16
22
|
}
|
|
17
23
|
};
|
|
18
|
-
|
|
19
|
-
modulePath:
|
|
24
|
+
g(R, "description", "Extracts meta information from blocks package.json and outputs meta.json with embedded binary and textual information linked from the meta section."), g(R, "flags", {
|
|
25
|
+
modulePath: c.string({
|
|
20
26
|
char: "i",
|
|
21
27
|
summary: "input module path",
|
|
22
28
|
helpValue: "<path>",
|
|
23
29
|
default: "."
|
|
24
30
|
}),
|
|
25
|
-
destination:
|
|
31
|
+
destination: c.string({
|
|
26
32
|
char: "o",
|
|
27
33
|
summary: "output meta.json file",
|
|
28
34
|
helpValue: "<path>",
|
|
29
35
|
required: !0
|
|
30
36
|
})
|
|
31
37
|
});
|
|
32
|
-
let
|
|
33
|
-
async function
|
|
38
|
+
let _ = R;
|
|
39
|
+
async function me(a) {
|
|
34
40
|
try {
|
|
35
|
-
return await
|
|
41
|
+
return await v.promises.readFile(a, "utf8");
|
|
36
42
|
} catch (e) {
|
|
37
43
|
if (e.code === "ENOENT")
|
|
38
44
|
return;
|
|
39
45
|
throw e;
|
|
40
46
|
}
|
|
41
47
|
}
|
|
42
|
-
const
|
|
48
|
+
const E = class E extends z {
|
|
43
49
|
async run() {
|
|
44
|
-
const { flags: e } = await this.parse(
|
|
45
|
-
let { model:
|
|
46
|
-
if (
|
|
47
|
-
const { config:
|
|
48
|
-
if (!
|
|
50
|
+
const { flags: e } = await this.parse(E), t = p.resolve(e.modulePath);
|
|
51
|
+
let { model: s, platforma: o } = require(t);
|
|
52
|
+
if (s || (s = o), !s) throw new Error('"model" export not found');
|
|
53
|
+
const { config: i } = s;
|
|
54
|
+
if (!i)
|
|
49
55
|
throw new Error(
|
|
50
56
|
'Malformed "model" object, check it is created with "BlockModel" and ".done()" is executed as the call in the chain.'
|
|
51
57
|
);
|
|
52
|
-
if (!("canRun" in
|
|
58
|
+
if (!("canRun" in i || "inputsValid" in i) || !("outputs" in i) || !("sections" in i))
|
|
53
59
|
throw new Error('"config" has unexpected structure');
|
|
54
|
-
const
|
|
55
|
-
|
|
60
|
+
const r = await me(e.sourceBundle);
|
|
61
|
+
r !== void 0 && (i.code = {
|
|
56
62
|
type: "plain",
|
|
57
|
-
content:
|
|
58
|
-
}), await
|
|
63
|
+
content: r
|
|
64
|
+
}), await v.promises.writeFile(p.resolve(e.destination), JSON.stringify(i));
|
|
59
65
|
}
|
|
60
66
|
};
|
|
61
|
-
|
|
62
|
-
modulePath:
|
|
67
|
+
g(E, "description", "Extracts and outputs block model JSON from pre-built block model module"), g(E, "flags", {
|
|
68
|
+
modulePath: c.string({
|
|
63
69
|
char: "i",
|
|
64
70
|
summary: "input module path",
|
|
65
71
|
helpValue: "<path>",
|
|
66
72
|
default: "."
|
|
67
73
|
}),
|
|
68
|
-
sourceBundle:
|
|
74
|
+
sourceBundle: c.string({
|
|
69
75
|
char: "b",
|
|
70
76
|
summary: "bundled model code to embed into the model for callback-based rendering to work",
|
|
71
77
|
helpValue: "<path>",
|
|
72
78
|
default: "./dist/bundle.js"
|
|
73
79
|
}),
|
|
74
|
-
destination:
|
|
80
|
+
destination: c.string({
|
|
75
81
|
char: "o",
|
|
76
82
|
summary: "output model file",
|
|
77
83
|
helpValue: "<path>",
|
|
78
84
|
default: "./dist/model.json"
|
|
79
85
|
})
|
|
80
86
|
});
|
|
81
|
-
let
|
|
82
|
-
const
|
|
87
|
+
let j = E;
|
|
88
|
+
const x = class x extends z {
|
|
83
89
|
async run() {
|
|
84
|
-
const { flags: e } = await this.parse(
|
|
85
|
-
await
|
|
90
|
+
const { flags: e } = await this.parse(x), t = await oe(p.resolve(e.modulePath));
|
|
91
|
+
await ne(t, p.resolve(e.destinationPath));
|
|
86
92
|
}
|
|
87
93
|
};
|
|
88
|
-
|
|
89
|
-
modulePath:
|
|
94
|
+
g(x, "description", "Builds block pack and outputs a block pack manifest consolidating all references assets into a single folder"), g(x, "flags", {
|
|
95
|
+
modulePath: c.string({
|
|
90
96
|
char: "i",
|
|
91
97
|
summary: "input module path",
|
|
92
98
|
helpValue: "<path>",
|
|
93
99
|
default: "."
|
|
94
100
|
}),
|
|
95
|
-
destinationPath:
|
|
101
|
+
destinationPath: c.string({
|
|
96
102
|
char: "o",
|
|
97
103
|
summary: "output folder",
|
|
98
104
|
helpValue: "<path>",
|
|
99
105
|
default: "./block-pack"
|
|
100
106
|
})
|
|
101
107
|
});
|
|
102
|
-
let
|
|
103
|
-
|
|
104
|
-
|
|
108
|
+
let I = x;
|
|
109
|
+
const M = "v2/", L = "manifest.json";
|
|
110
|
+
function K(a) {
|
|
111
|
+
return `${M}${a.organization}/${a.name}/${a.version}`;
|
|
112
|
+
}
|
|
113
|
+
const ue = "/" + L, Y = u.object({
|
|
114
|
+
schema: u.literal("v2"),
|
|
115
|
+
versions: u.array(Q)
|
|
116
|
+
});
|
|
117
|
+
function W(a) {
|
|
118
|
+
return `${M}${a.organization}/${a.name}/overview.json`;
|
|
119
|
+
}
|
|
120
|
+
const G = `${M}overview.json`;
|
|
121
|
+
function he(a) {
|
|
122
|
+
return u.object({
|
|
123
|
+
id: ge,
|
|
124
|
+
allVersions: u.array(u.string()),
|
|
125
|
+
latest: a
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
function ve(a) {
|
|
129
|
+
return u.object({
|
|
130
|
+
schema: u.literal("v2"),
|
|
131
|
+
packages: u.array(he(a))
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
const H = ve(Q), B = "_updates_v2/per_package_version/";
|
|
135
|
+
function we(a, e) {
|
|
136
|
+
return `${B}${a.organization}/${a.name}/${a.version}/${e}`;
|
|
137
|
+
}
|
|
138
|
+
const ke = /(?<packageKeyWithoutVersion>(?<organization>[^\/]+)\/(?<name>[^\/]+))\/(?<version>[^\/]+)\/(?<seed>[^\/]+)$/, U = "_updates_v2/_global_update_in", Z = "_updates_v2/_global_update_out";
|
|
139
|
+
class ye {
|
|
140
|
+
constructor(e, t) {
|
|
141
|
+
this.storage = e, this.logger = t;
|
|
142
|
+
}
|
|
143
|
+
async updateRegistry() {
|
|
144
|
+
var n, h, w, P, f, k, b, $;
|
|
145
|
+
(n = this.logger) == null || n.info("Initiating registry refresh...");
|
|
146
|
+
const e = /* @__PURE__ */ new Map(), t = [], s = await this.storage.listFiles(B);
|
|
147
|
+
(h = this.logger) == null || h.info("Packages to be updated:");
|
|
148
|
+
for (const l of s) {
|
|
149
|
+
const F = l.match(ke);
|
|
150
|
+
if (!F) continue;
|
|
151
|
+
t.push(l);
|
|
152
|
+
const { packageKeyWithoutVersion: S, organization: N, name: m, version: d, seed: O } = F.groups;
|
|
153
|
+
let y = e.get(S), A = !1;
|
|
154
|
+
y ? y.versions.has(d) || (y.versions.add(d), A = !0) : (e.set(S, {
|
|
155
|
+
package: { organization: N, name: m },
|
|
156
|
+
versions: /* @__PURE__ */ new Set([d])
|
|
157
|
+
}), A = !0), (w = this.logger) == null || w.info(` - ${N}:${m}:${d} added:${A}`);
|
|
158
|
+
}
|
|
159
|
+
const o = await this.storage.getFile(G);
|
|
160
|
+
let r = (o === void 0 ? { schema: "v2", packages: [] } : H.parse(JSON.parse(o.toString()))).packages;
|
|
161
|
+
(P = this.logger) == null || P.info(`Global overview loaded, ${r.length} records`);
|
|
162
|
+
for (const [, l] of e.entries()) {
|
|
163
|
+
const F = W(l.package), S = await this.storage.getFile(F);
|
|
164
|
+
let N = S === void 0 ? { schema: "v2", versions: [] } : Y.parse(JSON.parse(S.toString()));
|
|
165
|
+
(f = this.logger) == null || f.info(
|
|
166
|
+
`Updating ${l.package.organization}:${l.package.name} overview, ${N.versions.length} records`
|
|
167
|
+
);
|
|
168
|
+
const m = N.versions.filter(
|
|
169
|
+
(d) => !l.versions.has(d.id.version)
|
|
170
|
+
);
|
|
171
|
+
for (const [d] of l.versions.entries()) {
|
|
172
|
+
const O = d.toString(), y = await this.storage.getFile(
|
|
173
|
+
K({
|
|
174
|
+
...l.package,
|
|
175
|
+
version: O
|
|
176
|
+
}) + ue
|
|
177
|
+
);
|
|
178
|
+
y && m.push(
|
|
179
|
+
T(O).parse(
|
|
180
|
+
X.parse(JSON.parse(y.toString("utf8"))).description
|
|
181
|
+
)
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
m.sort((d, O) => ce.compare(O.id.version, d.id.version)), await this.storage.putFile(
|
|
185
|
+
F,
|
|
186
|
+
Buffer.from(
|
|
187
|
+
JSON.stringify({ schema: "v2", versions: m })
|
|
188
|
+
)
|
|
189
|
+
), (k = this.logger) == null || k.info(`Done (${m.length} records)`), r = r.filter(
|
|
190
|
+
(d) => d.id.organization !== l.package.organization || d.id.name !== l.package.name
|
|
191
|
+
), r.push({
|
|
192
|
+
id: {
|
|
193
|
+
organization: l.package.organization,
|
|
194
|
+
name: l.package.name
|
|
195
|
+
},
|
|
196
|
+
allVersions: m.map((d) => d.id.version).reverse(),
|
|
197
|
+
latest: T(l.package.name).parse(
|
|
198
|
+
m[0]
|
|
199
|
+
)
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
await this.storage.putFile(
|
|
203
|
+
G,
|
|
204
|
+
Buffer.from(
|
|
205
|
+
JSON.stringify({ schema: "v2", packages: r })
|
|
206
|
+
)
|
|
207
|
+
), (b = this.logger) == null || b.info(`Global overview updated (${r.length} records)`), await this.storage.deleteFiles(...t.map((l) => `${B}${l}`)), ($ = this.logger) == null || $.info("Version update requests cleared");
|
|
208
|
+
}
|
|
209
|
+
async updateIfNeeded(e = !1) {
|
|
210
|
+
var o, i;
|
|
211
|
+
(o = this.logger) == null || o.info("Checking if registry requires refresh...");
|
|
212
|
+
const t = await this.storage.getFile(U), s = await this.storage.getFile(Z);
|
|
213
|
+
!e && t === void 0 && s === void 0 || !e && t !== void 0 && s !== void 0 && t.equals(s) || (await this.updateRegistry(), t && (await this.storage.putFile(Z, t), (i = this.logger) == null || i.info("Refresh finished")));
|
|
214
|
+
}
|
|
215
|
+
async getPackageOverview(e) {
|
|
216
|
+
const t = await this.storage.getFile(W(e));
|
|
217
|
+
if (t !== void 0)
|
|
218
|
+
return Y.parse(JSON.parse(t.toString()));
|
|
219
|
+
}
|
|
220
|
+
async getGlobalOverview() {
|
|
221
|
+
const e = await this.storage.getFile(G);
|
|
222
|
+
if (e !== void 0)
|
|
223
|
+
return H.parse(JSON.parse(e.toString()));
|
|
224
|
+
}
|
|
225
|
+
// public async getGlobalOverviewExplicitBytes(): Promise<undefined | GlobalOverviewReg> {
|
|
226
|
+
// const content = await this.storage.getFile(GlobalOverviewPath);
|
|
227
|
+
// if (content === undefined) return undefined;
|
|
228
|
+
// return GlobalOverviewReg.parse(JSON.parse(content.toString()));
|
|
229
|
+
// }
|
|
230
|
+
async publishPackage(e, t) {
|
|
231
|
+
var n, h, w, P;
|
|
232
|
+
const s = K(e.description.id);
|
|
233
|
+
for (const f of e.files) {
|
|
234
|
+
const k = await t(f.name);
|
|
235
|
+
if (k.length !== f.size)
|
|
236
|
+
throw new Error(
|
|
237
|
+
`Actual file size don't match file size from the manifest file for ${f.name} (actual = ${k.length}; manifest = ${f.size})`
|
|
238
|
+
);
|
|
239
|
+
const b = Buffer.from(await crypto.subtle.digest("sha-256", k)).toString("hex").toUpperCase();
|
|
240
|
+
if (b !== f.sha256.toUpperCase())
|
|
241
|
+
throw new Error(
|
|
242
|
+
`Actual file SHA-256 don't match the checksum from the manifest file for ${f.name} (actual = ${b}; manifest = ${f.sha256.toUpperCase()})`
|
|
243
|
+
);
|
|
244
|
+
const $ = s + "/" + f.name;
|
|
245
|
+
(n = this.logger) == null || n.info(`Uploading ${f.name} -> ${$} ...`), await this.storage.putFile($, k);
|
|
246
|
+
}
|
|
247
|
+
const o = s + "/" + L;
|
|
248
|
+
(h = this.logger) == null || h.info(`Uploading manifest to ${o} ...`), await this.storage.putFile(o, Buffer.from(JSON.stringify(e)));
|
|
249
|
+
const i = pe(), r = we(e.description.id, i);
|
|
250
|
+
(w = this.logger) == null || w.info(`Creating update seed at ${r} ...`), await this.storage.putFile(r, Buffer.from(i)), (P = this.logger) == null || P.info(`Touching global update seed ${U} ...`), await this.storage.putFile(U, Buffer.from(i));
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
const V = class V extends z {
|
|
254
|
+
async run() {
|
|
255
|
+
const { flags: e } = await this.parse(V), t = p.resolve(e.manifest), s = X.parse(
|
|
256
|
+
JSON.parse(await v.promises.readFile(t, { encoding: "utf-8" }))
|
|
257
|
+
), o = p.dirname(t);
|
|
258
|
+
this.log(`Manifest root = ${o}`);
|
|
259
|
+
const i = le(e.registry), r = new ye(i, new ee(this));
|
|
260
|
+
await r.publishPackage(
|
|
261
|
+
s,
|
|
262
|
+
async (n) => Buffer.from(await v.promises.readFile(p.resolve(o, n)))
|
|
263
|
+
), e.refresh && await r.updateIfNeeded();
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
g(V, "description", "Publishes the block package and refreshes the registry (for v2 block-pack schema)"), g(V, "flags", {
|
|
267
|
+
registry: c.string({
|
|
268
|
+
char: "r",
|
|
269
|
+
summary: "full address of the registry",
|
|
270
|
+
helpValue: "<address>",
|
|
271
|
+
env: "PL_REGISTRY",
|
|
272
|
+
required: !0
|
|
273
|
+
}),
|
|
274
|
+
manifest: c.file({
|
|
275
|
+
char: "m",
|
|
276
|
+
summary: "manifest file path",
|
|
277
|
+
exists: !0,
|
|
278
|
+
default: `./block-pack/${L}`
|
|
279
|
+
}),
|
|
280
|
+
refresh: c.boolean({
|
|
281
|
+
summary: "refresh repository after adding the package",
|
|
282
|
+
default: !0,
|
|
283
|
+
allowNo: !0,
|
|
284
|
+
env: "PL_REGISTRY_REFRESH"
|
|
285
|
+
})
|
|
286
|
+
});
|
|
287
|
+
let J = V;
|
|
288
|
+
function Pe(a) {
|
|
289
|
+
const e = a.match(/(?<destName>[^\/\\]+)=(?<src>.*)/);
|
|
105
290
|
if (e) {
|
|
106
|
-
const { src: t, destName:
|
|
107
|
-
return { src: t, destName:
|
|
291
|
+
const { src: t, destName: s } = e.groups;
|
|
292
|
+
return { src: t, destName: s };
|
|
108
293
|
} else
|
|
109
|
-
return { src:
|
|
294
|
+
return { src: a, destName: p.basename(a) };
|
|
110
295
|
}
|
|
111
|
-
const
|
|
296
|
+
const be = c.custom({
|
|
112
297
|
summary: "target files to upload",
|
|
113
298
|
helpValue: "file_path | package_name=file_path",
|
|
114
|
-
parse: async (
|
|
115
|
-
}),
|
|
299
|
+
parse: async (a) => Pe(a)
|
|
300
|
+
}), $e = ["registry", "organization", "package", "version"], C = class C extends z {
|
|
116
301
|
async run() {
|
|
117
|
-
const { flags: e } = await this.parse(
|
|
118
|
-
for (const
|
|
302
|
+
const { flags: e } = await this.parse(C), t = de.parse({});
|
|
303
|
+
for (const n of $e) e[n] && (t[n] = e[n]);
|
|
119
304
|
e.meta && (e.meta.endsWith(".json") ? t.meta = JSON.parse(
|
|
120
|
-
await
|
|
121
|
-
) : e.meta.endsWith(".yaml") && (t.meta =
|
|
122
|
-
await
|
|
305
|
+
await v.promises.readFile(e.meta, { encoding: "utf-8" })
|
|
306
|
+
) : e.meta.endsWith(".yaml") && (t.meta = q.parse(
|
|
307
|
+
await v.promises.readFile(e.meta, { encoding: "utf-8" })
|
|
123
308
|
)));
|
|
124
|
-
for (const
|
|
125
|
-
t.files[
|
|
126
|
-
const
|
|
127
|
-
this.log(
|
|
128
|
-
const
|
|
129
|
-
for (const [
|
|
130
|
-
this.log(`Uploading ${
|
|
131
|
-
const
|
|
132
|
-
await
|
|
309
|
+
for (const n of e.file)
|
|
310
|
+
t.files[n.destName] = n.src;
|
|
311
|
+
const s = await fe(t);
|
|
312
|
+
this.log(q.stringify(s.conf));
|
|
313
|
+
const o = s.createRegistry(new ee(this)), i = s.fullPackageName, r = o.constructNewPackage(i);
|
|
314
|
+
for (const [n, h] of Object.entries(s.conf.files)) {
|
|
315
|
+
this.log(`Uploading ${h} -> ${n} ...`);
|
|
316
|
+
const w = await v.promises.readFile(h);
|
|
317
|
+
await r.addFile(n, w);
|
|
133
318
|
}
|
|
134
|
-
this.log("Uploading meta information..."), await
|
|
319
|
+
this.log("Uploading meta information..."), await r.writeMeta(s.conf.meta), await r.finish(), e.refresh && await o.updateIfNeeded();
|
|
135
320
|
}
|
|
136
321
|
};
|
|
137
|
-
|
|
138
|
-
registry:
|
|
322
|
+
g(C, "description", "Uploads V1 package and refreshes the registry"), g(C, "flags", {
|
|
323
|
+
registry: c.string({
|
|
139
324
|
char: "r",
|
|
140
325
|
summary: "full address of the registry or alias from .pl.reg",
|
|
141
326
|
helpValue: "<address|alias>",
|
|
142
327
|
env: "PL_REGISTRY"
|
|
143
328
|
}),
|
|
144
|
-
organization:
|
|
329
|
+
organization: c.string({
|
|
145
330
|
char: "o",
|
|
146
331
|
summary: "target organisation",
|
|
147
332
|
env: "PL_PACKAGE_ORGANIZATION"
|
|
148
333
|
}),
|
|
149
|
-
package:
|
|
334
|
+
package: c.string({
|
|
150
335
|
char: "p",
|
|
151
336
|
summary: "target package",
|
|
152
337
|
env: "PL_PACKAGE_NAME"
|
|
153
338
|
}),
|
|
154
|
-
version:
|
|
339
|
+
version: c.string({
|
|
155
340
|
char: "v",
|
|
156
341
|
summary: "target version",
|
|
157
342
|
env: "PL_PACKAGE_VERSION"
|
|
158
343
|
}),
|
|
159
|
-
meta:
|
|
344
|
+
meta: c.file({
|
|
160
345
|
char: "m",
|
|
161
346
|
summary: "json file containing meta information to associate with tha package",
|
|
162
347
|
exists: !0
|
|
163
348
|
}),
|
|
164
|
-
file:
|
|
349
|
+
file: be({
|
|
165
350
|
char: "f",
|
|
166
351
|
summary: "package files",
|
|
167
352
|
multiple: !0,
|
|
168
353
|
default: []
|
|
169
354
|
}),
|
|
170
|
-
refresh:
|
|
355
|
+
refresh: c.boolean({
|
|
171
356
|
summary: "refresh repository after adding the package",
|
|
172
357
|
default: !0,
|
|
173
358
|
allowNo: !0,
|
|
174
359
|
env: "PL_REGISTRY_REFRESH"
|
|
175
360
|
})
|
|
176
361
|
});
|
|
177
|
-
let
|
|
178
|
-
const
|
|
179
|
-
"upload-package-v1":
|
|
180
|
-
pack:
|
|
181
|
-
"build-model":
|
|
182
|
-
"build-meta":
|
|
362
|
+
let D = C;
|
|
363
|
+
const _e = {
|
|
364
|
+
"upload-package-v1": D,
|
|
365
|
+
pack: I,
|
|
366
|
+
"build-model": j,
|
|
367
|
+
"build-meta": _,
|
|
368
|
+
publish: J
|
|
183
369
|
};
|
|
184
370
|
export {
|
|
185
|
-
|
|
371
|
+
_e as COMMANDS
|
|
186
372
|
};
|
|
187
373
|
//# sourceMappingURL=cli.mjs.map
|