mirror of
https://github.com/penpot/penpot.git
synced 2025-05-24 17:06:13 +02:00
88 lines
1.9 KiB
JavaScript
88 lines
1.9 KiB
JavaScript
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);
|
|
})
|