diff --git a/packages/plugin-tools/src/lib.test.ts b/packages/plugin-tools/src/lib.test.ts index 62e667cce..8caccb1ec 100644 --- a/packages/plugin-tools/src/lib.test.ts +++ b/packages/plugin-tools/src/lib.test.ts @@ -104,9 +104,46 @@ describe("zipPluginDistribution", () => { const entries = zip.getEntries().map(e => e.entryName) expect(entries).toContain("index.js") expect(entries).toContain("index.html") + expect(entries).toContain("framer-plugin-packed.txt") const jsContent = zip.readAsText("index.js") expect(jsContent).toBe("console.log('hello')") + + const packedContent = zip.readAsText("framer-plugin-packed.txt") + expect(packedContent).toBe("true") + }) + + it("injects framer-plugin-packed.txt with contents 'true'", () => { + const distDir = path.join(tmpDir, "dist") + fs.mkdirSync(distDir) + fs.writeFileSync(path.join(distDir, "index.js"), "") + + zipPluginDistribution({ + cwd: tmpDir, + distPath: "dist", + zipFileName: "plugin.zip", + }) + + const zip = new AdmZip(path.join(tmpDir, "plugin.zip")) + expect(zip.readAsText("framer-plugin-packed.txt")).toBe("true") + }) + + it("overwrites dist framer-plugin-packed.txt with injected marker", () => { + const distDir = path.join(tmpDir, "dist") + fs.mkdirSync(distDir) + fs.writeFileSync(path.join(distDir, "framer-plugin-packed.txt"), "false or custom") + fs.writeFileSync(path.join(distDir, "index.js"), "") + + zipPluginDistribution({ + cwd: tmpDir, + distPath: "dist", + zipFileName: "plugin.zip", + }) + + const zip = new AdmZip(path.join(tmpDir, "plugin.zip")) + const entriesWithSameName = zip.getEntries().filter(e => e.entryName === "framer-plugin-packed.txt") + expect(entriesWithSameName).toHaveLength(1) + expect(zip.readAsText("framer-plugin-packed.txt")).toBe("true") }) it("throws error when dist directory does not exist", () => { diff --git a/packages/plugin-tools/src/lib.ts b/packages/plugin-tools/src/lib.ts index cd2f86943..80f0b6509 100644 --- a/packages/plugin-tools/src/lib.ts +++ b/packages/plugin-tools/src/lib.ts @@ -3,6 +3,8 @@ import { exec } from "child_process" import fs from "fs" import path from "path" +const markerFileName = "framer-plugin-packed.txt" + /** * Naive package manager detection by checking for lock files in the current directory and parent directories. * @param cwd - The current working directory. @@ -50,6 +52,8 @@ export function zipPluginDistribution(options: ZipPluginDistributionOptions): st const zip = new AdmZip() zip.addLocalFolder(distPath) + zip.deleteFile(markerFileName) + zip.addFile(markerFileName, Buffer.from("true", "utf-8")) zip.writeZip(zipFilePath) return zipFilePath