import * as penpot from "#self"; import { writeFile, readFile } from 'fs/promises'; import { createWriteStream } from 'fs'; import { Writable } from "stream"; // console.log(penpot); (async function() { const context = penpot.createBuildContext(); { context.addFile({name: "Test File 1"}); context.addPage({name: "Foo Page"}) // Add image media const buffer = await readFile("./playground/sample.jpg"); const blob = new Blob([buffer], { type: 'image/jpeg' }); const mediaId = context.addFileMedia({ name: "avatar.jpg", width: 512, height: 512 }, blob); // Add image color asset const assetColorId = context.addLibraryColor({ name: "Avatar", opacity: 1, image: { ...context.getMediaAsImage(mediaId), keepAspectRatio: true } }); const boardId = context.addBoard({ name: "Foo Board", x: 0, y: 0, width: 500, height: 300, }) const fill = { fillColorRefId: assetColorId, fillColorRefFile: context.currentFileId, fillImage: { ...context.getMediaAsImage(mediaId), keepAspectRatio: true } }; context.addRect({ name: "Rect 1", x: 20, y: 20, width:100, height:200, fills: [fill] }); context.closeBoard(); context.closeFile(); } { let result = await penpot.exportAsBytes(context) await writeFile("sample-sync.zip", result); } // { // // Create a file stream to write the zip to // const output = createWriteStream('sample-stream.zip'); // // Wrap Node's stream in a WHATWG WritableStream // const writable = Writable.toWeb(output); // await penpot.exportStream(context, writable); // } })().catch((cause) => { console.error(cause); const innerCause = cause.cause; if (innerCause) { console.error("Inner cause:", innerCause); } process.exit(-1); }).finally(() => { process.exit(0); })