Skip to content
Source
Sign inSign up

withWidgetLogoAsset.cjs

55 lines1.8 KB

1"use strict";
2​
3// Precede expo-widgets so its reverse-ordered mods create and wipe the target before assets are added.
4​
5const path = require("path");
6const fs = require("fs");
7const { withDangerousMod, withXcodeProject } = require("expo/config-plugins");
8const { addWidgetAssetCatalog } = require("./lib/addWidgetAssetCatalog.cjs");
9​
10const TARGET_NAME = "ExpoWidgetsTarget";
11const CATALOG_NAME = "Assets.xcassets";
12const IMAGE_SET = "T3Mark.imageset";
13const SVG_NAME = "T3Mark.svg";
14​
15const CATALOG_CONTENTS = JSON.stringify({ info: { author: "expo", version: 1 } }, null, 2) + "\n";
16const IMAGE_SET_CONTENTS =
17 JSON.stringify(
18 {
19 images: [{ idiom: "universal", filename: SVG_NAME }],
20 info: { author: "expo", version: 1 },
21 properties: {
22 "preserves-vector-representation": true,
23 "template-rendering-intent": "template",
24 },
25 },
26 null,
27 2,
28 ) + "\n";
29​
30function withAssetFiles(config) {
31 return withDangerousMod(config, [
32 "ios",
33 (cfg) => {
34 const source = path.join(cfg.modRequest.projectRoot, "assets", "widget", SVG_NAME);
35 const catalogDir = path.join(cfg.modRequest.platformProjectRoot, TARGET_NAME, CATALOG_NAME);
36 const imageSetDir = path.join(catalogDir, IMAGE_SET);
37 fs.mkdirSync(imageSetDir, { recursive: true });
38 fs.writeFileSync(path.join(catalogDir, "Contents.json"), CATALOG_CONTENTS);
39 fs.writeFileSync(path.join(imageSetDir, "Contents.json"), IMAGE_SET_CONTENTS);
40 fs.copyFileSync(source, path.join(imageSetDir, SVG_NAME));
41 return cfg;
42 },
43 ]);
45​
46function withAssetWiring(config) {
47 return withXcodeProject(config, (cfg) => {
48 addWidgetAssetCatalog(cfg.modResults, { targetName: TARGET_NAME });
49 return cfg;
50 });
52​
53module.exports = function withWidgetLogoAsset(config) {
54 return withAssetWiring(withAssetFiles(config));
55};