croct 0.1.0-alpha5 → 0.1.0-alpha6

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.
Files changed (2) hide show
  1. package/index.js +1 -1
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -14,7 +14,7 @@ ${ee(t,{text:n,icon:{semantic:n,symbol:{unicode:"\u21B3",ascii:"\u203A"}}})}`),r
14
14
  `,true);}exit(){return this.stop(),this.onExit()}writeLog(e,t){this.write(`${ee(e,t==="neutral"?{}:{icon:{semantic:t}})}
15
15
  `);}write(e,t=false){(!this.quiet||t)&&(this.suspend(),this.output.write(e),this.resume());}};var d=class o extends Error{constructor(e,t={}){super(e),this.help=t,this.reason=t.reason??"other",Object.setPrototypeOf(this,o.prototype);}static formatMessage(e){let t=o.extractMessage(e).trim();return t.length===0?t:t.charAt(0).toUpperCase()+t.slice(1)+(/^[^\n.]+$/.test(t)?".":"")}static formatCause(e){let t=o.formatMessage(e);return t.length===0?t:t.charAt(0).toLowerCase()+t.slice(1)}static extractMessage(e){return e instanceof Error?e.message:typeof e=="string"&&e!==""?e:"unknown error"}static describeType(e){switch(true){case e===null:return "null";case typeof e=="object":return e.constructor.name!=="Object"?e.constructor.name:"object";default:return typeof e}}};var B=class o extends d{constructor(e,t){super(e,t),Object.setPrototypeOf(this,o.prototype);}};var O=class o{constructor(e,t,n){this.min=t,this.max=n,this.versions=e??[];}static isValid(e){try{return o.parse(e),!0}catch{return false}}static between(e,t){if(e===t)return new o([e]);if(e>t)throw new Error(`Out of order range ${e}-${t}`);return new o(void 0,e,t)}static of(e){return new o([e])}static either(...e){if(e.length===0)throw new Error("No versions specified.");return new o([...new Set(e)].sort((t,n)=>t-n))}static parse(e){if(/^\d+$/.test(e))return new o([Number.parseInt(e,10)]);let{groups:t}=e.match(/^((?<range>(?<min>\d+)\s*-\s*(?<max>\d+))|(?<set>\d+(\s*,\s*\d+)+))$/)??{};if(t===void 0)throw new Error(`Invalid version pattern: ${e}`);return t.range!==void 0?o.between(Number.parseInt(t.min,10),Number.parseInt(t.max,10)):o.either(...t.set.split(",").map(n=>Number.parseInt(n,10)))}isRange(){return this.min!==void 0&&this.max!==void 0}isSet(){return this.versions.length>0}isExact(){return this.versions.length===1}getCardinality(){return this.min!==void 0&&this.max!==void 0?this.max-this.min+1:this.versions.length}getExactVersion(){if(!this.isExact())throw new Error("Not an exact version.");return this.versions[0]}getMinVersion(){return this.min??Math.min(...this.versions)}getMaxVersion(){return this.max??Math.max(...this.versions)}getVersions(){let{min:e,max:t}=this;if(e===void 0||t===void 0)return this.versions;let n=[];for(let r=e;r<=t;r++)n.push(r);return n}intersects(e){if(e.isRange())return e.intersects(this);if(this.isRange()){if(e.isRange())return this.getMinVersion()<=e.getMaxVersion()&&e.getMinVersion()<=this.getMaxVersion();if(e.isExact()){let a=e.getExactVersion();return this.getMinVersion()<=a&&a<=this.getMaxVersion()}let r=this.getMinVersion(),i=this.getMaxVersion();return e.getVersions().some(a=>r<=a&&a<=i)}let t=this.getVersions(),n=e.getVersions();return t.length===0||n.length===0?false:t.some(r=>n.includes(r))}contains(e){if(this.isExact()&&e.isExact())return this.getExactVersion()===e.getExactVersion();if(this.isRange()){if(e.isRange())return this.getMinVersion()<=e.getMinVersion()&&e.getMaxVersion()<=this.getMaxVersion();if(e.isExact()){let i=e.getExactVersion();return this.getMinVersion()<=i&&i<=this.getMaxVersion()}let n=this.getMinVersion(),r=this.getMaxVersion();return e.getVersions().every(i=>n<=i&&i<=r)}if(!e.isSet())return false;let t=this.getVersions();return e.getVersions().every(n=>t.includes(n))}without(e){if(!this.intersects(e))return this;if(e.contains(this))throw new Error("A version cannot be empty.");if(this.isRange()){if(e.isExact()){if(this.getMinVersion()===e.getExactVersion())return o.between(e.getExactVersion()+1,this.getMaxVersion());if(this.getMaxVersion()===e.getExactVersion())return o.between(this.getMinVersion(),e.getExactVersion()-1)}else if(e.isRange()){if(this.getMinVersion()===e.getMinVersion())return o.between(e.getMaxVersion()+1,this.getMaxVersion());if(this.getMaxVersion()===e.getMaxVersion())return o.between(this.getMinVersion(),e.getMinVersion()-1)}else if(e.isSet()&&e.getVersions().every((i,a)=>i===e.getMinVersion()+a)){if(this.getMinVersion()===e.getMinVersion())return o.between(e.getMaxVersion()+1,this.getMaxVersion());if(this.getMaxVersion()===e.getMaxVersion())return o.between(this.getMinVersion(),e.getMinVersion()-1)}}if(e.isRange()){let n=e.getMinVersion(),r=e.getMaxVersion();return o.either(...this.getVersions().filter(i=>i<n||i>r))}let t=e.getVersions();return o.either(...this.getVersions().filter(n=>!t.includes(n)))}with(e){if(this.contains(e))return this;if(e.isRange())return e.with(this);if(this.isRange()){if(e.isExact()){if(this.getMaxVersion()+1===e.getExactVersion())return o.between(this.getMinVersion(),e.getExactVersion());if(e.getExactVersion()+1===this.getMinVersion())return o.between(e.getExactVersion(),this.getMaxVersion())}else if(e.isRange()){if(this.getMaxVersion()+1===e.getMinVersion()||e.getMaxVersion()+1===this.getMinVersion())return o.between(Math.min(this.getMinVersion(),e.getMinVersion()),Math.max(this.getMaxVersion(),e.getMaxVersion()))}else if(e.isSet()&&this.contains(this))return this}return o.either(...this.getVersions(),...e.getVersions())}equals(e){if(e.min!==this.min||e.max!==this.max||e.versions.length!==this.versions.length)return false;for(let t=0;t<this.versions.length;t++)if(this.versions[t]!==e.versions[t])return false;return true}toString(){return this.isSet()?this.versions.join(", "):`${this.min} - ${this.max}`}toJSON(){return this.toString()}};function ae(o,...e){let t=[];for(let i=0;i<o.length;i++)t.push(o[i]),i<e.length&&t.push(e[i]);let n=t.join("").split(`
16
16
  `);if(n.length<2)return t.join("");let r=n[1].search(/\S/);return n.map(i=>i.slice(r)).join(`
17
- `).trim()}function ht(o){return o.normalize("NFD").replace(/(^[^a-z]+|[^a-z0-9_ -]+)/ig,"").split(/[^a-z0-9]+/i).map((e,t)=>t===0?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join("")}var He=class o{static{this.CONTENT_PACKAGE="@croct/content";}constructor(e){this.projectDirectory=e.projectDirectory,this.packageManager=e.packageManager,this.workspaceApi=e.workspaceApi,this.formatter=e.formatter,this.fileSystem=e.fileSystem,this.importConfigLoader=e.tsConfigLoader;}async generateSlotExample(e,t){let n=this.projectDirectory.get(),r=[];for(let i of await this.generateSlotExampleFiles(e,t)){let a=this.fileSystem.joinPaths(n,this.fileSystem.getDirectoryName(i.path));await this.fileSystem.createDirectory(a,{recursive:true}).catch(()=>null);let s=this.fileSystem.joinPaths(n,i.path);await this.fileSystem.writeTextFile(s,i.code,{overwrite:true}),r.push(s);}await this.formatter.format(r);}async setup(e){let{input:t,output:n}=e,r=await this.getInstallationPlan(e),i={...r.configuration,paths:{content:".",components:await this.resolvePath(["components","Components","component","Component"],r.configuration.paths.components),examples:await this.resolvePath(["examples","Examples"],r.configuration.paths.examples)}},a={...e,configuration:{...e.configuration,...i,applications:e.configuration.applications}},s=[];if(s.push({title:"Install dependencies",task:async p=>{p.update("Installing dependencies");try{await this.packageManager.addDependencies(["croct"],!0),await this.packageManager.addDependencies([...r.dependencies]),p.confirm("Dependencies installed");}catch(c){p.alert("Failed to install dependencies",d.formatMessage(c));}}}),s.push(...r.tasks),Object.keys(i.slots).length>0&&s.push({title:"Download content",task:async p=>{p.update("Downloading content");try{await this.updateContent(a,{notifier:p,clean:!0});}catch(c){p.alert("Failed to download content",d.formatMessage(c));}}}),await this.isTypeScriptProject()&&s.push({title:"Generate types",task:async p=>{p.update("Generating types");try{await this.updateTypes(a,{notifier:p,clean:!0});}catch(c){p.alert("Failed to generate types",d.formatMessage(c));}try{await this.registerTypeFile(Object.values(a.configuration.paths),p);}catch(c){p.alert("Failed to register type file",d.formatMessage(c));}}}),s.push({title:"Register script",task:async p=>{p.update("Registering script");try{await this.packageManager.addScript("postinstall","croct install --no-interaction"),p.confirm("Script registered");}catch(c){p.alert("Failed to register script",d.formatMessage(c));}}}),s.length>0){if(t!==void 0){n.break(),n.inform("**Installation plan**");for(let{title:p}of s)n.log(` - ${p}`);if(n.break(),!await t.confirm({message:"Proceed?",default:true}))return n.exit()}await n.monitor({tasks:s});}return i}async resolvePath(e,t){if(t!=="")return t;let n=["src"],r=await this.locateFile(...n.flatMap(i=>e.map(a=>this.fileSystem.joinPaths(i,a))),...e,...n);return r===null?e[0]:n.includes(r)?this.fileSystem.joinPaths(r,e[0]):r}async update(e,t={}){await this.updateContent(e,t),await this.isTypeScriptProject()&&await this.updateTypes(e,t);}async updateContent(e,t={}){let{output:n,configuration:r}=e,i=t.notifier??n.notify("Updating content");if(Object.entries(r.slots).length===0){i.confirm("No slots to update");return}let s=await this.mountContentPackageFolder();if(s===null){i.alert(`The package ${o.CONTENT_PACKAGE} is not installed`);return}let p=this.fileSystem.joinPaths(s.directory,"slot");for await(let M of this.fileSystem.list(p,0))M.type==="directory"&&await this.fileSystem.delete(this.fileSystem.joinPaths(p,M.name),{recursive:true});let c={},l={},m={};for(let[M,j]of Object.entries(await this.loadContent(e,t.clean))){let T=Math.max(...j.map(({version:q})=>q));for(let{version:q,content:Se}of j)for(let[se,as]of Object.entries(Se)){let Ut=`${M}@${q}`;c[se]===void 0&&(c[se]={});let ba=`${ht(`${M}-${se}`)}V${q}`,Ia=`./${se}/${Ut}`;m[se]===void 0&&(m[se]={}),c[se][Ut]=Ia,m[se][Ut]=`${ba}`,l[ba]=Ia,q===T&&(c[se][M]=Ia,m[se][M]=`${ba}`);let Nc=this.fileSystem.joinPaths(p,se);await this.fileSystem.isDirectory(Nc)||await this.fileSystem.createDirectory(this.fileSystem.joinPaths(p,se),{recursive:true}),await this.fileSystem.writeTextFile(this.fileSystem.joinPaths(p,se,`${Ut}.js`),`export default ${JSON.stringify(as,null,2)};`,{overwrite:true}),await this.fileSystem.writeTextFile(this.fileSystem.joinPaths(p,se,`${Ut}.cjs`),`module.exports = ${JSON.stringify(as,null,2)};`,{overwrite:true});}}let f=Object.entries(l).map(([M,j])=>`import ${M} from '${j}.js';`).join(`
17
+ `).trim()}function ht(o){return o.normalize("NFD").replace(/(^[^a-z]+|[^a-z0-9_ -]+)/ig,"").split(/[^a-z0-9]+/i).map((e,t)=>t===0?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join("")}var He=class o{static{this.CONTENT_PACKAGE="@croct/content";}constructor(e){this.projectDirectory=e.projectDirectory,this.packageManager=e.packageManager,this.workspaceApi=e.workspaceApi,this.formatter=e.formatter,this.fileSystem=e.fileSystem,this.importConfigLoader=e.tsConfigLoader;}async generateSlotExample(e,t){let n=this.projectDirectory.get(),r=[];for(let i of await this.generateSlotExampleFiles(e,t)){let a=this.fileSystem.joinPaths(n,this.fileSystem.getDirectoryName(i.path));await this.fileSystem.createDirectory(a,{recursive:true}).catch(()=>null);let s=this.fileSystem.joinPaths(n,i.path);await this.fileSystem.writeTextFile(s,i.code,{overwrite:true}),r.push(s);}await this.formatter.format(r);}async setup(e){let{input:t,output:n}=e,r=await this.getInstallationPlan(e),i={...r.configuration,paths:{content:".",components:await this.resolvePath(["components","Components","component","Component"],r.configuration.paths.components),examples:await this.resolvePath(["examples","Examples"],r.configuration.paths.examples)}},a={...e,configuration:{...e.configuration,...i,applications:e.configuration.applications}},s=[];if(s.push({title:"Install dependencies",task:async p=>{p.update("Installing dependencies");try{await this.packageManager.addDependencies(["croct"],!0),await this.packageManager.addDependencies([...r.dependencies,o.CONTENT_PACKAGE]),p.confirm("Dependencies installed");}catch(c){p.alert("Failed to install dependencies",d.formatMessage(c));}}}),s.push(...r.tasks),Object.keys(i.slots).length>0&&s.push({title:"Download content",task:async p=>{p.update("Downloading content");try{await this.updateContent(a,{notifier:p,clean:!0});}catch(c){p.alert("Failed to download content",d.formatMessage(c));}}}),await this.isTypeScriptProject()&&s.push({title:"Generate types",task:async p=>{p.update("Generating types");try{await this.updateTypes(a,{notifier:p,clean:!0});}catch(c){p.alert("Failed to generate types",d.formatMessage(c));}try{await this.registerTypeFile(Object.values(a.configuration.paths),p);}catch(c){p.alert("Failed to register type file",d.formatMessage(c));}}}),s.push({title:"Register script",task:async p=>{p.update("Registering script");try{await this.packageManager.addScript("postinstall","croct install --no-interaction"),p.confirm("Script registered");}catch(c){p.alert("Failed to register script",d.formatMessage(c));}}}),s.length>0){if(t!==void 0){n.break(),n.inform("**Installation plan**");for(let{title:p}of s)n.log(` - ${p}`);if(n.break(),!await t.confirm({message:"Proceed?",default:true}))return n.exit()}await n.monitor({tasks:s});}return i}async resolvePath(e,t){if(t!=="")return t;let n=["src"],r=await this.locateFile(...n.flatMap(i=>e.map(a=>this.fileSystem.joinPaths(i,a))),...e,...n);return r===null?e[0]:n.includes(r)?this.fileSystem.joinPaths(r,e[0]):r}async update(e,t={}){await this.updateContent(e,t),await this.isTypeScriptProject()&&await this.updateTypes(e,t);}async updateContent(e,t={}){let{output:n,configuration:r}=e,i=t.notifier??n.notify("Updating content");if(Object.entries(r.slots).length===0){i.confirm("No slots to update");return}let s=await this.mountContentPackageFolder();if(s===null){i.alert(`The package ${o.CONTENT_PACKAGE} is not installed`);return}let p=this.fileSystem.joinPaths(s.directory,"slot");for await(let M of this.fileSystem.list(p,0))M.type==="directory"&&await this.fileSystem.delete(this.fileSystem.joinPaths(p,M.name),{recursive:true});let c={},l={},m={};for(let[M,j]of Object.entries(await this.loadContent(e,t.clean))){let T=Math.max(...j.map(({version:q})=>q));for(let{version:q,content:Se}of j)for(let[se,as]of Object.entries(Se)){let Ut=`${M}@${q}`;c[se]===void 0&&(c[se]={});let ba=`${ht(`${M}-${se}`)}V${q}`,Ia=`./${se}/${Ut}`;m[se]===void 0&&(m[se]={}),c[se][Ut]=Ia,m[se][Ut]=`${ba}`,l[ba]=Ia,q===T&&(c[se][M]=Ia,m[se][M]=`${ba}`);let Nc=this.fileSystem.joinPaths(p,se);await this.fileSystem.isDirectory(Nc)||await this.fileSystem.createDirectory(this.fileSystem.joinPaths(p,se),{recursive:true}),await this.fileSystem.writeTextFile(this.fileSystem.joinPaths(p,se,`${Ut}.js`),`export default ${JSON.stringify(as,null,2)};`,{overwrite:true}),await this.fileSystem.writeTextFile(this.fileSystem.joinPaths(p,se,`${Ut}.cjs`),`module.exports = ${JSON.stringify(as,null,2)};`,{overwrite:true});}}let f=Object.entries(l).map(([M,j])=>`import ${M} from '${j}.js';`).join(`
18
18
  `),b=`const contentMap = ${JSON.stringify(m,null,2).replace(/(?<=: )"(.*?)"/g,"$1")};
19
19
 
20
20
  `;await this.fileSystem.writeTextFile(this.fileSystem.joinPaths(p,"getSlotContent.js"),`${f}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "croct",
3
- "version": "0.1.0-alpha5",
3
+ "version": "0.1.0-alpha6",
4
4
  "description": "A command-line interface (CLI) for managing projects using Croct.",
5
5
  "author": {
6
6
  "name": "Croct",