react-native-bootsplash 4.4.1 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -121,7 +121,7 @@ The command can take multiple arguments:
121
121
  ```bash
122
122
  yarn react-native generate-bootsplash <logoPath>
123
123
 
124
- Generate a launch screen using an original logo file
124
+ Generate a launch screen using an original logo file (PNG or SVG)
125
125
 
126
126
  Options:
127
127
  --background-color <color> color used as launch screen background (in hexadecimal format) (default: "#fff")
@@ -141,17 +141,6 @@ yarn react-native generate-bootsplash assets/bootsplash_logo_original.png \
141
141
  --flavor=main
142
142
  ```
143
143
 
144
- #### Using an SVG
145
-
146
- You might want to use SVG as input file. For that, you can install a CLI tool to convert your logo first:
147
-
148
- ```bash
149
- $ brew install librsvg # available on macOS
150
- $ rsvg-convert -w 3000 bootsplash_logo.svg -o bootsplash_logo.png # create a large PNG with generous leeway for 4x Android xxxhdpi devices
151
- $ react-native generate-bootsplash bootsplash_logo.png
152
- $ rm bootsplash_logo.png # optionally, clean up the PNG
153
- ```
154
-
155
144
  ![](https://raw.githubusercontent.com/zoontek/react-native-bootsplash/master/docs/cli_tool.png?raw=true)
156
145
 
157
146
  This tool relies on the naming conventions that are used in the `/example` project and will therefore create the following files:
@@ -196,6 +185,7 @@ Edit the `ios/YourProjectName/AppDelegate.mm` file:
196
185
  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
197
186
  {
198
187
  self.moduleName = @"RNBootSplashExample";
188
+ self.initialProps = @{};
199
189
  [super application:application didFinishLaunchingWithOptions:launchOptions];
200
190
 
201
191
  [RNBootSplash initWithStoryboard:@"BootSplash" rootView:self.window.rootViewController.view]; // <- initialization using the storyboard file name
Binary file
Binary file
Binary file
Binary file
@@ -41,9 +41,8 @@ public class RNBootSplashModule extends ReactContextBaseJavaModule {
41
41
 
42
42
  private static final RNBootSplashQueue<Promise> mPromiseQueue = new RNBootSplashQueue<>();
43
43
  private static Status mStatus = Status.HIDDEN;
44
- private static boolean mShouldFade = false;
44
+ private static int mFadeDuration = 0;
45
45
  private static boolean mShouldKeepOnScreen = true;
46
- private static int mAnimationDuration;
47
46
 
48
47
  public RNBootSplashModule(ReactApplicationContext reactContext) {
49
48
  super(reactContext);
@@ -79,9 +78,9 @@ public class RNBootSplashModule extends ReactContextBaseJavaModule {
79
78
 
80
79
  splashScreenView
81
80
  .animate()
81
+ .setDuration(mFadeDuration)
82
82
  // Crappy hack to avoid automatic layout transitions
83
- .setDuration(mShouldFade ? mAnimationDuration: 0)
84
- .setStartDelay(mShouldFade ? 0 : mAnimationDuration)
83
+ .setStartDelay(Math.min(0, mFadeDuration))
85
84
  .alpha(0.0f)
86
85
  .setInterpolator(new AccelerateInterpolator())
87
86
  .setListener(new AnimatorListenerAdapter() {
@@ -110,7 +109,7 @@ public class RNBootSplashModule extends ReactContextBaseJavaModule {
110
109
  }
111
110
  }
112
111
 
113
- private void hideAndResolveAll(final boolean fade) {
112
+ private void hideAndResolveAll() {
114
113
  if (mSplashScreen == null || mStatus == Status.HIDDEN) {
115
114
  clearPromiseQueue();
116
115
  return;
@@ -128,16 +127,15 @@ public class RNBootSplashModule extends ReactContextBaseJavaModule {
128
127
  timer.schedule(new TimerTask() {
129
128
  @Override
130
129
  public void run() {
131
- hideAndResolveAll(fade);
130
+ hideAndResolveAll();
132
131
  timer.cancel();
133
132
  }
134
133
  }, 250);
135
134
  } else {
136
- if (fade) {
135
+ if (mFadeDuration > 0) {
137
136
  mStatus = Status.TRANSITIONING;
138
137
  }
139
138
 
140
- mShouldFade = fade;
141
139
  mShouldKeepOnScreen = false;
142
140
 
143
141
  final Timer timer = new Timer();
@@ -151,17 +149,17 @@ public class RNBootSplashModule extends ReactContextBaseJavaModule {
151
149
  timer.cancel();
152
150
  clearPromiseQueue();
153
151
  }
154
- }, mAnimationDuration);
152
+ }, mFadeDuration);
155
153
  }
156
154
  }
157
155
  });
158
156
  }
159
157
 
160
158
  @ReactMethod
161
- public void hide(final boolean fade, final int fadeDuration, final Promise promise) {
162
- mAnimationDuration = fadeDuration;
159
+ public void hide(final double duration, final Promise promise) {
160
+ mFadeDuration = (int) Math.round(duration);
163
161
  mPromiseQueue.push(promise);
164
- hideAndResolveAll(fade);
162
+ hideAndResolveAll();
165
163
  }
166
164
 
167
165
  @ReactMethod
Binary file
@@ -5,14 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.generate = void 0;
7
7
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
8
- var _jimp = _interopRequireDefault(require("jimp"));
9
8
  var _path = _interopRequireDefault(require("path"));
10
9
  var _picocolors = _interopRequireDefault(require("picocolors"));
10
+ var _sharp = _interopRequireDefault(require("sharp"));
11
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
12
  const logoFileName = "bootsplash_logo";
13
13
  const xcassetName = "BootSplashLogo";
14
- // https://github.com/androidx/androidx/blob/androidx-main/core/core-splashscreen/src/main/res/values/dimens.xml#L22
15
- const splashScreenIconSizeNoBackground = 288;
16
14
  const androidColorName = "bootsplash_background";
17
15
  const androidColorRegex = /<color name="bootsplash_background">#\w+<\/color>/g;
18
16
  const ContentsJson = `{
@@ -95,9 +93,10 @@ const getStoryboard = _ref => {
95
93
  </document>
96
94
  `;
97
95
  };
98
- const log = function (text) {
99
- let dim = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
100
- console.log(dim ? _picocolors.default.dim(text) : text);
96
+ const log = {
97
+ error: text => console.log(_picocolors.default.red(text)),
98
+ text: text => console.log(text),
99
+ warn: text => console.log(_picocolors.default.yellow(text))
101
100
  };
102
101
  const isValidHexadecimal = value => /^#?([0-9A-F]{3}){1,2}$/i.test(value);
103
102
  const toFullHexadecimal = hex => {
@@ -117,14 +116,38 @@ const generate = async _ref2 => {
117
116
  assetsPath
118
117
  } = _ref2;
119
118
  if (!isValidHexadecimal(backgroundColor)) {
120
- throw new Error("--background-color value is not a valid hexadecimal color.");
119
+ log.error("--background-color value is not a valid hexadecimal color.");
120
+ process.exit(1);
121
121
  }
122
- const image = await _jimp.default.read(logoPath);
122
+ const image = (0, _sharp.default)(logoPath);
123
123
  const backgroundColorHex = toFullHexadecimal(backgroundColor);
124
- const getHeight = size => Math.ceil(size * (image.bitmap.height / image.bitmap.width));
125
- const logWrite = (emoji, filePath, dimensions) => log(`${emoji} ${_path.default.relative(workingPath, filePath)}` + (dimensions != null ? ` (${dimensions.width}x${dimensions.height})` : ""));
124
+ const {
125
+ format
126
+ } = await image.metadata();
127
+ if (format !== "png" && format !== "svg") {
128
+ log.error("Input file is an unsupported image format");
129
+ process.exit(1);
130
+ }
131
+ const logoHeight = await image.clone().resize(logoWidth).toBuffer().then(buffer => (0, _sharp.default)(buffer).metadata()).then(_ref3 => {
132
+ let {
133
+ height = 0
134
+ } = _ref3;
135
+ return height;
136
+ });
137
+ if (logoWidth > 288) {
138
+ log.error("Logo width must not exceed 288dp (Android will crop it).");
139
+ process.exit(1);
140
+ } else if (logoHeight > 288) {
141
+ log.error("Logo height must not exceed 288dp (Android will crop it).");
142
+ process.exit(1);
143
+ } else if (logoWidth > 192) {
144
+ log.warn("⚠️ Logo width exceed 192dp. It might be cropped on Android.");
145
+ } else if (logoHeight > 192) {
146
+ log.warn("⚠️ Logo height exceed 192dp. It might be cropped on Android.");
147
+ }
148
+ const logWrite = (emoji, filePath, dimensions) => log.text(`${emoji} ${_path.default.relative(workingPath, filePath)}` + (dimensions != null ? ` (${dimensions.width}x${dimensions.height})` : ""));
126
149
  if (assetsPath && _fsExtra.default.existsSync(assetsPath)) {
127
- log(`\n ${_picocolors.default.underline("Assets")}`);
150
+ log.text(`\n ${_picocolors.default.underline("Assets")}`);
128
151
  await Promise.all([{
129
152
  ratio: 1,
130
153
  suffix: ""
@@ -140,16 +163,20 @@ const generate = async _ref2 => {
140
163
  }, {
141
164
  ratio: 4,
142
165
  suffix: "@4x"
143
- }].map(_ref3 => {
166
+ }].map(_ref4 => {
144
167
  let {
145
168
  ratio,
146
169
  suffix
147
- } = _ref3;
170
+ } = _ref4;
148
171
  const fileName = `${logoFileName}${suffix}.png`;
149
172
  const filePath = _path.default.resolve(assetsPath, fileName);
150
- const width = logoWidth * ratio;
151
- const height = getHeight(width);
152
- return image.clone().resize(width, height).quality(100).writeAsync(filePath).then(() => {
173
+ return image.clone().resize(logoWidth * ratio).png({
174
+ quality: 100
175
+ }).toFile(filePath).then(_ref5 => {
176
+ let {
177
+ width,
178
+ height
179
+ } = _ref5;
153
180
  logWrite("✨", filePath, {
154
181
  width,
155
182
  height
@@ -158,7 +185,7 @@ const generate = async _ref2 => {
158
185
  }));
159
186
  }
160
187
  if (android) {
161
- log(`\n ${_picocolors.default.underline("Android")}`);
188
+ log.text(`\n ${_picocolors.default.underline("Android")}`);
162
189
  const appPath = android.appName ? _path.default.resolve(android.sourceDir, android.appName) : _path.default.resolve(android.sourceDir); // @react-native-community/cli 2.x & 3.x support
163
190
 
164
191
  const resPath = _path.default.resolve(appPath, "src", flavor, "res");
@@ -193,23 +220,35 @@ const generate = async _ref2 => {
193
220
  }, {
194
221
  ratio: 4,
195
222
  directory: "mipmap-xxxhdpi"
196
- }].map(_ref4 => {
223
+ }].map(_ref6 => {
197
224
  let {
198
225
  ratio,
199
226
  directory
200
- } = _ref4;
227
+ } = _ref6;
201
228
  const fileName = `${logoFileName}.png`;
202
229
  const filePath = _path.default.resolve(resPath, directory, fileName);
203
- const width = logoWidth * ratio;
204
- const height = getHeight(width);
205
- const canvasSize = splashScreenIconSizeNoBackground * ratio;
230
+ // https://github.com/androidx/androidx/blob/androidx-main/core/core-splashscreen/src/main/res/values/dimens.xml#L22
231
+ const canvasSize = 288 * ratio;
206
232
 
207
- // https://github.com/oliver-moran/jimp/tree/master/packages/jimp#creating-new-images
208
- const canvas = new _jimp.default(canvasSize, canvasSize, 0xffffff00);
209
- const logo = image.clone().resize(width, height);
210
- const x = (canvasSize - width) / 2;
211
- const y = (canvasSize - height) / 2;
212
- return canvas.blit(logo, x, y).quality(100).writeAsync(filePath).then(() => {
233
+ // https://sharp.pixelplumbing.com/api-constructor
234
+ const canvas = (0, _sharp.default)({
235
+ create: {
236
+ width: canvasSize,
237
+ height: canvasSize,
238
+ channels: 4,
239
+ background: {
240
+ r: 255,
241
+ g: 255,
242
+ b: 255,
243
+ alpha: 0
244
+ }
245
+ }
246
+ });
247
+ return image.clone().resize(logoWidth * ratio).toBuffer().then(input => canvas.composite([{
248
+ input
249
+ }]).png({
250
+ quality: 100
251
+ }).toFile(filePath)).then(() => {
213
252
  logWrite("✨", filePath, {
214
253
  width: canvasSize,
215
254
  height: canvasSize
@@ -218,7 +257,7 @@ const generate = async _ref2 => {
218
257
  }));
219
258
  }
220
259
  if (ios) {
221
- log(`\n ${_picocolors.default.underline("iOS")}`);
260
+ log.text(`\n ${_picocolors.default.underline("iOS")}`);
222
261
  const {
223
262
  projectPath
224
263
  } = ios;
@@ -226,13 +265,13 @@ const generate = async _ref2 => {
226
265
  if (_fsExtra.default.existsSync(projectPath)) {
227
266
  const storyboardPath = _path.default.resolve(projectPath, "BootSplash.storyboard");
228
267
  _fsExtra.default.writeFileSync(storyboardPath, getStoryboard({
229
- height: getHeight(logoWidth),
268
+ height: logoHeight,
230
269
  width: logoWidth,
231
270
  backgroundColor: backgroundColorHex
232
271
  }), "utf-8");
233
272
  logWrite("✨", storyboardPath);
234
273
  } else {
235
- log(`No "${projectPath}" directory found. Skipping iOS storyboard generation…`);
274
+ log.text(`No "${projectPath}" directory found. Skipping iOS storyboard generation…`);
236
275
  }
237
276
  if (_fsExtra.default.existsSync(imagesPath)) {
238
277
  const imageSetPath = _path.default.resolve(imagesPath, xcassetName + ".imageset");
@@ -247,16 +286,20 @@ const generate = async _ref2 => {
247
286
  }, {
248
287
  ratio: 3,
249
288
  suffix: "@3x"
250
- }].map(_ref5 => {
289
+ }].map(_ref7 => {
251
290
  let {
252
291
  ratio,
253
292
  suffix
254
- } = _ref5;
293
+ } = _ref7;
255
294
  const fileName = `${logoFileName}${suffix}.png`;
256
295
  const filePath = _path.default.resolve(imageSetPath, fileName);
257
- const width = logoWidth * ratio;
258
- const height = getHeight(width);
259
- return image.clone().resize(width, height).quality(100).writeAsync(filePath).then(() => {
296
+ return image.clone().resize(logoWidth * ratio).png({
297
+ quality: 100
298
+ }).toFile(filePath).then(_ref8 => {
299
+ let {
300
+ width,
301
+ height
302
+ } = _ref8;
260
303
  logWrite("✨", filePath, {
261
304
  width,
262
305
  height
@@ -264,17 +307,16 @@ const generate = async _ref2 => {
264
307
  });
265
308
  }));
266
309
  } else {
267
- log(`No "${imagesPath}" directory found. Skipping iOS images generation…`);
310
+ log.text(`No "${imagesPath}" directory found. Skipping iOS images generation…`);
268
311
  }
269
312
  }
270
- log(`
313
+ log.text(`
271
314
  ${_picocolors.default.blue("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓")}
272
315
  ${_picocolors.default.blue("┃")} 💖 ${_picocolors.default.bold("Love this library? Consider sponsoring!")} ${_picocolors.default.blue("┃")}
273
- ${_picocolors.default.blue("┃")} One-time amounts are available. ${_picocolors.default.blue("┃")}
274
316
  ${_picocolors.default.blue("┃")} ${_picocolors.default.underline("https://github.com/sponsors/zoontek")} ${_picocolors.default.blue("┃")}
275
317
  ${_picocolors.default.blue("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛")}
276
318
  `);
277
- log(`✅ Done! Thanks for using ${_picocolors.default.underline("react-native-bootsplash")}.`);
319
+ log.text(`✅ Done! Thanks for using ${_picocolors.default.underline("react-native-bootsplash")}.`);
278
320
  };
279
321
  exports.generate = generate;
280
322
  //# sourceMappingURL=generate.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["logoFileName","xcassetName","splashScreenIconSizeNoBackground","androidColorName","androidColorRegex","ContentsJson","getStoryboard","height","width","backgroundColor","hex","r","parseInt","toPrecision","g","b","log","text","dim","console","pc","isValidHexadecimal","value","test","toFullHexadecimal","prefixed","up","toUpperCase","length","generate","android","ios","workingPath","logoPath","logoWidth","flavor","assetsPath","Error","image","Jimp","read","backgroundColorHex","getHeight","size","Math","ceil","bitmap","logWrite","emoji","filePath","dimensions","path","relative","fs","existsSync","underline","Promise","all","ratio","suffix","map","fileName","resolve","clone","resize","quality","writeAsync","then","appPath","appName","sourceDir","resPath","valuesPath","ensureDirSync","colorsXmlPath","colorsXmlEntry","colorsXml","readFileSync","match","writeFileSync","replace","directory","canvasSize","canvas","logo","x","y","blit","projectPath","imagesPath","storyboardPath","imageSetPath","blue","bold"],"sourceRoot":"../../src","sources":["generate.ts"],"mappings":"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"}
1
+ {"version":3,"names":["logoFileName","xcassetName","androidColorName","androidColorRegex","ContentsJson","getStoryboard","height","width","backgroundColor","hex","r","parseInt","toPrecision","g","b","log","error","text","console","pc","red","warn","yellow","isValidHexadecimal","value","test","toFullHexadecimal","prefixed","up","toUpperCase","length","generate","android","ios","workingPath","logoPath","logoWidth","flavor","assetsPath","process","exit","image","sharp","backgroundColorHex","format","metadata","logoHeight","clone","resize","toBuffer","then","buffer","logWrite","emoji","filePath","dimensions","path","relative","fs","existsSync","underline","Promise","all","ratio","suffix","map","fileName","resolve","png","quality","toFile","appPath","appName","sourceDir","resPath","valuesPath","ensureDirSync","colorsXmlPath","colorsXmlEntry","colorsXml","readFileSync","match","writeFileSync","replace","directory","canvasSize","canvas","create","channels","background","alpha","input","composite","projectPath","imagesPath","storyboardPath","imageSetPath","blue","bold"],"sourceRoot":"../../src","sources":["generate.ts"],"mappings":"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"}
@@ -14,7 +14,7 @@ function hide() {
14
14
  fade = false,
15
15
  duration = 0
16
16
  } = config;
17
- return NativeModule.hide(fade, Math.max(duration, 220)).then(() => {});
17
+ return NativeModule.hide(fade ? Math.max(duration, 220) : 0).then(() => {});
18
18
  }
19
19
  function getVisibilityStatus() {
20
20
  return NativeModule.getVisibilityStatus();
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModule","NativeModules","RNBootSplash","hide","config","fade","duration","Math","max","then","getVisibilityStatus"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;AAAA;AAKA,MAAMA,YAGL,GAAGC,0BAAa,CAACC,YAAY;AAEvB,SAASC,IAAI,GAAqC;EAAA,IAApCC,MAAc,uEAAG,CAAC,CAAC;EACtC,MAAM;IAAEC,IAAI,GAAG,KAAK;IAAEC,QAAQ,GAAG;EAAE,CAAC,GAAGF,MAAM;EAC7C,OAAOJ,YAAY,CAACG,IAAI,CAACE,IAAI,EAAEE,IAAI,CAACC,GAAG,CAACF,QAAQ,EAAE,GAAG,CAAC,CAAC,CAACG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxE;AAEO,SAASC,mBAAmB,GAA8B;EAC/D,OAAOV,YAAY,CAACU,mBAAmB,EAAE;AAC3C;AAAC,eAEc;EACbP,IAAI;EACJO;AACF,CAAC;AAAA"}
1
+ {"version":3,"names":["NativeModule","NativeModules","RNBootSplash","hide","config","fade","duration","Math","max","then","getVisibilityStatus"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;AAAA;AAKA,MAAMA,YAGL,GAAGC,0BAAa,CAACC,YAAY;AAEvB,SAASC,IAAI,GAAqC;EAAA,IAApCC,MAAc,uEAAG,CAAC,CAAC;EACtC,MAAM;IAAEC,IAAI,GAAG,KAAK;IAAEC,QAAQ,GAAG;EAAE,CAAC,GAAGF,MAAM;EAC7C,OAAOJ,YAAY,CAACG,IAAI,CAACE,IAAI,GAAGE,IAAI,CAACC,GAAG,CAACF,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAACG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7E;AAEO,SAASC,mBAAmB,GAA8B;EAC/D,OAAOV,YAAY,CAACU,mBAAmB,EAAE;AAC3C;AAAC,eAEc;EACbP,IAAI;EACJO;AACF,CAAC;AAAA"}
@@ -1,11 +1,9 @@
1
1
  import fs from "fs-extra";
2
- import Jimp from "jimp";
3
2
  import path from "path";
4
3
  import pc from "picocolors";
4
+ import sharp from "sharp";
5
5
  const logoFileName = "bootsplash_logo";
6
6
  const xcassetName = "BootSplashLogo";
7
- // https://github.com/androidx/androidx/blob/androidx-main/core/core-splashscreen/src/main/res/values/dimens.xml#L22
8
- const splashScreenIconSizeNoBackground = 288;
9
7
  const androidColorName = "bootsplash_background";
10
8
  const androidColorRegex = /<color name="bootsplash_background">#\w+<\/color>/g;
11
9
  const ContentsJson = `{
@@ -88,9 +86,10 @@ const getStoryboard = _ref => {
88
86
  </document>
89
87
  `;
90
88
  };
91
- const log = function (text) {
92
- let dim = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
93
- console.log(dim ? pc.dim(text) : text);
89
+ const log = {
90
+ error: text => console.log(pc.red(text)),
91
+ text: text => console.log(text),
92
+ warn: text => console.log(pc.yellow(text))
94
93
  };
95
94
  const isValidHexadecimal = value => /^#?([0-9A-F]{3}){1,2}$/i.test(value);
96
95
  const toFullHexadecimal = hex => {
@@ -110,14 +109,38 @@ export const generate = async _ref2 => {
110
109
  assetsPath
111
110
  } = _ref2;
112
111
  if (!isValidHexadecimal(backgroundColor)) {
113
- throw new Error("--background-color value is not a valid hexadecimal color.");
112
+ log.error("--background-color value is not a valid hexadecimal color.");
113
+ process.exit(1);
114
114
  }
115
- const image = await Jimp.read(logoPath);
115
+ const image = sharp(logoPath);
116
116
  const backgroundColorHex = toFullHexadecimal(backgroundColor);
117
- const getHeight = size => Math.ceil(size * (image.bitmap.height / image.bitmap.width));
118
- const logWrite = (emoji, filePath, dimensions) => log(`${emoji} ${path.relative(workingPath, filePath)}` + (dimensions != null ? ` (${dimensions.width}x${dimensions.height})` : ""));
117
+ const {
118
+ format
119
+ } = await image.metadata();
120
+ if (format !== "png" && format !== "svg") {
121
+ log.error("Input file is an unsupported image format");
122
+ process.exit(1);
123
+ }
124
+ const logoHeight = await image.clone().resize(logoWidth).toBuffer().then(buffer => sharp(buffer).metadata()).then(_ref3 => {
125
+ let {
126
+ height = 0
127
+ } = _ref3;
128
+ return height;
129
+ });
130
+ if (logoWidth > 288) {
131
+ log.error("Logo width must not exceed 288dp (Android will crop it).");
132
+ process.exit(1);
133
+ } else if (logoHeight > 288) {
134
+ log.error("Logo height must not exceed 288dp (Android will crop it).");
135
+ process.exit(1);
136
+ } else if (logoWidth > 192) {
137
+ log.warn("⚠️ Logo width exceed 192dp. It might be cropped on Android.");
138
+ } else if (logoHeight > 192) {
139
+ log.warn("⚠️ Logo height exceed 192dp. It might be cropped on Android.");
140
+ }
141
+ const logWrite = (emoji, filePath, dimensions) => log.text(`${emoji} ${path.relative(workingPath, filePath)}` + (dimensions != null ? ` (${dimensions.width}x${dimensions.height})` : ""));
119
142
  if (assetsPath && fs.existsSync(assetsPath)) {
120
- log(`\n ${pc.underline("Assets")}`);
143
+ log.text(`\n ${pc.underline("Assets")}`);
121
144
  await Promise.all([{
122
145
  ratio: 1,
123
146
  suffix: ""
@@ -133,16 +156,20 @@ export const generate = async _ref2 => {
133
156
  }, {
134
157
  ratio: 4,
135
158
  suffix: "@4x"
136
- }].map(_ref3 => {
159
+ }].map(_ref4 => {
137
160
  let {
138
161
  ratio,
139
162
  suffix
140
- } = _ref3;
163
+ } = _ref4;
141
164
  const fileName = `${logoFileName}${suffix}.png`;
142
165
  const filePath = path.resolve(assetsPath, fileName);
143
- const width = logoWidth * ratio;
144
- const height = getHeight(width);
145
- return image.clone().resize(width, height).quality(100).writeAsync(filePath).then(() => {
166
+ return image.clone().resize(logoWidth * ratio).png({
167
+ quality: 100
168
+ }).toFile(filePath).then(_ref5 => {
169
+ let {
170
+ width,
171
+ height
172
+ } = _ref5;
146
173
  logWrite("✨", filePath, {
147
174
  width,
148
175
  height
@@ -151,7 +178,7 @@ export const generate = async _ref2 => {
151
178
  }));
152
179
  }
153
180
  if (android) {
154
- log(`\n ${pc.underline("Android")}`);
181
+ log.text(`\n ${pc.underline("Android")}`);
155
182
  const appPath = android.appName ? path.resolve(android.sourceDir, android.appName) : path.resolve(android.sourceDir); // @react-native-community/cli 2.x & 3.x support
156
183
 
157
184
  const resPath = path.resolve(appPath, "src", flavor, "res");
@@ -186,23 +213,35 @@ export const generate = async _ref2 => {
186
213
  }, {
187
214
  ratio: 4,
188
215
  directory: "mipmap-xxxhdpi"
189
- }].map(_ref4 => {
216
+ }].map(_ref6 => {
190
217
  let {
191
218
  ratio,
192
219
  directory
193
- } = _ref4;
220
+ } = _ref6;
194
221
  const fileName = `${logoFileName}.png`;
195
222
  const filePath = path.resolve(resPath, directory, fileName);
196
- const width = logoWidth * ratio;
197
- const height = getHeight(width);
198
- const canvasSize = splashScreenIconSizeNoBackground * ratio;
223
+ // https://github.com/androidx/androidx/blob/androidx-main/core/core-splashscreen/src/main/res/values/dimens.xml#L22
224
+ const canvasSize = 288 * ratio;
199
225
 
200
- // https://github.com/oliver-moran/jimp/tree/master/packages/jimp#creating-new-images
201
- const canvas = new Jimp(canvasSize, canvasSize, 0xffffff00);
202
- const logo = image.clone().resize(width, height);
203
- const x = (canvasSize - width) / 2;
204
- const y = (canvasSize - height) / 2;
205
- return canvas.blit(logo, x, y).quality(100).writeAsync(filePath).then(() => {
226
+ // https://sharp.pixelplumbing.com/api-constructor
227
+ const canvas = sharp({
228
+ create: {
229
+ width: canvasSize,
230
+ height: canvasSize,
231
+ channels: 4,
232
+ background: {
233
+ r: 255,
234
+ g: 255,
235
+ b: 255,
236
+ alpha: 0
237
+ }
238
+ }
239
+ });
240
+ return image.clone().resize(logoWidth * ratio).toBuffer().then(input => canvas.composite([{
241
+ input
242
+ }]).png({
243
+ quality: 100
244
+ }).toFile(filePath)).then(() => {
206
245
  logWrite("✨", filePath, {
207
246
  width: canvasSize,
208
247
  height: canvasSize
@@ -211,7 +250,7 @@ export const generate = async _ref2 => {
211
250
  }));
212
251
  }
213
252
  if (ios) {
214
- log(`\n ${pc.underline("iOS")}`);
253
+ log.text(`\n ${pc.underline("iOS")}`);
215
254
  const {
216
255
  projectPath
217
256
  } = ios;
@@ -219,13 +258,13 @@ export const generate = async _ref2 => {
219
258
  if (fs.existsSync(projectPath)) {
220
259
  const storyboardPath = path.resolve(projectPath, "BootSplash.storyboard");
221
260
  fs.writeFileSync(storyboardPath, getStoryboard({
222
- height: getHeight(logoWidth),
261
+ height: logoHeight,
223
262
  width: logoWidth,
224
263
  backgroundColor: backgroundColorHex
225
264
  }), "utf-8");
226
265
  logWrite("✨", storyboardPath);
227
266
  } else {
228
- log(`No "${projectPath}" directory found. Skipping iOS storyboard generation…`);
267
+ log.text(`No "${projectPath}" directory found. Skipping iOS storyboard generation…`);
229
268
  }
230
269
  if (fs.existsSync(imagesPath)) {
231
270
  const imageSetPath = path.resolve(imagesPath, xcassetName + ".imageset");
@@ -240,16 +279,20 @@ export const generate = async _ref2 => {
240
279
  }, {
241
280
  ratio: 3,
242
281
  suffix: "@3x"
243
- }].map(_ref5 => {
282
+ }].map(_ref7 => {
244
283
  let {
245
284
  ratio,
246
285
  suffix
247
- } = _ref5;
286
+ } = _ref7;
248
287
  const fileName = `${logoFileName}${suffix}.png`;
249
288
  const filePath = path.resolve(imageSetPath, fileName);
250
- const width = logoWidth * ratio;
251
- const height = getHeight(width);
252
- return image.clone().resize(width, height).quality(100).writeAsync(filePath).then(() => {
289
+ return image.clone().resize(logoWidth * ratio).png({
290
+ quality: 100
291
+ }).toFile(filePath).then(_ref8 => {
292
+ let {
293
+ width,
294
+ height
295
+ } = _ref8;
253
296
  logWrite("✨", filePath, {
254
297
  width,
255
298
  height
@@ -257,16 +300,15 @@ export const generate = async _ref2 => {
257
300
  });
258
301
  }));
259
302
  } else {
260
- log(`No "${imagesPath}" directory found. Skipping iOS images generation…`);
303
+ log.text(`No "${imagesPath}" directory found. Skipping iOS images generation…`);
261
304
  }
262
305
  }
263
- log(`
306
+ log.text(`
264
307
  ${pc.blue("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓")}
265
308
  ${pc.blue("┃")} 💖 ${pc.bold("Love this library? Consider sponsoring!")} ${pc.blue("┃")}
266
- ${pc.blue("┃")} One-time amounts are available. ${pc.blue("┃")}
267
309
  ${pc.blue("┃")} ${pc.underline("https://github.com/sponsors/zoontek")} ${pc.blue("┃")}
268
310
  ${pc.blue("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛")}
269
311
  `);
270
- log(`✅ Done! Thanks for using ${pc.underline("react-native-bootsplash")}.`);
312
+ log.text(`✅ Done! Thanks for using ${pc.underline("react-native-bootsplash")}.`);
271
313
  };
272
314
  //# sourceMappingURL=generate.js.map