From c237fbef07894af8902210cf3d3cd7d64533f014 Mon Sep 17 00:00:00 2001 From: Isaac Roberts <119639439+madebyisaacr@users.noreply.github.com> Date: Wed, 11 Feb 2026 13:38:46 -0500 Subject: [PATCH 1/2] Inject framer-plugin-packed.txt file into plugin.zip --- packages/plugin-tools/src/lib.test.ts | 19 +++++++++++++++++++ packages/plugin-tools/src/lib.ts | 1 + 2 files changed, 20 insertions(+) diff --git a/packages/plugin-tools/src/lib.test.ts b/packages/plugin-tools/src/lib.test.ts index 62e667cce..a3c04c29b 100644 --- a/packages/plugin-tools/src/lib.test.ts +++ b/packages/plugin-tools/src/lib.test.ts @@ -104,9 +104,28 @@ 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("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..19116d9b7 100644 --- a/packages/plugin-tools/src/lib.ts +++ b/packages/plugin-tools/src/lib.ts @@ -50,6 +50,7 @@ export function zipPluginDistribution(options: ZipPluginDistributionOptions): st const zip = new AdmZip() zip.addLocalFolder(distPath) + zip.addFile("framer-plugin-packed.txt", Buffer.from("true", "utf-8")) zip.writeZip(zipFilePath) return zipFilePath From 45261025679793b12ca3b522f63339edc2f50aea Mon Sep 17 00:00:00 2001 From: Isaac Roberts <119639439+madebyisaacr@users.noreply.github.com> Date: Wed, 11 Feb 2026 13:54:48 -0500 Subject: [PATCH 2/2] Overwrite existing file --- packages/plugin-tools/src/lib.test.ts | 18 ++++++++++++++++++ packages/plugin-tools/src/lib.ts | 5 ++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/plugin-tools/src/lib.test.ts b/packages/plugin-tools/src/lib.test.ts index a3c04c29b..8caccb1ec 100644 --- a/packages/plugin-tools/src/lib.test.ts +++ b/packages/plugin-tools/src/lib.test.ts @@ -128,6 +128,24 @@ describe("zipPluginDistribution", () => { 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", () => { expect(() => zipPluginDistribution({ diff --git a/packages/plugin-tools/src/lib.ts b/packages/plugin-tools/src/lib.ts index 19116d9b7..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,7 +52,8 @@ export function zipPluginDistribution(options: ZipPluginDistributionOptions): st const zip = new AdmZip() zip.addLocalFolder(distPath) - zip.addFile("framer-plugin-packed.txt", Buffer.from("true", "utf-8")) + zip.deleteFile(markerFileName) + zip.addFile(markerFileName, Buffer.from("true", "utf-8")) zip.writeZip(zipFilePath) return zipFilePath