UNPKG

intlayer-editor

Version:

Integrate the Intlayer visual editor into your Intlayer projects, enabling CMS-like content management with multilingual support.

9 lines (7 loc) 4.52 kB
var e=e=>e.trim(),t=t=>t.split(`,`).map(e).filter(Boolean).map(t=>{let n=/^type\s+/.test(t),r=t.replace(/^type\s+/,``).trim().split(/\s+as\s+/);return{name:e(r[0]),alias:r[1]?e(r[1]):void 0,isType:n}}),n=e=>`{ ${e.map(e=>e.alias?`${e.name} as ${e.alias}`:e.name).join(`, `)} }`,r=n=>{let r=[],i=/^import\s+(type\s+)?(?:([^\s{,;"'`]+)\s*,?\s*)?(?:\{([^}]*)\}\s*,?\s*)?(?:from\s+["']([^"']+)["'])?(?:\s*["']([^"']+)["'])?;?/gm,a=i.exec(n);for(;a!==null;){let o=!!a[1],s=a[2]?e(a[2]):void 0,c=a[3]??``,l=a[4]??a[5]??``,u=!s&&!c&&!o&&!!l,d=c?t(c):[];r.push({raw:a[0],start:a.index,end:a.index+a[0].length,source:l,defaultImport:s,named:d,isSideEffect:u,isTypeOnly:o}),a=i.exec(n)}return r},i=e=>{let t=new Map;for(let n of e)if(n.isTypeOnly)for(let e of n.named)t.has(e.name)||t.set(e.name,n.source);else for(let e of n.named)e.isType&&!t.has(e.name)&&t.set(e.name,n.source);return t},a=e=>{if(e.isTypeOnly)return null;let t=e.named.filter(e=>!e.isType);return!t.length&&!e.defaultImport&&!e.isSideEffect?null:e.isSideEffect?`import '${e.source}';`:e.defaultImport&&t.length?`import ${e.defaultImport}, ${n(t)} from '${e.source}';`:e.defaultImport?`import ${e.defaultImport} from '${e.source}';`:`import ${n(t)} from '${e.source}';`},o=e=>{if(e.isTypeOnly)return null;let t=e.named.filter(e=>!e.isType),r=!!e.defaultImport,i=t.length>0;return e.isSideEffect?`require('${e.source}');`:r&&i?`const ${n([{name:`default`,alias:e.defaultImport},...t])} = require('${e.source}');`:r&&!i?`const ${e.defaultImport} = require('${e.source}');`:!r&&i?`const ${n(t)} = require('${e.source}');`:null},s=(e,t)=>{let n=e.split(` `),r=new Map,i=[];for(let e=0;e<n.length;e++){let a=n[e],o=a.match(/^(\s*(?:export\s+)?(?:const|let|var)\s+\w+)\s*:\s*([A-Z]\w*)\s*=/);if(o){let e=o[2],n=t.get(e);n&&r.set(i.length,`/** @type {import('${n}').${e}} */`),a=a.replace(/^(\s*(?:export\s+)?(?:const|let|var)\s+\w+)\s*:\s*[A-Z][\w<>, ]*?\s*=/,`$1 =`)}a=a.replace(/^(\s*(?:export\s+)?(?:const|let|var)\s+\w+)\s*:\s*\w+<[^>]*>\s*=/,`$1 =`),a=a.replace(/\}\s*:\s*\w[\w<>, .]*\s*\)/,`})`),a=a.replace(/\)\s*:\s*\w[\w<>, .]*\s*(=>|\{)/,`) $1`),a=a.replace(/\s+satisfies\s+\w[\w<>, .]*\s*;/,`;`),a=a.replace(/\s+as\s+(?!const\b)\w[\w<>, .]*/,``),a=a.replace(/(<\w+>)\(/,`(`),a=a.replace(/(\w+)<[A-Z]\w*(?:,\s*[A-Z]\w*)*>\(/g,`$1(`),a=a.replace(/(\w)\s*:\s*[A-Z]\w*(\))/g,`$1$2`),i.push(a)}let a=[...r.entries()].sort((e,t)=>t[0]-e[0]);for(let[e,t]of a){let n=(i[e]??``).match(/^(\s*)/)?.[1]??``;i.splice(e,0,n+t)}return{code:i.join(` `),jsdocInserts:r}},c=r=>{let i=r.split(` `),a=[],o=null,s=[],c=[];for(let r=0;r<i.length;r++){let l=i[r],u=l.match(/^(\s*)export\s+default\s+(.+?);?\s*$/);if(u){o=e(u[2]);continue}let d=l.match(/^(\s*)export\s+(const|let|var)\s+(\w+)/);if(d){let e=d[3];a.push({localName:e,exportedName:e}),c.push(l.replace(/^(\s*)export\s+/,`$1`));continue}let f=l.match(/^(\s*)export\s+(?:async\s+)?function\s+(\w+)/);if(f){let e=f[2];a.push({localName:e,exportedName:e}),c.push(l.replace(/^(\s*)export\s+/,`$1`));continue}let p=l.match(/^(\s*)export\s+\{([^}]+)\}\s+from\s+["']([^"']+)["'];?\s*$/);if(p){let e=t(p[2]),r=p[3],i=e.filter(e=>!e.isType);if(i.length){let e=i.map(e=>e.name);s.push(`const ${n(e.map(e=>({name:e})))} = require('${r}');`);for(let e of i)a.push({localName:e.name,exportedName:e.alias??e.name})}continue}let m=l.match(/^(\s*)export\s+\{([^}]+)\};?\s*$/);if(m){let e=t(m[2]).filter(e=>!e.isType);for(let t of e)a.push({localName:t.name,exportedName:t.alias??t.name});continue}c.push(l)}let l=s.length?[...s,``,...c]:c;if(o!==null&&a.length===0)l.push(`module.exports = ${o};`);else if(o!==null&&a.length>0){let e=a.map(e=>e.localName===e.exportedName?e.localName:`${e.exportedName}: ${e.localName}`);l.push(`module.exports = { default: ${o}, ${e.join(`, `)} };`)}else if(a.length>0){let e=a.map(e=>e.localName===e.exportedName?e.localName:`${e.exportedName}: ${e.localName}`);l.push(`module.exports = { ${e.join(`, `)} };`)}return l.join(` `)},l=(e,t)=>{let n=r(e),l=i(n),u=e,d=[...n].sort((e,t)=>t.start-e.start);for(let e of d){let n=(t===`esm`?a(e):o(e))??``;u=u.slice(0,e.start)+n+u.slice(e.end)}return u=u.replace(/\n{3,}/g,` `),u=s(u,l).code,t===`commonjs`&&(u=c(u)),u=u.replace(/\n{3,}/g,` `),u=u.replace(/^\n+/,``).replace(/\n+$/,``),u},u=(e,t)=>t===`esm`?e.replace(/\.tsx$/,`.jsx`).replace(/\.ts$/,`.mjs`):e.replace(/\.tsx$/,`.jsx`).replace(/\.ts$/,`.cjs`),d=(e,t)=>t===`typescript`?e:e===`tsx`?`jsx`:e===`typescript`?`javascript`:e;export{u as deriveFileName,d as deriveLanguage,l as transformCode};