public inbox for [email protected]
help / color / mirror / Atom feedFrom: Joao De Almeida Pereira <[email protected]>
To: Dave Page <[email protected]>
Cc: Murtuza Zabuawala <[email protected]>
Cc: pgadmin-hackers <[email protected]>
Subject: Re: [pgAdmin4][RM#3140] Add service parameter
Date: Mon, 12 Mar 2018 21:18:50 +0000
Message-ID: <CAE+jjakfoBbkQfg0po3zvj0ScJQzrCWF2fUeuypVmBmpKh56iA@mail.gmail.com> (raw)
In-Reply-To: <CA+OCxowJVm2iPkhCJ+Zwjf=T0vjy77SawFAwxAAqZSkYJkpnug@mail.gmail.com>
References: <CAKKotZSrYHCypG0rfsD9DHCoE8-c+XAvBnU3vS8LMDfPqSrC1Q@mail.gmail.com>
<CA+OCxoy7R6TU5Z3+b-D6Oz80yBafYVMe-6AtJ3QXoK6HC3jFXw@mail.gmail.com>
<CAKKotZSt4is3xjhRbroRkuzBvGtbruGERQ2EX4dTTSvDX+3KnQ@mail.gmail.com>
<CAKKotZT5AikN+70CnVwcyDApeSPZ6Awx8YTNKoMWxHRmoVctHw@mail.gmail.com>
<CA+OCxowJVm2iPkhCJ+Zwjf=T0vjy77SawFAwxAAqZSkYJkpnug@mail.gmail.com>
Hi Dave and Murtuza,
Regarding this patch we refactored the Javascript code so that is lives in
a different file and added some tests.
Also we found an issue with karma-jasmine that does not allow us to use
jasmine 3.1 yet. You can find attached a patch that reverts that commit.
Thanks
Victoria && Joao
On Mon, Mar 12, 2018 at 4:46 PM Dave Page <[email protected]> wrote:
> Thanks, patch applied!
>
> On Mon, Mar 12, 2018 at 3:31 AM, Murtuza Zabuawala <
> [email protected]> wrote:
>
>> Hi Dave,
>>
>> PFA updated patch.
>>
>> --
>> Regards,
>> Murtuza Zabuawala
>> EnterpriseDB: http://www.enterprisedb.com
>> The Enterprise PostgreSQL Company
>>
>>
>> On Fri, Mar 9, 2018 at 9:29 PM, Murtuza Zabuawala <
>> [email protected]> wrote:
>>
>>> Hi Dave,
>>>
>>> I'll change the name and send you updated patch.
>>>
>>>
>>> On Fri, Mar 9, 2018 at 9:25 PM, Dave Page <[email protected]> wrote:
>>>
>>>> HI
>>>>
>>>> On Fri, Mar 9, 2018 at 11:47 AM, Murtuza Zabuawala <
>>>> [email protected]> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> PFA patch to add service parameter in server dialog.
>>>>> - Docs updated
>>>>> - Test case added for Service ID parameter
>>>>>
>>>>> Please note,
>>>>> I have extracted Connection class and Server manager class from our
>>>>> own custom Psycopg2 driver module.
>>>>>
>>>>> Patch also covers RM#3120
>>>>>
>>>>
>>>> This patch seems a little confused. The "Service" and "Service ID"
>>>> fields from pgAdmin 3 are very different things. The Redmine ticket seems
>>>> to be asking for the Service field (the pg_service.conf service name),
>>>> *not* Service ID (the operating system's service ID, used to start/stop the
>>>> database server service).
>>>>
>>>> --
>>>> Dave Page
>>>> Blog: http://pgsnake.blogspot.com
>>>> Twitter: @pgsnake
>>>>
>>>> EnterpriseDB UK: http://www.enterprisedb.com
>>>> The Enterprise PostgreSQL Company
>>>>
>>>
>>>
>>
>
>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
Attachments:
[text/x-patch] refactor-javascript.diff (19.9K, 3-refactor-javascript.diff)
download | inline diff:
diff --git a/web/package.json b/web/package.json
index ad0f3e16..66684fc6 100644
--- a/web/package.json
+++ b/web/package.json
@@ -69,6 +69,7 @@
"hard-source-webpack-plugin": "^0.4.9",
"immutability-helper": "^2.2.0",
"imports-loader": "^0.7.1",
+ "ip-address": "^5.8.9",
"jquery": "1.11.2",
"jquery-contextmenu": "^2.5.0",
"jquery-ui": "^1.12.1",
diff --git a/web/pgadmin/browser/server_groups/servers/static/js/server.js b/web/pgadmin/browser/server_groups/servers/static/js/server.js
index 53be2255..302fe458 100644
--- a/web/pgadmin/browser/server_groups/servers/static/js/server.js
+++ b/web/pgadmin/browser/server_groups/servers/static/js/server.js
@@ -2,10 +2,13 @@ define('pgadmin.node.server', [
'sources/gettext', 'sources/url_for', 'jquery', 'underscore', 'backbone',
'underscore.string', 'sources/pgadmin', 'pgadmin.browser',
'pgadmin.server.supported_servers', 'pgadmin.user_management.current_user',
- 'pgadmin.alertifyjs', 'pgadmin.backform', 'pgadmin.browser.server.privilege',
+ 'pgadmin.alertifyjs', 'pgadmin.backform',
+ 'sources/browser/server_groups/servers/model_validation',
+ 'pgadmin.browser.server.privilege',
], function(
gettext, url_for, $, _, Backbone, S, pgAdmin, pgBrowser,
- supported_servers, current_user, Alertify, Backform
+ supported_servers, current_user, Alertify, Backform,
+ modelValidation
) {
if (!pgBrowser.Nodes['server']) {
@@ -848,110 +851,8 @@ define('pgadmin.node.server', [
group: gettext('Connection'),
}],
validate: function() {
- var err = {},
- errmsg,
- self = this;
-
- var service_id = this.get('service');
-
- var check_for_empty = function(id, msg) {
- var v = self.get(id);
- if (
- _.isUndefined(v) || v === null || String(v).replace(/^\s+|\s+$/g, '') == ''
- ) {
- err[id] = msg;
- errmsg = errmsg || msg;
- return true;
- } else {
- self.errorModel.unset(id);
- return false;
- }
- };
- var check_for_valid_ipv6 = function(val){
- // Regular expression for validating IPv6 address formats
- var exps = ['^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|',
- '(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|',
- '2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|',
- '(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|',
- ':((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|',
- '(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|',
- '2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|',
- '(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|',
- '[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|',
- '((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|',
- '(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|',
- '1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|',
- '((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$'];
-
- var exp = new RegExp(exps.join(''));
- return exp.test(val.trim());
- };
- var check_for_valid_ip = function(id, msg) {
- var v4exps = '(^\\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\\s*$)';
- var v4exp = new RegExp(v4exps);
- var v = self.get(id);
- if (
- v && !(v4exp.test(v.trim()))
- ) {
- if(!check_for_valid_ipv6(v)){
- err[id] = msg;
- errmsg = msg;
- }
- } else {
- self.errorModel.unset(id);
- }
- };
-
- if (!self.isNew() && 'id' in self.sessAttrs) {
- err['id'] = gettext('The ID cannot be changed.');
- errmsg = err['id'];
- } else {
- self.errorModel.unset('id');
- }
- check_for_empty('name', gettext('Name must be specified.'));
-
- // If no service id then only check
- if (
- _.isUndefined(service_id) || _.isNull(service_id) ||
- String(service_id).replace(/^\s+|\s+$/g, '') == ''
- ) {
- if (check_for_empty(
- 'host', gettext('Either Host name or Host address must be specified.')
- ) && check_for_empty('hostaddr', gettext('Either Host name or Host address must be specified.'))){
- errmsg = errmsg || gettext('Either Host name or Host address must be specified');
- } else {
- errmsg = undefined;
- delete err['host'];
- delete err['hostaddr'];
- }
-
- check_for_empty(
- 'db', gettext('Maintenance database must be specified.')
- );
- check_for_valid_ip(
- 'hostaddr', gettext('Host address must be valid IPv4 or IPv6 address.')
- );
- check_for_valid_ip(
- 'hostaddr', gettext('Host address must be valid IPv4 or IPv6 address.')
- );
- } else {
- _.each(['host', 'hostaddr', 'db'], (item) => {
- self.errorModel.unset(item);
- });
- }
-
- check_for_empty(
- 'username', gettext('Username must be specified.')
- );
- check_for_empty('port', gettext('Port must be specified.'));
-
- this.errorModel.set(err);
-
- if (_.size(err)) {
- return errmsg;
- }
-
- return null;
+ const validateModel = new modelValidation.ModelValidation(this);
+ return validateModel.validate();
},
isConnected: function(model) {
return model.get('connected');
diff --git a/web/pgadmin/static/bundle/browser.js b/web/pgadmin/static/bundle/browser.js
index 3fcc69d8..83b2ad8b 100644
--- a/web/pgadmin/static/bundle/browser.js
+++ b/web/pgadmin/static/bundle/browser.js
@@ -1,6 +1,6 @@
define('bundled_browser',[
'pgadmin.browser',
- 'sources/browser/server_groups/servers/databases/external_tables/index',
+ 'sources/browser/index',
], function(pgBrowser) {
pgBrowser.init();
});
diff --git a/web/pgadmin/static/js/browser/index.js b/web/pgadmin/static/js/browser/index.js
new file mode 100644
index 00000000..297e8bf9
--- /dev/null
+++ b/web/pgadmin/static/js/browser/index.js
@@ -0,0 +1,10 @@
+/////////////////////////////////////////////////////////////
+//
+// pgAdmin 4 - PostgreSQL Tools
+//
+// Copyright (C) 2013 - 2018, The pgAdmin Development Team
+// This software is released under the PostgreSQL Licence
+//
+//////////////////////////////////////////////////////////////
+
+import 'server_groups';
diff --git a/web/pgadmin/static/js/browser/server_groups/index.js b/web/pgadmin/static/js/browser/server_groups/index.js
new file mode 100644
index 00000000..b151b6f6
--- /dev/null
+++ b/web/pgadmin/static/js/browser/server_groups/index.js
@@ -0,0 +1,10 @@
+/////////////////////////////////////////////////////////////
+//
+// pgAdmin 4 - PostgreSQL Tools
+//
+// Copyright (C) 2013 - 2018, The pgAdmin Development Team
+// This software is released under the PostgreSQL Licence
+//
+//////////////////////////////////////////////////////////////
+
+import 'servers';
diff --git a/web/pgadmin/static/js/browser/server_groups/servers/databases/index.js b/web/pgadmin/static/js/browser/server_groups/servers/databases/index.js
new file mode 100644
index 00000000..ef17c0ad
--- /dev/null
+++ b/web/pgadmin/static/js/browser/server_groups/servers/databases/index.js
@@ -0,0 +1,10 @@
+/////////////////////////////////////////////////////////////
+//
+// pgAdmin 4 - PostgreSQL Tools
+//
+// Copyright (C) 2013 - 2018, The pgAdmin Development Team
+// This software is released under the PostgreSQL Licence
+//
+//////////////////////////////////////////////////////////////
+
+import 'external_tables';
diff --git a/web/pgadmin/static/js/browser/server_groups/servers/index.js b/web/pgadmin/static/js/browser/server_groups/servers/index.js
new file mode 100644
index 00000000..242a1919
--- /dev/null
+++ b/web/pgadmin/static/js/browser/server_groups/servers/index.js
@@ -0,0 +1,11 @@
+/////////////////////////////////////////////////////////////
+//
+// pgAdmin 4 - PostgreSQL Tools
+//
+// Copyright (C) 2013 - 2018, The pgAdmin Development Team
+// This software is released under the PostgreSQL Licence
+//
+//////////////////////////////////////////////////////////////
+
+import 'databases';
+import 'model_validation';
diff --git a/web/pgadmin/static/js/browser/server_groups/servers/model_validation.js b/web/pgadmin/static/js/browser/server_groups/servers/model_validation.js
new file mode 100644
index 00000000..feb4e6bd
--- /dev/null
+++ b/web/pgadmin/static/js/browser/server_groups/servers/model_validation.js
@@ -0,0 +1,104 @@
+/////////////////////////////////////////////////////////////
+//
+// pgAdmin 4 - PostgreSQL Tools
+//
+// Copyright (C) 2013 - 2018, The pgAdmin Development Team
+// This software is released under the PostgreSQL Licence
+//
+//////////////////////////////////////////////////////////////
+
+import gettext from 'sources/gettext';
+import _ from 'underscore';
+import {Address4, Address6} from 'ip-address';
+
+export class ModelValidation {
+ constructor(model) {
+ this.err = {};
+ this.errmsg = '';
+ this.model = model;
+ }
+
+ validate() {
+ const serviceId = this.model.get('service');
+
+ if (!this.model.isNew() && 'id' in this.model.sessAttrs) {
+ this.err['id'] = gettext('The ID cannot be changed.');
+ this.errmsg = this.err['id'];
+ } else {
+ this.model.errorModel.unset('id');
+ }
+
+ this.checkForEmpty('name', gettext('Name must be specified.'));
+
+ if (ModelValidation.isEmptyString(serviceId)) {
+ this.checkHostAndHostAddress();
+
+ this.checkForEmpty('db', gettext('Maintenance database must be specified.'));
+ } else {
+ this.clearHostAddressAndDbErrors();
+ }
+
+ this.checkForEmpty('username', gettext('Username must be specified.'));
+ this.checkForEmpty('port', gettext('Port must be specified.'));
+
+ this.model.errorModel.set(this.err);
+
+ if (_.size(this.err)) {
+ return this.errmsg;
+ }
+
+ return null;
+ }
+
+ clearHostAddressAndDbErrors() {
+ _.each(['host', 'hostaddr', 'db'], (item) => {
+ this.model.errorModel.unset(item);
+ });
+ }
+
+ checkHostAndHostAddress() {
+ const translatedStr = gettext('Either Host name or Host address must be' +
+ ' specified.');
+ if (this.checkForEmpty('host', translatedStr) &&
+ this.checkForEmpty('hostaddr', translatedStr)) {
+ this.errmsg = this.errmsg || translatedStr;
+ } else {
+ this.errmsg = undefined;
+ delete this.err['host'];
+ delete this.err['hostaddr'];
+ }
+
+ this.checkForValidIp(this.model.get('hostaddr'),
+ gettext('Host address must be valid IPv4 or IPv6 address.'));
+ }
+
+ checkForValidIp(ipAddress, msg) {
+ if (ipAddress) {
+ const isIpv6Address = new Address6(ipAddress).isValid();
+ const isIpv4Address = new Address4(ipAddress).isValid();
+ if (!isIpv4Address && !isIpv6Address) {
+ this.err['hostaddr'] = msg;
+ this.errmsg = msg;
+ }
+ } else {
+ this.model.errorModel.unset('hostaddr');
+ }
+ }
+
+ checkForEmpty(id, msg) {
+ const value = this.model.get(id);
+
+ if (ModelValidation.isEmptyString(value)) {
+ this.err[id] = msg;
+ this.errmsg = this.errmsg || msg;
+ return true;
+ } else {
+ this.model.errorModel.unset(id);
+ return false;
+ }
+ }
+
+ static isEmptyString(string) {
+ return _.isUndefined(string) || _.isNull(string) || string.trim() === '';
+ }
+}
diff --git a/web/regression/javascript/browser/server_groups/servers/model_validation_spec.js b/web/regression/javascript/browser/server_groups/servers/model_validation_spec.js
new file mode 100644
index 00000000..f0b13a8d
--- /dev/null
+++ b/web/regression/javascript/browser/server_groups/servers/model_validation_spec.js
@@ -0,0 +1,101 @@
+/////////////////////////////////////////////////////////////
+//
+// pgAdmin 4 - PostgreSQL Tools
+//
+// Copyright (C) 2013 - 2018, The pgAdmin Development Team
+// This software is released under the PostgreSQL Licence
+//
+//////////////////////////////////////////////////////////////
+
+import {ModelValidation} from 'sources/browser/server_groups/servers/model_validation';
+
+describe('Server#ModelValidation', () => {
+ describe('When validating a server parameters', () => {
+ let model;
+ let modelValidation;
+ beforeEach(() => {
+ model = {
+ errorModel: jasmine.createSpyObj('errorModel', ['set', 'unset']),
+ allValues: {},
+ get: function (key) {
+ return this.allValues[key];
+ },
+ sessAttrs: {},
+ };
+ model.isNew = jasmine.createSpy('isNew');
+ modelValidation = new ModelValidation(model);
+ });
+
+ describe('When all parameters are valid', () => {
+ beforeEach(() => {
+ model.isNew.and.returnValue(true);
+ model.allValues['name'] = 'some name';
+ model.allValues['username'] = 'some username';
+ model.allValues['port'] = 'some port';
+ });
+
+ describe('No service id', () => {
+ it('does not set any error in the model', () => {
+ model.allValues['host'] = 'some host';
+ model.allValues['db'] = 'some db';
+ model.allValues['hostaddr'] = '1.1.1.1';
+ expect(modelValidation.validate()).toBeNull();
+ expect(model.errorModel.set).toHaveBeenCalledWith({});
+ });
+ });
+
+ describe('Service id present', () => {
+ it('does not set any error in the model', () => {
+ model.allValues['service'] = 'asdfg';
+ expect(modelValidation.validate()).toBeNull();
+ expect(model.errorModel.set).toHaveBeenCalledWith({});
+ });
+ });
+ });
+
+ describe('When no parameters are valid', () => {
+ describe('Service id not present', () => {
+ it('does not set any error in the model', () => {
+ expect(modelValidation.validate()).toBe('Name must be specified.');
+ expect(model.errorModel.set).toHaveBeenCalledTimes(1);
+ expect(model.errorModel.set).toHaveBeenCalledWith({
+ name: 'Name must be specified.',
+ host: 'Either Host name or Host address must be specified.',
+ hostaddr: 'Either Host name or Host address must be specified.',
+ db: 'Maintenance database must be specified.',
+ username: 'Username must be specified.',
+ port: 'Port must be specified.'
+ });
+ });
+ });
+
+ describe('Host address is not valid', () => {
+ it('sets the "Host address must be a valid IPv4 or IPv6 address" error', () => {
+ model.allValues['hostaddr'] = 'something that is not an ip address';
+ expect(modelValidation.validate()).toBe('Host address must be valid IPv4 or IPv6 address.');
+ expect(model.errorModel.set).toHaveBeenCalledTimes(1);
+ expect(model.errorModel.set).toHaveBeenCalledWith({
+ name: 'Name must be specified.',
+ hostaddr: 'Host address must be valid IPv4 or IPv6 address.',
+ db: 'Maintenance database must be specified.',
+ username: 'Username must be specified.',
+ port: 'Port must be specified.'
+ });
+ });
+ });
+
+ describe('Service id present', () => {
+ it('does not set any error in the model', () => {
+ model.allValues['service'] = 'asdfg';
+ expect(modelValidation.validate()).toBe('Name must be specified.');
+ expect(model.errorModel.set).toHaveBeenCalledTimes(1);
+ expect(model.errorModel.set).toHaveBeenCalledWith({
+ name: 'Name must be specified.',
+ username: 'Username must be specified.',
+ port: 'Port must be specified.'
+ });
+ });
+ });
+ });
+ });
+});
diff --git a/web/yarn.lock b/web/yarn.lock
index 85ccbc8b..2dc4c5c2 100644
--- a/web/yarn.lock
+++ b/web/yarn.lock
@@ -3938,6 +3938,18 @@ invert-kv@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+ip-address@^5.8.9:
+ version "5.8.9"
+ resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-5.8.9.tgz#6379277c23fc5adb20511e4d23ec2c1bde105dfd"
+ dependencies:
+ jsbn "1.1.0"
+ lodash.find "^4.6.0"
+ lodash.max "^4.0.1"
+ lodash.merge "^4.6.0"
+ lodash.padstart "^4.6.1"
+ lodash.repeat "^4.1.0"
+ sprintf-js "1.1.0"
+
ip-regex@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd"
@@ -4329,6 +4341,10 @@ js-yaml@~3.7.0:
argparse "^1.0.7"
esprima "^2.6.0"
[email protected]:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040"
+
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
@@ -4738,6 +4754,10 @@ lodash.escape@^3.0.0:
dependencies:
lodash._root "^3.0.0"
+lodash.find@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1"
+
lodash.flattendeep@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
@@ -4777,6 +4797,10 @@ lodash.keys@^3.0.0:
lodash.isarguments "^3.0.0"
lodash.isarray "^3.0.0"
+lodash.max@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.max/-/lodash.max-4.0.1.tgz#8735566c618b35a9f760520b487ae79658af136a"
+
lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
@@ -4785,10 +4809,22 @@ lodash.memoize@~3.0.3:
version "3.0.4"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f"
+lodash.merge@^4.6.0:
+ version "4.6.1"
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54"
+
lodash.mergewith@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55"
+lodash.padstart@^4.6.1:
+ version "4.6.1"
+ resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b"
+
+lodash.repeat@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/lodash.repeat/-/lodash.repeat-4.1.0.tgz#fc7de8131d8c8ac07e4b49f74ffe829d1f2bec44"
+
lodash.restparam@^3.0.0:
version "3.6.1"
resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
@@ -6863,6 +6899,10 @@ spectrum-colorpicker@^1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/spectrum-colorpicker/-/spectrum-colorpicker-1.8.0.tgz#b926cf5002c0a77860b5f8351e1c093c65200107"
[email protected]:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.0.tgz#cffcaf702daf65ea39bb4e0fa2b299cec1a1be46"
+
sprintf-js@^1.0.3:
version "1.1.1"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.1.tgz#36be78320afe5801f6cea3ee78b6e5aab940ea0c"
[text/x-patch] revert-upgrade-of-jasmine.diff (998B, 4-revert-upgrade-of-jasmine.diff)
download | inline diff:
diff --git a/web/package.json b/web/package.json
index ad0f3e16..a4cb58d5 100644
--- a/web/package.json
+++ b/web/package.json
@@ -18,7 +18,7 @@
"file-loader": "^0.11.2",
"image-webpack-loader": "^3.3.1",
"is-docker": "^1.1.0",
- "jasmine-core": "~2.99.0",
+ "jasmine-core": "~3.1.0",
"jasmine-enzyme": "~4.1.1",
"karma": "~1.5.0",
"karma-babel-preprocessor": "^6.0.1",
diff --git a/web/yarn.lock b/web/yarn.lock
index 85ccbc8b..5e310d79 100644
--- a/web/yarn.lock
+++ b/web/yarn.lock
@@ -4267,9 +4267,9 @@ isurl@^1.0.0-alpha5:
has-to-string-tag-x "^1.2.0"
is-object "^1.0.1"
-jasmine-core@~2.99.0:
- version "2.99.1"
- resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.99.1.tgz#e6400df1e6b56e130b61c4bcd093daa7f6e8ca15"
+jasmine-core@~3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.1.0.tgz#a4785e135d5df65024dfc9224953df585bd2766c"
jasmine-enzyme@~4.1.1:
version "4.1.1"
view thread (14+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected], [email protected], [email protected]
Subject: Re: [pgAdmin4][RM#3140] Add service parameter
In-Reply-To: <CAE+jjakfoBbkQfg0po3zvj0ScJQzrCWF2fUeuypVmBmpKh56iA@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox