@nice2dev/ui-forms 1.3.10 → 1.3.12
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 +41 -8
- package/dist/index.cjs +6 -3
- package/dist/index.d.ts +808 -158
- package/dist/index.mjs +4905 -1928
- package/dist/studio.cjs +10 -0
- package/dist/studio.d.ts +796 -0
- package/dist/studio.mjs +1233 -0
- package/dist/ui-forms.css +1 -1
- package/package.json +10 -5
package/dist/studio.cjs
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";var Se=Object.defineProperty;var je=(e,t,n)=>t in e?Se(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var H=(e,t,n)=>je(e,typeof t!="symbol"?t+"":t,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Z="\uFEFF",Q={bom:!1,eol:`
|
|
2
|
+
`,indent:" ",finalNewline:!0,colonSpace:!0};function P(e){const t=e.charCodeAt(0)===65279,n=e.includes(`\r
|
|
3
|
+
`)?`\r
|
|
4
|
+
`:`
|
|
5
|
+
`;let i=Q.indent;const r=e.split(/\r?\n/);for(let c=1;c<r.length;c++){const d=/^([ \t]+)\S/.exec(r[c]);if(d){i=d[1];break}}const a=/"\s*:(\s?)/.exec(e);return{bom:t,eol:n,indent:i,finalNewline:/\n$/.test(e),colonSpace:a?a[1]!=="":!0}}function K(e){const t=P(e);return{value:JSON.parse(t.bom?e.slice(1):e),format:t}}function w(e,t){const n={...Q,...t},i=O(e,n,"");return(n.bom?Z:"")+i+(n.finalNewline?n.eol:"")}function ee(e,t){if(t===void 0)return e;let n=t.includes(`\r
|
|
6
|
+
`)?e.replace(/\r?\n/g,`\r
|
|
7
|
+
`):e;return t.charCodeAt(0)===65279&&n.charCodeAt(0)!==65279&&(n=Z+n),n}function x(e,t){if(e===t)return!0;if(typeof e!=typeof t||e===null||t===null||typeof e!="object"||Array.isArray(e)!==Array.isArray(t))return!1;if(Array.isArray(e)){const a=t;return e.length===a.length&&e.every((c,d)=>x(c,a[d]))}const n=e,i=t,r=Object.keys(n);return r.length!==Object.keys(i).length?!1:r.every(a=>Object.prototype.hasOwnProperty.call(i,a)&&x(n[a],i[a]))}function q(e,t,n){return te(e,t,n).text}function te(e,t,n){const i=P(e),r=s=>({text:w(t,i),exact:!1,reason:s});let a;try{a=new Ke(e).parseDocument()}catch(s){return r(s instanceof Error?s.message:String(s))}if(C(a))return r("duplicate keys");const c=[],d={text:e,format:i,edits:c,options:n,compact:!e.trimEnd().includes(`
|
|
8
|
+
`)};z(d,a,t,"",!1);const u=Oe(e,c);try{const s=JSON.parse(i.bom?u.slice(1):u);if(!x(s,t))return r("patch did not read back")}catch{return r("patch was not valid JSON")}return{text:u,exact:!0}}class Ke{constructor(t){H(this,"pos",0);this.text=t}parseDocument(){this.text.charCodeAt(0)===65279&&(this.pos=1);const t=this.value();if(this.ws(),this.pos<this.text.length)throw new Error(`Unexpected text at ${this.pos}`);return t}ws(){for(;this.pos<this.text.length&&/\s/.test(this.text[this.pos]);)this.pos++}value(){this.ws();const t=this.text[this.pos];if(t==="{")return this.object();if(t==="[")return this.array();const n=this.pos;if(t==='"')return{kind:"scalar",start:n,end:this.stringEnd(),value:JSON.parse(this.slice(n))};const i=/^(?:-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|true|false|null)/.exec(this.text.slice(n,n+64));if(!i)throw new Error(`Unexpected token at ${n}`);return this.pos=n+i[0].length,{kind:"scalar",start:n,end:this.pos,value:JSON.parse(i[0])}}slice(t){return this.text.slice(t,this.pos)}stringEnd(){for(this.pos++;this.pos<this.text.length;){const t=this.text[this.pos];if(t==="\\"){this.pos+=2;continue}if(this.pos++,t==='"')return this.pos}throw new Error("Unterminated string")}object(){const t=this.pos++,n=[];if(this.ws(),this.text[this.pos]==="}")return{kind:"object",start:t,end:++this.pos,members:n};for(;;){this.ws();const i=this.pos;if(this.text[this.pos]!=='"')throw new Error(`Expected a key at ${this.pos}`);const r=JSON.parse(this.text.slice(i,this.stringEnd()));if(this.ws(),this.text[this.pos]!==":")throw new Error(`Expected ':' at ${this.pos}`);this.pos++,n.push({key:r,start:i,value:this.value()}),this.ws();const a=this.text[this.pos++];if(a==="}")return{kind:"object",start:t,end:this.pos,members:n};if(a!==",")throw new Error(`Expected ',' or '}' at ${this.pos-1}`)}}array(){const t=this.pos++,n=[];if(this.ws(),this.text[this.pos]==="]")return{kind:"array",start:t,end:++this.pos,items:n};for(;;){n.push(this.value()),this.ws();const i=this.text[this.pos++];if(i==="]")return{kind:"array",start:t,end:this.pos,items:n};if(i!==",")throw new Error(`Expected ',' or ']' at ${this.pos-1}`)}}}function C(e){if(e.kind==="object"){const t=new Set;for(const n of e.members){if(t.has(n.key)||C(n.value))return!0;t.add(n.key)}}else if(e.kind==="array")return e.items.some(C);return!1}function M(e){if(e.kind==="scalar")return e.value;if(e.kind==="array")return e.items.map(M);const t={};for(const n of e.members)t[n.key]=M(n.value);return t}function O(e,t,n){if(e===null||typeof e!="object")return e===void 0?"null":JSON.stringify(e);const i=n+t.indent,r=t.colonSpace?": ":":";if(Array.isArray(e))return e.length===0?"[]":`[${t.eol}${e.map(c=>i+O(c,t,i)).join(`,${t.eol}`)}${t.eol}${n}]`;const a=Object.entries(e).filter(([,c])=>c!==void 0);return a.length===0?"{}":`{${t.eol}${a.map(([c,d])=>`${i}${JSON.stringify(c)}${r}${O(d,t,i)}`).join(`,${t.eol}`)}${t.eol}${n}}`}function A(e,t,n=!1){if(e===null||typeof e!="object")return e===void 0?"null":JSON.stringify(e);const i=t.colonSpace?": ":":",r=n?",":", ";if(Array.isArray(e))return`[${e.map(d=>A(d,t,n)).join(r)}]`;const a=Object.entries(e).filter(([,d])=>d!==void 0),c=n?"":" ";return a.length===0?"{}":`{${c}${a.map(([d,u])=>`${JSON.stringify(d)}${i}${A(u,t,n)}`).join(r)}${c}}`}const ne=e=>e.compact?",":", ";function Oe(e,t){let n=e;for(const i of[...t].sort((r,a)=>a.start-r.start))n=n.slice(0,i.start)+i.text+n.slice(i.end);return n}function F(e,t){var i;const n=e.lastIndexOf(`
|
|
9
|
+
`,t-1)+1;return((i=/^[ \t]*/.exec(e.slice(n,t)))==null?void 0:i[0])??""}function se(e,t){return!e.slice(t.start,t.end).includes(`
|
|
10
|
+
`)}function _(e,t,n){return e.compact?!0:t.kind==="scalar"||(t.kind==="object"?t.members.length===0:t.items.length===0)?n:se(e.text,t)}function N(e,t,n,i){const r=_(e,t,i);e.edits.push({start:t.start,end:t.end,text:r?A(n,e.format,e.compact):O(n,e.format,F(e.text,t.start))})}const ie=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function z(e,t,n,i,r){if(t.kind==="scalar"){if(t.value===n)return;N(e,t,n,r);return}x(M(t),n)||(t.kind==="object"&&ie(n)?Ae(e,t,n,i,r):t.kind==="array"&&Array.isArray(n)?Ne(e,t,n,i,r):N(e,t,n,r))}function re(e,t,n){return n!==void 0?F(e.text,n):F(e.text,t.start)+e.format.indent}function Ae(e,t,n,i,r){var l;const a=_(e,t,r),c=t.members.filter(f=>Object.prototype.hasOwnProperty.call(n,f.key)&&n[f.key]!==void 0),d=Object.keys(n).filter(f=>n[f]!==void 0&&!t.members.some(h=>h.key===f));if(c.length===0&&t.members.length>0){N(e,t,n,r);return}for(const f of c)z(e,f.value,n[f.key],`${i}/${Fe(f.key)}`,a);if(oe(e,t.members.map(f=>({start:f.start,end:f.value.end})),t.members.map(f=>c.includes(f))),d.length===0)return;const u=e.format.colonSpace?": ":":";if(a){const f=d.map(h=>`${JSON.stringify(h)}${u}${A(n[h],e.format,e.compact)}`);ce(e,t,c.length>0?c[c.length-1].value.end:void 0,f);return}const s=re(e,t,(l=t.members[0])==null?void 0:l.start),o=d.map(f=>`${s}${JSON.stringify(f)}${u}${O(n[f],e.format,s)}`);ae(e,t,c.length>0?c[c.length-1].value.end:void 0,o)}const Ee=["name","id","code","key","slug","state","Id"];function xe(e,t,n,i){var u,s;const r=[...n,...i];if(r.length===0||!r.every(ie))return;const a=(o,l)=>{const f=o.map(h=>h[l]);return f.every(h=>typeof h=="string"||typeof h=="number")&&new Set(f).size===f.length},c=(s=(u=e.options)==null?void 0:u.arrayKey)==null?void 0:s.call(u,t);return(c?[c]:Ee).find(o=>a(n,o)&&a(i,o))}function Ne(e,t,n,i,r){var g;const a=_(e,t,r),c=t.items.map(M),d=xe(e,i,c,n),u=p=>p[d],s=d!==void 0?c.map(p=>{const m=u(p);return n.findIndex(b=>u(b)===m)}):Me(c,n);{const p=new Set(s.filter(m=>m>=0));for(let m=0;m<s.length;m++){if(s[m]>=0)continue;let b=-1;for(let y=m-1;y>=0;y--)if(s[y]>=0){b=s[y];break}let $=n.length;for(let y=m+1;y<s.length;y++)if(s[y]>=0){$=s[y];break}for(let y=b+1;y<$;y++)if(!p.has(y)){s[m]=y,p.add(y);break}}}const o=s.filter(p=>p>=0);if(o.some((p,m)=>m>0&&p<o[m-1])){N(e,t,n,r);return}if(o.length===0&&t.items.length>0){N(e,t,n,r);return}t.items.forEach((p,m)=>{s[m]>=0&&z(e,p,n[s[m]],`${i}/${s[m]}`,a)}),oe(e,t.items.map(p=>({start:p.start,end:p.end})),s.map(p=>p>=0));const l=t.items.length>0&&t.items.every(p=>p.kind!=="scalar"&&se(e.text,p)),f=re(e,t,(g=t.items[0])==null?void 0:g.start),h=new Map;n.forEach((p,m)=>{if(s.includes(m))return;let b;for(let S=t.items.length-1;S>=0;S--)if(s[S]>=0&&s[S]<m){b=S;break}const $=a?A(p,e.format,e.compact):l?`${f}${A(p,e.format)}`:`${f}${O(p,e.format,f)}`,y=h.get(b)??[];y.push($),h.set(b,y)});for(const[p,m]of h){const b=p===void 0?void 0:t.items[p].end;if(p===void 0&&o.length>0){const $=t.items[s.findIndex(S=>S>=0)],y=a?ne(e):`,${e.format.eol}`;e.edits.push({start:$.start,end:$.start,text:a?m.join(y)+y:m.join(y).trimStart()+y+f});continue}a?ce(e,t,b,m):ae(e,t,b,m)}}const Ie=4e6;function Me(e,t){const n=e.length,i=t.length;if(n*i>Ie)return e.map((o,l)=>l<i?l:-1);const r=e.map(o=>JSON.stringify(o)),a=t.map(o=>JSON.stringify(o)),c=Array.from({length:n+1},()=>new Uint32Array(i+1));for(let o=n-1;o>=0;o--)for(let l=i-1;l>=0;l--)c[o][l]=r[o]===a[l]?c[o+1][l+1]+1:Math.max(c[o+1][l],c[o][l+1]);const d=new Array(n).fill(-1);let u=0,s=0;for(;u<n&&s<i;)r[u]===a[s]?d[u++]=s++:c[u+1][s]>=c[u][s+1]?u++:s++;return d}function oe(e,t,n){for(let i=0;i<t.length;i++){if(n[i])continue;let r=i;for(;r+1<t.length&&!n[r+1];)r++;r+1<t.length?e.edits.push({start:t[i].start,end:t[r+1].start,text:""}):i>0?e.edits.push({start:t[i-1].end,end:t[r].end,text:""}):e.edits.push({start:t[i].start,end:t[r].end,text:""}),i=r}}function ae(e,t,n,i){const r=e.format.eol;if(n!==void 0){e.edits.push({start:n,end:n,text:`,${r}${i.join(`,${r}`)}`});return}const a=t.end-1;if((t.kind==="object"?t.members.length:t.items.length)===0)e.edits.push({start:t.start+1,end:a,text:`${r}${i.join(`,${r}`)}${r}${F(e.text,t.start)}`});else{const d=t.kind==="object"?t.members[0].start:t.items[0].start;e.edits.push({start:d,end:d,text:`${i.join(`,${r}`).trimStart()}`})}}function ce(e,t,n,i){const r=ne(e);if(n!==void 0){e.edits.push({start:n,end:n,text:`${r}${i.join(r)}`});return}const a=t.kind==="object"&&!e.compact?" ":"";e.edits.push({start:t.start+1,end:t.end-1,text:`${a}${i.join(r)}${a}`})}function Fe(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}const j=e=>e.slice(e.lastIndexOf("/")+1),Te=e=>e.charCodeAt(0)===65279?e.slice(1):e;function V(e){return{id:e.id,label:e.label,labelKey:e.labelKey,icon:e.icon,match:e.match,editor:e.editor,decode(t,n){return e.select(K(t[0].text).value,n)},encode(t,n,i){const r=n[0].text,a=K(r).value,c=e.assign(a,t,i);return{files:[{path:n[0].path,text:q(r,c,{arrayKey:e.arrayKey})}]}}}}const T=V({id:"json",label:"JSON",labelKey:"devStudio.kind.json",icon:"code",match:e=>e.toLowerCase().endsWith(".json"),editor:"json",select:e=>e,assign:(e,t)=>t}),J={id:"text",label:"Text",labelKey:"devStudio.kind.text",icon:"file",match:()=>!0,editor:"text",decode:e=>e[0].text,encode:(e,t)=>({files:[{path:t[0].path,text:ee(e,t[0].text)}]})};function le(e,t){return e.find(n=>n.match(t))??(T.match(t)?T:J)}function Je(e,t,n){for(const i of[T,J])if(i.match(e.path))try{const r=i.decode([e],n);return{key:`${i.id}:${e.path}`,kind:i,paths:[e.path],label:j(e.path),model:r,error:t}}catch{}return{key:`text:${e.path}`,kind:J,paths:[e.path],label:j(e.path),model:e.text,error:t}}function De(e,t,n,i){var d,u;const r=e.encode(t,n,i),a=new Map(n.map(s=>[s.path,s.text])),c=((d=r.files.find(s=>a.get(s.path)!==s.text))==null?void 0:d.path)??((u=r.deleted)==null?void 0:u.find(s=>a.has(s)));if(c!==void 0)throw new Error(`${j(c)} would not be stored as it is`)}function Pe(e,t,n){const i=new Map;for(const a of t){const c=le(e,a.path),d=c.group?c.group(a.path):a.path,u=`${c.id}:${d}`,s=i.get(u)??{kind:c,group:d,files:[]};s.files.push(a),i.set(u,s)}const r=[];for(const[a,{kind:c,group:d,files:u}]of i){const s=u.map(l=>l.path).sort(),o=j(c.group?d:s[0]);try{const l=c.decode(u,n);De(c,l,u,n),r.push({key:a,kind:c,paths:s,label:o,model:l})}catch(l){const f=l instanceof Error?l.message:String(l);for(const h of u)r.push(Je(h,f,n))}}return r.sort((a,c)=>a.label.localeCompare(c.label))}function Ve(e,t,n,i){const r=n.filter(u=>e.paths.includes(u.path)),a=e.kind.encode(t,r,i),c=new Map(n.map(u=>[u.path,u])),d=[];for(const u of a.files){const s=c.get(u.path);s&&s.text===u.text||d.push({type:"write",path:u.path,text:u.text,baseVersion:s==null?void 0:s.version})}for(const u of a.deleted??[]){const s=c.get(u);s&&d.push({type:"delete",path:u,baseVersion:s.version})}return d}function de(e,t){try{return JSON.parse(Te(e))}catch{return t}}const k=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),v=(...e)=>t=>{const n=t.toLowerCase();return e.some(i=>n.endsWith(i.toLowerCase()))};function I(e){return V({id:e.id,label:e.label,labelKey:e.labelKey,icon:e.icon,editor:e.editor,match:e.match,select:t=>{if(Array.isArray(t))return t;const n=k(t)?t[e.property]:void 0;return Array.isArray(n)?n:[]},assign:(t,n)=>Array.isArray(t)?n:k(t)&&!(e.property in t)&&n.length===0?t:{...k(t)?t:{},[e.property]:n},arrayKey:e.itemKey?()=>e.itemKey:void 0})}function B(e){const t=I(e);return{...t,decode:(n,i)=>t.decode(n,i).map((r,a)=>e.toItem(r,a)),encode:(n,i,r)=>t.encode(n.map(a=>e.fromItem(a)),i,r)}}function G(e){return V({...e,select:t=>k(t)?t:{},assign:(t,n)=>n})}const Le=/^(.*)\.([a-z]{2,3}(?:-[A-Za-z]{2,4})?)\.i18n\.json$/i,Ce=e=>{const t=Le.exec(e);return t?{group:t[1],locale:t[2]}:null},R=e=>k(e)&&Object.values(e).every(t=>typeof t=="string");function fe(e){if(k(e)){for(const t of["translations","keys"])if(t in e){if(R(e[t]))return e[t];throw new Error(`"${t}" is not a flat map of texts`)}if(R(e))return e}throw new Error("no translations in this file")}function U(e,t){return k(e)?k(e.translations)?{...e,translations:t}:k(e.keys)?{...e,keys:t}:R(e)?t:{...e,translations:t}:{translations:t}}function ue(e={}){const t=e.parse??Ce,n=e.pathFor??((i,r)=>`${i}.${r}.i18n.json`);return{id:e.id??"i18n",label:e.label??"Translations",labelKey:e.labelKey??"devStudio.kind.i18n",icon:"globe",editor:"i18n",match:i=>t(i)!==null,group:i=>{var r;return((r=t(i))==null?void 0:r.group)??i},decode(i){const r={};for(const a of i){const c=t(a.path);c&&(r[c.locale]={...fe(K(a.text).value)})}return r},encode(i,r){const a=new Map;let c="";for(const o of r){const l=t(o.path);l&&(a.set(l.locale,o),c=l.group)}const d=a.get("en")??r[0],u=[];for(const[o,l]of Object.entries(i)){const f=a.get(o);if(f){const g=K(f.text).value;u.push({path:f.path,text:q(f.text,U(g,l))});continue}const h=n(c||j((d==null?void 0:d.path)??"module"),o);if(d){const g=K(d.text).value,p=k(g)&&"locale"in g?{...g,locale:o}:g;u.push({path:h,text:w(U(p,l),P(d.text))})}else u.push({path:h,text:w({locale:o,translations:l})})}const s=[...a.entries()].filter(([o])=>!(o in i)).map(([,o])=>o.path);return{files:u,deleted:s}}}}const E=e=>JSON.parse(JSON.stringify(e));function Re(e){const t=e.revisions!==!1;let n=0;const i=e.workspaces.map(s=>({meta:{id:s.id,label:s.label,description:s.description,icon:s.icon,readOnly:s.readOnly},packages:new Map((s.packages??[]).map(o=>[o.id,{...o,workspaceId:s.id}])),modules:new Map(s.modules.map(o=>[o.id,{...o,files:new Map(Object.entries(o.files).map(([l,f])=>[l,{text:f,version:++n}])),revisions:[]}]))}));let r=(e.templates??[]).map(s=>E(s));const a=s=>{const o=i.find(l=>l.meta.id===s);if(!o)throw new Error(`Unknown workspace "${s}"`);return o},c=s=>{const o=a(s.workspaceId).modules.get(s.id);if(!o)throw new Error(`Unknown module "${s.id}"`);return o},d=(s,o)=>({workspaceId:s,id:o.id,packageId:o.packageId,label:o.label??o.id,description:o.description,icon:o.icon,version:o.version,readOnly:o.readOnly||a(s).meta.readOnly,files:[...o.files.keys()].sort()}),u=(s,o)=>({path:s,text:o.text,version:String(o.version)});return{async listWorkspaces(){return i.map(s=>({...s.meta}))},async listModules(s){return[...a(s).modules.values()].map(l=>d(s,l))},async listPackages(s){const o=a(s),l=[...o.packages.values()],f=[...new Set([...o.modules.values()].map(h=>h.packageId).filter(Boolean))].filter(h=>!o.packages.has(h)).map(h=>({id:h,workspaceId:s,label:h,derived:!0}));return[...l,...f]},async readModule(s){return[...c(s).files.entries()].map(([l,f])=>u(l,f))},async writeModule(s,o){const l=c(s);if(l.readOnly||a(s.workspaceId).meta.readOnly)throw new Error(`Module "${s.id}" is read-only`);const f=o.filter(p=>p.baseVersion!==void 0).filter(p=>{const m=l.files.get(p.path);return m?String(m.version)!==p.baseVersion:!1}).map(p=>{var m;return{path:p.path,currentVersion:String((m=l.files.get(p.path))==null?void 0:m.version)}});if(f.length>0)return{ok:!1,conflicts:f};let h;if(t){const p={};for(const[m,b]of l.files)p[m]=b.text;h=`r${++n}`,l.revisions.unshift({id:h,timestamp:Date.now(),label:h,summary:o.map(m=>`${m.type} ${m.path}`).join(", "),files:p})}const g={};for(const p of o)if(p.type==="delete")l.files.delete(p.path);else{const m=++n;l.files.set(p.path,{text:p.text,version:m}),g[p.path]=String(m)}return{ok:!0,versions:g,revision:h}},async createModule(s){const o=a(s.workspaceId);if(o.meta.readOnly)throw new Error(`Workspace "${s.workspaceId}" is read-only`);if(o.modules.has(s.id))throw new Error(`Module "${s.id}" already exists`);const l={id:s.id,packageId:s.packageId,files:new Map(s.files.map(f=>[f.path,{text:f.text,version:++n}])),revisions:[]};return o.modules.set(s.id,l),d(s.workspaceId,l)},async deleteModule(s){const o=a(s.workspaceId);if(o.meta.readOnly)throw new Error(`Workspace "${s.workspaceId}" is read-only`);o.modules.delete(s.id)},async savePackage(s){return a(s.workspaceId).packages.set(s.id,{...s,derived:!1}),{...s,derived:!1}},async deletePackage(s){a(s.workspaceId).packages.delete(s.id)},async listTemplates(){return r.map(s=>E(s))},async saveTemplate(s,o){const l=(o==null?void 0:o.previousId)??s.id,f=E(s),h=r.findIndex(g=>g.id===l);return r=h>=0?r.map((g,p)=>p===h?f:g):[...r,f],E(f)},async deleteTemplate(s){r=r.filter(o=>o.id!==s)},async listRevisions(s,o){return c(s).revisions.filter(l=>!o||o in l.files).map(({files:l,...f})=>({...f,...o?{path:o}:{}}))},async readRevision(s,o,l){const f=c(s).revisions.find(h=>h.id===o);if(!f)throw new Error(`Unknown revision "${o}"`);return l?f.files[l]??"":JSON.stringify(f.files,null,2)},async rollback(s,o,l){const f=c(s),h=f.revisions.find(p=>p.id===o);if(!h)throw new Error(`Unknown revision "${o}"`);const g=l?{[l]:h.files[l]}:h.files;if(!l)for(const p of[...f.files.keys()])p in g||f.files.delete(p);for(const[p,m]of Object.entries(g))m!==void 0&&f.files.set(p,{text:m,version:++n})},snapshot(){return{workspaces:i.map(s=>({...s.meta,packages:[...s.packages.values()].map(({workspaceId:o,...l})=>l),modules:[...s.modules.values()].map(o=>({id:o.id,packageId:o.packageId,label:o.label,description:o.description,icon:o.icon,version:o.version,readOnly:o.readOnly,files:Object.fromEntries([...o.files.entries()].map(([l,f])=>[l,f.text]))}))})),templates:r.map(s=>E(s)),revisions:t}}}}function Ue(e){return e}function D(e,t){if(!t||e===void 0||e===null)return!0;if(t.enum&&!t.enum.includes(e))return!1;switch(t.type){case"string":return typeof e=="string";case"number":return typeof e=="number";case"integer":return Number.isInteger(e);case"boolean":return typeof e=="boolean";case"array":return Array.isArray(e)&&(!t.items||e.every(n=>D(n,t.items)));case"object":{if(typeof e!="object"||Array.isArray(e))return!1;const n=t.properties;return!n||Object.entries(e).every(([i,r])=>i in n&&D(r,n[i]))}default:return!0}}function We(e,t){var c;const n=(e.fields??[]).map(d=>d.name),i=(c=e.schema)==null?void 0:c.properties;if(!e.schema||!i)return{section:e,keys:n};const r=Object.entries(i).filter(([d,u])=>!(d in t)||D(t[d],u)),a=r.map(([d])=>d);return{section:{...e,schema:{...e.schema,properties:Object.fromEntries(r),...e.schema.required?{required:e.schema.required.filter(d=>a.includes(d))}:{}}},keys:[...a,...n]}}function qe(e){var n;const t=new Set;for(const i of e){for(const r of Object.keys(((n=i.schema)==null?void 0:n.properties)??{}))t.add(r);for(const r of i.fields??[])t.add(r.name)}return t}function _e(e){return e.map(t=>{const n=t;return{name:String(n.tableName||n.name||"Entity"),columns:(Array.isArray(n.fields)?n.fields:[]).map(i=>({name:String(i.name??""),dataType:String(i.dataType??i.type??"string"),isPrimaryKey:!!i.isPrimaryKey,isForeignKey:!!(i.isForeignKey??i.foreignKey)}))}})}function ze(e){const t=e.manifest??{},n=String(t.displayName||t.packageName||"Module"),i=(e.views??[]).map(a=>({id:`view:${a.id}`,label:a.name,type:"view"})),r=(e.entities??[]).map(a=>{const c=String(a.name??"Entity");return{id:`entity:${c}`,label:c,type:"entity"}});return{roles:[{id:"admin",label:"Admin"},{id:"user",label:"User"}],actions:[{id:"view",label:"View"},{id:"create",label:"Create"},{id:"edit",label:"Edit"},{id:"delete",label:"Delete"}],resources:[{id:"module",label:n,type:"module",children:[...i.length?[{id:"views",label:"Views",type:"group",children:i}]:[],...r.length?[{id:"entities",label:"Entities",type:"group",children:r}]:[]]}],grants:{}}}const L=G({id:"manifest",label:"Manifest",labelKey:"devStudio.kind.manifest",icon:"file",editor:"manifest",match:v(".manifest.json")}),pe=I({id:"entities",label:"Entities",labelKey:"devStudio.kind.entities",icon:"database",editor:"entities",match:v(".entities.json"),property:"entities",itemKey:"name"}),me=ue();function he(e,t){const n=e,i=typeof e=="object"&&e!==null&&typeof n.id=="string";return{key:i?n.id:`#${t}`,label:i&&n.name||(i?n.id:`#${t+1}`),...i?{definition:n}:{rawReason:"no id"},source:e}}const ye=B({id:"views",label:"Views",labelKey:"devStudio.kind.views",icon:"grid",editor:"views",match:v(".views.json"),property:"views",itemKey:"id",toItem:(e,t)=>he(e,t),fromItem:e=>e.definition??e.source}),ge=B({id:"workflows",label:"Workflows",labelKey:"devStudio.kind.workflows",icon:"git-branch",editor:"workflows",match:v(".workflows.json"),property:"workflows",itemKey:"id",toItem:(e,t)=>he(e,t),fromItem:e=>e.definition??e.source}),be=I({id:"dataSources",label:"Data sources",labelKey:"devStudio.kind.dataSources",icon:"database",editor:"dataSources",match:v(".datasources.json"),property:"dataSources",itemKey:"key"}),we=G({id:"rbac",label:"Access",labelKey:"devStudio.kind.rbac",icon:"shield",editor:"rbac",match:v(".rbac.json")}),ke=I({id:"hooks",label:"Lifecycle hooks",labelKey:"devStudio.kind.hooks",icon:"zap",editor:"hooks",match:v(".hooks.json"),property:"bindings",itemKey:"id"}),ve=[L,pe,me,ye,ge,be,we,ke];function W(e){return e.normalize("NFKD").replace(/[̀-ͯ]/g,"").replace(/ł/g,"l").replace(/Ł/g,"L").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"module"}const X=e=>{const t=e.find(n=>L.match(n.path));return t?de(t.text,void 0):void 0};function $e(e){const t=e.find(n=>L.match(n.path));return t?j(t.path).replace(/\.manifest\.json$/i,""):"module"}const Y=e=>Array.isArray(e.fields)?e.fields:[],Be={id:"native",kinds:ve,locales:["en","pl","de","fr","es","uk"],requiredLocales:["en"],moduleId:e=>{const t=X(e),n=(t==null?void 0:t.id)??(t==null?void 0:t.packageName);return typeof n=="string"?n:void 0},validateModule:({files:e})=>{const t=X(e);return t?["id","name","version"].filter(n=>typeof t[n]!="string"||!t[n]).map(n=>({severity:"error",code:"manifest.required",message:`The manifest needs "${n}".`,messageKey:"devStudio.issue.manifestRequired",params:{field:n},pointer:`/${n}`})):[{severity:"error",code:"manifest.missing",message:"The module has no manifest.",messageKey:"devStudio.issue.manifestMissing"}]},newFile:(e,{files:t})=>{const n=$e(t),r={entities:["entities.json",{entities:[]}],views:["views.json",{views:[]}],workflows:["workflows.json",{workflows:[]}],dataSources:["datasources.json",{dataSources:[]}],rbac:["rbac.json",{roles:[],actions:[],resources:[],grants:{}}],hooks:["hooks.json",{bindings:[]}]}[e];return r?{path:`${n}.${r[0]}`,text:w(r[1])}:void 0},generateModule:async(e,{existingIds:t})=>{let n=W(e.name);for(let r=2;t.has(n);r++)n=`${W(e.name)}-${r}`;const i=[{path:`${n}.manifest.json`,text:w({id:n,name:e.name,version:"1.0.0",...e.description?{description:e.description}:{},...e.icon?{icon:e.icon}:{},...e.packageId?{category:e.packageId}:{}})},{path:`${n}.entities.json`,text:w({entities:e.entities})}];for(const r of e.locales){const a={"module.displayName":e.name};for(const c of e.entities){const d=String(c.name??"");a[`entity.${d}.displayName`]=d;for(const u of Y(c))a[`field.${d}.${String(u.name)}.label`]=String(u.name)}i.push({path:`${n}.${r}.i18n.json`,text:w({locale:r,translations:a})})}if(e.views){const r=e.entities.map(a=>{const c=String(a.name??"Item");return{id:`${c}List`,name:`${c} list`,kind:"grid",version:2,columns:12,dataSources:[{key:"rows",type:"entity",entity:c,autoLoad:!0}],rows:[{id:"r1",cells:[{id:"grid",controlType:"dataGrid",colSpan:12,props:{columns:Y(a).map(d=>({field:String(d.name),header:String(d.name)}))},bindings:{data:{source:"rows",field:""}}}]}]}});i.push({path:`${n}.views.json`,text:w({views:r})})}if(e.permissions){const r={roles:[{id:"viewer",label:"Viewer"},{id:"editor",label:"Editor"},{id:"admin",label:"Admin"}],actions:[{id:"view",label:"View"},{id:"edit",label:"Edit"},{id:"delete",label:"Delete"}],resources:e.entities.map(a=>({id:`entity:${String(a.name)}`,label:String(a.name),type:"entity"})),grants:{}};i.push({path:`${n}.rbac.json`,text:w(r)})}return{id:n,packageId:e.packageId,files:i}}};exports.arrayFileKind=I;exports.buildDocuments=Pe;exports.createMemoryStudioProvider=Re;exports.defineManifestSection=Ue;exports.deriveDefaultRbac=ze;exports.detectJsonTextFormat=P;exports.encodeDocument=Ve;exports.endsWithAny=v;exports.entitiesToSchemas=_e;exports.fileName=j;exports.fitManifestSection=We;exports.i18nFileKind=ue;exports.itemsFileKind=B;exports.jsonFallbackKind=T;exports.jsonFileKind=V;exports.jsonValueFitsSchema=D;exports.jsonValuesEqual=x;exports.keepTextFormat=ee;exports.manifestSectionKeys=qe;exports.modulePrefix=$e;exports.nativeDataSourcesKind=be;exports.nativeEntitiesKind=pe;exports.nativeFileKinds=ve;exports.nativeHooksKind=ke;exports.nativeI18nKind=me;exports.nativeManifestKind=L;exports.nativeRbacKind=we;exports.nativeStudioPreset=Be;exports.nativeViewsKind=ye;exports.nativeWorkflowsKind=ge;exports.objectFileKind=G;exports.parseJsonText=K;exports.patchJsonText=q;exports.patchJsonTextDetailed=te;exports.readTranslations=fe;exports.resolveFileKind=le;exports.safeJson=de;exports.slugifyModuleId=W;exports.stringifyJsonText=w;exports.textFallbackKind=J;exports.writeTranslations=U;
|