@digital-herd/content-hub-cli 1.1.11 → 1.1.13

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/lib/bin.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});let commander_1=require("commander"),modules_1=__importDefault(require("./modules")),program=new commander_1.Command;program.name("content-hub-tools").description("ContentHub build & utility CLI").version("1.1.11");for(let o of modules_1.default)for(let e of o.commands)program.addCommand(e);program.parse(process.argv);
2
+ var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});let commander_1=require("commander"),modules_1=__importDefault(require("./modules")),program=new commander_1.Command;program.name("content-hub-tools").description("ContentHub build & utility CLI").version("1.1.12");for(let o of modules_1.default)for(let e of o.commands)program.addCommand(e);program.parse(process.argv);
@@ -1,2 +1,4 @@
1
1
  export declare const GLOBAL_TEMP_DIRECTORY = ".contenthub-cli";
2
2
  export declare const BUILD_DIRECTORY = ".contenthub-cli/dist";
3
+ export declare const PATCH_DIRECTORY = ".contenthub-cli/patches";
4
+ export declare const LOGS_DIRECTORY = ".contenthub-cli/patches";
@@ -1 +1 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.BUILD_DIRECTORY=exports.GLOBAL_TEMP_DIRECTORY=void 0,exports.GLOBAL_TEMP_DIRECTORY=".contenthub-cli",exports.BUILD_DIRECTORY=".contenthub-cli/dist";
1
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.LOGS_DIRECTORY=exports.PATCH_DIRECTORY=exports.BUILD_DIRECTORY=exports.GLOBAL_TEMP_DIRECTORY=void 0,exports.GLOBAL_TEMP_DIRECTORY=".contenthub-cli",exports.BUILD_DIRECTORY=".contenthub-cli/dist",exports.PATCH_DIRECTORY=".contenthub-cli/patches",exports.LOGS_DIRECTORY=".contenthub-cli/patches";
package/lib/index.d.ts CHANGED
@@ -2,3 +2,4 @@ export * from "./types/ContentHubConfig.interface.js";
2
2
  export * from "./types/ExternalComponentConfig.interface.js";
3
3
  export * from "./types/ScriptConfig.interface.js";
4
4
  export * from "./types/Patch.interface.js";
5
+ export * from "./modules";
package/lib/index.js CHANGED
@@ -1 +1 @@
1
- var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&("get"in n?t.__esModule:!n.writable&&!n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,n)}:function(e,t,r,i){e[i=void 0===i?r:i]=t[r]}),__exportStar=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||__createBinding(t,e,r)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./types/ContentHubConfig.interface.js"),exports),__exportStar(require("./types/ExternalComponentConfig.interface.js"),exports),__exportStar(require("./types/ScriptConfig.interface.js"),exports),__exportStar(require("./types/Patch.interface.js"),exports);
1
+ var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&("get"in i?t.__esModule:!i.writable&&!i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,o,i)}:function(e,t,r,o){e[o=void 0===o?r:o]=t[r]}),__exportStar=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||__createBinding(t,e,r)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./types/ContentHubConfig.interface.js"),exports),__exportStar(require("./types/ExternalComponentConfig.interface.js"),exports),__exportStar(require("./types/ScriptConfig.interface.js"),exports),__exportStar(require("./types/Patch.interface.js"),exports),__exportStar(require("./modules"),exports);
@@ -1,3 +1,4 @@
1
+ export * from "./manual-patches";
1
2
  declare const _default: {
2
3
  commands: import("commander").Command[];
3
4
  }[];
@@ -1 +1 @@
1
- var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});let external_components_1=__importDefault(require("./external-components")),scripts_1=__importDefault(require("./scripts")),manual_patches_1=__importDefault(require("./manual-patches"));exports.default=[external_components_1.default,scripts_1.default,manual_patches_1.default];
1
+ var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,a){void 0===a&&(a=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&("get"in n?t.__esModule:!n.writable&&!n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,a,n)}:function(e,t,r,a){e[a=void 0===a?r:a]=t[r]}),__exportStar=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||__createBinding(t,e,r)},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});let external_components_1=__importDefault(require("./external-components")),scripts_1=__importDefault(require("./scripts")),manual_patches_1=__importDefault(require("./manual-patches"));__exportStar(require("./manual-patches"),exports),exports.default=[external_components_1.default,scripts_1.default,manual_patches_1.default];
@@ -0,0 +1,21 @@
1
+ import { ContentHubClient } from "@sitecore/sc-contenthub-webclient-sdk";
2
+ import { Logger } from "tslog";
3
+ export interface PatchConfig {
4
+ name: string;
5
+ onLastHitData: (lastHit: string) => void;
6
+ }
7
+ export type PatchConstructor = new (client: ContentHubClient, props: PatchConfig) => ManualPatch;
8
+ declare abstract class ManualPatch {
9
+ client: ContentHubClient;
10
+ name: string;
11
+ logger: Logger<any>;
12
+ onLastHitData: (lastHit: any) => void;
13
+ constructor(client: ContentHubClient, { name, onLastHitData }: PatchConfig);
14
+ preRun(): Promise<void>;
15
+ postRun(): Promise<void>;
16
+ abstract run(lastHitData: any): Promise<void>;
17
+ logInfo(...args: any): void;
18
+ logWarning(...args: any): void;
19
+ logError(...args: any): void;
20
+ }
21
+ export default ManualPatch;
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,"__esModule",{value:!0});let tslog_1=require("tslog");class ManualPatch{client;name;logger;onLastHitData;constructor(t,{name:e,onLastHitData:a}){this.client=t,this.name=e,this.logger=new tslog_1.Logger({name:"Contenthub CLI",minLevel:0,prettyLogTemplate:"{{name}} : "}),this.onLastHitData=a}async preRun(){}async postRun(){}logInfo(...t){this.logger.info(...t)}logWarning(...t){this.logger.warn(...t)}logError(...t){this.logger.error(...t)}}exports.default=ManualPatch;
@@ -1 +1 @@
1
- var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.createPatchCommand=void 0;let commander_1=require("commander"),prompts_1=require("@inquirer/prompts"),globalCommandConfig_js_1=require("../../../utils/globalCommandConfig.js"),logger_js_1=__importDefault(require("../../../utils/logger.js")),CreatePatchService_js_1=__importDefault(require("../services/CreatePatchService.js"));exports.createPatchCommand=new commander_1.Command("create-manual-patch").description("Create a new patch from template").action(async e=>{e=(await(0,globalCommandConfig_js_1.globalCommandConfig)(e)).config,e=new CreatePatchService_js_1.default(e);try{var t=(await(0,prompts_1.input)({message:"Enter the patch name (e.g., MyPatch, FixUserIssue):",validate:e=>e&&0!==e.trim().length?!!/^[a-zA-Z]+$/.test(e)||"Patch name must contain only letters":"Patch name is required"})).trim();await e.createPatch(t)}catch(e){e instanceof Error&&logger_js_1.default.error("Failed to create patch: "+e.message),process.exit(1)}});
1
+ var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.createPatchCommand=void 0;let commander_1=require("commander"),prompts_1=require("@inquirer/prompts"),globalCommandConfig_js_1=require("../../../utils/globalCommandConfig.js"),logger_js_1=__importDefault(require("../../../utils/logger.js")),CreatePatchService_js_1=__importDefault(require("../services/CreatePatchService.js")),PatchSelectionService_js_1=__importDefault(require("../services/PatchSelectionService.js"));exports.createPatchCommand=new commander_1.Command("create-manual-patch").description("Create a new patch from template").action(async a=>{var r,i,o=(await(0,globalCommandConfig_js_1.globalCommandConfig)(a)).config,s=new CreatePatchService_js_1.default(o),o=new PatchSelectionService_js_1.default(o);try{let t=await o.getGroups(),e=a.group;e||(r="__CREATE_NEW__",i=await(0,prompts_1.select)({message:"Select which patch Group you want to use:",choices:[...t.map(e=>({name:e,value:e})),{name:"➕ Create new group...",value:r}]}),e=i===r?await(0,prompts_1.input)({message:"Enter the new group name (e.g., feature):",validate:e=>e&&0!==e.trim().length?!t.includes(e.trim())||"This group already exists. Please choose a different name.":"Group name is required"}):i);var n=(await(0,prompts_1.input)({message:"Enter the patch name (e.g., MyPatch, FixUserIssue):",validate:e=>e&&0!==e.trim().length?!!/^[a-zA-Z]+$/.test(e)||"Patch name must contain only letters":"Patch name is required"})).trim();await s.createPatch(e,n)}catch(e){e instanceof Error&&logger_js_1.default.error("Failed to create patch: "+e.message),process.exit(1)}});
@@ -1 +1 @@
1
- var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.runPatchCommand=void 0;let commander_1=require("commander"),prompts_1=require("@inquirer/prompts"),globalCommandConfig_js_1=require("../../../utils/globalCommandConfig.js"),logger_js_1=__importDefault(require("../../../utils/logger.js")),RunPatchService_js_1=__importDefault(require("../services/RunPatchService.js"));exports.runPatchCommand=(0,globalCommandConfig_js_1.setGlobalConfig)(new commander_1.Command("run-manual-patch")).description("Run a patch").action(async e=>{var{config:e,contenthubService:a}=await(0,globalCommandConfig_js_1.globalCommandConfig)(e),a=new RunPatchService_js_1.default(a,e);try{var r=a.getAvailablePatches(),t=(0===r.length&&(logger_js_1.default.error("No patches found in the patch directory"),process.exit(1)),await(0,prompts_1.select)({message:"Select a patch to run:",choices:r.map(e=>({name:`${e.name} (modified: ${e.modifiedTime.toLocaleString()})`,value:e.name}))}));await a.runPatch(t)}catch(e){e instanceof Error&&logger_js_1.default.error("Failed to run patch: "+e.message),process.exit(1)}});
1
+ var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.runPatchCommand=void 0;let commander_1=require("commander"),prompts_1=require("@inquirer/prompts"),globalCommandConfig_js_1=require("../../../utils/globalCommandConfig.js"),logger_js_1=__importDefault(require("../../../utils/logger.js")),RunPatchService_js_1=__importDefault(require("../services/RunPatchService.js")),PatchSelectionService_js_1=__importDefault(require("../services/PatchSelectionService.js"));exports.runPatchCommand=(0,globalCommandConfig_js_1.setGlobalConfig)(new commander_1.Command("run-manual-patch")).option("-g, --group <group>","patch group").option("-p, --patch <patch>","patch in group").description("Run a patch").action(async e=>{var{config:t,contenthubService:a}=await(0,globalCommandConfig_js_1.globalCommandConfig)(e),a=new RunPatchService_js_1.default(a,t),t=new PatchSelectionService_js_1.default(t);try{var o=await t.getGroups(),r=e.group||await(0,prompts_1.select)({message:"Select with patch Group you want to run:",choices:o.map(e=>({name:e,value:e}))}),i=await t.getPatches(r),c=e.patch||await(0,prompts_1.select)({message:"Select with patch Group you want to run:",choices:i.map(e=>({name:e,value:e}))}),n=t.getPatchFile(r,c);console.log(n),await a.runPatch(n,c)}catch(e){e instanceof Error&&logger_js_1.default.error("Failed to run patch: "+e.message),process.exit(1)}});
@@ -1,3 +1,5 @@
1
+ import ManualPatch from "./base/ManualPatch";
2
+ export { ManualPatch };
1
3
  declare const _default: {
2
4
  commands: import("commander").Command[];
3
5
  };
@@ -1 +1 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0});let createPatchComponent_1=require("./commands/createPatchComponent"),runPatch_1=require("./commands/runPatch");exports.default={commands:[createPatchComponent_1.createPatchCommand,runPatch_1.runPatchCommand]};
1
+ var __importDefault=this&&this.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ManualPatch=void 0;let createPatchComponent_1=require("./commands/createPatchComponent"),runPatch_1=require("./commands/runPatch"),ManualPatch_1=__importDefault(require("./base/ManualPatch"));exports.ManualPatch=ManualPatch_1.default,exports.default={commands:[createPatchComponent_1.createPatchCommand,runPatch_1.runPatchCommand]};
@@ -6,5 +6,5 @@ export default class CreatePatchService {
6
6
  /**
7
7
  * Create a new patch file from template
8
8
  */
9
- createPatch(patchName: string): Promise<void>;
9
+ createPatch(group: string, patchName: string): Promise<void>;
10
10
  }
@@ -1,10 +1,13 @@
1
- var __createBinding=this&&this.__createBinding||(Object.create?function(t,e,r,a){void 0===a&&(a=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&("get"in i?e.__esModule:!i.writable&&!i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,a,i)}:function(t,e,r,a){t[a=void 0===a?r:a]=e[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),__importStar=this&&this.__importStar||(()=>{var i=function(t){return(i=Object.getOwnPropertyNames||function(t){var e,r=[];for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&(r[r.length]=e);return r})(t)};return function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=i(t),a=0;a<r.length;a++)"default"!==r[a]&&__createBinding(e,t,r[a]);return __setModuleDefault(e,t),e}})(),__importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0});let fs=__importStar(require("fs")),path=__importStar(require("path")),logger_js_1=__importDefault(require("../../../utils/logger.js"));class CreatePatchService{config;patchDir;constructor(t){this.config=t,this.patchDir=path.resolve(process.cwd(),t.patchDir)}async createPatch(t){var t=t.charAt(0).toUpperCase()+t.slice(1),e=t.charAt(0).toLowerCase()+t.slice(1),e=(fs.existsSync(this.patchDir)||fs.mkdirSync(this.patchDir,{recursive:!0}),path.join(this.patchDir,e+".patch.ts"));if(fs.existsSync(e))throw logger_js_1.default.error(`Patch "${t}" already exists`),new Error("Patch already exists");logger_js_1.default.info(`📦 Creating patch "${t}"...`);var r=`import { PatchParams } from "@digital-herd/content-hub-cli";
1
+ var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,a){void 0===a&&(a=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&("get"in i?t.__esModule:!i.writable&&!i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,a,i)}:function(e,t,r,a){e[a=void 0===a?r:a]=t[r]}),__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 i=function(e){return(i=Object.getOwnPropertyNames||function(e){var t,r=[];for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[r.length]=t);return r})(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=i(e),a=0;a<r.length;a++)"default"!==r[a]&&__createBinding(t,e,r[a]);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 fs=__importStar(require("fs")),path=__importStar(require("path")),logger_js_1=__importDefault(require("../../../utils/logger.js"));class CreatePatchService{config;patchDir;constructor(e){this.config=e,this.patchDir=path.resolve(process.cwd(),e.patchDir)}async createPatch(e,t){var t=t.charAt(0).toUpperCase()+t.slice(1),r=t.charAt(0).toLowerCase()+t.slice(1),e=(fs.existsSync(this.patchDir)||fs.mkdirSync(this.patchDir,{recursive:!0}),path.join(this.patchDir,e)),e=(fs.existsSync(e)||fs.mkdirSync(e,{recursive:!0}),path.join(e,r+".patch.ts"));if(fs.existsSync(e))throw logger_js_1.default.error(`Patch "${t}" already exists`),new Error("Patch already exists");logger_js_1.default.info(`📦 Creating patch "${t}"...`);r=`import { ManualPatch } from "@digital-herd/content-hub-cli";
2
2
 
3
+ class ${t} extends ManualPatch {
4
+ async preRun() {}
3
5
 
6
+ async postRun() {}
4
7
 
5
- const runPatch${t} = ({ client }: PatchParams) => {
6
- // run patch
7
- };
8
+ async run() {}
9
+ }
10
+
11
+ export default ${t};
8
12
 
9
- export default runPatch${t};
10
13
  `;fs.writeFileSync(e,r,"utf-8"),logger_js_1.default.info(`✅ Patch "${t}" created successfully!`),logger_js_1.default.info("📁 Location: "+path.relative(process.cwd(),e))}}exports.default=CreatePatchService;
@@ -0,0 +1,11 @@
1
+ import { ContenthubConfig } from "../../../types/ContentHubConfig.interface";
2
+ declare class PatchSelectionService {
3
+ private config;
4
+ private patchDir;
5
+ private fileService;
6
+ constructor(config: ContenthubConfig);
7
+ getGroups(): Promise<string[]>;
8
+ getPatches(group: string): Promise<string[]>;
9
+ getPatchFile(group: string, patch: string): string;
10
+ }
11
+ export default PatchSelectionService;
@@ -0,0 +1 @@
1
+ var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&("get"in n?t.__esModule:!n.writable&&!n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,n)}:function(e,t,r,i){e[i=void 0===i?r:i]=t[r]}),__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 n=function(e){return(n=Object.getOwnPropertyNames||function(e){var t,r=[];for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[r.length]=t);return r})(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),i=0;i<r.length;i++)"default"!==r[i]&&__createBinding(t,e,r[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 FileService_1=__importDefault(require("../../../services/FileService")),path=__importStar(require("path"));class PatchSelectionService{config;patchDir;fileService;constructor(e){this.config=e,this.patchDir=path.resolve(process.cwd(),e.patchDir),this.fileService=new FileService_1.default(e)}getGroups(){return this.fileService.getAllDirectChildrenOfPath(this.patchDir)}getPatches(e){return this.fileService.getAllDirectChildrenOfPath(this.patchDir+"/"+e).then(e=>e.filter(e=>e.endsWith(".patch.ts")))}getPatchFile(e,t){return this.patchDir+`/${e}/`+t}}exports.default=PatchSelectionService;
@@ -11,13 +11,30 @@ export default class RunPatchService {
11
11
  private patchDir;
12
12
  private fileService;
13
13
  constructor(contenthubService: ContenthubService, config: ContenthubConfig);
14
+ /**
15
+ * Get the path to the lastHit JSON file for a specific patch
16
+ */
17
+ private getLastHitFilePath;
18
+ /**
19
+ * Read lastHit data from JSON file
20
+ */
21
+ private readLastHit;
22
+ /**
23
+ * Write lastHit data to JSON file
24
+ */
25
+ private writeLastHit;
14
26
  /**
15
27
  * Get all available patch files sorted by last modified (newest first)
16
28
  */
17
29
  getAvailablePatches(): PatchFile[];
30
+ /**
31
+ * Build patch with esbuild
32
+ */
33
+ private buildPatch;
18
34
  /**
19
35
  * Execute a specific patch
20
36
  */
21
- runPatch(patchName: string): Promise<void>;
37
+ runPatch(patchPath: string, name: string): Promise<void>;
38
+ private runPatchClass;
22
39
  }
23
40
  export {};
@@ -1 +1 @@
1
- var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var a=Object.getOwnPropertyDescriptor(t,r);a&&("get"in a?t.__esModule:!a.writable&&!a.configurable)||(a={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,a)}:function(e,t,r,i){e[i=void 0===i?r:i]=t[r]}),__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 a=function(e){return(a=Object.getOwnPropertyNames||function(e){var t,r=[];for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[r.length]=t);return r})(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=a(e),i=0;i<r.length;i++)"default"!==r[i]&&__createBinding(t,e,r[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 fs=__importStar(require("fs")),path=__importStar(require("path")),logger_js_1=__importDefault(require("../../../utils/logger.js")),FileService_js_1=__importDefault(require("../../../services/FileService.js"));class RunPatchService{contenthubService;config;patchDir;fileService;constructor(e,t){this.contenthubService=e,this.config=t,this.patchDir=path.resolve(process.cwd(),t.patchDir),this.fileService=new FileService_js_1.default(t)}getAvailablePatches(){return fs.existsSync(this.patchDir)?fs.readdirSync(this.patchDir).filter(e=>e.endsWith(".patch.ts")).map(e=>{var t=path.join(this.patchDir,e),r=fs.statSync(t);return{name:e.replace(".patch.ts",""),path:t,modifiedTime:r.mtime}}).sort((e,t)=>t.modifiedTime.getTime()-e.modifiedTime.getTime()):(logger_js_1.default.warn("Patch directory not found: "+this.patchDir),[])}async runPatch(t){var e=path.join(this.patchDir,t+".patch.ts");if(!fs.existsSync(e))throw logger_js_1.default.error(`Patch "${t}" not found at `+e),new Error("Patch not found");logger_js_1.default.info(`🚀 Running patch "${t}"...`);try{var r=await this.fileService.tsFileImport(e);if("function"!=typeof r)throw new Error(`Patch "${t}" does not export a default function`);await r({client:this.contenthubService.client}),logger_js_1.default.info(`✅ Patch "${t}" completed successfully!`)}catch(e){throw logger_js_1.default.error(`Failed to run patch "${t}":`,e),e}}}exports.default=RunPatchService;
1
+ var __createBinding=this&&this.__createBinding||(Object.create?function(t,e,r,i){void 0===i&&(i=r);var a=Object.getOwnPropertyDescriptor(e,r);a&&("get"in a?e.__esModule:!a.writable&&!a.configurable)||(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,a)}:function(t,e,r,i){t[i=void 0===i?r:i]=e[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),__importStar=this&&this.__importStar||(()=>{var a=function(t){return(a=Object.getOwnPropertyNames||function(t){var e,r=[];for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&(r[r.length]=e);return r})(t)};return function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=a(t),i=0;i<r.length;i++)"default"!==r[i]&&__createBinding(e,t,r[i]);return __setModuleDefault(e,t),e}})(),__importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0});let fs=__importStar(require("fs")),path=__importStar(require("path")),esbuild_1=require("esbuild"),logger_js_1=__importDefault(require("../../../utils/logger.js")),FileService_js_1=__importDefault(require("../../../services/FileService.js")),tempDirectory_js_1=require("../../../config/tempDirectory.js");class RunPatchService{contenthubService;config;patchDir;fileService;constructor(t,e){this.contenthubService=t,this.config=e,this.patchDir=path.resolve(process.cwd(),e.patchDir),this.fileService=new FileService_js_1.default(e),fs.existsSync(tempDirectory_js_1.PATCH_DIRECTORY)||fs.mkdirSync(tempDirectory_js_1.PATCH_DIRECTORY,{recursive:!0})}getLastHitFilePath(t){return path.join(tempDirectory_js_1.PATCH_DIRECTORY,t+".lastHit.json")}readLastHit(e){var t=this.getLastHitFilePath(e);if(!fs.existsSync(t))return null;try{var r=fs.readFileSync(t,"utf-8");return JSON.parse(r)}catch(t){return logger_js_1.default.warn(`Failed to read lastHit data for "${e}":`,t),null}}writeLastHit(e,t){var r=this.getLastHitFilePath(e);try{fs.writeFileSync(r,JSON.stringify(t,null,2),"utf-8"),logger_js_1.default.info(`💾 Saved lastHit data for "${e}"`)}catch(t){logger_js_1.default.error(`Failed to write lastHit data for "${e}":`,t)}}getAvailablePatches(){return fs.existsSync(this.patchDir)?fs.readdirSync(this.patchDir).filter(t=>t.endsWith(".patch.ts")).map(t=>{var e=path.join(this.patchDir,t),r=fs.statSync(e);return{name:t.replace(".patch.ts",""),path:e,modifiedTime:r.mtime}}).sort((t,e)=>e.modifiedTime.getTime()-t.modifiedTime.getTime()):(logger_js_1.default.warn("Patch directory not found: "+this.patchDir),[])}async buildPatch(t){var e=path.parse(t).name,r=(path.dirname(t),path.join(tempDirectory_js_1.PATCH_DIRECTORY,e+".esbuild.cjs"));logger_js_1.default.info(`📦 Building patch "${e}" with esbuild...`);try{return await(0,esbuild_1.build)({entryPoints:[t],outfile:r,bundle:!0,platform:"node",target:"node20",format:"cjs",external:["esbuild","@digital-herd/content-hub-cli","@sitecore/sc-contenthub-webclient-sdk"]}),logger_js_1.default.info(`✨ Patch "${e}" built successfully`),console.log(r),r}catch(t){throw logger_js_1.default.error(`Failed to build patch "${e}":`,t),t}}async runPatch(t,e){var r=path.parse(t).name;if(!fs.existsSync(t))throw logger_js_1.default.error(`Patch "${r}" not found at `+t),new Error("Patch not found");logger_js_1.default.info(`🚀 Running patch "${r}"...`);let i=null;try{i=await this.buildPatch(t);var a=new(await this.fileService.jsImport(i))(this.contenthubService.client,{name:e,onLastHitData:t=>this.writeLastHit(e,t)});await this.runPatchClass(a,e),logger_js_1.default.info(`✅ Patch "${r}" completed successfully!`)}catch(t){throw logger_js_1.default.error(`Failed to run patch "${r}":`,t),t}finally{i&&fs.existsSync(i)}}async runPatchClass(e,r,i=!1){try{var t=this.readLastHit(r);await e.preRun(),await e.run(t)}catch(t){throw i||(logger_js_1.default.warn(`Patch "${r}" failed retry in 1m`,t),setTimeout(()=>this.runPatchClass(e,r,!0),6e4)),t}finally{await e.postRun()}}}exports.default=RunPatchService;
@@ -13,7 +13,9 @@ declare class FileService {
13
13
  getScriptContent(scriptName: string): string;
14
14
  getAbsolutePath(p: string): string;
15
15
  tsFileImport<T = any>(filePath: string, tsconfigPath?: string): Promise<T>;
16
+ jsImport<T = any>(filePath: string): Promise<T>;
16
17
  writeScript(scriptName: string, content: string, config: ActionScriptConfig): Promise<void>;
17
18
  prettyFile(filePath: string): Promise<void>;
19
+ getAllDirectChildrenOfPath(path: string, type?: "folder" | "file"): Promise<string[]>;
18
20
  }
19
21
  export default FileService;
@@ -1,10 +1,10 @@
1
- var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0});let glob_1=require("glob"),path_1=__importDefault(require("path")),url_1=require("url"),prettier_1=__importDefault(require("prettier")),tempDirectory_js_1=require("../config/tempDirectory.js"),api_1=require("tsx/esm/api"),fs_1=require("fs");class FileService{config;constructor(t){this.config=t}getAllComponentPaths(t="*.config.ts"){return(0,glob_1.sync)(this.config.componentDir+"/**/"+t)}getAllComponentNames(t="*.config.ts"){return this.getAllComponentPaths(t).map(t=>{t=t.split(path_1.default.sep);return t[t.length-2]})}getDirectoryOfComponent(t){var t=(0,glob_1.sync)(this.config.componentDir+`/**/${t}/*.tsx`)[0];return t?((t=t.split(path_1.default.sep)).pop(),t.join(path_1.default.sep)):null}getComponentConfig(t){return(0,glob_1.sync)(this.config.componentDir+`/**/${t}/*.config.ts`)[0]}getComponentBuild(t,e=!0){t=(0,glob_1.sync)(tempDirectory_js_1.BUILD_DIRECTORY+`/${t}.js`)[0];return e?t&&this.getAbsolutePath(t):t}getEntryOfComponent(t){return(0,glob_1.sync)(this.config.componentDir+`/**/${t}/*.tsx`)[0]}getScriptConfig(t){return(0,glob_1.sync)(this.config.scriptDir+`/${t}/*.config.ts`)[0]}getScriptContent(t){return(0,glob_1.sync)(this.config.scriptDir+`/${t}/*.cs`)[0]}getAbsolutePath(t){return path_1.default.isAbsolute(t)?t:path_1.default.resolve(process.cwd(),t)}async tsFileImport(t,e){t=this.getAbsolutePath(t),e=e?this.getAbsolutePath(e):void 0,t=(0,url_1.pathToFileURL)(t).href,e=e?(0,url_1.pathToFileURL)(e).href:void 0;return(await(0,api_1.tsImport)(t,t,{tsconfig:e})).default}async writeScript(t,e,i){var r=this.config.scriptDir+"/"+t,o=((0,fs_1.existsSync)(r)||(0,fs_1.mkdirSync)(r,{recursive:!0}),r+`/${t}.config.ts`);(0,fs_1.writeFileSync)(o,`
1
+ var __createBinding=this&&this.__createBinding||(Object.create?function(t,e,r,i){void 0===i&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&("get"in n?e.__esModule:!n.writable&&!n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n)}:function(t,e,r,i){t[i=void 0===i?r:i]=e[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),__importStar=this&&this.__importStar||(()=>{var n=function(t){return(n=Object.getOwnPropertyNames||function(t){var e,r=[];for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&(r[r.length]=e);return r})(t)};return function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&__createBinding(e,t,r[i]);return __setModuleDefault(e,t),e}})(),__importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0});let glob_1=require("glob"),path_1=__importDefault(require("path")),url_1=require("url"),prettier_1=__importDefault(require("prettier")),tempDirectory_js_1=require("../config/tempDirectory.js"),api_1=require("tsx/esm/api"),fs_1=require("fs"),promises_1=require("fs/promises");class FileService{config;constructor(t){this.config=t}getAllComponentPaths(t="*.config.ts"){return(0,glob_1.sync)(this.config.componentDir+"/**/"+t)}getAllComponentNames(t="*.config.ts"){return this.getAllComponentPaths(t).map(t=>{t=t.split(path_1.default.sep);return t[t.length-2]})}getDirectoryOfComponent(t){var t=(0,glob_1.sync)(this.config.componentDir+`/**/${t}/*.tsx`)[0];return t?((t=t.split(path_1.default.sep)).pop(),t.join(path_1.default.sep)):null}getComponentConfig(t){return(0,glob_1.sync)(this.config.componentDir+`/**/${t}/*.config.ts`)[0]}getComponentBuild(t,e=!0){t=(0,glob_1.sync)(tempDirectory_js_1.BUILD_DIRECTORY+`/${t}.js`)[0];return e?t&&this.getAbsolutePath(t):t}getEntryOfComponent(t){return(0,glob_1.sync)(this.config.componentDir+`/**/${t}/*.tsx`)[0]}getScriptConfig(t){return(0,glob_1.sync)(this.config.scriptDir+`/${t}/*.config.ts`)[0]}getScriptContent(t){return(0,glob_1.sync)(this.config.scriptDir+`/${t}/*.cs`)[0]}getAbsolutePath(t){return path_1.default.isAbsolute(t)?t:path_1.default.resolve(process.cwd(),t)}async tsFileImport(t,e){t=this.getAbsolutePath(t),e=e?this.getAbsolutePath(e):void 0,t=(0,url_1.pathToFileURL)(t).href,e=e?(0,url_1.pathToFileURL)(e).href:void 0;return(await(0,api_1.tsImport)(t,t,{tsconfig:e})).default}async jsImport(t){t=this.getAbsolutePath(t);return(await Promise.resolve(""+t).then(t=>__importStar(require(t)))).default}async writeScript(t,e,r){var i=this.config.scriptDir+"/"+t,n=((0,fs_1.existsSync)(i)||(0,fs_1.mkdirSync)(i,{recursive:!0}),i+`/${t}.config.ts`);(0,fs_1.writeFileSync)(n,`
2
2
  import { type ActionScriptConfig } from "@digital-herd/content-hub-cli";
3
3
  export default {
4
- identifier: "${i.identifier}",
5
- type: "${i.type}",
6
- title: "${i.title}",
7
- description: \`${i.description}\`,
8
- executeAsUser: ${i.executeAsUser?"true":"false"},
4
+ identifier: "${r.identifier}",
5
+ type: "${r.type}",
6
+ title: "${r.title}",
7
+ description: \`${r.description}\`,
8
+ executeAsUser: ${r.executeAsUser?"true":"false"},
9
9
  } as ActionScriptConfig;
10
- `),await this.prettyFile(o),(0,fs_1.writeFileSync)(r+`/${t}.cs`,e)}async prettyFile(t){var e=await prettier_1.default.format((0,fs_1.readFileSync)(t,"utf8"),{...await prettier_1.default.resolveConfig(t),filepath:t});(0,fs_1.writeFileSync)(t,e)}}exports.default=FileService;
10
+ `),await this.prettyFile(n),(0,fs_1.writeFileSync)(i+`/${t}.cs`,e)}async prettyFile(t){var e=await prettier_1.default.format((0,fs_1.readFileSync)(t,"utf8"),{...await prettier_1.default.resolveConfig(t),filepath:t});(0,fs_1.writeFileSync)(t,e)}async getAllDirectChildrenOfPath(t,e){var r,i=[];for(r of await(0,promises_1.readdir)(t,{withFileTypes:!0}))("file"!==e||r.isDirectory())&&("folder"!==e||r.isDirectory())&&e||i.push(r.name);return i}}exports.default=FileService;
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.11",
4
+ "version": "1.1.13",
5
5
  "type": "commonjs",
6
6
  "main": "./lib/index.js",
7
7
  "types": "./lib/index.d.ts",
@@ -30,6 +30,7 @@
30
30
  "chokidar": "^5.0.0",
31
31
  "commander": "^11.0.0",
32
32
  "connect": "^3.7.0",
33
+ "esbuild": "^0.23.0",
33
34
  "glob": "^13.0.0",
34
35
  "lodash": "^4.17.21",
35
36
  "prettier": "^3.8.1",