@reframejs/cli 0.1.3 → 0.1.4
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/dist/cli.js +10 -10
- package/dist/framer-source-export.js +1 -1
- package/package.json +2 -2
|
@@ -762,7 +762,7 @@ export default ${r};
|
|
|
762
762
|
`}async function sme(e){let t=[];try{t=await Tn.readdir(e,{withFileTypes:!0})}catch{return[]}let A=[];for(let r of t){let i=ni.join(e,r.name);r.isDirectory()?A.push(...await sme(i)):A.push(i)}return A}async function PeA(e){try{return JSON.parse(await Tn.readFile(e,"utf8"))}catch{return{}}}async function GeA(e,t){let A=(await sme(t)).filter(g=>/\.(?:tsx?|jsx?|css)$/i.test(g)),r=ni.join(e,"styles.css");await Tn.stat(r).catch(()=>null)&&A.push(r);let i=new Map;for(let g of A)i.set(g,await Tn.readFile(g,"utf8"));let n=new Set([...i.values()].flatMap(g=>[...eme(g)])),s=ni.join(e,"meta","assets.json"),a=await PeA(s),o=new Map,l=[],u=new Set(Object.values(a));await Promise.all([...n].map(async g=>{let p=a[g];if(p&&await Tn.stat(ni.join(e,p)).catch(()=>null)){o.set(g,p);return}try{let I=await fetch(g,{signal:AbortSignal.timeout(3e4)});if(!I.ok)throw new Error(`HTTP ${I.status}`);let d=I.headers.get("content-type")||"",B=keA(g,d),f=beA(g,d),_=ni.posix.join("assets",B,f);if(u.has(_)){let S=ni.posix.extname(f),D=S?f.slice(0,-S.length):f,Q=IeA.createHash("sha1").update(g).digest("hex").slice(0,8);f=`${D}-${Q}${S}`,_=ni.posix.join("assets",B,f)}u.add(_);let m=ni.join(e,..._.split("/"));await Tn.mkdir(ni.dirname(m),{recursive:!0}),await Tn.writeFile(m,new Uint8Array(await I.arrayBuffer())),o.set(g,_)}catch(I){l.push(`asset ${g}: ${I.message}`)}}));let c={...a};for(let[g,p]of o)c[g]=p;await Tn.mkdir(ni.dirname(s),{recursive:!0}),await Tn.writeFile(s,`${JSON.stringify(c,null,2)}
|
|
763
763
|
`,"utf8");for(let[g,p]of i){let I=p;/\.css$/i.test(g)?I=[...o].reduce((d,[B,f])=>{let _=ni.posix.relative(ni.dirname(g).replaceAll("\\","/"),ni.join(e,f).replaceAll("\\","/")),m=_.startsWith(".")?_:`./${_}`;return d.split(B).join(m)},I):[...eme(I)].some(d=>o.has(d))&&(I=NeA(I,new Map([...o].map(([d,B])=>[d,ni.posix.relative(ni.dirname(g).replaceAll("\\","/"),ni.join(e,B).replaceAll("\\","/"))])))),I!==p&&await Tn.writeFile(g,I,"utf8")}return{assets:o.size,warnings:l}}async function ame(e,t,{component:A,quiet:r=!1,docsUrl:i=""}={}){let n=pT(e),s=CT(n,A);if(!s)throw new Error(`Component ${A||"(none)"} was not found in the component catalog.`);if(!s.moduleUrl)throw new Error(`${s.name} does not expose a generated module URL. Use the canvas fallback export for this component.`);let a=ni.resolve(t),o=ni.join(a,"components");await Tn.mkdir(o,{recursive:!0});let l={projectId:n.project?.id||"",fullFramerProjectId:n.project?.id||"",projectName:n.project?.name||"",components:{[s.slug]:s.moduleUrl},componentBreakpoints:_eA(s),breakpoints:k7,tokens:[],locales:[],framerWebPages:[],externalPackages:[],allExternal:!0,jsx:!0},u=await meA(a),c,g;try{let B=()=>deA({config:l,cwd:o,watch:!1,metafile:!1});({result:c,buildContext:g}=await(r?yeA(B):B()))}finally{await g?.dispose?.(),await QeA(u)}let p=ni.join(o,`${s.slug}.jsx`),I=await Tn.readFile(p,"utf8");await Tn.writeFile(p,`${nme(s,i)}
|
|
764
764
|
${I}`,"utf8"),await Tn.writeFile(ni.join(o,`${s.slug}.tsx`),LeA(s,I,i),"utf8"),await $_e(ni.join(o,"styles.css"),ni.join(a,"styles.css")),await $_e(ni.join(o,"tokens.css"),ni.join(a,"tokens.css")),await Tn.mkdir(ni.join(a,"meta"),{recursive:!0}),await Tn.writeFile(ni.join(a,"meta","component-catalog.json"),`${JSON.stringify(n,null,2)}
|
|
765
|
-
`,"utf8");let d=await GeA(a,o);return{outputDir:a,component:s,result:c,...d}}var ome=UeA(ReA),YeA=new Set(["create-app","sync","module","serve"]);function b7(e){if(!e)throw new z7("snapshot or manifest path is required");return e}async function x7(e){let t=Di.resolve(e);return JSON.parse(await Jn.readFile(t,"utf8"))}function lme(e=[]){if(e.length!==0){console.log(`Warnings: ${e.length}`);for(let t of e.slice(0,12))console.log(` - ${t}`)}}async function JeA(e,t){let A=await x7(e);if(A.schemaVersion!==1)throw new Error(`Unsupported snapshot schema: ${A.schemaVersion??"missing"}`);if(!A.selectionOnly||!Array.isArray(A.selection))throw new Error("This snapshot contains a full project. Use the component module workflow or select a component in Framer and export a new selection snapshot.");let r=await Dhe(A,Di.resolve(t.out),{downloadAssets:t.downloadAssets});console.log(`Canvas fallback export complete: ${r.outputDir}`),console.log(`Components: ${r.components}; assets: ${r.assets} (${r.downloadedAssets} downloaded)`),lme(r.warnings)}function qeA(){return{private:!0,version:"0.0.0",type:"module",scripts:{dev:"vite",typecheck:"tsc --noEmit",build:"tsc --noEmit && vite build",preview:"vite preview"},dependencies:{react:"^19.0.0","react-dom":"^19.0.0",unframer:"npm:@reframejs/unframer@4.2.0-reframe.
|
|
765
|
+
`,"utf8");let d=await GeA(a,o);return{outputDir:a,component:s,result:c,...d}}var ome=UeA(ReA),YeA=new Set(["create-app","sync","module","serve"]);function b7(e){if(!e)throw new z7("snapshot or manifest path is required");return e}async function x7(e){let t=Di.resolve(e);return JSON.parse(await Jn.readFile(t,"utf8"))}function lme(e=[]){if(e.length!==0){console.log(`Warnings: ${e.length}`);for(let t of e.slice(0,12))console.log(` - ${t}`)}}async function JeA(e,t){let A=await x7(e);if(A.schemaVersion!==1)throw new Error(`Unsupported snapshot schema: ${A.schemaVersion??"missing"}`);if(!A.selectionOnly||!Array.isArray(A.selection))throw new Error("This snapshot contains a full project. Use the component module workflow or select a component in Framer and export a new selection snapshot.");let r=await Dhe(A,Di.resolve(t.out),{downloadAssets:t.downloadAssets});console.log(`Canvas fallback export complete: ${r.outputDir}`),console.log(`Components: ${r.components}; assets: ${r.assets} (${r.downloadedAssets} downloaded)`),lme(r.warnings)}function qeA(){return{private:!0,version:"0.0.0",type:"module",scripts:{dev:"vite",typecheck:"tsc --noEmit",build:"tsc --noEmit && vite build",preview:"vite preview"},dependencies:{react:"^19.0.0","react-dom":"^19.0.0",unframer:"npm:@reframejs/unframer@4.2.0-reframe.1"},devDependencies:{"@vitejs/plugin-react":"^5.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0",typescript:"^5.9.3",vite:"^7.3.6"}}}async function OeA(e){let t=Di.join(e,"package.json"),A=qeA(),r={};try{r=JSON.parse(await Jn.readFile(t,"utf8"))}catch{}let i={...A,...r,type:"module",scripts:{...r.scripts,...A.scripts},dependencies:{...A.dependencies,...r.dependencies},devDependencies:{...A.devDependencies,...r.devDependencies}};await Jn.writeFile(t,`${JSON.stringify(i,null,2)}
|
|
766
766
|
`,"utf8")}async function HeA(e,t){try{await Jn.readFile(e,"utf8")===t&&await Jn.rm(e)}catch{}}async function Ld(e,t){try{await Jn.access(e)}catch{await Jn.mkdir(Di.dirname(e),{recursive:!0}),await Jn.writeFile(e,t,"utf8")}}async function jeA(e,t){await Jn.mkdir(e,{recursive:!0}),await OeA(e),await Ld(Di.join(e,".gitignore"),`node_modules/
|
|
767
767
|
dist/
|
|
768
768
|
`),await HeA(Di.join(e,"vite.config.js"),`import { defineConfig } from 'vite';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reframejs/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Export selected Framer components into readable, AI-friendly React and CSS source.",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"prettier": "^3.6.2",
|
|
57
57
|
"react": "^19.2.0",
|
|
58
58
|
"react-dom": "^19.2.0",
|
|
59
|
-
"@reframejs/unframer": "4.2.0-reframe.
|
|
59
|
+
"@reframejs/unframer": "4.2.0-reframe.1"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"javascript-obfuscator": "^4.1.1",
|