mirror of
https://github.com/Kong/insomnia.git
synced 2026-04-21 14:47:46 -04:00
Huge refactor and more css fixes
This commit is contained in:
@@ -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',
|
||||
@@ -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 => {
|
||||
@@ -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}`);
|
||||
@@ -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));
|
||||
@@ -1,4 +1,6 @@
|
||||
import * as querystringUtils from '../querystring';
|
||||
'use strict';
|
||||
|
||||
const querystringUtils = require('../querystring');
|
||||
|
||||
describe('getBasicAuthHeader()', () => {
|
||||
it('gets joiner for bare URL', () => {
|
||||
@@ -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');
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import * as util from '../util';
|
||||
'use strict';
|
||||
|
||||
const util = require('../util');
|
||||
|
||||
describe('getBasicAuthHeader()', () => {
|
||||
it('succeed with username and password', () => {
|
||||
@@ -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});
|
||||
}
|
||||
}
|
||||
};
|
||||
23
app/backend/appInfo.js
Normal file
23
app/backend/appInfo.js
Normal file
@@ -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';
|
||||
};
|
||||
@@ -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
|
||||
|
||||
32
app/backend/contentTypes.js
Normal file
32
app/backend/contentTypes.js
Normal file
@@ -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;
|
||||
};
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
@@ -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]));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -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
|
||||
};
|
||||
}
|
||||
};
|
||||
@@ -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) {
|
||||
@@ -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);
|
||||
@@ -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
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
})
|
||||
}
|
||||
};
|
||||
24
app/backend/previewModes.js
Normal file
24
app/backend/previewModes.js
Normal file
@@ -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';
|
||||
};
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
@@ -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));
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -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 "<MODEL_NAME>_<TIMESTAMP><RANDOM>"
|
||||
* @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}`;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -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';
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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';
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
import React, {Component} from 'react';
|
||||
import {MOD_SYM} from '../../lib/constants';
|
||||
import {MOD_SYM} from 'backend/constants';
|
||||
|
||||
const KeyboardShortcutsTable = () => (
|
||||
<table className="wide">
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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}
|
||||
/>
|
||||
</TabPanel>
|
||||
<TabPanel>
|
||||
<AuthEditor
|
||||
showPasswords={showPasswords}
|
||||
request={request}
|
||||
onChange={updateRequestAuthentication}
|
||||
/>
|
||||
</TabPanel>
|
||||
<TabPanel className="scrollable">
|
||||
<div className="pad no-pad-bottom">
|
||||
<label className="label--small">Url Preview</label>
|
||||
<code className="txt-sm block">
|
||||
<RenderedQueryString
|
||||
request={request}
|
||||
placeholder="http://myproduct.com?name=Gregory"
|
||||
/>
|
||||
</code>
|
||||
<TabPanel className="scrollable-container">
|
||||
<div className="scrollable">
|
||||
<AuthEditor
|
||||
showPasswords={showPasswords}
|
||||
request={request}
|
||||
onChange={updateRequestAuthentication}
|
||||
/>
|
||||
</div>
|
||||
<KeyValueEditor
|
||||
namePlaceholder="name"
|
||||
valuePlaceholder="value"
|
||||
pairs={request.parameters}
|
||||
onChange={updateRequestParameters}
|
||||
/>
|
||||
</TabPanel>
|
||||
<TabPanel className="scrollable">
|
||||
<RequestHeadersEditor
|
||||
headers={request.headers}
|
||||
onChange={updateRequestHeaders}
|
||||
bulk={useBulkHeaderEditor}
|
||||
/>
|
||||
<div className="pad no-pad-top text-right">
|
||||
<button className="btn btn--outlined btn--super-compact"
|
||||
onClick={() => updateSettingsUseBulkHeaderEditor(!useBulkHeaderEditor)}>
|
||||
{useBulkHeaderEditor ? 'Regular Edit' : 'Bulk Edit'}
|
||||
</button>
|
||||
<TabPanel className="scrollable-container">
|
||||
<div className="scrollable">
|
||||
<div className="pad no-pad-bottom">
|
||||
<label className="label--small">Url Preview</label>
|
||||
<code className="txt-sm block">
|
||||
<RenderedQueryString
|
||||
request={request}
|
||||
placeholder="http://myproduct.com?name=Gregory"
|
||||
/>
|
||||
</code>
|
||||
</div>
|
||||
<KeyValueEditor
|
||||
namePlaceholder="name"
|
||||
valuePlaceholder="value"
|
||||
pairs={request.parameters}
|
||||
onChange={updateRequestParameters}
|
||||
/>
|
||||
</div>
|
||||
</TabPanel>
|
||||
<TabPanel className="scrollable-container">
|
||||
<div className="scrollable">
|
||||
<RequestHeadersEditor
|
||||
headers={request.headers}
|
||||
onChange={updateRequestHeaders}
|
||||
bulk={useBulkHeaderEditor}
|
||||
/>
|
||||
<div className="pad no-pad-top text-right">
|
||||
<button className="btn btn--outlined btn--super-compact"
|
||||
onClick={() => updateSettingsUseBulkHeaderEditor(!useBulkHeaderEditor)}>
|
||||
{useBulkHeaderEditor ? 'Regular Edit' : 'Bulk Edit'}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</TabPanel>
|
||||
</Tabs>
|
||||
|
||||
@@ -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}
|
||||
/>
|
||||
</TabPanel>
|
||||
<TabPanel className="scrollable pad">
|
||||
<ResponseCookiesViewer
|
||||
showCookiesModal={showCookiesModal}
|
||||
key={response._id}
|
||||
headers={cookieHeaders}
|
||||
/>
|
||||
<TabPanel className="scrollable-container">
|
||||
<div className="scrollable pad">
|
||||
<ResponseCookiesViewer
|
||||
showCookiesModal={showCookiesModal}
|
||||
key={response._id}
|
||||
headers={cookieHeaders}
|
||||
/>
|
||||
</div>
|
||||
</TabPanel>
|
||||
<TabPanel className="scrollable pad">
|
||||
<ResponseHeadersViewer
|
||||
key={response._id}
|
||||
headers={response.headers}
|
||||
/>
|
||||
<TabPanel className="scrollable-container">
|
||||
<div className="scrollable pad">
|
||||
<ResponseHeadersViewer
|
||||
key={response._id}
|
||||
headers={response.headers}
|
||||
/>
|
||||
</div>
|
||||
</TabPanel>
|
||||
</Tabs>
|
||||
</section>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import React, {PropTypes} from 'react';
|
||||
import {MOD_SYM} from '../../../lib/constants';
|
||||
import {MOD_SYM} from 'backend/constants';
|
||||
|
||||
const DropdownHint = ({char}) => (
|
||||
<div className="dropdown__hint">
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -76,6 +76,7 @@
|
||||
.ReactTabs__TabPanel {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {DEBOUNCE_MILLIS} from '../../lib/constants';
|
||||
import {DEBOUNCE_MILLIS} from 'backend/constants';
|
||||
|
||||
export function debounce (callback) {
|
||||
let timeout = null;
|
||||
|
||||
@@ -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 () {
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
@@ -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'
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user