@digital-herd/content-hub-cli 1.0.0 → 1.0.1
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/README.md +5 -0
- package/lib/bin.js +0 -0
- package/lib/modules/external-components/services/ExternalComponentBuildService.d.ts +1 -0
- package/lib/modules/external-components/services/ExternalComponentBuildService.js +1 -1
- package/lib/modules/external-components/services/ExternalComponentWatchService.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -267,3 +267,8 @@ content-hub-tools <command> [options]
|
|
|
267
267
|
- `❌ environment not specified -e or --environment`: either pass `-e <name>` or set `mainEnvironment` in the config.
|
|
268
268
|
- `❌ Failed to load config`: confirm `contenthubConfig.build.config.ts` path is correct and exports a default config.
|
|
269
269
|
|
|
270
|
+
## License
|
|
271
|
+
|
|
272
|
+
**UNLICENSED** - This is proprietary software developed by Digital Herd.
|
|
273
|
+
|
|
274
|
+
The compiled package is available for use, but the source code is not open source and may not be redistributed or modified. All rights reserved.
|
package/lib/bin.js
CHANGED
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var __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")),vite_1=require("vite"),path_1=__importDefault(require("path")),lodash_1=require("lodash"),array_1=require("../../../utils/array"),logger_1=__importDefault(require("../../..//utils/logger")),TypeCheckService_1=__importDefault(require("./TypeCheckService")),tempDirectory_1=require("../../../config/tempDirectory");class ExternalComponentBuildService{fileService;typeCheck;constructor(e,
|
|
1
|
+
var __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")),vite_1=require("vite"),path_1=__importDefault(require("path")),lodash_1=require("lodash"),array_1=require("../../../utils/array"),logger_1=__importDefault(require("../../..//utils/logger")),TypeCheckService_1=__importDefault(require("./TypeCheckService")),tempDirectory_1=require("../../../config/tempDirectory"),fs_1=__importDefault(require("fs")),zlib_1=require("zlib");class ExternalComponentBuildService{fileService;typeCheck;constructor(e,i){this.fileService=new FileService_1.default(e),this.typeCheck=new TypeCheckService_1.default(e,i)}async buildAll(){var e=this.fileService.getAllComponentNames(),i=await this.getViteConfigs(e),t=(await this.typeCheck.all(),(0,array_1.arrayToChunks)(i,5));for(let e=0;e<t.length;e++)logger_1.default.info(`Building batch ${e+1}/${t.length}...`),await Promise.all(t[e].map(e=>(0,vite_1.build)(e))),this.logBuildSizes(t[e].map(e=>e.build.lib.fileName)),logger_1.default.info(`Batch ${e+1}/${t.length} finished`);return logger_1.default.info(`All ${e.length} components built successfully`),e}async build(e){e=Array.isArray(e)?e:[e];let i=this.fileService.getAllComponentNames();var t=e.filter(e=>!i.includes(e)),t=(t.length&&(logger_1.default.error(t.join(", ")+" components not found"),process.exit(-1)),await this.typeCheck.specificComponents(e),await this.getViteConfigs(e)),l=(0,array_1.arrayToChunks)(t,5);for(let e=0;e<l.length;e++)logger_1.default.info(`Building component batch ${e+1}/${l.length}...`),await Promise.all(l[e].map(e=>(0,vite_1.build)(e))),this.logBuildSizes(l[e].map(e=>e.build.lib.fileName)),logger_1.default.info(`Component Batch ${e+1}/${l.length} finished`);return logger_1.default.info(e.length+" component(s) built successfully"),e}async getViteConfigs(e){var i=path_1.default.resolve(process.cwd(),"vite.config.js");let l=await(0,vite_1.loadConfigFromFile)({command:"build",mode:"production"},i);if(l)return e.map(e=>{var i=this.fileService.getEntryOfComponent(e),t=(0,lodash_1.cloneDeep)(l.config);return t.build.lib={formats:["es"],fileName:e,entry:i},t.build.outDir=tempDirectory_1.BUILD_DIRECTORY,t.build.emptyOutDir=!1,t.mode="production",t.logLevel="warn",t});throw new Error("Vite config not found")}logBuildSizes(e){e.forEach(e=>{var i,t,l=path_1.default.join(tempDirectory_1.BUILD_DIRECTORY,e+".js");fs_1.default.existsSync(l)&&(i=(l=fs_1.default.readFileSync(l)).length,l=(0,zlib_1.gzipSync)(l).length,t=e=>e<1024?e+" B":e<1048576?(e/1024).toFixed(2)+" KB":(e/1048576).toFixed(2)+" MB",logger_1.default.info(` ${e}.js: ${t(i)} (gzip: ${t(l)})`))})}}exports.default=ExternalComponentBuildService;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&("get"in o?t.__esModule:!o.writable&&!o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,o)}: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 o=function(e){return(o=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=o(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")),vite_1=require("vite"),path_1=__importDefault(require("path")),lodash_1=require("lodash"),fs_1=__importDefault(require("fs")),https_1=__importDefault(require("https")),connect_1=__importDefault(require("connect")),child_process_1=require("child_process"),util_1=require("util"),chokidar_1=require("chokidar"),logger_1=__importDefault(require("../../../utils/logger")),TypeCheckService_1=__importDefault(require("./TypeCheckService")),ExternalComponentPublishService_1=__importDefault(require("./ExternalComponentPublishService")),execPromise=(0,util_1.promisify)(child_process_1.exec);class ExternalComponentWatchService{config;fileService;typeCheck;publishService;componentBuilds=new Map;componentWatchers=new Map;constructor(e,t,r){this.config=t,this.fileService=new FileService_1.default(t),this.typeCheck=new TypeCheckService_1.default(t,r),this.publishService=new ExternalComponentPublishService_1.default(e,t)}async watchAll(){logger_1.default.info("In watch all mode, it does not update the external components to local path");var e=this.fileService.getAllComponentNames();await this.watchComponents(e,!1)}async watchSingleComponent(e){await this.watchComponents([e])}async getOrCreateCertificate(){var e=path_1.default.resolve(process.cwd(),".vite-certs"),t=path_1.default.join(e,"key.pem"),r=path_1.default.join(e,"cert.pem");if(fs_1.default.existsSync(t)&&fs_1.default.existsSync(r))return{key:fs_1.default.readFileSync(t,"utf-8"),cert:fs_1.default.readFileSync(r,"utf-8")};fs_1.default.existsSync(e)||fs_1.default.mkdirSync(e,{recursive:!0});e=`openssl req -x509 -newkey rsa:2048 -keyout "${t}" -out "${r}" -days 365 -nodes -subj "/CN=localhost"`;try{return await execPromise(e),{key:fs_1.default.readFileSync(t,"utf-8"),cert:fs_1.default.readFileSync(r,"utf-8")}}catch(e){throw logger_1.default.error("Failed to generate certificate:",e),new Error("Failed to generate self-signed certificate. Make sure OpenSSL is installed.")}}setupFileWatcher(e,t){var r;this.componentWatchers.has(e)||(r=this.fileService.getEntryOfComponent(e),r=path_1.default.dirname(r),(r=(0,chokidar_1.watch)(r,{ignored:/(node_modules|\.git|\.vite-cache)/,awaitWriteFinish:{stabilityThreshold:100,pollInterval:100}})).on("change",()=>{logger_1.default.info(`
|
|
2
|
-
📝 File changed in ${e}, rebuilding`),this.componentBuilds.delete(e),this.buildComponent(e,t)}),this.componentWatchers.set(e,r))}async watchComponents(o,e=!0){let t=this.fileService.getAllComponentNames();var r=o.filter(e=>!t.includes(e)),r=(r.length&&(logger_1.default.error("Some components does not exists: "+r.join(", ")),process.exit(-1)),await Promise.resolve().then(()=>__importStar(require("vite")))).loadConfigFromFile,r=await r({command:"serve",mode:"development"},path_1.default.resolve(process.cwd(),"vite.config.js"));if(!r)throw new Error("Vite config not found");var i=this.config.port||4e3;e&&await this.publishService.publishToLocalPath("https://localhost:"+i,o);let n=(0,lodash_1.cloneDeep)(r.config),a=await(0,vite_1.createServer)({...n,server:{middlewareMode:!0}});e=(0,connect_1.default)(),e.use(async(t,r,e)=>{t=t.url.match(/^\/([a-zA-Z0-9_]+)\.js$/);if(t){t=t[1];if(!o.includes(t))return r.statusCode=404,void r.end("Component not found");try{this.setupFileWatcher(t,n);var i=await this.buildComponent(t,n);return r.setHeader("Content-Type","application/javascript"),r.setHeader("Access-Control-Allow-Origin","*"),r.setHeader("Cache-Control","no-cache, no-store, must-revalidate"),void r.end(i)}catch(e){return logger_1.default.error(`Error building ${t}:`,e),r.statusCode=500,void r.end("Error building component: "+e)}}e()}),e.use(a.middlewares),r=await this.getOrCreateCertificate();let l=https_1.default.createServer(r,e);l.listen(i,()=>{logger_1.default.info("\n✓ Dev server ready at https://localhost:4000"),logger_1.default.info("\nAvailable components:"),o.forEach(e=>{logger_1.default.info(` • https://localhost:4000/${e}.js`)})}),process.on("SIGINT",async()=>{logger_1.default.info("\nShutting down dev server...");for(var e of this.componentWatchers.values())await e.close();await a.close(),l.close(),process.exit(0)})}async buildComponent(t,e){if(this.componentBuilds.has(t))return this.componentBuilds.get(t);await this.typeCheck.specificComponents(t);var r=this.fileService.getEntryOfComponent(t),e=(0,lodash_1.cloneDeep)(e),r=(e.build={...e.build,lib:{formats:["es"],fileName:t,entry:r},outDir:path_1.default.resolve(process.cwd(),".vite-cache",t),emptyOutDir:!1,minify:!1},e.mode="development",(0,vite_1.build)(e).then(()=>{var e=path_1.default.resolve(process.cwd(),".vite-cache",t,t+".js");return fs_1.default.readFileSync(e,"utf-8")}));return this.componentBuilds.set(t,r),r}}exports.default=ExternalComponentWatchService;
|
|
2
|
+
📝 File changed in ${e}, rebuilding`),this.componentBuilds.delete(e),this.buildComponent(e,t)}),this.componentWatchers.set(e,r))}async watchComponents(o,e=!0){let t=this.fileService.getAllComponentNames();var r=o.filter(e=>!t.includes(e)),r=(r.length&&(logger_1.default.error("Some components does not exists: "+r.join(", ")),process.exit(-1)),await Promise.resolve().then(()=>__importStar(require("vite")))).loadConfigFromFile,r=await r({command:"serve",mode:"development"},path_1.default.resolve(process.cwd(),"vite.config.js"));if(!r)throw new Error("Vite config not found");var i=this.config.port||4e3;e&&await this.publishService.publishToLocalPath("https://localhost:"+i,o);let n=(0,lodash_1.cloneDeep)(r.config),a=await(0,vite_1.createServer)({...n,server:{middlewareMode:!0}});e=(0,connect_1.default)(),e.use(async(t,r,e)=>{t=t.url.match(/^\/([a-zA-Z0-9_]+)\.js$/);if(t){t=t[1];if(!o.includes(t))return r.statusCode=404,void r.end("Component not found");try{this.setupFileWatcher(t,n);var i=await this.buildComponent(t,n);return r.setHeader("Content-Type","application/javascript"),r.setHeader("Access-Control-Allow-Origin","*"),r.setHeader("Cache-Control","no-cache, no-store, must-revalidate"),void r.end(i)}catch(e){return logger_1.default.error(`Error building ${t}:`,e),r.statusCode=500,void r.end("Error building component: "+e)}}e()}),e.use(a.middlewares),r=await this.getOrCreateCertificate();let l=https_1.default.createServer(r,e);l.listen(i,()=>{logger_1.default.info("\n✓ Dev server ready at https://localhost:4000"),logger_1.default.info("\nAvailable components:"),o.forEach(e=>{logger_1.default.info(` • https://localhost:4000/${e}.js`)})}),process.on("SIGINT",async()=>{logger_1.default.info("\nShutting down dev server...");for(var e of this.componentWatchers.values())await e.close();await a.close(),l.close(),process.exit(0)})}async buildComponent(t,e){if(this.componentBuilds.has(t))return this.componentBuilds.get(t);await this.typeCheck.specificComponents(t);var r=this.fileService.getEntryOfComponent(t),e=(0,lodash_1.cloneDeep)(e),r=(e.build={...e.build,lib:{formats:["es"],fileName:t,entry:r},outDir:path_1.default.resolve(process.cwd(),".vite-cache",t),emptyOutDir:!1,minify:!1},e.mode="development",e.logLevel="warn",logger_1.default.info(`Building ${t}...`),(0,vite_1.build)(e).then(()=>{var e=path_1.default.resolve(process.cwd(),".vite-cache",t,t+".js");return logger_1.default.info(t+" build finished"),fs_1.default.readFileSync(e,"utf-8")}));return this.componentBuilds.set(t,r),r}}exports.default=ExternalComponentWatchService;
|
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.0.
|
|
4
|
+
"version": "1.0.1",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./lib/index.js",
|
|
7
7
|
"types": "./lib/index.d.ts",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
"author": "Digital herd",
|
|
15
15
|
"homepage": "https://www.digital-herd.com/",
|
|
16
|
-
"license": "
|
|
16
|
+
"license": "UNLICENSED",
|
|
17
17
|
"sideEffects": false,
|
|
18
18
|
"publishConfig": {
|
|
19
19
|
"access": "public"
|