@uniformdev/csk-cli 6.0.114-alpha.1 → 6.0.117-alpha.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.
Files changed (2) hide show
  1. package/dist/index.mjs +5 -5
  2. package/package.json +2 -2
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import{program as $}from"commander";import w from"node:fs";import te from"node:path";import{LocaleClient as re}from"@uniformdev/canvas";import _ from"node:path";var L="\x1B[32m";var ee=_.join("src","i18n"),x=_.join(...(process.env.LOCALES_PATH??ee).split(/[\\/]/).filter(Boolean));var O=(e,r)=>{console.info(L,`The ${e} configuration was successfully ${r}`)};var S=async()=>{if(!w.existsSync(x)){console.error(`No such directory for locales files: ${x}. You can override it by setting LOCALES_PATH environment variable.`);return}let r=await new re({apiHost:process.env.UNIFORM_CLI_BASE_URL,apiKey:process.env.UNIFORM_API_KEY,projectId:process.env.UNIFORM_PROJECT_ID}).get(),{results:t}=r,o=t?.reduce((n,l)=>(n.locales.push(l.locale),n.localeNames[l.locale]=l.displayName,l.isDefault&&(n.defaultLocale=l.locale),n),{locales:[],localeNames:{},defaultLocale:null}),s=te.resolve(x,"locales.json");w.writeFile(s,JSON.stringify(o,void 0," "),n=>{n&&console.error(n)}),O("locales","pulled")};var I=async e=>{if(e?.locales){console.info("Pulling locales..."),S().catch(r=>console.error(r));return}};import*as J from"ora";import{select as Ie}from"@inquirer/prompts";import H from"node:path";var oe=H.join("src","components","custom-canvas"),A=H.join(...(process.env.CUSTOM_CANVAS_FOLDER_PATH??oe).split(/[\\/]/).filter(Boolean));var f=(n=>(n.SLOTS="slots",n.COMPONENT="component",n.CONTEXT="context",n.SLOT_INDEX="slotIndex",n.SLOT_NAME="slotName",n))(f||{}),R=/\b[a-zA-Z0-9_]+Mapping\s*=\s*{(?:[^{}]*|\{(?:[^{}]*|\{[^{}]*\})*\})*}/g,D=/(import .+;)(?![\s\S]*import .+)/,b=e=>new RegExp(`\\b${e}\\s*:\\s*[^,]+,?`,"g"),k=/}$/,F=/^[$_a-zA-Z][$_a-zA-Z0-9]*$/gm,G=/_{2,}/;import v from"fs";import*as W from"ora";import K from"path";import{confirm as Oe,input as we}from"@inquirer/prompts";import{exec as ne}from"child_process";import ae from"prettier";var E=async e=>new Promise((r,t)=>{ne(e,(o,s,n)=>{if(o){t(o.message);return}if(n){t(n);return}r(s)})}),h=(e,r)=>ae.format(e,{parser:"typescript",printWidth:120,singleQuote:!0,semi:!0,trailingComma:"es5",tabWidth:2,arrowParens:"avoid",endOfLine:"auto",...r});import{CanvasClient as _e}from"@uniformdev/canvas";import{input as X}from"@inquirer/prompts";var le={import:["import { UniformText } from '@uniformdev/canvas-next-rsc/component';"],needsProps:["context","component"],supports:"text",type:"string",render:e=>`<span>Text value: </span><UniformText parameterId="${e.canvasId||e.id}" placeholder="${e.name} goes here" context={context} component={component} />`},pe={supports:"number",type:"number",render:e=>`<span>Number value: </span>{${e.id}}`},ce={supports:"date",type:"string",render:e=>`<span>Date value: </span>{${e.id}}`},me={supports:"select",type:"string[]",render:e=>`<span>Selected value: </span>{${e.id}}`},de={supports:"multi-select",type:"string[]",render:e=>`<span>Selected values: </span>{${e.id}?.join(', ')}`},fe={supports:"datetime",type:"{ datetime: string; timeZone: string }",render:e=>`<p>Date value: {${e.id}?.datetime}</p><p>Timezone value: {${e.id}?.timeZone}</p>`},ue={import:["import { LinkParamValue } from '@uniformdev/canvas';","import NextLink from 'next/link';"],supports:"link",type:"LinkParamValue",render:e=>`<span>Link value: <NextLink href={${e.id}?.path ?? '#'}>Link Text</NextLink></span>`},ge={import:["import NextImage from 'next/image';","import type { AssetParamValue } from '@uniformdev/assets';","import { flattenValues } from '@uniformdev/canvas';"],supports:"asset",type:"AssetParamValue",render:e=>`<div className="flex flex-row gap-2 overflow-x-auto">
1
+ import{program as $}from"commander";import w from"node:fs";import te from"node:path";import{LocaleClient as re}from"@uniformdev/canvas";import _ from"node:path";var L="\x1B[32m";var ee=_.join("src","i18n"),x=_.join(...(process.env.LOCALES_PATH??ee).split(/[\\/]/).filter(Boolean));var O=(e,r)=>{console.info(L,`The ${e} configuration was successfully ${r}`)};var S=async()=>{if(!w.existsSync(x)){console.error(`No such directory for locales files: ${x}. You can override it by setting LOCALES_PATH environment variable.`);return}let r=await new re({apiHost:process.env.UNIFORM_CLI_BASE_URL,apiKey:process.env.UNIFORM_API_KEY,projectId:process.env.UNIFORM_PROJECT_ID}).get(),{results:t}=r,o=t?.reduce((n,i)=>(n.locales.push(i.locale),n.localeNames[i.locale]=i.displayName,n.localeGroups[i.locale]=i.group??"",i.isDefault&&(n.defaultLocale=i.locale),n),{locales:[],localeNames:{},localeGroups:{},defaultLocale:null}),s=te.resolve(x,"locales.json");w.writeFile(s,JSON.stringify(o,void 0," "),n=>{n&&console.error(n)}),O("locales","pulled")};var I=async e=>{if(e?.locales){console.info("Pulling locales..."),S().catch(r=>console.error(r));return}};import*as J from"ora";import{select as Ie}from"@inquirer/prompts";import H from"node:path";var oe=H.join("src","components","custom-canvas"),A=H.join(...(process.env.CUSTOM_CANVAS_FOLDER_PATH??oe).split(/[\\/]/).filter(Boolean));var f=(n=>(n.SLOTS="slots",n.COMPONENT="component",n.CONTEXT="context",n.SLOT_INDEX="slotIndex",n.SLOT_NAME="slotName",n))(f||{}),R=/\b[a-zA-Z0-9_]+Mapping\s*=\s*{(?:[^{}]*|\{(?:[^{}]*|\{[^{}]*\})*\})*}/g,D=/(import .+;)(?![\s\S]*import .+)/,b=e=>new RegExp(`\\b${e}\\s*:\\s*[^,]+,?`,"g"),k=/}$/,G=/^[$_a-zA-Z][$_a-zA-Z0-9]*$/gm,F=/_{2,}/;import v from"fs";import*as W from"ora";import K from"path";import{confirm as Oe,input as we}from"@inquirer/prompts";import{exec as ne}from"child_process";import ae from"prettier";var E=async e=>new Promise((r,t)=>{ne(e,(o,s,n)=>{if(o){t(o.message);return}if(n){t(n);return}r(s)})}),h=(e,r)=>ae.format(e,{parser:"typescript",printWidth:120,singleQuote:!0,semi:!0,trailingComma:"es5",tabWidth:2,arrowParens:"avoid",endOfLine:"auto",...r});import{CanvasClient as _e}from"@uniformdev/canvas";import{input as X}from"@inquirer/prompts";var le={import:["import { UniformText } from '@uniformdev/canvas-next-rsc/component';"],needsProps:["context","component"],supports:"text",type:"string",render:e=>`<span>Text value: </span><UniformText parameterId="${e.canvasId||e.id}" placeholder="${e.name} goes here" context={context} component={component} />`},pe={supports:"number",type:"number",render:e=>`<span>Number value: </span>{${e.id}}`},ce={supports:"date",type:"string",render:e=>`<span>Date value: </span>{${e.id}}`},me={supports:"select",type:"string[]",render:e=>`<span>Selected value: </span>{${e.id}}`},de={supports:"multi-select",type:"string[]",render:e=>`<span>Selected values: </span>{${e.id}?.join(', ')}`},fe={supports:"datetime",type:"{ datetime: string; timeZone: string }",render:e=>`<p>Date value: {${e.id}?.datetime}</p><p>Timezone value: {${e.id}?.timeZone}</p>`},ue={import:["import { LinkParamValue } from '@uniformdev/canvas';","import NextLink from 'next/link';"],supports:"link",type:"LinkParamValue",render:e=>`<span>Link value: <NextLink href={${e.id}?.path ?? '#'}>Link Text</NextLink></span>`},ge={import:["import NextImage from 'next/image';","import type { AssetParamValue } from '@uniformdev/assets';","import { flattenValues } from '@uniformdev/canvas';"],supports:"asset",type:"AssetParamValue",render:e=>`<div className="flex flex-row gap-2 overflow-x-auto">
2
2
  {(flattenValues(${e.id} as never) || [])
3
3
  .filter(({ url }) => Boolean(url))
4
4
  .map(({ title, url }, index) => (
@@ -20,7 +20,7 @@ import{program as $}from"commander";import w from"node:fs";import te from"node:p
20
20
  <span>Selected value: </span>
21
21
  <span>
22
22
  {typeof ${e.id} === 'string' ? ${e.id} : JSON.stringify(${e.id}, null, 2)}
23
- </span>`},Ce={import:["import { ViewPort } from '@uniformdev/csk-components/types/cskTypes';","import { SpaceType } from '@uniformdev/csk-components/types/cskTypes';"],supports:"tp2-space-control-parameter",type:"SpaceType | ViewPort<SpaceType>",render:e=>`<span>Spacing value: {JSON.stringify(${e.id}, null, 2)}</span>`},$e={import:["import { DataWithProperties } from '@uniformdev/canvas';"],supports:"$block",type:"DataWithProperties",render:e=>`<span>Block value: {JSON.stringify(${e.id}, null, 2)}</span>`},U=[le,pe,ce,me,de,fe,ue,ge,xe,Ee,he,ve,$e,ye,Pe,Te,Ne,Ce];var V=async()=>{let e=process.env.UNIFORM_CLI_BASE_URL||"https://uniform.app",r=process.env.UNIFORM_CLI_BASE_EDGE_URL||"https://uniform.global",t=process.env.UNIFORM_PROJECT_ID,o=process.env.UNIFORM_API_KEY;return t||(t=await X({message:"We didn't find Uniform Project ID. Could you please provide it here:",required:!0})),o||(o=await X({message:"We didn't find Uniform API Key. Could you please provide it here:",required:!0})),new _e({apiHost:e,apiKey:o,projectId:t,edgeApiHost:r,disableSWR:!0})},u=e=>e?e.charAt(0).toUpperCase()+e.slice(1):"UnknownComponent",Le=(e,r)=>{let t=["text","richText"].includes(e.type),o=e.id?.match(F);if(t){let s=(o?`_${e.id}`:`_parameter${r}`).replace(G,"_");return s==="_"?void 0:s}return o?void 0:`parameter${r}`},j=e=>{let r=Object.values(f);return e.filter(o=>!r.includes(o.id)).map((o,s)=>{let n=U.find(i=>i.supports.includes(o.type)),l=Le(o,s+1);return{...o,overriddenId:l,handler:n?{...n,render:i=>l?n.render({...i,id:l,canvasId:i.id}):n.render(i)}:void 0}}).filter(o=>!!o.handler)};var y=W.default(),P={path:async({definition:e,pathToCanvasFolder:r})=>(v.existsSync(r)||(r=await we({message:"We didn't find custom-canvas folder. Could you please provide path to the custom-canvas folder:",required:!0,validate:t=>v.existsSync(t)?!0:"Path is not valid"})),K.resolve(r,`${u(e?.id)}.tsx`)),write:async({destinationPath:e,definition:r})=>{try{let t=K.relative(process.cwd(),e),o=u(r.id);if(v.existsSync(e)&&!await Oe({message:`File ${t} already exists, would you like to overwrite it?`})){console.info(`The creation of the ${t} file for the ${o} component was skipped. Make sure the existing component exports a React component to connect it to the mapper.`);return}y?.start(`Generating ${t} file`);let s=j(r.parameters||[]),n=s?.map(({id:a,overriddenId:g,handler:Y})=>`${g?`'${a}'`:a}?: ${Y?.type||"unknown"};`),l=new Set(["import { FC } from 'react';","import { ComponentProps } from '@uniformdev/canvas-next-rsc/component';",...s.map(a=>a.handler?.import).filter(Boolean).flat()]),i=new Set(["component",...s.flatMap(a=>a.handler?.needsProps).filter(Boolean)]),p=r.slots?.map(({id:a})=>a)||[];p.length&&(l.add("import { UniformSlot } from '@uniformdev/canvas-next-rsc/component';"),i.add("slots"),i.add("context"));let c=(r.parameters||[]).filter(({type:a})=>a!=="group").length,d=s.length,C=p.length,q=Array.from(l).join(`
23
+ </span>`},Ce={import:["import { ViewPort } from '@uniformdev/csk-components/types/cskTypes';","import { SpaceType } from '@uniformdev/csk-components/types/cskTypes';"],supports:"tp2-space-control-parameter",type:"SpaceType | ViewPort<SpaceType>",render:e=>`<span>Spacing value: {JSON.stringify(${e.id}, null, 2)}</span>`},$e={import:["import { DataWithProperties } from '@uniformdev/canvas';"],supports:"$block",type:"DataWithProperties",render:e=>`<span>Block value: {JSON.stringify(${e.id}, null, 2)}</span>`},U=[le,pe,ce,me,de,fe,ue,ge,xe,Ee,he,ve,$e,ye,Pe,Te,Ne,Ce];var V=async()=>{let e=process.env.UNIFORM_CLI_BASE_URL||"https://uniform.app",r=process.env.UNIFORM_CLI_BASE_EDGE_URL||"https://uniform.global",t=process.env.UNIFORM_PROJECT_ID,o=process.env.UNIFORM_API_KEY;return t||(t=await X({message:"We didn't find Uniform Project ID. Could you please provide it here:",required:!0})),o||(o=await X({message:"We didn't find Uniform API Key. Could you please provide it here:",required:!0})),new _e({apiHost:e,apiKey:o,projectId:t,edgeApiHost:r,disableSWR:!0})},u=e=>e?e.charAt(0).toUpperCase()+e.slice(1):"UnknownComponent",Le=(e,r)=>{let t=["text","richText"].includes(e.type),o=e.id?.match(G);if(t){let s=(o?`_${e.id}`:`_parameter${r}`).replace(F,"_");return s==="_"?void 0:s}return o?void 0:`parameter${r}`},j=e=>{let r=Object.values(f);return e.filter(o=>!r.includes(o.id)).map((o,s)=>{let n=U.find(l=>l.supports.includes(o.type)),i=Le(o,s+1);return{...o,overriddenId:i,handler:n?{...n,render:l=>i?n.render({...l,id:i,canvasId:l.id}):n.render(l)}:void 0}}).filter(o=>!!o.handler)};var y=W.default(),P={path:async({definition:e,pathToCanvasFolder:r})=>(v.existsSync(r)||(r=await we({message:"We didn't find custom-canvas folder. Could you please provide path to the custom-canvas folder:",required:!0,validate:t=>v.existsSync(t)?!0:"Path is not valid"})),K.resolve(r,`${u(e?.id)}.tsx`)),write:async({destinationPath:e,definition:r})=>{try{let t=K.relative(process.cwd(),e),o=u(r.id);if(v.existsSync(e)&&!await Oe({message:`File ${t} already exists, would you like to overwrite it?`})){console.info(`The creation of the ${t} file for the ${o} component was skipped. Make sure the existing component exports a React component to connect it to the mapper.`);return}y?.start(`Generating ${t} file`);let s=j(r.parameters||[]),n=s?.map(({id:a,overriddenId:g,handler:Y})=>`${g?`'${a}'`:a}?: ${Y?.type||"unknown"};`),i=new Set(["import { FC } from 'react';","import { ComponentProps } from '@uniformdev/canvas-next-rsc/component';",...s.map(a=>a.handler?.import).filter(Boolean).flat()]),l=new Set(["component",...s.flatMap(a=>a.handler?.needsProps).filter(Boolean)]),p=r.slots?.map(({id:a})=>a)||[];p.length&&(i.add("import { UniformSlot } from '@uniformdev/canvas-next-rsc/component';"),l.add("slots"),l.add("context"));let c=(r.parameters||[]).filter(({type:a})=>a!=="group").length,d=s.length,C=p.length,q=Array.from(i).join(`
24
24
  `),Z=`
25
25
  export type ${o}Parameters = ${n.length?`{
26
26
  ${n.join(`
@@ -31,7 +31,7 @@ import{program as $}from"commander";import w from"node:fs";import te from"node:p
31
31
  const ${o}:FC<${o}Props> = ({
32
32
  ${s.filter(a=>!a.handler?.hideDestructuring).map(({id:a,overriddenId:g})=>`${g?`"${a}": ${g}`:a},`).join(`
33
33
  `)}
34
- ${Array.from(i).join(`,
34
+ ${Array.from(l).join(`,
35
35
  `)}
36
36
  }) => (
37
37
  <div className="flex flex-col gap-4 rounded-lg bg-white/75 p-4 backdrop-blur-sm">
@@ -105,8 +105,8 @@ import{program as $}from"commander";import w from"node:fs";import te from"node:p
105
105
  export default ${o};
106
106
  `;await v.promises.writeFile(e,await h(`${q}
107
107
  ${Z}
108
- ${Q}`)),await E(`npx next lint --file ${t} --fix`).catch(()=>y.fail("Oops, we couldn\u2019t format your mapping file using your lint configuration. Please check it before running.")),y?.succeed(`${t} file was successfully generated`)}catch(t){throw y.stop(),t}}};import T from"fs";import*as M from"ora";import B from"path";import{input as Se}from"@inquirer/prompts";var m=M.default(),N={path:async({pathToCanvasFolder:e})=>{let r=B.resolve(e,"index.ts");return T.existsSync(e)||await Se({message:"We didn't find custom-canvas resolver file. Could you please provide path to the custom-canvas resolver file:",required:!0,validate:t=>T.existsSync(t)?!0:"Path is not valid"}),r},write:async({destinationPath:e,definition:r})=>{try{let t=u(r.id);m?.start(`Generating ${e} file`);let o=await T.promises.readFile(e,"utf-8"),s=`import ${t} from './${t}';`,n=o.replace(D,i=>o.includes(s)?(m.info(`Import already exists. This step will be skipped for the ${t} component.`),i):(m.info(`Import of ${t} component added successfully.`),`${i}
109
- ${s}`)).replace(R,i=>{let p=new RegExp(b(r.id));if(p.test(i))return m.info(`This registration key is already in use, so we have overridden it with the new ${t} component.`),i.replace(p,`${r.id}: { component: ${t} },`);{m.info(`Added registration for the new ${t} component in the mapper.`);let c=`${r.id}: { component: ${t} },`;return i.replace(k,`${c}}`)}}),l=B.relative(process.cwd(),e);await T.promises.writeFile(e,await h(`${n}`)),await E(`npx next lint --file ${l} --fix`).catch(()=>m.fail("Oops, we couldn\u2019t format your mapping file using your lint configuration. Please check it before running.")),m?.succeed(`Import of ${t} component was successfully added to the ${l} file. Before running, make sure this file is connected to the final resolver.`)}catch(t){throw m.stop(),t}}};var z=async()=>{try{let e=J.default();console.info("Uniform RSC Scaffolder");let r=await V();e?.start("Loading Component Definitions");let{componentDefinitions:t}=await r.getComponentDefinitions();e?.succeed("Component Definitions Loaded");let o=await Ie({message:"Select the necessary component to generate files:",choices:t.sort((p,c)=>new Date(c.created||"").getTime()-new Date(p.created||"").getTime()).map(({name:p},c)=>({value:c,name:p})),loop:!1}),s=t[o];if(!s){console.info("No component selected");return}let n={pathToCanvasFolder:A,definition:s},l=await P.path(n);await P.write({definition:s,destinationPath:l}).catch(()=>{throw e.fail("Oops, something went wrong. We couldn\u2019t generate the component for you."),e.stop(),new Error("Something went wrong")});let i=await N.path(n);await N.write({definition:s,destinationPath:i}).catch(()=>{throw e.fail("Oops, something went wrong. We couldn\u2019t connect the component to the mapper. Please check if the required file is available or manually connect a new component."),e.stop(),new Error("Something went wrong")})}catch(e){e instanceof Error&&(e.message.includes("force closed")?console.info(`
108
+ ${Q}`)),await E(`npx next lint --file ${t} --fix`).catch(()=>y.fail("Oops, we couldn\u2019t format your mapping file using your lint configuration. Please check it before running.")),y?.succeed(`${t} file was successfully generated`)}catch(t){throw y.stop(),t}}};import T from"fs";import*as M from"ora";import B from"path";import{input as Se}from"@inquirer/prompts";var m=M.default(),N={path:async({pathToCanvasFolder:e})=>{let r=B.resolve(e,"index.ts");return T.existsSync(e)||await Se({message:"We didn't find custom-canvas resolver file. Could you please provide path to the custom-canvas resolver file:",required:!0,validate:t=>T.existsSync(t)?!0:"Path is not valid"}),r},write:async({destinationPath:e,definition:r})=>{try{let t=u(r.id);m?.start(`Generating ${e} file`);let o=await T.promises.readFile(e,"utf-8"),s=`import ${t} from './${t}';`,n=o.replace(D,l=>o.includes(s)?(m.info(`Import already exists. This step will be skipped for the ${t} component.`),l):(m.info(`Import of ${t} component added successfully.`),`${l}
109
+ ${s}`)).replace(R,l=>{let p=new RegExp(b(r.id));if(p.test(l))return m.info(`This registration key is already in use, so we have overridden it with the new ${t} component.`),l.replace(p,`${r.id}: { component: ${t} },`);{m.info(`Added registration for the new ${t} component in the mapper.`);let c=`${r.id}: { component: ${t} },`;return l.replace(k,`${c}}`)}}),i=B.relative(process.cwd(),e);await T.promises.writeFile(e,await h(`${n}`)),await E(`npx next lint --file ${i} --fix`).catch(()=>m.fail("Oops, we couldn\u2019t format your mapping file using your lint configuration. Please check it before running.")),m?.succeed(`Import of ${t} component was successfully added to the ${i} file. Before running, make sure this file is connected to the final resolver.`)}catch(t){throw m.stop(),t}}};var z=async()=>{try{let e=J.default();console.info("Uniform RSC Scaffolder");let r=await V();e?.start("Loading Component Definitions");let{componentDefinitions:t}=await r.getComponentDefinitions();e?.succeed("Component Definitions Loaded");let o=await Ie({message:"Select the necessary component to generate files:",choices:t.sort((p,c)=>new Date(c.created||"").getTime()-new Date(p.created||"").getTime()).map(({name:p},c)=>({value:c,name:p})),loop:!1}),s=t[o];if(!s){console.info("No component selected");return}let n={pathToCanvasFolder:A,definition:s},i=await P.path(n);await P.write({definition:s,destinationPath:i}).catch(()=>{throw e.fail("Oops, something went wrong. We couldn\u2019t generate the component for you."),e.stop(),new Error("Something went wrong")});let l=await N.path(n);await N.write({definition:s,destinationPath:l}).catch(()=>{throw e.fail("Oops, something went wrong. We couldn\u2019t connect the component to the mapper. Please check if the required file is available or manually connect a new component."),e.stop(),new Error("Something went wrong")})}catch(e){e instanceof Error&&(e.message.includes("force closed")?console.info(`
110
110
  \u{1F44B} See you next time! \u{1F9E1}
111
111
  `):console.error(`
112
112
  \u{1F641} Something went wrong. Please try again.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniformdev/csk-cli",
3
- "version": "6.0.114-alpha.1",
3
+ "version": "6.0.117-alpha.1",
4
4
  "description": "Command-line interface (CLI) tool designed to streamline the development workflow within Uniform projects. It provides commands for pulling additional data and generating components based on Canvas data",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "engines": {
@@ -68,4 +68,4 @@
68
68
  "publishConfig": {
69
69
  "access": "public"
70
70
  }
71
- }
71
+ }