@digital-herd/content-hub-cli 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const syncComponentConfigCommand: Command;
@@ -0,0 +1 @@
1
+ var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.syncComponentConfigCommand=void 0;let commander_1=require("commander"),globalCommandConfig_js_1=require("../../../utils/globalCommandConfig.js"),ExternalComponentConfigService_js_1=__importDefault(require("../services/ExternalComponentConfigService.js")),prompts_1=require("@inquirer/prompts");exports.syncComponentConfigCommand=(0,globalCommandConfig_js_1.setGlobalConfig)(new commander_1.Command("sync-component-config")).description("Run ContentHub build").action(async e=>{var{config:e,contenthubService:n}=await(0,globalCommandConfig_js_1.globalCommandConfig)(e),o=await(0,prompts_1.input)({message:"Enter the component name:"}),t=await(0,prompts_1.input)({message:"asset identifier"});await new ExternalComponentConfigService_js_1.default(n,e).syncConfigAsset(o,t)});
@@ -1 +1 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0});let buildExternalComponent_1=require("./commands/buildExternalComponent"),watchExternalComponent_1=require("./commands/watchExternalComponent"),createComponent_1=require("./commands/createComponent");exports.default={commands:[buildExternalComponent_1.buildExternalComponentCommand,watchExternalComponent_1.watchExternalComponentCommand,createComponent_1.createComponentCommand]};
1
+ Object.defineProperty(exports,"__esModule",{value:!0});let buildExternalComponent_1=require("./commands/buildExternalComponent"),watchExternalComponent_1=require("./commands/watchExternalComponent"),createComponent_1=require("./commands/createComponent"),SyncComponent_1=require("./commands/SyncComponent");exports.default={commands:[buildExternalComponent_1.buildExternalComponentCommand,watchExternalComponent_1.watchExternalComponentCommand,createComponent_1.createComponentCommand,SyncComponent_1.syncComponentConfigCommand]};
@@ -0,0 +1,12 @@
1
+ import { ContenthubConfig } from "../../../types/ContentHubConfig.interface";
2
+ import ExternalComponentsService from "../../../services/FileService";
3
+ import { ExternalComponentConfig } from "../../../types/ExternalComponentConfig.interface";
4
+ import ContenthubService from "../../../services/ContenthubService";
5
+ declare class ExternalComponentConfigService {
6
+ contenthubService: ContenthubService;
7
+ externalComponentsService: ExternalComponentsService;
8
+ constructor(contenthubService: ContenthubService, config: ContenthubConfig);
9
+ syncConfigAsset(component: string, assetIdentifier: string): Promise<void>;
10
+ writeConfigFile(component: string, config: ExternalComponentConfig): void;
11
+ }
12
+ export default ExternalComponentConfigService;
@@ -0,0 +1,6 @@
1
+ var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});let sc_contenthub_webclient_sdk_1=require("@sitecore/sc-contenthub-webclient-sdk"),FileService_1=__importDefault(require("../../../services/FileService")),fs_1=require("fs"),lodash_1=require("lodash"),apiCatch_1=require("../../../utils/apiCatch"),logger_1=__importDefault(require("../../../utils/logger"));class ExternalComponentConfigService{contenthubService;externalComponentsService;constructor(e,t){this.contenthubService=e,this.externalComponentsService=new FileService_1.default(t)}async syncConfigAsset(e,t){var n=await(0,apiCatch_1.apiErrorCatch)(()=>this.contenthubService.client.entities.getAsync(t,new sc_contenthub_webclient_sdk_1.EntityLoadConfiguration(sc_contenthub_webclient_sdk_1.CultureLoadOption.Default,sc_contenthub_webclient_sdk_1.PropertyLoadOption.None,new sc_contenthub_webclient_sdk_1.RelationLoadOption(["AssetToPageComponent"]))));n||(logger_1.default.error("Asset not found"),process.exit(-1));let i=n.getRelation("AssetToPageComponent")?.getIds()||[];n=(await(0,apiCatch_1.apiErrorCatch)(()=>this.contenthubService.client.entities.getManyAsync(i,sc_contenthub_webclient_sdk_1.EntityLoadConfiguration.Full))).reduce((e,t)=>{let n=t.getPropertyValue("PageComponent.Settings").config;var i=e.find(e=>(0,lodash_1.isEqual)(e.config,n));return i?i.pageComponentIdentifiers.push(t.identifier):e.push({pageComponentIdentifiers:[t.identifier],config:n}),e},[]);this.writeConfigFile(e,{components:n})}writeConfigFile(e,t){var n=this.externalComponentsService.getDirectoryOfComponent(e);(0,fs_1.writeFileSync)(n+`/${e}.config.ts`,`
2
+ import { type ExternalComponentConfig } from "@digital-herd/content-hub-cli";
3
+
4
+ export default ${JSON.stringify(t)} as ExternalComponentConfig;
5
+
6
+ `)}}exports.default=ExternalComponentConfigService;
@@ -9,5 +9,6 @@ declare class ExternalComponentPublishService {
9
9
  private updateExternalComponents;
10
10
  private createOrUpdateAsset;
11
11
  private getOrCreateAsset;
12
+ private getAssetFromFileName;
12
13
  }
13
14
  export default ExternalComponentPublishService;
@@ -1 +1 @@
1
- var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&("get"in r?t.__esModule:!r.writable&&!r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,i,r)}:function(e,t,n,i){e[i=void 0===i?n:i]=t[n]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||(()=>{var r=function(e){return(r=Object.getOwnPropertyNames||function(e){var t,n=[];for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[n.length]=t);return n})(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),i=0;i<n.length;i++)"default"!==n[i]&&__createBinding(t,e,n[i]);return __setModuleDefault(t,e),t}})(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});let sc_contenthub_webclient_sdk_1=require("@sitecore/sc-contenthub-webclient-sdk"),FileService_1=__importDefault(require("../../../services/FileService")),array_1=require("../../../utils/array"),apiCatch_1=require("../../../utils/apiCatch"),hash_1=require("../../../utils/hash"),logger_1=__importStar(require("../../../utils/logger")),lodash_1=require("lodash");class ExternalComponentPublishService{contenthubService;fileService;constructor(e,t){this.contenthubService=e,this.fileService=new FileService_1.default(t)}async publishToPortalAsset(e){var t;for(t of Array.isArray(e)?e:[e]){var n=this.fileService.getComponentConfig(t),i=this.fileService.getComponentBuild(t),i=await this.createOrUpdateAsset(t,i),n=await this.fileService.tsFileImport(n);await this.updateExternalComponents(t,n,{assetId:i.id}),logger_1.loggerSuccess.info(t+" Published")}}async publishToLocalPath(e,t){var n;for(n of Array.isArray(t)?t:[t]){var i=this.fileService.getComponentConfig(n),i=await this.fileService.tsFileImport(i),r=`${e}/${n}.js`;await this.updateExternalComponents(n,i,{path:r}),logger_1.loggerSuccess.info(`"${n}" Page component updated to local path`)}}async updateExternalComponents(e,n,{assetId:i,path:r}){var o=n.components.flatMap(e=>e.pageComponentIdentifiers),a=(logger_1.default.info(`Start updating ${o.length} External Page components`),await Promise.all((0,array_1.arrayToChunks)(o,50).map(e=>(0,apiCatch_1.apiErrorCatch)(()=>this.contenthubService.client.entities.getManyAsync(e,new sc_contenthub_webclient_sdk_1.EntityLoadConfiguration(sc_contenthub_webclient_sdk_1.CultureLoadOption.Default,new sc_contenthub_webclient_sdk_1.PropertyLoadOption("PageComponent.Settings"),new sc_contenthub_webclient_sdk_1.RelationLoadOption(["AssetToPageComponent"])))))).then(e=>e.flat()));for(let t of o){let e=a.find(e=>e.identifier===t);var s=n.components.find(e=>e.pageComponentIdentifiers.includes(t)),c=(e||(logger_1.default.error(`${t} was not found that was specified in the config of "${e}"`),process.exit(-1)),await e.getPropertyValue("PageComponent.Settings")),s={...c,config:s.config,path:r||void 0},c=((0,lodash_1.isEqual)(c,s)||e.setPropertyValue("PageComponent.Settings",s),e.getRelation("AssetToPageComponent"));i&&!c.getIds().includes(i)?c.setIds([i]):r&&c.setIds([]),e.isDirty&&await(0,apiCatch_1.apiErrorCatch)(()=>this.contenthubService.client.entities.saveAsync(e))}}async createOrUpdateAsset(e,t){var n=await this.getOrCreateAsset(e),i=n.getPropertyValue("Digest");if(i){var r=await(0,hash_1.sha1FromFile)(t);if(i.replace("0x","")===r)return logger_1.default.info(`"${e}" source code wasn't updated so skip.`),n}i=new sc_contenthub_webclient_sdk_1.LocalUploadSource("file://"+t);let o=new sc_contenthub_webclient_sdk_1.UploadRequest(i,"AssetUploadConfiguration","NewMainFile");return o.actionParameters={AssetId:n.id},await(0,apiCatch_1.apiErrorCatch)(()=>this.contenthubService.client.uploads.uploadAsync(o)),logger_1.default.info(`"${e}" source code uploaded to asset`),n}async getOrCreateAsset(t){var e=await this.contenthubService.getOrFetchId("M.Content.Repository.Portal");let n=new sc_contenthub_webclient_sdk_1.Query({filter:new sc_contenthub_webclient_sdk_1.CompositeQueryFilter({combineMethod:sc_contenthub_webclient_sdk_1.CompositeFilterOperator.And,children:[new sc_contenthub_webclient_sdk_1.DefinitionQueryFilter({name:"M.Asset",operator:sc_contenthub_webclient_sdk_1.ComparisonOperator.Equals}),new sc_contenthub_webclient_sdk_1.PropertyQueryFilter({property:"Title",dataType:sc_contenthub_webclient_sdk_1.FilterDataType.String,values:[t,t+".js"],operator:sc_contenthub_webclient_sdk_1.ComparisonOperator.Equals}),new sc_contenthub_webclient_sdk_1.RelationQueryFilter({relation:"ContentRepositoryToAsset",parentId:e})]}),take:1});var i=await(0,apiCatch_1.apiErrorCatch)(()=>this.contenthubService.client.querying.queryAsync(n,new sc_contenthub_webclient_sdk_1.EntityLoadConfiguration(sc_contenthub_webclient_sdk_1.CultureLoadOption.Default,new sc_contenthub_webclient_sdk_1.PropertyLoadOption(["FileName","Title","Digest"]),new sc_contenthub_webclient_sdk_1.RelationLoadOption(["AssetToPageComponent"]))));if(i.items.length){let e=i.items[0];return e.getPropertyValue("Title")!==t&&(e.setPropertyValue("Title",t),await(0,apiCatch_1.apiErrorCatch)(()=>this.contenthubService.client.entities.saveAsync(e))),e}let r=await this.contenthubService.client.entityFactory.createAsync("M.Asset");return r.setPropertyValue("Title",t),r.setPropertyValue("FileName",t+".js"),r.getRelation("ContentRepositoryToAsset")?.setIds([e]),r.id=await(0,apiCatch_1.apiErrorCatch)(()=>this.contenthubService.client.entities.saveAsync(r)),r}}exports.default=ExternalComponentPublishService;
1
+ var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&("get"in r?t.__esModule:!r.writable&&!r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,r)}:function(e,t,i,n){e[n=void 0===n?i:n]=t[i]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||(()=>{var r=function(e){return(r=Object.getOwnPropertyNames||function(e){var t,i=[];for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(i[i.length]=t);return i})(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=r(e),n=0;n<i.length;n++)"default"!==i[n]&&__createBinding(t,e,i[n]);return __setModuleDefault(t,e),t}})(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});let sc_contenthub_webclient_sdk_1=require("@sitecore/sc-contenthub-webclient-sdk"),FileService_1=__importDefault(require("../../../services/FileService")),array_1=require("../../../utils/array"),apiCatch_1=require("../../../utils/apiCatch"),hash_1=require("../../../utils/hash"),logger_1=__importStar(require("../../../utils/logger")),lodash_1=require("lodash");class ExternalComponentPublishService{contenthubService;fileService;constructor(e,t){this.contenthubService=e,this.fileService=new FileService_1.default(t)}async publishToPortalAsset(e){var t;for(t of Array.isArray(e)?e:[e]){var i=this.fileService.getComponentConfig(t),n=this.fileService.getComponentBuild(t),i=await this.fileService.tsFileImport(i),n=await this.createOrUpdateAsset(t,n,i);await this.updateExternalComponents(t,i,{assetId:n.id}),logger_1.loggerSuccess.info(t+" Published")}}async publishToLocalPath(e,t){var i;for(i of Array.isArray(t)?t:[t]){var n=this.fileService.getComponentConfig(i),n=await this.fileService.tsFileImport(n),r=`${e}/${i}.js`;await this.updateExternalComponents(i,n,{path:r}),logger_1.loggerSuccess.info(`"${i}" Page component updated to local path`)}}async updateExternalComponents(e,i,{assetId:n,path:r}){var a=i.components.flatMap(e=>e.pageComponentIdentifiers),o=(logger_1.default.info(`Start updating ${a.length} External Page components`),await Promise.all((0,array_1.arrayToChunks)(a,50).map(e=>(0,apiCatch_1.apiErrorCatch)(()=>this.contenthubService.client.entities.getManyAsync(e,new sc_contenthub_webclient_sdk_1.EntityLoadConfiguration(sc_contenthub_webclient_sdk_1.CultureLoadOption.Default,new sc_contenthub_webclient_sdk_1.PropertyLoadOption("PageComponent.Settings"),new sc_contenthub_webclient_sdk_1.RelationLoadOption(["AssetToPageComponent"])))))).then(e=>e.flat()));for(let t of a){let e=o.find(e=>e.identifier===t);var s=i.components.find(e=>e.pageComponentIdentifiers.includes(t)),c=(e||(logger_1.default.error(`${t} was not found that was specified in the config of "${e}"`),process.exit(-1)),await e.getPropertyValue("PageComponent.Settings")),s={...c,config:s.config,path:r||void 0},c=((0,lodash_1.isEqual)(c,s)||e.setPropertyValue("PageComponent.Settings",s),e.getRelation("AssetToPageComponent"));n&&!c.getIds().includes(n)?c.setIds([n]):r&&c.setIds([]),e.isDirty&&await(0,apiCatch_1.apiErrorCatch)(()=>this.contenthubService.client.entities.saveAsync(e))}}async createOrUpdateAsset(e,t,i){var i=await this.getOrCreateAsset(e,i),n=i.getPropertyValue("Digest");if(n){var r=await(0,hash_1.sha1FromFile)(t);if(n.replace("0x","")===r)return logger_1.default.info(`"${e}" source code wasn't updated so skip.`),i}n=new sc_contenthub_webclient_sdk_1.LocalUploadSource("file://"+t);let a=new sc_contenthub_webclient_sdk_1.UploadRequest(n,"AssetUploadConfiguration","NewMainFile");return a.actionParameters={AssetId:i.id},await(0,apiCatch_1.apiErrorCatch)(()=>this.contenthubService.client.uploads.uploadAsync(a)),logger_1.default.info(`"${e}" source code uploaded to asset`),i}async getOrCreateAsset(e,t){let i=await this.getAssetFromFileName(e);return(i=!i&&t.deprecatedAssetFileName?await this.getAssetFromFileName(t.deprecatedAssetFileName):i)?i.getPropertyValue("Title")!==e&&(i.setPropertyValue("Title",e),i.setPropertyValue("FileName",e+".js"),await(0,apiCatch_1.apiErrorCatch)(()=>this.contenthubService.client.entities.saveAsync(i))):(t=await this.contenthubService.getOrFetchId("M.Content.Repository.Portal"),(i=await this.contenthubService.client.entityFactory.createAsync("M.Asset")).setPropertyValue("Title",e),i.setPropertyValue("FileName",e+".js"),i.getRelation("ContentRepositoryToAsset")?.setIds([t]),i.id=await(0,apiCatch_1.apiErrorCatch)(()=>this.contenthubService.client.entities.saveAsync(i))),i}async getAssetFromFileName(e){var t=await this.contenthubService.getOrFetchId("M.Content.Repository.Portal"),e=e.replace(".js","");let i=new sc_contenthub_webclient_sdk_1.Query({filter:new sc_contenthub_webclient_sdk_1.CompositeQueryFilter({combineMethod:sc_contenthub_webclient_sdk_1.CompositeFilterOperator.And,children:[new sc_contenthub_webclient_sdk_1.DefinitionQueryFilter({name:"M.Asset",operator:sc_contenthub_webclient_sdk_1.ComparisonOperator.Equals}),new sc_contenthub_webclient_sdk_1.PropertyQueryFilter({property:"Title",dataType:sc_contenthub_webclient_sdk_1.FilterDataType.String,values:[e,e+".js"],operator:sc_contenthub_webclient_sdk_1.ComparisonOperator.Equals}),new sc_contenthub_webclient_sdk_1.RelationQueryFilter({relation:"ContentRepositoryToAsset",parentId:t})]}),take:1});return(await(0,apiCatch_1.apiErrorCatch)(()=>this.contenthubService.client.querying.queryAsync(i,new sc_contenthub_webclient_sdk_1.EntityLoadConfiguration(sc_contenthub_webclient_sdk_1.CultureLoadOption.Default,new sc_contenthub_webclient_sdk_1.PropertyLoadOption(["FileName","Title","Digest"]),new sc_contenthub_webclient_sdk_1.RelationLoadOption(["AssetToPageComponent"]))))).items[0]}}exports.default=ExternalComponentPublishService;
@@ -4,4 +4,5 @@ export interface ComponentEntry {
4
4
  }
5
5
  export interface ExternalComponentConfig {
6
6
  components: ComponentEntry[];
7
+ deprecatedAssetFileName?: string;
7
8
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@digital-herd/content-hub-cli",
3
3
  "description": "CLI tools for managing Sitecore Content Hub external components and scripts",
4
- "version": "1.1.1",
4
+ "version": "1.1.2",
5
5
  "type": "commonjs",
6
6
  "main": "./lib/index.js",
7
7
  "types": "./lib/index.d.ts",