u2a 1.0.0 → 2.1.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "u2a",
3
- "version": "1.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "URL to App - Turn any URL into a desktop application",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -6,7 +6,6 @@ const { getFavicon } = require('../utils/favicon');
6
6
  const { APPS_DIR, readDB, writeDB } = require('../utils/config');
7
7
  const Logger = require('../utils/logger');
8
8
  const os = require('os');
9
- const { isContext } = require('vm');
10
9
 
11
10
  const logger = new Logger('create');
12
11
 
@@ -194,24 +193,75 @@ function generateMainJs(domain, url, iconPath) {
194
193
  return `
195
194
  const { app, BrowserWindow, Menu, shell } = require('electron');
196
195
  const path = require('path');
196
+ const fs = require('fs');
197
+
198
+ const APP_DOMAIN = "${domain}";
199
+ const APP_URL = "${url}";
200
+ const APP_ICON_PATH = "${iconPath.replace(/\\/g, '\\\\')}";
197
201
 
198
202
  let mainWindow;
199
203
 
204
+ function logAppInfo() {
205
+ const packageJsonPath = path.join(__dirname, 'package.json');
206
+ let packageInfo = {};
207
+
208
+ try {
209
+ const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf-8');
210
+ packageInfo = JSON.parse(packageJsonContent);
211
+ } catch (error) {
212
+ console.error('Error reading package.json:', error.message);
213
+ }
214
+
215
+ console.log('\\n--------------------------------');
216
+ console.log(' APPLICATION INFORMATION');
217
+ console.log('--------------------------------');
218
+ console.log(\`Application: \${APP_DOMAIN}\`);
219
+ console.log(\`URL: \${APP_URL}\`);
220
+ console.log(\`Started at: \${new Date().toLocaleString()}\`);
221
+ console.log(\`App directory: \${__dirname}\`);
222
+ console.log(\`Icon path: \${APP_ICON_PATH}\`);
223
+
224
+ console.log('\\n PACKAGE INFO:');
225
+ console.log(\` - Name: \${packageInfo.name || 'N/A'}\`);
226
+ console.log(\` - Version: \${packageInfo.version || 'N/A'}\`);
227
+ console.log(\` - Description: \${packageInfo.description || 'N/A'}\`);
228
+ console.log(\` - Electron version: \${packageInfo.dependencies?.electron || 'N/A'}\`);
229
+
230
+ if (packageInfo.build) {
231
+ console.log('\\n BUILD CONFIG:');
232
+ console.log(\` - App ID: \${packageInfo.build.appId || 'N/A'}\`);
233
+ console.log(\` - Product Name: \${packageInfo.build.productName || 'N/A'}\`);
234
+ }
235
+
236
+ console.log('--------------------------------\\n');
237
+ }
238
+
200
239
  function createWindow() {
201
- app.setAppUserModelId("${domain}");
240
+ logAppInfo();
241
+
242
+ app.setAppUserModelId(APP_DOMAIN);
202
243
 
203
244
  mainWindow = new BrowserWindow({
204
245
  width: 1200,
205
246
  height: 800,
206
- title: "${domain}",
207
- icon: "${iconPath.replace(/\\/g, '\\\\')}",
247
+ title: APP_DOMAIN,
248
+ icon: APP_ICON_PATH,
208
249
  webPreferences: {
209
250
  nodeIntegration: false,
210
251
  contextIsolation: true
211
252
  }
212
253
  });
213
254
 
214
- mainWindow.loadURL("${url}");
255
+ mainWindow.loadURL(APP_URL);
256
+
257
+ mainWindow.webContents.on('context-menu', (e, params) => {
258
+ e.preventDefault();
259
+ mainWindow.webContents.executeJavaScript(\`
260
+ window.addEventListener('contextmenu', (e) => {
261
+ e.stopPropagation();
262
+ }, true);
263
+ \`);
264
+ });
215
265
 
216
266
  mainWindow.webContents.on('new-window', (event, url) => {
217
267
  event.preventDefault();
@@ -243,10 +293,23 @@ app.on('activate', () => {
243
293
  });
244
294
  `;
245
295
  }
296
+
297
+
246
298
  function generatePackageJson(domain, iconPath) {
299
+ const u2aPackagePath = path.resolve(__dirname, '../../package.json');
300
+
301
+ let u2aVersion = '1.0.0';
302
+ try {
303
+ const u2aPackageContent = fs.readFileSync(u2aPackagePath, 'utf8');
304
+ const u2aPackage = JSON.parse(u2aPackageContent);
305
+ u2aVersion = u2aPackage.version || u2aVersion;
306
+ } catch (error) {
307
+ logger.error('Error while fetching u2a package.json', error)
308
+ }
309
+
247
310
  return {
248
311
  name: `u2a-${domain}`,
249
- version: '1.0.0',
312
+ version: u2aVersion,
250
313
  description: `Web app for ${domain}`,
251
314
  main: 'main.js',
252
315
  scripts: {
@@ -267,7 +330,7 @@ async function createApp(url) {
267
330
  logger.info(`Creating application for ${url}`);
268
331
 
269
332
  try {
270
- url = normalizeUrl(url);
333
+ url = await normalizeUrl(url);
271
334
  const domain = getDomainName(url);
272
335
 
273
336
  const db = readDB();
@@ -10,7 +10,7 @@ const logger = new Logger('remove');
10
10
 
11
11
  async function removeApp(url) {
12
12
  try {
13
- const domain = getDomainName(normalizeUrl(url));
13
+ const domain = getDomainName(await normalizeUrl(url));
14
14
  const db = readDB();
15
15
 
16
16
  if (!db.hasOwnProperty(domain)) {
@@ -13,7 +13,7 @@ async function getFavicon(url) {
13
13
 
14
14
  try {
15
15
  const domain = getDomainName(url);
16
- const normalizedUrl = normalizeUrl(url);
16
+ const normalizedUrl = await normalizeUrl(url);
17
17
 
18
18
  const faviconUrl = `${normalizedUrl}/favicon.ico`;
19
19
  const iconResponse = await axios.get(faviconUrl, { responseType: 'arraybuffer' });
package/src/utils/url.js CHANGED
@@ -1,6 +1,13 @@
1
- function normalizeUrl(url) {
1
+ const axios = require('axios');
2
+
3
+ async function normalizeUrl(url) {
2
4
  if (!url.startsWith('http://') && !url.startsWith('https://')) {
3
- url = 'https://' + url;
5
+ try {
6
+ await axios.get('https://' + url);
7
+ url = 'https://' + url;
8
+ } catch (error) {
9
+ url = 'http://' + url;
10
+ }
4
11
  }
5
12
  return url;
6
13
  }
@@ -17,4 +24,4 @@ function getDomainName(url) {
17
24
  module.exports = {
18
25
  normalizeUrl,
19
26
  getDomainName
20
- };
27
+ };