@platforma-sdk/block-tools 2.8.4 → 2.9.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 CHANGED
@@ -1,3 +1,3 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./config-C8wPuCgh.js`);let t=require(`@oclif/core`),n=require(`node:path`);n=e.Ct(n);let r=require(`node:fs`);r=e.Ct(r);let i=require(`@milaboratories/pl-model-middle-layer`),a=require(`@milaboratories/ts-helpers-oclif`),o=require(`yaml`);o=e.Ct(o);let s=require(`@platforma-sdk/blocks-deps-updater`);var c=class i extends t.Command{static description=`Extracts meta information from blocks package.json and outputs meta.json with embedded binary and textual information linked from the meta section.`;static flags={modulePath:t.Flags.string({char:`i`,summary:`input module path`,helpValue:`<path>`,default:`.`}),destination:t.Flags.string({char:`o`,summary:`output meta.json file`,helpValue:`<path>`,required:!0})};async run(){let{flags:t}=await this.parse(i),a=n.default.resolve(t.modulePath),o=await e.Y(a),s=await e.st.parseAsync(e.ot(a).parse(o.meta));await r.default.promises.writeFile(n.default.resolve(t.destination),JSON.stringify(s))}};async function l(e){try{return await r.default.promises.readFile(e,`utf8`)}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return;throw e}}var u=class e extends t.Command{static description=`Extracts and outputs block model JSON from pre-built block model module`;static flags={modulePath:t.Flags.string({char:`i`,summary:`input module path`,helpValue:`<path>`,default:`.`}),sourceBundle:t.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:t.Flags.string({char:`o`,summary:`output model file`,helpValue:`<path>`,default:`./dist/model.json`})};async run(){let{flags:t}=await this.parse(e),i=n.default.resolve(t.modulePath),{model:a,platforma:o}=require(i);if(a||=o,!a)throw Error(`"model" export not found`);let{config:s}=a;if(!s)throw Error(`Malformed "model" object, check it is created with "BlockModel" and ".done()" is executed as the call in the chain.`);if(!(`outputs`in s)||!(`sections`in s))throw Error(`"config" has unexpected structure`);let c=await l(t.sourceBundle);c!==void 0&&(s.code={type:`plain`,content:c}),await r.default.promises.writeFile(n.default.resolve(t.destination),JSON.stringify(s))}},d=class n extends t.Command{static description=`List all available global overview snapshots in the registry`;static flags={registry:t.Flags.string({char:`r`,summary:`full address of the registry`,helpValue:`<address>`,env:`PL_REGISTRY`,required:!0}),json:t.Flags.boolean({summary:`output in JSON format`,default:!1})};async run(){let{flags:t}=await this.parse(n),r=await new e.b(e._(t.registry),new a.OclifLoggerAdapter(this)).listGlobalOverviewSnapshots();if(t.json)this.log(JSON.stringify(r,null,2));else if(r.length===0)this.log(`No snapshots found.`);else{this.log(`Found ${r.length} snapshot(s):\n`);for(let e of r)this.log(` ${e.timestamp}`),this.log(` Path: ${e.path}`),this.log(``)}}},f=class r extends t.Command{static description=`Mark target block stable`;static flags={modulePath:t.Flags.string({char:`i`,summary:`input module path`,helpValue:`<path>`,default:`.`}),channel:t.Flags.string({char:`c`,hidden:!0,summary:`custom channel`,helpValue:`<channel name>`,default:i.StableChannel}),"version-override":t.Flags.file({char:`v`,summary:`override package version`}),registry:t.Flags.string({char:`r`,summary:`full address of the registry`,helpValue:`<address>`,env:`PL_REGISTRY`,required:!0}),refresh:t.Flags.boolean({summary:`refresh repository after adding the package`,default:!0,allowNo:!0,env:`PL_REGISTRY_REFRESH`}),unmark:t.Flags.boolean({summary:`reverses meaning of this command, flag can be used to remove "stable" flag from the package`,default:!1})};async run(){let{flags:t}=await this.parse(r),o=await e.Y(n.default.resolve(t.modulePath));t[`version-override`]&&(o=(0,i.overrideDescriptionVersion)(o,t[`version-override`]));let s=new e.b(e._(t.registry),new a.OclifLoggerAdapter(this));t.unmark?await s.removePackageFromChannel(o.id,t.channel):await s.addPackageToChannel(o.id,t.channel),t.refresh&&await s.updateIfNeeded()}},p=class r extends t.Command{static description=`Builds block pack and outputs a block pack manifest consolidating all references assets into a single folder`;static flags={modulePath:t.Flags.string({char:`i`,summary:`input module path`,helpValue:`<path>`,default:`.`}),destinationPath:t.Flags.string({char:`o`,summary:`output folder`,helpValue:`<path>`,default:`./block-pack`})};async run(){let{flags:t}=await this.parse(r);await e.Q(await e.J(n.default.resolve(t.modulePath)),n.default.resolve(t.destinationPath))}};function m(e,t){let n={...e};for(let e in t)t[e]&&typeof t[e]==`object`&&!Array.isArray(t[e])&&n[e]&&typeof n[e]==`object`&&!Array.isArray(n[e])?n[e]=m(n[e],t[e]):n[e]=t[e];return n}var h=class o extends t.Command{static description=`Publishes the block package and refreshes the registry (for v2 block-pack schema)`;static flags={registry:t.Flags.string({char:`r`,summary:`full address of the registry`,helpValue:`<address>`,env:`PL_REGISTRY`,required:!0}),manifest:t.Flags.file({char:`m`,summary:`manifest file path`,exists:!0,default:`./block-pack/${e.F}`}),"version-override":t.Flags.file({char:`v`,summary:`override package version`}),refresh:t.Flags.boolean({summary:`refresh repository after adding the package`,default:!0,allowNo:!0,env:`PL_REGISTRY_REFRESH`}),unstable:t.Flags.boolean({summary:`do not add the published package to stable channel`,default:!1,env:`PL_PUBLISH_UNSTABLE`})};async run(){let{flags:t}=await this.parse(o),s=n.default.resolve(t.manifest),c=JSON.parse(await r.default.promises.readFile(s,{encoding:`utf-8`})),l=i.BlockPackManifest.parse(c);l=m(c,l);let u=n.default.dirname(s);this.log(`Manifest root = ${u}`),t[`version-override`]&&(l=(0,i.overrideManifestVersion)(l,t[`version-override`]));let d=new e.b(e._(t.registry),new a.OclifLoggerAdapter(this));await d.publishPackage(l,async e=>Buffer.from(await r.default.promises.readFile(n.default.resolve(u,e)))),t.unstable||(this.log(`Adding package to ${i.StableChannel} channel...`),await d.addPackageToChannel(l.description.id,i.StableChannel)),t.refresh&&await d.updateIfNeeded()}},g=class n extends t.Command{static description=`Refresh overview files based on published but not proecessed artefacts`;static flags={registry:t.Flags.string({char:`r`,summary:`full address of the registry`,helpValue:`<address>`,env:`PL_REGISTRY`,required:!0}),mode:t.Flags.string({char:`m`,summary:`refresh mode (allowed valiues: "force", "normal", "dry-run")`,helpValue:`<mode>`,options:[`force`,`normal`,`dry-run`],env:`PL_REGISTRY_REFRESH_DRY_RUN`,default:`normal`})};async run(){let{flags:t}=await this.parse(n);await new e.b(e._(t.registry),new a.OclifLoggerAdapter(this)).updateIfNeeded(t.mode)}},_=class n extends t.Command{static description=`Restore global overview from a snapshot`;static flags={registry:t.Flags.string({char:`r`,summary:`full address of the registry`,helpValue:`<address>`,env:`PL_REGISTRY`,required:!0}),snapshot:t.Flags.string({char:`s`,summary:`snapshot timestamp ID to restore from`,helpValue:`<timestamp>`,required:!0}),"skip-confirmation":t.Flags.boolean({summary:`skip confirmation prompt (use with caution)`,default:!1})};async run(){let{flags:t}=await this.parse(n),r=new e.b(e._(t.registry),new a.OclifLoggerAdapter(this)),i=await r.listGlobalOverviewSnapshots();if(i.find(e=>e.timestamp===t.snapshot)||this.error(`Snapshot '${t.snapshot}' not found. Available snapshots:\n${i.map(e=>` - ${e.timestamp}`).join(`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./config-xxVy3IQR.js`);let t=require(`@oclif/core`),n=require(`node:path`);n=e._t(n);let r=require(`node:fs`);r=e._t(r);let i=require(`@milaboratories/pl-model-middle-layer`),a=require(`@milaboratories/ts-helpers-oclif`),o=require(`yaml`);o=e._t(o);let s=require(`@platforma-sdk/blocks-deps-updater`);var c=class i extends t.Command{static description=`Extracts meta information from blocks package.json and outputs meta.json with embedded binary and textual information linked from the meta section.`;static flags={modulePath:t.Flags.string({char:`i`,summary:`input module path`,helpValue:`<path>`,default:`.`}),destination:t.Flags.string({char:`o`,summary:`output meta.json file`,helpValue:`<path>`,required:!0})};async run(){let{flags:t}=await this.parse(i),a=n.default.resolve(t.modulePath),o=await e.et(await e.rt((await e.U(a)).meta,a));await r.default.promises.writeFile(n.default.resolve(t.destination),JSON.stringify(o))}};async function l(e){try{return await r.default.promises.readFile(e,`utf8`)}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return;throw e}}var u=class e extends t.Command{static description=`Extracts and outputs block model JSON from pre-built block model module`;static flags={modulePath:t.Flags.string({char:`i`,summary:`input module path`,helpValue:`<path>`,default:`.`}),sourceBundle:t.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:t.Flags.string({char:`o`,summary:`output model file`,helpValue:`<path>`,default:`./dist/model.json`})};async run(){let{flags:t}=await this.parse(e),i=n.default.resolve(t.modulePath),{model:a,platforma:o}=require(i);if(a||=o,!a)throw Error(`"model" export not found`);let{config:s}=a;if(!s)throw Error(`Malformed "model" object, check it is created with "BlockModel" and ".done()" is executed as the call in the chain.`);if(!(`outputs`in s)||!(`sections`in s))throw Error(`"config" has unexpected structure`);let c=await l(t.sourceBundle);c!==void 0&&(s.code={type:`plain`,content:c}),await r.default.promises.writeFile(n.default.resolve(t.destination),JSON.stringify(s))}},d=class n extends t.Command{static description=`List all available global overview snapshots in the registry`;static flags={registry:t.Flags.string({char:`r`,summary:`full address of the registry`,helpValue:`<address>`,env:`PL_REGISTRY`,required:!0}),json:t.Flags.boolean({summary:`output in JSON format`,default:!1})};async run(){let{flags:t}=await this.parse(n),r=await new e.b(e._(t.registry),new a.OclifLoggerAdapter(this)).listGlobalOverviewSnapshots();if(t.json)this.log(JSON.stringify(r,null,2));else if(r.length===0)this.log(`No snapshots found.`);else{this.log(`Found ${r.length} snapshot(s):\n`);for(let e of r)this.log(` ${e.timestamp}`),this.log(` Path: ${e.path}`),this.log(``)}}},f=class r extends t.Command{static description=`Mark target block stable`;static flags={modulePath:t.Flags.string({char:`i`,summary:`input module path`,helpValue:`<path>`,default:`.`}),channel:t.Flags.string({char:`c`,hidden:!0,summary:`custom channel`,helpValue:`<channel name>`,default:i.StableChannel}),"version-override":t.Flags.file({char:`v`,summary:`override package version`}),registry:t.Flags.string({char:`r`,summary:`full address of the registry`,helpValue:`<address>`,env:`PL_REGISTRY`,required:!0}),refresh:t.Flags.boolean({summary:`refresh repository after adding the package`,default:!0,allowNo:!0,env:`PL_REGISTRY_REFRESH`}),unmark:t.Flags.boolean({summary:`reverses meaning of this command, flag can be used to remove "stable" flag from the package`,default:!1})};async run(){let{flags:t}=await this.parse(r),o=await e.U(n.default.resolve(t.modulePath));t[`version-override`]&&(o=(0,i.overrideDescriptionVersion)(o,t[`version-override`]));let s=new e.b(e._(t.registry),new a.OclifLoggerAdapter(this));t.unmark?await s.removePackageFromChannel(o.id,t.channel):await s.addPackageToChannel(o.id,t.channel),t.refresh&&await s.updateIfNeeded()}},p=class r extends t.Command{static description=`Builds block pack and outputs a block pack manifest consolidating all references assets into a single folder`;static flags={modulePath:t.Flags.string({char:`i`,summary:`input module path`,helpValue:`<path>`,default:`.`}),destinationPath:t.Flags.string({char:`o`,summary:`output folder`,helpValue:`<path>`,default:`./block-pack`})};async run(){let{flags:t}=await this.parse(r);await e.K(await e.H(n.default.resolve(t.modulePath)),n.default.resolve(t.destinationPath))}};function m(e,t){let n={...e};for(let e in t)t[e]&&typeof t[e]==`object`&&!Array.isArray(t[e])&&n[e]&&typeof n[e]==`object`&&!Array.isArray(n[e])?n[e]=m(n[e],t[e]):n[e]=t[e];return n}var h=class o extends t.Command{static description=`Publishes the block package and refreshes the registry (for v2 block-pack schema)`;static flags={registry:t.Flags.string({char:`r`,summary:`full address of the registry`,helpValue:`<address>`,env:`PL_REGISTRY`,required:!0}),manifest:t.Flags.file({char:`m`,summary:`manifest file path`,exists:!0,default:`./block-pack/${e.O}`}),"version-override":t.Flags.file({char:`v`,summary:`override package version`}),refresh:t.Flags.boolean({summary:`refresh repository after adding the package`,default:!0,allowNo:!0,env:`PL_REGISTRY_REFRESH`}),unstable:t.Flags.boolean({summary:`do not add the published package to stable channel`,default:!1,env:`PL_PUBLISH_UNSTABLE`})};async run(){let{flags:t}=await this.parse(o),s=n.default.resolve(t.manifest),c=JSON.parse(await r.default.promises.readFile(s,{encoding:`utf-8`})),l=i.BlockPackManifest.parse(c);l=m(c,l);let u=n.default.dirname(s);this.log(`Manifest root = ${u}`),t[`version-override`]&&(l=(0,i.overrideManifestVersion)(l,t[`version-override`]));let d=new e.b(e._(t.registry),new a.OclifLoggerAdapter(this));await d.publishPackage(l,async e=>Buffer.from(await r.default.promises.readFile(n.default.resolve(u,e)))),t.unstable||(this.log(`Adding package to ${i.StableChannel} channel...`),await d.addPackageToChannel(l.description.id,i.StableChannel)),t.refresh&&await d.updateIfNeeded()}},g=class n extends t.Command{static description=`Refresh overview files based on published but not proecessed artefacts`;static flags={registry:t.Flags.string({char:`r`,summary:`full address of the registry`,helpValue:`<address>`,env:`PL_REGISTRY`,required:!0}),mode:t.Flags.string({char:`m`,summary:`refresh mode (allowed valiues: "force", "normal", "dry-run")`,helpValue:`<mode>`,options:[`force`,`normal`,`dry-run`],env:`PL_REGISTRY_REFRESH_DRY_RUN`,default:`normal`})};async run(){let{flags:t}=await this.parse(n);await new e.b(e._(t.registry),new a.OclifLoggerAdapter(this)).updateIfNeeded(t.mode)}},_=class n extends t.Command{static description=`Restore global overview from a snapshot`;static flags={registry:t.Flags.string({char:`r`,summary:`full address of the registry`,helpValue:`<address>`,env:`PL_REGISTRY`,required:!0}),snapshot:t.Flags.string({char:`s`,summary:`snapshot timestamp ID to restore from`,helpValue:`<timestamp>`,required:!0}),"skip-confirmation":t.Flags.boolean({summary:`skip confirmation prompt (use with caution)`,default:!1})};async run(){let{flags:t}=await this.parse(n),r=new e.b(e._(t.registry),new a.OclifLoggerAdapter(this)),i=await r.listGlobalOverviewSnapshots();if(i.find(e=>e.timestamp===t.snapshot)||this.error(`Snapshot '${t.snapshot}' not found. Available snapshots:\n${i.map(e=>` - ${e.timestamp}`).join(`
2
2
  `)||` (none)`}`),!t[`skip-confirmation`]){let e=(await import(`node:readline`)).createInterface({input:process.stdin,output:process.stdout}),n=await new Promise(n=>{e.question(`⚠️ This will overwrite the current global overview with snapshot '${t.snapshot}'.\nAre you sure you want to continue? (y/N): `,n)});if(e.close(),n.toLowerCase()!==`y`&&n.toLowerCase()!==`yes`){this.log(`Restore cancelled.`);return}}try{await r.restoreGlobalOverviewFromSnapshot(t.snapshot),this.log(`✅ Successfully restored global overview from snapshot '${t.snapshot}'`)}catch(e){this.error(`Failed to restore from snapshot: ${String(e)}`)}}};function v(e){let t=e.match(/(?<destName>[^/\\]+)=(?<src>.*)/);if(t){let{src:e,destName:n}=t.groups;return{src:e,destName:n}}else return{src:e,destName:n.default.basename(e)}}var y=t.Flags.custom({summary:`target files to upload`,helpValue:`file_path | package_name=file_path`,parse:async e=>v(e)}),b=[`registry`,`organization`,`package`,`version`],x={"build-meta":c,"build-model":u,"list-overview-snapshots":d,"mark-stable":f,pack:p,publish:h,"refresh-registry":g,"restore-overview-from-snapshot":_,"upload-package-v1":class n extends t.Command{static description=`Uploads V1 package and refreshes the registry`;static flags={registry:t.Flags.string({char:`r`,summary:`full address of the registry or alias from .pl.reg`,helpValue:`<address|alias>`,env:`PL_REGISTRY`}),organization:t.Flags.string({char:`o`,summary:`target organisation`,env:`PL_PACKAGE_ORGANIZATION`}),package:t.Flags.string({char:`p`,summary:`target package`,env:`PL_PACKAGE_NAME`}),version:t.Flags.string({char:`v`,summary:`target version`,env:`PL_PACKAGE_VERSION`}),meta:t.Flags.file({char:`m`,summary:`json file containing meta information to associate with tha package`,exists:!0}),file:y({char:`f`,summary:`package files`,multiple:!0,default:[]}),refresh:t.Flags.boolean({summary:`refresh repository after adding the package`,default:!0,allowNo:!0,env:`PL_REGISTRY_REFRESH`})};async run(){let{flags:t}=await this.parse(n),i=e.p.parse({});for(let e of b)t[e]&&(i[e]=t[e]);t.meta&&(t.meta.endsWith(`.json`)?i.meta=JSON.parse(await r.default.promises.readFile(t.meta,{encoding:`utf-8`})):t.meta.endsWith(`.yaml`)&&(i.meta=o.default.parse(await r.default.promises.readFile(t.meta,{encoding:`utf-8`}))));for(let e of t.file)i.files[e.destName]=e.src;let s=await e.n(i);this.log(o.default.stringify(s.conf));let c=s.createRegistry(new a.OclifLoggerAdapter(this)),l=s.fullPackageName,u=c.constructNewPackage(l);for(let[e,t]of Object.entries(s.conf.files)){this.log(`Uploading ${t} -> ${e} ...`);let n=await r.default.promises.readFile(t);await u.addFile(e,n)}this.log(`Uploading meta information...`),await u.writeMeta(s.conf.meta),await u.finish(),t.refresh&&await c.updateIfNeeded()}},"update-deps":class extends t.Command{static description=`Updates @platforma-sdk and @milaboratories packages in pnpm-workspace.yaml catalog to their latest versions from npm registry.`;static examples=[`<%= config.bin %> <%= command.id %>`];async run(){await(0,s.updatePackages)()}}};exports.COMMANDS=x;
3
3
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","names":[],"sources":["../src/cmd/build-meta.ts","../src/cmd/build-model.ts","../src/cmd/list-overview-snapshots.ts","../src/cmd/mark-stable.ts","../src/cmd/pack.ts","../src/cmd/publish.ts","../src/cmd/refresh-registry.ts","../src/cmd/restore-overview-from-snapshot.ts","../src/registry_v1/flags.ts","../src/cmd/upload-package-v1.ts","../src/cmd/update-deps.ts","../src/cmd/index.ts"],"sourcesContent":["import { Command, Flags } from \"@oclif/core\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport { loadPackDescriptionRaw } from \"../v2\";\nimport { BlockPackMetaDescription, BlockPackMetaEmbedAbsoluteBase64 } from \"../v2/model/block_meta\";\n\nexport default class BuildMeta extends Command {\n static override description =\n \"Extracts meta information from blocks package.json and outputs meta.json with embedded binary \" +\n \"and textual information linked from the meta section.\";\n\n static flags = {\n modulePath: Flags.string({\n char: \"i\",\n summary: \"input module path\",\n helpValue: \"<path>\",\n default: \".\",\n }),\n\n destination: Flags.string({\n char: \"o\",\n summary: \"output meta.json file\",\n helpValue: \"<path>\",\n required: true,\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(BuildMeta);\n const modulePath = path.resolve(flags.modulePath);\n const descriptionRaw = await loadPackDescriptionRaw(modulePath);\n const metaEmbedded = await BlockPackMetaEmbedAbsoluteBase64.parseAsync(\n BlockPackMetaDescription(modulePath).parse(descriptionRaw.meta),\n );\n\n await fs.promises.writeFile(path.resolve(flags.destination), JSON.stringify(metaEmbedded));\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nasync function getFileContent(path: string) {\n try {\n return await fs.promises.readFile(path, \"utf8\");\n } catch (error: unknown) {\n if (error instanceof Error && \"code\" in error && 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 // eslint-disable-next-line prefer-const, @typescript-eslint/no-unsafe-assignment\n let { model, platforma } = require(modulePath);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n if (!model) model = platforma;\n if (!model) throw new Error('\"model\" export not found');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\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 (!(\"outputs\" in config) || !(\"sections\" in config))\n throw new Error('\"config\" has unexpected structure');\n\n const code = await getFileContent(flags.sourceBundle);\n if (code !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n config.code = {\n type: \"plain\",\n content: code,\n };\n }\n\n await fs.promises.writeFile(path.resolve(flags.destination), JSON.stringify(config));\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2 } from \"../v2/registry/registry\";\nimport { storageByUrl } from \"../io/storage\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class ListOverviewSnapshots extends Command {\n static description = \"List all available global overview snapshots in the registry\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n json: Flags.boolean({\n summary: \"output in JSON format\",\n default: false,\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(ListOverviewSnapshots);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n const snapshots = await registry.listGlobalOverviewSnapshots();\n\n if (flags.json) {\n this.log(JSON.stringify(snapshots, null, 2));\n } else {\n if (snapshots.length === 0) {\n this.log(\"No snapshots found.\");\n } else {\n this.log(`Found ${snapshots.length} snapshot(s):\\n`);\n for (const snapshot of snapshots) {\n this.log(` ${snapshot.timestamp}`);\n this.log(` Path: ${snapshot.path}`);\n this.log(\"\");\n }\n }\n }\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2, loadPackDescriptionRaw } from \"../v2\";\nimport path from \"node:path\";\nimport { overrideDescriptionVersion, StableChannel } from \"@milaboratories/pl-model-middle-layer\";\nimport { storageByUrl } from \"../io\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class MarkStable extends Command {\n static description = \"Mark target block stable\";\n\n static flags = {\n modulePath: Flags.string({\n char: \"i\",\n summary: \"input module path\",\n helpValue: \"<path>\",\n default: \".\",\n }),\n\n channel: Flags.string({\n char: \"c\",\n hidden: true,\n summary: \"custom channel\",\n helpValue: \"<channel name>\",\n default: StableChannel,\n }),\n\n \"version-override\": Flags.file({\n char: \"v\",\n summary: \"override package version\",\n }),\n\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n refresh: Flags.boolean({\n summary: \"refresh repository after adding the package\",\n default: true,\n allowNo: true,\n env: \"PL_REGISTRY_REFRESH\",\n }),\n\n unmark: Flags.boolean({\n summary:\n 'reverses meaning of this command, flag can be used to remove \"stable\" flag from the package',\n default: false,\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(MarkStable);\n let description = await loadPackDescriptionRaw(path.resolve(flags.modulePath));\n if (flags[\"version-override\"])\n description = overrideDescriptionVersion(description, flags[\"version-override\"]);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n if (flags.unmark) await registry.removePackageFromChannel(description.id, flags.channel);\n else await registry.addPackageToChannel(description.id, flags.channel);\n\n if (flags.refresh) await registry.updateIfNeeded();\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { loadPackDescription } from \"../v2/source_package\";\nimport path from \"node:path\";\nimport { buildBlockPackDist } from \"../v2/build_dist\";\n\nexport default class PackBlock extends Command {\n static description =\n \"Builds block pack and outputs a block pack manifest consolidating all \" +\n \"references assets into a single folder\";\n\n static flags = {\n modulePath: Flags.string({\n char: \"i\",\n summary: \"input module path\",\n helpValue: \"<path>\",\n default: \".\",\n }),\n\n destinationPath: Flags.string({\n char: \"o\",\n summary: \"output folder\",\n helpValue: \"<path>\",\n default: \"./block-pack\",\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(PackBlock);\n const description = await loadPackDescription(path.resolve(flags.modulePath));\n await buildBlockPackDist(description, path.resolve(flags.destinationPath));\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport fs from \"node:fs\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\nimport { ManifestFileName } from \"../v2/registry/schema_public\";\nimport {\n BlockPackManifest,\n overrideManifestVersion,\n StableChannel,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport { storageByUrl } from \"../io/storage\";\nimport { BlockRegistryV2 } from \"../v2/registry/registry\";\nimport path from \"node:path\";\n\nfunction simpleDeepMerge<T extends Record<string, unknown>>(\n target: Record<string, unknown>,\n source: T,\n): T {\n const result = { ...target };\n\n for (const key in source) {\n if (source[key] && typeof source[key] === \"object\" && !Array.isArray(source[key])) {\n if (result[key] && typeof result[key] === \"object\" && !Array.isArray(result[key])) {\n result[key] = simpleDeepMerge(\n result[key] as Record<string, unknown>,\n source[key] as Record<string, unknown>,\n );\n } else {\n result[key] = source[key];\n }\n } else {\n result[key] = source[key];\n }\n }\n\n return result as T;\n}\n\nexport default class Publish extends Command {\n static description =\n \"Publishes the block package and refreshes the registry (for v2 block-pack schema)\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n manifest: Flags.file({\n char: \"m\",\n summary: \"manifest file path\",\n exists: true,\n default: `./block-pack/${ManifestFileName}`,\n }),\n\n \"version-override\": Flags.file({\n char: \"v\",\n summary: \"override package version\",\n }),\n\n refresh: Flags.boolean({\n summary: \"refresh repository after adding the package\",\n default: true,\n allowNo: true,\n env: \"PL_REGISTRY_REFRESH\",\n }),\n\n unstable: Flags.boolean({\n summary: \"do not add the published package to stable channel\",\n default: false,\n env: \"PL_PUBLISH_UNSTABLE\",\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Publish);\n\n const manifestPath = path.resolve(flags.manifest);\n const rawManifest = JSON.parse(\n await fs.promises.readFile(manifestPath, { encoding: \"utf-8\" }),\n ) as Record<string, unknown>;\n let manifest = BlockPackManifest.parse(rawManifest);\n // To keep extra fields from the manifest and keep coerced fields\n manifest = simpleDeepMerge(\n rawManifest,\n manifest as BlockPackManifest & Record<string, unknown>,\n );\n const manifestRoot = path.dirname(manifestPath);\n\n this.log(`Manifest root = ${manifestRoot}`);\n\n if (flags[\"version-override\"])\n manifest = overrideManifestVersion(manifest, flags[\"version-override\"]);\n\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n await registry.publishPackage(manifest, async (file) =>\n Buffer.from(await fs.promises.readFile(path.resolve(manifestRoot, file))),\n );\n\n if (!flags.unstable) {\n this.log(`Adding package to ${StableChannel} channel...`);\n await registry.addPackageToChannel(manifest.description.id, StableChannel);\n }\n\n if (flags.refresh) await registry.updateIfNeeded();\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2 } from \"../v2\";\nimport { storageByUrl } from \"../io\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class RefreshRegistry extends Command {\n static description = \"Refresh overview files based on published but not proecessed artefacts\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n mode: Flags.string({\n char: \"m\",\n summary: 'refresh mode (allowed valiues: \"force\", \"normal\", \"dry-run\")',\n helpValue: \"<mode>\",\n options: [\"force\", \"normal\", \"dry-run\"],\n env: \"PL_REGISTRY_REFRESH_DRY_RUN\",\n default: \"normal\",\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(RefreshRegistry);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n await registry.updateIfNeeded(flags.mode as \"force\" | \"normal\" | \"dry-run\");\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2 } from \"../v2/registry/registry\";\nimport { storageByUrl } from \"../io/storage\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class RestoreOverviewFromSnapshot extends Command {\n static description = \"Restore global overview from a snapshot\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n snapshot: Flags.string({\n char: \"s\",\n summary: \"snapshot timestamp ID to restore from\",\n helpValue: \"<timestamp>\",\n required: true,\n }),\n\n \"skip-confirmation\": Flags.boolean({\n summary: \"skip confirmation prompt (use with caution)\",\n default: false,\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(RestoreOverviewFromSnapshot);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n // Check if snapshot exists\n const snapshots = await registry.listGlobalOverviewSnapshots();\n const targetSnapshot = snapshots.find((s) => s.timestamp === flags.snapshot);\n\n if (!targetSnapshot) {\n this.error(\n `Snapshot '${flags.snapshot}' not found. Available snapshots:\\n${\n snapshots.map((s) => ` - ${s.timestamp}`).join(\"\\n\") || \" (none)\"\n }`,\n );\n }\n\n // Confirmation prompt (unless skipped)\n if (!flags[\"skip-confirmation\"]) {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const answer = await new Promise<string>((resolve) => {\n rl.question(\n `⚠️ This will overwrite the current global overview with snapshot '${flags.snapshot}'.\\n` +\n `Are you sure you want to continue? (y/N): `,\n resolve,\n );\n });\n\n rl.close();\n\n if (answer.toLowerCase() !== \"y\" && answer.toLowerCase() !== \"yes\") {\n this.log(\"Restore cancelled.\");\n return;\n }\n }\n\n // Perform restore\n try {\n await registry.restoreGlobalOverviewFromSnapshot(flags.snapshot);\n this.log(`✅ Successfully restored global overview from snapshot '${flags.snapshot}'`);\n } catch (error) {\n this.error(`Failed to restore from snapshot: ${String(error)}`);\n }\n }\n}\n","import { Flags } from \"@oclif/core\";\nimport path from \"node:path\";\n\nexport interface TargetFile {\n src: string;\n destName: string;\n}\n\nfunction parseTargetFile(arg: string): TargetFile {\n const match = arg.match(/(?<destName>[^/\\\\]+)=(?<src>.*)/);\n if (match) {\n const { src, destName } = match.groups!;\n return { src, destName };\n } else {\n return { src: arg, destName: path.basename(arg) };\n }\n}\n\nexport const targetFile = Flags.custom<TargetFile>({\n summary: \"target files to upload\",\n helpValue: \"file_path | package_name=file_path\",\n // eslint-disable-next-line @typescript-eslint/require-await -- oclif requires async but parsing is sync\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 ) as Record<string, unknown>;\n else if (flags.meta.endsWith(\".yaml\"))\n configFromFlags.meta = YAML.parse(\n await fs.promises.readFile(flags.meta, { encoding: \"utf-8\" }),\n ) as Record<string, unknown>;\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 { Command } from \"@oclif/core\";\nimport { updatePackages } from \"@platforma-sdk/blocks-deps-updater\";\n\nexport default class UpdateDeps extends Command {\n static override description =\n \"Updates @platforma-sdk and @milaboratories packages in pnpm-workspace.yaml catalog to their latest versions from npm registry.\";\n\n static override examples = [\"<%= config.bin %> <%= command.id %>\"];\n\n public async run(): Promise<void> {\n await updatePackages();\n }\n}\n","// DO NOT EDIT. This file was generated by oclif-index utility.\n\nimport Cmd0 from \"./build-meta\";\nimport Cmd1 from \"./build-model\";\nimport Cmd3 from \"./list-overview-snapshots\";\nimport Cmd4 from \"./mark-stable\";\nimport Cmd5 from \"./pack\";\nimport Cmd6 from \"./publish\";\nimport Cmd7 from \"./refresh-registry\";\nimport Cmd8 from \"./restore-overview-from-snapshot\";\nimport Cmd9 from \"./upload-package-v1\";\nimport Cmd10 from \"./update-deps\";\n\nexport const COMMANDS = {\n \"build-meta\": Cmd0,\n \"build-model\": Cmd1,\n \"list-overview-snapshots\": Cmd3,\n \"mark-stable\": Cmd4,\n pack: Cmd5,\n publish: Cmd6,\n \"refresh-registry\": Cmd7,\n \"restore-overview-from-snapshot\": Cmd8,\n \"upload-package-v1\": Cmd9,\n \"update-deps\": Cmd10,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","names":[],"sources":["../src/cmd/build-meta.ts","../src/cmd/build-model.ts","../src/cmd/list-overview-snapshots.ts","../src/cmd/mark-stable.ts","../src/cmd/pack.ts","../src/cmd/publish.ts","../src/cmd/refresh-registry.ts","../src/cmd/restore-overview-from-snapshot.ts","../src/registry_v1/flags.ts","../src/cmd/upload-package-v1.ts","../src/cmd/update-deps.ts","../src/cmd/index.ts"],"sourcesContent":["import { Command, Flags } from \"@oclif/core\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport { loadPackDescriptionRaw } from \"../v2\";\nimport { embedBlockPackMetaAbsoluteBase64, resolveBlockPackMeta } 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 embedBlockPackMetaAbsoluteBase64(\n await resolveBlockPackMeta(descriptionRaw.meta, modulePath),\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 \"node:fs\";\nimport path from \"node:path\";\n\nasync function getFileContent(path: string) {\n try {\n return await fs.promises.readFile(path, \"utf8\");\n } catch (error: unknown) {\n if (error instanceof Error && \"code\" in error && 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 // eslint-disable-next-line prefer-const, @typescript-eslint/no-unsafe-assignment\n let { model, platforma } = require(modulePath);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n if (!model) model = platforma;\n if (!model) throw new Error('\"model\" export not found');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\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 (!(\"outputs\" in config) || !(\"sections\" in config))\n throw new Error('\"config\" has unexpected structure');\n\n const code = await getFileContent(flags.sourceBundle);\n if (code !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n config.code = {\n type: \"plain\",\n content: code,\n };\n }\n\n await fs.promises.writeFile(path.resolve(flags.destination), JSON.stringify(config));\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2 } from \"../v2/registry/registry\";\nimport { storageByUrl } from \"../io/storage\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class ListOverviewSnapshots extends Command {\n static description = \"List all available global overview snapshots in the registry\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n json: Flags.boolean({\n summary: \"output in JSON format\",\n default: false,\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(ListOverviewSnapshots);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n const snapshots = await registry.listGlobalOverviewSnapshots();\n\n if (flags.json) {\n this.log(JSON.stringify(snapshots, null, 2));\n } else {\n if (snapshots.length === 0) {\n this.log(\"No snapshots found.\");\n } else {\n this.log(`Found ${snapshots.length} snapshot(s):\\n`);\n for (const snapshot of snapshots) {\n this.log(` ${snapshot.timestamp}`);\n this.log(` Path: ${snapshot.path}`);\n this.log(\"\");\n }\n }\n }\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2, loadPackDescriptionRaw } from \"../v2\";\nimport path from \"node:path\";\nimport { overrideDescriptionVersion, StableChannel } from \"@milaboratories/pl-model-middle-layer\";\nimport { storageByUrl } from \"../io\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class MarkStable extends Command {\n static description = \"Mark target block stable\";\n\n static flags = {\n modulePath: Flags.string({\n char: \"i\",\n summary: \"input module path\",\n helpValue: \"<path>\",\n default: \".\",\n }),\n\n channel: Flags.string({\n char: \"c\",\n hidden: true,\n summary: \"custom channel\",\n helpValue: \"<channel name>\",\n default: StableChannel,\n }),\n\n \"version-override\": Flags.file({\n char: \"v\",\n summary: \"override package version\",\n }),\n\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n refresh: Flags.boolean({\n summary: \"refresh repository after adding the package\",\n default: true,\n allowNo: true,\n env: \"PL_REGISTRY_REFRESH\",\n }),\n\n unmark: Flags.boolean({\n summary:\n 'reverses meaning of this command, flag can be used to remove \"stable\" flag from the package',\n default: false,\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(MarkStable);\n let description = await loadPackDescriptionRaw(path.resolve(flags.modulePath));\n if (flags[\"version-override\"])\n description = overrideDescriptionVersion(description, flags[\"version-override\"]);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n if (flags.unmark) await registry.removePackageFromChannel(description.id, flags.channel);\n else await registry.addPackageToChannel(description.id, flags.channel);\n\n if (flags.refresh) await registry.updateIfNeeded();\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { loadPackDescription } from \"../v2/source_package\";\nimport path from \"node:path\";\nimport { buildBlockPackDist } from \"../v2/build_dist\";\n\nexport default class PackBlock extends Command {\n static description =\n \"Builds block pack and outputs a block pack manifest consolidating all \" +\n \"references assets into a single folder\";\n\n static flags = {\n modulePath: Flags.string({\n char: \"i\",\n summary: \"input module path\",\n helpValue: \"<path>\",\n default: \".\",\n }),\n\n destinationPath: Flags.string({\n char: \"o\",\n summary: \"output folder\",\n helpValue: \"<path>\",\n default: \"./block-pack\",\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(PackBlock);\n const description = await loadPackDescription(path.resolve(flags.modulePath));\n await buildBlockPackDist(description, path.resolve(flags.destinationPath));\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport fs from \"node:fs\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\nimport { ManifestFileName } from \"../v2/registry/schema_public\";\nimport {\n BlockPackManifest,\n overrideManifestVersion,\n StableChannel,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport { storageByUrl } from \"../io/storage\";\nimport { BlockRegistryV2 } from \"../v2/registry/registry\";\nimport path from \"node:path\";\n\nfunction simpleDeepMerge<T extends Record<string, unknown>>(\n target: Record<string, unknown>,\n source: T,\n): T {\n const result = { ...target };\n\n for (const key in source) {\n if (source[key] && typeof source[key] === \"object\" && !Array.isArray(source[key])) {\n if (result[key] && typeof result[key] === \"object\" && !Array.isArray(result[key])) {\n result[key] = simpleDeepMerge(\n result[key] as Record<string, unknown>,\n source[key] as Record<string, unknown>,\n );\n } else {\n result[key] = source[key];\n }\n } else {\n result[key] = source[key];\n }\n }\n\n return result as T;\n}\n\nexport default class Publish extends Command {\n static description =\n \"Publishes the block package and refreshes the registry (for v2 block-pack schema)\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n manifest: Flags.file({\n char: \"m\",\n summary: \"manifest file path\",\n exists: true,\n default: `./block-pack/${ManifestFileName}`,\n }),\n\n \"version-override\": Flags.file({\n char: \"v\",\n summary: \"override package version\",\n }),\n\n refresh: Flags.boolean({\n summary: \"refresh repository after adding the package\",\n default: true,\n allowNo: true,\n env: \"PL_REGISTRY_REFRESH\",\n }),\n\n unstable: Flags.boolean({\n summary: \"do not add the published package to stable channel\",\n default: false,\n env: \"PL_PUBLISH_UNSTABLE\",\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Publish);\n\n const manifestPath = path.resolve(flags.manifest);\n const rawManifest = JSON.parse(\n await fs.promises.readFile(manifestPath, { encoding: \"utf-8\" }),\n ) as Record<string, unknown>;\n let manifest = BlockPackManifest.parse(rawManifest);\n // To keep extra fields from the manifest and keep coerced fields\n manifest = simpleDeepMerge(\n rawManifest,\n manifest as BlockPackManifest & Record<string, unknown>,\n );\n const manifestRoot = path.dirname(manifestPath);\n\n this.log(`Manifest root = ${manifestRoot}`);\n\n if (flags[\"version-override\"])\n manifest = overrideManifestVersion(manifest, flags[\"version-override\"]);\n\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n await registry.publishPackage(manifest, async (file) =>\n Buffer.from(await fs.promises.readFile(path.resolve(manifestRoot, file))),\n );\n\n if (!flags.unstable) {\n this.log(`Adding package to ${StableChannel} channel...`);\n await registry.addPackageToChannel(manifest.description.id, StableChannel);\n }\n\n if (flags.refresh) await registry.updateIfNeeded();\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2 } from \"../v2\";\nimport { storageByUrl } from \"../io\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class RefreshRegistry extends Command {\n static description = \"Refresh overview files based on published but not proecessed artefacts\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n mode: Flags.string({\n char: \"m\",\n summary: 'refresh mode (allowed valiues: \"force\", \"normal\", \"dry-run\")',\n helpValue: \"<mode>\",\n options: [\"force\", \"normal\", \"dry-run\"],\n env: \"PL_REGISTRY_REFRESH_DRY_RUN\",\n default: \"normal\",\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(RefreshRegistry);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n await registry.updateIfNeeded(flags.mode as \"force\" | \"normal\" | \"dry-run\");\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2 } from \"../v2/registry/registry\";\nimport { storageByUrl } from \"../io/storage\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class RestoreOverviewFromSnapshot extends Command {\n static description = \"Restore global overview from a snapshot\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n snapshot: Flags.string({\n char: \"s\",\n summary: \"snapshot timestamp ID to restore from\",\n helpValue: \"<timestamp>\",\n required: true,\n }),\n\n \"skip-confirmation\": Flags.boolean({\n summary: \"skip confirmation prompt (use with caution)\",\n default: false,\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(RestoreOverviewFromSnapshot);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n // Check if snapshot exists\n const snapshots = await registry.listGlobalOverviewSnapshots();\n const targetSnapshot = snapshots.find((s) => s.timestamp === flags.snapshot);\n\n if (!targetSnapshot) {\n this.error(\n `Snapshot '${flags.snapshot}' not found. Available snapshots:\\n${\n snapshots.map((s) => ` - ${s.timestamp}`).join(\"\\n\") || \" (none)\"\n }`,\n );\n }\n\n // Confirmation prompt (unless skipped)\n if (!flags[\"skip-confirmation\"]) {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const answer = await new Promise<string>((resolve) => {\n rl.question(\n `⚠️ This will overwrite the current global overview with snapshot '${flags.snapshot}'.\\n` +\n `Are you sure you want to continue? (y/N): `,\n resolve,\n );\n });\n\n rl.close();\n\n if (answer.toLowerCase() !== \"y\" && answer.toLowerCase() !== \"yes\") {\n this.log(\"Restore cancelled.\");\n return;\n }\n }\n\n // Perform restore\n try {\n await registry.restoreGlobalOverviewFromSnapshot(flags.snapshot);\n this.log(`✅ Successfully restored global overview from snapshot '${flags.snapshot}'`);\n } catch (error) {\n this.error(`Failed to restore from snapshot: ${String(error)}`);\n }\n }\n}\n","import { Flags } from \"@oclif/core\";\nimport path from \"node:path\";\n\nexport interface TargetFile {\n src: string;\n destName: string;\n}\n\nfunction parseTargetFile(arg: string): TargetFile {\n const match = arg.match(/(?<destName>[^/\\\\]+)=(?<src>.*)/);\n if (match) {\n const { src, destName } = match.groups!;\n return { src, destName };\n } else {\n return { src: arg, destName: path.basename(arg) };\n }\n}\n\nexport const targetFile = Flags.custom<TargetFile>({\n summary: \"target files to upload\",\n helpValue: \"file_path | package_name=file_path\",\n // eslint-disable-next-line @typescript-eslint/require-await -- oclif requires async but parsing is sync\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 ) as Record<string, unknown>;\n else if (flags.meta.endsWith(\".yaml\"))\n configFromFlags.meta = YAML.parse(\n await fs.promises.readFile(flags.meta, { encoding: \"utf-8\" }),\n ) as Record<string, unknown>;\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 { Command } from \"@oclif/core\";\nimport { updatePackages } from \"@platforma-sdk/blocks-deps-updater\";\n\nexport default class UpdateDeps extends Command {\n static override description =\n \"Updates @platforma-sdk and @milaboratories packages in pnpm-workspace.yaml catalog to their latest versions from npm registry.\";\n\n static override examples = [\"<%= config.bin %> <%= command.id %>\"];\n\n public async run(): Promise<void> {\n await updatePackages();\n }\n}\n","// DO NOT EDIT. This file was generated by oclif-index utility.\n\nimport Cmd0 from \"./build-meta\";\nimport Cmd1 from \"./build-model\";\nimport Cmd3 from \"./list-overview-snapshots\";\nimport Cmd4 from \"./mark-stable\";\nimport Cmd5 from \"./pack\";\nimport Cmd6 from \"./publish\";\nimport Cmd7 from \"./refresh-registry\";\nimport Cmd8 from \"./restore-overview-from-snapshot\";\nimport Cmd9 from \"./upload-package-v1\";\nimport Cmd10 from \"./update-deps\";\n\nexport const COMMANDS = {\n \"build-meta\": Cmd0,\n \"build-model\": Cmd1,\n \"list-overview-snapshots\": Cmd3,\n \"mark-stable\": Cmd4,\n pack: Cmd5,\n publish: Cmd6,\n \"refresh-registry\": Cmd7,\n \"restore-overview-from-snapshot\": Cmd8,\n \"upload-package-v1\": Cmd9,\n \"update-deps\": Cmd10,\n};\n"],"mappings":"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"}
package/dist/cli.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { Ct as e, F as t, J as n, Q as r, Y as i, _ as a, b as o, n as s, ot as c, p as l, st as u } from "./config-CzNlwcwn.mjs";
1
+ import { H as e, K as t, O as n, U as r, _ as i, _t as a, b as o, et as s, n as c, p as l, rt as u } from "./config-DpfTzcgG.mjs";
2
2
  import { Command as d, Flags as f } from "@oclif/core";
3
3
  import p from "node:path";
4
4
  import m from "node:fs";
@@ -24,8 +24,8 @@ var S = class e extends d {
24
24
  })
25
25
  };
26
26
  async run() {
27
- let { flags: t } = await this.parse(e), n = p.resolve(t.modulePath), r = await i(n), a = await u.parseAsync(c(n).parse(r.meta));
28
- await m.promises.writeFile(p.resolve(t.destination), JSON.stringify(a));
27
+ let { flags: t } = await this.parse(e), n = p.resolve(t.modulePath), i = await s(await u((await r(n)).meta, n));
28
+ await m.promises.writeFile(p.resolve(t.destination), JSON.stringify(i));
29
29
  }
30
30
  };
31
31
  //#endregion
@@ -38,7 +38,7 @@ async function C(e) {
38
38
  throw e;
39
39
  }
40
40
  }
41
- var w = class t extends d {
41
+ var w = class e extends d {
42
42
  static description = "Extracts and outputs block model JSON from pre-built block model module";
43
43
  static flags = {
44
44
  modulePath: f.string({
@@ -61,16 +61,16 @@ var w = class t extends d {
61
61
  })
62
62
  };
63
63
  async run() {
64
- let { flags: n } = await this.parse(t), { model: r, platforma: i } = e(p.resolve(n.modulePath));
65
- if (r ||= i, !r) throw Error("\"model\" export not found");
66
- let { config: a } = r;
67
- if (!a) throw Error("Malformed \"model\" object, check it is created with \"BlockModel\" and \".done()\" is executed as the call in the chain.");
68
- if (!("outputs" in a) || !("sections" in a)) throw Error("\"config\" has unexpected structure");
69
- let o = await C(n.sourceBundle);
70
- o !== void 0 && (a.code = {
64
+ let { flags: t } = await this.parse(e), { model: n, platforma: r } = a(p.resolve(t.modulePath));
65
+ if (n ||= r, !n) throw Error("\"model\" export not found");
66
+ let { config: i } = n;
67
+ if (!i) throw Error("Malformed \"model\" object, check it is created with \"BlockModel\" and \".done()\" is executed as the call in the chain.");
68
+ if (!("outputs" in i) || !("sections" in i)) throw Error("\"config\" has unexpected structure");
69
+ let o = await C(t.sourceBundle);
70
+ o !== void 0 && (i.code = {
71
71
  type: "plain",
72
72
  content: o
73
- }), await m.promises.writeFile(p.resolve(n.destination), JSON.stringify(a));
73
+ }), await m.promises.writeFile(p.resolve(t.destination), JSON.stringify(i));
74
74
  }
75
75
  }, T = class e extends d {
76
76
  static description = "List all available global overview snapshots in the registry";
@@ -88,7 +88,7 @@ var w = class t extends d {
88
88
  })
89
89
  };
90
90
  async run() {
91
- let { flags: t } = await this.parse(e), n = await new o(a(t.registry), new y(this)).listGlobalOverviewSnapshots();
91
+ let { flags: t } = await this.parse(e), n = await new o(i(t.registry), new y(this)).listGlobalOverviewSnapshots();
92
92
  if (t.json) this.log(JSON.stringify(n, null, 2));
93
93
  else if (n.length === 0) this.log("No snapshots found.");
94
94
  else {
@@ -135,12 +135,12 @@ var w = class t extends d {
135
135
  })
136
136
  };
137
137
  async run() {
138
- let { flags: t } = await this.parse(e), n = await i(p.resolve(t.modulePath));
138
+ let { flags: t } = await this.parse(e), n = await r(p.resolve(t.modulePath));
139
139
  t["version-override"] && (n = _(n, t["version-override"]));
140
- let r = new o(a(t.registry), new y(this));
141
- t.unmark ? await r.removePackageFromChannel(n.id, t.channel) : await r.addPackageToChannel(n.id, t.channel), t.refresh && await r.updateIfNeeded();
140
+ let a = new o(i(t.registry), new y(this));
141
+ t.unmark ? await a.removePackageFromChannel(n.id, t.channel) : await a.addPackageToChannel(n.id, t.channel), t.refresh && await a.updateIfNeeded();
142
142
  }
143
- }, D = class e extends d {
143
+ }, D = class n extends d {
144
144
  static description = "Builds block pack and outputs a block pack manifest consolidating all references assets into a single folder";
145
145
  static flags = {
146
146
  modulePath: f.string({
@@ -157,8 +157,8 @@ var w = class t extends d {
157
157
  })
158
158
  };
159
159
  async run() {
160
- let { flags: t } = await this.parse(e);
161
- await r(await n(p.resolve(t.modulePath)), p.resolve(t.destinationPath));
160
+ let { flags: r } = await this.parse(n);
161
+ await t(await e(p.resolve(r.modulePath)), p.resolve(r.destinationPath));
162
162
  }
163
163
  };
164
164
  //#endregion
@@ -182,7 +182,7 @@ var k = class e extends d {
182
182
  char: "m",
183
183
  summary: "manifest file path",
184
184
  exists: !0,
185
- default: `./block-pack/${t}`
185
+ default: `./block-pack/${n}`
186
186
  }),
187
187
  "version-override": f.file({
188
188
  char: "v",
@@ -201,12 +201,12 @@ var k = class e extends d {
201
201
  })
202
202
  };
203
203
  async run() {
204
- let { flags: t } = await this.parse(e), n = p.resolve(t.manifest), r = JSON.parse(await m.promises.readFile(n, { encoding: "utf-8" })), i = h.parse(r);
205
- i = O(r, i);
204
+ let { flags: t } = await this.parse(e), n = p.resolve(t.manifest), r = JSON.parse(await m.promises.readFile(n, { encoding: "utf-8" })), a = h.parse(r);
205
+ a = O(r, a);
206
206
  let s = p.dirname(n);
207
- this.log(`Manifest root = ${s}`), t["version-override"] && (i = v(i, t["version-override"]));
208
- let c = new o(a(t.registry), new y(this));
209
- await c.publishPackage(i, async (e) => Buffer.from(await m.promises.readFile(p.resolve(s, e)))), t.unstable || (this.log(`Adding package to ${g} channel...`), await c.addPackageToChannel(i.description.id, g)), t.refresh && await c.updateIfNeeded();
207
+ this.log(`Manifest root = ${s}`), t["version-override"] && (a = v(a, t["version-override"]));
208
+ let c = new o(i(t.registry), new y(this));
209
+ await c.publishPackage(a, async (e) => Buffer.from(await m.promises.readFile(p.resolve(s, e)))), t.unstable || (this.log(`Adding package to ${g} channel...`), await c.addPackageToChannel(a.description.id, g)), t.refresh && await c.updateIfNeeded();
210
210
  }
211
211
  }, A = class e extends d {
212
212
  static description = "Refresh overview files based on published but not proecessed artefacts";
@@ -233,7 +233,7 @@ var k = class e extends d {
233
233
  };
234
234
  async run() {
235
235
  let { flags: t } = await this.parse(e);
236
- await new o(a(t.registry), new y(this)).updateIfNeeded(t.mode);
236
+ await new o(i(t.registry), new y(this)).updateIfNeeded(t.mode);
237
237
  }
238
238
  }, j = class e extends d {
239
239
  static description = "Restore global overview from a snapshot";
@@ -257,7 +257,7 @@ var k = class e extends d {
257
257
  })
258
258
  };
259
259
  async run() {
260
- let { flags: t } = await this.parse(e), n = new o(a(t.registry), new y(this)), r = await n.listGlobalOverviewSnapshots();
260
+ let { flags: t } = await this.parse(e), n = new o(i(t.registry), new y(this)), r = await n.listGlobalOverviewSnapshots();
261
261
  if (r.find((e) => e.timestamp === t.snapshot) || this.error(`Snapshot '${t.snapshot}' not found. Available snapshots:\n${r.map((e) => ` - ${e.timestamp}`).join("\n") || " (none)"}`), !t["skip-confirmation"]) {
262
262
  let e = (await import("node:readline")).createInterface({
263
263
  input: process.stdin,
@@ -357,7 +357,7 @@ var N = f.custom({
357
357
  for (let e of P) t[e] && (n[e] = t[e]);
358
358
  t.meta && (t.meta.endsWith(".json") ? n.meta = JSON.parse(await m.promises.readFile(t.meta, { encoding: "utf-8" })) : t.meta.endsWith(".yaml") && (n.meta = b.parse(await m.promises.readFile(t.meta, { encoding: "utf-8" }))));
359
359
  for (let e of t.file) n.files[e.destName] = e.src;
360
- let r = await s(n);
360
+ let r = await c(n);
361
361
  this.log(b.stringify(r.conf));
362
362
  let i = r.createRegistry(new y(this)), a = r.fullPackageName, o = i.constructNewPackage(a);
363
363
  for (let [e, t] of Object.entries(r.conf.files)) {
package/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","names":[],"sources":["../src/cmd/build-meta.ts","../src/cmd/build-model.ts","../src/cmd/list-overview-snapshots.ts","../src/cmd/mark-stable.ts","../src/cmd/pack.ts","../src/cmd/publish.ts","../src/cmd/refresh-registry.ts","../src/cmd/restore-overview-from-snapshot.ts","../src/registry_v1/flags.ts","../src/cmd/upload-package-v1.ts","../src/cmd/update-deps.ts","../src/cmd/index.ts"],"sourcesContent":["import { Command, Flags } from \"@oclif/core\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport { loadPackDescriptionRaw } from \"../v2\";\nimport { BlockPackMetaDescription, BlockPackMetaEmbedAbsoluteBase64 } from \"../v2/model/block_meta\";\n\nexport default class BuildMeta extends Command {\n static override description =\n \"Extracts meta information from blocks package.json and outputs meta.json with embedded binary \" +\n \"and textual information linked from the meta section.\";\n\n static flags = {\n modulePath: Flags.string({\n char: \"i\",\n summary: \"input module path\",\n helpValue: \"<path>\",\n default: \".\",\n }),\n\n destination: Flags.string({\n char: \"o\",\n summary: \"output meta.json file\",\n helpValue: \"<path>\",\n required: true,\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(BuildMeta);\n const modulePath = path.resolve(flags.modulePath);\n const descriptionRaw = await loadPackDescriptionRaw(modulePath);\n const metaEmbedded = await BlockPackMetaEmbedAbsoluteBase64.parseAsync(\n BlockPackMetaDescription(modulePath).parse(descriptionRaw.meta),\n );\n\n await fs.promises.writeFile(path.resolve(flags.destination), JSON.stringify(metaEmbedded));\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nasync function getFileContent(path: string) {\n try {\n return await fs.promises.readFile(path, \"utf8\");\n } catch (error: unknown) {\n if (error instanceof Error && \"code\" in error && 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 // eslint-disable-next-line prefer-const, @typescript-eslint/no-unsafe-assignment\n let { model, platforma } = require(modulePath);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n if (!model) model = platforma;\n if (!model) throw new Error('\"model\" export not found');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\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 (!(\"outputs\" in config) || !(\"sections\" in config))\n throw new Error('\"config\" has unexpected structure');\n\n const code = await getFileContent(flags.sourceBundle);\n if (code !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n config.code = {\n type: \"plain\",\n content: code,\n };\n }\n\n await fs.promises.writeFile(path.resolve(flags.destination), JSON.stringify(config));\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2 } from \"../v2/registry/registry\";\nimport { storageByUrl } from \"../io/storage\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class ListOverviewSnapshots extends Command {\n static description = \"List all available global overview snapshots in the registry\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n json: Flags.boolean({\n summary: \"output in JSON format\",\n default: false,\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(ListOverviewSnapshots);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n const snapshots = await registry.listGlobalOverviewSnapshots();\n\n if (flags.json) {\n this.log(JSON.stringify(snapshots, null, 2));\n } else {\n if (snapshots.length === 0) {\n this.log(\"No snapshots found.\");\n } else {\n this.log(`Found ${snapshots.length} snapshot(s):\\n`);\n for (const snapshot of snapshots) {\n this.log(` ${snapshot.timestamp}`);\n this.log(` Path: ${snapshot.path}`);\n this.log(\"\");\n }\n }\n }\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2, loadPackDescriptionRaw } from \"../v2\";\nimport path from \"node:path\";\nimport { overrideDescriptionVersion, StableChannel } from \"@milaboratories/pl-model-middle-layer\";\nimport { storageByUrl } from \"../io\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class MarkStable extends Command {\n static description = \"Mark target block stable\";\n\n static flags = {\n modulePath: Flags.string({\n char: \"i\",\n summary: \"input module path\",\n helpValue: \"<path>\",\n default: \".\",\n }),\n\n channel: Flags.string({\n char: \"c\",\n hidden: true,\n summary: \"custom channel\",\n helpValue: \"<channel name>\",\n default: StableChannel,\n }),\n\n \"version-override\": Flags.file({\n char: \"v\",\n summary: \"override package version\",\n }),\n\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n refresh: Flags.boolean({\n summary: \"refresh repository after adding the package\",\n default: true,\n allowNo: true,\n env: \"PL_REGISTRY_REFRESH\",\n }),\n\n unmark: Flags.boolean({\n summary:\n 'reverses meaning of this command, flag can be used to remove \"stable\" flag from the package',\n default: false,\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(MarkStable);\n let description = await loadPackDescriptionRaw(path.resolve(flags.modulePath));\n if (flags[\"version-override\"])\n description = overrideDescriptionVersion(description, flags[\"version-override\"]);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n if (flags.unmark) await registry.removePackageFromChannel(description.id, flags.channel);\n else await registry.addPackageToChannel(description.id, flags.channel);\n\n if (flags.refresh) await registry.updateIfNeeded();\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { loadPackDescription } from \"../v2/source_package\";\nimport path from \"node:path\";\nimport { buildBlockPackDist } from \"../v2/build_dist\";\n\nexport default class PackBlock extends Command {\n static description =\n \"Builds block pack and outputs a block pack manifest consolidating all \" +\n \"references assets into a single folder\";\n\n static flags = {\n modulePath: Flags.string({\n char: \"i\",\n summary: \"input module path\",\n helpValue: \"<path>\",\n default: \".\",\n }),\n\n destinationPath: Flags.string({\n char: \"o\",\n summary: \"output folder\",\n helpValue: \"<path>\",\n default: \"./block-pack\",\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(PackBlock);\n const description = await loadPackDescription(path.resolve(flags.modulePath));\n await buildBlockPackDist(description, path.resolve(flags.destinationPath));\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport fs from \"node:fs\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\nimport { ManifestFileName } from \"../v2/registry/schema_public\";\nimport {\n BlockPackManifest,\n overrideManifestVersion,\n StableChannel,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport { storageByUrl } from \"../io/storage\";\nimport { BlockRegistryV2 } from \"../v2/registry/registry\";\nimport path from \"node:path\";\n\nfunction simpleDeepMerge<T extends Record<string, unknown>>(\n target: Record<string, unknown>,\n source: T,\n): T {\n const result = { ...target };\n\n for (const key in source) {\n if (source[key] && typeof source[key] === \"object\" && !Array.isArray(source[key])) {\n if (result[key] && typeof result[key] === \"object\" && !Array.isArray(result[key])) {\n result[key] = simpleDeepMerge(\n result[key] as Record<string, unknown>,\n source[key] as Record<string, unknown>,\n );\n } else {\n result[key] = source[key];\n }\n } else {\n result[key] = source[key];\n }\n }\n\n return result as T;\n}\n\nexport default class Publish extends Command {\n static description =\n \"Publishes the block package and refreshes the registry (for v2 block-pack schema)\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n manifest: Flags.file({\n char: \"m\",\n summary: \"manifest file path\",\n exists: true,\n default: `./block-pack/${ManifestFileName}`,\n }),\n\n \"version-override\": Flags.file({\n char: \"v\",\n summary: \"override package version\",\n }),\n\n refresh: Flags.boolean({\n summary: \"refresh repository after adding the package\",\n default: true,\n allowNo: true,\n env: \"PL_REGISTRY_REFRESH\",\n }),\n\n unstable: Flags.boolean({\n summary: \"do not add the published package to stable channel\",\n default: false,\n env: \"PL_PUBLISH_UNSTABLE\",\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Publish);\n\n const manifestPath = path.resolve(flags.manifest);\n const rawManifest = JSON.parse(\n await fs.promises.readFile(manifestPath, { encoding: \"utf-8\" }),\n ) as Record<string, unknown>;\n let manifest = BlockPackManifest.parse(rawManifest);\n // To keep extra fields from the manifest and keep coerced fields\n manifest = simpleDeepMerge(\n rawManifest,\n manifest as BlockPackManifest & Record<string, unknown>,\n );\n const manifestRoot = path.dirname(manifestPath);\n\n this.log(`Manifest root = ${manifestRoot}`);\n\n if (flags[\"version-override\"])\n manifest = overrideManifestVersion(manifest, flags[\"version-override\"]);\n\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n await registry.publishPackage(manifest, async (file) =>\n Buffer.from(await fs.promises.readFile(path.resolve(manifestRoot, file))),\n );\n\n if (!flags.unstable) {\n this.log(`Adding package to ${StableChannel} channel...`);\n await registry.addPackageToChannel(manifest.description.id, StableChannel);\n }\n\n if (flags.refresh) await registry.updateIfNeeded();\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2 } from \"../v2\";\nimport { storageByUrl } from \"../io\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class RefreshRegistry extends Command {\n static description = \"Refresh overview files based on published but not proecessed artefacts\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n mode: Flags.string({\n char: \"m\",\n summary: 'refresh mode (allowed valiues: \"force\", \"normal\", \"dry-run\")',\n helpValue: \"<mode>\",\n options: [\"force\", \"normal\", \"dry-run\"],\n env: \"PL_REGISTRY_REFRESH_DRY_RUN\",\n default: \"normal\",\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(RefreshRegistry);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n await registry.updateIfNeeded(flags.mode as \"force\" | \"normal\" | \"dry-run\");\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2 } from \"../v2/registry/registry\";\nimport { storageByUrl } from \"../io/storage\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class RestoreOverviewFromSnapshot extends Command {\n static description = \"Restore global overview from a snapshot\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n snapshot: Flags.string({\n char: \"s\",\n summary: \"snapshot timestamp ID to restore from\",\n helpValue: \"<timestamp>\",\n required: true,\n }),\n\n \"skip-confirmation\": Flags.boolean({\n summary: \"skip confirmation prompt (use with caution)\",\n default: false,\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(RestoreOverviewFromSnapshot);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n // Check if snapshot exists\n const snapshots = await registry.listGlobalOverviewSnapshots();\n const targetSnapshot = snapshots.find((s) => s.timestamp === flags.snapshot);\n\n if (!targetSnapshot) {\n this.error(\n `Snapshot '${flags.snapshot}' not found. Available snapshots:\\n${\n snapshots.map((s) => ` - ${s.timestamp}`).join(\"\\n\") || \" (none)\"\n }`,\n );\n }\n\n // Confirmation prompt (unless skipped)\n if (!flags[\"skip-confirmation\"]) {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const answer = await new Promise<string>((resolve) => {\n rl.question(\n `⚠️ This will overwrite the current global overview with snapshot '${flags.snapshot}'.\\n` +\n `Are you sure you want to continue? (y/N): `,\n resolve,\n );\n });\n\n rl.close();\n\n if (answer.toLowerCase() !== \"y\" && answer.toLowerCase() !== \"yes\") {\n this.log(\"Restore cancelled.\");\n return;\n }\n }\n\n // Perform restore\n try {\n await registry.restoreGlobalOverviewFromSnapshot(flags.snapshot);\n this.log(`✅ Successfully restored global overview from snapshot '${flags.snapshot}'`);\n } catch (error) {\n this.error(`Failed to restore from snapshot: ${String(error)}`);\n }\n }\n}\n","import { Flags } from \"@oclif/core\";\nimport path from \"node:path\";\n\nexport interface TargetFile {\n src: string;\n destName: string;\n}\n\nfunction parseTargetFile(arg: string): TargetFile {\n const match = arg.match(/(?<destName>[^/\\\\]+)=(?<src>.*)/);\n if (match) {\n const { src, destName } = match.groups!;\n return { src, destName };\n } else {\n return { src: arg, destName: path.basename(arg) };\n }\n}\n\nexport const targetFile = Flags.custom<TargetFile>({\n summary: \"target files to upload\",\n helpValue: \"file_path | package_name=file_path\",\n // eslint-disable-next-line @typescript-eslint/require-await -- oclif requires async but parsing is sync\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 ) as Record<string, unknown>;\n else if (flags.meta.endsWith(\".yaml\"))\n configFromFlags.meta = YAML.parse(\n await fs.promises.readFile(flags.meta, { encoding: \"utf-8\" }),\n ) as Record<string, unknown>;\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 { Command } from \"@oclif/core\";\nimport { updatePackages } from \"@platforma-sdk/blocks-deps-updater\";\n\nexport default class UpdateDeps extends Command {\n static override description =\n \"Updates @platforma-sdk and @milaboratories packages in pnpm-workspace.yaml catalog to their latest versions from npm registry.\";\n\n static override examples = [\"<%= config.bin %> <%= command.id %>\"];\n\n public async run(): Promise<void> {\n await updatePackages();\n }\n}\n","// DO NOT EDIT. This file was generated by oclif-index utility.\n\nimport Cmd0 from \"./build-meta\";\nimport Cmd1 from \"./build-model\";\nimport Cmd3 from \"./list-overview-snapshots\";\nimport Cmd4 from \"./mark-stable\";\nimport Cmd5 from \"./pack\";\nimport Cmd6 from \"./publish\";\nimport Cmd7 from \"./refresh-registry\";\nimport Cmd8 from \"./restore-overview-from-snapshot\";\nimport Cmd9 from \"./upload-package-v1\";\nimport Cmd10 from \"./update-deps\";\n\nexport const COMMANDS = {\n \"build-meta\": Cmd0,\n \"build-model\": Cmd1,\n \"list-overview-snapshots\": Cmd3,\n \"mark-stable\": Cmd4,\n pack: Cmd5,\n publish: Cmd6,\n \"refresh-registry\": Cmd7,\n \"restore-overview-from-snapshot\": Cmd8,\n \"upload-package-v1\": Cmd9,\n \"update-deps\": Cmd10,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"cli.mjs","names":[],"sources":["../src/cmd/build-meta.ts","../src/cmd/build-model.ts","../src/cmd/list-overview-snapshots.ts","../src/cmd/mark-stable.ts","../src/cmd/pack.ts","../src/cmd/publish.ts","../src/cmd/refresh-registry.ts","../src/cmd/restore-overview-from-snapshot.ts","../src/registry_v1/flags.ts","../src/cmd/upload-package-v1.ts","../src/cmd/update-deps.ts","../src/cmd/index.ts"],"sourcesContent":["import { Command, Flags } from \"@oclif/core\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport { loadPackDescriptionRaw } from \"../v2\";\nimport { embedBlockPackMetaAbsoluteBase64, resolveBlockPackMeta } 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 embedBlockPackMetaAbsoluteBase64(\n await resolveBlockPackMeta(descriptionRaw.meta, modulePath),\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 \"node:fs\";\nimport path from \"node:path\";\n\nasync function getFileContent(path: string) {\n try {\n return await fs.promises.readFile(path, \"utf8\");\n } catch (error: unknown) {\n if (error instanceof Error && \"code\" in error && 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 // eslint-disable-next-line prefer-const, @typescript-eslint/no-unsafe-assignment\n let { model, platforma } = require(modulePath);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n if (!model) model = platforma;\n if (!model) throw new Error('\"model\" export not found');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\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 (!(\"outputs\" in config) || !(\"sections\" in config))\n throw new Error('\"config\" has unexpected structure');\n\n const code = await getFileContent(flags.sourceBundle);\n if (code !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n config.code = {\n type: \"plain\",\n content: code,\n };\n }\n\n await fs.promises.writeFile(path.resolve(flags.destination), JSON.stringify(config));\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2 } from \"../v2/registry/registry\";\nimport { storageByUrl } from \"../io/storage\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class ListOverviewSnapshots extends Command {\n static description = \"List all available global overview snapshots in the registry\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n json: Flags.boolean({\n summary: \"output in JSON format\",\n default: false,\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(ListOverviewSnapshots);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n const snapshots = await registry.listGlobalOverviewSnapshots();\n\n if (flags.json) {\n this.log(JSON.stringify(snapshots, null, 2));\n } else {\n if (snapshots.length === 0) {\n this.log(\"No snapshots found.\");\n } else {\n this.log(`Found ${snapshots.length} snapshot(s):\\n`);\n for (const snapshot of snapshots) {\n this.log(` ${snapshot.timestamp}`);\n this.log(` Path: ${snapshot.path}`);\n this.log(\"\");\n }\n }\n }\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2, loadPackDescriptionRaw } from \"../v2\";\nimport path from \"node:path\";\nimport { overrideDescriptionVersion, StableChannel } from \"@milaboratories/pl-model-middle-layer\";\nimport { storageByUrl } from \"../io\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class MarkStable extends Command {\n static description = \"Mark target block stable\";\n\n static flags = {\n modulePath: Flags.string({\n char: \"i\",\n summary: \"input module path\",\n helpValue: \"<path>\",\n default: \".\",\n }),\n\n channel: Flags.string({\n char: \"c\",\n hidden: true,\n summary: \"custom channel\",\n helpValue: \"<channel name>\",\n default: StableChannel,\n }),\n\n \"version-override\": Flags.file({\n char: \"v\",\n summary: \"override package version\",\n }),\n\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n refresh: Flags.boolean({\n summary: \"refresh repository after adding the package\",\n default: true,\n allowNo: true,\n env: \"PL_REGISTRY_REFRESH\",\n }),\n\n unmark: Flags.boolean({\n summary:\n 'reverses meaning of this command, flag can be used to remove \"stable\" flag from the package',\n default: false,\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(MarkStable);\n let description = await loadPackDescriptionRaw(path.resolve(flags.modulePath));\n if (flags[\"version-override\"])\n description = overrideDescriptionVersion(description, flags[\"version-override\"]);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n if (flags.unmark) await registry.removePackageFromChannel(description.id, flags.channel);\n else await registry.addPackageToChannel(description.id, flags.channel);\n\n if (flags.refresh) await registry.updateIfNeeded();\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { loadPackDescription } from \"../v2/source_package\";\nimport path from \"node:path\";\nimport { buildBlockPackDist } from \"../v2/build_dist\";\n\nexport default class PackBlock extends Command {\n static description =\n \"Builds block pack and outputs a block pack manifest consolidating all \" +\n \"references assets into a single folder\";\n\n static flags = {\n modulePath: Flags.string({\n char: \"i\",\n summary: \"input module path\",\n helpValue: \"<path>\",\n default: \".\",\n }),\n\n destinationPath: Flags.string({\n char: \"o\",\n summary: \"output folder\",\n helpValue: \"<path>\",\n default: \"./block-pack\",\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(PackBlock);\n const description = await loadPackDescription(path.resolve(flags.modulePath));\n await buildBlockPackDist(description, path.resolve(flags.destinationPath));\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport fs from \"node:fs\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\nimport { ManifestFileName } from \"../v2/registry/schema_public\";\nimport {\n BlockPackManifest,\n overrideManifestVersion,\n StableChannel,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport { storageByUrl } from \"../io/storage\";\nimport { BlockRegistryV2 } from \"../v2/registry/registry\";\nimport path from \"node:path\";\n\nfunction simpleDeepMerge<T extends Record<string, unknown>>(\n target: Record<string, unknown>,\n source: T,\n): T {\n const result = { ...target };\n\n for (const key in source) {\n if (source[key] && typeof source[key] === \"object\" && !Array.isArray(source[key])) {\n if (result[key] && typeof result[key] === \"object\" && !Array.isArray(result[key])) {\n result[key] = simpleDeepMerge(\n result[key] as Record<string, unknown>,\n source[key] as Record<string, unknown>,\n );\n } else {\n result[key] = source[key];\n }\n } else {\n result[key] = source[key];\n }\n }\n\n return result as T;\n}\n\nexport default class Publish extends Command {\n static description =\n \"Publishes the block package and refreshes the registry (for v2 block-pack schema)\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n manifest: Flags.file({\n char: \"m\",\n summary: \"manifest file path\",\n exists: true,\n default: `./block-pack/${ManifestFileName}`,\n }),\n\n \"version-override\": Flags.file({\n char: \"v\",\n summary: \"override package version\",\n }),\n\n refresh: Flags.boolean({\n summary: \"refresh repository after adding the package\",\n default: true,\n allowNo: true,\n env: \"PL_REGISTRY_REFRESH\",\n }),\n\n unstable: Flags.boolean({\n summary: \"do not add the published package to stable channel\",\n default: false,\n env: \"PL_PUBLISH_UNSTABLE\",\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Publish);\n\n const manifestPath = path.resolve(flags.manifest);\n const rawManifest = JSON.parse(\n await fs.promises.readFile(manifestPath, { encoding: \"utf-8\" }),\n ) as Record<string, unknown>;\n let manifest = BlockPackManifest.parse(rawManifest);\n // To keep extra fields from the manifest and keep coerced fields\n manifest = simpleDeepMerge(\n rawManifest,\n manifest as BlockPackManifest & Record<string, unknown>,\n );\n const manifestRoot = path.dirname(manifestPath);\n\n this.log(`Manifest root = ${manifestRoot}`);\n\n if (flags[\"version-override\"])\n manifest = overrideManifestVersion(manifest, flags[\"version-override\"]);\n\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n await registry.publishPackage(manifest, async (file) =>\n Buffer.from(await fs.promises.readFile(path.resolve(manifestRoot, file))),\n );\n\n if (!flags.unstable) {\n this.log(`Adding package to ${StableChannel} channel...`);\n await registry.addPackageToChannel(manifest.description.id, StableChannel);\n }\n\n if (flags.refresh) await registry.updateIfNeeded();\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2 } from \"../v2\";\nimport { storageByUrl } from \"../io\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class RefreshRegistry extends Command {\n static description = \"Refresh overview files based on published but not proecessed artefacts\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n mode: Flags.string({\n char: \"m\",\n summary: 'refresh mode (allowed valiues: \"force\", \"normal\", \"dry-run\")',\n helpValue: \"<mode>\",\n options: [\"force\", \"normal\", \"dry-run\"],\n env: \"PL_REGISTRY_REFRESH_DRY_RUN\",\n default: \"normal\",\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(RefreshRegistry);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n await registry.updateIfNeeded(flags.mode as \"force\" | \"normal\" | \"dry-run\");\n }\n}\n","import { Command, Flags } from \"@oclif/core\";\nimport { BlockRegistryV2 } from \"../v2/registry/registry\";\nimport { storageByUrl } from \"../io/storage\";\nimport { OclifLoggerAdapter } from \"@milaboratories/ts-helpers-oclif\";\n\nexport default class RestoreOverviewFromSnapshot extends Command {\n static description = \"Restore global overview from a snapshot\";\n\n static flags = {\n registry: Flags.string({\n char: \"r\",\n summary: \"full address of the registry\",\n helpValue: \"<address>\",\n env: \"PL_REGISTRY\",\n required: true,\n }),\n\n snapshot: Flags.string({\n char: \"s\",\n summary: \"snapshot timestamp ID to restore from\",\n helpValue: \"<timestamp>\",\n required: true,\n }),\n\n \"skip-confirmation\": Flags.boolean({\n summary: \"skip confirmation prompt (use with caution)\",\n default: false,\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(RestoreOverviewFromSnapshot);\n const storage = storageByUrl(flags.registry);\n const registry = new BlockRegistryV2(storage, new OclifLoggerAdapter(this));\n\n // Check if snapshot exists\n const snapshots = await registry.listGlobalOverviewSnapshots();\n const targetSnapshot = snapshots.find((s) => s.timestamp === flags.snapshot);\n\n if (!targetSnapshot) {\n this.error(\n `Snapshot '${flags.snapshot}' not found. Available snapshots:\\n${\n snapshots.map((s) => ` - ${s.timestamp}`).join(\"\\n\") || \" (none)\"\n }`,\n );\n }\n\n // Confirmation prompt (unless skipped)\n if (!flags[\"skip-confirmation\"]) {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const answer = await new Promise<string>((resolve) => {\n rl.question(\n `⚠️ This will overwrite the current global overview with snapshot '${flags.snapshot}'.\\n` +\n `Are you sure you want to continue? (y/N): `,\n resolve,\n );\n });\n\n rl.close();\n\n if (answer.toLowerCase() !== \"y\" && answer.toLowerCase() !== \"yes\") {\n this.log(\"Restore cancelled.\");\n return;\n }\n }\n\n // Perform restore\n try {\n await registry.restoreGlobalOverviewFromSnapshot(flags.snapshot);\n this.log(`✅ Successfully restored global overview from snapshot '${flags.snapshot}'`);\n } catch (error) {\n this.error(`Failed to restore from snapshot: ${String(error)}`);\n }\n }\n}\n","import { Flags } from \"@oclif/core\";\nimport path from \"node:path\";\n\nexport interface TargetFile {\n src: string;\n destName: string;\n}\n\nfunction parseTargetFile(arg: string): TargetFile {\n const match = arg.match(/(?<destName>[^/\\\\]+)=(?<src>.*)/);\n if (match) {\n const { src, destName } = match.groups!;\n return { src, destName };\n } else {\n return { src: arg, destName: path.basename(arg) };\n }\n}\n\nexport const targetFile = Flags.custom<TargetFile>({\n summary: \"target files to upload\",\n helpValue: \"file_path | package_name=file_path\",\n // eslint-disable-next-line @typescript-eslint/require-await -- oclif requires async but parsing is sync\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 ) as Record<string, unknown>;\n else if (flags.meta.endsWith(\".yaml\"))\n configFromFlags.meta = YAML.parse(\n await fs.promises.readFile(flags.meta, { encoding: \"utf-8\" }),\n ) as Record<string, unknown>;\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 { Command } from \"@oclif/core\";\nimport { updatePackages } from \"@platforma-sdk/blocks-deps-updater\";\n\nexport default class UpdateDeps extends Command {\n static override description =\n \"Updates @platforma-sdk and @milaboratories packages in pnpm-workspace.yaml catalog to their latest versions from npm registry.\";\n\n static override examples = [\"<%= config.bin %> <%= command.id %>\"];\n\n public async run(): Promise<void> {\n await updatePackages();\n }\n}\n","// DO NOT EDIT. This file was generated by oclif-index utility.\n\nimport Cmd0 from \"./build-meta\";\nimport Cmd1 from \"./build-model\";\nimport Cmd3 from \"./list-overview-snapshots\";\nimport Cmd4 from \"./mark-stable\";\nimport Cmd5 from \"./pack\";\nimport Cmd6 from \"./publish\";\nimport Cmd7 from \"./refresh-registry\";\nimport Cmd8 from \"./restore-overview-from-snapshot\";\nimport Cmd9 from \"./upload-package-v1\";\nimport Cmd10 from \"./update-deps\";\n\nexport const COMMANDS = {\n \"build-meta\": Cmd0,\n \"build-model\": Cmd1,\n \"list-overview-snapshots\": Cmd3,\n \"mark-stable\": Cmd4,\n pack: Cmd5,\n publish: Cmd6,\n \"refresh-registry\": Cmd7,\n \"restore-overview-from-snapshot\": Cmd8,\n \"upload-package-v1\": Cmd9,\n \"update-deps\": Cmd10,\n};\n"],"mappings":"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"}