From 785481036e4b3d2aecf9f98b798b8360aeea44c0 Mon Sep 17 00:00:00 2001 From: Milan Burda Date: Thu, 13 Jun 2019 09:11:11 +0200 Subject: [PATCH] fix: app.getAppPath() returning default-app path for files or directories without package.json --- default_app/main.ts | 8 ++++++-- spec-main/api-app-spec.ts | 26 +++++++++++++++++++++++++ spec/fixtures/api/app-path/lib/index.js | 10 ++++++++++ spec/fixtures/api/app-path/package.json | 4 ++++ 4 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 spec/fixtures/api/app-path/lib/index.js create mode 100644 spec/fixtures/api/app-path/package.json diff --git a/default_app/main.ts b/default_app/main.ts index 6d2ec90c045e7..581aa70e017ce 100644 --- a/default_app/main.ts +++ b/default_app/main.ts @@ -85,7 +85,8 @@ function loadApplicationPackage (packagePath: string) { // Override app name and version. packagePath = path.resolve(packagePath) const packageJsonPath = path.join(packagePath, 'package.json') - if (fs.existsSync(packageJsonPath)) { + const hasPackageJson = fs.existsSync(packageJsonPath) + if (hasPackageJson) { let packageJson try { packageJson = require(packageJsonPath) @@ -106,7 +107,10 @@ function loadApplicationPackage (packagePath: string) { } try { - Module._resolveFilename(packagePath, module, true) + const filePath = Module._resolveFilename(packagePath, module, true) + if (!hasPackageJson) { + app._setDefaultAppPaths(path.dirname(filePath)) + } } catch (e) { showErrorMessage(`Unable to find Electron app at ${packagePath}\n\n${e.message}`) return diff --git a/spec-main/api-app-spec.ts b/spec-main/api-app-spec.ts index 3eae865d3ab32..0489cb7edb4ce 100644 --- a/spec-main/api-app-spec.ts +++ b/spec-main/api-app-spec.ts @@ -645,6 +645,32 @@ describe('app module', () => { }) }) + describe('getAppPath', () => { + it('works for directories with package.json', async () => { + const { appPath } = await runTestApp('app-path') + const expectedAppPath = path.resolve(fixturesPath, 'api/app-path') + expect(appPath).to.equal(expectedAppPath) + }) + + it('works for directories with index.js', async () => { + const { appPath } = await runTestApp('app-path/lib') + const expectedAppPath = path.resolve(fixturesPath, 'api/app-path/lib') + expect(appPath).to.equal(expectedAppPath) + }) + + it('works for files without extension', async () => { + const { appPath } = await runTestApp('app-path/lib/index') + const expectedAppPath = path.resolve(fixturesPath, 'api/app-path/lib') + expect(appPath).to.equal(expectedAppPath) + }) + + it('works for files', async () => { + const { appPath } = await runTestApp('app-path/lib/index.js') + const expectedAppPath = path.resolve(fixturesPath, 'api/app-path/lib') + expect(appPath).to.equal(expectedAppPath) + }) + }) + describe('getPath(name)', () => { it('returns paths that exist', () => { const paths = [ diff --git a/spec/fixtures/api/app-path/lib/index.js b/spec/fixtures/api/app-path/lib/index.js new file mode 100644 index 0000000000000..d1a5732edca51 --- /dev/null +++ b/spec/fixtures/api/app-path/lib/index.js @@ -0,0 +1,10 @@ +const { app } = require('electron') + +const payload = { + appPath: app.getAppPath() +} + +process.stdout.write(JSON.stringify(payload)) +process.stdout.end() + +process.exit() diff --git a/spec/fixtures/api/app-path/package.json b/spec/fixtures/api/app-path/package.json new file mode 100644 index 0000000000000..8f9e09dbdabb2 --- /dev/null +++ b/spec/fixtures/api/app-path/package.json @@ -0,0 +1,4 @@ +{ + "name": "app-path", + "main": "lib/index.js" +}