@quasar/icongenie 4.0.0 → 5.0.1

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.
Files changed (61) hide show
  1. package/README.md +7 -1
  2. package/bin/icongenie.js +22 -22
  3. package/lib/cmd/generate.js +36 -41
  4. package/lib/cmd/help.js +1 -1
  5. package/lib/cmd/profile.js +34 -38
  6. package/lib/cmd/verify.js +18 -17
  7. package/lib/generators/icns.js +7 -3
  8. package/lib/generators/ico.js +7 -3
  9. package/lib/generators/index.js +0 -1
  10. package/lib/generators/png.js +7 -6
  11. package/lib/generators/splashscreen.js +6 -12
  12. package/lib/generators/svg.js +3 -4
  13. package/lib/modes/index.js +1 -8
  14. package/lib/modes/{quasar-app-v2 → v2}/bex.js +1 -2
  15. package/lib/modes/{quasar-app-v1 → v2}/capacitor.js +28 -35
  16. package/lib/modes/{quasar-app-v1 → v2}/cordova.js +40 -47
  17. package/lib/modes/v2/electron.js +32 -0
  18. package/lib/modes/{quasar-app-v1 → v2}/index.js +0 -1
  19. package/lib/modes/v2/pwa.js +71 -0
  20. package/lib/modes/{quasar-app-v2 → v2}/spa.js +1 -2
  21. package/lib/modes/{quasar-app-v1 → v2}/ssr.js +1 -2
  22. package/lib/mount/index.js +4 -7
  23. package/lib/mount/mount-cordova.js +71 -63
  24. package/lib/mount/mount-tag.js +3 -6
  25. package/lib/runner/generate.js +57 -55
  26. package/lib/runner/profile.js +18 -26
  27. package/lib/runner/verify.js +29 -27
  28. package/lib/utils/app-paths.js +8 -9
  29. package/lib/utils/default-params.js +0 -1
  30. package/lib/utils/filter-argv-params.js +3 -4
  31. package/lib/utils/get-argv.js +47 -0
  32. package/lib/utils/get-assets-files.js +9 -12
  33. package/lib/utils/get-compression.js +31 -19
  34. package/lib/utils/get-file-size.js +5 -6
  35. package/lib/utils/get-files-options.js +18 -21
  36. package/lib/utils/get-png-size.js +10 -12
  37. package/lib/utils/get-profile-content.js +3 -7
  38. package/lib/utils/get-profile-files.js +10 -13
  39. package/lib/utils/get-square-icon.js +5 -4
  40. package/lib/utils/logger.js +6 -7
  41. package/lib/utils/merge-objects.js +5 -6
  42. package/lib/utils/node-version-check.js +11 -11
  43. package/lib/utils/package-json.js +1 -5
  44. package/lib/utils/parse-argv.js +63 -74
  45. package/lib/utils/spawn-sync.js +8 -10
  46. package/lib/utils/validate-profile-object.js +34 -27
  47. package/package.json +46 -48
  48. package/samples/icongenie-profile.json +9 -17
  49. package/.editorconfig +0 -13
  50. package/.eslintignore +0 -1
  51. package/.eslintrc.cjs +0 -50
  52. package/lib/modes/quasar-app-v1/bex.js +0 -9
  53. package/lib/modes/quasar-app-v1/electron.js +0 -24
  54. package/lib/modes/quasar-app-v1/pwa.js +0 -74
  55. package/lib/modes/quasar-app-v1/spa.js +0 -17
  56. package/lib/modes/quasar-app-v2/capacitor.js +0 -155
  57. package/lib/modes/quasar-app-v2/cordova.js +0 -159
  58. package/lib/modes/quasar-app-v2/electron.js +0 -24
  59. package/lib/modes/quasar-app-v2/index.js +0 -45
  60. package/lib/modes/quasar-app-v2/pwa.js +0 -74
  61. package/lib/modes/quasar-app-v2/ssr.js +0 -4
@@ -1,38 +1,37 @@
1
-
2
1
  const iosIconRegex = /AppIcon-(\d+\.?\d?)x?(\d+\.?\d?)?@?(\d+)?x?-?\d?\.png/
3
2
 
4
- function getAndroidIcons (entries) {
3
+ function getAndroidIcons(entries) {
5
4
  const list = []
6
5
 
7
6
  entries.forEach(entry => {
8
7
  const icon = {
9
8
  generator: 'png',
10
- folder: `src-capacitor/android/app/src/main/res/mipmap-${ entry[ 0 ] }`
9
+ folder: `src-capacitor/android/app/src/main/res/mipmap-${entry[0]}`
11
10
  }
12
11
 
13
12
  list.push({
14
13
  ...icon,
15
14
  name: 'ic_launcher_foreground.png',
16
- sizes: [ entry[ 2 ] ]
15
+ sizes: [entry[2]]
17
16
  })
18
17
 
19
18
  list.push({
20
19
  ...icon,
21
20
  name: 'ic_launcher_round.png',
22
- sizes: [ entry[ 1 ] ]
21
+ sizes: [entry[1]]
23
22
  })
24
23
 
25
24
  list.push({
26
25
  ...icon,
27
26
  name: 'ic_launcher.png',
28
- sizes: [ entry[ 1 ] ]
27
+ sizes: [entry[1]]
29
28
  })
30
29
  })
31
30
 
32
31
  return list
33
32
  }
34
33
 
35
- function getAndroidSplashscreen (entries) {
34
+ function getAndroidSplashscreen(entries) {
36
35
  const list = []
37
36
 
38
37
  entries.forEach(entry => {
@@ -43,26 +42,22 @@ function getAndroidSplashscreen (entries) {
43
42
 
44
43
  list.push({
45
44
  ...icon,
46
- folder: `src-capacitor/android/app/src/main/res/drawable-land-${ entry[ 0 ] }`,
47
- sizes: [
48
- [ entry[ 1 ], entry[ 2 ] ]
49
- ]
45
+ folder: `src-capacitor/android/app/src/main/res/drawable-land-${entry[0]}`,
46
+ sizes: [[entry[1], entry[2]]]
50
47
  })
51
48
 
52
49
  list.push({
53
50
  ...icon,
54
- folder: `src-capacitor/android/app/src/main/res/drawable-port-${ entry[ 0 ] }`,
55
- sizes: [
56
- [ entry[ 2 ], entry[ 1 ] ]
57
- ]
51
+ folder: `src-capacitor/android/app/src/main/res/drawable-port-${entry[0]}`,
52
+ sizes: [[entry[2], entry[1]]]
58
53
  })
59
54
  })
60
55
 
61
56
  return list
62
57
  }
63
58
 
64
- function getIosIcon (name) {
65
- const [ ,size,,multiplier ] = name.match(iosIconRegex)
59
+ function getIosIcon(name) {
60
+ const [, size, , multiplier] = name.match(iosIconRegex)
66
61
 
67
62
  return {
68
63
  generator: 'png',
@@ -70,8 +65,8 @@ function getIosIcon (name) {
70
65
  folder: 'src-capacitor/ios/App/App/Assets.xcassets/AppIcon.appiconset',
71
66
  sizes: [
72
67
  multiplier
73
- ? parseFloat(size) * parseInt(multiplier,10)
74
- : parseFloat(size)
68
+ ? Number.parseFloat(size) * Number.parseInt(multiplier, 10)
69
+ : Number.parseFloat(size)
75
70
  ],
76
71
  background: true
77
72
  }
@@ -83,28 +78,26 @@ export default [
83
78
  ***************/
84
79
 
85
80
  ...getAndroidIcons([
86
- [ 'hdpi', 49, 162 ],
87
- [ 'mdpi', 48, 108 ],
88
- [ 'xhdpi', 96, 216 ],
89
- [ 'xxhdpi', 144, 324 ],
90
- [ 'xxxhdpi', 192, 432 ]
81
+ ['hdpi', 49, 162],
82
+ ['mdpi', 48, 108],
83
+ ['xhdpi', 96, 216],
84
+ ['xxhdpi', 144, 324],
85
+ ['xxxhdpi', 192, 432]
91
86
  ]),
92
87
 
93
88
  {
94
89
  generator: 'splashscreen',
95
90
  name: 'splash.png',
96
91
  folder: 'src-capacitor/android/app/src/main/res/drawable',
97
- sizes: [
98
- [ 480, 320 ]
99
- ]
92
+ sizes: [[480, 320]]
100
93
  },
101
94
 
102
95
  ...getAndroidSplashscreen([
103
- [ 'mdpi', 480, 320 ],
104
- [ 'hdpi', 800, 480 ],
105
- [ 'xhdpi', 1280, 720 ],
106
- [ 'xxhdpi', 1600, 960 ],
107
- [ 'xxxhdpi', 1920, 1280 ]
96
+ ['mdpi', 480, 320],
97
+ ['hdpi', 800, 480],
98
+ ['xhdpi', 1280, 720],
99
+ ['xxhdpi', 1600, 960],
100
+ ['xxxhdpi', 1920, 1280]
108
101
  ]),
109
102
 
110
103
  /**************
@@ -136,20 +129,20 @@ export default [
136
129
  generator: 'splashscreen',
137
130
  name: 'splash-2732x2732-1.png',
138
131
  folder: 'src-capacitor/ios/App/App/Assets.xcassets/Splash.imageset',
139
- sizes: [ 2732 ]
132
+ sizes: [2732]
140
133
  },
141
134
 
142
135
  {
143
136
  generator: 'splashscreen',
144
137
  name: 'splash-2732x2732-2.png',
145
138
  folder: 'src-capacitor/ios/App/App/Assets.xcassets/Splash.imageset',
146
- sizes: [ 2732 ]
139
+ sizes: [2732]
147
140
  },
148
141
 
149
142
  {
150
143
  generator: 'splashscreen',
151
144
  name: 'splash-2732x2732.png',
152
145
  folder: 'src-capacitor/ios/App/App/Assets.xcassets/Splash.imageset',
153
- sizes: [ 2732 ]
146
+ sizes: [2732]
154
147
  }
155
148
  ]
@@ -1,49 +1,44 @@
1
-
2
1
  const iosIconRegex = /icon-(\d+\.?\d?)@?(\d+)?x?\.png/
3
2
 
4
- function getAndroidIcon (entry) {
3
+ function getAndroidIcon(entry) {
5
4
  return {
6
5
  generator: 'png',
7
- name: `${ entry[ 0 ] }.png`,
6
+ name: `${entry[0]}.png`,
8
7
  folder: 'src-cordova/res/android',
9
- sizes: [ entry[ 1 ] ],
8
+ sizes: [entry[1]],
10
9
  platform: 'cordova-android',
11
- density: entry[ 0 ]
10
+ density: entry[0]
12
11
  }
13
12
  }
14
13
 
15
- function getAndroidSplashscreens (entries) {
14
+ function getAndroidSplashscreens(entries) {
16
15
  const list = []
17
16
 
18
17
  entries.forEach(entry => {
19
18
  list.push({
20
19
  generator: 'splashscreen',
21
- name: `splash-land-${ entry[ 0 ] }.png`,
20
+ name: `splash-land-${entry[0]}.png`,
22
21
  folder: 'src-cordova/res/screen/android',
23
- sizes: [
24
- [ entry[ 1 ], entry[ 2 ] ]
25
- ],
22
+ sizes: [[entry[1], entry[2]]],
26
23
  platform: 'cordova-android',
27
- density: `land-${ entry[ 0 ] }`
24
+ density: `land-${entry[0]}`
28
25
  })
29
26
 
30
27
  list.push({
31
28
  generator: 'splashscreen',
32
- name: `splash-port-${ entry[ 0 ] }.png`,
29
+ name: `splash-port-${entry[0]}.png`,
33
30
  folder: 'src-cordova/res/screen/android',
34
- sizes: [
35
- [ entry[ 2 ], entry[ 1 ] ]
36
- ],
31
+ sizes: [[entry[2], entry[1]]],
37
32
  platform: 'cordova-android',
38
- density: `port-${ entry[ 0 ] }`
33
+ density: `port-${entry[0]}`
39
34
  })
40
35
  })
41
36
 
42
37
  return list
43
38
  }
44
39
 
45
- function getIosIcon (name) {
46
- const [ ,size,multiplier ] = name.match(iosIconRegex)
40
+ function getIosIcon(name) {
41
+ const [, size, multiplier] = name.match(iosIconRegex)
47
42
 
48
43
  return {
49
44
  generator: 'png',
@@ -51,22 +46,20 @@ function getIosIcon (name) {
51
46
  folder: 'src-cordova/res/ios',
52
47
  sizes: [
53
48
  multiplier
54
- ? parseFloat(size) * parseInt(multiplier,10)
55
- : parseFloat(size)
49
+ ? Number.parseFloat(size) * Number.parseInt(multiplier, 10)
50
+ : Number.parseFloat(size)
56
51
  ],
57
52
  platform: 'cordova-ios',
58
53
  background: true
59
54
  }
60
55
  }
61
56
 
62
- function getIosSplashscreen (entry) {
57
+ function getIosSplashscreen(entry) {
63
58
  return {
64
59
  generator: 'splashscreen',
65
- name: entry[ 0 ],
60
+ name: entry[0],
66
61
  folder: 'src-cordova/res/screen/ios',
67
- sizes: [
68
- [ entry[ 1 ], entry[ 2 ] ]
69
- ],
62
+ sizes: [[entry[1], entry[2]]],
70
63
  platform: 'cordova-ios'
71
64
  }
72
65
  }
@@ -77,21 +70,21 @@ export default [
77
70
  ***************/
78
71
 
79
72
  ...[
80
- [ 'ldpi', 36 ],
81
- [ 'mdpi', 48 ],
82
- [ 'hdpi', 72 ],
83
- [ 'xhdpi', 96 ],
84
- [ 'xxhdpi', 144 ],
85
- [ 'xxxhdpi', 192 ],
73
+ ['ldpi', 36],
74
+ ['mdpi', 48],
75
+ ['hdpi', 72],
76
+ ['xhdpi', 96],
77
+ ['xxhdpi', 144],
78
+ ['xxxhdpi', 192]
86
79
  ].map(getAndroidIcon),
87
80
 
88
81
  ...getAndroidSplashscreens([
89
- [ 'ldpi', 320, 200 ],
90
- [ 'mdpi', 480, 320 ],
91
- [ 'hdpi', 800, 480 ],
92
- [ 'xhdpi', 1280, 720 ],
93
- [ 'xxhdpi', 1600, 960 ],
94
- [ 'xxxhdpi', 1920, 1280 ]
82
+ ['ldpi', 320, 200],
83
+ ['mdpi', 480, 320],
84
+ ['hdpi', 800, 480],
85
+ ['xhdpi', 1280, 720],
86
+ ['xxhdpi', 1600, 960],
87
+ ['xxxhdpi', 1920, 1280]
95
88
  ]),
96
89
 
97
90
  /**************
@@ -102,7 +95,7 @@ export default [
102
95
  generator: 'png',
103
96
  name: 'icon.png',
104
97
  folder: 'src-cordova/res/ios',
105
- sizes: [ 57 ],
98
+ sizes: [57],
106
99
  platform: 'cordova-ios',
107
100
  background: true
108
101
  },
@@ -110,7 +103,7 @@ export default [
110
103
  generator: 'png',
111
104
  name: 'icon@2x.png',
112
105
  folder: 'src-cordova/res/ios',
113
- sizes: [ 114 ],
106
+ sizes: [114],
114
107
  platform: 'cordova-ios',
115
108
  background: true
116
109
  },
@@ -147,13 +140,13 @@ export default [
147
140
  ].map(getIosIcon),
148
141
 
149
142
  ...[
150
- [ 'Default@2x~iphone~anyany.png', 1334, 1334 ],
151
- [ 'Default@2x~iphone~comany.png', 750, 1334 ],
152
- [ 'Default@2x~iphone~comcom.png', 1334, 750 ],
153
- [ 'Default@3x~iphone~anyany.png', 2208, 2208 ],
154
- [ 'Default@3x~iphone~anycom.png', 2208, 1242 ],
155
- [ 'Default@3x~iphone~comany.png', 1242, 2208 ],
156
- [ 'Default@2x~ipad~anyany.png', 2732, 2732 ],
157
- [ 'Default@2x~ipad~comany.png', 1278, 2732 ]
143
+ ['Default@2x~iphone~anyany.png', 1334, 1334],
144
+ ['Default@2x~iphone~comany.png', 750, 1334],
145
+ ['Default@2x~iphone~comcom.png', 1334, 750],
146
+ ['Default@3x~iphone~anyany.png', 2208, 2208],
147
+ ['Default@3x~iphone~anycom.png', 2208, 1242],
148
+ ['Default@3x~iphone~comany.png', 1242, 2208],
149
+ ['Default@2x~ipad~anyany.png', 2732, 2732],
150
+ ['Default@2x~ipad~comany.png', 1278, 2732]
158
151
  ].map(getIosSplashscreen)
159
152
  ]
@@ -0,0 +1,32 @@
1
+ import { existsSync } from 'node:fs'
2
+ import { resolveDir } from '../../utils/app-paths.js'
3
+
4
+ const dir = existsSync(resolveDir('src-electron/electron-assets'))
5
+ ? 'electron-assets' // q/app-vite v3+
6
+ : existsSync(resolveDir('src-electron/icons'))
7
+ ? 'icons' // q/app-vite v2 or q/app-webpack v4
8
+ : 'electron-assets' // fallback to q/app-webpack v3 specs
9
+
10
+ export default [
11
+ {
12
+ // macos (embedded icons)
13
+ generator: 'icns',
14
+ name: 'icon.icns',
15
+ folder: `src-electron/${dir}/icons`
16
+ },
17
+
18
+ {
19
+ // windows (embedded icon)
20
+ generator: 'ico',
21
+ name: 'icon.ico',
22
+ folder: `src-electron/${dir}/icons`
23
+ },
24
+
25
+ {
26
+ // tray icon (all platforms)
27
+ generator: 'png',
28
+ name: 'icon.png',
29
+ folder: `src-electron/${dir}/icons`,
30
+ sizes: [512]
31
+ }
32
+ ]
@@ -1,4 +1,3 @@
1
-
2
1
  import spaAssets from './spa.js'
3
2
  import pwaAssets from './pwa.js'
4
3
  import ssrAssets from './ssr.js'
@@ -0,0 +1,71 @@
1
+ import spaEntries from './spa.js'
2
+
3
+ /* def: width, height, pixel-ratio */
4
+ function getAppleLaunch(def) {
5
+ const media = `(device-width: ${def[0] / def[2]}px) and (device-height: ${def[1] / def[2]}px) and (-webkit-device-pixel-ratio: ${def[2]})`
6
+
7
+ return {
8
+ generator: 'splashscreen',
9
+ name: 'apple-launch-{size}.png',
10
+ folder: 'public/icons',
11
+ sizes: [[def[0], def[1]]],
12
+ tag: `${def[3]}\n<link rel="apple-touch-startup-image" media="${media}" href="icons/{name}">`
13
+ }
14
+ }
15
+
16
+ export default [
17
+ ...spaEntries,
18
+
19
+ {
20
+ generator: 'png',
21
+ name: 'apple-icon-{size}x{size}.png',
22
+ folder: 'public/icons',
23
+ background: true,
24
+ sizes: [120, 152, 167, 180]
25
+ // tag is auto-injected by @quasar/app
26
+ // <link rel="apple-touch-icon" sizes="{size}x{size}" href="icons/{name}">
27
+ },
28
+
29
+ {
30
+ generator: 'svg',
31
+ name: 'safari-pinned-tab.svg',
32
+ folder: 'public/icons'
33
+ // tag is auto-injected by @quasar/app
34
+ // <link rel="mask-icon" color="#..." href="icons/{name}">
35
+ },
36
+
37
+ {
38
+ generator: 'png',
39
+ name: 'ms-icon-{size}x{size}.png',
40
+ folder: 'public/icons',
41
+ sizes: [144]
42
+ // tag is auto-injected by @quasar/app
43
+ // <meta name="msapplication-TileImage" content="icons/{name}">
44
+ },
45
+
46
+ {
47
+ generator: 'png',
48
+ name: 'icon-{size}x{size}.png',
49
+ folder: 'public/icons',
50
+ sizes: [128, 192, 256, 384, 512]
51
+ // manifest icons
52
+ },
53
+
54
+ ...[
55
+ [1290, 2796, 3, '<!-- iPhone 14 Pro, 14 Pro Max -->'],
56
+ [1179, 2556, 3, '<!-- iPhone 14, 14 Pro -->'],
57
+ [1284, 2778, 3, '<!-- iPhone 12 Pro Max, 13 Pro Max -->'],
58
+ [1170, 2532, 3, '<!-- iPhone 12, 12 Pro, 13, 13 Pro -->'],
59
+ [1080, 2340, 3, '<!-- iPhone 13 Mini -->'],
60
+ [828, 1792, 2, '<!-- iPhone XR, 11 -->'],
61
+ [1125, 2436, 3, '<!-- iPhone X, XS, 12 mini, 11 Pro -->'],
62
+ [1242, 2688, 3, '<!-- iPhone XS Max, 11 Pro Max -->'],
63
+ [750, 1334, 2, '<!-- iPhone 8, 7, 6s, 6 -->'],
64
+ [1242, 2208, 3, '<!-- iPhone 8 Plus, 7 Plus, 6s Plus, 6 Plus -->'],
65
+ [1620, 2160, 2, '<!-- iPad 10.2" -->'],
66
+ [1536, 2048, 2, '<!-- iPad Mini, Air, 9.7" -->'],
67
+ [1668, 2224, 2, '<!-- iPad Pro 10.5" -->'],
68
+ [1668, 2388, 2, '<!-- iPad Pro 11" -->'],
69
+ [2048, 2732, 2, '<!-- iPad Pro 12.9" -->']
70
+ ].map(getAppleLaunch)
71
+ ]
@@ -1,10 +1,9 @@
1
-
2
1
  export default [
3
2
  {
4
3
  generator: 'png',
5
4
  name: 'favicon-{size}x{size}.png',
6
5
  folder: 'public/icons',
7
- sizes: [ 128, 96, 32, 16 ],
6
+ sizes: [128, 96, 32, 16],
8
7
  tag: `<link rel="icon" type="image/png" sizes="{size}x{size}" href="icons/{name}">`
9
8
  },
10
9
 
@@ -1,4 +1,3 @@
1
-
2
1
  import spaEntries from './spa.js'
3
2
 
4
- export default [ ...spaEntries ]
3
+ export default [...spaEntries]
@@ -1,14 +1,11 @@
1
-
2
- import { mountCordova, isCordovaFile, verifyCordova } from './mount-cordova.js'
1
+ import { isCordovaFile, mountCordova, verifyCordova } from './mount-cordova.js'
3
2
  import { mountTag } from './mount-tag.js'
4
3
 
5
- export function mount (files) {
4
+ export function mount(files) {
6
5
  mountCordova(files)
7
6
  mountTag(files)
8
7
  }
9
8
 
10
- export function verifyMount (file) {
11
- return isCordovaFile(file)
12
- ? verifyCordova(file)
13
- : ''
9
+ export function verifyMount(file) {
10
+ return isCordovaFile(file) ? verifyCordova(file) : ''
14
11
  }