diff --git a/app/lib/__fixtures__/nestedfolders.js b/app/backend/__fixtures__/nestedfolders.js similarity index 86% rename from app/lib/__fixtures__/nestedfolders.js rename to app/backend/__fixtures__/nestedfolders.js index 9b3885286f..f4c1dca0ed 100644 --- a/app/lib/__fixtures__/nestedfolders.js +++ b/app/backend/__fixtures__/nestedfolders.js @@ -1,4 +1,6 @@ -import {TYPE_REQUEST_GROUP, TYPE_REQUEST, TYPE_WORKSPACE} from '../database'; +'use strict'; + +const {TYPE_REQUEST_GROUP, TYPE_REQUEST, TYPE_WORKSPACE} = require('../database'); module.exports[TYPE_WORKSPACE] = [{ _id: 'wrk_1', diff --git a/app/lib/__tests__/cookies.test.js b/app/backend/__tests__/cookies.test.js similarity index 89% rename from app/lib/__tests__/cookies.test.js rename to app/backend/__tests__/cookies.test.js index 9b2c8e11f1..76b0e186e4 100644 --- a/app/lib/__tests__/cookies.test.js +++ b/app/backend/__tests__/cookies.test.js @@ -1,6 +1,8 @@ -import {CookieJar} from 'tough-cookie'; -import request from 'request'; -import * as cookieUtils from '../cookies'; +'use strict'; + +const {CookieJar} = require('tough-cookie'); +const request = require('request'); +const cookieUtils = require('../cookies'); describe('jarFromCookies()', () => { it('returns valid cookies', done => { diff --git a/app/lib/__tests__/database.test.js b/app/backend/__tests__/database.test.js similarity index 96% rename from app/lib/__tests__/database.test.js rename to app/backend/__tests__/database.test.js index 0ddb2a5ee0..4b7d7f7d59 100644 --- a/app/lib/__tests__/database.test.js +++ b/app/backend/__tests__/database.test.js @@ -1,5 +1,7 @@ -import * as db from '../database'; -import {PREVIEW_MODE_SOURCE} from '../../lib/previewModes'; +'use strict'; + +const db = require('../database'); +const {PREVIEW_MODE_SOURCE} = require('backend/previewModes'); function loadFixture (name) { const fixtures = require(`../__fixtures__/${name}`); diff --git a/app/lib/__tests__/network.test.js b/app/backend/__tests__/network.test.js similarity index 95% rename from app/lib/__tests__/network.test.js rename to app/backend/__tests__/network.test.js index 2f6694b31b..76ba7388f5 100644 --- a/app/lib/__tests__/network.test.js +++ b/app/backend/__tests__/network.test.js @@ -1,7 +1,9 @@ -import * as networkUtils from '../network'; -import * as db from '../database'; -import nock from 'nock'; -import {getRenderedRequest} from '../render'; +'use strict'; + +const networkUtils = require('../network'); +const db = require('../database'); +const nock = require('nock'); +const {getRenderedRequest} = require('../render'); describe('buildRequestConfig()', () => { beforeEach(() => db.initDB({inMemoryOnly: true}, true)); diff --git a/app/lib/__tests__/querystring.test.js b/app/backend/__tests__/querystring.test.js similarity index 97% rename from app/lib/__tests__/querystring.test.js rename to app/backend/__tests__/querystring.test.js index abb1174932..4c95d0fd52 100644 --- a/app/lib/__tests__/querystring.test.js +++ b/app/backend/__tests__/querystring.test.js @@ -1,4 +1,6 @@ -import * as querystringUtils from '../querystring'; +'use strict'; + +const querystringUtils = require('../querystring'); describe('getBasicAuthHeader()', () => { it('gets joiner for bare URL', () => { diff --git a/app/lib/__tests__/render.test.js b/app/backend/__tests__/render.test.js similarity index 96% rename from app/lib/__tests__/render.test.js rename to app/backend/__tests__/render.test.js index f78767c344..39fbfa1245 100644 --- a/app/lib/__tests__/render.test.js +++ b/app/backend/__tests__/render.test.js @@ -1,5 +1,7 @@ -import * as render from '../render'; -import {TYPE_ENVIRONMENT, TYPE_REQUEST_GROUP} from '../database/index'; +'use strict'; + +const render = require('../render'); +const {TYPE_ENVIRONMENT, TYPE_REQUEST_GROUP} = require('../database/index'); jest.mock('electron'); diff --git a/app/lib/__tests__/util.test.js b/app/backend/__tests__/util.test.js similarity index 97% rename from app/lib/__tests__/util.test.js rename to app/backend/__tests__/util.test.js index 33b953df72..4516ba19a3 100644 --- a/app/lib/__tests__/util.test.js +++ b/app/backend/__tests__/util.test.js @@ -1,4 +1,6 @@ -import * as util from '../util'; +'use strict'; + +const util = require('../util'); describe('getBasicAuthHeader()', () => { it('succeed with username and password', () => { diff --git a/app/lib/analytics.js b/app/backend/analytics.js similarity index 71% rename from app/lib/analytics.js rename to app/backend/analytics.js index 9a326718aa..3fe77be3d7 100644 --- a/app/lib/analytics.js +++ b/app/backend/analytics.js @@ -1,12 +1,14 @@ -import Analytics from 'analytics-node'; -import {getAppVersion} from './appInfo'; -import * as db from './database'; -import {SEGMENT_WRITE_KEY} from './constants'; +'use strict'; + +const Analytics = require('analytics-node'); +const {getAppVersion} = require('./appInfo'); +const db = require('./database'); +const {SEGMENT_WRITE_KEY} = require('./constants'); let analytics = null; let userId = null; -export function initAnalytics () { +module.exports.initAnalytics = () => { return new Promise((resolve, reject) => { analytics = new Analytics(SEGMENT_WRITE_KEY); @@ -15,7 +17,7 @@ export function initAnalytics () { userId = stats._id; // Recurse now that we have a userId - return initAnalytics(); + return module.exports.initAnalytics(); }).then(resolve, reject); } @@ -33,9 +35,9 @@ export function initAnalytics () { console.log(`-- Analytics Initialized for ${userId} --`); resolve(); }); -} +}; -export function trackEvent (event, properties = {}) { +module.exports.trackEvent = (event, properties = {}) => { // Don't track events if we haven't set them up yet if (analytics) { // Add base properties @@ -46,4 +48,4 @@ export function trackEvent (event, properties = {}) { analytics.track({userId, event, properties}); } -} +}; diff --git a/app/backend/appInfo.js b/app/backend/appInfo.js new file mode 100644 index 0000000000..90935cc3ff --- /dev/null +++ b/app/backend/appInfo.js @@ -0,0 +1,23 @@ +'use strict'; + +const appJson = require('../package.json'); + +module.exports.getAppVersion = () => { + return appJson.version; +}; + +module.exports.getAppLongName = () => { + return appJson.longName; +}; + +module.exports.getAppName = () => { + return appJson.productName; +}; + +module.exports.isMac = () => { + return process.platform === 'darwin'; +}; + +module.exports.isDevelopment = () => { + return process.env.INSOMNIA_ENV === 'development'; +}; diff --git a/app/lib/constants.js b/app/backend/constants.js similarity index 84% rename from app/lib/constants.js rename to app/backend/constants.js index 476e4f43dc..32230fc97c 100644 --- a/app/lib/constants.js +++ b/app/backend/constants.js @@ -1,58 +1,52 @@ -import {isDevelopment} from './appInfo'; -import {isMac} from './appInfo'; +'use strict'; + +const {isDevelopment} = require('./appInfo'); +const {isMac} = require('./appInfo'); // Global Stuff -export const LOCALSTORAGE_KEY = 'insomnia.state'; -export const DB_PERSIST_INTERVAL = 1000 * 60 * 10; -export const DEBOUNCE_MILLIS = 100; -export const REQUEST_TIME_TO_SHOW_COUNTER = 1; // Seconds -export const CHECK_FOR_UPDATES_INTERVAL = 1000 * 60 * 60 * 3; // 3 hours -export const CHANGELOG_URL = 'https://changelog.insomnia.rest/changelog.json'; -export const STATUS_CODE_PEBKAC = -333; -export const MOD_SYM = isMac() ? '⌘' : 'ctrl+'; -export const SEGMENT_WRITE_KEY = isDevelopment() ? +module.exports.LOCALSTORAGE_KEY = 'insomnia.state'; +module.exports.DB_PERSIST_INTERVAL = 1000 * 60 * 10; +module.exports.DEBOUNCE_MILLIS = 100; +module.exports.REQUEST_TIME_TO_SHOW_COUNTER = 1; // Seconds +module.exports.CHECK_FOR_UPDATES_INTERVAL = 1000 * 60 * 60 * 3; // 3 hours +module.exports.CHANGELOG_URL = 'https://changelog.insomnia.rest/changelog.json'; +module.exports.STATUS_CODE_PEBKAC = -333; +module.exports.MOD_SYM = isMac() ? '⌘' : 'ctrl+'; +module.exports.SEGMENT_WRITE_KEY = isDevelopment() ? 'z7fwuyxxTragtISwExCNnoqUlWZbr4Sy' : 'DlRubvWRIqAyzhLAQ5Lea1nXdIAsEoD2'; // UI Stuff -export const MAX_SIDEBAR_REMS = 35; -export const MIN_SIDEBAR_REMS = 0.75; -export const COLLAPSE_SIDEBAR_REMS = 4; -export const SIDEBAR_SKINNY_REMS = 10; -export const MAX_PANE_WIDTH = 0.99; -export const MIN_PANE_WIDTH = 0.01; -export const DEFAULT_PANE_WIDTH = 0.5; -export const DEFAULT_SIDEBAR_WIDTH = 19; +module.exports.MAX_SIDEBAR_REMS = 35; +module.exports.MIN_SIDEBAR_REMS = 0.75; +module.exports.COLLAPSE_SIDEBAR_REMS = 4; +module.exports.SIDEBAR_SKINNY_REMS = 10; +module.exports.MAX_PANE_WIDTH = 0.99; +module.exports.MIN_PANE_WIDTH = 0.01; +module.exports.DEFAULT_PANE_WIDTH = 0.5; +module.exports.DEFAULT_SIDEBAR_WIDTH = 19; // HTTP Methods -export const METHOD_GET = 'GET'; -export const METHOD_POST = 'POST'; -export const METHOD_PUT = 'PUT'; -export const METHOD_PATCH = 'PATCH'; -export const METHOD_DELETE = 'DELETE'; -export const METHOD_OPTIONS = 'OPTIONS'; -export const METHOD_HEAD = 'HEAD'; +module.exports.METHOD_GET = 'GET'; +module.exports.METHOD_POST = 'POST'; +module.exports.METHOD_PUT = 'PUT'; +module.exports.METHOD_PATCH = 'PATCH'; +module.exports.METHOD_DELETE = 'DELETE'; +module.exports.METHOD_OPTIONS = 'OPTIONS'; +module.exports.METHOD_HEAD = 'HEAD'; -export const METHODS = [ - METHOD_GET, - METHOD_POST, - METHOD_PUT, - METHOD_DELETE, - METHOD_PATCH, - METHOD_OPTIONS, - METHOD_HEAD +module.exports.METHODS = [ + module.exports.METHOD_GET, + module.exports.METHOD_POST, + module.exports.METHOD_PUT, + module.exports.METHOD_DELETE, + module.exports.METHOD_PATCH, + module.exports.METHOD_OPTIONS, + module.exports.METHOD_HEAD ]; -// export const MODAL_WORKSPACE_RENAME = 'workspace.update.name'; -// export const MODAL_REQUEST_GROUP_RENAME = 'requestGroup.update.name'; -// export const MODAL_REQUEST_RENAME = 'request.update.name'; -// export const MODAL_REQUEST_SWITCHER = 'request.action.switch'; -// export const MODAL_CURL_EXPORT = 'request.curlExport'; -// export const MODAL_ENVIRONMENT_EDITOR = 'environment.edit'; -// export const MODAL_SETTINGS = 'settings'; - // Sourced from https://developer.mozilla.org/en-US/docs/Web/HTTP/Status -export const RESPONSE_CODE_DESCRIPTIONS = { +module.exports.RESPONSE_CODE_DESCRIPTIONS = { // 100s diff --git a/app/backend/contentTypes.js b/app/backend/contentTypes.js new file mode 100644 index 0000000000..4b2d5842b3 --- /dev/null +++ b/app/backend/contentTypes.js @@ -0,0 +1,32 @@ +'use strict'; + +module.exports.CONTENT_TYPE_JSON = 'application/json'; +module.exports.CONTENT_TYPE_XML = 'application/xml'; +module.exports.CONTENT_TYPE_TEXT = 'text/plain'; +module.exports.CONTENT_TYPE_FORM_URLENCODED = 'application/x-www-form-urlencoded'; +module.exports.CONTENT_TYPE_OTHER = ''; + +const contentTypeMap = { + [module.exports.CONTENT_TYPE_JSON]: 'JSON', + [module.exports.CONTENT_TYPE_XML]: 'XML', + [module.exports.CONTENT_TYPE_FORM_URLENCODED]: 'Form Encoded', + [module.exports.CONTENT_TYPE_TEXT]: 'Plain Text', + [module.exports.CONTENT_TYPE_OTHER]: 'Other' +}; + +module.exports.CONTENT_TYPES = Object.keys(contentTypeMap); + +/** + * Get the friendly name for a given content type + * + * @param contentType + * @returns {*|string} + */ +module.exports.getContentTypeName = contentType => { + return contentTypeMap[contentType] || contentTypeMap[module.exports.CONTENT_TYPE_OTHER]; +}; + +module.exports.getContentTypeFromHeaders = headers => { + const header = headers.find(({name}) => name.toLowerCase() === 'content-type'); + return header ? header.value : null; +}; diff --git a/app/lib/cookies.js b/app/backend/cookies.js similarity index 77% rename from app/lib/cookies.js rename to app/backend/cookies.js index e2f9a53b58..04b3418b49 100644 --- a/app/lib/cookies.js +++ b/app/backend/cookies.js @@ -1,12 +1,14 @@ -import {CookieJar} from 'tough-cookie'; -import request from 'request'; +'use strict'; + +const {CookieJar} = require('tough-cookie'); +const request = require('request'); /** * Get a list of cookie objects from a request.jar() * * @param jar */ -export function cookiesFromJar (jar) { +module.exports.cookiesFromJar = jar => { return new Promise(resolve => { jar._jar.store.getAllCookies((err, cookies) => { if (err) { @@ -17,14 +19,14 @@ export function cookiesFromJar (jar) { } }); }); -} +}; /** * Get a request.jar() from a list of cookie objects * * @param cookies */ -export function jarFromCookies (cookies) { +module.exports.jarFromCookies = cookies => { const jar = request.jar(); try { @@ -34,9 +36,9 @@ export function jarFromCookies (cookies) { } return jar; -} +}; -export function cookieToString (cookie) { +module.exports.cookieToString = cookie => { var str = cookie.toString(); // tough-cookie toString() doesn't put domain on all the time. @@ -46,4 +48,4 @@ export function cookieToString (cookie) { } return str; -} +}; diff --git a/app/lib/database/index.js b/app/backend/database/index.js similarity index 56% rename from app/lib/database/index.js rename to app/backend/database/index.js index 5183967e14..dadcf2b163 100644 --- a/app/lib/database/index.js +++ b/app/backend/database/index.js @@ -1,27 +1,29 @@ -import electron from 'electron'; -import NeDB from 'nedb'; -import * as fsPath from 'path'; -import { +'use strict'; + +const electron = require('electron'); +const NeDB = require('nedb'); +const fsPath = require('path'); +const { METHOD_GET, DB_PERSIST_INTERVAL, DEFAULT_SIDEBAR_WIDTH -} from '../constants'; -import {generateId} from '../util'; -import {PREVIEW_MODE_SOURCE} from '../previewModes'; -import {isDevelopment} from '../appInfo'; +} = require('../constants'); +const {generateId} = require('../util'); +const {PREVIEW_MODE_SOURCE} = require('../previewModes'); +const {isDevelopment} = require('../appInfo'); -export const TYPE_STATS = 'Stats'; -export const TYPE_SETTINGS = 'Settings'; -export const TYPE_WORKSPACE = 'Workspace'; -export const TYPE_ENVIRONMENT = 'Environment'; -export const TYPE_COOKIE_JAR = 'CookieJar'; -export const TYPE_REQUEST_GROUP = 'RequestGroup'; -export const TYPE_REQUEST = 'Request'; -export const TYPE_RESPONSE = 'Response'; +module.exports.TYPE_STATS = 'Stats'; +module.exports.TYPE_SETTINGS = 'Settings'; +module.exports.TYPE_WORKSPACE = 'Workspace'; +module.exports.TYPE_ENVIRONMENT = 'Environment'; +module.exports.TYPE_COOKIE_JAR = 'CookieJar'; +module.exports.TYPE_REQUEST_GROUP = 'RequestGroup'; +module.exports.TYPE_REQUEST = 'Request'; +module.exports.TYPE_RESPONSE = 'Response'; -export const CHANGE_INSERT = 'insert'; -export const CHANGE_UPDATE = 'update'; -export const CHANGE_REMOVE = 'remove'; +module.exports.CHANGE_INSERT = 'insert'; +module.exports.CHANGE_UPDATE = 'update'; +module.exports.CHANGE_REMOVE = 'remove'; const BASE_MODEL_DEFAULTS = () => ({ @@ -31,23 +33,23 @@ const BASE_MODEL_DEFAULTS = () => ({ }); const MODEL_ID_PREFIXES = { - [TYPE_STATS]: 'sta', - [TYPE_SETTINGS]: 'set', - [TYPE_WORKSPACE]: 'wrk', - [TYPE_ENVIRONMENT]: 'env', - [TYPE_COOKIE_JAR]: 'jar', - [TYPE_REQUEST_GROUP]: 'fld', - [TYPE_REQUEST]: 'req', - [TYPE_RESPONSE]: 'res' + [module.exports.TYPE_STATS]: 'sta', + [module.exports.TYPE_SETTINGS]: 'set', + [module.exports.TYPE_WORKSPACE]: 'wrk', + [module.exports.TYPE_ENVIRONMENT]: 'env', + [module.exports.TYPE_COOKIE_JAR]: 'jar', + [module.exports.TYPE_REQUEST_GROUP]: 'fld', + [module.exports.TYPE_REQUEST]: 'req', + [module.exports.TYPE_RESPONSE]: 'res' }; -export const MODEL_DEFAULTS = { - [TYPE_STATS]: () => ({ +module.exports.MODEL_DEFAULTS = { + [module.exports.TYPE_STATS]: () => ({ lastLaunch: Date.now(), lastVersion: null, launches: 0 }), - [TYPE_SETTINGS]: () => ({ + [module.exports.TYPE_SETTINGS]: () => ({ showPasswords: true, useBulkHeaderEditor: false, followRedirects: false, @@ -58,7 +60,7 @@ export const MODEL_DEFAULTS = { timeout: 0, validateSSL: true }), - [TYPE_WORKSPACE]: () => ({ + [module.exports.TYPE_WORKSPACE]: () => ({ name: 'New Workspace', metaSidebarWidth: DEFAULT_SIDEBAR_WIDTH, metaActiveEnvironmentId: null, @@ -66,21 +68,21 @@ export const MODEL_DEFAULTS = { metaFilter: '', metaSidebarHidden: false }), - [TYPE_ENVIRONMENT]: () => ({ + [module.exports.TYPE_ENVIRONMENT]: () => ({ name: 'New Environment', data: {}, }), - [TYPE_COOKIE_JAR]: () => ({ + [module.exports.TYPE_COOKIE_JAR]: () => ({ name: 'Default Jar', cookies: [] }), - [TYPE_REQUEST_GROUP]: () => ({ + [module.exports.TYPE_REQUEST_GROUP]: () => ({ name: 'New Folder', environment: {}, metaCollapsed: false, metaSortKey: -1 * Date.now() }), - [TYPE_REQUEST]: () => ({ + [module.exports.TYPE_REQUEST]: () => ({ url: '', name: 'New Request', method: METHOD_GET, @@ -92,7 +94,7 @@ export const MODEL_DEFAULTS = { metaResponseFilter: '', metaSortKey: -1 * Date.now() }), - [TYPE_RESPONSE]: () => ({ + [module.exports.TYPE_RESPONSE]: () => ({ statusCode: 0, statusMessage: '', contentType: 'text/plain', @@ -106,7 +108,7 @@ export const MODEL_DEFAULTS = { }), }; -export const ALL_TYPES = Object.keys(MODEL_DEFAULTS); +module.exports.ALL_TYPES = Object.keys(module.exports.MODEL_DEFAULTS); let db = null; @@ -121,12 +123,14 @@ function getDBFilePath (modelType) { * @returns {Promise} */ let initialized = false; -export function initDB (config = {}, force = false) { +module.exports.initDB = (config = {}, force = false) => { // Only init once if (initialized && !force) { return Promise.resolve(); } + console.log('CONFIG', config); + return new Promise(resolve => { db = {}; @@ -136,7 +140,7 @@ export function initDB (config = {}, force = false) { // Fill in the defaults - const modelTypes = Object.keys(MODEL_DEFAULTS); + const modelTypes = Object.keys(module.exports.MODEL_DEFAULTS); modelTypes.map(t => { const filename = getDBFilePath(t); const autoload = true; @@ -152,19 +156,19 @@ export function initDB (config = {}, force = false) { console.log(`-- Initialize DB at ${getDBFilePath('t')} --`); resolve(); }); -} +}; let changeListeners = {}; -export function onChange (id, callback) { +module.exports.onChange = (id, callback) => { console.log(`-- Added DB Listener ${id} -- `); changeListeners[id] = callback; -} +}; -export function offChange (id) { +module.exports.offChange = (id) => { console.log(`-- Removed DB Listener ${id} -- `); delete changeListeners[id]; -} +}; function notifyOfChange (event, doc) { Object.keys(changeListeners).map(k => changeListeners[k](event, doc)); @@ -185,7 +189,7 @@ function find (type, query = {}) { return reject(err); } - const modelDefaults = MODEL_DEFAULTS[type](); + const modelDefaults = module.exports.MODEL_DEFAULTS[type](); const docs = rawDocs.map(rawDoc => { return Object.assign({}, modelDefaults, rawDoc); }); @@ -211,7 +215,7 @@ function getWhere (type, query) { return resolve(null); } - const modelDefaults = MODEL_DEFAULTS[type](); + const modelDefaults = module.exports.MODEL_DEFAULTS[type](); resolve(Object.assign({}, modelDefaults, rawDocs[0])); }); }); @@ -233,7 +237,7 @@ function count (type, query = {}) { }); } -export function insert (doc) { +module.exports.insert = doc => { return new Promise((resolve, reject) => { db[doc.type].insert(doc, (err, newDoc) => { if (err) { @@ -241,10 +245,10 @@ export function insert (doc) { } resolve(newDoc); - notifyOfChange(CHANGE_INSERT, doc); + notifyOfChange(module.exports.CHANGE_INSERT, doc); }); }); -} +}; function update (doc) { return new Promise((resolve, reject) => { @@ -254,20 +258,20 @@ function update (doc) { } resolve(doc); - notifyOfChange(CHANGE_UPDATE, doc); + notifyOfChange(module.exports.CHANGE_UPDATE, doc); }); }); } function remove (doc) { return new Promise(resolve => { - withDescendants(doc).then(docs => { + module.exports.withDescendants(doc).then(docs => { const promises = docs.map(d => ( db[d.type].remove({_id: d._id}, {multi: true}) )); Promise.all(promises).then(() => { - docs.map(d => notifyOfChange(CHANGE_REMOVE, d)); + docs.map(d => notifyOfChange(module.exports.CHANGE_REMOVE, d)); resolve() }); }); @@ -313,7 +317,7 @@ function docCreate (type, patch = {}) { const doc = Object.assign( BASE_MODEL_DEFAULTS(), {_id: generateId(idPrefix)}, - MODEL_DEFAULTS[type](), + module.exports.MODEL_DEFAULTS[type](), patch, // Fields that the user can't touch @@ -323,20 +327,20 @@ function docCreate (type, patch = {}) { } ); - return insert(doc); + return module.exports.insert(doc); } // ~~~~~~~ // // GENERAL // // ~~~~~~~ // -export function withDescendants (doc = null) { +module.exports.withDescendants = (doc = null) => { let docsToReturn = doc ? [doc] : []; const next = (docs) => { const promises = []; for (const doc of docs) { - for (const type of ALL_TYPES) { + for (const type of module.exports.ALL_TYPES) { // If the doc is null, we want to search for parentId === null const parentId = doc ? doc._id : null; promises.push(find(type, {parentId})); @@ -346,7 +350,7 @@ export function withDescendants (doc = null) { return Promise.all(promises).then(results => { let newDocs = []; - // Gather up the docs from each type + // Gather up the docs = require(each type for (const docs of results) { for (const doc of docs) { newDocs.push(doc); @@ -365,9 +369,9 @@ export function withDescendants (doc = null) { }; return next([doc]); -} +}; -export function duplicate (originalDoc, patch = {}) { +module.exports.duplicate = (originalDoc, patch = {}) => { return new Promise((resolve, reject) => { // 1. Copy the doc @@ -380,7 +384,7 @@ export function duplicate (originalDoc, patch = {}) { // 2. Get all the children const promises = []; - for (const type of ALL_TYPES) { + for (const type of module.exports.ALL_TYPES) { const parentId = originalDoc._id; const promise = find(type, {parentId}); promises.push(promise); @@ -389,10 +393,15 @@ export function duplicate (originalDoc, patch = {}) { Promise.all(promises).then(results => { let duplicatePromises = []; - // Gather up the docs from each type + // Gather up the docs = require(each type for (const docs of results) { for (const doc of docs) { - duplicatePromises.push(duplicate(doc, {parentId: createdDoc._id})); + const promise = module.exports.duplicate( + doc, + {parentId: createdDoc._id} + ); + + duplicatePromises.push(promise); } } @@ -401,46 +410,46 @@ export function duplicate (originalDoc, patch = {}) { }) }) }) -} +}; // ~~~~~~~ // // REQUEST // // ~~~~~~~ // -export function requestCreateAndActivate (workspace, patch = {}) { - return requestCreate(patch).then(r => { - workspaceUpdate(workspace, {metaActiveRequestId: r._id}); +module.exports.requestCreateAndActivate = (workspace, patch = {}) => { + return module.exports.requestCreate(patch).then(r => { + module.exports.workspaceUpdate(workspace, {metaActiveRequestId: r._id}); }) -} +}; -export function requestDuplicateAndActivate (workspace, request) { - return requestDuplicate(request).then(r => { - workspaceUpdate(workspace, {metaActiveRequestId: r._id}); +module.exports.requestDuplicateAndActivate = (workspace, request) => { + return module.exports.requestDuplicate(request).then(r => { + module.exports.workspaceUpdate(workspace, {metaActiveRequestId: r._id}); }) -} +}; -export function requestCreate (patch = {}) { +module.exports.requestCreate = (patch = {}) => { if (!patch.parentId) { throw new Error('New Requests missing `parentId`', patch); } - return docCreate(TYPE_REQUEST, patch); -} + return docCreate(module.exports.TYPE_REQUEST, patch); +}; -export function requestGetById (id) { - return get(TYPE_REQUEST, id); -} +module.exports.requestGetById = id => { + return get(module.exports.TYPE_REQUEST, id); +}; -export function requestFindByParentId (parentId) { - return find(TYPE_REQUEST, {parentId: parentId}); -} +module.exports.requestFindByParentId = parentId => { + return find(module.exports.TYPE_REQUEST, {parentId: parentId}); +}; -export function requestUpdate (request, patch) { +module.exports.requestUpdate = (request, patch) => { return docUpdate(request, patch); -} +}; -export function requestUpdateContentType (request, contentType) { +module.exports.requestUpdateContentType = (request, contentType) => { let headers = [...request.headers]; const contentTypeHeader = headers.find( h => h.name.toLowerCase() === 'content-type' @@ -456,29 +465,29 @@ export function requestUpdateContentType (request, contentType) { } return docUpdate(request, {headers}); -} +}; -export function requestDuplicate (request) { +module.exports.requestDuplicate = request => { const name = `${request.name} (Copy)`; - return duplicate(request, {name}); -} + return module.exports.duplicate(request, {name}); +}; -export function requestRemove (request) { +module.exports.requestRemove = request => { return remove(request); -} +}; -export function requestAll () { - return all(TYPE_REQUEST); -} +module.exports.requestAll = () => { + return all(module.exports.TYPE_REQUEST); +}; -export function requestGetAncestors (request) { +module.exports.requestGetAncestors = request => { return new Promise(resolve => { let ancestors = []; const next = (doc) => { Promise.all([ - requestGroupGetById(doc.parentId), - workspaceGetById(doc.parentId) + module.exports.requestGroupGetById(doc.parentId), + module.exports.workspaceGetById(doc.parentId) ]).then(([requestGroup, workspace]) => { if (requestGroup) { ancestors = [requestGroup, ...ancestors]; @@ -496,218 +505,221 @@ export function requestGetAncestors (request) { next(request); }); -} +}; // ~~~~~~~~~~~~~ // // REQUEST GROUP // // ~~~~~~~~~~~~~ // -export function requestGroupCreate (patch = {}) { +module.exports.requestGroupCreate = (patch = {}) => { if (!patch.parentId) { throw new Error('New Requests missing `parentId`', patch); } - return docCreate(TYPE_REQUEST_GROUP, patch); -} + return docCreate(module.exports.TYPE_REQUEST_GROUP, patch); +}; -export function requestGroupUpdate (requestGroup, patch) { +module.exports.requestGroupUpdate = (requestGroup, patch) => { return docUpdate(requestGroup, patch); -} +}; -export function requestGroupGetById (id) { - return get(TYPE_REQUEST_GROUP, id); -} +module.exports.requestGroupGetById = id => { + return get(module.exports.TYPE_REQUEST_GROUP, id); +}; -export function requestGroupFindByParentId (parentId) { - return find(TYPE_REQUEST_GROUP, {parentId}); -} +module.exports.requestGroupFindByParentId = parentId => { + return find(module.exports.TYPE_REQUEST_GROUP, {parentId}); +}; -export function requestGroupRemove (requestGroup) { +module.exports.requestGroupRemove = requestGroup => { return remove(requestGroup); -} +}; -export function requestGroupAll () { - return all(TYPE_REQUEST_GROUP); -} +module.exports.requestGroupAll = () => { + return all(module.exports.TYPE_REQUEST_GROUP); +}; -export function requestGroupDuplicate (requestGroup) { +module.exports.requestGroupDuplicate = requestGroup => { const name = `${requestGroup.name} (Copy)`; - return duplicate(requestGroup, {name}); -} + return module.exports.duplicate(requestGroup, {name}); +}; // ~~~~~~~~ // // RESPONSE // // ~~~~~~~~ // -export function responseCreate (patch = {}) { +module.exports.responseCreate = (patch = {}) => { if (!patch.parentId) { throw new Error('New Response missing `parentId`'); } - removeBulkSilently(TYPE_RESPONSE, {parentId: patch.parentId}); - return docCreate(TYPE_RESPONSE, patch); -} + removeBulkSilently(module.exports.TYPE_RESPONSE, {parentId: patch.parentId}); + return docCreate(module.exports.TYPE_RESPONSE, patch); +}; -export function responseGetLatestByParentId (parentId) { - return getMostRecentlyModified(TYPE_RESPONSE, {parentId}); -} +module.exports.responseGetLatestByParentId = parentId => { + return getMostRecentlyModified(module.exports.TYPE_RESPONSE, {parentId}); +}; // ~~~~~~~ // // COOKIES // // ~~~~~~~ // -export function cookieJarCreate (patch = {}) { - return docCreate(TYPE_COOKIE_JAR, patch); -} +module.exports.cookieJarCreate = (patch = {}) => { + return docCreate(module.exports.TYPE_COOKIE_JAR, patch); +}; -export function cookieJarGetOrCreateForWorkspace (workspace) { +module.exports.cookieJarGetOrCreateForWorkspace = workspace => { const parentId = workspace._id; - return find(TYPE_COOKIE_JAR, {parentId}).then(cookieJars => { + return find(module.exports.TYPE_COOKIE_JAR, {parentId}).then(cookieJars => { if (cookieJars.length === 0) { - return cookieJarCreate({parentId}) + return module.exports.cookieJarCreate({parentId}) } else { return new Promise(resolve => resolve(cookieJars[0])); } }); -} +}; -export function cookieJarAll () { - return all(TYPE_COOKIE_JAR); -} +module.exports.cookieJarAll = () => { + return all(module.exports.TYPE_COOKIE_JAR); +}; -export function cookieJarGetById (id) { - return get(TYPE_COOKIE_JAR, id); -} +module.exports.cookieJarGetById = id => { + return get(module.exports.TYPE_COOKIE_JAR, id); +}; -export function cookieJarUpdate (cookieJar, patch) { +module.exports.cookieJarUpdate = (cookieJar, patch) => { return docUpdate(cookieJar, patch); -} +}; // ~~~~~~~~~ // // WORKSPACE // // ~~~~~~~~~ // -export function workspaceGetById (id) { - return get(TYPE_WORKSPACE, id); -} +module.exports.workspaceGetById = id => { + return get(module.exports.TYPE_WORKSPACE, id); +}; -export function workspaceCreate (patch = {}) { - return docCreate(TYPE_WORKSPACE, patch); -} +module.exports.workspaceCreate = (patch = {}) => { + return docCreate(module.exports.TYPE_WORKSPACE, patch); +}; -export function workspaceAll () { - return all(TYPE_WORKSPACE).then(workspaces => { +module.exports.workspaceAll = () => { + return all(module.exports.TYPE_WORKSPACE).then(workspaces => { if (workspaces.length === 0) { - return workspaceCreate({name: 'Insomnia'}).then(workspaceAll); + return module.exports.workspaceCreate({name: 'Insomnia'}) + .then(module.exports.workspaceAll); } else { return new Promise(resolve => resolve(workspaces)) } }); -} +}; -export function workspaceCount () { - return count(TYPE_WORKSPACE) -} +module.exports.workspaceCount = () => { + return count(module.exports.TYPE_WORKSPACE) +}; -export function workspaceUpdate (workspace, patch) { +module.exports.workspaceUpdate = (workspace, patch) => { return docUpdate(workspace, patch); -} +}; -export function workspaceRemove (workspace) { +module.exports.workspaceRemove = workspace => { return remove(workspace); -} +}; // ~~~~~~~~~~~ // // ENVIRONMENT // // ~~~~~~~~~~~ // -export function environmentCreate (patch = {}) { +module.exports.environmentCreate = (patch = {}) => { if (!patch.parentId) { throw new Error('New Environment missing `parentId`', patch); } - return docCreate(TYPE_ENVIRONMENT, patch); -} + return docCreate(module.exports.TYPE_ENVIRONMENT, patch); +}; -export function environmentUpdate (environment, patch) { +module.exports.environmentUpdate = (environment, patch) => { return docUpdate(environment, patch); -} +}; -export function environmentFindByParentId (parentId) { - return find(TYPE_ENVIRONMENT, {parentId}); -} +module.exports.environmentFindByParentId = parentId => { + return find(module.exports.TYPE_ENVIRONMENT, {parentId}); +}; -export function environmentGetOrCreateForWorkspace (workspace) { +module.exports.environmentGetOrCreateForWorkspace = workspace => { const parentId = workspace._id; - return find(TYPE_ENVIRONMENT, {parentId}).then(environments => { + return find(module.exports.TYPE_ENVIRONMENT, {parentId}).then(environments => { if (environments.length === 0) { - return environmentCreate({parentId, name: 'Base Environment'}) + return module.exports.environmentCreate({parentId, name: 'Base Environment'}) } else { return new Promise(resolve => resolve(environments[0])); } }); -} +}; -export function environmentGetById (id) { - return get(TYPE_ENVIRONMENT, id); -} +module.exports.environmentGetById = id => { + return get(module.exports.TYPE_ENVIRONMENT, id); +}; -export function environmentRemove (environment) { +module.exports.environmentRemove = environment => { return remove(environment); -} +}; -export function environmentAll () { - return all(TYPE_ENVIRONMENT); -} +module.exports.environmentAll = () => { + return all(module.exports.TYPE_ENVIRONMENT); +}; // ~~~~~~~~ // // SETTINGS // // ~~~~~~~~ // -export function settingsCreate (patch = {}) { - return docCreate(TYPE_SETTINGS, patch); -} +module.exports.settingsCreate = (patch = {}) => { + return docCreate(module.exports.TYPE_SETTINGS, patch); +}; -export function settingsUpdate (settings, patch) { +module.exports.settingsUpdate = (settings, patch) => { return docUpdate(settings, patch); -} +}; -export function settingsGetOrCreate () { - return all(TYPE_SETTINGS).then(results => { +module.exports.settingsGetOrCreate = () => { + return all(module.exports.TYPE_SETTINGS).then(results => { if (results.length === 0) { - return settingsCreate().then(settingsGetOrCreate); + return module.exports.settingsCreate() + .then(module.exports.settingsGetOrCreate); } else { return new Promise(resolve => resolve(results[0])); } }); -} +}; // ~~~~~ // // STATS // // ~~~~~ // -export function statsCreate (patch = {}) { - return docCreate(TYPE_STATS, patch); -} +module.exports.statsCreate = (patch = {}) => { + return docCreate(module.exports.TYPE_STATS, patch); +}; -export function statsUpdate (patch) { - return statsGet().then(stats => { +module.exports.statsUpdate = patch => { + return module.exports.statsGet().then(stats => { return docUpdate(stats, patch); }); -} +}; -export function statsGet () { - return all(TYPE_STATS).then(results => { +module.exports.statsGet = () => { + return all(module.exports.TYPE_STATS).then(results => { if (results.length === 0) { - return statsCreate().then(statsGet); + return module.exports.statsCreate() + .then(module.exports.statsGet); } else { return new Promise(resolve => resolve(results[0])); } }); -} +}; diff --git a/app/lib/export/curl.js b/app/backend/export/curl.js similarity index 99% rename from app/lib/export/curl.js rename to app/backend/export/curl.js index 608cc61aab..b5cd22d1d8 100644 --- a/app/lib/export/curl.js +++ b/app/backend/export/curl.js @@ -141,7 +141,7 @@ function getBasicAuth (flags) { } -export function importCurl (blob) { +module.exports.importCurl = blob => { if (!blob || blob.toLowerCase().indexOf('curl ') !== 0) { return false; } @@ -189,4 +189,4 @@ export function importCurl (blob) { method: httpMethod, authentication: authentication }; -} +}; diff --git a/app/lib/export/database.js b/app/backend/export/database.js similarity index 91% rename from app/lib/export/database.js rename to app/backend/export/database.js index d122c053b0..c97d92477d 100644 --- a/app/lib/export/database.js +++ b/app/backend/export/database.js @@ -1,7 +1,9 @@ -import * as db from '../database'; -import {getAppVersion} from '../appInfo'; -import {importRequestGroupLegacy} from './legacy'; -import {importRequestLegacy} from './legacy'; +'use strict'; + +const db = require('../database'); +const {getAppVersion} = require('../appInfo'); +const {importRequestGroupLegacy} = require('./legacy'); +const {importRequestLegacy} = require('./legacy'); const VERSION_LEGACY = 1; const VERSION_DESKTOP_APP = 2; @@ -11,7 +13,7 @@ const TYPE_WORKSPACE = 'workspace'; const TYPE_COOKIE_JAR = 'cookie_jar'; const TYPE_ENVIRONMENT = 'environment'; -export function importJSON (workspace, json) { +module.exports.importJSON = (workspace, json) => { let data; try { @@ -61,9 +63,9 @@ export function importJSON (workspace, json) { console.error('Export format not recognized', exportFormat); break; } -} +}; -export function exportJSON (parentDoc = null) { +module.exports.exportJSON = (parentDoc = null) => { const data = { _type: 'export', __export_format: 2, @@ -101,7 +103,7 @@ export function exportJSON (parentDoc = null) { resolve(JSON.stringify(data, null, 2)); }); }); -} +}; function removeMetaKeys (obj) { diff --git a/app/lib/export/har.js b/app/backend/export/har.js similarity index 85% rename from app/lib/export/har.js rename to app/backend/export/har.js index c88e4dca1d..e8ab61ee23 100644 --- a/app/lib/export/har.js +++ b/app/backend/export/har.js @@ -1,8 +1,10 @@ -import * as db from '../database'; -import {getRenderedRequest} from '../render'; -import {jarFromCookies} from '../cookies'; +'use strict'; -export function exportHar (requestId, addContentLength = false) { +const db = require('../database'); +const {getRenderedRequest} = require('../render'); +const {jarFromCookies} = require('../cookies'); + +module.exports.exportHar = (requestId, addContentLength = false) => { return new Promise((resolve, reject) => { db.requestGetById(requestId).then(request => { return getRenderedRequest(request); @@ -35,7 +37,7 @@ export function exportHar (requestId, addContentLength = false) { }); }) }); -} +}; function getCookies (renderedRequest) { const jar = jarFromCookies(renderedRequest.cookieJar.cookies); diff --git a/app/lib/export/legacy.js b/app/backend/export/legacy.js similarity index 80% rename from app/lib/export/legacy.js rename to app/backend/export/legacy.js index 995ec51c34..7f0cd69e87 100644 --- a/app/lib/export/legacy.js +++ b/app/backend/export/legacy.js @@ -1,5 +1,7 @@ -import * as db from '../database/index'; -import {getContentTypeFromHeaders} from '../contentTypes'; +'use strict'; + +const db = require('../database/index'); +const {getContentTypeFromHeaders} = require('../contentTypes'); const FORMAT_MAP = { json: 'application/json', @@ -8,7 +10,7 @@ const FORMAT_MAP = { text: 'text/plain' }; -export function importRequestGroupLegacy (importedRequestGroup, parentId, index = 1) { +module.exports.importRequestGroupLegacy = (importedRequestGroup, parentId, index = 1) => { return db.requestGroupCreate({ parentId, name: importedRequestGroup.name, @@ -20,13 +22,13 @@ export function importRequestGroupLegacy (importedRequestGroup, parentId, index if (importedRequestGroup.hasOwnProperty('requests')) { // Let's process them oldest to newest importedRequestGroup.requests.map( - (r, i) => importRequestLegacy(r, requestGroup._id, index * 1000 + i) + (r, i) => module.exports.importRequestLegacy(r, requestGroup._id, index * 1000 + i) ); } }); -} +}; -export function importRequestLegacy (importedRequest, parentId, index = 1) { +module.exports.importRequestLegacy = (importedRequest, parentId, index = 1) => { let auth = {}; if (importedRequest.authentication.username) { auth = { @@ -62,5 +64,5 @@ export function importRequestLegacy (importedRequest, parentId, index = 1) { contentType: FORMAT_MAP[importedRequest.__insomnia.format] || 'text/plain', authentication: auth }); -} +}; diff --git a/app/lib/network.js b/app/backend/network.js similarity index 84% rename from app/lib/network.js rename to app/backend/network.js index ee77e41777..3058ae194f 100644 --- a/app/lib/network.js +++ b/app/backend/network.js @@ -1,22 +1,23 @@ -import networkRequest from 'request'; -import {parse as urlParse, format as urlFormat} from 'url'; -import * as db from './database'; -import * as querystring from './querystring'; -import {DEBOUNCE_MILLIS, STATUS_CODE_PEBKAC} from './constants'; -import {jarFromCookies, cookiesFromJar} from './cookies'; -import {setDefaultProtocol} from './util'; -import {getRenderedRequest} from './render'; +'use strict'; + +const networkRequest = require('request'); +const {parse: urlParse, format: urlFormat} = require('url'); +const db = require('./database'); +const querystring = require('./querystring'); +const {DEBOUNCE_MILLIS, STATUS_CODE_PEBKAC} = require('./constants'); +const {jarFromCookies, cookiesFromJar} = require('./cookies'); +const {setDefaultProtocol} = require('./util'); +const {getRenderedRequest} = require('./render'); let cancelRequestFunction = null; -export function cancelCurrentRequest () { +module.exports.cancelCurrentRequest = () => { if (typeof cancelRequestFunction === 'function') { cancelRequestFunction(); } -} +}; - -export function _buildRequestConfig (renderedRequest, patch = {}) { +module.exports._buildRequestConfig = (renderedRequest, patch = {}) => { const config = { method: renderedRequest.method, body: renderedRequest.body, @@ -48,6 +49,7 @@ export function _buildRequestConfig (renderedRequest, patch = {}) { const parsedUrl = urlParse(url); parsedUrl.pathname = encodeURI(parsedUrl.pathname || ''); config.url = urlFormat(parsedUrl); + config.headers.host = parsedUrl.host; for (let i = 0; i < renderedRequest.headers.length; i++) { let header = renderedRequest.headers[i]; @@ -57,9 +59,9 @@ export function _buildRequestConfig (renderedRequest, patch = {}) { } return Object.assign(config, patch); -} +}; -export function _actuallySend (renderedRequest, settings) { +module.exports._actuallySend = (renderedRequest, settings) => { return new Promise((resolve, reject) => { const cookieJar = renderedRequest.cookieJar; const jar = jarFromCookies(cookieJar.cookies); @@ -70,7 +72,7 @@ export function _actuallySend (renderedRequest, settings) { const proxyHost = protocol === 'https:' ? settings.httpsProxy : settings.httpProxy; const proxy = proxyHost ? setDefaultProtocol(proxyHost) : null; - let config = _buildRequestConfig(renderedRequest, { + let config = module.exports._buildRequestConfig(renderedRequest, { jar: jar, proxy: proxy, followAllRedirects: settings.followRedirects, @@ -150,9 +152,9 @@ export function _actuallySend (renderedRequest, settings) { return reject('Cancelled'); } }) -} +}; -export function send (requestId) { +module.exports.send = requestId => { return new Promise((resolve, reject) => { // First, lets wait for all debounces to finish @@ -162,7 +164,7 @@ export function send (requestId) { db.settingsGetOrCreate() ]).then(([request, settings]) => { getRenderedRequest(request).then(renderedRequest => { - _actuallySend(renderedRequest, settings).then(resolve, reject); + module.exports._actuallySend(renderedRequest, settings).then(resolve, reject); }, err => { db.responseCreate({ parentId: request._id, @@ -173,4 +175,4 @@ export function send (requestId) { }) }, DEBOUNCE_MILLIS); }) -} +}; diff --git a/app/backend/previewModes.js b/app/backend/previewModes.js new file mode 100644 index 0000000000..5711761025 --- /dev/null +++ b/app/backend/previewModes.js @@ -0,0 +1,24 @@ +'use strict'; + +module.exports.PREVIEW_MODE_FRIENDLY = 'friendly'; +module.exports.PREVIEW_MODE_SOURCE = 'source'; +module.exports.PREVIEW_MODE_RAW = 'raw'; + +const previewModeMap = { + [module.exports.PREVIEW_MODE_FRIENDLY]: 'Visual', + [module.exports.PREVIEW_MODE_SOURCE]: 'Source', + [module.exports.PREVIEW_MODE_RAW]: 'Raw' +}; + +module.exports.PREVIEW_MODES = Object.keys(previewModeMap); + +/** + * Get the friendly name for a given preview mode + * + * @param previewMode + * @returns {*|string} + */ +module.exports.getPreviewModeName = previewMode => { + // TODO: Make this more robust maybe... + return previewModeMap[previewMode] || 'Unknown'; +}; diff --git a/app/lib/querystring.js b/app/backend/querystring.js similarity index 73% rename from app/lib/querystring.js rename to app/backend/querystring.js index 0f88079923..53eb30c261 100644 --- a/app/lib/querystring.js +++ b/app/backend/querystring.js @@ -1,18 +1,19 @@ +'use strict'; -export function getJoiner (url) { +module.exports.getJoiner = url => { url = url || ''; return url.indexOf('?') === -1 ? '?' : '&'; -} +}; -export function joinURL (url, qs) { +module.exports.joinURL = (url, qs) => { if (!qs) { return url; } url = url || ''; - return url + getJoiner(url) + qs; -} + return url + module.exports.getJoiner(url) + qs; +}; -export function build (param, strict = true) { +module.exports.build = (param, strict = true) => { // Skip non-name ones in strict mode if (strict && !param.name) { return ''; @@ -23,7 +24,7 @@ export function build (param, strict = true) { } else { return encodeURIComponent(param.name); } -} +}; /** * @@ -31,10 +32,10 @@ export function build (param, strict = true) { * @param strict allow empty names and values * @returns {string} */ -export function buildFromParams (parameters, strict = true) { +module.exports.buildFromParams = (parameters, strict = true) => { let items = []; for (var i = 0; i < parameters.length; i++) { - let built = build(parameters[i], strict); + let built = module.exports.build(parameters[i], strict); if (!built) { continue; @@ -44,7 +45,7 @@ export function buildFromParams (parameters, strict = true) { } return items.join('&'); -} +}; /** * @@ -52,7 +53,7 @@ export function buildFromParams (parameters, strict = true) { * @param strict allow empty names and values * @returns {Array} */ -export function deconstructToParams (qs, strict = true) { +module.exports.deconstructToParams = (qs, strict = true) => { const stringPairs = qs.split('&'); const pairs = []; @@ -70,4 +71,4 @@ export function deconstructToParams (qs, strict = true) { } return pairs; -} +}; diff --git a/app/lib/render.js b/app/backend/render.js similarity index 80% rename from app/lib/render.js rename to app/backend/render.js index b1ca816322..89c35accc8 100644 --- a/app/lib/render.js +++ b/app/backend/render.js @@ -1,9 +1,11 @@ -import nunjucks from 'nunjucks'; -import traverse from 'traverse'; -import uuid from 'node-uuid'; -import * as db from './database'; -import {TYPE_WORKSPACE} from './database/index'; -import {getBasicAuthHeader, hasAuthHeader, setDefaultProtocol} from './util'; +'use strict'; + +const nunjucks = require('nunjucks'); +const traverse = require('traverse'); +const uuid = require('node-uuid'); +const db = require('./database'); +const {TYPE_WORKSPACE} = require('./database/index'); +const {getBasicAuthHeader, hasAuthHeader, setDefaultProtocol} = require('./util'); const nunjucksEnvironment = nunjucks.configure({ autoescape: false @@ -51,15 +53,15 @@ class UuidExtension extends NoArgsExtension { nunjucksEnvironment.addExtension('uuid', new UuidExtension()); nunjucksEnvironment.addExtension('timestamp', new TimestampExtension()); -export function render (template, context = {}) { +module.exports.render = (template, context = {}) => { try { return nunjucksEnvironment.renderString(template, context); } catch (e) { throw new Error(e.message.replace(/\(unknown path\)\s*/, '')); } -} +}; -export function buildRenderContext (ancestors, rootEnvironment, subEnvironment) { +module.exports.buildRenderContext = (ancestors, rootEnvironment, subEnvironment) => { const renderContext = {}; if (rootEnvironment) { @@ -86,18 +88,18 @@ export function buildRenderContext (ancestors, rootEnvironment, subEnvironment) // This is to support templating inside environments const stringifiedEnvironment = JSON.stringify(renderContext); return JSON.parse( - render(stringifiedEnvironment, renderContext) + module.exports.render(stringifiedEnvironment, renderContext) ); -} +}; -export function recursiveRender (obj, context) { +module.exports.recursiveRender = (obj, context) => { // Make a copy so no one gets mad :) const newObj = traverse.clone(obj); try { traverse(newObj).forEach(function (x) { if (typeof x === 'string') { - const str = render(x, context); + const str = module.exports.render(x, context); this.update(str); } }); @@ -107,9 +109,9 @@ export function recursiveRender (obj, context) { } return newObj; -} +}; -export function getRenderedRequest (request) { +module.exports.getRenderedRequest = request => { return db.requestGetAncestors(request).then(ancestors => { const workspace = ancestors.find(doc => doc.type === TYPE_WORKSPACE); @@ -120,14 +122,14 @@ export function getRenderedRequest (request) { ]).then(([rootEnvironment, subEnvironment, cookieJar]) => { // Generate the context we need to render - const renderContext = buildRenderContext( + const renderContext = module.exports.buildRenderContext( ancestors, rootEnvironment, subEnvironment ); // Render all request properties - const renderedRequest = recursiveRender( + const renderedRequest = module.exports.recursiveRender( request, renderContext ); @@ -150,4 +152,4 @@ export function getRenderedRequest (request) { return new Promise(resolve => resolve(renderedRequest)); }); }); -} +}; diff --git a/app/lib/util.js b/app/backend/util.js similarity index 67% rename from app/lib/util.js rename to app/backend/util.js index 2659999f2a..0330692aad 100644 --- a/app/lib/util.js +++ b/app/backend/util.js @@ -1,12 +1,14 @@ -export function getBasicAuthHeader (username, password) { +'use strict'; + +module.exports.getBasicAuthHeader = (username, password) => { const name = 'Authorization'; const header = `${username || ''}:${password || ''}`; const authString = new Buffer(header, 'utf8').toString('base64'); const value = `Basic ${authString}`; return {name, value}; -} +}; -export function filterHeaders (headers, name) { +module.exports.filterHeaders = (headers, name) => { if (!Array.isArray(headers) || !name) { return []; } @@ -14,31 +16,31 @@ export function filterHeaders (headers, name) { return headers.filter( h => h.name.toLowerCase() === name.toLowerCase() ); -} +}; -export function hasAuthHeader (headers) { - return filterHeaders(headers, 'authorization').length > 0; -} +module.exports.hasAuthHeader = headers => { + return module.exports.filterHeaders(headers, 'authorization').length > 0; +}; -export function getSetCookieHeaders (headers) { - return filterHeaders(headers, 'set-cookie'); -} +module.exports.getSetCookieHeaders = headers => { + return module.exports.filterHeaders(headers, 'set-cookie'); +}; -export function setDefaultProtocol (url, defaultProto = 'http:') { +module.exports.setDefaultProtocol = (url, defaultProto = 'http:') => { // Default the proto if it doesn't exist if (url.indexOf('://') === -1) { url = `${defaultProto}//${url}`; } return url; -} +}; /** * Generate an ID of the format "_" * @param prefix * @returns {string} */ -export function generateId (prefix) { +module.exports.generateId = prefix => { const CHARS = '23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ'.split(''); const dateString = Date.now().toString(36); let randString = ''; @@ -52,4 +54,4 @@ export function generateId (prefix) { } else { return `${dateString}${randString}`; } -} +}; diff --git a/app/lib/appInfo.js b/app/lib/appInfo.js deleted file mode 100644 index c0384c8c24..0000000000 --- a/app/lib/appInfo.js +++ /dev/null @@ -1,21 +0,0 @@ -import * as appJson from '../package.json'; - -export function getAppVersion () { - return appJson.version; -} - -export function getAppLongName () { - return appJson.longName; -} - -export function getAppName () { - return appJson.productName; -} - -export function isMac () { - return process.platform === 'darwin'; -} - -export function isDevelopment () { - return process.env.INSOMNIA_ENV === 'development'; -} diff --git a/app/lib/contentTypes.js b/app/lib/contentTypes.js deleted file mode 100644 index 4407498757..0000000000 --- a/app/lib/contentTypes.js +++ /dev/null @@ -1,30 +0,0 @@ -export const CONTENT_TYPE_JSON = 'application/json'; -export const CONTENT_TYPE_XML = 'application/xml'; -export const CONTENT_TYPE_TEXT = 'text/plain'; -export const CONTENT_TYPE_FORM_URLENCODED = 'application/x-www-form-urlencoded'; -export const CONTENT_TYPE_OTHER = ''; - -const contentTypeMap = { - [CONTENT_TYPE_JSON]: 'JSON', - [CONTENT_TYPE_XML]: 'XML', - [CONTENT_TYPE_FORM_URLENCODED]: 'Form Encoded', - [CONTENT_TYPE_TEXT]: 'Plain Text', - [CONTENT_TYPE_OTHER]: 'Other' -}; - -export const CONTENT_TYPES = Object.keys(contentTypeMap); - -/** - * Get the friendly name for a given content type - * - * @param contentType - * @returns {*|string} - */ -export function getContentTypeName (contentType) { - return contentTypeMap[contentType] || contentTypeMap[CONTENT_TYPE_OTHER]; -} - -export function getContentTypeFromHeaders (headers) { - const header = headers.find(({name}) => name.toLowerCase() === 'content-type'); - return header ? header.value : null; -} diff --git a/app/lib/previewModes.js b/app/lib/previewModes.js deleted file mode 100644 index c95ad25919..0000000000 --- a/app/lib/previewModes.js +++ /dev/null @@ -1,23 +0,0 @@ - -export const PREVIEW_MODE_FRIENDLY = 'friendly'; -export const PREVIEW_MODE_SOURCE = 'source'; -export const PREVIEW_MODE_RAW = 'raw'; - -const previewModeMap = { - [PREVIEW_MODE_FRIENDLY]: 'Visual', - [PREVIEW_MODE_SOURCE]: 'Source', - [PREVIEW_MODE_RAW]: 'Raw' -}; - -export const PREVIEW_MODES = Object.keys(previewModeMap); - -/** - * Get the friendly name for a given preview mode - * - * @param previewMode - * @returns {*|string} - */ -export function getPreviewModeName (previewMode) { - // TODO: Make this more robust maybe... - return previewModeMap[previewMode] || 'Unknown'; -} diff --git a/app/ui/components/KeyboardShortcutsTable.js b/app/ui/components/KeyboardShortcutsTable.js index feb6cb69e2..05fbc0d7f1 100644 --- a/app/ui/components/KeyboardShortcutsTable.js +++ b/app/ui/components/KeyboardShortcutsTable.js @@ -1,5 +1,5 @@ import React, {Component} from 'react'; -import {MOD_SYM} from '../../lib/constants'; +import {MOD_SYM} from 'backend/constants'; const KeyboardShortcutsTable = () => ( diff --git a/app/ui/components/RenderedQueryString.js b/app/ui/components/RenderedQueryString.js index f71f5330f8..d876341475 100644 --- a/app/ui/components/RenderedQueryString.js +++ b/app/ui/components/RenderedQueryString.js @@ -1,6 +1,6 @@ import React, {PropTypes, Component} from 'react'; -import {getRenderedRequest} from '../../lib/render'; -import * as querystring from '../../lib/querystring'; +import {getRenderedRequest} from 'backend/render'; +import * as querystring from 'backend/querystring'; class RenderedQueryString extends Component { diff --git a/app/ui/components/RequestPane.js b/app/ui/components/RequestPane.js index 6e07c20000..86e5828ec3 100644 --- a/app/ui/components/RequestPane.js +++ b/app/ui/components/RequestPane.js @@ -10,10 +10,10 @@ import AuthEditor from './editors/AuthEditor'; import {UrlBar} from './UrlBar.elm'; import ElmComponent from './ElmComponent'; -import {getContentTypeName} from '../../lib/contentTypes'; -import {getContentTypeFromHeaders} from '../../lib/contentTypes'; -import {MOD_SYM} from '../../lib/constants'; -import {trackEvent} from '../../lib/analytics'; +import {getContentTypeName} from 'backend/contentTypes'; +import {getContentTypeFromHeaders} from 'backend/contentTypes'; +import {MOD_SYM} from 'backend/constants'; +import {trackEvent} from 'backend/analytics'; import {debounce} from '../lib/debounce'; class RequestPane extends Component { @@ -143,41 +143,47 @@ class RequestPane extends Component { lineWrapping={editorLineWrapping} /> - - - - -
- - - - + +
+
-
- - -
- + +
+
+ + + + +
+ +
+
+ +
+ +
+ +
diff --git a/app/ui/components/ResponsePane.js b/app/ui/components/ResponsePane.js index 18bec48c7f..dd557a5467 100644 --- a/app/ui/components/ResponsePane.js +++ b/app/ui/components/ResponsePane.js @@ -1,4 +1,4 @@ -import * as db from '../../lib/database'; +import * as db from 'backend/database'; import React, {PropTypes, Component} from 'react'; import {Tab, Tabs, TabList, TabPanel} from 'react-tabs'; import ElmComponent from './ElmComponent'; @@ -7,12 +7,12 @@ import PreviewModeDropdown from './dropdowns/PreviewModeDropdown'; import ResponseViewer from './viewers/ResponseViewer'; import ResponseHeadersViewer from './viewers/ResponseHeadersViewer'; import ResponseCookiesViewer from './viewers/ResponseCookiesViewer'; -import {getPreviewModeName, PREVIEW_MODE_SOURCE} from '../../lib/previewModes'; -import {REQUEST_TIME_TO_SHOW_COUNTER, MOD_SYM} from '../../lib/constants'; -import {trackEvent} from '../../lib/analytics'; -import {getSetCookieHeaders} from '../../lib/util'; -import {cancelCurrentRequest} from '../../lib/network'; -import {RESPONSE_CODE_DESCRIPTIONS} from '../../lib/constants'; +import {getPreviewModeName, PREVIEW_MODE_SOURCE} from 'backend/previewModes'; +import {REQUEST_TIME_TO_SHOW_COUNTER, MOD_SYM} from 'backend/constants'; +import {trackEvent} from 'backend/analytics'; +import {getSetCookieHeaders} from 'backend/util'; +import {cancelCurrentRequest} from 'backend/network'; +import {RESPONSE_CODE_DESCRIPTIONS} from 'backend/constants'; class ResponsePane extends Component { constructor (props) { @@ -208,18 +208,22 @@ class ResponsePane extends Component { url={response.url} /> - - + +
+ +
- - + +
+ +
diff --git a/app/ui/components/base/DropdownHint.js b/app/ui/components/base/DropdownHint.js index 63a4e4e7eb..25410cf01d 100644 --- a/app/ui/components/base/DropdownHint.js +++ b/app/ui/components/base/DropdownHint.js @@ -1,5 +1,5 @@ import React, {PropTypes} from 'react'; -import {MOD_SYM} from '../../../lib/constants'; +import {MOD_SYM} from 'backend/constants'; const DropdownHint = ({char}) => (
diff --git a/app/ui/components/base/Editable.js b/app/ui/components/base/Editable.js index ec192f4237..0fd4b82bda 100644 --- a/app/ui/components/base/Editable.js +++ b/app/ui/components/base/Editable.js @@ -1,5 +1,5 @@ import React, {Component, PropTypes} from 'react'; -import {DEBOUNCE_MILLIS} from '../../../lib/constants'; +import {DEBOUNCE_MILLIS} from 'backend/constants'; class Editable extends Component { constructor (props) { diff --git a/app/ui/components/base/Editor.js b/app/ui/components/base/Editor.js index 12e454bd3e..d34ab32c99 100644 --- a/app/ui/components/base/Editor.js +++ b/app/ui/components/base/Editor.js @@ -6,7 +6,7 @@ import JSONPath from 'jsonpath-plus'; import vkBeautify from 'vkbeautify'; import {DOMParser} from 'xmldom'; import xpath from 'xpath'; -import {DEBOUNCE_MILLIS} from '../../../lib/constants'; +import {DEBOUNCE_MILLIS} from 'backend/constants'; import 'codemirror/mode/css/css'; import 'codemirror/mode/htmlmixed/htmlmixed'; import 'codemirror/mode/javascript/javascript'; @@ -42,7 +42,7 @@ import '../../css/components/editor.less'; import {getModal} from '../modals/index'; import AlertModal from '../modals/AlertModal'; import Link from '../base/Link'; -import {trackEvent} from '../../../lib/analytics'; +import {trackEvent} from 'backend/analytics'; const BASE_CODEMIRROR_OPTIONS = { diff --git a/app/ui/components/base/KeyValueEditor.js b/app/ui/components/base/KeyValueEditor.js index 41c857f4b7..4c2c6fe8f4 100644 --- a/app/ui/components/base/KeyValueEditor.js +++ b/app/ui/components/base/KeyValueEditor.js @@ -1,6 +1,6 @@ import React, {Component, PropTypes} from 'react'; import classnames from 'classnames'; -import {DEBOUNCE_MILLIS} from '../../../lib/constants'; +import {DEBOUNCE_MILLIS} from 'backend/constants'; const NAME = 'name'; const VALUE = 'value'; diff --git a/app/ui/components/dropdowns/ContentTypeDropdown.js b/app/ui/components/dropdowns/ContentTypeDropdown.js index 36acb575cd..19f6b4baa0 100644 --- a/app/ui/components/dropdowns/ContentTypeDropdown.js +++ b/app/ui/components/dropdowns/ContentTypeDropdown.js @@ -1,8 +1,8 @@ import React, {PropTypes} from 'react'; import Dropdown from '../base/Dropdown'; -import {CONTENT_TYPES, getContentTypeName} from '../../../lib/contentTypes'; -import {trackEvent} from '../../../lib/analytics'; +import {CONTENT_TYPES, getContentTypeName} from 'backend/contentTypes'; +import {trackEvent} from 'backend/analytics'; const ContentTypeDropdown = ({updateRequestContentType}) => { return ( diff --git a/app/ui/components/dropdowns/PreviewModeDropdown.js b/app/ui/components/dropdowns/PreviewModeDropdown.js index cca7d5986b..410c1168bd 100644 --- a/app/ui/components/dropdowns/PreviewModeDropdown.js +++ b/app/ui/components/dropdowns/PreviewModeDropdown.js @@ -1,8 +1,8 @@ import React, {PropTypes} from 'react'; import Dropdown from '../base/Dropdown'; -import {PREVIEW_MODES, getPreviewModeName} from '../../../lib/previewModes'; -import {trackEvent} from '../../../lib/analytics'; +import {PREVIEW_MODES, getPreviewModeName} from 'backend/previewModes'; +import {trackEvent} from 'backend/analytics'; const PreviewModeDropdown = ({updatePreviewMode}) => { return ( diff --git a/app/ui/components/editors/BodyEditor.js b/app/ui/components/editors/BodyEditor.js index ee0eebd75c..5cf94a46a9 100644 --- a/app/ui/components/editors/BodyEditor.js +++ b/app/ui/components/editors/BodyEditor.js @@ -1,9 +1,9 @@ import React, {PropTypes, Component} from 'react'; import Editor from '../base/Editor'; import KeyValueEditor from '../base/KeyValueEditor'; -import {CONTENT_TYPE_FORM_URLENCODED} from '../../../lib/contentTypes'; -import {getContentTypeFromHeaders} from '../../../lib/contentTypes'; -import * as querystring from '../../../lib/querystring'; +import {CONTENT_TYPE_FORM_URLENCODED} from 'backend/contentTypes'; +import {getContentTypeFromHeaders} from 'backend/contentTypes'; +import * as querystring from 'backend/querystring'; class BodyEditor extends Component { static _getBodyFromPairs (pairs) { diff --git a/app/ui/components/editors/CookiesEditor.js b/app/ui/components/editors/CookiesEditor.js index fb7b3ce225..813d388e95 100644 --- a/app/ui/components/editors/CookiesEditor.js +++ b/app/ui/components/editors/CookiesEditor.js @@ -2,7 +2,7 @@ import React, {PropTypes, Component} from 'react'; import {Cookie} from 'tough-cookie'; import CookieInput from '../CookieInput'; -import {cookieToString} from '../../../lib/cookies'; +import {cookieToString} from 'backend/cookies'; class CookiesEditor extends Component { diff --git a/app/ui/components/modals/ChangelogModal.js b/app/ui/components/modals/ChangelogModal.js index 890299d0e4..830a0f3933 100644 --- a/app/ui/components/modals/ChangelogModal.js +++ b/app/ui/components/modals/ChangelogModal.js @@ -5,8 +5,8 @@ import Modal from '../base/Modal'; import ModalBody from '../base/ModalBody'; import ModalHeader from '../base/ModalHeader'; import ModalFooter from '../base/ModalFooter'; -import {CHANGELOG_URL} from '../../../lib/constants'; -import {getAppVersion} from '../../../lib/appInfo'; +import {CHANGELOG_URL} from 'backend/constants'; +import {getAppVersion} from 'backend/appInfo'; class ChangelogModal extends Component { constructor (props) { diff --git a/app/ui/components/modals/CookiesModal.js b/app/ui/components/modals/CookiesModal.js index d44ac6b317..49ba11c2be 100644 --- a/app/ui/components/modals/CookiesModal.js +++ b/app/ui/components/modals/CookiesModal.js @@ -5,8 +5,8 @@ import ModalBody from '../base/ModalBody'; import ModalHeader from '../base/ModalHeader'; import ModalFooter from '../base/ModalFooter'; import CookiesEditor from '../editors/CookiesEditor'; -import * as db from '../../../lib/database'; -import {DEBOUNCE_MILLIS} from '../../../lib/constants'; +import * as db from 'backend/database'; +import {DEBOUNCE_MILLIS} from 'backend/constants'; class CookiesModal extends Component { constructor (props) { diff --git a/app/ui/components/modals/GenerateCodeModal.js b/app/ui/components/modals/GenerateCodeModal.js index b5902eab6a..713c56edcc 100644 --- a/app/ui/components/modals/GenerateCodeModal.js +++ b/app/ui/components/modals/GenerateCodeModal.js @@ -8,7 +8,7 @@ import Modal from '../base/Modal'; import ModalBody from '../base/ModalBody'; import ModalHeader from '../base/ModalHeader'; import ModalFooter from '../base/ModalFooter'; -import {exportHar} from '../../../lib/export/har'; +import {exportHar} from 'backend/export/har'; const DEFAULT_TARGET = availableTargets().find(t => t.key === 'shell'); const DEFAULT_CLIENT = DEFAULT_TARGET.clients.find(t => t.key === 'curl'); diff --git a/app/ui/components/modals/RequestSwitcherModal.js b/app/ui/components/modals/RequestSwitcherModal.js index ae63740f14..fa5317d9e6 100644 --- a/app/ui/components/modals/RequestSwitcherModal.js +++ b/app/ui/components/modals/RequestSwitcherModal.js @@ -5,8 +5,8 @@ import Modal from '../base/Modal'; import ModalHeader from '../base/ModalHeader'; import ModalBody from '../base/ModalBody'; import MethodTag from '../tags/MethodTag'; -import * as db from '../../../lib/database'; -import {trackEvent} from '../../../lib/analytics'; +import * as db from 'backend/database'; +import {trackEvent} from 'backend/analytics'; class RequestSwitcherModal extends Component { diff --git a/app/ui/components/modals/SettingsModal.js b/app/ui/components/modals/SettingsModal.js index af1750089a..e0717f4dfb 100644 --- a/app/ui/components/modals/SettingsModal.js +++ b/app/ui/components/modals/SettingsModal.js @@ -10,8 +10,8 @@ import ModalHeader from '../base/ModalHeader'; import ModalFooter from '../base/ModalFooter'; import KeyboardShortcutsTable from '../KeyboardShortcutsTable'; import * as GlobalActions from '../../redux/modules/global'; -import * as db from '../../../lib/database'; -import {getAppVersion, getAppName, getAppLongName} from '../../../lib/appInfo'; +import * as db from 'backend/database'; +import {getAppVersion, getAppName, getAppLongName} from 'backend/appInfo'; class SettingsTabs extends Component { diff --git a/app/ui/components/modals/WorkspaceEnvironmentsEditModal.js b/app/ui/components/modals/WorkspaceEnvironmentsEditModal.js index 011b5e56a0..72ebcf9263 100644 --- a/app/ui/components/modals/WorkspaceEnvironmentsEditModal.js +++ b/app/ui/components/modals/WorkspaceEnvironmentsEditModal.js @@ -8,7 +8,7 @@ import Modal from '../base/Modal'; import ModalBody from '../base/ModalBody'; import ModalHeader from '../base/ModalHeader'; import ModalFooter from '../base/ModalFooter'; -import * as db from '../../../lib/database' +import * as db from 'backend/database' class WorkspaceEnvironmentsEditModal extends Component { diff --git a/app/ui/components/sidebar/Sidebar.js b/app/ui/components/sidebar/Sidebar.js index 53527740d5..09a394791e 100644 --- a/app/ui/components/sidebar/Sidebar.js +++ b/app/ui/components/sidebar/Sidebar.js @@ -6,8 +6,8 @@ import SidebarRequestRow from './SidebarRequestRow'; import SidebarRequestGroupRow from './SidebarRequestGroupRow'; import SidebarFilter from './SidebarFilter'; import WorkspaceDropdown from '../../containers/WorkspaceDropdown'; -import {SIDEBAR_SKINNY_REMS} from '../../../lib/constants'; -import {COLLAPSE_SIDEBAR_REMS} from '../../../lib/constants'; +import {SIDEBAR_SKINNY_REMS} from 'backend/constants'; +import {COLLAPSE_SIDEBAR_REMS} from 'backend/constants'; class Sidebar extends Component { diff --git a/app/ui/components/sidebar/SidebarFilter.js b/app/ui/components/sidebar/SidebarFilter.js index c954504dd1..68b6a1dc0e 100644 --- a/app/ui/components/sidebar/SidebarFilter.js +++ b/app/ui/components/sidebar/SidebarFilter.js @@ -1,7 +1,7 @@ import React, {Component, PropTypes} from 'react'; import Dropdown from '../base/Dropdown'; import DropdownHint from '../base/DropdownHint'; -import {DEBOUNCE_MILLIS} from '../../../lib/constants'; +import {DEBOUNCE_MILLIS} from 'backend/constants'; class SidebarFilter extends Component { diff --git a/app/ui/components/sidebar/SidebarRequestRow.js b/app/ui/components/sidebar/SidebarRequestRow.js index 6ee915c5d7..3eb1538c32 100644 --- a/app/ui/components/sidebar/SidebarRequestRow.js +++ b/app/ui/components/sidebar/SidebarRequestRow.js @@ -5,7 +5,7 @@ import classnames from 'classnames'; import RequestActionsDropdown from '../../containers/RequestActionsDropdown'; import Editable from '../base/Editable'; import MethodTag from '../tags/MethodTag'; -import * as db from '../../../lib/database'; +import * as db from 'backend/database'; import * as ReactDOM from 'react/lib/ReactDOM'; diff --git a/app/ui/components/tags/MethodTag.js b/app/ui/components/tags/MethodTag.js index 1b43987d5b..1de94d5835 100644 --- a/app/ui/components/tags/MethodTag.js +++ b/app/ui/components/tags/MethodTag.js @@ -1,5 +1,5 @@ import React, {PropTypes} from 'react'; -import * as constants from '../../../lib/constants'; +import * as constants from 'backend/constants'; const MethodTag = ({method, fullNames}) => { let methodName = method; diff --git a/app/ui/components/viewers/ResponseViewer.js b/app/ui/components/viewers/ResponseViewer.js index 634badf300..cf0cc1d1c7 100644 --- a/app/ui/components/viewers/ResponseViewer.js +++ b/app/ui/components/viewers/ResponseViewer.js @@ -6,7 +6,7 @@ import ResponseError from './ResponseError'; import { PREVIEW_MODE_FRIENDLY, PREVIEW_MODE_SOURCE -} from '../../../lib/previewModes'; +} from 'backend/previewModes'; class ResponseViewer extends Component { shouldComponentUpdate (nextProps) { diff --git a/app/ui/containers/App.js b/app/ui/containers/App.js index eba492d8ef..2df2ff9564 100644 --- a/app/ui/containers/App.js +++ b/app/ui/containers/App.js @@ -19,7 +19,7 @@ import SettingsModal from '../components/modals/SettingsModal'; import RequestPane from '../components/RequestPane'; import ResponsePane from '../components/ResponsePane'; import Sidebar from '../components/sidebar/Sidebar'; -import {PREVIEW_MODE_FRIENDLY} from '../../lib/previewModes'; +import {PREVIEW_MODE_FRIENDLY} from 'backend/previewModes'; import { MAX_PANE_WIDTH, MIN_PANE_WIDTH, @@ -28,14 +28,14 @@ import { MIN_SIDEBAR_REMS, DEFAULT_SIDEBAR_WIDTH, CHECK_FOR_UPDATES_INTERVAL -} from '../../lib/constants'; +} from 'backend/constants'; import * as GlobalActions from '../redux/modules/global'; import * as RequestActions from '../redux/modules/requests'; import * as WorkspaceActions from '../redux/modules/workspaces'; -import * as db from '../../lib/database'; -import {importCurl} from '../../lib/export/curl'; -import {trackEvent} from '../../lib/analytics'; -import {getAppVersion} from '../../lib/appInfo'; +import * as db from 'backend/database'; +import {importCurl} from 'backend/export/curl'; +import {trackEvent} from 'backend/analytics'; +import {getAppVersion} from 'backend/appInfo'; import {getModal} from '../components/modals/index'; diff --git a/app/ui/containers/EnvironmentsDropdown.js b/app/ui/containers/EnvironmentsDropdown.js index d25c214450..83eac5c3bd 100644 --- a/app/ui/containers/EnvironmentsDropdown.js +++ b/app/ui/containers/EnvironmentsDropdown.js @@ -7,7 +7,7 @@ import EnvironmentsModal from '../components/modals/WorkspaceEnvironmentsEditMod import Dropdown from '../components/base/Dropdown'; import DropdownDivider from '../components/base/DropdownDivider'; import {getModal} from '../components/modals/index'; -import * as db from '../../lib/database'; +import * as db from 'backend/database'; class EnvironmentsDropdown extends Component { diff --git a/app/ui/containers/RequestActionsDropdown.js b/app/ui/containers/RequestActionsDropdown.js index 7eee43f62f..4bd80a5e14 100644 --- a/app/ui/containers/RequestActionsDropdown.js +++ b/app/ui/containers/RequestActionsDropdown.js @@ -5,7 +5,7 @@ import Dropdown from '../components/base/Dropdown'; import DropdownHint from '../components/base/DropdownHint'; import GenerateCodeModal from '../components/modals/GenerateCodeModal'; import PromptModal from '../components/modals/PromptModal'; -import * as db from '../../lib/database'; +import * as db from 'backend/database'; import {getModal} from '../components/modals/index'; diff --git a/app/ui/containers/RequestGroupActionsDropdown.js b/app/ui/containers/RequestGroupActionsDropdown.js index d9db705ed3..1eb459b7c8 100644 --- a/app/ui/containers/RequestGroupActionsDropdown.js +++ b/app/ui/containers/RequestGroupActionsDropdown.js @@ -6,7 +6,7 @@ import DropdownHint from '../components/base/DropdownHint'; import DropdownDivider from '../components/base/DropdownDivider'; import EnvironmentEditModal from '../components/modals/EnvironmentEditModal'; import PromptModal from '../components/modals/PromptModal'; -import * as db from '../../lib/database'; +import * as db from 'backend/database'; import {getModal} from '../components/modals/index'; class RequestGroupActionsDropdown extends Component { diff --git a/app/ui/containers/WorkspaceDropdown.js b/app/ui/containers/WorkspaceDropdown.js index 55c6823f61..acaf8d25d2 100644 --- a/app/ui/containers/WorkspaceDropdown.js +++ b/app/ui/containers/WorkspaceDropdown.js @@ -14,8 +14,8 @@ import SettingsModal from '../components/modals/SettingsModal'; import ChangelogModal from '../components/modals/ChangelogModal'; import * as WorkspaceActions from '../redux/modules/workspaces'; import * as GlobalActions from '../redux/modules/global'; -import * as db from '../../lib/database'; -import {getAppVersion} from '../../lib/appInfo'; +import * as db from 'backend/database'; +import {getAppVersion} from 'backend/appInfo'; import {getModal} from '../components/modals/index'; class WorkspaceDropdown extends Component { diff --git a/app/ui/css/components/tabs.less b/app/ui/css/components/tabs.less index 483143f2a8..10269d0440 100644 --- a/app/ui/css/components/tabs.less +++ b/app/ui/css/components/tabs.less @@ -76,6 +76,7 @@ .ReactTabs__TabPanel { width: 100%; height: 100%; + position: relative; box-sizing: border-box; } } diff --git a/app/ui/css/layout/base.less b/app/ui/css/layout/base.less index 436eb91c6b..1bed5e8d63 100644 --- a/app/ui/css/layout/base.less +++ b/app/ui/css/layout/base.less @@ -250,6 +250,19 @@ i.fa { .scrollable { overflow: auto; + position: relative; +} + +.scrollable-container { + position: relative; + + & > .scrollable { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + } } .hover-scrollbars { diff --git a/app/ui/index.js b/app/ui/index.js index b12e730a03..7c0fe18229 100644 --- a/app/ui/index.js +++ b/app/ui/index.js @@ -24,9 +24,9 @@ import './css/lib/fonts/open-sans.css' import './css/index.less' import './css/lib/chrome/platform_app.css' import {initStore} from './redux/initstore'; -import {initDB} from './../lib/database'; -import {getAppVersion} from './../lib/appInfo'; -import {initAnalytics} from './../lib/analytics'; +import {initDB} from 'backend/database'; +import {getAppVersion} from 'backend/appInfo'; +import {initAnalytics} from 'backend/analytics'; // Don't inject component styles (use our own) Tabs.setUseDefaultStyles(false); diff --git a/app/ui/lib/debounce.js b/app/ui/lib/debounce.js index 4a92a47d1d..661c757549 100644 --- a/app/ui/lib/debounce.js +++ b/app/ui/lib/debounce.js @@ -1,4 +1,4 @@ -import {DEBOUNCE_MILLIS} from '../../lib/constants'; +import {DEBOUNCE_MILLIS} from 'backend/constants'; export function debounce (callback) { let timeout = null; diff --git a/app/ui/redux/create.js b/app/ui/redux/create.js index a330cf99d4..880f41786c 100644 --- a/app/ui/redux/create.js +++ b/app/ui/redux/create.js @@ -2,7 +2,7 @@ import {createStore, applyMiddleware} from 'redux'; import thunkMiddleware from 'redux-thunk' import localStorageMiddleware, {getState} from './middleware/localstorage'; import rootReducer from './reducer'; -import {LOCALSTORAGE_KEY} from '../../lib/constants'; +import {LOCALSTORAGE_KEY} from 'backend/constants'; export default function configureStore () { diff --git a/app/ui/redux/initstore.js b/app/ui/redux/initstore.js index 7d3f520d97..e07156b597 100644 --- a/app/ui/redux/initstore.js +++ b/app/ui/redux/initstore.js @@ -1,7 +1,7 @@ import {bindActionCreators} from 'redux'; import * as entitiesActions from './modules/entities'; -import * as db from '../../lib/database'; -import {CHANGE_INSERT, CHANGE_UPDATE, CHANGE_REMOVE} from '../../lib/database'; +import * as db from 'backend/database'; +import {CHANGE_INSERT, CHANGE_UPDATE, CHANGE_REMOVE} from 'backend/database'; const CHANGE_ID = 'store.listener'; diff --git a/app/ui/redux/modules/entities.js b/app/ui/redux/modules/entities.js index 893b079601..33378cedf0 100644 --- a/app/ui/redux/modules/entities.js +++ b/app/ui/redux/modules/entities.js @@ -4,7 +4,7 @@ import { ALL_TYPES, TYPE_RESPONSE, TYPE_STATS -} from '../../../lib/database/index'; +} from 'backend/database/index'; const ENTITY_BLACKLIST = { [TYPE_RESPONSE]: 1, diff --git a/app/ui/redux/modules/global.js b/app/ui/redux/modules/global.js index f0a2f59a97..f652b0f81e 100644 --- a/app/ui/redux/modules/global.js +++ b/app/ui/redux/modules/global.js @@ -1,9 +1,9 @@ import electron from 'electron'; import fs from 'fs'; -import {importJSON, exportJSON} from '../../../lib/export/database'; -import * as db from '../../../lib/database/index'; -import {trackEvent} from '../../../lib/analytics'; +import {importJSON, exportJSON} from 'backend/export/database'; +import * as db from 'backend/database/index'; +import {trackEvent} from 'backend/analytics'; const LOAD_START = 'global/load-start'; const LOAD_STOP = 'global/load-stop'; diff --git a/app/ui/redux/modules/requests.js b/app/ui/redux/modules/requests.js index 5a66a429eb..aa823262ba 100644 --- a/app/ui/redux/modules/requests.js +++ b/app/ui/redux/modules/requests.js @@ -1,7 +1,7 @@ import {combineReducers} from 'redux'; -import {trackEvent} from '../../../lib/analytics'; -import * as network from '../../../lib/network'; +import {trackEvent} from 'backend/analytics'; +import * as network from 'backend/network'; export const REQUEST_CHANGE_FILTER = 'requests/filter'; export const REQUEST_SEND_START = 'requests/start'; diff --git a/app/ui/redux/modules/workspaces.js b/app/ui/redux/modules/workspaces.js index 5219298bac..56548edd5a 100644 --- a/app/ui/redux/modules/workspaces.js +++ b/app/ui/redux/modules/workspaces.js @@ -1,5 +1,5 @@ import {combineReducers} from 'redux'; -import {MODAL_WORKSPACE_RENAME} from '../../../lib/constants'; +import {MODAL_WORKSPACE_RENAME} from 'backend/constants'; export const WORKSPACE_ACTIVATE = 'workspaces/activate'; diff --git a/webpack/webpack.config.base.babel.js b/webpack/webpack.config.base.babel.js index 473cccf04e..713f4fc81a 100644 --- a/webpack/webpack.config.base.babel.js +++ b/webpack/webpack.config.base.babel.js @@ -19,7 +19,7 @@ export default { id: 'babel', test: /\.(js|jsx)$/, loaders: ['babel'], - exclude: /node_modules/ + exclude: [/node_modules/, /backend/, /__fixtures__/, /__tests__/] }, { test: /\.elm$/, @@ -61,6 +61,9 @@ export default { ] }, resolve: { + alias: { + 'backend': path.resolve(__dirname, '../app/backend') + }, extensions: ['', '.js', '.json', '.jsx'], packageMains: ['webpack', 'browser', 'web', 'browserify', ['jam', 'main'], 'main'] }, @@ -71,4 +74,3 @@ export default { plugins: [], target: 'electron-renderer' }; -