electrify-web 1.0.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.
Files changed (129) hide show
  1. package/LICENSE.md +10 -0
  2. package/README.md +351 -0
  3. package/app/inject/_placeholder +0 -0
  4. package/app/lib/main.js +11772 -0
  5. package/app/lib/main.js.map +1 -0
  6. package/app/lib/preload.js +338 -0
  7. package/app/lib/preload.js.map +1 -0
  8. package/app/lib/static/login.css +57 -0
  9. package/app/lib/static/login.html +24 -0
  10. package/app/lib/static/login.js +10 -0
  11. package/app/nativefier.json +8 -0
  12. package/app/npm-shrinkwrap.json +1170 -0
  13. package/app/package.json +25 -0
  14. package/icon-scripts/convertToIcns +56 -0
  15. package/icon-scripts/convertToIco +39 -0
  16. package/icon-scripts/convertToIconset +68 -0
  17. package/icon-scripts/convertToPng +76 -0
  18. package/icon-scripts/convertToTrayIcon +32 -0
  19. package/lib/autologin/index.d.ts +25 -0
  20. package/lib/autologin/index.js +189 -0
  21. package/lib/autologin/index.js.map +1 -0
  22. package/lib/build/buildIcon.d.ts +6 -0
  23. package/lib/build/buildIcon.js +110 -0
  24. package/lib/build/buildIcon.js.map +1 -0
  25. package/lib/build/buildNativefierApp.d.ts +2 -0
  26. package/lib/build/buildNativefierApp.js +234 -0
  27. package/lib/build/buildNativefierApp.js.map +1 -0
  28. package/lib/build/prepareElectronApp.d.ts +15 -0
  29. package/lib/build/prepareElectronApp.js +220 -0
  30. package/lib/build/prepareElectronApp.js.map +1 -0
  31. package/lib/cli.d.ts +6 -0
  32. package/lib/cli.js +783 -0
  33. package/lib/cli.js.map +1 -0
  34. package/lib/config/index.d.ts +87 -0
  35. package/lib/config/index.js +460 -0
  36. package/lib/config/index.js.map +1 -0
  37. package/lib/constants.d.ts +11 -0
  38. package/lib/constants.js +58 -0
  39. package/lib/constants.js.map +1 -0
  40. package/lib/helpers/fsHelpers.d.ts +2 -0
  41. package/lib/helpers/fsHelpers.js +57 -0
  42. package/lib/helpers/fsHelpers.js.map +1 -0
  43. package/lib/helpers/helpers.d.ts +29 -0
  44. package/lib/helpers/helpers.js +225 -0
  45. package/lib/helpers/helpers.js.map +1 -0
  46. package/lib/helpers/iconShellHelpers.d.ts +5 -0
  47. package/lib/helpers/iconShellHelpers.js +91 -0
  48. package/lib/helpers/iconShellHelpers.js.map +1 -0
  49. package/lib/helpers/upgrade/executableHelpers.d.ts +2 -0
  50. package/lib/helpers/upgrade/executableHelpers.js +173 -0
  51. package/lib/helpers/upgrade/executableHelpers.js.map +1 -0
  52. package/lib/helpers/upgrade/plistInfoXMLHelpers.d.ts +2 -0
  53. package/lib/helpers/upgrade/plistInfoXMLHelpers.js +29 -0
  54. package/lib/helpers/upgrade/plistInfoXMLHelpers.js.map +1 -0
  55. package/lib/helpers/upgrade/rceditGet.d.ts +1 -0
  56. package/lib/helpers/upgrade/rceditGet.js +65 -0
  57. package/lib/helpers/upgrade/rceditGet.js.map +1 -0
  58. package/lib/helpers/upgrade/upgrade.d.ts +8 -0
  59. package/lib/helpers/upgrade/upgrade.js +193 -0
  60. package/lib/helpers/upgrade/upgrade.js.map +1 -0
  61. package/lib/infer/browsers/inferChromeVersion.d.ts +1 -0
  62. package/lib/infer/browsers/inferChromeVersion.js +73 -0
  63. package/lib/infer/browsers/inferChromeVersion.js.map +1 -0
  64. package/lib/infer/browsers/inferFirefoxVersion.d.ts +1 -0
  65. package/lib/infer/browsers/inferFirefoxVersion.js +61 -0
  66. package/lib/infer/browsers/inferFirefoxVersion.js.map +1 -0
  67. package/lib/infer/browsers/inferSafariVersion.d.ts +6 -0
  68. package/lib/infer/browsers/inferSafariVersion.js +96 -0
  69. package/lib/infer/browsers/inferSafariVersion.js.map +1 -0
  70. package/lib/infer/inferDefaults.d.ts +33 -0
  71. package/lib/infer/inferDefaults.js +272 -0
  72. package/lib/infer/inferDefaults.js.map +1 -0
  73. package/lib/infer/inferIcon.d.ts +1 -0
  74. package/lib/infer/inferIcon.js +116 -0
  75. package/lib/infer/inferIcon.js.map +1 -0
  76. package/lib/infer/inferOs.d.ts +4 -0
  77. package/lib/infer/inferOs.js +69 -0
  78. package/lib/infer/inferOs.js.map +1 -0
  79. package/lib/infer/inferTitle.d.ts +1 -0
  80. package/lib/infer/inferTitle.js +56 -0
  81. package/lib/infer/inferTitle.js.map +1 -0
  82. package/lib/integration-test.d.ts +1 -0
  83. package/lib/main.d.ts +11 -0
  84. package/lib/main.js +18 -0
  85. package/lib/main.js.map +1 -0
  86. package/lib/options/asyncConfig.d.ts +5 -0
  87. package/lib/options/asyncConfig.js +46 -0
  88. package/lib/options/asyncConfig.js.map +1 -0
  89. package/lib/options/fields/fields.d.ts +2 -0
  90. package/lib/options/fields/fields.js +32 -0
  91. package/lib/options/fields/fields.js.map +1 -0
  92. package/lib/options/fields/icon.d.ts +9 -0
  93. package/lib/options/fields/icon.js +106 -0
  94. package/lib/options/fields/icon.js.map +1 -0
  95. package/lib/options/fields/name.d.ts +9 -0
  96. package/lib/options/fields/name.js +59 -0
  97. package/lib/options/fields/name.js.map +1 -0
  98. package/lib/options/fields/userAgent.d.ts +10 -0
  99. package/lib/options/fields/userAgent.js +81 -0
  100. package/lib/options/fields/userAgent.js.map +1 -0
  101. package/lib/options/normalizeUrl.d.ts +1 -0
  102. package/lib/options/normalizeUrl.js +62 -0
  103. package/lib/options/normalizeUrl.js.map +1 -0
  104. package/lib/options/optionsMain.d.ts +6 -0
  105. package/lib/options/optionsMain.js +305 -0
  106. package/lib/options/optionsMain.js.map +1 -0
  107. package/lib/presets/index.d.ts +27 -0
  108. package/lib/presets/index.js +162 -0
  109. package/lib/presets/index.js.map +1 -0
  110. package/lib/pwa/index.d.ts +57 -0
  111. package/lib/pwa/index.js +241 -0
  112. package/lib/pwa/index.js.map +1 -0
  113. package/lib/security/index.d.ts +27 -0
  114. package/lib/security/index.js +202 -0
  115. package/lib/security/index.js.map +1 -0
  116. package/lib/updater/index.d.ts +34 -0
  117. package/lib/updater/index.js +264 -0
  118. package/lib/updater/index.js.map +1 -0
  119. package/lib/utils/parseUtils.d.ts +3 -0
  120. package/lib/utils/parseUtils.js +95 -0
  121. package/lib/utils/parseUtils.js.map +1 -0
  122. package/lib/utils/sanitizeFilename.d.ts +1 -0
  123. package/lib/utils/sanitizeFilename.js +53 -0
  124. package/lib/utils/sanitizeFilename.js.map +1 -0
  125. package/lib/wizard/index.d.ts +13 -0
  126. package/lib/wizard/index.js +252 -0
  127. package/lib/wizard/index.js.map +1 -0
  128. package/npm-shrinkwrap.json +8144 -0
  129. package/package.json +148 -0
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ /**
3
+ * 自动更新系统
4
+ * 为生成的应用添加自动更新能力
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.generateUpdaterConfig = generateUpdaterConfig;
41
+ exports.generateAutoUpdateCode = generateAutoUpdateCode;
42
+ exports.generateSimpleUpdateChecker = generateSimpleUpdateChecker;
43
+ exports.injectAutoUpdate = injectAutoUpdate;
44
+ exports.parseUpdateConfig = parseUpdateConfig;
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
47
+ const log = __importStar(require("loglevel"));
48
+ /**
49
+ * 生成 electron-updater 配置
50
+ */
51
+ function generateUpdaterConfig(config) {
52
+ const baseConfig = {
53
+ channel: config.channel || 'latest',
54
+ allowDowngrade: config.allowDowngrade || false,
55
+ allowPrerelease: config.allowPrerelease || false,
56
+ };
57
+ switch (config.provider) {
58
+ case 'github':
59
+ return {
60
+ ...baseConfig,
61
+ provider: 'github',
62
+ owner: config.owner,
63
+ repo: config.repo,
64
+ };
65
+ case 'generic':
66
+ return {
67
+ ...baseConfig,
68
+ provider: 'generic',
69
+ url: config.url,
70
+ };
71
+ case 's3':
72
+ return {
73
+ ...baseConfig,
74
+ provider: 's3',
75
+ bucket: config.url,
76
+ };
77
+ default:
78
+ return baseConfig;
79
+ }
80
+ }
81
+ /**
82
+ * 生成自动更新的主进程代码
83
+ */
84
+ function generateAutoUpdateCode(config) {
85
+ const configJson = JSON.stringify(generateUpdaterConfig(config), null, 2);
86
+ return `
87
+ // Auto-update functionality
88
+ const { autoUpdater } = require('electron-updater');
89
+ const { dialog, app } = require('electron');
90
+
91
+ // 配置更新器
92
+ autoUpdater.autoDownload = false;
93
+ autoUpdater.autoInstallOnAppQuit = true;
94
+
95
+ // 更新配置
96
+ const updateConfig = ${configJson};
97
+
98
+ // 设置更新源
99
+ if (updateConfig.provider === 'github') {
100
+ autoUpdater.setFeedURL({
101
+ provider: 'github',
102
+ owner: updateConfig.owner,
103
+ repo: updateConfig.repo,
104
+ });
105
+ } else if (updateConfig.provider === 'generic') {
106
+ autoUpdater.setFeedURL({
107
+ provider: 'generic',
108
+ url: updateConfig.url,
109
+ });
110
+ }
111
+
112
+ // 检查更新
113
+ function checkForUpdates() {
114
+ autoUpdater.checkForUpdates().catch((err) => {
115
+ console.log('Update check failed:', err.message);
116
+ });
117
+ }
118
+
119
+ // 更新事件处理
120
+ autoUpdater.on('update-available', (info) => {
121
+ dialog.showMessageBox({
122
+ type: 'info',
123
+ title: 'Update Available',
124
+ message: \`A new version (\${info.version}) is available. Download now?\`,
125
+ buttons: ['Yes', 'Later'],
126
+ }).then((result) => {
127
+ if (result.response === 0) {
128
+ autoUpdater.downloadUpdate();
129
+ }
130
+ });
131
+ });
132
+
133
+ autoUpdater.on('update-downloaded', (info) => {
134
+ dialog.showMessageBox({
135
+ type: 'info',
136
+ title: 'Update Ready',
137
+ message: 'Update downloaded. The app will restart to install.',
138
+ buttons: ['Restart Now', 'Later'],
139
+ }).then((result) => {
140
+ if (result.response === 0) {
141
+ autoUpdater.quitAndInstall();
142
+ }
143
+ });
144
+ });
145
+
146
+ autoUpdater.on('error', (err) => {
147
+ console.log('Auto-update error:', err.message);
148
+ });
149
+
150
+ // 应用启动后检查更新
151
+ app.whenReady().then(() => {
152
+ // 延迟检查,避免影响启动速度
153
+ setTimeout(checkForUpdates, 10000);
154
+
155
+ // 每小时检查一次
156
+ setInterval(checkForUpdates, 60 * 60 * 1000);
157
+ });
158
+
159
+ module.exports = { checkForUpdates };
160
+ `;
161
+ }
162
+ /**
163
+ * 生成简化版更新检查代码(不依赖 electron-updater)
164
+ */
165
+ function generateSimpleUpdateChecker(updateUrl) {
166
+ return `
167
+ // Simple update checker (no electron-updater dependency)
168
+ const { net, dialog, shell, app } = require('electron');
169
+
170
+ const UPDATE_CHECK_URL = '${updateUrl}';
171
+ const CURRENT_VERSION = app.getVersion();
172
+
173
+ async function checkForUpdates() {
174
+ try {
175
+ const request = net.request(UPDATE_CHECK_URL);
176
+
177
+ request.on('response', (response) => {
178
+ let data = '';
179
+ response.on('data', (chunk) => { data += chunk; });
180
+ response.on('end', () => {
181
+ try {
182
+ const info = JSON.parse(data);
183
+ if (info.version && info.version !== CURRENT_VERSION) {
184
+ showUpdateDialog(info);
185
+ }
186
+ } catch (e) {
187
+ console.log('Failed to parse update info:', e.message);
188
+ }
189
+ });
190
+ });
191
+
192
+ request.on('error', (err) => {
193
+ console.log('Update check failed:', err.message);
194
+ });
195
+
196
+ request.end();
197
+ } catch (err) {
198
+ console.log('Update check error:', err.message);
199
+ }
200
+ }
201
+
202
+ function showUpdateDialog(info) {
203
+ dialog.showMessageBox({
204
+ type: 'info',
205
+ title: 'Update Available',
206
+ message: \`A new version (\${info.version}) is available.\\n\\n\${info.releaseNotes || ''}\`,
207
+ buttons: ['Download', 'Later'],
208
+ }).then((result) => {
209
+ if (result.response === 0 && info.downloadUrl) {
210
+ shell.openExternal(info.downloadUrl);
211
+ }
212
+ });
213
+ }
214
+
215
+ // 启动后检查更新
216
+ setTimeout(checkForUpdates, 10000);
217
+
218
+ // 每 6 小时检查一次
219
+ setInterval(checkForUpdates, 6 * 60 * 60 * 1000);
220
+
221
+ module.exports = { checkForUpdates };
222
+ `;
223
+ }
224
+ /**
225
+ * 将更新代码注入到应用中
226
+ */
227
+ function injectAutoUpdate(appPath, config) {
228
+ const updateCode = typeof config === 'string'
229
+ ? generateSimpleUpdateChecker(config)
230
+ : generateAutoUpdateCode(config);
231
+ const updateFilePath = path.join(appPath, 'lib', 'autoUpdate.js');
232
+ fs.writeFileSync(updateFilePath, updateCode);
233
+ // 修改 main.js 引入更新模块
234
+ const mainJsPath = path.join(appPath, 'lib', 'main.js');
235
+ if (fs.existsSync(mainJsPath)) {
236
+ let mainJs = fs.readFileSync(mainJsPath, 'utf-8');
237
+ if (!mainJs.includes('autoUpdate')) {
238
+ mainJs = `require('./autoUpdate');\n${mainJs}`;
239
+ fs.writeFileSync(mainJsPath, mainJs);
240
+ log.debug('Auto-update module injected into main.js');
241
+ }
242
+ }
243
+ }
244
+ /**
245
+ * 解析更新配置字符串
246
+ * 格式: github:owner/repo 或 https://update-server.com/updates
247
+ */
248
+ function parseUpdateConfig(configStr) {
249
+ if (configStr.startsWith('github:')) {
250
+ const [owner, repo] = configStr.slice(7).split('/');
251
+ return {
252
+ provider: 'github',
253
+ owner,
254
+ repo,
255
+ };
256
+ }
257
+ if (configStr.startsWith('http://') || configStr.startsWith('https://')) {
258
+ // 简单 URL,使用简化版更新检查
259
+ return configStr;
260
+ }
261
+ // 默认返回原始字符串作为 URL
262
+ return configStr;
263
+ }
264
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/updater/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBH,sDA8BC;AAKD,wDA8EC;AAKD,kEA0DC;AAKD,4CAqBC;AAMD,8CAiBC;AAxPD,uCAAyB;AACzB,2CAA6B;AAC7B,8CAAgC;AAkBhC;;GAEG;AACH,SAAgB,qBAAqB,CAAC,MAAoB;IACxD,MAAM,UAAU,GAA4B;QAC1C,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,QAAQ;QACnC,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,KAAK;QAC9C,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,KAAK;KACjD,CAAC;IAEF,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO;gBACL,GAAG,UAAU;gBACb,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,GAAG,UAAU;gBACb,QAAQ,EAAE,SAAS;gBACnB,GAAG,EAAE,MAAM,CAAC,GAAG;aAChB,CAAC;QACJ,KAAK,IAAI;YACP,OAAO;gBACL,GAAG,UAAU;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,MAAM,CAAC,GAAG;aACnB,CAAC;QACJ;YACE,OAAO,UAAU,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CAAC,MAAoB;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAE1E,OAAO;;;;;;;;;;uBAUc,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgEhC,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B,CAAC,SAAiB;IAC3D,OAAO;;;;4BAImB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDpC,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAC9B,OAAe,EACf,MAA6B;IAE7B,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,QAAQ;QAC3C,CAAC,CAAC,2BAA2B,CAAC,MAAM,CAAC;QACrC,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAEnC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAClE,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAE7C,oBAAoB;IACpB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACxD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACnC,MAAM,GAAG,6BAA6B,MAAM,EAAE,CAAC;YAC/C,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACrC,GAAG,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,SAAiB;IACjD,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpD,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,KAAK;YACL,IAAI;SACL,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACxE,mBAAmB;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,kBAAkB;IAClB,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function parseBoolean(val: boolean | string | number | undefined, _default: boolean): boolean;
2
+ export declare function parseBooleanOrString(val: string): boolean | string;
3
+ export declare function parseJson<Type>(val: string): Type | undefined;
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.parseBoolean = parseBoolean;
37
+ exports.parseBooleanOrString = parseBooleanOrString;
38
+ exports.parseJson = parseJson;
39
+ const log = __importStar(require("loglevel"));
40
+ const helpers_1 = require("../helpers/helpers");
41
+ function parseBoolean(val, _default) {
42
+ if (val === undefined) {
43
+ return _default;
44
+ }
45
+ try {
46
+ if (typeof val === 'boolean') {
47
+ return val;
48
+ }
49
+ val = String(val);
50
+ switch (val.toLocaleLowerCase()) {
51
+ case 'true':
52
+ case '1':
53
+ case 'yes':
54
+ return true;
55
+ case 'false':
56
+ case '0':
57
+ case 'no':
58
+ return false;
59
+ default:
60
+ return _default;
61
+ }
62
+ }
63
+ catch {
64
+ return _default;
65
+ }
66
+ }
67
+ function parseBooleanOrString(val) {
68
+ switch (val) {
69
+ case 'true':
70
+ return true;
71
+ case 'false':
72
+ return false;
73
+ default:
74
+ return val;
75
+ }
76
+ }
77
+ function parseJson(val) {
78
+ if (!val)
79
+ return undefined;
80
+ try {
81
+ return JSON.parse(val);
82
+ }
83
+ catch (err) {
84
+ const windowsShellHint = (0, helpers_1.isWindows)()
85
+ ? `\n In particular, Windows cmd doesn't have single quotes, so you have to use only double-quotes plus escaping: "{\\"someKey\\": \\"someValue\\"}"`
86
+ : '';
87
+ log.error(`Unable to parse JSON value: ${val}\n` +
88
+ `JSON should look like {"someString": "someValue", "someBoolean": true, "someArray": [1,2,3]}.\n` +
89
+ ` - Only double quotes are allowed, single quotes are not.\n` +
90
+ ` - Learn how your shell behaves and escapes characters.${windowsShellHint}\n` +
91
+ ` - If unsure, validate your JSON using an online service.`);
92
+ throw err;
93
+ }
94
+ }
95
+ //# sourceMappingURL=parseUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseUtils.js","sourceRoot":"","sources":["../../src/utils/parseUtils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,oCA2BC;AAED,oDASC;AAED,8BAkBC;AA9DD,8CAAgC;AAEhC,gDAA+C;AAE/C,SAAgB,YAAY,CAC1B,GAA0C,EAC1C,QAAiB;IAEjB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,CAAC;QACH,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,GAAG,CAAC;QACb,CAAC;QACD,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,QAAQ,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAChC,KAAK,MAAM,CAAC;YACZ,KAAK,GAAG,CAAC;YACT,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC;YACd,KAAK,OAAO,CAAC;YACb,KAAK,GAAG,CAAC;YACT,KAAK,IAAI;gBACP,OAAO,KAAK,CAAC;YACf;gBACE,OAAO,QAAQ,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAgB,oBAAoB,CAAC,GAAW;IAC9C,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,IAAI,CAAC;QACd,KAAK,OAAO;YACV,OAAO,KAAK,CAAC;QACf;YACE,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAgB,SAAS,CAAO,GAAW;IACzC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAS,CAAC;IACjC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,gBAAgB,GAAG,IAAA,mBAAS,GAAE;YAClC,CAAC,CAAC,qJAAqJ;YACvJ,CAAC,CAAC,EAAE,CAAC;QAEP,GAAG,CAAC,KAAK,CACP,+BAA+B,GAAG,IAAI;YACpC,iGAAiG;YACjG,6DAA6D;YAC7D,0DAA0D,gBAAgB,IAAI;YAC9E,2DAA2D,CAC9D,CAAC;QACF,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function sanitizeFilename(platform: string | undefined, filenameToSanitize: string): string;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.sanitizeFilename = sanitizeFilename;
37
+ const log = __importStar(require("loglevel"));
38
+ const sanitize = require("sanitize-filename");
39
+ const constants_1 = require("../constants");
40
+ function sanitizeFilename(platform, filenameToSanitize) {
41
+ let result = sanitize(filenameToSanitize);
42
+ // spaces will cause problems with Ubuntu when pinned to the dock
43
+ if (platform === 'linux') {
44
+ result = result.replace(/[\s\u200e\u200f]/g, '');
45
+ }
46
+ if (!result || result === '') {
47
+ result = constants_1.DEFAULT_APP_NAME;
48
+ log.warn('Falling back to default app name as result of filename sanitization. Use flag "--name" to set a name');
49
+ }
50
+ log.debug(`Sanitized filename for ${filenameToSanitize} : ${result}`);
51
+ return result;
52
+ }
53
+ //# sourceMappingURL=sanitizeFilename.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizeFilename.js","sourceRoot":"","sources":["../../src/utils/sanitizeFilename.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,4CAmBC;AAxBD,8CAAgC;AAChC,8CAA+C;AAE/C,4CAAgD;AAEhD,SAAgB,gBAAgB,CAC9B,QAA4B,EAC5B,kBAA0B;IAE1B,IAAI,MAAM,GAAW,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAElD,iEAAiE;IACjE,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC7B,MAAM,GAAG,4BAAgB,CAAC;QAC1B,GAAG,CAAC,IAAI,CACN,sGAAsG,CACvG,CAAC;IACJ,CAAC;IACD,GAAG,CAAC,KAAK,CAAC,0BAA0B,kBAAkB,MAAM,MAAM,EAAE,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 交互式向导模式
3
+ * 通过问答方式引导用户配置应用
4
+ */
5
+ import { RawOptions } from '../../shared/src/options/model';
6
+ /**
7
+ * 运行交互式向导
8
+ */
9
+ export declare function runWizard(): Promise<RawOptions>;
10
+ /**
11
+ * 快速模式 - 只询问必要问题
12
+ */
13
+ export declare function runQuickWizard(url?: string): Promise<RawOptions>;