Skip to content

Commit 5d75bc0

Browse files
authored
fix: manifest type issues, react issues (#14)
1 parent 7e9fb46 commit 5d75bc0

File tree

18 files changed

+128
-117
lines changed

18 files changed

+128
-117
lines changed

index.js

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,25 @@ async function init() {
246246
);
247247
}
248248

249+
if (framework === "svelte") {
250+
preOrderDirectoryTraverse(
251+
root,
252+
() => {},
253+
(filepath) => {
254+
// update manifest html files
255+
if (path.basename(filepath).startsWith("manifest")) {
256+
const content = fs.readFileSync(filepath, "utf8").replace(
257+
`import pkg from '../package.json';`,
258+
`import { readFileSync } from "fs";
259+
const pkg = JSON.parse(readFileSync(new URL("./../package.json", import.meta.url).pathname, "utf-8"));`
260+
);
261+
262+
fs.writeFileSync(filepath, content);
263+
}
264+
}
265+
);
266+
}
267+
249268
if (manifestVersion === "2+3") {
250269
preOrderDirectoryTraverse(
251270
root,
@@ -254,25 +273,19 @@ async function init() {
254273
if (path.basename(filepath).startsWith("vite.config")) {
255274
const content = fs
256275
.readFileSync(filepath, "utf8")
276+
.replace(
277+
`import { defineConfig } from "vite";`,
278+
`import { defineConfig, loadEnv } from "vite";`
279+
)
257280
.replace(
258281
"export default defineConfig(() => {",
259282
`export default defineConfig(({ mode }) => {
260-
const configEnv = loadEnv(mode, process.cwd(), "");
261-
262-
const manifest = configEnv.MANIFEST_VERSION === "3" ? ManifestV3 : ManifestV2;
283+
const env = loadEnv(mode, process.cwd(), "");
263284
`
264285
)
265286
.replace(
266-
`import manifest from "./src/manifest";`,
267-
`import { ManifestV2, ManifestV3 } from "./src/manifest";`
268-
)
269-
.replace(
270-
`import manifest from "./src/manifest.js";`,
271-
`import { ManifestV2, ManifestV3 } from "./src/manifest.js";`
272-
)
273-
.replace(
274-
`import { defineConfig } from "vite";`,
275-
`import { defineConfig, loadEnv } from "vite";`
287+
`getManifest()`,
288+
`getManifest(Number(env.MANIFEST_VERSION))`
276289
);
277290

278291
fs.writeFileSync(filepath, content);
@@ -304,7 +317,20 @@ async function init() {
304317
if (path.basename(filepath).startsWith("manifest")) {
305318
const content = fs
306319
.readFileSync(filepath, "utf8")
307-
.replace(/\.js/g, `.ts`);
320+
.replace(/\.js"/g, `.ts"`)
321+
.replace(/\.jsx"/g, `.tsx"`)
322+
.replace(
323+
`getManifest() {`,
324+
`getManifest(): ${
325+
manifestVersion === "2"
326+
? "chrome.runtime.ManifestV2"
327+
: "chrome.runtime.ManifestV3"
328+
} {`
329+
)
330+
.replace(
331+
`getManifest(manifestVersion) {`,
332+
`getManifest(manifestVersion: number): chrome.runtime.ManifestV2 | chrome.runtime.ManifestV3 {`
333+
);
308334

309335
fs.writeFileSync(filepath, content);
310336
}

template/config/manifestV2+3/src/manifest.js

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import pkg from "../package.json";
2+
13
const sharedManifest = {
24
content_scripts: [
35
{
@@ -34,27 +36,54 @@ const browserAction = {
3436
default_popup: "src/entries/popup/index.html",
3537
};
3638

37-
export const ManifestV2 = {
39+
const ManifestV2 = {
3840
...sharedManifest,
3941
background: {
4042
scripts: ["src/entries/background/script.js"],
4143
persistent: false,
4244
},
4345
browser_action: browserAction,
44-
manifest_version: 2,
4546
options_ui: {
4647
...sharedManifest.options_ui,
4748
chrome_style: false,
4849
},
4950
permissions: [...sharedManifest.permissions, "*://*/*"],
5051
};
5152

52-
export const ManifestV3 = {
53+
const ManifestV3 = {
5354
...sharedManifest,
5455
action: browserAction,
5556
background: {
5657
service_worker: "src/entries/background/serviceWorker.js",
5758
},
5859
host_permissions: ["*://*/*"],
59-
manifest_version: 3,
6060
};
61+
62+
export function getManifest(manifestVersion) {
63+
const manifest = {
64+
author: pkg.author,
65+
description: pkg.description,
66+
name: pkg.displayName ?? pkg.name,
67+
version: pkg.version,
68+
};
69+
70+
if (manifestVersion === 2) {
71+
return {
72+
...manifest,
73+
...ManifestV2,
74+
manifest_version: manifestVersion,
75+
};
76+
}
77+
78+
if (manifestVersion === 3) {
79+
return {
80+
...manifest,
81+
...ManifestV3,
82+
manifest_version: manifestVersion,
83+
};
84+
}
85+
86+
throw new Error(
87+
`Missing manifest definition for manifestVersion ${manifestVersion}`
88+
);
89+
}

template/config/manifestV2/src/manifest.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
export default {
1+
import pkg from "../package.json";
2+
3+
const manifest = {
24
background: {
35
scripts: ["src/entries/background/main.js"],
46
persistent: false,
@@ -30,11 +32,21 @@ export default {
3032
256: "icons/256.png",
3133
512: "icons/512.png",
3234
},
33-
manifest_version: 2,
3435
options_ui: {
3536
chrome_style: false,
3637
open_in_tab: true,
3738
page: "src/entries/options/index.html",
3839
},
3940
permissions: ["*://*/*"],
4041
};
42+
43+
export function getManifest() {
44+
return {
45+
author: pkg.author,
46+
description: pkg.description,
47+
name: pkg.displayName ?? pkg.name,
48+
version: pkg.version,
49+
manifest_version: 2,
50+
...manifest,
51+
};
52+
}

template/config/manifestV3/src/manifest.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
export default {
1+
import pkg from "../package.json";
2+
3+
const manifest = {
24
action: {
35
default_icon: {
46
16: "icons/16.png",
@@ -30,9 +32,19 @@ export default {
3032
256: "icons/256.png",
3133
512: "icons/512.png",
3234
},
33-
manifest_version: 3,
3435
options_ui: {
3536
page: "src/entries/options/index.html",
3637
open_in_tab: true,
3738
},
3839
};
40+
41+
export function getManifest() {
42+
return {
43+
author: pkg.author,
44+
description: pkg.description,
45+
name: pkg.displayName ?? pkg.name,
46+
version: pkg.version,
47+
manifest_version: 3,
48+
...manifest,
49+
};
50+
}

template/framework/preact-ts/src/components/PageContent.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { useState } from "preact/hooks";
22
import "./PageContent.css";
33
import logo from "~/assets/logo.svg";
4+
import type { ComponentChildren } from "preact";
45

5-
function PageHeader(props) {
6+
function PageContent(props: { children: ComponentChildren }) {
67
const imageUrl = new URL(logo, import.meta.url).href;
78

89
const [count, setCount] = useState(0);
@@ -18,4 +19,4 @@ function PageHeader(props) {
1819
);
1920
}
2021

21-
export default PageHeader;
22+
export default PageContent;

template/framework/preact-ts/vite.config.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,15 @@ import { defineConfig } from "vite";
22
import preact from "@preact/preset-vite";
33
import webExtension from "@samrum/vite-plugin-web-extension";
44
import path from "path";
5-
import manifest from "./src/manifest";
6-
import pkg from "./package.json";
5+
import { getManifest } from "./src/manifest";
76

87
// https://vitejs.dev/config/
98
export default defineConfig(() => {
109
return {
1110
plugins: [
1211
preact(),
1312
webExtension({
14-
manifest: {
15-
author: pkg.author,
16-
description: pkg.description,
17-
name: pkg.displayName ?? pkg.name,
18-
version: pkg.version,
19-
...manifest,
20-
},
13+
manifest: getManifest(),
2114
}),
2215
],
2316
resolve: {

template/framework/preact/vite.config.js

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,15 @@ import { defineConfig } from "vite";
22
import preact from "@preact/preset-vite";
33
import webExtension from "@samrum/vite-plugin-web-extension";
44
import path from "path";
5-
import manifest from "./src/manifest";
6-
import pkg from "./package.json";
5+
import { getManifest } from "./src/manifest";
76

87
// https://vitejs.dev/config/
98
export default defineConfig(() => {
109
return {
1110
plugins: [
1211
preact(),
1312
webExtension({
14-
manifest: {
15-
author: pkg.author,
16-
description: pkg.description,
17-
name: pkg.displayName ?? pkg.name,
18-
version: pkg.version,
19-
...manifest,
20-
},
13+
manifest: getManifest(),
2114
}),
2215
],
2316
resolve: {

template/framework/react-ts/src/components/PageContent.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { useState } from "react";
1+
import React, { useState } from "react";
22
import "./PageContent.css";
33
import logo from "~/assets/logo.svg";
44

5-
function PageContent(props) {
5+
function PageContent(props: { children: React.ReactNode}) {
66
const imageUrl = new URL(logo, import.meta.url).href;
77

88
const [count, setCount] = useState(0);

template/framework/react-ts/src/entries/enableDevHmr.js renamed to template/framework/react-ts/src/entries/enableDevHmr.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// @ts-nocheck
12
import RefreshRuntime from "/@react-refresh";
23

34
if (import.meta.hot) {

template/framework/react-ts/tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@
2020
"noEmit": true,
2121
"jsx": "react-jsx"
2222
},
23+
"exclude": ["enableDevHmr.ts"],
2324
"include": ["./src"]
2425
}

0 commit comments

Comments
 (0)