Skip to content

Commit 6fabca3

Browse files
feat(indiekit): maskable app icon
1 parent 7bc22c6 commit 6fabca3

File tree

4 files changed

+25
-9
lines changed

4 files changed

+25
-9
lines changed

packages/indiekit/lib/controllers/assets.js

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
import { appIcon, scripts, styles } from "@indiekit/frontend";
22

3-
export const getAppIcon = async (request, response) => {
4-
const { size } = request.params;
3+
export const getAppIcon = async (request, response, next) => {
4+
const { purpose, size } = request.params;
55
const { themeColor } = request.app.locals.application;
6-
const png = await appIcon(themeColor, Number(size));
7-
return response.type("image/png").send(png).end();
6+
7+
try {
8+
const png = await appIcon(size, themeColor, purpose);
9+
return response.type("image/png").send(png).end();
10+
} catch {
11+
next();
12+
}
813
};
914

1015
export const getScripts = async (request, response) => {

packages/indiekit/lib/controllers/manifest.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,22 @@ export const get = async (request, response) => {
1010
name: application.name,
1111
icons: [
1212
{
13-
src: "assets/app-icon-192.png",
13+
src: "assets/app-icon-192-any.png",
1414
sizes: "192x192",
1515
type: "image/png",
16+
purpose: "any",
1617
},
1718
{
18-
src: "assets/app-icon-512.png",
19+
src: "assets/app-icon-512-any.png",
1920
sizes: "512x512",
2021
type: "image/png",
22+
purpose: "any",
23+
},
24+
{
25+
src: "assets/app-icon-512-maskable.png",
26+
sizes: "512x512",
27+
type: "image/png",
28+
purpose: "maskable",
2129
},
2230
],
2331
shortcuts: getShortcuts(application, response),

packages/indiekit/lib/routes.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ export const routes = (indiekitConfig) => {
3838
router.use("/assets", express.static(assetsPath, { maxAge: "7d" }));
3939
router.get("/assets/app-:hash.js", assetsController.getScripts);
4040
router.get("/assets/app-:hash.css", assetsController.getStyles);
41-
router.get("/assets/app-icon-:size.png", assetsController.getAppIcon);
41+
router.get(
42+
"/assets/app-icon-:size-:purpose.png",
43+
assetsController.getAppIcon,
44+
);
4245

4346
// Plug-in assets
4447
for (const plugin of application.installedPlugins) {

packages/indiekit/test/integration/200-app-icon.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import { testServer } from "@indiekit-test/server";
66
const server = await testServer();
77
const request = supertest.agent(server);
88

9-
describe("indiekit GET /assets/app-icon-512.png", () => {
9+
describe("indiekit GET /assets/app-icon-512-any.png", () => {
1010
it("Returns JavaScript", async () => {
11-
const result = await request.get("/assets/app-icon-512.png");
11+
const result = await request.get("/assets/app-icon-512-any.png");
1212

1313
assert.equal(result.status, 200);
1414
assert.equal(result.type, "image/png");

0 commit comments

Comments
 (0)