@uniformdev/cli 12.2.1-alpha.170 → 12.2.1-alpha.183

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.
@@ -51,6 +51,9 @@ declare type SyncEngineOptions<TObject> = {
51
51
  log?: (options: SyncEngineLogOptions) => void;
52
52
  };
53
53
  declare function syncEngine<TObject>({ source, target, compareContents, mode, allowEmptySource, whatIf, log, }: SyncEngineOptions<TObject>): Promise<void>;
54
+ declare class SyncEngineError<TObject> extends Error {
55
+ constructor(innerError: unknown, sourceObject: SyncEngineObject<TObject>);
56
+ }
54
57
 
55
58
  declare type CreateArraySyncEngineDataSourceOptions<TObject> = {
56
59
  objects: Array<TObject>;
@@ -109,4 +112,4 @@ declare function paginateAsync<TResult>(fetchPage: (offset: number, limit: numbe
109
112
  pageSize: number;
110
113
  }): AsyncIterableIterator<TResult>;
111
114
 
112
- export { ApiArgs, CreateArraySyncEngineDataSourceOptions, CreateFileSyncEngineDataSourceOptions, DiffArgs, DiffMode, FormatArgs, ProjectArgs, SyncEngineDataSource, SyncEngineLogOptions, SyncEngineObject, SyncEngineOptions, UniformPackage, createArraySyncEngineDataSource, createFileSyncEngineDataSource, createSyncEngineConsoleLogger, emitWithFormat, isPathAPackageFile, paginateAsync, readFileToObject, readUniformPackage, syncEngine, withApiOptions, withDiffOptions, withFormatOptions, withProjectOptions, writeUniformPackage };
115
+ export { ApiArgs, CreateArraySyncEngineDataSourceOptions, CreateFileSyncEngineDataSourceOptions, DiffArgs, DiffMode, FormatArgs, ProjectArgs, SyncEngineDataSource, SyncEngineError, SyncEngineLogOptions, SyncEngineObject, SyncEngineOptions, UniformPackage, createArraySyncEngineDataSource, createFileSyncEngineDataSource, createSyncEngineConsoleLogger, emitWithFormat, isPathAPackageFile, paginateAsync, readFileToObject, readUniformPackage, syncEngine, withApiOptions, withDiffOptions, withFormatOptions, withProjectOptions, writeUniformPackage };
@@ -1,3 +1,4 @@
1
- var M=Object.create;var w=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var J=Object.getPrototypeOf,K=Object.prototype.hasOwnProperty;var D=e=>w(e,"__esModule",{value:!0});var W=(e,t)=>{for(var n in t)w(e,n,{get:t[n],enumerable:!0})},F=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of $(t))!K.call(e,s)&&(n||s!=="default")&&w(e,s,{get:()=>t[s],enumerable:!(r=L(t,s))||r.enumerable});return e},x=(e,t)=>F(D(w(e!=null?M(J(e)):{},"default",!t&&e&&e.__esModule?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e),Y=(e=>(t,n)=>e&&e.get(t)||(n=F(D({}),t,1),e&&e.set(t,n),n))(typeof WeakMap!="undefined"?new WeakMap:0);var oe={};W(oe,{createArraySyncEngineDataSource:()=>H,createFileSyncEngineDataSource:()=>X,createSyncEngineConsoleLogger:()=>ne,emitWithFormat:()=>T,isPathAPackageFile:()=>G,paginateAsync:()=>Q,readFileToObject:()=>E,readUniformPackage:()=>Z,syncEngine:()=>te,withApiOptions:()=>V,withDiffOptions:()=>B,withFormatOptions:()=>z,withProjectOptions:()=>q,writeUniformPackage:()=>ee});async function H({objects:e,selectIdentifier:t,selectDisplayName:n=t,onSyncComplete:r}){let s=e.reduce((o,c)=>{let i=t(c);if(o[i])throw new Error(`Identifier ${i} was not unique.`);return o[i]={id:i,object:c,providerId:i,displayName:n(c)},o},{});async function*p(){for(let o of Object.values(s))yield o}function m(){return Object.entries(s).sort((o,c)=>o[0].localeCompare(c[0])).map(o=>o[1].object)}return{objects:p(),deleteObject:async o=>{delete s[o]},writeObject:async o=>{let c=t(o.object);s[c]=o},extractCurrent:m,onSyncComplete:r?o=>r(o,m()):void 0}}var U=x(require("chalk")),A=require("fs"),C=require("fs/promises"),v=require("path");var _=require("js-yaml"),h=require("fs"),P=require("path"),N=require("fs");function V(e){var t,n;return e.option("apiKey",{describe:"Uniform API key. Defaults to CANVAS_CLI_API_KEY or UNIFORM_API_KEY env. Supports dotenv.",default:(n=(t=process.env.CANVAS_CLI_API_KEY)!=null?t:process.env.UPM_CLI_API_KEY)!=null?n:process.env.UNIFORM_API_KEY,demandOption:!0,type:"string"}).option("apiHost",{describe:"Uniform host. Defaults to UNIFORM_CLI_BASE_URL env or https://uniform.app. Supports dotenv.",default:process.env.UNIFORM_CLI_BASE_URL||"https://uniform.app",demandOption:!0,type:"string"})}function q(e){var t,n,r;return e.option("project",{describe:"Uniform project ID. Defaults to UNIFORM_CLI_PROJECT_ID or UNIFORM_PROJECT_ID env. Supports dotenv.",default:(r=(n=(t=process.env.UNIFORM_CLI_PROJECT_ID)!=null?t:process.env.CANVAS_CLI_PROJECT_ID)!=null?n:process.env.UPM_CLI_PROJECT_ID)!=null?r:process.env.UNIFORM_PROJECT_ID,demandOption:!0,type:"string",alias:["p"]})}function z(e){return e.option("format",{alias:["f"],describe:"Output format",default:"yaml",choices:["yaml","json"],type:"string"}).option("filename",{alias:["o"],describe:"Output filename. If not specified, write to stdout.",type:"string"})}function B(e){var t;return e.option("diff",{describe:"Whether to show diffs in stdout. off = no diffs; update = on for updates; on = updates, creates, deletes. Can be set by UNIFORM_CLI_DIFF_MODE environment variable.",default:(t=process.env.UNIFORM_CLI_DIFF_MODE)!=null?t:"off",type:"string",choices:["off","update","on"],alias:["d"]})}function G(e){let t=(0,P.extname)(e);return t===".yaml"||t===".yml"||t===".json"}function T(e,t,n){let r;if(n&&!t){let s=(0,P.extname)(n);s===".yaml"||s===".yml"?t="yaml":s===".json"&&(t="json")}else if(!t)throw new Error("Format must be specified when no filename is passed");switch(t){case"json":r=JSON.stringify(e,null,2);break;case"yaml":r=(0,_.dump)(e);break;default:throw new Error(`Unsupported format: ${t}`)}n?(0,h.writeFileSync)(n,r,"utf8"):console.log(r)}function E(e){let t=(0,N.readFileSync)(e,"utf8");return(0,_.load)(t,{filename:e,json:!0})}async function*Q(e,t){let n=t.pageSize||100,r=0,s=[];do{s=await e(r,n);for(let p of s)yield p;r+=n}while(s.length===n)}async function X({directory:e,format:t="yaml",selectIdentifier:n,selectDisplayName:r=n}){(0,A.existsSync)(e)||(0,A.mkdirSync)(e,{recursive:!0});let p=await(0,C.readdir)(e,"utf-8"),m=new Set(p.filter(i=>{let d=(0,v.extname)(i);return d===".json"||d===".yaml"||d===".yml"})),o=i=>(0,v.join)(e,`${i}.${t}`);async function*c(){for(let i of m){let d=(0,v.join)(e,i);try{let a=await E(d);yield{id:n(a),displayName:r(a),providerId:d,object:a}}catch(a){throw console.error(U.default.red(`Failed to read ${d}, data is likely invalid.
2
- ${a==null?void 0:a.message}`)),a}}}return{objects:c(),deleteObject:async i=>{await(0,C.unlink)(i)},writeObject:async i=>{T(i.object,t,o(i.id))}}}var k=x(require("fs"));function Z(e,t){if(!t&&!k.default.existsSync(e))return{};let n=E(e);if(typeof n!="object")throw new Error(`Package ${e} does not appear valid.`);return n}function ee(e,t){T(t,void 0,e)}var I=require("diff"),R=x(require("lodash.isequalwith"));async function te({source:e,target:t,compareContents:n=(o,c)=>(0,R.default)(o.object,c.object,(i,d,a)=>a==="created"||a==="modified"?!0:void 0),mode:r,allowEmptySource:s=!1,whatIf:p=!1,log:m=()=>{}}){var d,a;let o=new Map;for await(let l of t.objects)o.set(l.id,l);let c=[],i=!1;for await(let l of e.objects){i=!0;let u=l.id,O=o.get(u);if(O){if(!n(l,O)&&(r==="createOrUpdate"||r==="mirror")){let y=async(f,j)=>{var S;p||await t.writeObject(f,j),m({action:"update",id:u,providerId:f.providerId,displayName:(S=f.displayName)!=null?S:f.providerId,whatIf:p,diff:(0,I.diffJson)(j.object,f.object)})};c.push(y(l,O))}o.delete(u)}else{let y=async(f,j)=>{var S;p||await t.writeObject(f),m({action:"create",id:j,providerId:j,displayName:(S=f.displayName)!=null?S:f.providerId,whatIf:p,diff:(0,I.diffLines)("",JSON.stringify(f.object,null,2))})};c.push(y(l,u))}}if(await Promise.all(c),r==="mirror"){if(!i&&!s)throw new Error("Source is empty and mode is mirror. This would cause deletion of everything in the target, and most likely indicates an error in source definition.");let l=[];o.forEach(async u=>{let O=async y=>{var f;p||await t.deleteObject(y.providerId),m({action:"delete",id:y.id,providerId:y.providerId,displayName:(f=y.displayName)!=null?f:y.providerId,whatIf:p,diff:(0,I.diffLines)(JSON.stringify(y.object,null,2),"")})};l.push(O(u))}),await Promise.all(l)}await Promise.all([(d=e.onSyncComplete)==null?void 0:d.call(e,!1),(a=t.onSyncComplete)==null?void 0:a.call(t,!0)])}var g=x(require("chalk"));function ne(e){let{diffMode:t="off",indent:n,prefix:r}=e!=null?e:{};return function({action:p,displayName:m,whatIf:o,diff:c}){let i="";switch(p){case"create":i=g.default.green("[A]");break;case"update":i=g.default.white("[U]");break;case"delete":i=g.default.yellow("[D]");break}let d="";(t==="on"||t==="update"&&p==="update")&&(d=`
3
- `+c.map(a=>a.added?g.default.green(a.value):a.removed?g.default.red(a.value):a.value).join("")),console.log(`${n!=null?n:""}${o?g.default.gray("[WHATIF]"):""}${i}${r!=null?r:""} ${m}${d}`)}}module.exports=Y(oe);0&&(module.exports={createArraySyncEngineDataSource,createFileSyncEngineDataSource,createSyncEngineConsoleLogger,emitWithFormat,isPathAPackageFile,paginateAsync,readFileToObject,readUniformPackage,syncEngine,withApiOptions,withDiffOptions,withFormatOptions,withProjectOptions,writeUniformPackage});
1
+ var $=Object.create;var x=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var W=Object.getPrototypeOf,Y=Object.prototype.hasOwnProperty;var F=t=>x(t,"__esModule",{value:!0});var H=(t,e)=>{for(var n in e)x(t,n,{get:e[n],enumerable:!0})},N=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of K(e))!Y.call(t,s)&&(n||s!=="default")&&x(t,s,{get:()=>e[s],enumerable:!(o=J(e,s))||o.enumerable});return t},h=(t,e)=>N(F(x(t!=null?$(W(t)):{},"default",!e&&t&&t.__esModule?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t),V=(t=>(e,n)=>t&&t.get(e)||(n=N(F({}),e,1),t&&t.set(e,n),n))(typeof WeakMap!="undefined"?new WeakMap:0);var ie={};H(ie,{SyncEngineError:()=>u,createArraySyncEngineDataSource:()=>q,createFileSyncEngineDataSource:()=>ee,createSyncEngineConsoleLogger:()=>re,emitWithFormat:()=>E,isPathAPackageFile:()=>X,paginateAsync:()=>Z,readFileToObject:()=>v,readUniformPackage:()=>te,syncEngine:()=>oe,withApiOptions:()=>z,withDiffOptions:()=>Q,withFormatOptions:()=>G,withProjectOptions:()=>B,writeUniformPackage:()=>ne});async function q({objects:t,selectIdentifier:e,selectDisplayName:n=e,onSyncComplete:o}){let s=t.reduce((r,c)=>{let i=e(c);if(r[i])throw new Error(`Identifier ${i} was not unique.`);return r[i]={id:i,object:c,providerId:i,displayName:n(c)},r},{});async function*p(){for(let r of Object.values(s))yield r}function y(){return Object.entries(s).sort((r,c)=>r[0].localeCompare(c[0])).map(r=>r[1].object)}return{objects:p(),deleteObject:async r=>{delete s[r]},writeObject:async r=>{let c=e(r.object);s[c]=r},extractCurrent:y,onSyncComplete:o?r=>o(r,y()):void 0}}var R=h(require("chalk")),A=require("fs"),P=require("fs/promises"),I=require("path");var _=require("js-yaml"),U=require("fs"),D=require("path"),k=require("fs");function z(t){var e,n;return t.option("apiKey",{describe:"Uniform API key. Defaults to CANVAS_CLI_API_KEY or UNIFORM_API_KEY env. Supports dotenv.",default:(n=(e=process.env.CANVAS_CLI_API_KEY)!=null?e:process.env.UPM_CLI_API_KEY)!=null?n:process.env.UNIFORM_API_KEY,demandOption:!0,type:"string"}).option("apiHost",{describe:"Uniform host. Defaults to UNIFORM_CLI_BASE_URL env or https://uniform.app. Supports dotenv.",default:process.env.UNIFORM_CLI_BASE_URL||"https://uniform.app",demandOption:!0,type:"string"})}function B(t){var e,n,o;return t.option("project",{describe:"Uniform project ID. Defaults to UNIFORM_CLI_PROJECT_ID or UNIFORM_PROJECT_ID env. Supports dotenv.",default:(o=(n=(e=process.env.UNIFORM_CLI_PROJECT_ID)!=null?e:process.env.CANVAS_CLI_PROJECT_ID)!=null?n:process.env.UPM_CLI_PROJECT_ID)!=null?o:process.env.UNIFORM_PROJECT_ID,demandOption:!0,type:"string",alias:["p"]})}function G(t){return t.option("format",{alias:["f"],describe:"Output format",default:"yaml",choices:["yaml","json"],type:"string"}).option("filename",{alias:["o"],describe:"Output filename. If not specified, write to stdout.",type:"string"})}function Q(t){var e;return t.option("diff",{describe:"Whether to show diffs in stdout. off = no diffs; update = on for updates; on = updates, creates, deletes. Can be set by UNIFORM_CLI_DIFF_MODE environment variable.",default:(e=process.env.UNIFORM_CLI_DIFF_MODE)!=null?e:"off",type:"string",choices:["off","update","on"],alias:["d"]})}function X(t){let e=(0,D.extname)(t);return e===".yaml"||e===".yml"||e===".json"}function E(t,e,n){let o;if(n&&!e){let s=(0,D.extname)(n);s===".yaml"||s===".yml"?e="yaml":s===".json"&&(e="json")}else if(!e)throw new Error("Format must be specified when no filename is passed");switch(e){case"json":o=JSON.stringify(t,null,2);break;case"yaml":o=(0,_.dump)(t);break;default:throw new Error(`Unsupported format: ${e}`)}n?(0,U.writeFileSync)(n,o,"utf8"):console.log(o)}function v(t){let e=(0,k.readFileSync)(t,"utf8");return(0,_.load)(e,{filename:t,json:!0})}async function*Z(t,e){let n=e.pageSize||100,o=0,s=[];do{s=await t(o,n);for(let p of s)yield p;o+=n}while(s.length===n)}async function ee({directory:t,format:e="yaml",selectIdentifier:n,selectDisplayName:o=n}){(0,A.existsSync)(t)||(0,A.mkdirSync)(t,{recursive:!0});let p=await(0,P.readdir)(t,"utf-8"),y=new Set(p.filter(i=>{let f=(0,I.extname)(i);return f===".json"||f===".yaml"||f===".yml"})),r=i=>(0,I.join)(t,`${i}.${e}`);async function*c(){for(let i of y){let f=(0,I.join)(t,i);try{let a=await v(f);yield{id:n(a),displayName:o(a),providerId:f,object:a}}catch(a){throw console.error(R.default.red(`Failed to read ${f}, data is likely invalid.
2
+ ${a==null?void 0:a.message}`)),a}}}return{objects:c(),deleteObject:async i=>{await(0,P.unlink)(i)},writeObject:async i=>{E(i.object,e,r(i.id))}}}var M=h(require("fs"));function te(t,e){if(!e&&!M.default.existsSync(t))return{};let n=v(t);if(typeof n!="object")throw new Error(`Package ${t} does not appear valid.`);return n}function ne(t,e){E(e,void 0,t)}var w=require("diff"),L=h(require("lodash.isequalwith"));async function oe({source:t,target:e,compareContents:n=(r,c)=>(0,L.default)(r.object,c.object,(i,f,a)=>a==="created"||a==="modified"?!0:void 0),mode:o,allowEmptySource:s=!1,whatIf:p=!1,log:y=()=>{}}){var f,a;let r=new Map;for await(let l of e.objects)r.set(l.id,l);let c=[],i=!1;for await(let l of t.objects){i=!0;let O=l.id,S=r.get(O);if(S){if(!n(l,S)&&(o==="createOrUpdate"||o==="mirror")){let m=async(d,g)=>{var T;if(!p)try{await e.writeObject(d,g)}catch(C){throw new u(C,d)}y({action:"update",id:O,providerId:d.providerId,displayName:(T=d.displayName)!=null?T:d.providerId,whatIf:p,diff:(0,w.diffJson)(g.object,d.object)})};c.push(m(l,S))}r.delete(O)}else{let m=async(d,g)=>{var T;if(!p)try{await e.writeObject(d)}catch(C){throw new u(C,d)}y({action:"create",id:g,providerId:g,displayName:(T=d.displayName)!=null?T:d.providerId,whatIf:p,diff:(0,w.diffLines)("",JSON.stringify(d.object,null,2))})};c.push(m(l,O))}}if(await Promise.all(c),o==="mirror"){if(!i&&!s)throw new Error("Source is empty and mode is mirror. This would cause deletion of everything in the target, and most likely indicates an error in source definition.");let l=[];r.forEach(async O=>{let S=async m=>{var d;if(!p)try{await e.deleteObject(m.providerId)}catch(g){throw new u(g,m)}y({action:"delete",id:m.id,providerId:m.providerId,displayName:(d=m.displayName)!=null?d:m.providerId,whatIf:p,diff:(0,w.diffLines)(JSON.stringify(m.object,null,2),"")})};l.push(S(O))}),await Promise.all(l)}await Promise.all([(f=t.onSyncComplete)==null?void 0:f.call(t,!1),(a=e.onSyncComplete)==null?void 0:a.call(e,!0)])}var u=class extends Error{constructor(e,n){super(`Error syncing ${(o=n.displayName)!=null?o:n.providerId} (${n.providerId})
3
+ ${e}`);var o;this.stack=void 0,Object.setPrototypeOf(this,u.prototype)}};var b=h(require("chalk"));function re(t){let{diffMode:e="off",indent:n,prefix:o}=t!=null?t:{};return function({action:p,displayName:y,whatIf:r,diff:c}){let i="";switch(p){case"create":i=b.default.green("[A]");break;case"update":i=b.default.white("[U]");break;case"delete":i=b.default.yellow("[D]");break}let f="";(e==="on"||e==="update"&&p==="update")&&(f=`
4
+ `+c.map(a=>a.added?b.default.green(a.value):a.removed?b.default.red(a.value):a.value).join("")),console.log(`${n!=null?n:""}${r?b.default.gray("[WHATIF]"):""}${i}${o!=null?o:""} ${y}${f}`)}}module.exports=V(ie);0&&(module.exports={SyncEngineError,createArraySyncEngineDataSource,createFileSyncEngineDataSource,createSyncEngineConsoleLogger,emitWithFormat,isPathAPackageFile,paginateAsync,readFileToObject,readUniformPackage,syncEngine,withApiOptions,withDiffOptions,withFormatOptions,withProjectOptions,writeUniformPackage});
@@ -1,3 +1,4 @@
1
- import"../chunk-74EM6MWN.mjs";async function $({objects:t,selectIdentifier:e,selectDisplayName:n=e,onSyncComplete:i}){let c=t.reduce((o,a)=>{let r=e(a);if(o[r])throw new Error(`Identifier ${r} was not unique.`);return o[r]={id:r,object:a,providerId:r,displayName:n(a)},o},{});async function*p(){for(let o of Object.values(c))yield o}function m(){return Object.entries(c).sort((o,a)=>o[0].localeCompare(a[0])).map(o=>o[1].object)}return{objects:p(),deleteObject:async o=>{delete c[o]},writeObject:async o=>{let a=e(o.object);c[a]=o},extractCurrent:m,onSyncComplete:i?o=>i(o,m()):void 0}}import D from"chalk";import{existsSync as F,mkdirSync as h}from"fs";import{readdir as N,unlink as U}from"fs/promises";import{extname as k,join as w}from"path";import{dump as _,load as A}from"js-yaml";import{writeFileSync as C}from"fs";import{extname as I}from"path";import{readFileSync as P}from"fs";function V(t){var e,n;return t.option("apiKey",{describe:"Uniform API key. Defaults to CANVAS_CLI_API_KEY or UNIFORM_API_KEY env. Supports dotenv.",default:(n=(e=process.env.CANVAS_CLI_API_KEY)!=null?e:process.env.UPM_CLI_API_KEY)!=null?n:process.env.UNIFORM_API_KEY,demandOption:!0,type:"string"}).option("apiHost",{describe:"Uniform host. Defaults to UNIFORM_CLI_BASE_URL env or https://uniform.app. Supports dotenv.",default:process.env.UNIFORM_CLI_BASE_URL||"https://uniform.app",demandOption:!0,type:"string"})}function q(t){var e,n,i;return t.option("project",{describe:"Uniform project ID. Defaults to UNIFORM_CLI_PROJECT_ID or UNIFORM_PROJECT_ID env. Supports dotenv.",default:(i=(n=(e=process.env.UNIFORM_CLI_PROJECT_ID)!=null?e:process.env.CANVAS_CLI_PROJECT_ID)!=null?n:process.env.UPM_CLI_PROJECT_ID)!=null?i:process.env.UNIFORM_PROJECT_ID,demandOption:!0,type:"string",alias:["p"]})}function z(t){return t.option("format",{alias:["f"],describe:"Output format",default:"yaml",choices:["yaml","json"],type:"string"}).option("filename",{alias:["o"],describe:"Output filename. If not specified, write to stdout.",type:"string"})}function B(t){var e;return t.option("diff",{describe:"Whether to show diffs in stdout. off = no diffs; update = on for updates; on = updates, creates, deletes. Can be set by UNIFORM_CLI_DIFF_MODE environment variable.",default:(e=process.env.UNIFORM_CLI_DIFF_MODE)!=null?e:"off",type:"string",choices:["off","update","on"],alias:["d"]})}function G(t){let e=I(t);return e===".yaml"||e===".yml"||e===".json"}function E(t,e,n){let i;if(n&&!e){let c=I(n);c===".yaml"||c===".yml"?e="yaml":c===".json"&&(e="json")}else if(!e)throw new Error("Format must be specified when no filename is passed");switch(e){case"json":i=JSON.stringify(t,null,2);break;case"yaml":i=_(t);break;default:throw new Error(`Unsupported format: ${e}`)}n?C(n,i,"utf8"):console.log(i)}function v(t){let e=P(t,"utf8");return A(e,{filename:t,json:!0})}async function*Q(t,e){let n=e.pageSize||100,i=0,c=[];do{c=await t(i,n);for(let p of c)yield p;i+=n}while(c.length===n)}async function re({directory:t,format:e="yaml",selectIdentifier:n,selectDisplayName:i=n}){F(t)||h(t,{recursive:!0});let p=await N(t,"utf-8"),m=new Set(p.filter(r=>{let d=k(r);return d===".json"||d===".yaml"||d===".yml"})),o=r=>w(t,`${r}.${e}`);async function*a(){for(let r of m){let d=w(t,r);try{let s=await v(d);yield{id:n(s),displayName:i(s),providerId:d,object:s}}catch(s){throw console.error(D.red(`Failed to read ${d}, data is likely invalid.
2
- ${s==null?void 0:s.message}`)),s}}}return{objects:a(),deleteObject:async r=>{await U(r)},writeObject:async r=>{E(r.object,e,o(r.id))}}}import R from"fs";function ce(t,e){if(!e&&!R.existsSync(t))return{};let n=v(t);if(typeof n!="object")throw new Error(`Package ${t} does not appear valid.`);return n}function pe(t,e){E(e,void 0,t)}import{diffJson as M,diffLines as x}from"diff";import L from"lodash.isequalwith";async function ye({source:t,target:e,compareContents:n=(o,a)=>L(o.object,a.object,(r,d,s)=>s==="created"||s==="modified"?!0:void 0),mode:i,allowEmptySource:c=!1,whatIf:p=!1,log:m=()=>{}}){var d,s;let o=new Map;for await(let l of e.objects)o.set(l.id,l);let a=[],r=!1;for await(let l of t.objects){r=!0;let g=l.id,j=o.get(g);if(j){if(!n(l,j)&&(i==="createOrUpdate"||i==="mirror")){let y=async(f,S)=>{var T;p||await e.writeObject(f,S),m({action:"update",id:g,providerId:f.providerId,displayName:(T=f.displayName)!=null?T:f.providerId,whatIf:p,diff:M(S.object,f.object)})};a.push(y(l,j))}o.delete(g)}else{let y=async(f,S)=>{var T;p||await e.writeObject(f),m({action:"create",id:S,providerId:S,displayName:(T=f.displayName)!=null?T:f.providerId,whatIf:p,diff:x("",JSON.stringify(f.object,null,2))})};a.push(y(l,g))}}if(await Promise.all(a),i==="mirror"){if(!r&&!c)throw new Error("Source is empty and mode is mirror. This would cause deletion of everything in the target, and most likely indicates an error in source definition.");let l=[];o.forEach(async g=>{let j=async y=>{var f;p||await e.deleteObject(y.providerId),m({action:"delete",id:y.id,providerId:y.providerId,displayName:(f=y.displayName)!=null?f:y.providerId,whatIf:p,diff:x(JSON.stringify(y.object,null,2),"")})};l.push(j(g))}),await Promise.all(l)}await Promise.all([(d=t.onSyncComplete)==null?void 0:d.call(t,!1),(s=e.onSyncComplete)==null?void 0:s.call(e,!0)])}import O from"chalk";function be(t){let{diffMode:e="off",indent:n,prefix:i}=t!=null?t:{};return function({action:p,displayName:m,whatIf:o,diff:a}){let r="";switch(p){case"create":r=O.green("[A]");break;case"update":r=O.white("[U]");break;case"delete":r=O.yellow("[D]");break}let d="";(e==="on"||e==="update"&&p==="update")&&(d=`
3
- `+a.map(s=>s.added?O.green(s.value):s.removed?O.red(s.value):s.value).join("")),console.log(`${n!=null?n:""}${o?O.gray("[WHATIF]"):""}${r}${i!=null?i:""} ${m}${d}`)}}export{$ as createArraySyncEngineDataSource,re as createFileSyncEngineDataSource,be as createSyncEngineConsoleLogger,E as emitWithFormat,G as isPathAPackageFile,Q as paginateAsync,v as readFileToObject,ce as readUniformPackage,ye as syncEngine,V as withApiOptions,B as withDiffOptions,z as withFormatOptions,q as withProjectOptions,pe as writeUniformPackage};
1
+ import"../chunk-74EM6MWN.mjs";async function K({objects:t,selectIdentifier:e,selectDisplayName:n=e,onSyncComplete:r}){let c=t.reduce((o,a)=>{let i=e(a);if(o[i])throw new Error(`Identifier ${i} was not unique.`);return o[i]={id:i,object:a,providerId:i,displayName:n(a)},o},{});async function*p(){for(let o of Object.values(c))yield o}function y(){return Object.entries(c).sort((o,a)=>o[0].localeCompare(a[0])).map(o=>o[1].object)}return{objects:p(),deleteObject:async o=>{delete c[o]},writeObject:async o=>{let a=e(o.object);c[a]=o},extractCurrent:y,onSyncComplete:r?o=>r(o,y()):void 0}}import F from"chalk";import{existsSync as N,mkdirSync as U}from"fs";import{readdir as k,unlink as R}from"fs/promises";import{extname as M,join as h}from"path";import{dump as A,load as P}from"js-yaml";import{writeFileSync as C}from"fs";import{extname as x}from"path";import{readFileSync as D}from"fs";function z(t){var e,n;return t.option("apiKey",{describe:"Uniform API key. Defaults to CANVAS_CLI_API_KEY or UNIFORM_API_KEY env. Supports dotenv.",default:(n=(e=process.env.CANVAS_CLI_API_KEY)!=null?e:process.env.UPM_CLI_API_KEY)!=null?n:process.env.UNIFORM_API_KEY,demandOption:!0,type:"string"}).option("apiHost",{describe:"Uniform host. Defaults to UNIFORM_CLI_BASE_URL env or https://uniform.app. Supports dotenv.",default:process.env.UNIFORM_CLI_BASE_URL||"https://uniform.app",demandOption:!0,type:"string"})}function B(t){var e,n,r;return t.option("project",{describe:"Uniform project ID. Defaults to UNIFORM_CLI_PROJECT_ID or UNIFORM_PROJECT_ID env. Supports dotenv.",default:(r=(n=(e=process.env.UNIFORM_CLI_PROJECT_ID)!=null?e:process.env.CANVAS_CLI_PROJECT_ID)!=null?n:process.env.UPM_CLI_PROJECT_ID)!=null?r:process.env.UNIFORM_PROJECT_ID,demandOption:!0,type:"string",alias:["p"]})}function G(t){return t.option("format",{alias:["f"],describe:"Output format",default:"yaml",choices:["yaml","json"],type:"string"}).option("filename",{alias:["o"],describe:"Output filename. If not specified, write to stdout.",type:"string"})}function Q(t){var e;return t.option("diff",{describe:"Whether to show diffs in stdout. off = no diffs; update = on for updates; on = updates, creates, deletes. Can be set by UNIFORM_CLI_DIFF_MODE environment variable.",default:(e=process.env.UNIFORM_CLI_DIFF_MODE)!=null?e:"off",type:"string",choices:["off","update","on"],alias:["d"]})}function X(t){let e=x(t);return e===".yaml"||e===".yml"||e===".json"}function v(t,e,n){let r;if(n&&!e){let c=x(n);c===".yaml"||c===".yml"?e="yaml":c===".json"&&(e="json")}else if(!e)throw new Error("Format must be specified when no filename is passed");switch(e){case"json":r=JSON.stringify(t,null,2);break;case"yaml":r=A(t);break;default:throw new Error(`Unsupported format: ${e}`)}n?C(n,r,"utf8"):console.log(r)}function I(t){let e=D(t,"utf8");return P(e,{filename:t,json:!0})}async function*Z(t,e){let n=e.pageSize||100,r=0,c=[];do{c=await t(r,n);for(let p of c)yield p;r+=n}while(c.length===n)}async function se({directory:t,format:e="yaml",selectIdentifier:n,selectDisplayName:r=n}){N(t)||U(t,{recursive:!0});let p=await k(t,"utf-8"),y=new Set(p.filter(i=>{let f=M(i);return f===".json"||f===".yaml"||f===".yml"})),o=i=>h(t,`${i}.${e}`);async function*a(){for(let i of y){let f=h(t,i);try{let s=await I(f);yield{id:n(s),displayName:r(s),providerId:f,object:s}}catch(s){throw console.error(F.red(`Failed to read ${f}, data is likely invalid.
2
+ ${s==null?void 0:s.message}`)),s}}}return{objects:a(),deleteObject:async i=>{await R(i)},writeObject:async i=>{v(i.object,e,o(i.id))}}}import L from"fs";function de(t,e){if(!e&&!L.existsSync(t))return{};let n=I(t);if(typeof n!="object")throw new Error(`Package ${t} does not appear valid.`);return n}function fe(t,e){v(e,void 0,t)}import{diffJson as $,diffLines as _}from"diff";import J from"lodash.isequalwith";async function ue({source:t,target:e,compareContents:n=(o,a)=>J(o.object,a.object,(i,f,s)=>s==="created"||s==="modified"?!0:void 0),mode:r,allowEmptySource:c=!1,whatIf:p=!1,log:y=()=>{}}){var f,s;let o=new Map;for await(let l of e.objects)o.set(l.id,l);let a=[],i=!1;for await(let l of t.objects){i=!0;let u=l.id,T=o.get(u);if(T){if(!n(l,T)&&(r==="createOrUpdate"||r==="mirror")){let m=async(d,g)=>{var E;if(!p)try{await e.writeObject(d,g)}catch(w){throw new j(w,d)}y({action:"update",id:u,providerId:d.providerId,displayName:(E=d.displayName)!=null?E:d.providerId,whatIf:p,diff:$(g.object,d.object)})};a.push(m(l,T))}o.delete(u)}else{let m=async(d,g)=>{var E;if(!p)try{await e.writeObject(d)}catch(w){throw new j(w,d)}y({action:"create",id:g,providerId:g,displayName:(E=d.displayName)!=null?E:d.providerId,whatIf:p,diff:_("",JSON.stringify(d.object,null,2))})};a.push(m(l,u))}}if(await Promise.all(a),r==="mirror"){if(!i&&!c)throw new Error("Source is empty and mode is mirror. This would cause deletion of everything in the target, and most likely indicates an error in source definition.");let l=[];o.forEach(async u=>{let T=async m=>{var d;if(!p)try{await e.deleteObject(m.providerId)}catch(g){throw new j(g,m)}y({action:"delete",id:m.id,providerId:m.providerId,displayName:(d=m.displayName)!=null?d:m.providerId,whatIf:p,diff:_(JSON.stringify(m.object,null,2),"")})};l.push(T(u))}),await Promise.all(l)}await Promise.all([(f=t.onSyncComplete)==null?void 0:f.call(t,!1),(s=e.onSyncComplete)==null?void 0:s.call(e,!0)])}var j=class extends Error{constructor(e,n){super(`Error syncing ${(r=n.displayName)!=null?r:n.providerId} (${n.providerId})
3
+ ${e}`);var r;this.stack=void 0,Object.setPrototypeOf(this,j.prototype)}};import S from"chalk";function je(t){let{diffMode:e="off",indent:n,prefix:r}=t!=null?t:{};return function({action:p,displayName:y,whatIf:o,diff:a}){let i="";switch(p){case"create":i=S.green("[A]");break;case"update":i=S.white("[U]");break;case"delete":i=S.yellow("[D]");break}let f="";(e==="on"||e==="update"&&p==="update")&&(f=`
4
+ `+a.map(s=>s.added?S.green(s.value):s.removed?S.red(s.value):s.value).join("")),console.log(`${n!=null?n:""}${o?S.gray("[WHATIF]"):""}${i}${r!=null?r:""} ${y}${f}`)}}export{j as SyncEngineError,K as createArraySyncEngineDataSource,se as createFileSyncEngineDataSource,je as createSyncEngineConsoleLogger,v as emitWithFormat,X as isPathAPackageFile,Z as paginateAsync,I as readFileToObject,de as readUniformPackage,ue as syncEngine,z as withApiOptions,Q as withDiffOptions,G as withFormatOptions,B as withProjectOptions,fe as writeUniformPackage};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniformdev/cli",
3
- "version": "12.2.1-alpha.170+899ea147",
3
+ "version": "12.2.1-alpha.183+49960035",
4
4
  "description": "Uniform command line interface tool",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "main": "./cli.js",
@@ -44,11 +44,14 @@
44
44
  "yargs": "^17.3.1"
45
45
  },
46
46
  "devDependencies": {
47
+ "@types/diff": "^5.0.2",
47
48
  "@types/jest": "27.4.0",
48
- "@types/node": "16.11.24",
49
- "@types/node-fetch": "2.5.12",
49
+ "@types/js-yaml": "^4.0.5",
50
+ "@types/lodash.isequalwith": "^4.4.6",
51
+ "@types/node": "16.11.25",
52
+ "@types/node-fetch": "2.6.1",
50
53
  "@types/yargs": "17.0.8",
51
- "eslint": "8.8.0",
54
+ "eslint": "8.9.0",
52
55
  "eslint-plugin-react": "7.28.0",
53
56
  "eslint-plugin-react-hooks": "4.3.0",
54
57
  "jest": "27.5.1",
@@ -66,5 +69,5 @@
66
69
  "publishConfig": {
67
70
  "access": "public"
68
71
  },
69
- "gitHead": "899ea147cdea482a014e02911fc9554c81dd2cbc"
72
+ "gitHead": "49960035ff35b493601e3cb0de247eff3c8019ac"
70
73
  }