From 49cc55a5195741c60b0e0294363ba9f9a5a4c948 Mon Sep 17 00:00:00 2001 From: mistic100 Date: Sat, 21 Jan 2017 14:57:41 +0100 Subject: [PATCH 001/107] Revamp grunt config --- Gruntfile.js | 401 ++++---------- build/cleanLn.js | 3 + build/initConfig.js | 68 +++ build/processLang.js | 30 + build/removeJshint.js | 5 + build/tasks/describeErrors.js | 39 ++ build/tasks/describeTriggers.js | 36 ++ build/tasks/listModules.js | 23 + examples/index.html | 936 +++++++++++++++++--------------- package.json | 4 +- src/scss/default.scss | 3 + tests/index.html | 65 ++- 12 files changed, 828 insertions(+), 785 deletions(-) create mode 100644 build/cleanLn.js create mode 100644 build/initConfig.js create mode 100644 build/processLang.js create mode 100644 build/removeJshint.js create mode 100644 build/tasks/describeErrors.js create mode 100644 build/tasks/describeTriggers.js create mode 100644 build/tasks/listModules.js diff --git a/Gruntfile.js b/Gruntfile.js index 36ab0d62..3725a9be 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,52 +1,23 @@ -var deepmerge = require('deepmerge'); +var initConfig = require('./build/initConfig'); +var processLang = require('./build/processLang'); +var removeJshint = require('./build/removeJshint'); +var cleanLn = require('./build/cleanLn'); +var taskDescribeTriggers = require('./build/tasks/describeTriggers'); +var taskDescribeErrors = require('./build/tasks/describeErrors'); +var taskListModules = require('./build/tasks/listModules'); module.exports = function(grunt) { require('time-grunt')(grunt); require('jit-grunt')(grunt, { - scsslint: 'grunt-scss-lint' + scsslint: 'grunt-scss-lint', + sass_injection: 'grunt-sass-injection', + usebanner: 'grunt-banner' }); grunt.util.linefeed = '\n'; - function removeJshint(src) { - return src - .replace(/\/\*jshint [a-z:]+ \*\/\r?\n\r?\n?/g, '') - .replace(/\/\*jshint -[EWI]{1}[0-9]{3} \*\/\r?\n\r?\n?/g, ''); - } - - function process_lang(file, src, wrapper) { - var lang = file.split(/[\/\.]/)[2]; - var content = JSON.parse(src); - wrapper = wrapper || ['', '']; - - grunt.config.set('lang_locale', content.__locale || lang); - grunt.config.set('lang_author', content.__author); - var header = grunt.template.process('<%= langBanner %>'); - - loaded_plugins.forEach(function(p) { - var plugin_file = 'src/plugins/' + p + '/i18n/' + lang + '.json'; - - if (grunt.file.exists(plugin_file)) { - content = deepmerge(content, grunt.file.readJSON(plugin_file)); - } - }); - - return header - + '\n\n' - + wrapper[0] - + 'QueryBuilder.regional[\'' + lang + '\'] = ' - + JSON.stringify(content, null, 2) - + ';\n\n' - + 'QueryBuilder.defaults({ lang_code: \'' + lang + '\' });' - + wrapper[1]; - } - - - var all_plugins = {}, - all_langs = {}, - loaded_plugins = [], - loaded_langs = [], - js_core_files = [ + var config = initConfig(grunt, { + js_core_files: [ 'src/main.js', 'src/defaults.js', 'src/core.js', @@ -57,88 +28,23 @@ module.exports = function(grunt) { 'src/utils.js', 'src/jquery.js' ], - js_files_to_load = js_core_files.slice(), - all_js_files = js_core_files.slice(), - js_files_for_standalone = [ + js_files_for_standalone: [ 'bower_components/jquery-extendext/jQuery.extendext.js', 'bower_components/doT/doT.js', 'dist/js/query-builder.js' - ]; - - - (function() { - // list available plugins and languages - grunt.file.expand('src/plugins/**/plugin.js') - .forEach(function(f) { - var n = f.split('/')[2]; - all_plugins[n] = f; - }); - - grunt.file.expand('src/i18n/*.json') - .forEach(function(f) { - var n = f.split(/[\/\.]/)[2]; - all_langs[n] = f; - }); - - // fill all js files - for (var p in all_plugins) { - all_js_files.push(all_plugins[p]); - } - - // parse 'plugins' parameter - var arg_plugins = grunt.option('plugins'); - if (typeof arg_plugins === 'string') { - arg_plugins.replace(/ /g, '').split(',').forEach(function(p) { - if (all_plugins[p]) { - js_files_to_load.push(all_plugins[p]); - loaded_plugins.push(p); - } - else { - grunt.fail.warn('Plugin ' + p + ' unknown'); - } - }); - } - else if (arg_plugins === undefined) { - for (var p in all_plugins) { - js_files_to_load.push(all_plugins[p]); - loaded_plugins.push(p); - } - } - - // default language - js_files_to_load.push('.temp/i18n/en.js'); - loaded_langs.push('en'); - - // parse 'lang' parameter - var arg_langs = grunt.option('languages'); - if (typeof arg_langs === 'string') { - arg_langs.replace(/ /g, '').split(',').forEach(function(l) { - if (all_langs[l]) { - if (l !== 'en') { - js_files_to_load.push(all_langs[l].replace(/^src/, '.temp').replace(/json$/, 'js')); - loaded_langs.push(l); - } - } - else { - grunt.fail.warn('Language ' + l + ' unknown'); - } - }); - } - }()); - + ] + }); grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), - banner: - '/*!\n' + + banner: '/*!\n' + ' * jQuery QueryBuilder <%= pkg.version %>\n' + ' * Copyright 2014-<%= grunt.template.today("yyyy") %> Damien "Mistic" Sorel (http://www.strangeplanet.fr)\n' + ' * Licensed under MIT (http://opensource.org/licenses/MIT)\n' + ' */', - langBanner: - '/*!\n' + + langBanner: '/*!\n' + ' * jQuery QueryBuilder <%= pkg.version %>\n' + ' * Locale: <%= lang_locale %>\n' + '<% if (lang_author) { %> * Author: <%= lang_author %>\n<% } %>' + @@ -163,7 +69,7 @@ module.exports = function(grunt) { }, js: { files: ['src/*.js', 'src/plugins/**/plugin.js'], - tasks: ['build_js'] + tasks: ['injector:example'] }, css: { files: ['src/scss/*.scss', 'src/plugins/**/plugin.scss'], @@ -197,10 +103,10 @@ module.exports = function(grunt) { }] }, sass_plugins: { - files: loaded_plugins.map(function(name) { + files: config.loaded_plugins.map(function(name) { return { src: 'src/plugins/' + name + '/plugin.scss', - dest: 'dist/scss/plugins/' + name + '.scss' + dest: 'dist/scss/plugins/_' + name + '.scss' }; }) } @@ -209,19 +115,19 @@ module.exports = function(grunt) { concat: { // concat all JS js: { - src: js_files_to_load, + src: config.js_files_to_load, dest: 'dist/js/query-builder.js', options: { stripBanners: false, separator: '\n\n', process: function(src) { - return removeJshint(src).replace(/\r\n/g, '\n'); + return cleanLn(removeJshint(src)); } } }, // create standalone version js_standalone: { - src: js_files_for_standalone, + src: config.js_files_for_standalone, dest: 'dist/js/query-builder.standalone.js', options: { stripBanners: false, @@ -229,15 +135,14 @@ module.exports = function(grunt) { process: function(src, file) { var name = file.match(/([^\/]+?).js$/)[1]; - return removeJshint(src) - .replace(/\r\n/g, '\n') + return cleanLn(removeJshint(src)) .replace(/define\((.*?)\);/, 'define(\'' + name + '\', $1);'); } } }, // compile language files with AMD wrapper lang: { - files: Object.keys(all_langs).map(function(name) { + files: Object.keys(config.all_langs).map(function(name) { return { src: 'src/i18n/' + name + '.json', dest: 'dist/i18n/query-builder.' + name + '.js' @@ -245,14 +150,14 @@ module.exports = function(grunt) { }), options: { process: function(src, file) { - var wrapper = grunt.file.read('src/i18n/.wrapper.js').replace(/\r\n/g, '\n').split(/@@js\n/); - return process_lang(file, src, wrapper); + var wrapper = cleanLn(grunt.file.read('src/i18n/.wrapper.js')).split(/@@js\n/); + return processLang(grunt, config.loaded_plugins)(file, src, wrapper); } } }, - // compile language files without wrapper + // compile language files without AMD wrapper lang_temp: { - files: Object.keys(all_langs).map(function(name) { + files: Object.keys(config.all_langs).map(function(name) { return { src: 'src/i18n/' + name + '.json', dest: '.temp/i18n/' + name + '.js' @@ -260,60 +165,50 @@ module.exports = function(grunt) { }), options: { process: function(src, file) { - return process_lang(file, src); + return processLang(grunt, config.loaded_plugins)(file, src); } } - }, - // add banner to CSS files - css: { - options: { - banner: '<%= banner %>\n\n', - }, - files: [{ - expand: true, - src: ['dist/css/*.css', 'dist/scss/*.scss'], - dest: '' - }] } }, + // add AMD wrapper wrap: { - // add AMD wrapper and banner js: { src: ['dist/js/query-builder.js'], dest: '', options: { separator: '', wrapper: function() { - var wrapper = grunt.file.read('src/.wrapper.js').replace(/\r\n/g, '\n').split(/@@js\n/); - - if (loaded_plugins.length) { - wrapper[0] = '// Plugins: ' + loaded_plugins.join(', ') + '\n' + wrapper[0]; - } - if (loaded_langs.length) { - wrapper[0] = '// Languages: ' + loaded_langs.join(', ') + '\n' + wrapper[0]; - } - wrapper[0] = grunt.template.process('<%= banner %>\n\n') + wrapper[0]; - - return wrapper; + return cleanLn(grunt.file.read('src/.wrapper.js')).split(/@@js\n/); } } + } + }, + + // add banners + usebanner: { + options: { + banner: '<%= banner %>' }, - // add plugins SASS imports - sass: { - src: ['dist/scss/default.scss'], - dest: '', + js: { + src: ['dist/js/*.js'] + }, + css: { + src: ['dist/css/*.css', 'dist/css/*.scss'] + } + }, + + // add plugins SASS imports + sass_injection: { + dist: { options: { - separator: '', - wrapper: function() { - return ['', loaded_plugins.reduce(function(wrapper, name) { - if (grunt.file.exists('dist/scss/plugins/' + name + '.scss')) { - wrapper += '\n@import \'plugins/' + name + '\';'; - } - return wrapper; - }, '\n')]; + replacePath: { + pattern: 'dist/scss/', + replace: '' } - } + }, + src: ['dist/scss/plugins/*.scss'], + target: 'dist/scss/default.scss' } }, @@ -340,7 +235,7 @@ module.exports = function(grunt) { // compress js uglify: { options: { - banner: '<%= banner %>\n\n', + banner: '<%= banner %>\n', mangle: { except: ['$'] } }, dist: { @@ -380,7 +275,7 @@ module.exports = function(grunt) { options: { jshintrc: '.jshintrc' }, - src: js_files_to_load + src: ['src/**/*.js', '!src/**/.wrapper.js'] } }, @@ -390,7 +285,7 @@ module.exports = function(grunt) { options: { config: '.jscsrc' }, - src: js_files_to_load + src: ['src/**/*.js', '!src/**/.wrapper.js'] } }, @@ -405,42 +300,32 @@ module.exports = function(grunt) { } }, - // inject all source files and test modules in the test file - 'string-replace': { - test: { - src: 'tests/index.html', - dest: 'tests/index.html', + // inject sources files and tests modules in demo and test + injector: { + options: { + relative: true, + addRootSlash: false + }, + example: { + src: config.all_js_files.concat(['dist/i18n/query-builder.en.js']), + dest: 'examples/index.html' + }, + testSrc: { options: { - replacements: [{ - pattern: /()(?:[\s\S]*)()/m, - replacement: function(match, m1, m2) { - var scripts = '\n'; - - js_core_files.forEach(function(file) { - scripts += '\n'; - }); - - scripts += '\n'; - - for (var p in all_plugins) { - scripts += '\n'; - } - - return m1 + scripts + m2; - } - }, { - pattern: /()(?:[\s\S]*)()/m, - replacement: function(match, m1, m2) { - var scripts = '\n'; - - grunt.file.expand('tests/*.module.js').forEach(function(file) { - scripts += '\n'; - }); - - return m1 + scripts + m2; - } - }] - } + starttag: '', + transform: function(filepath) { + return ''; + } + }, + src: config.all_js_files, + dest: 'tests/index.html' + }, + testModules: { + options: { + starttag: '' + }, + src: ['tests/*.module.js'], + dest: 'tests/index.html' } }, @@ -473,115 +358,23 @@ module.exports = function(grunt) { force: true }, all: { - src: '.coverage-results/all.lcov', + src: '.coverage-results/all.lcov' } } }); - // list the triggers and changes - grunt.registerTask('describe_triggers', 'List QueryBuilder triggers.', function() { - var triggers = {}; - var total = 0; - - for (var f in all_js_files) { - grunt.file.read(all_js_files[f]).split(/\r?\n/).forEach(function(line, i) { - var matches = /(e = )?(?:this|that)\.(trigger|change)\('(\w+)'([^)]*)\);/.exec(line); - if (matches !== null) { - triggers[matches[3]] = { - name: matches[3], - type: matches[2], - file: all_js_files[f], - line: i, - args: matches[4].slice(2), - prevent: !!matches[1] - }; - - total++; - } - }); - } - - grunt.log.write('\n'); - - for (var t in triggers) { - grunt.log.write(t['cyan'] + ' ' + triggers[t].type['magenta']); - if (triggers[t].prevent) grunt.log.write(' (*)'['yellow']); - grunt.log.write('\n'); - grunt.log.writeln(' ' + (triggers[t].file + ':' + triggers[t].line)['red'] + ' ' + triggers[t].args); - grunt.log.write('\n'); - } - - grunt.log.writeln((total + ' Triggers in QueryBuilder.')['cyan']['bold']); - }); - - // list all possible thrown errors - grunt.registerTask('describe_errors', 'List QueryBuilder errors.', function() { - var errors = {}; - var total = 0; - - for (var f in all_js_files) { - grunt.file.read(all_js_files[f]).split(/\r?\n/).forEach(function(line, i) { - var matches = /Utils\.error\('(\w+)', '([^)]+)'([^)]*)\);/.exec(line); - if (matches !== null) { - (errors[matches[1]] = errors[matches[1]] || []).push({ - type: matches[1], - message: matches[2], - file: all_js_files[f], - line: i, - args: matches[3].slice(2).split(', ') - }); - - total++; - } - }); - } - - grunt.log.write('\n'); - - for (var e in errors) { - grunt.log.writeln((e + 'Error')['cyan']); - errors[e].forEach(function(error) { - var message = error.message.replace(/{([0-9]+)}/g, function(m, i) { - return error.args[parseInt(i)]['yellow']; - }); - grunt.log.writeln(' ' + (error.file + ':' + error.line)['red']); - grunt.log.writeln(' ' + message); - }); - grunt.log.write('\n'); - } - - grunt.log.writeln((total + ' Errors in QueryBuilder.')['cyan']['bold']); - }); - - // display available modules - grunt.registerTask('list_modules', 'List QueryBuilder plugins and languages.', function() { - grunt.log.writeln('\nAvailable QueryBuilder plugins:\n'); - - for (var p in all_plugins) { - grunt.log.write(p['cyan']); - - if (grunt.file.exists(all_plugins[p].replace(/js$/, 'scss'))) { - grunt.log.write(' + CSS'); - } - - grunt.log.write('\n'); - } - - grunt.log.writeln('\nAvailable QueryBuilder languages:\n'); - - for (var l in all_langs) { - if (l !== 'en') { - grunt.log.writeln(l['cyan']); - } - } - }); + // custom tasks + taskDescribeTriggers(grunt, config); + taskDescribeErrors(grunt, config); + taskListModules(grunt, config); grunt.registerTask('build_js', [ 'concat:lang_temp', 'concat:js', 'wrap:js', + 'usebanner:js', 'concat:js_standalone', 'uglify', 'clean:temp' @@ -590,10 +383,10 @@ module.exports = function(grunt) { grunt.registerTask('build_css', [ 'copy:sass_core', 'copy:sass_plugins', - 'wrap:sass', + 'sass_injection', 'sass', 'cssmin', - 'concat:css' + 'usebanner:css' ]); grunt.registerTask('build_lang', [ @@ -610,14 +403,18 @@ module.exports = function(grunt) { 'jshint', 'jscs', 'scsslint', - 'default', - 'string-replace:test', + 'build_lang', + 'build_css', + 'injector:testSrc', + 'injector:testModules', 'qunit_blanket_lcov', 'qunit' ]); grunt.registerTask('serve', [ - 'default', + 'build_lang', + 'build_css', + 'injector:example', 'open', 'connect', 'watch' diff --git a/build/cleanLn.js b/build/cleanLn.js new file mode 100644 index 00000000..f93432e8 --- /dev/null +++ b/build/cleanLn.js @@ -0,0 +1,3 @@ +module.exports = function(src) { + return src.replace(/\r\n/g, '\n'); +}; diff --git a/build/initConfig.js b/build/initConfig.js new file mode 100644 index 00000000..5bb333ee --- /dev/null +++ b/build/initConfig.js @@ -0,0 +1,68 @@ +module.exports = function(grunt, config) { + config.all_plugins = {}; + config.all_langs = {}; + config.loaded_plugins = []; + config.loaded_langs = []; + config.js_files_to_load = config.js_core_files.slice(); + config.all_js_files = config.js_core_files.slice(); + + // list available plugins and languages + grunt.file.expand('src/plugins/**/plugin.js') + .forEach(function(f) { + var n = f.split('/')[2]; + config.all_plugins[n] = f; + }); + + grunt.file.expand('src/i18n/*.json') + .forEach(function(f) { + var n = f.split(/[\/\.]/)[2]; + config.all_langs[n] = f; + }); + + // fill all js files + for (var p in config.all_plugins) { + config.all_js_files.push(config.all_plugins[p]); + } + + // parse 'plugins' parameter + var arg_plugins = grunt.option('plugins'); + if (typeof arg_plugins === 'string') { + arg_plugins.replace(/ /g, '').split(',').forEach(function(p) { + if (config.all_plugins[p]) { + config.js_files_to_load.push(config.all_plugins[p]); + config.loaded_plugins.push(p); + } + else { + grunt.fail.warn('Plugin ' + p + ' unknown'); + } + }); + } + else if (arg_plugins === undefined) { + for (var p in config.all_plugins) { + config.js_files_to_load.push(config.all_plugins[p]); + config.loaded_plugins.push(p); + } + } + + // default language + config.js_files_to_load.push('.temp/i18n/en.js'); + config.loaded_langs.push('en'); + + // parse 'lang' parameter + var arg_langs = grunt.option('languages'); + if (typeof arg_langs === 'string') { + arg_langs.replace(/ /g, '').split(',').forEach(function(l) { + if (config.all_langs[l]) { + if (l !== 'en') { + config.js_files_to_load.push(config.all_langs[l].replace(/^src/, '.temp').replace(/json$/, 'js')); + config.loaded_langs.push(l); + } + } + else { + grunt.fail.warn('Language ' + l + ' unknown'); + } + }); + } + + return config; +}; diff --git a/build/processLang.js b/build/processLang.js new file mode 100644 index 00000000..33c6b2c7 --- /dev/null +++ b/build/processLang.js @@ -0,0 +1,30 @@ +var deepmerge = require('deepmerge'); + +module.exports = function(grunt, loaded_plugins) { + return function(file, src, wrapper) { + var lang = file.split(/[\/\.]/)[2]; + var content = JSON.parse(src); + wrapper = wrapper || ['', '']; + + grunt.config.set('lang_locale', content.__locale || lang); + grunt.config.set('lang_author', content.__author); + var header = grunt.template.process('<%= langBanner %>'); + + loaded_plugins.forEach(function(p) { + var plugin_file = 'src/plugins/' + p + '/i18n/' + lang + '.json'; + + if (grunt.file.exists(plugin_file)) { + content = deepmerge(content, grunt.file.readJSON(plugin_file)); + } + }); + + return header + + '\n\n' + + wrapper[0] + + 'QueryBuilder.regional[\'' + lang + '\'] = ' + + JSON.stringify(content, null, 2) + + ';\n\n' + + 'QueryBuilder.defaults({ lang_code: \'' + lang + '\' });' + + wrapper[1]; + }; +}; diff --git a/build/removeJshint.js b/build/removeJshint.js new file mode 100644 index 00000000..4ff583ac --- /dev/null +++ b/build/removeJshint.js @@ -0,0 +1,5 @@ +module.exports = function(src) { + return src + .replace(/\/\*jshint [a-z:]+ \*\/\r?\n\r?\n?/g, '') + .replace(/\/\*jshint -[EWI]{1}[0-9]{3} \*\/\r?\n\r?\n?/g, ''); +}; diff --git a/build/tasks/describeErrors.js b/build/tasks/describeErrors.js new file mode 100644 index 00000000..c058e6e5 --- /dev/null +++ b/build/tasks/describeErrors.js @@ -0,0 +1,39 @@ +module.exports = function(grunt, config) { + grunt.registerTask('describe_errors', 'List QueryBuilder errors.', function() { + var errors = {}; + var total = 0; + + for (var f in config.all_js_files) { + grunt.file.read(config.all_js_files[f]).split(/\r?\n/).forEach(function(line, i) { + var matches = /Utils\.error\((?:[^)]+, )?'(\w+)', '([^)]+)'([^)]*)\);/.exec(line); + if (matches !== null) { + (errors[matches[1]] = errors[matches[1]] || []).push({ + type: matches[1], + message: matches[2], + file: config.all_js_files[f], + line: i, + args: matches[3].slice(2).split(', ') + }); + + total++; + } + }); + } + + grunt.log.write('\n'); + + for (var e in errors) { + grunt.log.writeln((e + 'Error')['cyan']); + errors[e].forEach(function(error) { + var message = error.message.replace(/{([0-9]+)}/g, function(m, i) { + return error.args[parseInt(i)]['yellow']; + }); + grunt.log.writeln(' ' + (error.file + ':' + error.line)['red']); + grunt.log.writeln(' ' + message); + }); + grunt.log.write('\n'); + } + + grunt.log.writeln((total + ' Errors in QueryBuilder.')['cyan']['bold']); + }); +}; diff --git a/build/tasks/describeTriggers.js b/build/tasks/describeTriggers.js new file mode 100644 index 00000000..68b36ec9 --- /dev/null +++ b/build/tasks/describeTriggers.js @@ -0,0 +1,36 @@ +module.exports = function(grunt, config) { + grunt.registerTask('describe_triggers', 'List QueryBuilder triggers.', function() { + var triggers = {}; + var total = 0; + + for (var f in config.all_js_files) { + grunt.file.read(config.all_js_files[f]).split(/\r?\n/).forEach(function(line, i) { + var matches = /(e = )?(?:this|that)\.(trigger|change)\('(\w+)'([^)]*)\);/.exec(line); + if (matches !== null) { + triggers[matches[3]] = { + name: matches[3], + type: matches[2], + file: config.all_js_files[f], + line: i, + args: matches[4].slice(2), + prevent: !!matches[1] + }; + + total++; + } + }); + } + + grunt.log.write('\n'); + + for (var t in triggers) { + grunt.log.write(t['cyan'] + ' ' + triggers[t].type['magenta']); + if (triggers[t].prevent) grunt.log.write(' (*)'['yellow']); + grunt.log.write('\n'); + grunt.log.writeln(' ' + (triggers[t].file + ':' + triggers[t].line)['red'] + ' ' + triggers[t].args); + grunt.log.write('\n'); + } + + grunt.log.writeln((total + ' Triggers in QueryBuilder.')['cyan']['bold']); + }); +}; diff --git a/build/tasks/listModules.js b/build/tasks/listModules.js new file mode 100644 index 00000000..95d02fbf --- /dev/null +++ b/build/tasks/listModules.js @@ -0,0 +1,23 @@ +module.exports = function(grunt, config) { + grunt.registerTask('list_modules', 'List QueryBuilder plugins and languages.', function() { + grunt.log.writeln('\nAvailable QueryBuilder plugins:\n'); + + for (var p in config.all_plugins) { + grunt.log.write(p['cyan']); + + if (grunt.file.exists(config.all_plugins[p].replace(/js$/, 'scss'))) { + grunt.log.write(' + CSS'); + } + + grunt.log.write('\n'); + } + + grunt.log.writeln('\nAvailable QueryBuilder languages:\n'); + + for (var l in config.all_langs) { + if (l !== 'en') { + grunt.log.writeln(l['cyan']); + } + } + }); +}; diff --git a/examples/index.html b/examples/index.html index 2f232ee6..054b83ec 100644 --- a/examples/index.html +++ b/examples/index.html @@ -16,7 +16,9 @@ @@ -28,47 +30,55 @@ -

jQuery QueryBuilder Example

+

jQuery QueryBuilder + Example +

- - + +
@@ -76,7 +86,9 @@

jQuery QueryBuilder Example

- +
@@ -112,479 +124,505 @@

Output

- + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/package.json b/package.json index c546cfad..f4c96d12 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "devDependencies": { "deepmerge": "^0.2.0", "grunt": "^1.0.0", + "grunt-banner": "^0.6.0", "grunt-contrib-clean": "^1.0.0", "grunt-contrib-concat": "^1.0.0", "grunt-contrib-connect": "^1.0.0", @@ -28,11 +29,12 @@ "grunt-contrib-uglify": "^1.0.0", "grunt-contrib-watch": "^1.0.0", "grunt-coveralls": "^1.0.0", + "grunt-injector": "^1.1.0", "grunt-jscs": "^2.8.0", "grunt-open": "^0.2.3", "grunt-qunit-blanket-lcov": "^0.3.0", + "grunt-sass-injection": "^1.0.3", "grunt-scss-lint": "^0.3.8", - "grunt-string-replace": "^1.2.0", "grunt-wrap": "^0.3.0", "jit-grunt": "^0.10.0", "time-grunt": "^1.3.0" diff --git a/src/scss/default.scss b/src/scss/default.scss index ceebadd7..ace2f2fb 100644 --- a/src/scss/default.scss +++ b/src/scss/default.scss @@ -169,3 +169,6 @@ $ticks-position: 5px, 10px !default; } } } + +// import +// endimport diff --git a/tests/index.html b/tests/index.html index 4c395d25..875f9320 100644 --- a/tests/index.html +++ b/tests/index.html @@ -30,40 +30,39 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + From 4d6c44e83a98ce70ca2d3157934c2e2d8c707276 Mon Sep 17 00:00:00 2001 From: mistic100 Date: Sun, 22 Jan 2017 11:09:49 +0100 Subject: [PATCH 002/107] Fix #418 validation fails on integer with separator --- .npmignore | 5 + bower.json | 1 + examples/index.html | 18 +++- src/core.js | 2 +- src/data.js | 219 ++++++++++++++++++++++--------------------- src/defaults.js | 1 + src/template.js | 35 ++++--- tests/common.js | 6 ++ tests/data.module.js | 11 ++- 9 files changed, 169 insertions(+), 129 deletions(-) create mode 100644 .npmignore diff --git a/.npmignore b/.npmignore new file mode 100644 index 00000000..4dec3eec --- /dev/null +++ b/.npmignore @@ -0,0 +1,5 @@ +.* +build +composer.json +Gruntfile.js +bower_components diff --git a/bower.json b/bower.json index bf6b6519..9f597a38 100644 --- a/bower.json +++ b/bower.json @@ -45,6 +45,7 @@ "**/.*", "node_modules", "bower_components", + "build", "src", "tests", "composer.json", diff --git a/examples/index.html b/examples/index.html index 054b83ec..15da3790 100644 --- a/examples/index.html +++ b/examples/index.html @@ -204,7 +204,7 @@

Output

filters: [ /* - * basic + * string with separator */ { id: 'name', @@ -222,6 +222,18 @@

Output

}, unique: true }, + /* + * integer with separator for 'in' and 'not_in' + */ + { + id: 'age', + label: 'Age', + type: 'integer', + input: 'text', + value_separator: '|', + optgroup: 'core', + description: 'Use a pipe (|) to separate multiple values with "in" and "not in" operators' + }, /* * textarea */ @@ -533,6 +545,10 @@

Output

id: 'name', operator: 'in', value: ['Mistic', 'Damien'] + }, { + id: 'age', + operator: 'in', + value: [20,21,22] }, { empty: true }] diff --git a/src/core.js b/src/core.js index d829bd67..3ffe3763 100644 --- a/src/core.js +++ b/src/core.js @@ -102,7 +102,7 @@ QueryBuilder.prototype.checkFilters = function(filters) { } if (!filter.input) { - filter.input = 'text'; + filter.input = QueryBuilder.types[filter.type] === 'number' ? 'number' : 'text'; } else if (typeof filter.input != 'function' && QueryBuilder.inputs.indexOf(filter.input) == -1) { Utils.error('Config', 'Invalid input "{0}"', filter.input); diff --git a/src/data.js b/src/data.js index a1eddfa0..3aab4578 100644 --- a/src/data.js +++ b/src/data.js @@ -32,13 +32,18 @@ QueryBuilder.prototype.validateValueInternal = function(rule, value) { var operator = rule.operator; var validation = filter.validation || {}; var result = true; - var tmp; + var tmp, tempValue; if (rule.operator.nb_inputs === 1) { value = [value]; } for (var i = 0; i < operator.nb_inputs; i++) { + if (!operator.multiple && $.isArray(value[i]) && value[i].length > 1) { + result = ['operator_not_multiple', operator.type]; + break; + } + switch (filter.input) { case 'radio': if (value[i] === undefined || value[i].length === 0) { @@ -56,10 +61,6 @@ QueryBuilder.prototype.validateValueInternal = function(rule, value) { } break; } - else if (!operator.multiple && value[i].length > 1) { - result = ['operator_not_multiple', operator.type]; - break; - } break; case 'select': @@ -69,136 +70,140 @@ QueryBuilder.prototype.validateValueInternal = function(rule, value) { } break; } - if (filter.multiple && !operator.multiple && value[i].length > 1) { - result = ['operator_not_multiple', operator.type]; - break; - } break; default: - switch (QueryBuilder.types[filter.type]) { - case 'string': - if (value[i] === undefined || value[i].length === 0) { - if (!validation.allow_empty_value) { - result = ['string_empty']; - } - break; - } - if (validation.min !== undefined) { - if (value[i].length < parseInt(validation.min)) { - result = [this.getValidationMessage(validation, 'min', 'string_exceed_min_length'), validation.min]; - break; - } - } - if (validation.max !== undefined) { - if (value[i].length > parseInt(validation.max)) { - result = [this.getValidationMessage(validation, 'max', 'string_exceed_max_length'), validation.max]; + tempValue = $.isArray(value[i]) ? value[i] : [value[i]]; + + for (var j = 0; j < tempValue.length; j++) { + switch (QueryBuilder.types[filter.type]) { + case 'string': + if (tempValue[j] === undefined || tempValue[j].length === 0) { + if (!validation.allow_empty_value) { + result = ['string_empty']; + } break; } - } - if (validation.format) { - if (typeof validation.format == 'string') { - validation.format = new RegExp(validation.format); + if (validation.min !== undefined) { + if (tempValue[j].length < parseInt(validation.min)) { + result = [this.getValidationMessage(validation, 'min', 'string_exceed_min_length'), validation.min]; + break; + } } - if (!validation.format.test(value[i])) { - result = [this.getValidationMessage(validation, 'format', 'string_invalid_format'), validation.format]; - break; + if (validation.max !== undefined) { + if (tempValue[j].length > parseInt(validation.max)) { + result = [this.getValidationMessage(validation, 'max', 'string_exceed_max_length'), validation.max]; + break; + } } - } - break; - - case 'number': - if (value[i] === undefined || value[i].length === 0) { - if (!validation.allow_empty_value) { - result = ['number_nan']; + if (validation.format) { + if (typeof validation.format == 'string') { + validation.format = new RegExp(validation.format); + } + if (!validation.format.test(tempValue[j])) { + result = [this.getValidationMessage(validation, 'format', 'string_invalid_format'), validation.format]; + break; + } } break; - } - if (isNaN(value[i])) { - result = ['number_nan']; - break; - } - if (filter.type == 'integer') { - if (parseInt(value[i]) != value[i]) { - result = ['number_not_integer']; + + case 'number': + if (tempValue[j] === undefined || tempValue[j].length === 0) { + if (!validation.allow_empty_value) { + result = ['number_nan']; + } break; } - } - else { - if (parseFloat(value[i]) != value[i]) { - result = ['number_not_double']; + if (isNaN(tempValue[j])) { + result = ['number_nan']; break; } - } - if (validation.min !== undefined) { - if (value[i] < parseFloat(validation.min)) { - result = [this.getValidationMessage(validation, 'min', 'number_exceed_min'), validation.min]; - break; + if (filter.type == 'integer') { + if (parseInt(tempValue[j]) != tempValue[j]) { + result = ['number_not_integer']; + break; + } } - } - if (validation.max !== undefined) { - if (value[i] > parseFloat(validation.max)) { - result = [this.getValidationMessage(validation, 'max', 'number_exceed_max'), validation.max]; - break; + else { + if (parseFloat(tempValue[j]) != tempValue[j]) { + result = ['number_not_double']; + break; + } } - } - if (validation.step !== undefined && validation.step !== 'any') { - var v = (value[i] / validation.step).toPrecision(14); - if (parseInt(v) != v) { - result = [this.getValidationMessage(validation, 'step', 'number_wrong_step'), validation.step]; - break; + if (validation.min !== undefined) { + if (tempValue[j] < parseFloat(validation.min)) { + result = [this.getValidationMessage(validation, 'min', 'number_exceed_min'), validation.min]; + break; + } } - } - break; - - case 'datetime': - if (value[i] === undefined || value[i].length === 0) { - if (!validation.allow_empty_value) { - result = ['datetime_empty']; + if (validation.max !== undefined) { + if (tempValue[j] > parseFloat(validation.max)) { + result = [this.getValidationMessage(validation, 'max', 'number_exceed_max'), validation.max]; + break; + } } - break; - } - - // we need MomentJS - if (validation.format) { - if (!('moment' in window)) { - Utils.error('MissingLibrary', 'MomentJS is required for Date/Time validation. Get it here http://momentjs.com'); + if (validation.step !== undefined && validation.step !== 'any') { + var v = (tempValue[j] / validation.step).toPrecision(14); + if (parseInt(v) != v) { + result = [this.getValidationMessage(validation, 'step', 'number_wrong_step'), validation.step]; + break; + } } + break; - var datetime = moment(value[i], validation.format); - if (!datetime.isValid()) { - result = [this.getValidationMessage(validation, 'format', 'datetime_invalid'), validation.format]; + case 'datetime': + if (tempValue[j] === undefined || tempValue[j].length === 0) { + if (!validation.allow_empty_value) { + result = ['datetime_empty']; + } break; } - else { - if (validation.min) { - if (datetime < moment(validation.min, validation.format)) { - result = [this.getValidationMessage(validation, 'min', 'datetime_exceed_min'), validation.min]; - break; - } + + // we need MomentJS + if (validation.format) { + if (!('moment' in window)) { + Utils.error('MissingLibrary', 'MomentJS is required for Date/Time validation. Get it here http://momentjs.com'); + } + + var datetime = moment(tempValue[j], validation.format); + if (!datetime.isValid()) { + result = [this.getValidationMessage(validation, 'format', 'datetime_invalid'), validation.format]; + break; } - if (validation.max) { - if (datetime > moment(validation.max, validation.format)) { - result = [this.getValidationMessage(validation, 'max', 'datetime_exceed_max'), validation.max]; - break; + else { + if (validation.min) { + if (datetime < moment(validation.min, validation.format)) { + result = [this.getValidationMessage(validation, 'min', 'datetime_exceed_min'), validation.min]; + break; + } + } + if (validation.max) { + if (datetime > moment(validation.max, validation.format)) { + result = [this.getValidationMessage(validation, 'max', 'datetime_exceed_max'), validation.max]; + break; + } } } } - } - break; + break; - case 'boolean': - if (value[i] === undefined || value[i].length === 0) { - if (!validation.allow_empty_value) { + case 'boolean': + if (tempValue[j] === undefined || tempValue[j].length === 0) { + if (!validation.allow_empty_value) { + result = ['boolean_not_valid']; + } + break; + } + tmp = ('' + tempValue[j]).trim().toLowerCase(); + if (tmp !== 'true' && tmp !== 'false' && tmp !== '1' && tmp !== '0' && tempValue[j] !== 1 && tempValue[j] !== 0) { result = ['boolean_not_valid']; + break; } - break; - } - tmp = ('' + value[i]).trim().toLowerCase(); - if (tmp !== 'true' && tmp !== 'false' && tmp !== '1' && tmp !== '0' && value[i] !== 1 && value[i] !== 0) { - result = ['boolean_not_valid']; - break; - } + } + + if (result !== true) { + break; + } } } diff --git a/src/defaults.js b/src/defaults.js index fffde6f5..1fd031a1 100644 --- a/src/defaults.js +++ b/src/defaults.js @@ -16,6 +16,7 @@ QueryBuilder.types = { */ QueryBuilder.inputs = [ 'text', + 'number', 'textarea', 'radio', 'checkbox', diff --git a/src/template.js b/src/template.js index 3a2756e4..c5869c1a 100644 --- a/src/template.js +++ b/src/template.js @@ -210,26 +210,23 @@ QueryBuilder.prototype.getRuleInput = function(rule, value_id) { h+= '>'; break; + case 'number': + h+= ' Date: Sun, 22 Jan 2017 11:26:06 +0100 Subject: [PATCH 003/107] filter-description: description can be a function --- examples/index.html | 6 +++- src/plugins/filter-description/plugin.js | 41 ++++++++++++++++++------ tests/plugins-gui.module.js | 17 +++++++++- 3 files changed, 53 insertions(+), 11 deletions(-) diff --git a/examples/index.html b/examples/index.html index 15da3790..58cab1fe 100644 --- a/examples/index.html +++ b/examples/index.html @@ -232,7 +232,11 @@

Output

input: 'text', value_separator: '|', optgroup: 'core', - description: 'Use a pipe (|) to separate multiple values with "in" and "not in" operators' + description: function(rule) { + if (rule.operator && ['in', 'not_in'].indexOf(rule.operator.type) !== -1) { + return 'Use a pipe (|) to separate multiple values with "in" and "not in" operators'; + } + } }, /* * textarea diff --git a/src/plugins/filter-description/plugin.js b/src/plugins/filter-description/plugin.js index 868ac9db..c87beb97 100644 --- a/src/plugins/filter-description/plugin.js +++ b/src/plugins/filter-description/plugin.js @@ -11,10 +11,11 @@ QueryBuilder.define('filter-description', function(options) { * INLINE */ if (options.mode === 'inline') { - this.on('afterUpdateRuleFilter', function(e, rule) { + this.on('afterUpdateRuleFilter afterUpdateRuleOperator', function(e, rule) { var $p = rule.$el.find('p.filter-description'); + var description = e.builder.getFilterDescription(rule.filter, rule); - if (!rule.filter || !rule.filter.description) { + if (!description) { $p.hide(); } else { @@ -26,7 +27,7 @@ QueryBuilder.define('filter-description', function(options) { $p.show(); } - $p.html(' ' + rule.filter.description); + $p.html(' ' + description); } }); } @@ -38,10 +39,11 @@ QueryBuilder.define('filter-description', function(options) { Utils.error('MissingLibrary', 'Bootstrap Popover is required to use "filter-description" plugin. Get it here: http://getbootstrap.com'); } - this.on('afterUpdateRuleFilter', function(e, rule) { + this.on('afterUpdateRuleFilter afterUpdateRuleOperator', function(e, rule) { var $b = rule.$el.find('button.filter-description'); + var description = e.builder.getFilterDescription(rule.filter, rule); - if (!rule.filter || !rule.filter.description) { + if (!description) { $b.hide(); if ($b.data('bs.popover')) { @@ -67,7 +69,7 @@ QueryBuilder.define('filter-description', function(options) { $b.show(); } - $b.data('bs.popover').options.content = rule.filter.description; + $b.data('bs.popover').options.content = description; if ($b.attr('aria-describedby')) { $b.popover('show'); @@ -83,10 +85,11 @@ QueryBuilder.define('filter-description', function(options) { Utils.error('MissingLibrary', 'Bootbox is required to use "filter-description" plugin. Get it here: http://bootboxjs.com'); } - this.on('afterUpdateRuleFilter', function(e, rule) { + this.on('afterUpdateRuleFilter afterUpdateRuleOperator', function(e, rule) { var $b = rule.$el.find('button.filter-description'); + var description = e.builder.getFilterDescription(rule.filter, rule); - if (!rule.filter || !rule.filter.description) { + if (!description) { $b.hide(); } else { @@ -99,7 +102,7 @@ QueryBuilder.define('filter-description', function(options) { }); } - $b.data('description', rule.filter.description); + $b.data('description', description); } }); } @@ -107,3 +110,23 @@ QueryBuilder.define('filter-description', function(options) { icon: 'glyphicon glyphicon-info-sign', mode: 'popover' }); + +QueryBuilder.extend({ + /** + * Returns the description of a filter for a particular rule (if present) + * @param {object} filter + * @param {Rule} [rule] + * @returns {string} + */ + getFilterDescription: function(filter, rule) { + if (!filter) { + return undefined; + } + else if (typeof filter.description == 'function') { + return filter.description.call(this, rule); + } + else { + return filter.description; + } + } +}); diff --git a/tests/plugins-gui.module.js b/tests/plugins-gui.module.js index e344bab2..aefd2743 100644 --- a/tests/plugins-gui.module.js +++ b/tests/plugins-gui.module.js @@ -134,6 +134,12 @@ $(function(){ id: 'name', type: 'string', description: 'Lorem Ipsum sit amet.' + }, { + id: 'age', + type: 'integer', + description: function(rule) { + return 'Description of operator ' + rule.operator.type; + } }]; var rules = { @@ -141,6 +147,9 @@ $(function(){ rules: [{ id: 'name', value: 'Mistic' + }, { + id: 'age', + value: 25 }] }; @@ -154,10 +163,16 @@ $(function(){ assert.match( $('#builder_rule_0 p.filter-description').html(), - new RegExp(filters[0].description), + new RegExp('Lorem Ipsum sit amet.'), 'Paragraph should contain filter description' ); + assert.match( + $('#builder_rule_1 p.filter-description').html(), + new RegExp('Description of operator equal'), + 'Paragraph should contain filter description after function execution' + ); + $b.queryBuilder('destroy'); $b.queryBuilder({ From 62f6f446419926488178977963cc79eefa1e4275 Mon Sep 17 00:00:00 2001 From: Ruud Date: Wed, 1 Feb 2017 16:34:56 +0100 Subject: [PATCH 004/107] Merge pull request #428 Fix #426 add "skip_empty" flag to "getRules" --- examples/index.html | 5 ++++- src/public.js | 35 ++++++++++++++++++++++++------ tests/data.module.js | 51 +++++++++++++++++++++++++++++++++++++------- 3 files changed, 76 insertions(+), 15 deletions(-) diff --git a/examples/index.html b/examples/index.html index 58cab1fe..6704b236 100644 --- a/examples/index.html +++ b/examples/index.html @@ -595,7 +595,10 @@

Output

$('.parse-json').on('click', function() { $('#result').removeClass('hide') .find('pre').html(JSON.stringify( - $('#builder').queryBuilder('getRules', { get_flags: true }), + $('#builder').queryBuilder('getRules', { + get_flags: true, + skip_empty: true + }), undefined, 2 )); }); diff --git a/src/public.js b/src/public.js index 70db106d..7d85e666 100644 --- a/src/public.js +++ b/src/public.js @@ -72,9 +72,15 @@ QueryBuilder.prototype.getModel = function(target) { /** * Validate the whole builder + * @param {object} options + * - skip_empty: false[default] | true(skips validating rules that have no filter selected) * @return {boolean} */ -QueryBuilder.prototype.validate = function() { +QueryBuilder.prototype.validate = function(options) { + options = $.extend({ + skip_empty: false + }, options); + this.clearErrors(); var self = this; @@ -84,6 +90,10 @@ QueryBuilder.prototype.validate = function() { var errors = 0; group.each(function(rule) { + if (!rule.filter && options.skip_empty) { + return; + } + if (!rule.filter) { self.triggerValidationError(rule, 'no_filter', null); errors++; @@ -109,10 +119,11 @@ QueryBuilder.prototype.validate = function() { done++; }, function(group) { - if (parse(group)) { + var res = parse(group); + if (res === true) { done++; } - else { + else if (res === false) { errors++; } }); @@ -120,6 +131,9 @@ QueryBuilder.prototype.validate = function() { if (errors > 0) { return false; } + else if (done === 0 && !group.isRoot() && options.skip_empty) { + return null; + } else if (done === 0 && (!self.settings.allow_empty || !group.isRoot())) { self.triggerValidationError(group, 'empty_group', null); return false; @@ -137,15 +151,17 @@ QueryBuilder.prototype.validate = function() { * @param {object} options * - get_flags: false[default] | true(only changes from default flags) | 'all' * - allow_invalid: false[default] | true(returns rules even if they are invalid) + * - skip_empty: false[default] | true(remove rules that have no filter selected) * @return {object} */ QueryBuilder.prototype.getRules = function(options) { options = $.extend({ get_flags: false, - allow_invalid: false + allow_invalid: false, + skip_empty: false }, options); - var valid = this.validate(); + var valid = this.validate(options); if (!valid && !options.allow_invalid) { return null; } @@ -170,6 +186,10 @@ QueryBuilder.prototype.getRules = function(options) { } group.each(function(rule) { + if (!rule.filter && options.skip_empty) { + return; + } + var value = null; if (!rule.operator || rule.operator.nb_inputs !== 0) { value = rule.value; @@ -198,7 +218,10 @@ QueryBuilder.prototype.getRules = function(options) { groupData.rules.push(self.change('ruleToJson', ruleData, rule)); }, function(model) { - groupData.rules.push(parse(model)); + var data = parse(model); + if (data.rules.length !== 0 || !options.skip_empty) { + groupData.rules.push(data); + } }, this); return self.change('groupToJson', groupData, group); diff --git a/tests/data.module.js b/tests/data.module.js index a83c48cd..358df511 100644 --- a/tests/data.module.js +++ b/tests/data.module.js @@ -1,4 +1,4 @@ -$(function(){ +$(function() { var $b = $('#builder'); QUnit.module('data', { @@ -31,9 +31,9 @@ $(function(){ type: 'string', input: 'select', values: [ - {one: 'One'}, - {two: 'Two'}, - {three: 'Three'} + { one: 'One' }, + { two: 'Two' }, + { three: 'Three' } ] }], rules: { @@ -207,7 +207,7 @@ $(function(){ QUnit.test('custom data', function(assert) { var rules = { condition: 'AND', - data: [1,2,3], + data: [1, 2, 3], rules: [{ id: 'name', value: 'Mistic', @@ -361,13 +361,13 @@ $(function(){ }; assert.rulesMatch( - $b.queryBuilder('getRules', {get_flags: true}), + $b.queryBuilder('getRules', { get_flags: true }), rules_changed_flags, 'Should export rules with changed flags' ); assert.rulesMatch( - $b.queryBuilder('getRules', {get_flags: 'all'}), + $b.queryBuilder('getRules', { get_flags: 'all' }), rules_all_flags, 'Should export rules with all flags' ); @@ -455,13 +455,48 @@ $(function(){ ); }); + /** + * Test skip_empty option + */ + QUnit.test('skip empty', function(assert) { + $b.queryBuilder({ + filters: basic_filters + }); + + $b.queryBuilder('setRules', { + condition: 'AND', + rules: [{ + id: 'name', + operator: 'equal', + value: 'Mistic' + }, { + empty: true + }] + }); + + assert.rulesMatch( + $b.queryBuilder('getRules', { + skip_empty: true + }), + { + condition: 'AND', + rules: [{ + id: 'name', + operator: 'equal', + value: 'Mistic' + }] + }, + 'Should skip empty rules for getRules' + ); + }); + /** * Test allow_empty_value option */ QUnit.test('allow empty value', function(assert) { var filters = $.extend(true, [], basic_filters); filters.forEach(function(filter) { - filter.validation = $.extend({allow_empty_value: true}, filter.validation); + filter.validation = $.extend({ allow_empty_value: true }, filter.validation); }); $b.queryBuilder({ From 2aa23bc47328d61c5b7cfd80324bda0111eca672 Mon Sep 17 00:00:00 2001 From: mreishus Date: Thu, 9 Feb 2017 09:22:35 -0600 Subject: [PATCH 005/107] Add beforeReset / beforeClear events --- src/public.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/public.js b/src/public.js index 7d85e666..a2c1325f 100644 --- a/src/public.js +++ b/src/public.js @@ -23,6 +23,8 @@ QueryBuilder.prototype.destroy = function() { * Reset the plugin */ QueryBuilder.prototype.reset = function() { + this.trigger('beforeReset'); + this.status.group_id = 1; this.status.rule_id = 0; @@ -37,6 +39,8 @@ QueryBuilder.prototype.reset = function() { * Clear the plugin */ QueryBuilder.prototype.clear = function() { + this.trigger('beforeClear'); + this.status.group_id = 0; this.status.rule_id = 0; From 1f73bd8193e770b9dcc12c5ca466c7b6f90b72f0 Mon Sep 17 00:00:00 2001 From: mistic100 Date: Sun, 12 Feb 2017 13:10:30 +0100 Subject: [PATCH 006/107] Fix #431 re-create input when operators are from different optgroups --- src/core.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core.js b/src/core.js index 3ffe3763..22149887 100644 --- a/src/core.js +++ b/src/core.js @@ -658,7 +658,10 @@ QueryBuilder.prototype.updateRuleOperator = function(rule, previousOperator) { else { $valueContainer.show(); - if ($valueContainer.is(':empty') || !previousOperator || rule.operator.nb_inputs !== previousOperator.nb_inputs) { + if ($valueContainer.is(':empty') || !previousOperator || + rule.operator.nb_inputs !== previousOperator.nb_inputs || + rule.operator.optgroup !== previousOperator.optgroup + ) { this.createRuleInput(rule); } } From cba0b70669aae07d0d2fb223d8928e2055f84509 Mon Sep 17 00:00:00 2001 From: mistic100 Date: Sun, 12 Feb 2017 18:52:10 +0100 Subject: [PATCH 007/107] a LOT of jsDoc --- .gitignore | 1 + Gruntfile.js | 13 + README.md | 2 +- package.json | 2 + src/core.js | 332 +++++++++++++----- src/data.js | 144 +++++--- src/defaults.js | 24 +- src/main.js | 138 ++++---- src/model.js | 421 +++++++++++++++-------- src/plugins/bt-checkbox/plugin.js | 23 +- src/plugins/bt-checkbox/plugins.scss | 12 + src/plugins/bt-selectpicker/plugin.js | 16 +- src/plugins/bt-tooltip-errors/plugin.js | 15 +- src/plugins/change-filters/plugin.js | 101 +++--- src/plugins/filter-description/plugin.js | 16 +- src/plugins/invert/plugin.js | 27 +- src/plugins/mongodb-support/plugin.js | 159 ++++++--- src/plugins/not-group/plugin.js | 38 +- src/plugins/sortable/plugin.js | 40 ++- src/plugins/sql-support/plugin.js | 225 ++++++++---- src/plugins/unique-filter/plugin.js | 28 +- src/public.js | 136 ++++++-- src/template.js | 136 +++++--- src/utils.js | 76 ++-- 24 files changed, 1450 insertions(+), 675 deletions(-) create mode 100644 src/plugins/bt-checkbox/plugins.scss diff --git a/.gitignore b/.gitignore index f4b28947..2b7141a4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ bower_components node_modules dist +doc .sass-cache .coverage-results .idea diff --git a/Gruntfile.js b/Gruntfile.js index 3725a9be..208f6f2c 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -300,6 +300,19 @@ module.exports = function(grunt) { } }, + // jsDoc generation + jsdoc: { + lib: { + src: ['src/**/*.js', '!src/**/.wrapper.js'], + dest: 'doc', + options: { + private: false, + template: 'node_modules/docdash', + readme: 'README.md' + } + } + }, + // inject sources files and tests modules in demo and test injector: { options: { diff --git a/README.md b/README.md index 4aa83f81..708b26c4 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ jQuery plugin offering an simple interface to create complex queries. [![screenshot](https://raw.githubusercontent.com/mistic100/jQuery-QueryBuilder/master/examples/screenshot.png)](http://querybuilder.js.org) ## Documentation -http://querybuilder.js.org +[querybuilder.js.org](http://querybuilder.js.org) ### Dependencies * jQuery >= 1.10 diff --git a/package.json b/package.json index f4c96d12..2e57f8bf 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ }, "devDependencies": { "deepmerge": "^0.2.0", + "docdash": "^0.4.0", "grunt": "^1.0.0", "grunt-banner": "^0.6.0", "grunt-contrib-clean": "^1.0.0", @@ -31,6 +32,7 @@ "grunt-coveralls": "^1.0.0", "grunt-injector": "^1.1.0", "grunt-jscs": "^2.8.0", + "grunt-jsdoc": "^2.1.0", "grunt-open": "^0.2.3", "grunt-qunit-blanket-lcov": "^0.3.0", "grunt-sass-injection": "^1.0.3", diff --git a/src/core.js b/src/core.js index 22149887..7e82498a 100644 --- a/src/core.js +++ b/src/core.js @@ -1,5 +1,9 @@ /** - * Init the builder + * Inits the builder + * @param {jQuery} $el + * @param {object} options + * @fires QueryBuilder#afterInit + * @private */ QueryBuilder.prototype.init = function($el, options) { $el[0].queryBuilder = this; @@ -63,6 +67,9 @@ QueryBuilder.prototype.init = function($el, options) { this.bindEvents(); this.initPlugins(); + /** + * @event QueryBuilder#afterInit + */ this.trigger('afterInit'); if (options.rules) { @@ -74,8 +81,43 @@ QueryBuilder.prototype.init = function($el, options) { } }; +/** + * Initializes plugins for an instance + * @throws ConfigError + * @private + */ +QueryBuilder.prototype.initPlugins = function() { + if (!this.plugins) { + return; + } + + if ($.isArray(this.plugins)) { + var tmp = {}; + this.plugins.forEach(function(plugin) { + tmp[plugin] = null; + }); + this.plugins = tmp; + } + + Object.keys(this.plugins).forEach(function(plugin) { + if (plugin in QueryBuilder.plugins) { + this.plugins[plugin] = $.extend(true, {}, + QueryBuilder.plugins[plugin].def, + this.plugins[plugin] || {} + ); + + QueryBuilder.plugins[plugin].fct.call(this, this.plugins[plugin]); + } + else { + Utils.error('Config', 'Unable to find plugin "{0}"', plugin); + } + }, this); +}; + /** * Checks the configuration of each filter + * @param {object[]} filters + * @returns {object[]} * @throws ConfigError */ QueryBuilder.prototype.checkFilters = function(filters) { @@ -136,7 +178,8 @@ QueryBuilder.prototype.checkFilters = function(filters) { } switch (filter.input) { - case 'radio': case 'checkbox': + case 'radio': + case 'checkbox': if (!filter.values || filter.values.length < 1) { Utils.error('Config', 'Missing filter "{0}" values', filter.id); } @@ -164,7 +207,7 @@ QueryBuilder.prototype.checkFilters = function(filters) { else { var self = this; filters.sort(function(a, b) { - return self.translateLabel(a.label).localeCompare(self.translateLabel(b.label)); + return self.getTranslatedLabel(a.label).localeCompare(self.getTranslatedLabel(b.label)); }); } } @@ -178,6 +221,8 @@ QueryBuilder.prototype.checkFilters = function(filters) { /** * Checks the configuration of each operator + * @param {object[]} operators + * @returns {object[]} * @throws ConfigError */ QueryBuilder.prototype.checkOperators = function(operators) { @@ -231,54 +276,56 @@ QueryBuilder.prototype.checkOperators = function(operators) { }; /** - * Add all events listeners + * Adds all events listeners to the builder + * @private */ QueryBuilder.prototype.bindEvents = function() { var self = this; + var Selectors = QueryBuilder.selectors; // group condition change this.$el.on('change.queryBuilder', Selectors.group_condition, function() { if ($(this).is(':checked')) { var $group = $(this).closest(Selectors.group_container); - Model($group).condition = $(this).val(); + self.getModel($group).condition = $(this).val(); } }); // rule filter change this.$el.on('change.queryBuilder', Selectors.rule_filter, function() { var $rule = $(this).closest(Selectors.rule_container); - Model($rule).filter = self.getFilterById($(this).val()); + self.getModel($rule).filter = self.getFilterById($(this).val()); }); // rule operator change this.$el.on('change.queryBuilder', Selectors.rule_operator, function() { var $rule = $(this).closest(Selectors.rule_container); - Model($rule).operator = self.getOperatorByType($(this).val()); + self.getModel($rule).operator = self.getOperatorByType($(this).val()); }); // add rule button this.$el.on('click.queryBuilder', Selectors.add_rule, function() { var $group = $(this).closest(Selectors.group_container); - self.addRule(Model($group)); + self.addRule(self.getModel($group)); }); // delete rule button this.$el.on('click.queryBuilder', Selectors.delete_rule, function() { var $rule = $(this).closest(Selectors.rule_container); - self.deleteRule(Model($rule)); + self.deleteRule(self.getModel($rule)); }); if (this.settings.allow_groups !== 0) { // add group button this.$el.on('click.queryBuilder', Selectors.add_group, function() { var $group = $(this).closest(Selectors.group_container); - self.addGroup(Model($group)); + self.addGroup(self.getModel($group)); }); // delete group button this.$el.on('click.queryBuilder', Selectors.delete_group, function() { var $group = $(this).closest(Selectors.group_container); - self.deleteGroup(Model($group)); + self.deleteGroup(self.getModel($group)); }); } @@ -288,12 +335,12 @@ QueryBuilder.prototype.bindEvents = function() { node.$el.remove(); self.refreshGroupsConditions(); }, - 'add': function(e, node, index) { + 'add': function(e, parent, node, index) { if (index === 0) { - node.$el.prependTo(node.parent.$el.find('>' + Selectors.rules_list)); + node.$el.prependTo(parent.$el.find('>' + QueryBuilder.selectors.rules_list)); } else { - node.$el.insertAfter(node.parent.rules[index - 1].$el); + node.$el.insertAfter(parent.rules[index - 1].$el); } self.refreshGroupsConditions(); }, @@ -301,7 +348,7 @@ QueryBuilder.prototype.bindEvents = function() { node.$el.detach(); if (index === 0) { - node.$el.prependTo(group.$el.find('>' + Selectors.rules_list)); + node.$el.prependTo(group.$el.find('>' + QueryBuilder.selectors.rules_list)); } else { node.$el.insertAfter(group.rules[index - 1].$el); @@ -312,7 +359,7 @@ QueryBuilder.prototype.bindEvents = function() { if (node instanceof Rule) { switch (field) { case 'error': - self.displayError(node); + self.updateError(node); break; case 'flags': @@ -335,7 +382,7 @@ QueryBuilder.prototype.bindEvents = function() { else { switch (field) { case 'error': - self.displayError(node); + self.updateError(node); break; case 'flags': @@ -352,11 +399,12 @@ QueryBuilder.prototype.bindEvents = function() { }; /** - * Create the root group - * @param addRule {bool,optional} add a default empty rule - * @param data {mixed,optional} group custom data - * @param flags {object,optional} flags to apply to the group - * @return group {Root} + * Creates the root group + * @param {boolean} [addRule=true] - adds a default empty rule + * @param {object} [data] - group custom data + * @param {object} [flags] - flags to apply to the group + * @returns {Group} root group + * @fires QueryBuilder#afterAddGroup */ QueryBuilder.prototype.setRoot = function(addRule, data, flags) { addRule = (addRule === undefined || addRule === true); @@ -383,18 +431,27 @@ QueryBuilder.prototype.setRoot = function(addRule, data, flags) { }; /** - * Add a new group - * @param parent {Group} - * @param addRule {bool,optional} add a default empty rule - * @param data {mixed,optional} group custom data - * @param flags {object,optional} flags to apply to the group - * @return group {Group} + * Adds a new group + * @param {Group} parent + * @param {boolean} [addRule=true] - adds a default empty rule + * @param {object} [data] - group custom data + * @param {object} [flags] - flags to apply to the group + * @returns {Group} + * @fires QueryBuilder#beforeAddGroup + * @fires QueryBuilder#afterAddGroup */ QueryBuilder.prototype.addGroup = function(parent, addRule, data, flags) { addRule = (addRule === undefined || addRule === true); var level = parent.level + 1; + /** + * Preventable + * @event QueryBuilder#beforeAddGroup + * @param {Group} parent + * @param {boolean} addRule + * @param {int} level + */ var e = this.trigger('beforeAddGroup', parent, addRule, level); if (e.isDefaultPrevented()) { return null; @@ -407,6 +464,10 @@ QueryBuilder.prototype.addGroup = function(parent, addRule, data, flags) { model.data = data; model.__.flags = $.extend({}, this.settings.default_group_flags, flags); + /** + * @event QueryBuilder#afterAddGroup + * @param {Group} group + */ this.trigger('afterAddGroup', model); model.condition = this.settings.default_condition; @@ -419,15 +480,22 @@ QueryBuilder.prototype.addGroup = function(parent, addRule, data, flags) { }; /** - * Tries to delete a group. The group is not deleted if at least one rule is no_delete. - * @param group {Group} - * @return {boolean} true if the group has been deleted + * Tries to delete a group. The group is not deleted if at least one rule is flagged `no_delete`. + * @param {Group} group + * @returns {boolean} if the group has been deleted + * @fires QueryBuilder#beforeDeleteGroup + * @fires QueryBuilder#afterDeleteGroup */ QueryBuilder.prototype.deleteGroup = function(group) { if (group.isRoot()) { return false; } + /** + * Preventable + * @event QueryBuilder#beforeDeleteGroup + * @param {Group} parent + */ var e = this.trigger('beforeDeleteGroup', group); if (e.isDefaultPrevented()) { return false; @@ -436,13 +504,17 @@ QueryBuilder.prototype.deleteGroup = function(group) { var del = true; group.each('reverse', function(rule) { - del&= this.deleteRule(rule); + del &= this.deleteRule(rule); }, function(group) { - del&= this.deleteGroup(group); + del &= this.deleteGroup(group); }, this); if (del) { group.drop(); + + /** + * @event QueryBuilder#afterDeleteGroup + */ this.trigger('afterDeleteGroup'); } @@ -450,43 +522,57 @@ QueryBuilder.prototype.deleteGroup = function(group) { }; /** - * Changes the condition of a group - * @param group {Group} + * Performs actions when a group's condition changes + * @param {Group} group + * @fires QueryBuilder#afterUpdateGroupCondition + * @private */ QueryBuilder.prototype.updateGroupCondition = function(group) { - group.$el.find('>' + Selectors.group_condition).each(function() { + group.$el.find('>' + QueryBuilder.selectors.group_condition).each(function() { var $this = $(this); $this.prop('checked', $this.val() === group.condition); $this.parent().toggleClass('active', $this.val() === group.condition); }); + /** + * @event QueryBuilder#afterUpdateGroupCondition + * @param {Group} group + */ this.trigger('afterUpdateGroupCondition', group); }; /** - * Update visibility of conditions based on number of rules inside each group + * Updates the visibility of conditions based on number of rules inside each group + * @private */ QueryBuilder.prototype.refreshGroupsConditions = function() { (function walk(group) { if (!group.flags || (group.flags && !group.flags.condition_readonly)) { - group.$el.find('>' + Selectors.group_condition).prop('disabled', group.rules.length <= 1) + group.$el.find('>' + QueryBuilder.selectors.group_condition).prop('disabled', group.rules.length <= 1) .parent().toggleClass('disabled', group.rules.length <= 1); } - group.each(function(rule) {}, function(group) { + group.each(null, function(group) { walk(group); }, this); }(this.model.root)); }; /** - * Add a new rule - * @param parent {Group} - * @param data {mixed,optional} rule custom data - * @param flags {object,optional} flags to apply to the rule - * @return rule {Rule} + * Adds a new rule + * @param {Group} parent + * @param {object} [data] - rule custom data + * @param {object} [flags] - flags to apply to the rule + * @returns {Rule} + * @fires QueryBuilder#beforeAddRule + * @fires QueryBuilder#afterAddRule */ QueryBuilder.prototype.addRule = function(parent, data, flags) { + /** + * Preventable + * @event QueryBuilder#beforeAddRule + * @param {Group} parent + */ var e = this.trigger('beforeAddRule', parent); if (e.isDefaultPrevented()) { return null; @@ -502,6 +588,10 @@ QueryBuilder.prototype.addRule = function(parent, data, flags) { model.__.flags = $.extend({}, this.settings.default_rule_flags, flags); + /** + * @event QueryBuilder#afterAddRule + * @param {Rule} rule + */ this.trigger('afterAddRule', model); this.createRuleFilters(model); @@ -517,15 +607,22 @@ QueryBuilder.prototype.addRule = function(parent, data, flags) { }; /** - * Delete a rule. - * @param rule {Rule} - * @return {boolean} true if the rule has been deleted + * Tries to delete a rule + * @param {Rule} rule + * @returns {boolean} if the rule has been deleted + * @fires QueryBuilder#beforeDeleteRule + * @fires QueryBuilder#afterDeleteRule */ QueryBuilder.prototype.deleteRule = function(rule) { if (rule.flags.no_delete) { return false; } + /** + * Preventable + * @event QueryBuilder#beforeDeleteRule + * @param {Rule} rule + */ var e = this.trigger('beforeDeleteRule', rule); if (e.isDefaultPrevented()) { return false; @@ -533,30 +630,41 @@ QueryBuilder.prototype.deleteRule = function(rule) { rule.drop(); + /** + * @event QueryBuilder#afterDeleteRule + */ this.trigger('afterDeleteRule'); return true; }; /** - * Create the filters for a rule and init the rule operator - * @param rule {Rule} + * Creates the operators for a rule and init the rule operator + * @param {Rule} rule + * @fires QueryBuilder#afterCreateRuleOperators + * @private */ QueryBuilder.prototype.createRuleOperators = function(rule) { - var $operatorContainer = rule.$el.find(Selectors.operator_container).empty(); + var $operatorContainer = rule.$el.find(QueryBuilder.selectors.operator_container).empty(); if (!rule.filter) { return; @@ -570,15 +678,22 @@ QueryBuilder.prototype.createRuleOperators = function(rule) { // set the operator without triggering update event rule.__.operator = operators[0]; + /** + * @event QueryBuilder#afterCreateRuleOperators + * @param {Rule} rule + * @param {object[]} operators + */ this.trigger('afterCreateRuleOperators', rule, operators); }; /** - * Create the main input for a rule - * @param rule {Rule} + * Creates the main input for a rule + * @param {Rule} rule + * @fires QueryBuilder#afterCreateRuleInput + * @private */ QueryBuilder.prototype.createRuleInput = function(rule) { - var $valueContainer = rule.$el.find(Selectors.value_container).empty(); + var $valueContainer = rule.$el.find(QueryBuilder.selectors.value_container).empty(); rule.__.value = undefined; @@ -611,6 +726,10 @@ QueryBuilder.prototype.createRuleInput = function(rule) { $inputs[filter.plugin](filter.plugin_config || {}); } + /** + * @event QueryBuilder#afterCreateRuleInput + * @param {Rule} rule + */ this.trigger('afterCreateRuleInput', rule); if (filter.default_value !== undefined) { @@ -624,31 +743,39 @@ QueryBuilder.prototype.createRuleInput = function(rule) { }; /** - * Perform action when rule's filter is changed - * @param rule {Rule} - * @param previousFilter {object} + * Performs action when a rule's filter changes + * @param {Rule} rule + * @param {object} previousFilter + * @fires QueryBuilder#afterUpdateRuleFilter + * @private */ QueryBuilder.prototype.updateRuleFilter = function(rule, previousFilter) { this.createRuleOperators(rule); this.createRuleInput(rule); - rule.$el.find(Selectors.rule_filter).val(rule.filter ? rule.filter.id : '-1'); + rule.$el.find(QueryBuilder.selectors.rule_filter).val(rule.filter ? rule.filter.id : '-1'); // clear rule data if the filter changed if (previousFilter && rule.filter && previousFilter.id !== rule.filter.id) { rule.data = undefined; } + /** + * @event QueryBuilder#afterUpdateRuleFilter + * @param {Rule} rule + */ this.trigger('afterUpdateRuleFilter', rule); }; /** - * Update main visibility when rule operator changes - * @param rule {Rule} - * @param previousOperator {object} + * Performs actions when a rule's operator changes + * @param {Rule} rule + * @param {object} previousOperator + * @fires QueryBuilder#afterUpdateRuleOperator + * @private */ QueryBuilder.prototype.updateRuleOperator = function(rule, previousOperator) { - var $valueContainer = rule.$el.find(Selectors.value_container); + var $valueContainer = rule.$el.find(QueryBuilder.selectors.value_container); if (!rule.operator || rule.operator.nb_inputs === 0) { $valueContainer.hide(); @@ -667,32 +794,45 @@ QueryBuilder.prototype.updateRuleOperator = function(rule, previousOperator) { } if (rule.operator) { - rule.$el.find(Selectors.rule_operator).val(rule.operator.type); + rule.$el.find(QueryBuilder.selectors.rule_operator).val(rule.operator.type); } + /** + * @event QueryBuilder#afterUpdateRuleOperator + * @param {Rule} rule + */ this.trigger('afterUpdateRuleOperator', rule); this.updateRuleValue(rule); }; /** - * Perform action when rule's value is changed - * @param rule {Rule} + * Performs actions when rule's value changes + * @param {Rule} rule + * @fires QueryBuilder#afterUpdateRuleValue + * @private */ QueryBuilder.prototype.updateRuleValue = function(rule) { if (!rule._updating_value) { this.setRuleInputValue(rule, rule.value); } + /** + * @event QueryBuilder#afterUpdateRuleValue + * @param {Rule} rule + */ this.trigger('afterUpdateRuleValue', rule); }; /** - * Change rules properties depending on flags. - * @param rule {Rule} + * Changes a rule's properties depending on its flags + * @param {Rule} rule + * @fires QueryBuilder#afterApplyRuleFlags + * @private */ QueryBuilder.prototype.applyRuleFlags = function(rule) { var flags = rule.flags; + var Selectors = QueryBuilder.selectors; if (flags.filter_readonly) { rule.$el.find(Selectors.rule_filter).prop('disabled', true); @@ -707,15 +847,22 @@ QueryBuilder.prototype.applyRuleFlags = function(rule) { rule.$el.find(Selectors.delete_rule).remove(); } + /** + * @event QueryBuilder#afterApplyRuleFlags + * @param {Rule} rule + */ this.trigger('afterApplyRuleFlags', rule); }; /** - * Change group properties depending on flags. - * @param group {Group} + * Changes group's properties depending on its flags + * @param {Group} group + * @fires QueryBuilder#afterApplyGroupFlags + * @private */ QueryBuilder.prototype.applyGroupFlags = function(group) { var flags = group.flags; + var Selectors = QueryBuilder.selectors; if (flags.condition_readonly) { group.$el.find('>' + Selectors.group_condition).prop('disabled', true) @@ -731,12 +878,16 @@ QueryBuilder.prototype.applyGroupFlags = function(group) { group.$el.find(Selectors.delete_group).remove(); } + /** + * @event QueryBuilder#afterApplyGroupFlags + * @param {Group} group + */ this.trigger('afterApplyGroupFlags', group); }; /** - * Clear all errors markers - * @param node {Node,optional} default is root Group + * Clears all errors markers + * @param {Node} [node] default is root Group */ QueryBuilder.prototype.clearErrors = function(node) { node = node || this.model.root; @@ -757,10 +908,12 @@ QueryBuilder.prototype.clearErrors = function(node) { }; /** - * Add/Remove class .has-error and update error title - * @param node {Node} + * Adds/Removes error on a Rule or Group + * @param {Node} node + * @fires QueryBuilder#filter:displayError + * @private */ -QueryBuilder.prototype.displayError = function(node) { +QueryBuilder.prototype.updateError = function(node) { if (this.settings.display_errors) { if (node.error === null) { node.$el.removeClass('has-error'); @@ -768,26 +921,43 @@ QueryBuilder.prototype.displayError = function(node) { else { var errorMessage = this.lang.errors[node.error[0]] || node.error[0]; errorMessage = Utils.fmt(errorMessage, node.error.slice(1)); + + /** + * @event QueryBuilder#filter:displayError + * @param {string} errorMessage + * @param {array} error + * @param {Node} node + * @returns {string} + */ errorMessage = this.change('displayError', errorMessage, node.error, node); node.$el.addClass('has-error') - .find(Selectors.error_container).eq(0) + .find(QueryBuilder.selectors.error_container).eq(0) .attr('title', errorMessage); } } }; /** - * Trigger a validation error event - * @param node {Node} - * @param error {array} - * @param value {mixed} + * Triggers a validation error event + * @param {Node} node + * @param {string|array} error + * @param {*} value + * @fires QueryBuilder#validationError + * @private */ QueryBuilder.prototype.triggerValidationError = function(node, error, value) { if (!$.isArray(error)) { error = [error]; } + /** + * Preventable + * @event QueryBuilder#validationError + * @param {Node} node + * @param {string} node + * @param {*} value + */ var e = this.trigger('validationError', node, error, value); if (!e.isDefaultPrevented()) { node.error = error; diff --git a/src/data.js b/src/data.js index 3aab4578..71e1c656 100644 --- a/src/data.js +++ b/src/data.js @@ -1,10 +1,9 @@ -/*jshint loopfunc:true */ - /** - * Check if a value is correct for a filter - * @param rule {Rule} - * @param value {string|string[]|undefined} - * @return {array|true} + * Performs value validation + * @param {Rule} rule + * @param {string|string[]} value + * @returns {array|boolean} true or error array + * @fires QueryBuilder#filter:validateValue */ QueryBuilder.prototype.validateValue = function(rule, value) { var validation = rule.filter.validation || {}; @@ -14,20 +13,28 @@ QueryBuilder.prototype.validateValue = function(rule, value) { result = validation.callback.call(this, value, rule); } else { - result = this.validateValueInternal(rule, value); + result = this._validateValue(rule, value); } + /** + * @event QueryBuilder#filter:validateValue + * @param {array|boolean} result + * @param {*} value + * @param {Rule} rule + * @returns {array|boolean} + */ return this.change('validateValue', result, value, rule); }; /** * Default validation function + * @param {Rule} rule + * @param {string|string[]} value + * @returns {array|boolean} true or error array * @throws ConfigError - * @param rule {Rule} - * @param value {string|string[]|undefined} - * @return {Array|boolean} error array or true + * @private */ -QueryBuilder.prototype.validateValueInternal = function(rule, value) { +QueryBuilder.prototype._validateValue = function(rule, value) { var filter = rule.filter; var operator = rule.operator; var validation = filter.validation || {}; @@ -217,7 +224,8 @@ QueryBuilder.prototype.validateValueInternal = function(rule, value) { /** * Returns an incremented group ID - * @return {string} + * @returns {string} + * @private */ QueryBuilder.prototype.nextGroupId = function() { return this.status.id + '_group_' + (this.status.group_id++); @@ -225,7 +233,8 @@ QueryBuilder.prototype.nextGroupId = function() { /** * Returns an incremented rule ID - * @return {string} + * @returns {string} + * @private */ QueryBuilder.prototype.nextRuleId = function() { return this.status.id + '_rule_' + (this.status.rule_id++); @@ -233,8 +242,10 @@ QueryBuilder.prototype.nextRuleId = function() { /** * Returns the operators for a filter - * @param filter {string|object} (filter id name or filter object) - * @return {object[]} + * @param {string|object} filter - filter id or filter object + * @returns {object[]} + * @fires QueryBuilder#filter:getOperators + * @private */ QueryBuilder.prototype.getOperators = function(filter) { if (typeof filter == 'string') { @@ -265,15 +276,22 @@ QueryBuilder.prototype.getOperators = function(filter) { }); } + /** + * QueryBuilder#filter:getOperators + * @param {object[]} operators + * @param {object} filter + * @returns {object[]} + */ return this.change('getOperators', result, filter); }; /** * Returns a particular filter by its id + * @param {string} id + * @param {boolean} [doThrow=true] + * @returns {object|null} * @throws UndefinedFilterError - * @param id {string} - * @param [doThrow=true] {boolean} - * @return {object|null} + * @private */ QueryBuilder.prototype.getFilterById = function(id, doThrow) { if (id == '-1') { @@ -292,11 +310,12 @@ QueryBuilder.prototype.getFilterById = function(id, doThrow) { }; /** - * Return a particular operator by its type + * Returns a particular operator by its type + * @param {string} type + * @param {boolean} [doThrow=true] + * @returns {object|null} * @throws UndefinedOperatorError - * @param type {string} - * @param [doThrow=true] {boolean} - * @return {object|null} + * @private */ QueryBuilder.prototype.getOperatorByType = function(type, doThrow) { if (type == '-1') { @@ -315,9 +334,11 @@ QueryBuilder.prototype.getOperatorByType = function(type, doThrow) { }; /** - * Returns rule's input value - * @param rule {Rule} - * @return {mixed} + * Returns rule's current input value + * @param {Rule} rule + * @returns {*} + * @fires QueryBuilder#filter:getRuleValue + * @private */ QueryBuilder.prototype.getRuleInputValue = function(rule) { var filter = rule.filter; @@ -328,7 +349,7 @@ QueryBuilder.prototype.getRuleInputValue = function(rule) { value = filter.valueGetter.call(this, rule); } else { - var $value = rule.$el.find(Selectors.value_container); + var $value = rule.$el.find(QueryBuilder.selectors.value_container); for (var i = 0; i < operator.nb_inputs; i++) { var name = Utils.escapeElementId(rule.id + '_value_' + i); @@ -341,18 +362,22 @@ QueryBuilder.prototype.getRuleInputValue = function(rule) { case 'checkbox': tmp = []; + // jshint loopfunc:true $value.find('[name=' + name + ']:checked').each(function() { tmp.push($(this).val()); }); + // jshint loopfunc:false value.push(tmp); break; case 'select': if (filter.multiple) { tmp = []; + // jshint loopfunc:true $value.find('[name=' + name + '] option:selected').each(function() { tmp.push($(this).val()); }); + // jshint loopfunc:false value.push(tmp); } else { @@ -381,13 +406,20 @@ QueryBuilder.prototype.getRuleInputValue = function(rule) { } } + /** + * @event QueryBuilder#filter:getRuleValue + * @param {*} value + * @param {Rule} rule + * @returns {*} + */ return this.change('getRuleValue', value, rule); }; /** - * Sets the value of a rule's input. - * @param rule {Rule} - * @param value {mixed} + * Sets the value of a rule's input + * @param {Rule} rule + * @param {*} value + * @private */ QueryBuilder.prototype.setRuleInputValue = function(rule, value) { var filter = rule.filter; @@ -403,7 +435,7 @@ QueryBuilder.prototype.setRuleInputValue = function(rule, value) { filter.valueSetter.call(this, rule, value); } else { - var $value = rule.$el.find(Selectors.value_container); + var $value = rule.$el.find(QueryBuilder.selectors.value_container); if (operator.nb_inputs == 1) { value = [value]; @@ -421,9 +453,11 @@ QueryBuilder.prototype.setRuleInputValue = function(rule, value) { if (!$.isArray(value[i])) { value[i] = [value[i]]; } + // jshint loopfunc:true value[i].forEach(function(value) { $value.find('[name=' + name + '][value="' + value + '"]').prop('checked', true).trigger('change'); }); + // jshint loopfunc:false break; default: @@ -440,9 +474,11 @@ QueryBuilder.prototype.setRuleInputValue = function(rule, value) { }; /** - * Clean rule flags. - * @param rule {object} - * @return {object} + * Parses rule flags + * @param {object} rule + * @returns {object} + * @fires QueryBuilder#filter:parseRuleFlags + * @private */ QueryBuilder.prototype.parseRuleFlags = function(rule) { var flags = $.extend({}, this.settings.default_rule_flags); @@ -460,14 +496,21 @@ QueryBuilder.prototype.parseRuleFlags = function(rule) { $.extend(flags, rule.flags); } + /** + * @event QueryBuilder#filter:parseRuleFlags + * @param {object} flags + * @param {object} rule + * @returns {object} + */ return this.change('parseRuleFlags', flags, rule); }; /** - * Get a copy of flags of a rule. + * Gets a copy of flags of a rule * @param {object} flags - * @param {boolean} all - true to return all flags, false to return only changes from default + * @param {boolean} [all=false] - return all flags or only changes from default flags * @returns {object} + * @private */ QueryBuilder.prototype.getRuleFlags = function(flags, all) { if (all) { @@ -485,9 +528,11 @@ QueryBuilder.prototype.getRuleFlags = function(flags, all) { }; /** - * Clean group flags. - * @param group {object} - * @return {object} + * Parses group flags + * @param {object} group + * @returns {object} + * @fires QueryBuilder#filter:parseGroupFlags + * @private */ QueryBuilder.prototype.parseGroupFlags = function(group) { var flags = $.extend({}, this.settings.default_group_flags); @@ -505,14 +550,21 @@ QueryBuilder.prototype.parseGroupFlags = function(group) { $.extend(flags, group.flags); } + /** + * @event QueryBuilder#filter:parseGroupFlags + * @param {object} flags + * @param {object} group + * @returns {object} + */ return this.change('parseGroupFlags', flags, group); }; /** - * Get a copy of flags of a group. + * Gets a copy of flags of a group * @param {object} flags - * @param {boolean} all - true to return all flags, false to return only changes from default + * @param {boolean} [all=false] - return all flags or only changes from default flags * @returns {object} + * @private */ QueryBuilder.prototype.getGroupFlags = function(flags, all) { if (all) { @@ -530,20 +582,22 @@ QueryBuilder.prototype.getGroupFlags = function(flags, all) { }; /** - * Translate a label - * @param label {string|object} - * @return string + * Translates a label + * @param {string|object} label + * @returns {string} + * @private */ -QueryBuilder.prototype.translateLabel = function(label) { +QueryBuilder.prototype.getTranslatedLabel = function(label) { return typeof label == 'object' ? (label[this.settings.lang_code] || label['en']) : label; }; /** - * Return a validation message + * Returns a validation message * @param {object} validation * @param {string} type * @param {string} def * @returns {string} + * @private */ QueryBuilder.prototype.getValidationMessage = function(validation, type, def) { return validation.messages && validation.messages[type] || def; diff --git a/src/defaults.js b/src/defaults.js index 1fd031a1..ed757eb6 100644 --- a/src/defaults.js +++ b/src/defaults.js @@ -1,5 +1,7 @@ /** * Allowed types and their internal representation + * @type {object.} + * @readonly */ QueryBuilder.types = { 'string': 'string', @@ -13,6 +15,8 @@ QueryBuilder.types = { /** * Allowed inputs + * @type {string[]} + * @readonly */ QueryBuilder.inputs = [ 'text', @@ -24,7 +28,9 @@ QueryBuilder.inputs = [ ]; /** - * Runtime modifiable options with `setOptions` method + * Runtime modifiable options with setOptions method + * @type {string[]} + * @readonly */ QueryBuilder.modifiable_options = [ 'display_errors', @@ -36,8 +42,10 @@ QueryBuilder.modifiable_options = [ /** * CSS selectors for common components + * @type {object.} + * @readonly */ -var Selectors = QueryBuilder.selectors = { +QueryBuilder.selectors = { group_container: '.rules-group-container', rule_container: '.rule-container', filter_container: '.rule-filter-container', @@ -65,17 +73,23 @@ var Selectors = QueryBuilder.selectors = { }; /** - * Template strings (see `template.js`) + * Template strings (see template.js) + * @type {object.} + * @readonly */ QueryBuilder.templates = {}; /** - * Localized strings (see `i18n/`) + * Localized strings (see i18n/) + * @type {object.} + * @readonly */ QueryBuilder.regional = {}; /** * Default operators + * @type {object.} + * @readonly */ QueryBuilder.OPERATORS = { equal: { type: 'equal', nb_inputs: 1, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] }, @@ -102,6 +116,8 @@ QueryBuilder.OPERATORS = { /** * Default configuration + * @type {object} + * @readonly */ QueryBuilder.DEFAULTS = { filters: [], diff --git a/src/main.js b/src/main.js index 4a2165fc..9390e212 100644 --- a/src/main.js +++ b/src/main.js @@ -1,15 +1,37 @@ -// CLASS DEFINITION -// =============================== +/** + * @param {jQuery} $el + * @param {object} options - see {@link http://querybuilder.js.org/#options} + * @constructor + * @fires QueryBuilder#afterInit + */ var QueryBuilder = function($el, options) { this.init($el, options); }; +$.extend(QueryBuilder.prototype, /** @lends QueryBuilder.prototype */ { + /** + * Triggers an event on the builder container + * @param {string} type + * @returns {$.Event} + */ + trigger: function(type) { + var event = new $.Event(this._tojQueryEvent(type), { + builder: this + }); + + this.$el.triggerHandler(event, Array.prototype.slice.call(arguments, 1)); + + return event; + }, -// EVENTS SYSTEM -// =============================== -$.extend(QueryBuilder.prototype, { + /** + * Triggers an event on the builder container and returns the modified value + * @param {string} type + * @param {*} value + * @returns {*} + */ change: function(type, value) { - var event = new $.Event(this.tojQueryEvent(type, true), { + var event = new $.Event(this._tojQueryEvent(type, true), { builder: this, value: value }); @@ -19,47 +41,69 @@ $.extend(QueryBuilder.prototype, { return event.value; }, - trigger: function(type) { - var event = new $.Event(this.tojQueryEvent(type), { - builder: this - }); - - this.$el.triggerHandler(event, Array.prototype.slice.call(arguments, 1)); - - return event; - }, - + /** + * Attaches an event listener on the builder container + * @param {string} type + * @param {function} cb + * @returns {QueryBuilder} + */ on: function(type, cb) { - this.$el.on(this.tojQueryEvent(type), cb); + this.$el.on(this._tojQueryEvent(type), cb); return this; }, + /** + * Removes an event listener from the builder container + * @param {string} type + * @param {function} [cb] + * @returns {QueryBuilder} + */ off: function(type, cb) { - this.$el.off(this.tojQueryEvent(type), cb); + this.$el.off(this._tojQueryEvent(type), cb); return this; }, + /** + * Attaches an event listener called once on the builder container + * @param {string} type + * @param {function} cb + * @returns {QueryBuilder} + */ once: function(type, cb) { - this.$el.one(this.tojQueryEvent(type), cb); + this.$el.one(this._tojQueryEvent(type), cb); return this; }, - tojQueryEvent: function(name, filter) { + /** + * Appends `.queryBuilder` and optionally `.filter` to the events names + * @param {string} name + * @param {boolean} [filter=false] + * @returns {string} + * @private + */ + _tojQueryEvent: function(name, filter) { return name.split(' ').map(function(type) { return type + '.queryBuilder' + (filter ? '.filter' : ''); }).join(' '); } }); +/** + * @typedef {object} QueryBuilder#Plugin + * @property {object} def - default options + * @property {function} fct - init function + */ -// PLUGINS SYSTEM -// =============================== +/** + * Definition of available plugins + * @type {object.} + */ QueryBuilder.plugins = {}; /** - * Get or extend the default configuration - * @param options {object,optional} new configuration, leave undefined to get the default config - * @return {undefined|object} nothing or configuration object (copy) + * Gets or extends the default configuration + * @param {object} [options] - new configuration + * @returns {undefined|object} nothing or configuration object (copy) */ QueryBuilder.defaults = function(options) { if (typeof options == 'object') { @@ -79,10 +123,10 @@ QueryBuilder.defaults = function(options) { }; /** - * Define a new plugin - * @param {string} - * @param {function} - * @param {object,optional} default configuration + * Registers a new plugin + * @param {string} name + * @param {function} fct - init function + * @param {object} [def] - default options */ QueryBuilder.define = function(name, fct, def) { QueryBuilder.plugins[name] = { @@ -92,41 +136,9 @@ QueryBuilder.define = function(name, fct, def) { }; /** - * Add new methods - * @param {object} + * Adds new methods to QueryBuilder prototypes + * @param {object.} methods */ QueryBuilder.extend = function(methods) { $.extend(QueryBuilder.prototype, methods); }; - -/** - * Init plugins for an instance - * @throws ConfigError - */ -QueryBuilder.prototype.initPlugins = function() { - if (!this.plugins) { - return; - } - - if ($.isArray(this.plugins)) { - var tmp = {}; - this.plugins.forEach(function(plugin) { - tmp[plugin] = null; - }); - this.plugins = tmp; - } - - Object.keys(this.plugins).forEach(function(plugin) { - if (plugin in QueryBuilder.plugins) { - this.plugins[plugin] = $.extend(true, {}, - QueryBuilder.plugins[plugin].def, - this.plugins[plugin] || {} - ); - - QueryBuilder.plugins[plugin].fct.call(this, this.plugins[plugin]); - } - else { - Utils.error('Config', 'Unable to find plugin "{0}"', plugin); - } - }, this); -}; diff --git a/src/model.js b/src/model.js index e67538e2..3e58ae09 100644 --- a/src/model.js +++ b/src/model.js @@ -1,37 +1,60 @@ -// Model CLASS -// =============================== /** - * Main object storing data model and emitting events - * --------- - * Access Node object stored in jQuery objects - * @param el {jQuery|Node} - * @return {Node} + * Main object storing data model and emitting model events + * @constructor */ -function Model(el) { - if (!(this instanceof Model)) { - return Model.getModel(el); - } - +function Model() { this.root = null; this.$ = $(this); } $.extend(Model.prototype, { + /** + * Triggers an event on the model + * @param {string} type + * @returns {$.Event} + * @memberof Model + * @instance + */ trigger: function(type) { - this.$.triggerHandler(type, Array.prototype.slice.call(arguments, 1)); - return this; + var event = new $.Event(type); + this.$.triggerHandler(event, Array.prototype.slice.call(arguments, 1)); + return event; }, + /** + * Attaches an event listener on the model + * @param {string} type + * @param {function} cb + * @returns {Model} + * @memberof Model + * @instance + */ on: function() { this.$.on.apply(this.$, Array.prototype.slice.call(arguments)); return this; }, + /** + * Removes an event listener from the model + * @param {string} type + * @param {function} [cb] + * @returns {Model} + * @memberof Model + * @instance + */ off: function() { this.$.off.apply(this.$, Array.prototype.slice.call(arguments)); return this; }, + /** + * Attaches an event listener called once on the model + * @param {string} type + * @param {function} cb + * @returns {Model} + * @memberof Model + * @instance + */ once: function() { this.$.one.apply(this.$, Array.prototype.slice.call(arguments)); return this; @@ -39,25 +62,11 @@ $.extend(Model.prototype, { }); /** - * Access Node object stored in jQuery objects - * @param el {jQuery|Node} - * @return {Node} - */ -Model.getModel = function(el) { - if (!el) { - return null; - } - else if (el instanceof Node) { - return el; - } - else { - return $(el).data('queryBuilderModel'); - } -}; - -/* - * Define Node properties with getter and setter - * Update events are emitted in the setter through root Model (if any) + * Defines properties on an Node prototype with getter and setter.
+ * Update events are emitted in the setter through root Model (if any).
+ * The object must have a `__` object, non enumerable property to store values. + * @param {function} obj + * @param {string[]} fields */ Model.defineModelProperties = function(obj, fields) { fields.forEach(function(field) { @@ -67,14 +76,21 @@ Model.defineModelProperties = function(obj, fields) { return this.__[field]; }, set: function(value) { - var oldValue = (this.__[field] !== null && typeof this.__[field] == 'object') ? - $.extend({}, this.__[field]) : - this.__[field]; + var previousValue = (this.__[field] !== null && typeof this.__[field] == 'object') ? + $.extend({}, this.__[field]) : + this.__[field]; this.__[field] = value; if (this.model !== null) { - this.model.trigger('update', this, field, value, oldValue); + /** + * @event Model#model:update + * @param {Node} node + * @param {string} field + * @param {*} value + * @param {*} previousValue + */ + this.model.trigger('update', this, field, value, previousValue); } } }); @@ -82,27 +98,77 @@ Model.defineModelProperties = function(obj, fields) { }; -// Node abstract CLASS -// =============================== /** - * @param {Node} - * @param {jQuery} + * Root abstract object + * @constructor + * @param {Node} [parent] + * @param {jQuery} $el */ var Node = function(parent, $el) { if (!(this instanceof Node)) { - return new Node(); + return new Node(parent, $el); } Object.defineProperty(this, '__', { value: {} }); $el.data('queryBuilderModel', this); + /** + * @name level + * @member {int} + * @memberof Node + * @instance + * @readonly + */ this.__.level = 1; + + /** + * @name error + * @member {string} + * @memberof Node + * @instance + */ this.__.error = null; + + /** + * @name flags + * @member {object} + * @memberof Node + * @instance + * @readonly + */ + this.__.flags = {}; + + /** + * @name data + * @member {object} + * @memberof Node + * @instance + */ this.__.data = undefined; + + /** + * @member {jQuery} + * @readonly + */ this.$el = $el; + + /** + * @member {string} + * @readonly + */ this.id = $el[0].id; + + /** + * @member {Model} + * @readonly + */ this.model = null; + + /** + * @member {Node} + * @readonly + */ this.parent = parent; }; @@ -121,16 +187,16 @@ Object.defineProperty(Node.prototype, 'parent', { }); /** - * Check if this Node is the root - * @return {boolean} + * Checks if this Node is the root + * @returns {boolean} */ Node.prototype.isRoot = function() { return (this.level === 1); }; /** - * Return node position inside parent - * @return {int} + * Returns the node position inside its parent + * @returns {int} */ Node.prototype.getPos = function() { if (this.isRoot()) { @@ -142,87 +208,103 @@ Node.prototype.getPos = function() { }; /** - * Delete self + * Deletes self + * @fires Model#model:drop */ Node.prototype.drop = function() { var model = this.model; - if (!this.isRoot()) { - this.parent._removeNode(this); + if (!!this.parent) { + this.parent.removeNode(this); } + this.$el.removeData('queryBuilderModel'); + if (model !== null) { + /** + * @event Model#model:drop + * @param {Node} node + */ model.trigger('drop', this); } }; /** - * Move itself after another Node - * @param {Node} - * @return {Node} self + * Moves itself after another Node + * @param {Node} target + * @fires Model#model:move */ -Node.prototype.moveAfter = function(node) { - if (this.isRoot()) return; - - this._move(node.parent, node.getPos() + 1); - - return this; +Node.prototype.moveAfter = function(target) { + if (!this.isRoot()) { + this.move(target.parent, target.getPos() + 1); + } }; /** - * Move itself at the beginning of parent or another Group - * @param {Group,optional} - * @return {Node} self + * Moves itself at the beginning of parent or another Group + * @param {Group} [target] + * @fires Model#model:move */ Node.prototype.moveAtBegin = function(target) { - if (this.isRoot()) return; + if (!this.isRoot()) { + if (target === undefined) { + target = this.parent; + } - if (target === undefined) { - target = this.parent; + this.move(target, 0); } - - this._move(target, 0); - - return this; }; /** - * Move itself at the end of parent or another Group - * @param {Group,optional} - * @return {Node} self + * Moves itself at the end of parent or another Group + * @param {Group} [target] + * @fires Model#model:move */ Node.prototype.moveAtEnd = function(target) { - if (this.isRoot()) return; + if (!this.isRoot()) { + if (target === undefined) { + target = this.parent; + } - if (target === undefined) { - target = this.parent; + this.move(target, target.length() === 0 ? 0 : target.length() - 1); } - - this._move(target, target.length() === 0 ? 0 : target.length() - 1); - - return this; }; /** - * Move itself at specific position of Group - * @param {Group} - * @param {int} + * Moves itself at specific position of Group + * @param {Group} target + * @param {int} index + * @fires Model#model:move */ -Node.prototype._move = function(group, index) { - this.parent._removeNode(this); - group._appendNode(this, index, false); +Node.prototype.move = function(target, index) { + if (!this.isRoot()) { + if (typeof target === 'number') { + index = target; + target = this.parent; + } - if (this.model !== null) { - this.model.trigger('move', this, group, index); + this.parent.removeNode(this); + target.insertNode(this, index, false); + + if (this.model !== null) { + /** + * @event Model#model:move + * @param {Node} node + * @param {Node} target + * @param {int} index + */ + this.model.trigger('move', this, target, index); + } } }; -// GROUP CLASS -// =============================== /** - * @param {Group} - * @param {jQuery} + * Group object + * @constructor + * @extends Node + * @param {Group} [parent] + * @param {jQuery} $el */ var Group = function(parent, $el) { if (!(this instanceof Group)) { @@ -231,7 +313,18 @@ var Group = function(parent, $el) { Node.call(this, parent, $el); + /** + * @member {object[]} + * @readonly + */ this.rules = []; + + /** + * @name condition + * @member {string} + * @memberof Group + * @instance + */ this.__.condition = null; }; @@ -241,7 +334,7 @@ Group.prototype.constructor = Group; Model.defineModelProperties(Group, ['condition']); /** - * Empty the Group + * Removes group's content */ Group.prototype.empty = function() { this.each('reverse', function(rule) { @@ -252,7 +345,7 @@ Group.prototype.empty = function() { }; /** - * Delete self + * Deletes self */ Group.prototype.drop = function() { this.empty(); @@ -260,21 +353,22 @@ Group.prototype.drop = function() { }; /** - * Return the number of children - * @return {int} + * Returns the number of children + * @returns {int} */ Group.prototype.length = function() { return this.rules.length; }; /** - * Add a Node at specified index - * @param {Node} - * @param {int,optional} - * @param {boolean,optional} - * @return {Node} the inserted node + * Adds a Node at specified index + * @param {Node} node + * @param {int} [index=end] + * @param {boolean} [trigger=false] - fire 'add' event + * @returns {Node} the inserted node + * @fires Model#model:add */ -Group.prototype._appendNode = function(node, index, trigger) { +Group.prototype.insertNode = function(node, index, trigger) { if (index === undefined) { index = this.length(); } @@ -283,65 +377,77 @@ Group.prototype._appendNode = function(node, index, trigger) { node.parent = this; if (trigger && this.model !== null) { - this.model.trigger('add', node, index); + /** + * @event Model#model:add + * @param {Node} parent + * @param {Node} node + * @param {int} index + */ + this.model.trigger('add', this, node, index); } return node; }; /** - * Add a Group by jQuery element at specified index - * @param {jQuery} - * @param {int,optional} - * @return {Group} the inserted group + * Adds a new Group at specified index + * @param {jQuery} $el + * @param {int} [index=end] + * @returns {Group} + * @fires Model#model:add */ Group.prototype.addGroup = function($el, index) { - return this._appendNode(new Group(this, $el), index, true); + return this.insertNode(new Group(this, $el), index, true); }; /** - * Add a Rule by jQuery element at specified index - * @param {jQuery} - * @param {int,optional} - * @return {Rule} the inserted rule + * Adds a new Rule at specified index + * @param {jQuery} $el + * @param {int} [index=end] + * @returns {Rule} + * @fires Model#model:add */ Group.prototype.addRule = function($el, index) { - return this._appendNode(new Rule(this, $el), index, true); + return this.insertNode(new Rule(this, $el), index, true); }; /** - * Delete a specific Node - * @param {Node} - * @return {Group} self + * Deletes a specific Node + * @param {Node} node */ -Group.prototype._removeNode = function(node) { +Group.prototype.removeNode = function(node) { var index = this.getNodePos(node); if (index !== -1) { node.parent = null; this.rules.splice(index, 1); } - - return this; }; /** - * Return position of a child Node - * @param {Node} - * @return {int} + * Returns the position of a child Node + * @param {Node} node + * @returns {int} */ Group.prototype.getNodePos = function(node) { return this.rules.indexOf(node); }; +/** + * @callback Model#GroupIteratee + * @param {Node} node + * @returns {boolean} stop the iteration + */ + /** * Iterate over all Nodes - * @param {boolean,optional} iterate in reverse order, required if you delete nodes - * @param {function} callback for Rules - * @param {function,optional} callback for Groups - * @return {boolean} + * @param {boolean} [reverse=false] - iterate in reverse order, required if you delete nodes + * @param {Model#GroupIteratee} cbRule - callback for Rules (can be null but not omitted) + * @param {Model#GroupIteratee} [cbGroup] - callback for Groups + * @param {object} [context] - context for callbacks + * @returns {boolean} if the iteration has been stopped by a callback */ Group.prototype.each = function(reverse, cbRule, cbGroup, context) { - if (typeof reverse == 'function') { + if (typeof reverse !== 'boolean' && typeof reverse !== 'string') { context = cbGroup; cbGroup = cbRule; cbRule = reverse; @@ -352,16 +458,18 @@ Group.prototype.each = function(reverse, cbRule, cbGroup, context) { var i = reverse ? this.rules.length - 1 : 0; var l = reverse ? 0 : this.rules.length - 1; var c = reverse ? -1 : 1; - var next = function() { return reverse ? i >= l : i <= l; }; + var next = function() { + return reverse ? i >= l : i <= l; + }; var stop = false; - for (; next(); i+= c) { + for (; next(); i += c) { if (this.rules[i] instanceof Group) { - if (cbGroup !== undefined) { + if (!!cbGroup) { stop = cbGroup.call(context, this.rules[i]) === false; } } - else { + else if (!!cbRule) { stop = cbRule.call(context, this.rules[i]) === false; } @@ -374,21 +482,21 @@ Group.prototype.each = function(reverse, cbRule, cbGroup, context) { }; /** - * Return true if the group contains a particular Node - * @param {Node} - * @param {boolean,optional} recursive search - * @return {boolean} + * Checks if the group contains a particular Node + * @param {Node} node + * @param {boolean} [recursive=false] + * @returns {boolean} */ -Group.prototype.contains = function(node, deep) { +Group.prototype.contains = function(node, recursive) { if (this.getNodePos(node) !== -1) { return true; } - else if (!deep) { + else if (!recursive) { return false; } else { // the loop will return with false as soon as the Node is found - return !this.each(function(rule) { + return !this.each(function() { return true; }, function(group) { return !group.contains(node, true); @@ -397,11 +505,12 @@ Group.prototype.contains = function(node, deep) { }; -// RULE CLASS -// =============================== /** - * @param {Group} - * @param {jQuery} + * Rule object + * @constructor + * @extends Node + * @param {Group} parent + * @param {jQuery} $el */ var Rule = function(parent, $el) { if (!(this instanceof Rule)) { @@ -413,9 +522,28 @@ var Rule = function(parent, $el) { this._updating_value = false; this._updating_input = false; + /** + * @name filter + * @member {object} + * @memberof Rule + * @instance + */ this.__.filter = null; + + /** + * @name operator + * @member {object} + * @memberof Rule + * @instance + */ this.__.operator = null; - this.__.flags = {}; + + /** + * @name value + * @member {*} + * @memberof Rule + * @instance + */ this.__.value = undefined; }; @@ -424,8 +552,15 @@ Rule.prototype.constructor = Rule; Model.defineModelProperties(Rule, ['filter', 'operator', 'value']); +/** + * Checks if this Node is the root + * @returns {boolean} always false + */ +Rule.prototype.isRoot = function() { + return false; +}; + -// EXPORT -// =============================== +// export QueryBuilder.Group = Group; QueryBuilder.Rule = Rule; diff --git a/src/plugins/bt-checkbox/plugin.js b/src/plugins/bt-checkbox/plugin.js index a35abd0e..fd5257af 100644 --- a/src/plugins/bt-checkbox/plugin.js +++ b/src/plugins/bt-checkbox/plugin.js @@ -1,22 +1,13 @@ -/*! - * jQuery QueryBuilder Awesome Bootstrap Checkbox - * Applies Awesome Bootstrap Checkbox for checkbox and radio inputs. +/** + * Applies Awesome Bootstrap Checkbox for checkbox and radio inputs + * @class BtCheckboxPlugin + * @param {object} [options] + * @param {string} [options.font=glypicons] + * @param {string} [options.color=default] */ - QueryBuilder.define('bt-checkbox', function(options) { if (options.font == 'glyphicons') { - var injectCSS = document.createElement('style'); - injectCSS.innerHTML = '\ -.checkbox input[type=checkbox]:checked + label:after { \ - font-family: "Glyphicons Halflings"; \ - content: "\\e013"; \ -} \ -.checkbox label:after { \ - padding-left: 4px; \ - padding-top: 2px; \ - font-size: 9px; \ -}'; - document.body.appendChild(injectCSS); + this.$el.addClass('bt-checkbox-glypicons'); } this.on('getRuleInput.filter', function(h, rule, name) { diff --git a/src/plugins/bt-checkbox/plugins.scss b/src/plugins/bt-checkbox/plugins.scss new file mode 100644 index 00000000..f2ba2375 --- /dev/null +++ b/src/plugins/bt-checkbox/plugins.scss @@ -0,0 +1,12 @@ +.query-builder.bt-checkbox-glypicons { + .checkbox input[type=checkbox]:checked + label::after { + font-family: 'Glyphicons Halflings'; + content: '\e013'; + } + + .checkbox label::after { + padding-left: 4px; + padding-top: 2px; + font-size: 9px; + } +} diff --git a/src/plugins/bt-selectpicker/plugin.js b/src/plugins/bt-selectpicker/plugin.js index e4ad3be6..8909b425 100644 --- a/src/plugins/bt-selectpicker/plugin.js +++ b/src/plugins/bt-selectpicker/plugin.js @@ -1,16 +1,20 @@ -/*! - * jQuery QueryBuilder Bootstrap Selectpicker - * Applies Bootstrap Select on filters and operators combo-boxes. - */ - /** - * @throws ConfigError + * Applies Bootstrap Select on filters and operators combo-boxes. + * @class BtSelectpickerPlugin + * @param {object} [options] + * @param {string} [options.container=body] + * @param {string} [options.style=btn-inverse btn-xs] + * @param {int|string} [options.width=auto] + * @param {boolean} [options.showIcon=false] + * @throws MissingLibraryError */ QueryBuilder.define('bt-selectpicker', function(options) { if (!$.fn.selectpicker || !$.fn.selectpicker.Constructor) { Utils.error('MissingLibrary', 'Bootstrap Select is required to use "bt-selectpicker" plugin. Get it here: http://silviomoreto.github.io/bootstrap-select'); } + var Selectors = QueryBuilder.selectors; + // init selectpicker this.on('afterCreateRuleFilters', function(e, rule) { rule.$el.find(Selectors.rule_filter).removeClass('form-control').selectpicker(options); diff --git a/src/plugins/bt-tooltip-errors/plugin.js b/src/plugins/bt-tooltip-errors/plugin.js index 0d97c0b9..0da378de 100644 --- a/src/plugins/bt-tooltip-errors/plugin.js +++ b/src/plugins/bt-tooltip-errors/plugin.js @@ -1,10 +1,9 @@ -/*! - * jQuery QueryBuilder Bootstrap Tooltip errors - * Applies Bootstrap Tooltips on validation error messages. - */ - /** - * @throws ConfigError + * Applies Bootstrap Tooltips on validation error messages. + * @class BtTooltipErrorsPlugin + * @param {object} [options] + * @param {string} [options.placement=right] + * @throws MissingLibraryError */ QueryBuilder.define('bt-tooltip-errors', function(options) { if (!$.fn.tooltip || !$.fn.tooltip.Constructor || !$.fn.tooltip.Constructor.prototype.fixTitle) { @@ -16,14 +15,14 @@ QueryBuilder.define('bt-tooltip-errors', function(options) { // add BT Tooltip data this.on('getRuleTemplate.filter getGroupTemplate.filter', function(h) { var $h = $(h.value); - $h.find(Selectors.error_container).attr('data-toggle', 'tooltip'); + $h.find(QueryBuilder.selectors.error_container).attr('data-toggle', 'tooltip'); h.value = $h.prop('outerHTML'); }); // init/refresh tooltip when title changes this.model.on('update', function(e, node, field) { if (field == 'error' && self.settings.display_errors) { - node.$el.find(Selectors.error_container).eq(0) + node.$el.find(QueryBuilder.selectors.error_container).eq(0) .tooltip(options) .tooltip('hide') .tooltip('fixTitle'); diff --git a/src/plugins/change-filters/plugin.js b/src/plugins/change-filters/plugin.js index 27aa6881..f5de6f58 100644 --- a/src/plugins/change-filters/plugin.js +++ b/src/plugins/change-filters/plugin.js @@ -1,24 +1,30 @@ -/*! - * jQuery QueryBuilder Change Filters +/** * Allows to change available filters after plugin initialization. + * @class ChangeFiltersPlugin */ - -QueryBuilder.extend({ +QueryBuilder.extend(/** @lends ChangeFiltersPlugin.prototype */ { /** * Change the filters of the builder + * @param {boolean} [deleteOrphans=false] - delete rules using old filters + * @param {object[]} filters + * @fires ChangeFiltersPlugin#afterSetFilters * @throws ChangeFilterError - * @param {boolean,optional} delete rules using old filters - * @param {object[]} new filters */ - setFilters: function(delete_orphans, filters) { + setFilters: function(deleteOrphans, filters) { var self = this; if (filters === undefined) { - filters = delete_orphans; - delete_orphans = false; + filters = deleteOrphans; + deleteOrphans = false; } filters = this.checkFilters(filters); + + /** + * @event ChangeFiltersPlugin#filter:setFilters + * @param {object[]} filters + * @returns {object[]} + */ filters = this.change('setFilters', filters); var filtersIds = filters.map(function(filter) { @@ -26,7 +32,7 @@ QueryBuilder.extend({ }); // check for orphans - if (!delete_orphans) { + if (!deleteOrphans) { (function checkOrphans(node) { node.each( function(rule) { @@ -45,18 +51,18 @@ QueryBuilder.extend({ // apply on existing DOM (function updateBuilder(node) { node.each(true, - function(rule) { - if (rule.filter && filtersIds.indexOf(rule.filter.id) === -1) { - rule.drop(); - } - else { - self.createRuleFilters(rule); - - rule.$el.find(Selectors.rule_filter).val(rule.filter ? rule.filter.id : '-1'); - self.trigger('afterUpdateRuleFilter', rule); - } - }, - updateBuilder + function(rule) { + if (rule.filter && filtersIds.indexOf(rule.filter.id) === -1) { + rule.drop(); + } + else { + self.createRuleFilters(rule); + + rule.$el.find(QueryBuilder.selectors.rule_filter).val(rule.filter ? rule.filter.id : '-1'); + self.trigger('afterUpdateRuleFilter', rule); + } + }, + updateBuilder ); }(this.model.root)); @@ -66,7 +72,7 @@ QueryBuilder.extend({ this.updateDisabledFilters(); } if (this.settings.plugins['bt-selectpicker']) { - this.$el.find(Selectors.rule_filter).selectpicker('render'); + this.$el.find(QueryBuilder.selectors.rule_filter).selectpicker('render'); } } @@ -80,15 +86,21 @@ QueryBuilder.extend({ } } + /** + * @event ChangeFiltersPlugin#afterSetFilters + * @param {object[]} filters + */ this.trigger('afterSetFilters', filters); }, /** * Adds a new filter to the builder - * @param {object|object[]} the new filter - * @param {mixed,optional} numeric index or '#start' or '#end' + * @param {object|object[]} newFilters + * @param {*} [position=#end] - numeric index or '#start' or '#end' + * @fires ChangeFiltersPlugin#afterSetFilters + * @throws ChangeFilterError */ - addFilter: function(new_filters, position) { + addFilter: function(newFilters, position) { if (position === undefined || position == '#end') { position = this.filters.length; } @@ -96,29 +108,30 @@ QueryBuilder.extend({ position = 0; } - if (!$.isArray(new_filters)) { - new_filters = [new_filters]; + if (!$.isArray(newFilters)) { + newFilters = [newFilters]; } var filters = $.extend(true, [], this.filters); // numeric position if (parseInt(position) == position) { - Array.prototype.splice.apply(filters, [position, 0].concat(new_filters)); + Array.prototype.splice.apply(filters, [position, 0].concat(newFilters)); } else { // after filter by its id if (this.filters.some(function(filter, index) { - if (filter.id == position) { - position = index + 1; - return true; - } - })) { - Array.prototype.splice.apply(filters, [position, 0].concat(new_filters)); + if (filter.id == position) { + position = index + 1; + return true; + } + }) + ) { + Array.prototype.splice.apply(filters, [position, 0].concat(newFilters)); } // defaults to end of list else { - Array.prototype.push.apply(filters, new_filters); + Array.prototype.push.apply(filters, newFilters); } } @@ -127,19 +140,21 @@ QueryBuilder.extend({ /** * Removes a filter from the builder - * @param {string|string[]} the filter id - * @param {boolean,optional} delete rules using old filters + * @param {string|string[]} filterIds + * @param {boolean} [deleteOrphans=false] delete rules using old filters + * @fires ChangeFiltersPlugin#afterSetFilters + * @throws ChangeFilterError */ - removeFilter: function(filter_ids, delete_orphans) { + removeFilter: function(filterIds, deleteOrphans) { var filters = $.extend(true, [], this.filters); - if (typeof filter_ids === 'string') { - filter_ids = [filter_ids]; + if (typeof filterIds === 'string') { + filterIds = [filterIds]; } filters = filters.filter(function(filter) { - return filter_ids.indexOf(filter.id) === -1; + return filterIds.indexOf(filter.id) === -1; }); - this.setFilters(delete_orphans, filters); + this.setFilters(deleteOrphans, filters); } }); diff --git a/src/plugins/filter-description/plugin.js b/src/plugins/filter-description/plugin.js index c87beb97..5cbde11f 100644 --- a/src/plugins/filter-description/plugin.js +++ b/src/plugins/filter-description/plugin.js @@ -1,9 +1,9 @@ -/*! - * jQuery QueryBuilder Filter Description - * Provides three ways to display a description about a filter: inline, Bootsrap Popover or Bootbox. - */ - /** + * Provides three ways to display a description about a filter: inline, Bootsrap Popover or Bootbox. + * @class FilterDescriptionPlugin + * @param {object} [options] + * @param {string} [options.icon=glyphicon glyphicon-info-sign] + * @param {string} [options.mode=popover] - inline, popover or bootbox * @throws ConfigError */ QueryBuilder.define('filter-description', function(options) { @@ -53,7 +53,7 @@ QueryBuilder.define('filter-description', function(options) { else { if ($b.length === 0) { $b = $(''); - $b.prependTo(rule.$el.find(Selectors.rule_actions)); + $b.prependTo(rule.$el.find(QueryBuilder.selectors.rule_actions)); $b.popover({ placement: 'left', @@ -95,7 +95,7 @@ QueryBuilder.define('filter-description', function(options) { else { if ($b.length === 0) { $b = $(''); - $b.prependTo(rule.$el.find(Selectors.rule_actions)); + $b.prependTo(rule.$el.find(QueryBuilder.selectors.rule_actions)); $b.on('click', function() { bootbox.alert($b.data('description')); @@ -111,7 +111,7 @@ QueryBuilder.define('filter-description', function(options) { mode: 'popover' }); -QueryBuilder.extend({ +QueryBuilder.extend(/** @lends FilterDescriptionPlugin.prototype */ { /** * Returns the description of a filter for a particular rule (if present) * @param {object} filter diff --git a/src/plugins/invert/plugin.js b/src/plugins/invert/plugin.js index a4818e3e..1b53fdb2 100644 --- a/src/plugins/invert/plugin.js +++ b/src/plugins/invert/plugin.js @@ -1,6 +1,12 @@ -/*! - * jQuery QueryBuilder Invert +/** * Allows to invert a rule operator, a group condition or the entire builder. + * @class InvertPlugin + * @param {object} [options] + * @param {string} [options.icon='glyphicon glyphicon-random] + * @param {boolean} [options.recursive=true] + * @param {boolean} [options.invert_rules=true] + * @param {boolean} [options.display_rules_button=false] + * @param {boolean} [options.silent_fail=false] */ QueryBuilder.defaults({ @@ -35,6 +41,7 @@ QueryBuilder.defaults({ QueryBuilder.define('invert', function(options) { var self = this; + var Selectors = QueryBuilder.selectors; /** * Bind events @@ -42,13 +49,13 @@ QueryBuilder.define('invert', function(options) { this.on('afterInit', function() { self.$el.on('click.queryBuilder', '[data-invert=group]', function() { var $group = $(this).closest(Selectors.group_container); - self.invert(Model($group), options); + self.invert(self.getModel($group), options); }); if (options.display_rules_button && options.invert_rules) { self.$el.on('click.queryBuilder', '[data-invert=rule]', function() { var $rule = $(this).closest(Selectors.rule_container); - self.invert(Model($rule), options); + self.invert(self.getModel($rule), options); }); } }); @@ -77,12 +84,13 @@ QueryBuilder.define('invert', function(options) { silent_fail: false }); -QueryBuilder.extend({ +QueryBuilder.extend(/** @lends InvertPlugin.prototype */ { /** * Invert a Group, a Rule or the whole builder + * @param {Node} [node] + * @param {object} [options] {@link InvertPlugin} + * @fires InvertPlugin#afterInvert * @throws InvertConditionError, InvertOperatorError - * @param {Node,optional} - * @param {object,optional} */ invert: function(node, options) { if (!(node instanceof Node)) { @@ -135,6 +143,11 @@ QueryBuilder.extend({ } if (options.trigger) { + /** + * @event InvertPlugin#afterInvert + * @param {Node} node + * @param {object} options + */ this.trigger('afterInvert', node, options); } } diff --git a/src/plugins/mongodb-support/plugin.js b/src/plugins/mongodb-support/plugin.js index bf98ab4e..b9470992 100644 --- a/src/plugins/mongodb-support/plugin.js +++ b/src/plugins/mongodb-support/plugin.js @@ -1,10 +1,8 @@ -/*! - * jQuery QueryBuilder MongoDB Support +/** * Allows to export rules as a MongoDB find object as well as populating the builder from a MongoDB object. + * @class MongoDbSupportPlugin */ -// DEFAULT CONFIG -// =============================== QueryBuilder.defaults({ mongoOperators: { // @formatter:off @@ -66,26 +64,42 @@ QueryBuilder.defaults({ return { 'val': v, 'op': 'contains' }; } }, - between: function(v) { return { 'val': [v.$gte, v.$lte], 'op': 'between' }; }, - not_between: function(v) { return { 'val': [v.$lt, v.$gt], 'op': 'not_between' }; }, - $in: function(v) { return { 'val': v.$in, 'op': 'in' }; }, - $nin: function(v) { return { 'val': v.$nin, 'op': 'not_in' }; }, - $lt: function(v) { return { 'val': v.$lt, 'op': 'less' }; }, - $lte: function(v) { return { 'val': v.$lte, 'op': 'less_or_equal' }; }, - $gt: function(v) { return { 'val': v.$gt, 'op': 'greater' }; }, - $gte: function(v) { return { 'val': v.$gte, 'op': 'greater_or_equal' }; } + between: function(v) { + return { 'val': [v.$gte, v.$lte], 'op': 'between' }; + }, + not_between: function(v) { + return { 'val': [v.$lt, v.$gt], 'op': 'not_between' }; + }, + $in: function(v) { + return { 'val': v.$in, 'op': 'in' }; + }, + $nin: function(v) { + return { 'val': v.$nin, 'op': 'not_in' }; + }, + $lt: function(v) { + return { 'val': v.$lt, 'op': 'less' }; + }, + $lte: function(v) { + return { 'val': v.$lte, 'op': 'less_or_equal' }; + }, + $gt: function(v) { + return { 'val': v.$gt, 'op': 'greater' }; + }, + $gte: function(v) { + return { 'val': v.$gte, 'op': 'greater_or_equal' }; + } } }); - -// PUBLIC METHODS -// =============================== -QueryBuilder.extend({ +QueryBuilder.extend(/** @lends MongoDbSupportPlugin.prototype */ { /** - * Get rules as MongoDB query + * Returns rules as a MongoDB query + * @param {object} [data] - current rules by default + * @returns {object} + * @fires MongoDbSupportPlugin#filter:getMongoDBField + * @fires MongoDbSupportPlugin#filter:ruleToMongo + * @fires MongoDbSupportPlugin#filter:groupToMongo * @throws UndefinedMongoConditionError, UndefinedMongoOperatorError - * @param data {object} (optional) rules - * @return {object} */ getMongo: function(data) { data = (data === undefined) ? this.getRules() : data; @@ -129,41 +143,81 @@ QueryBuilder.extend({ }); } - var ruleExpression = {}; + /** + * @event MongoDbSupportPlugin#filter:getMongoDBField + * @param {string} field + * @param {Rule} rule + * @returns {string} + */ var field = self.change('getMongoDBField', rule.field, rule); + + var ruleExpression = {}; ruleExpression[field] = mdb.call(self, values); + + /** + * @event MongoDbSupportPlugin#filter:ruleToMongo + * @param {object} expression + * @param {Rule} rule + * @param {*} value + * @param {function} valueWrapper + * @returns {object} + */ parts.push(self.change('ruleToMongo', ruleExpression, rule, values, mdb)); } }); var groupExpression = {}; groupExpression['$' + group.condition.toLowerCase()] = parts; + + /** + * @event MongoDbSupportPlugin#filter:groupToMongo + * @param {object} expression + * @param {Group} group + * @returns {object} + */ return self.change('groupToMongo', groupExpression, group); }(data)); }, /** - * Convert MongoDB object to rules + * Converts a MongoDB query to rules + * @param {object} query + * @returns {object} + * @fires MongoDbSupportPlugin#filter:parseMongoNode + * @fires MongoDbSupportPlugin#filter:getMongoDBFieldID + * @fires MongoDbSupportPlugin#filter:mongoToRule + * @fires MongoDbSupportPlugin#filter:mongoToGroup * @throws MongoParseError, UndefinedMongoConditionError, UndefinedMongoOperatorError - * @param data {object} query object - * @return {object} */ - getRulesFromMongo: function(data) { - if (data === undefined || data === null) { + getRulesFromMongo: function(query) { + if (query === undefined || query === null) { return null; } var self = this; - // allow plugins to manually parse or handle special cases - data = self.change('parseMongoNode', data); + /** + * Allow plugins to manually parse or handle special cases + * @event MongoDbSupportPlugin#filter:parseMongoNode + * @param {object} expression + * @returns {object} expression, rule or group + */ + query = self.change('parseMongoNode', query); // a plugin returned a group - if ('rules' in data && 'condition' in data) { - return data; + if ('rules' in query && 'condition' in query) { + return query; + } + + // a plugin returned a rule + if ('id' in query && 'operator' in query && 'value' in query) { + return { + condition: this.settings.default_condition, + rules: [query] + }; } - var key = andOr(data); + var key = andOr(query); if (!key) { Utils.error('MongoParse', 'Invalid MongoDB query format'); } @@ -208,8 +262,22 @@ QueryBuilder.extend({ var opVal = mdbrl.call(self, value); + /** + * @event MongoDbSupportPlugin#filter:getMongoDBFieldID + * @param {string} field + * @param {*} value + * @returns {string} + */ + var id = self.change('getMongoDBFieldID', field, value); + + /** + * @event MongoDbSupportPlugin#filter:mongoToRule + * @param {object} rule + * @param {object} expression + * @returns {object} + */ var rule = self.change('mongoToRule', { - id: self.change('getMongoDBFieldID', field, value), + id: id, field: field, operator: opVal.op, value: opVal.val @@ -219,29 +287,36 @@ QueryBuilder.extend({ } }); + /** + * @event MongoDbSupportPlugin#filter:mongoToGroup + * @param {object} group + * @param {object} {expression} + * @returns {object} + */ return self.change('mongoToGroup', { condition: topKey.replace('$', '').toUpperCase(), rules: parts }, data); - }(data, key)); + }(query, key)); }, /** - * Set rules from MongoDB object - * @param data {object} + * Sets rules a from MongoDB query + * @see MongoDbSupportPlugin#getRulesFromMongo */ - setRulesFromMongo: function(data) { - this.setRules(this.getRulesFromMongo(data)); + setRulesFromMongo: function(query) { + this.setRules(this.getRulesFromMongo(query)); } }); /** - * Find which operator is used in a MongoDB sub-object - * @param {mixed} value - * @param {string} field - * @return {string|undefined} + * Finds which operator is used in a MongoDB sub-object + * @param {*} value + * @returns {string|undefined} + * @memberof MongoDbSupportPlugin + * @private */ -function determineMongoOperator(value, field) { +function determineMongoOperator(value) { if (value !== null && typeof value == 'object') { var subkeys = Object.keys(value); @@ -272,6 +347,8 @@ function determineMongoOperator(value, field) { * Returns the key corresponding to "$or" or "$and" * @param {object} data * @returns {string} + * @memberof MongoDbSupportPlugin + * @private */ function andOr(data) { var keys = Object.keys(data); diff --git a/src/plugins/not-group/plugin.js b/src/plugins/not-group/plugin.js index 3f7588a4..8ab3f4b4 100644 --- a/src/plugins/not-group/plugin.js +++ b/src/plugins/not-group/plugin.js @@ -1,12 +1,22 @@ -/*! - * jQuery QueryBuilder Not +/** * Adds a "Not" checkbox in front of group conditions. + * @class NotGroupPlugin + * @param {object} [options] + * @param {string} [options.icon_checked=glyphicon glyphicon-checked] + * @param {string} [options.icon_unchecked=glyphicon glyphicon-unchecked] */ -Selectors.group_not = Selectors.group_header + ' [data-not=group]'; - +/** + * From {@link NotGroupPlugin} + * @name not + * @member {boolean} + * @memberof Group + * @instance + */ Model.defineModelProperties(Group, ['not']); +QueryBuilder.selectors.group_not = QueryBuilder.selectors.group_header + ' [data-not=group]'; + QueryBuilder.define('not-group', function(options) { var self = this; @@ -15,8 +25,8 @@ QueryBuilder.define('not-group', function(options) { */ this.on('afterInit', function() { self.$el.on('click.queryBuilder', '[data-not=group]', function() { - var $group = $(this).closest(Selectors.group_container); - var group = Model($group); + var $group = $(this).closest(QueryBuilder.selectors.group_container); + var group = self.getModel($group); group.not = !group.not; }); @@ -39,7 +49,7 @@ QueryBuilder.define('not-group', function(options) { */ this.on('getGroupTemplate.filter', function(h, level) { var $h = $(h.value); - $h.find(Selectors.condition_container).prepend( + $h.find(QueryBuilder.selectors.condition_container).prepend( '' @@ -120,17 +130,23 @@ QueryBuilder.define('not-group', function(options) { icon_checked: 'glyphicon glyphicon-check' }); -QueryBuilder.extend({ +QueryBuilder.extend(/** @lends NotGroupPlugin.prototype */ { /** - * Apply the "not" property to the DOM - * @param group + * Performs actions when a group's not changes + * @param {Group} group + * @fires NotGroupPlugin#afterUpdateGroupNot + * @private */ updateGroupNot: function(group) { var options = this.plugins['not-group']; - group.$el.find('>' + Selectors.group_not) + group.$el.find('>' + QueryBuilder.selectors.group_not) .toggleClass('active', group.not) .find('i').attr('class', group.not ? options.icon_checked : options.icon_unchecked); + /** + * @event NotGroupPlugin#afterUpdateGroupNot + * @param {Group} group + */ this.trigger('afterUpdateGroupNot', group); } }); diff --git a/src/plugins/sortable/plugin.js b/src/plugins/sortable/plugin.js index ec94fe81..cbcde92c 100644 --- a/src/plugins/sortable/plugin.js +++ b/src/plugins/sortable/plugin.js @@ -1,10 +1,15 @@ -/*! - * jQuery QueryBuilder Sortable +/** * Enables drag & drop sort of rules. + * @class SortablePlugin + * @param {object} [options] + * @param {boolean} [options.inherit_no_drop=true] + * @param {boolean} [options.inherit_no_sortable=true] + * @param {string} [options.icon=glyphicon glyphicon-sort] + * @throws MissingLibraryError, ConfigError */ -Selectors.rule_and_group_containers = Selectors.rule_container + ', ' + Selectors.group_container; -Selectors.drag_handle = '.drag-handle'; +QueryBuilder.selectors.rule_and_group_containers = QueryBuilder.selectors.rule_container + ', ' + QueryBuilder.selectors.group_container; +QueryBuilder.selectors.drag_handle = '.drag-handle'; QueryBuilder.defaults({ default_rule_flags: { @@ -62,11 +67,11 @@ QueryBuilder.define('sortable', function(options) { */ if (!node.flags.no_sortable) { interact(node.$el[0]) - .allowFrom(Selectors.drag_handle) + .allowFrom(QueryBuilder.selectors.drag_handle) .draggable({ onstart: function(event) { // get model of dragged element - src = Model(event.target); + src = self.getModel(event.target); // create ghost ghost = src.$el.clone() @@ -100,6 +105,10 @@ QueryBuilder.define('sortable', function(options) { // show element src.$el.show(); + /** + * @event SortablePlugin#afterMove + * @param {Node} node + */ self.trigger('afterMove', src); } }); @@ -111,7 +120,7 @@ QueryBuilder.define('sortable', function(options) { */ interact(node.$el[0]) .dropzone({ - accept: Selectors.rule_and_group_containers, + accept: QueryBuilder.selectors.rule_and_group_containers, ondragenter: function(event) { moveSortableToTarget(placeholder, $(event.target)); }, @@ -124,9 +133,9 @@ QueryBuilder.define('sortable', function(options) { * Configure drop on group headers */ if (node instanceof Group) { - interact(node.$el.find(Selectors.group_header)[0]) + interact(node.$el.find(QueryBuilder.selectors.group_header)[0]) .dropzone({ - accept: Selectors.rule_and_group_containers, + accept: QueryBuilder.selectors.rule_and_group_containers, ondragenter: function(event) { moveSortableToTarget(placeholder, $(event.target)); }, @@ -146,7 +155,7 @@ QueryBuilder.define('sortable', function(options) { interact(node.$el[0]).unset(); if (node instanceof Group) { - interact(node.$el.find(Selectors.group_header)[0]).unset(); + interact(node.$el.find(QueryBuilder.selectors.group_header)[0]).unset(); } } }); @@ -166,14 +175,14 @@ QueryBuilder.define('sortable', function(options) { this.on('getGroupTemplate.filter', function(h, level) { if (level > 1) { var $h = $(h.value); - $h.find(Selectors.condition_container).after('
'); + $h.find(QueryBuilder.selectors.condition_container).after('
'); h.value = $h.prop('outerHTML'); } }); this.on('getRuleTemplate.filter', function(h) { var $h = $(h.value); - $h.find(Selectors.rule_header).after('
'); + $h.find(QueryBuilder.selectors.rule_header).after('
'); h.value = $h.prop('outerHTML'); }); }, { @@ -183,13 +192,16 @@ QueryBuilder.define('sortable', function(options) { }); /** - * Move an element (placeholder or actual object) depending on active target + * Moves an element (placeholder or actual object) depending on active target * @param {Node} node * @param {jQuery} target * @param {QueryBuilder} [builder] + * @memberof SortablePlugin + * @private */ function moveSortableToTarget(node, target, builder) { var parent, method; + var Selectors = QueryBuilder.selectors; // on rule parent = target.closest(Selectors.rule_container); @@ -215,7 +227,7 @@ function moveSortableToTarget(node, target, builder) { } if (method) { - node[method](Model(parent)); + node[method](builder.getModel(parent)); // refresh radio value if (builder && node instanceof Rule) { diff --git a/src/plugins/sql-support/plugin.js b/src/plugins/sql-support/plugin.js index 6413cf39..70b4135f 100644 --- a/src/plugins/sql-support/plugin.js +++ b/src/plugins/sql-support/plugin.js @@ -1,33 +1,31 @@ -/*! - * jQuery QueryBuilder SQL Support +/** * Allows to export rules as a SQL WHERE statement as well as populating the builder from an SQL query. + * @class SqlSupportPlugin */ -// DEFAULT CONFIG -// =============================== QueryBuilder.defaults({ /* operators for internal -> SQL conversion */ sqlOperators: { - equal: { op: '= ?' }, - not_equal: { op: '!= ?' }, - in: { op: 'IN(?)', sep: ', ' }, - not_in: { op: 'NOT IN(?)', sep: ', ' }, - less: { op: '< ?' }, - less_or_equal: { op: '<= ?' }, - greater: { op: '> ?' }, + equal: { op: '= ?' }, + not_equal: { op: '!= ?' }, + in: { op: 'IN(?)', sep: ', ' }, + not_in: { op: 'NOT IN(?)', sep: ', ' }, + less: { op: '< ?' }, + less_or_equal: { op: '<= ?' }, + greater: { op: '> ?' }, greater_or_equal: { op: '>= ?' }, - between: { op: 'BETWEEN ?', sep: ' AND ' }, - not_between: { op: 'NOT BETWEEN ?', sep: ' AND ' }, - begins_with: { op: 'LIKE(?)', mod: '{0}%' }, - not_begins_with: { op: 'NOT LIKE(?)', mod: '{0}%' }, - contains: { op: 'LIKE(?)', mod: '%{0}%' }, - not_contains: { op: 'NOT LIKE(?)', mod: '%{0}%' }, - ends_with: { op: 'LIKE(?)', mod: '%{0}' }, - not_ends_with: { op: 'NOT LIKE(?)', mod: '%{0}' }, - is_empty: { op: '= \'\'' }, - is_not_empty: { op: '!= \'\'' }, - is_null: { op: 'IS NULL' }, - is_not_null: { op: 'IS NOT NULL' } + between: { op: 'BETWEEN ?', sep: ' AND ' }, + not_between: { op: 'NOT BETWEEN ?', sep: ' AND ' }, + begins_with: { op: 'LIKE(?)', mod: '{0}%' }, + not_begins_with: { op: 'NOT LIKE(?)', mod: '{0}%' }, + contains: { op: 'LIKE(?)', mod: '%{0}%' }, + not_contains: { op: 'NOT LIKE(?)', mod: '%{0}%' }, + ends_with: { op: 'LIKE(?)', mod: '%{0}' }, + not_ends_with: { op: 'NOT LIKE(?)', mod: '%{0}' }, + is_empty: { op: '= \'\'' }, + is_not_empty: { op: '!= \'\'' }, + is_null: { op: 'IS NULL' }, + is_not_null: { op: 'IS NOT NULL' } }, /* operators for SQL -> internal conversion */ @@ -90,14 +88,30 @@ QueryBuilder.defaults({ Utils.error('SQLParse', 'Invalid value for NOT LIKE operator "{0}"', v); } }, - 'IN': function(v) { return { val: v, op: 'in' }; }, - 'NOT IN': function(v) { return { val: v, op: 'not_in' }; }, - '<': function(v) { return { val: v, op: 'less' }; }, - '<=': function(v) { return { val: v, op: 'less_or_equal' }; }, - '>': function(v) { return { val: v, op: 'greater' }; }, - '>=': function(v) { return { val: v, op: 'greater_or_equal' }; }, - 'BETWEEN': function(v) { return { val: v, op: 'between' }; }, - 'NOT BETWEEN': function(v) { return { val: v, op: 'not_between' }; }, + 'IN': function(v) { + return { val: v, op: 'in' }; + }, + 'NOT IN': function(v) { + return { val: v, op: 'not_in' }; + }, + '<': function(v) { + return { val: v, op: 'less' }; + }, + '<=': function(v) { + return { val: v, op: 'less_or_equal' }; + }, + '>': function(v) { + return { val: v, op: 'greater' }; + }, + '>=': function(v) { + return { val: v, op: 'greater_or_equal' }; + }, + 'BETWEEN': function(v) { + return { val: v, op: 'between' }; + }, + 'NOT BETWEEN': function(v) { + return { val: v, op: 'not_between' }; + }, 'IS': function(v) { if (v !== null) { Utils.error('SQLParse', 'Invalid value for IS operator'); @@ -205,21 +219,27 @@ QueryBuilder.defaults({ } }); +/** + * @typedef {object} SqlSupportPlugin#SqlQuery + * @property {string} sql + * @property {object} params + */ -// PUBLIC METHODS -// =============================== -QueryBuilder.extend({ +QueryBuilder.extend(/** @lends SqlSupportPlugin.prototype */ { /** - * Get rules as SQL query + * Returns rules as a SQL query + * @param {boolean|string} [stmt] - use prepared statements: false, 'question_mark', 'numbered', 'numbered(@)', 'named', 'named(@)' + * @param {boolean} [nl=false] output with new lines + * @param {object} [data] - current rules by default + * @returns {SqlSupportPlugin#SqlQuery} + * @fires SqlSupportPlugin#filter:getSQLField + * @fires SqlSupportPlugin#filter:ruleToSQL + * @fires SqlSupportPlugin#filter:groupToSQL * @throws UndefinedSQLConditionError, UndefinedSQLOperatorError - * @param stmt {boolean|string} use prepared statements - false, 'question_mark', 'numbered', 'numbered(@)', 'named', 'named(@)' - * @param nl {bool} output with new lines - * @param data {object} (optional) rules - * @return {object} */ getSQL: function(stmt, nl, data) { data = (data === undefined) ? this.getRules() : data; - nl = (nl === true) ? '\n' : ' '; + nl = !!nl ? '\n' : ' '; if (stmt === true) stmt = 'question_mark'; if (typeof stmt == 'string') { @@ -263,7 +283,7 @@ QueryBuilder.extend({ rule.value.forEach(function(v, i) { if (i > 0) { - value+= sql.sep; + value += sql.sep; } if (rule.type == 'integer' || rule.type == 'double' || rule.type == 'boolean') { @@ -278,14 +298,14 @@ QueryBuilder.extend({ } if (stmt) { - value+= stmt.add(rule, v); + value += stmt.add(rule, v); } else { if (typeof v == 'string') { v = '\'' + v + '\''; } - value+= v; + value += v; } }); } @@ -294,12 +314,36 @@ QueryBuilder.extend({ return sql.op.replace(/\?/, v); }; - var ruleExpression = self.change('getSQLField', rule.field, rule) + ' ' + sqlFn(value); + /** + * @event SqlSupportPlugin#filter:getSQLField + * @param {string} field + * @param {Rule} rule + * @returns {string} + */ + var field = self.change('getSQLField', rule.field, rule); + + var ruleExpression = field + ' ' + sqlFn(value); + + /** + * @event SqlSupportPlugin#filter:ruleToSQL + * @param {string} expression + * @param {Rule} rule + * @param {*} value + * @param {function} valueWrapper + * @returns {string} + */ parts.push(self.change('ruleToSQL', ruleExpression, rule, value, sqlFn)); } }); var groupExpression = parts.join(' ' + group.condition + nl); + + /** + * @event SqlSupportPlugin#filter:groupToSQL + * @param {string} expression + * @param {Group} group + * @returns {string} + */ return self.change('groupToSQL', groupExpression, group); }(data)); @@ -317,56 +361,73 @@ QueryBuilder.extend({ }, /** - * Convert SQL to rules - * @throws ConfigError, SQLParseError, UndefinedSQLOperatorError - * @param data {object} query object - * @param stmt {boolean|string} use prepared statements - false, 'question_mark', 'numbered', 'numbered(@)', 'named', 'named(@)' - * @return {object} + * Convert a SQL query to rules + * @param {string|SqlSupportPlugin#SqlQuery} query + * @param {boolean|string} stmt + * @returns {object} + * @fires SqlSupportPlugin#filter:parseSQLNode + * @fires SqlSupportPlugin#filter:getSQLFieldID + * @fires SqlSupportPlugin#filter:sqlToRule + * @fires SqlSupportPlugin#filter:sqlToGroup + * @throws MissingLibraryError, SQLParseError, UndefinedSQLOperatorError */ - getRulesFromSQL: function(data, stmt) { + getRulesFromSQL: function(query, stmt) { if (!('SQLParser' in window)) { Utils.error('MissingLibrary', 'SQLParser is required to parse SQL queries. Get it here https://github.com/mistic100/sql-parser'); } var self = this; - if (typeof data == 'string') { - data = { sql: data }; + if (typeof query == 'string') { + query = { sql: query }; } if (stmt === true) stmt = 'question_mark'; if (typeof stmt == 'string') { var config = getStmtConfig(stmt); - stmt = this.settings.sqlRuleStatement[config[1]](data.params, config[2]); + stmt = this.settings.sqlRuleStatement[config[1]](query.params, config[2]); } if (stmt) { - data.sql = stmt.esc(data.sql); + query.sql = stmt.esc(query.sql); } - if (data.sql.toUpperCase().indexOf('SELECT') !== 0) { - data.sql = 'SELECT * FROM table WHERE ' + data.sql; + if (query.sql.toUpperCase().indexOf('SELECT') !== 0) { + query.sql = 'SELECT * FROM table WHERE ' + query.sql; } - var parsed = SQLParser.parse(data.sql); + var parsed = SQLParser.parse(query.sql); if (!parsed.where) { Utils.error('SQLParse', 'No WHERE clause found'); } - // allow plugins to manually parse or handle special cases - data = self.change('parseSQLNode', parsed.where.conditions); + /** + * Allow plugins to manually parse or handle special cases + * @event SqlSupportPlugin#filter:parseSQLNode + * @param {object} AST + * @returns {object} tree, rule or group + */ + query = self.change('parseSQLNode', parsed.where.conditions); // a plugin returned a group - if ('rules' in data && 'condition' in data) { - return data; + if ('rules' in query && 'condition' in query) { + return query; + } + + // a plugin returned a rule + if ('id' in query && 'operator' in query && 'value' in query) { + return { + condition: this.settings.default_condition, + rules: [query] + }; } // create root group var out = self.change('sqlToGroup', { condition: this.settings.default_condition, rules: [] - }, data); + }, query); // keep track of current group var curr = out; @@ -396,6 +457,12 @@ QueryBuilder.extend({ if (['AND', 'OR'].indexOf(data.operation.toUpperCase()) !== -1) { // create a sub-group if the condition is not the same and it's not the first level if (i > 0 && curr.condition != data.operation.toUpperCase()) { + /** + * @event SqlSupportPlugin#filter:sqlToGroup + * @param {object} group + * @param {object} AST + * @returns {object} + */ var group = self.change('sqlToGroup', { condition: self.settings.default_condition, rules: [] @@ -456,8 +523,22 @@ QueryBuilder.extend({ var opVal = sqlrl.call(this, value, data.operation); var field = data.left.values.join('.'); + /** + * @event SqlSupportPlugin#filter:getSQLFieldID + * @param {string} field + * @param {*} value + * @returns {string} + */ + var id = self.change('getSQLFieldID', field, value); + + /** + * @event SqlSupportPlugin#filter:sqlToRule + * @param {object} rule + * @param {object} AST + * @retunrs {object} + */ var rule = self.change('sqlToRule', { - id: self.change('getSQLFieldID', field, value), + id: id, field: field, operator: opVal.op, value: opVal.val @@ -465,21 +546,27 @@ QueryBuilder.extend({ curr.rules.push(rule); } - }(data, 0)); + }(query, 0)); return out; }, /** - * Set rules from SQL - * @param data {object} - * @param stmt {boolean|string} + * Sets the rules from a SQL query + * @see SqlSupportPlugin#getRulesFromSQL */ - setRulesFromSQL: function(data, stmt) { - this.setRules(this.getRulesFromSQL(data, stmt)); + setRulesFromSQL: function(query, stmt) { + this.setRules(this.getRulesFromSQL(query, stmt)); } }); +/** + * Parses the statement configuration + * @param {string} stmt + * @returns {Array} null, mode, option + * @memberof SqlSupportPlugin + * @private + */ function getStmtConfig(stmt) { var config = stmt.match(/(question_mark|numbered|named)(?:\((.)\))?/); if (!config) config = [null, 'question_mark', undefined]; diff --git a/src/plugins/unique-filter/plugin.js b/src/plugins/unique-filter/plugin.js index aee31b7c..7a2d6c10 100644 --- a/src/plugins/unique-filter/plugin.js +++ b/src/plugins/unique-filter/plugin.js @@ -1,8 +1,7 @@ -/*! - * jQuery QueryBuilder Unique Filter +/** * Allows to define some filters as "unique": ie which can be used for only one rule, globally or in the same group. + * @class UniqueFilterPlugin */ - QueryBuilder.define('unique-filter', function() { this.status.used_filters = {}; @@ -30,17 +29,18 @@ QueryBuilder.define('unique-filter', function() { }); if (!found) { - Utils.error('UniqueFilter', 'No more non-unique filters available'); + Utils.error(false, 'UniqueFilter', 'No more non-unique filters available'); e.value = undefined; } } }); }); -QueryBuilder.extend({ +QueryBuilder.extend(/** @lends UniqueFilterPlugin.prototype*/ { /** - * Update the list of used filters - * @param [e] + * Updates the list of used filters + * @param {$.Event} [e] + * @private */ updateDisabledFilters: function(e) { var self = e ? e.builder : this; @@ -72,7 +72,8 @@ QueryBuilder.extend({ /** * Clear the list of used filters - * @param [e] + * @param {$.Event} [e] + * @private */ clearDisabledFilters: function(e) { var self = e ? e.builder : this; @@ -84,23 +85,24 @@ QueryBuilder.extend({ /** * Disabled filters depending on the list of used ones - * @param [e] + * @param {$.Event} [e] + * @private */ applyDisabledFilters: function(e) { var self = e ? e.builder : this; // re-enable everything - self.$el.find(Selectors.filter_container + ' option').prop('disabled', false); + self.$el.find(QueryBuilder.selectors.filter_container + ' option').prop('disabled', false); // disable some $.each(self.status.used_filters, function(filterId, groups) { if (groups.length === 0) { - self.$el.find(Selectors.filter_container + ' option[value="' + filterId + '"]:not(:selected)').prop('disabled', true); + self.$el.find(QueryBuilder.selectors.filter_container + ' option[value="' + filterId + '"]:not(:selected)').prop('disabled', true); } else { groups.forEach(function(group) { group.each(function(rule) { - rule.$el.find(Selectors.filter_container + ' option[value="' + filterId + '"]:not(:selected)').prop('disabled', true); + rule.$el.find(QueryBuilder.selectors.filter_container + ' option[value="' + filterId + '"]:not(:selected)').prop('disabled', true); }); }); } @@ -108,7 +110,7 @@ QueryBuilder.extend({ // update Selectpicker if (self.settings.plugins && self.settings.plugins['bt-selectpicker']) { - self.$el.find(Selectors.rule_filter).selectpicker('render'); + self.$el.find(QueryBuilder.selectors.rule_filter).selectpicker('render'); } } }); diff --git a/src/public.js b/src/public.js index a2c1325f..2533be1e 100644 --- a/src/public.js +++ b/src/public.js @@ -1,7 +1,11 @@ /** - * Destroy the plugin + * Destroys the builder + * @fires QueryBuilder#beforeDestroy */ QueryBuilder.prototype.destroy = function() { + /** + * @event QueryBuilder#beforeDestroy + */ this.trigger('beforeDestroy'); if (this.status.generated_id) { @@ -20,10 +24,19 @@ QueryBuilder.prototype.destroy = function() { }; /** - * Reset the plugin + * Clear all rules and resets the root group + * @fires QueryBuilder#beforeReset + * @fires QueryBuilder#afterReset */ QueryBuilder.prototype.reset = function() { - this.trigger('beforeReset'); + /** + * Preventable + * @event QueryBuilder#beforeReset + */ + var e = this.trigger('beforeReset'); + if (e.isDefaultPrevented()) { + return; + } this.status.group_id = 1; this.status.rule_id = 0; @@ -32,14 +45,26 @@ QueryBuilder.prototype.reset = function() { this.addRule(this.model.root); + /** + * @event QueryBuilder#afterReset + */ this.trigger('afterReset'); }; /** - * Clear the plugin + * Clears all rules and removes the root group + * @fires QueryBuilder#beforeClear + * @fires QueryBuilder#afterClear */ QueryBuilder.prototype.clear = function() { - this.trigger('beforeClear'); + /** + * Preventable + * @event QueryBuilder#beforeClear + */ + var e = this.trigger('beforeClear'); + if (e.isDefaultPrevented()) { + return; + } this.status.group_id = 0; this.status.rule_id = 0; @@ -49,13 +74,16 @@ QueryBuilder.prototype.clear = function() { this.model.root = null; } + /** + * @event QueryBuilder#afterClear + */ this.trigger('afterClear'); }; /** - * Modify the builder configuration + * Modifies the builder configuration.
* Only options defined in QueryBuilder.modifiable_options are modifiable - * @param {object} + * @param {object} options */ QueryBuilder.prototype.setOptions = function(options) { $.each(options, function(opt, value) { @@ -66,19 +94,28 @@ QueryBuilder.prototype.setOptions = function(options) { }; /** - * Return the model associated to a DOM object, or root model - * @param {jQuery,optional} - * @return {Node} + * Returns the model associated to a DOM object, or the root model + * @param {jQuery} [target] + * @returns {Node} */ QueryBuilder.prototype.getModel = function(target) { - return !target ? this.model.root : Model(target); + if (!target) { + return this.model.root; + } + else if (target instanceof Node) { + return target; + } + else { + return $(target).data('queryBuilderModel'); + } }; /** - * Validate the whole builder - * @param {object} options - * - skip_empty: false[default] | true(skips validating rules that have no filter selected) - * @return {boolean} + * Validates the whole builder + * @param {object} [options] + * @param {boolean} [options.skip_empty=false] - skips validating rules that have no filter selected + * @returns {boolean} + * @fires QueryBuilder#filter:validate */ QueryBuilder.prototype.validate = function(options) { options = $.extend({ @@ -147,16 +184,24 @@ QueryBuilder.prototype.validate = function(options) { }(this.model.root)); + /** + * @event QueryBuilder#filter:validate + * @param {boolean} valid + * @returns {boolean} + */ return this.change('validate', valid); }; /** - * Get an object representing current rules - * @param {object} options - * - get_flags: false[default] | true(only changes from default flags) | 'all' - * - allow_invalid: false[default] | true(returns rules even if they are invalid) - * - skip_empty: false[default] | true(remove rules that have no filter selected) - * @return {object} + * Gets an object representing current rules + * @param {object} [options] + * @param {boolean|string} [options.get_flags=false] - export flags, true: only changes from default flags or 'all' + * @param {boolean} [options.allow_invalid=false] - returns rules even if they are invalid + * @param {boolean} [options.skip_empty=false] - remove rules that have no filter selected + * @returns {object} + * @fires QueryBuilder#filter:ruleToJson + * @fires QueryBuilder#filter:groupToJson + * @fires QueryBuilder#filter:getRules */ QueryBuilder.prototype.getRules = function(options) { options = $.extend({ @@ -219,6 +264,12 @@ QueryBuilder.prototype.getRules = function(options) { } } + /** + * @event QueryBuilder#filter:ruleToJson + * @param {object} json + * @param {Rule} rule + * @returns {object} + */ groupData.rules.push(self.change('ruleToJson', ruleData, rule)); }, function(model) { @@ -228,21 +279,36 @@ QueryBuilder.prototype.getRules = function(options) { } }, this); + /** + * @event QueryBuilder#filter:groupToJson + * @param {object} json + * @param {Group} group + * @returns {object} + */ return self.change('groupToJson', groupData, group); }(this.model.root)); out.valid = valid; + /** + * @avant QueryBuilder#filter:getRules + * @param {object} json + * @returns {object} + */ return this.change('getRules', out); }; /** - * Set rules from object + * Sets rules from object + * @param {object} data + * @param {object} [options] + * @param {boolean} [options.allow_invalid=false] - silent-fail if the data are invalid * @throws RulesError, UndefinedConditionError - * @param data {object} - * @param {object} options - * - allow_invalid: false[default] | true(silent-fail if the data are invalid) + * @fires QueryBuilder#filter:setRules + * @fires QueryBuilder#filter:jsonToRule + * @fires QueryBuilder#filter:jsonToGroup + * @fires QueryBuilder#afterSetRules */ QueryBuilder.prototype.setRules = function(data, options) { options = $.extend({ @@ -264,6 +330,11 @@ QueryBuilder.prototype.setRules = function(data, options) { this.setRoot(false, data.data, this.parseGroupFlags(data)); this.applyGroupFlags(this.model.root); + /** + * @event QueryBuilder#filter:setRules + * @param {object} json + * @returns {object} + */ data = this.change('setRules', data); var self = this; @@ -336,15 +407,30 @@ QueryBuilder.prototype.setRules = function(data, options) { self.applyRuleFlags(model); + /** + * @event QueryBuilder#filter:jsonToRule + * @param {Rule} rule + * @param {object} json + */ if (self.change('jsonToRule', model, item) != model) { Utils.error('RulesParse', 'Plugin tried to change rule reference'); } } }); + /** + * @event QueryBuilder#filter:jsonToGroup + * @param {Group} group + * @param {object} json + */ if (self.change('jsonToGroup', group, data) != group) { Utils.error('RulesParse', 'Plugin tried to change group reference'); } }(data, this.model.root)); + + /** + * @event QueryBuilder#afterSetRules + */ + this.trigger('afterSetRules'); }; diff --git a/src/template.js b/src/template.js index c5869c1a..6912f34d 100644 --- a/src/template.js +++ b/src/template.js @@ -88,10 +88,12 @@ QueryBuilder.templates.operatorSelect = '\ '; /** - * Returns group HTML - * @param group_id {string} - * @param level {int} - * @return {string} + * Returns group's HTML + * @param {string} group_id + * @param {int} level + * @returns {string} + * @fires QueryBuilder#filter:getGroupTemplate + * @private */ QueryBuilder.prototype.getGroupTemplate = function(group_id, level) { var h = this.templates.group({ @@ -104,13 +106,21 @@ QueryBuilder.prototype.getGroupTemplate = function(group_id, level) { settings: this.settings }); + /** + * @event QueryBuilder#filter:getGroupTemplate + * @param {string} html + * @param {int} level + * @returns {string} + */ return this.change('getGroupTemplate', h, level); }; /** - * Returns rule HTML - * @param rule_id {string} - * @return {string} + * Returns rule's HTML + * @param {string} rule_id + * @returns {string} + * @fires QueryBuilder#filter:getRuleTemplate + * @private */ QueryBuilder.prototype.getRuleTemplate = function(rule_id) { var h = this.templates.rule({ @@ -121,14 +131,21 @@ QueryBuilder.prototype.getRuleTemplate = function(rule_id) { settings: this.settings }); + /** + * @event QueryBuilder#filter:getRuleTemplate + * @param {string} html + * @returns {string} + */ return this.change('getRuleTemplate', h); }; /** - * Returns rule filter HTML - * @param rule {Rule} - * @param operators {object} - * @return {string} + * Returns rule's operator HTML + * @param {Rule} rule + * @param {object[]} operators + * @returns {string} + * @fires QueryBuilder#filter:getRuleOperatorTemplate + * @private */ QueryBuilder.prototype.getRuleOperatorSelect = function(rule, operators) { var h = this.templates.operatorSelect({ @@ -158,18 +183,25 @@ QueryBuilder.prototype.getRuleOperatorSelect = function(rule, operators) { icons: this.icons, lang: this.lang, settings: this.settings, - translate: this.translateLabel + translate: this.getTranslatedLabel }); + /** + * @event QueryBuilder#filter:getRuleOperatorTemplate + * @param {string} html + * @param {Rule} rule + * @returns {string} + */ return this.change('getRuleOperatorSelect', h, rule); }; /** - * Return the rule value HTML - * @param rule {Rule} - * @param filter {object} - * @param value_id {int} - * @return {string} + * Returns the rule's value HTML + * @param {Rule} rule + * @param {int} value_id + * @returns {string} + * @fires QueryBuilder#filter:getRuleInput + * @private */ QueryBuilder.prototype.getRuleInput = function(rule, value_id) { var filter = rule.filter; @@ -183,52 +215,60 @@ QueryBuilder.prototype.getRuleInput = function(rule, value_id) { } else { switch (filter.input) { - case 'radio': case 'checkbox': + case 'radio': + case 'checkbox': Utils.iterateOptions(filter.values, function(key, val) { - h+= ' ' + val + ' '; + h += ' ' + val + ' '; }); break; case 'select': - h+= ''; if (filter.placeholder) { - h+= ''; + h += ''; } Utils.iterateOptions(filter.values, function(key, val) { - h+= ' '; + h += ' '; }); - h+= ''; + h += ''; break; case 'textarea': - h+= ''; break; @@ -297,14 +298,14 @@ QueryBuilder.prototype.getRuleInput = function(rule, value_id) { if (validation.step !== undefined) h += ' step="' + validation.step + '"'; if (validation.min !== undefined) h += ' min="' + validation.min + '"'; if (validation.max !== undefined) h += ' max="' + validation.max + '"'; - if (filter.placeholder) h += ' placeholder="' + filter.placeholder + '"'; + if (placeholder) h += ' placeholder="' + placeholder + '"'; if (filter.size) h += ' size="' + filter.size + '"'; h += '>'; break; default: h += ' Date: Fri, 22 Feb 2019 12:08:45 +0200 Subject: [PATCH 076/107] Added Lithuanian translation (#766) --- src/i18n/lt.json | 63 ++++++++++++++++++++++++++++++ src/plugins/invert/i18n/lt.json | 3 ++ src/plugins/not-group/i18n/lt.json | 3 ++ 3 files changed, 69 insertions(+) create mode 100644 src/i18n/lt.json create mode 100644 src/plugins/invert/i18n/lt.json create mode 100644 src/plugins/not-group/i18n/lt.json diff --git a/src/i18n/lt.json b/src/i18n/lt.json new file mode 100644 index 00000000..c95c4f08 --- /dev/null +++ b/src/i18n/lt.json @@ -0,0 +1,63 @@ +{ + "__locale": "Lithuanian (lt)", + "__author": "Dalius Guzauskas (aka Tichij), https://lt.linkedin.com/in/daliusg", + + "add_rule": "Pridėti taisyklę", + "add_group": "Pridėti grupę", + "delete_rule": "Ištrinti", + "delete_group": "Ištrinti", + + "conditions": { + "AND": "IR", + "OR": "ARBA" + }, + + "operators": { + "equal": "lygu", + "not_equal": "nėra lygu", + "in": "iš nurodytų", + "not_in": "ne iš nurodytų", + "less": "mažiau", + "less_or_equal": "mažiau arba lygu", + "greater": "daugiau", + "greater_or_equal": "daugiau arba lygu", + "between": "tarp", + "not_between": "nėra tarp", + "begins_with": "prasideda", + "not_begins_with": "neprasideda", + "contains": "turi", + "not_contains": "neturi", + "ends_with": "baigiasi", + "not_ends_with": "nesibaigia", + "is_empty": "tuščia", + "is_not_empty": "ne tuščia", + "is_null": "neapibrėžta", + "is_not_null": "nėra neapibrėžta" + }, + + "errors": { + "no_filter": "Nepasirinktas filtras", + "empty_group": "Grupė tuščia", + "radio_empty": "Nepasirinkta reikšmė", + "checkbox_empty": "Nepasirinkta reikšmė", + "select_empty": "Nepasirinkta reikšmė", + "string_empty": "Tuščia reikšmė", + "string_exceed_min_length": "Turi būti bent {0} simbolių", + "string_exceed_max_length": "Turi būti ne daugiau kaip {0} simbolių", + "string_invalid_format": "Klaidingas formatas ({0})", + "number_nan": "Nėra skaičius", + "number_not_integer": "Ne sveikasis skaičius", + "number_not_double": "Ne realusis skaičius", + "number_exceed_min": "Turi būti daugiau už {0}", + "number_exceed_max": "Turi būti mažiau už {0}", + "number_wrong_step": "Turi būti {0} kartotinis", + "number_between_invalid": "Klaidingos reikšmės, {0} yra daugiau už {1}", + "datetime_empty": "Tuščia reikšmė", + "datetime_invalid": "Klaidingas datos formatas ({0})", + "datetime_exceed_min": "Turi būti po {0}", + "datetime_exceed_max": "Turi būti prieš {0}", + "datetime_between_invalid": "Klaidingos reikšmės, {0} yra daugiau už {1}", + "boolean_not_valid": "Nėra loginis tipas", + "operator_not_multiple": "Operatorius \"{1}\" negali priimti kelių reikšmių" + } +} diff --git a/src/plugins/invert/i18n/lt.json b/src/plugins/invert/i18n/lt.json new file mode 100644 index 00000000..6913901d --- /dev/null +++ b/src/plugins/invert/i18n/lt.json @@ -0,0 +1,3 @@ +{ + "invert": "Invertuoti" +} diff --git a/src/plugins/not-group/i18n/lt.json b/src/plugins/not-group/i18n/lt.json new file mode 100644 index 00000000..8025e4e8 --- /dev/null +++ b/src/plugins/not-group/i18n/lt.json @@ -0,0 +1,3 @@ +{ + "NOT": "NE" +} From 62ac960403930a32fd474c8b806dfcea39928e1a Mon Sep 17 00:00:00 2001 From: Timothy Anyona Date: Mon, 22 Apr 2019 13:05:03 +0300 Subject: [PATCH 077/107] Updated Russian translation (Translation by Hubbitus) --- src/plugins/not-group/i18n/ru.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/plugins/not-group/i18n/ru.json diff --git a/src/plugins/not-group/i18n/ru.json b/src/plugins/not-group/i18n/ru.json new file mode 100644 index 00000000..923d6069 --- /dev/null +++ b/src/plugins/not-group/i18n/ru.json @@ -0,0 +1,3 @@ +{ + "NOT": "НЕ" +} From 42419b6d5ac3bda6d37d83285c6d09c9e313a0b0 Mon Sep 17 00:00:00 2001 From: Timothy Anyona Date: Thu, 25 Apr 2019 10:20:50 +0300 Subject: [PATCH 078/107] Added missing Russian strings in main translation (Translation by Hubbitus) --- src/i18n/ru.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/i18n/ru.json b/src/i18n/ru.json index 33a343e8..aa230155 100644 --- a/src/i18n/ru.json +++ b/src/i18n/ru.json @@ -21,6 +21,7 @@ "greater": "больше", "greater_or_equal": "больше или равно", "between": "между", + "not_between": "не между", "begins_with": "начинается с", "not_begins_with": "не начинается с", "contains": "содержит", @@ -49,10 +50,12 @@ "number_exceed_min": "Должно быть больше {0}", "number_exceed_max": "Должно быть меньше, чем {0}", "number_wrong_step": "Должно быть кратно {0}", + "number_between_invalid": "Недопустимые значения, {0} больше {1}", "datetime_empty": "Не заполненно", "datetime_invalid": "Неверный формат даты ({0})", "datetime_exceed_min": "Должно быть, после {0}", "datetime_exceed_max": "Должно быть, до {0}", + "datetime_between_invalid": "Недопустимые значения, {0} больше {1}", "boolean_not_valid": "Не логическое", "operator_not_multiple": "Оператор \"{1}\" не поддерживает много значений" } From d7c3e262250b1f52294a837be0069d1d14c3fa85 Mon Sep 17 00:00:00 2001 From: Mike Iceman Date: Wed, 18 Sep 2019 22:00:00 +0200 Subject: [PATCH 079/107] Russian translation typos (#820) --- src/i18n/ru.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/i18n/ru.json b/src/i18n/ru.json index aa230155..9ccfefcc 100644 --- a/src/i18n/ru.json +++ b/src/i18n/ru.json @@ -37,10 +37,10 @@ "errors": { "no_filter": "Фильтр не выбран", "empty_group": "Группа пуста", - "radio_empty": "Не выбранно значение", - "checkbox_empty": "Не выбранно значение", - "select_empty": "Не выбранно значение", - "string_empty": "Не заполненно", + "radio_empty": "Не выбрано значение", + "checkbox_empty": "Не выбрано значение", + "select_empty": "Не выбрано значение", + "string_empty": "Не заполнено", "string_exceed_min_length": "Должен содержать больше {0} символов", "string_exceed_max_length": "Должен содержать меньше {0} символов", "string_invalid_format": "Неверный формат ({0})", @@ -51,7 +51,7 @@ "number_exceed_max": "Должно быть меньше, чем {0}", "number_wrong_step": "Должно быть кратно {0}", "number_between_invalid": "Недопустимые значения, {0} больше {1}", - "datetime_empty": "Не заполненно", + "datetime_empty": "Не заполнено", "datetime_invalid": "Неверный формат даты ({0})", "datetime_exceed_min": "Должно быть, после {0}", "datetime_exceed_max": "Должно быть, до {0}", From f0e8e3efadcda442cc9012061b4c90f2516f79e3 Mon Sep 17 00:00:00 2001 From: Damien Sorel Date: Wed, 18 Sep 2019 22:09:32 +0200 Subject: [PATCH 080/107] Add Github CI --- .github/workflows/main.yml | 16 ++++++++++++++++ .travis.yml | 2 -- package.json | 2 ++ 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..81718908 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,16 @@ +name: CI + +on: [push, pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + - name: build + run: | + npm install + npm run test + npm run build diff --git a/.travis.yml b/.travis.yml index 6a2b5a40..d7ea7141 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,4 @@ language: node_js node_js: - "8" -before_install: - - npm install -g grunt-cli after_success: grunt coveralls diff --git a/package.json b/package.json index ad930ee5..6b650b9d 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "foodoc": "^0.0.9", "grunt": "^1.0.2", "grunt-banner": "^0.6.0", + "grunt-cli": "^1.3.2", "grunt-contrib-clean": "^1.0.0", "grunt-contrib-concat": "^1.0.0", "grunt-contrib-connect": "^1.0.0", @@ -69,6 +70,7 @@ "url": "https://github.com/mistic100/jQuery-QueryBuilder/issues" }, "scripts": { + "build": "grunt", "serve": "grunt serve", "test": "grunt test" } From 2c748a4f53ea3b95fe313c877a8ccc248cf3d9d2 Mon Sep 17 00:00:00 2001 From: k2s Date: Fri, 18 Oct 2019 19:11:47 +0200 Subject: [PATCH 081/107] Slovak translation (#830) --- src/i18n/sk.json | 63 ++++++++++++++++++++++++++++++ src/plugins/invert/i18n/sk.json | 3 ++ src/plugins/not-group/i18n/sk.json | 3 ++ 3 files changed, 69 insertions(+) create mode 100644 src/i18n/sk.json create mode 100644 src/plugins/invert/i18n/sk.json create mode 100644 src/plugins/not-group/i18n/sk.json diff --git a/src/i18n/sk.json b/src/i18n/sk.json new file mode 100644 index 00000000..0a5926c4 --- /dev/null +++ b/src/i18n/sk.json @@ -0,0 +1,63 @@ +{ + "__locale": "Slovensky (sk)", + "__author": "k2s", + + "add_rule": "Pridať podmienku", + "add_group": "Pridať skupinu", + "delete_rule": "Zmazať", + "delete_group": "Zmazať", + + "conditions": { + "AND": "A", + "OR": "ALEBO" + }, + + "operators": { + "equal": "rovné", + "not_equal": "nerovné", + "in": "v", + "not_in": "nie v", + "less": "menej", + "less_or_equal": "menej alebo rovné", + "greater": "väčšie", + "greater_or_equal": "väčšie alebo rovné", + "between": "medzi", + "not_between": "nie medzi", + "begins_with": "začína na", + "not_begins_with": "nezačína na", + "contains": "obsahuje", + "not_contains": "neobsahuje", + "ends_with": "končí na", + "not_ends_with": "nekončí na", + "is_empty": "je prázdne", + "is_not_empty": "nie je prázdne", + "is_null": "je null", + "is_not_null": "nie je null" + }, + + "errors": { + "no_filter": "Nie je zvolený filter", + "empty_group": "Skupina je prázdna", + "radio_empty": "Nie je označená hodnota", + "checkbox_empty": "Nie je označená hodnota", + "select_empty": "Nie je označená hodnota", + "string_empty": "Prázdna hodnota", + "string_exceed_min_length": "Musí obsahovať aspon {0} znakov", + "string_exceed_max_length": "Nesmie obsahovať viac ako {0} znakov", + "string_invalid_format": "Chybný formát ({0})", + "number_nan": "Nie je číslo", + "number_not_integer": "Nie je celé číslo", + "number_not_double": "Nie je desatinné číslo", + "number_exceed_min": "Musí byť väčšie ako {0}", + "number_exceed_max": "Musí byť menšie ako {0}", + "number_wrong_step": "Musí byť násobkom čísla {0}", + "number_between_invalid": "Chybné hodnoty, {0} je väčšie ako {1}", + "datetime_empty": "Prázdna hodnota", + "datetime_invalid": "Chybný formát dátumu ({0})", + "datetime_exceed_min": "Musí byť neskôr ako {0}", + "datetime_exceed_max": "Musí byť skôr ako {0}", + "datetime_between_invalid": "Chybné hodnoty, {0} je neskôr ako {1}", + "boolean_not_valid": "Neplatné áno/nie", + "operator_not_multiple": "Operátor '{1}' nepodporuje viacero hodnôt" + } +} diff --git a/src/plugins/invert/i18n/sk.json b/src/plugins/invert/i18n/sk.json new file mode 100644 index 00000000..b9d3274b --- /dev/null +++ b/src/plugins/invert/i18n/sk.json @@ -0,0 +1,3 @@ +{ + "invert": "Invertný" +} diff --git a/src/plugins/not-group/i18n/sk.json b/src/plugins/not-group/i18n/sk.json new file mode 100644 index 00000000..9da29bd5 --- /dev/null +++ b/src/plugins/not-group/i18n/sk.json @@ -0,0 +1,3 @@ +{ + "NOT": "NIE" +} From 844e608228045e05a416980fd4f113bfab2753f0 Mon Sep 17 00:00:00 2001 From: itajackass Date: Thu, 31 Oct 2019 14:21:40 +0100 Subject: [PATCH 082/107] Updated italian translation (#837) --- src/i18n/it.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/i18n/it.json b/src/i18n/it.json index d16fb50c..076cc172 100644 --- a/src/i18n/it.json +++ b/src/i18n/it.json @@ -1,6 +1,6 @@ { "__locale": "Italian (it)", - "__author": "davegraziosi", + "__author": "davegraziosi, Giuseppe Lodi Rizzini", "add_rule": "Aggiungi regola", "add_group": "Aggiungi gruppo", @@ -51,11 +51,13 @@ "number_exceed_min": "Deve essere maggiore di {0}", "number_exceed_max": "Deve essere minore di {0}", "number_wrong_step": "Deve essere multiplo di {0}", + "number_between_invalid": "Valori non validi, {0} è maggiore di {1}", "datetime_empty": "Valore vuoto", "datetime_invalid": "Formato data non valido ({0})", "datetime_exceed_min": "Deve essere successivo a {0}", "datetime_exceed_max": "Deve essere precedente a {0}", + "datetime_between_invalid": "Valori non validi, {0} è maggiore di {1}", "boolean_not_valid": "Non è un booleano", "operator_not_multiple": "L'Operatore {0} non può accettare valori multipli" } -} \ No newline at end of file +} From f8e08cc4f69dd4836a4a14afb6c6b1af7c6b9a2f Mon Sep 17 00:00:00 2001 From: Damien SOREL Date: Fri, 29 Nov 2019 12:46:37 +0100 Subject: [PATCH 083/107] Remove travis --- .travis.yml | 4 ---- README.md | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d7ea7141..00000000 --- a/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "8" -after_success: grunt coveralls diff --git a/README.md b/README.md index cb412ddb..3f5fea48 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![npm version](https://img.shields.io/npm/v/jQuery-QueryBuilder.svg?style=flat-square)](https://www.npmjs.com/package/jQuery-QueryBuilder) [![jsDelivr CDN](https://data.jsdelivr.com/v1/package/npm/jQuery-QueryBuilder/badge)](https://www.jsdelivr.com/package/npm/jQuery-QueryBuilder) -[![Build Status](https://img.shields.io/travis/mistic100/jQuery-QueryBuilder.svg?style=flat-square)](https://travis-ci.org/mistic100/jQuery-QueryBuilder) +[![Build Status](https://github.com/mistic100/jQuery-QueryBuilder/workflows/CI/badge.svg)](https://github.com/mistic100/jQuery-QueryBuilder/actions) [![Coverage Status](https://img.shields.io/coveralls/mistic100/jQuery-QueryBuilder/master.svg?style=flat-square)](https://coveralls.io/r/mistic100/jQuery-QueryBuilder) [![Dependencies Status](https://david-dm.org/mistic100/jQuery-QueryBuilder/status.svg?style=flat-square)](https://david-dm.org/mistic100/jQuery-QueryBuilder) From 9b79b35a9ae1430c28ccf5def1f67056b24a4f03 Mon Sep 17 00:00:00 2001 From: Damien Sorel Date: Thu, 5 Mar 2020 12:33:29 +0100 Subject: [PATCH 084/107] Hungarian translation (#862) --- src/i18n/hu.json | 63 ++++++++++++++++++++++++++++++ src/plugins/invert/i18n/hu.json | 3 ++ src/plugins/not-group/i18n/hu.json | 3 ++ 3 files changed, 69 insertions(+) create mode 100644 src/i18n/hu.json create mode 100644 src/plugins/invert/i18n/hu.json create mode 100644 src/plugins/not-group/i18n/hu.json diff --git a/src/i18n/hu.json b/src/i18n/hu.json new file mode 100644 index 00000000..22fa5e4c --- /dev/null +++ b/src/i18n/hu.json @@ -0,0 +1,63 @@ +{ + "__locale": "Hungarian - Magyar (hu)", + "__author": "Szabó Attila \"Tailor993\", https://www.tailor993.hu", + + "add_rule": "Feltétel hozzáadása", + "add_group": "Csoport hozzáadása", + "delete_rule": "Feltétel törlése", + "delete_group": "Csoport törlése", + + "conditions": { + "AND": "ÉS", + "OR": "VAGY" + }, + + "operators": { + "equal": "egyenlő", + "not_equal": "nem egyenlő", + "in": "bennevan", + "not_in": "nincs benne", + "less": "kisebb", + "less_or_equal": "kisebb vagy egyenlő", + "greater": "nagyobb", + "greater_or_equal": "nagyobb vagy egyenlő", + "between": "közötte", + "not_between": "nincs közötte", + "begins_with": "ezzel kezdődik", + "not_begins_with": "ezzel nem kezdődik", + "contains": "tartalmazza", + "not_contains": "nem tartalmazza", + "ends_with": "erre végződik", + "not_ends_with": "errre nem végződik", + "is_empty": "üres", + "is_not_empty": "nem üres", + "is_null": "null", + "is_not_null": "nem null" + }, + + "errors": { + "no_filter": "Nincs kiválasztott feltétel", + "empty_group": "A csoport üres", + "radio_empty": "Nincs kiválasztott érték", + "checkbox_empty": "Nincs kiválasztott érték", + "select_empty": "Nincs kiválasztott érték", + "string_empty": "Üres érték", + "string_exceed_min_length": "A megadott szöveg rövidebb a várt {0} karakternél", + "string_exceed_max_length": "A megadott szöveg nem tartalmazhat többet, mint {0} karaktert", + "string_invalid_format": "Nem megfelelő formátum ({0})", + "number_nan": "Nem szám", + "number_not_integer": "Nem egész szám (integer)", + "number_not_double": "Nem valós szám", + "number_exceed_min": "Nagyobbnak kell lennie, mint {0}", + "number_exceed_max": "Kisebbnek kell lennie, mint {0}", + "number_wrong_step": "{0} többszörösének kell lennie.", + "number_between_invalid": "INem megfelelő érték, {0} nagyobb, mint {1}", + "datetime_empty": "Üres érték", + "datetime_invalid": "nem megfelelő dátum formátum ({0})", + "datetime_exceed_min": "A dátumnak későbbinek kell lennie, mint{0}", + "datetime_exceed_max": "A dátumnak korábbinak kell lennie, mint {0}", + "datetime_between_invalid": "Nem megfelelő értékek, {0} nagyobb, mint {1}", + "boolean_not_valid": "Nem igaz/hamis (boolean)", + "operator_not_multiple": "Ez a művelet: \"{1}\" nem fogadhat el több értéket" + } +} diff --git a/src/plugins/invert/i18n/hu.json b/src/plugins/invert/i18n/hu.json new file mode 100644 index 00000000..83b08887 --- /dev/null +++ b/src/plugins/invert/i18n/hu.json @@ -0,0 +1,3 @@ +{ + "invert": "Megfordítás (Invertálás)" +} diff --git a/src/plugins/not-group/i18n/hu.json b/src/plugins/not-group/i18n/hu.json new file mode 100644 index 00000000..4399728c --- /dev/null +++ b/src/plugins/not-group/i18n/hu.json @@ -0,0 +1,3 @@ +{ + "NOT": "NEM" +} From cc03c3336c2a6aaa60ca9a83af506232d4f034b2 Mon Sep 17 00:00:00 2001 From: Henrik Date: Thu, 19 Mar 2020 10:57:03 +0100 Subject: [PATCH 085/107] Swedish translations (#865) --- src/i18n/sv.json | 63 ++++++++++++++++++++++++++++++ src/plugins/invert/i18n/sv.json | 3 ++ src/plugins/not-group/i18n/sv.json | 3 ++ 3 files changed, 69 insertions(+) create mode 100644 src/i18n/sv.json create mode 100644 src/plugins/invert/i18n/sv.json create mode 100644 src/plugins/not-group/i18n/sv.json diff --git a/src/i18n/sv.json b/src/i18n/sv.json new file mode 100644 index 00000000..a3b06e84 --- /dev/null +++ b/src/i18n/sv.json @@ -0,0 +1,63 @@ +{ + "__locale": "Svenska (sv)", + "__author": "hekin1", + + "add_rule": "Lägg till regel", + "add_group": "Lägg till grupp", + "delete_rule": "Ta bort", + "delete_group": "Ta bort", + + "conditions": { + "AND": "OCH", + "OR": "ELLER" + }, + + "operators": { + "equal": "lika med", + "not_equal": "ej lika med", + "in": "en av", + "not_in": "ej en av", + "less": "mindre", + "less_or_equal": "mindre eller lika med", + "greater": "större", + "greater_or_equal": "större eller lika med", + "between": "mellan", + "not_between": "ej mellan", + "begins_with": "börjar med", + "not_begins_with": "börjar inte med", + "contains": "innehåller", + "not_contains": "innehåller inte", + "ends_with": "slutar med", + "not_ends_with": "slutar inte med", + "is_empty": "är tom", + "is_not_empty": "är inte tom", + "is_null": "är null", + "is_not_null": "är inte null" + }, + + "errors": { + "no_filter": "Inget filter valt", + "empty_group": "Gruppen är tom", + "radio_empty": "Inget värde valt", + "checkbox_empty": "Inget värde valt", + "select_empty": "Inget värde valt", + "string_empty": "Tomt värde", + "string_exceed_min_length": "Måste innehålla minst {0} tecken", + "string_exceed_max_length": "Får ej innehålla fler än {0} tecken", + "string_invalid_format": "Felaktigt format ({0})", + "number_nan": "Inte numeriskt", + "number_not_integer": "Inte en siffra", + "number_not_double": "Inte ett decimaltal", + "number_exceed_min": "Måste vara större än {0}", + "number_exceed_max": "Måste vara lägre än {0}", + "number_wrong_step": "Måste vara en mutipel av {0}", + "number_between_invalid": "Felaktiga värden, {0} är större än {1}", + "datetime_empty": "Tomt värde", + "datetime_invalid": "Felaktigt datumformat ({0})", + "datetime_exceed_min": "Måste vara efter {0}", + "datetime_exceed_max": "Måste vara före {0}", + "datetime_between_invalid": "Felaktiga värden, {0} är större än {1}", + "boolean_not_valid": "Inte en boolean", + "operator_not_multiple": "Operatorn \"{1}\" accepterar inte flera värden" + } +} diff --git a/src/plugins/invert/i18n/sv.json b/src/plugins/invert/i18n/sv.json new file mode 100644 index 00000000..aa932882 --- /dev/null +++ b/src/plugins/invert/i18n/sv.json @@ -0,0 +1,3 @@ +{ + "invert": "Invertera" +} diff --git a/src/plugins/not-group/i18n/sv.json b/src/plugins/not-group/i18n/sv.json new file mode 100644 index 00000000..2778b4da --- /dev/null +++ b/src/plugins/not-group/i18n/sv.json @@ -0,0 +1,3 @@ +{ + "NOT": "INTE" +} From e4c845c1ecd270d5a216fac6912f792266c9cecc Mon Sep 17 00:00:00 2001 From: Damien Sorel Date: Fri, 4 Sep 2020 12:16:10 +0200 Subject: [PATCH 086/107] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3f5fea48..262fd046 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ [![Build Status](https://github.com/mistic100/jQuery-QueryBuilder/workflows/CI/badge.svg)](https://github.com/mistic100/jQuery-QueryBuilder/actions) [![Coverage Status](https://img.shields.io/coveralls/mistic100/jQuery-QueryBuilder/master.svg?style=flat-square)](https://coveralls.io/r/mistic100/jQuery-QueryBuilder) [![Dependencies Status](https://david-dm.org/mistic100/jQuery-QueryBuilder/status.svg?style=flat-square)](https://david-dm.org/mistic100/jQuery-QueryBuilder) +[![gitlocalized](https://gitlocalize.com/repo/5259/whole_project/badge.svg)](https://gitlocalize.com/repo/5259/whole_project?utm_source=badge) jQuery plugin offering an simple interface to create complex queries. From 1539a6ce5de8eee7109f9a8c05208b83354e1faa Mon Sep 17 00:00:00 2001 From: mistic100 Date: Mon, 2 Nov 2020 21:06:20 +0100 Subject: [PATCH 087/107] Better dependencies, remove bower and composer --- .gitignore | 2 ++ bower.json | 46 ---------------------------------------------- composer.json | 46 ---------------------------------------------- package.json | 12 ++++++------ 4 files changed, 8 insertions(+), 98 deletions(-) delete mode 100644 bower.json delete mode 100644 composer.json diff --git a/.gitignore b/.gitignore index 2b7141a4..d0a0ebb9 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,5 @@ doc .coverage-results .idea *.iml +yarn.lock +package-lock.json diff --git a/bower.json b/bower.json deleted file mode 100644 index f1850a1e..00000000 --- a/bower.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "jQuery-QueryBuilder", - "authors": [ - { - "name": "Damien \"Mistic\" Sorel", - "email": "contact@git.strangeplanet.fr", - "homepage": "https://www.strangeplanet.fr" - } - ], - "description": "jQuery plugin for user friendly query/filter creator", - "main": [ - "dist/js/query-builder.js", - "dist/css/query-builder.default.css" - ], - "dependencies": { - "jquery": ">=1.10.0", - "bootstrap": ">=3.1.0 <4", - "moment": ">=2.6.0", - "jquery-extendext": ">=0.1.2", - "doT": ">=1.0.3" - }, - "keywords": [ - "jquery", - "query", - "builder", - "filter" - ], - "license": "MIT", - "homepage": "https://querybuilder.js.org", - "repository": { - "type": "git", - "url": "git://github.com/mistic100/jQuery-QueryBuilder.git" - }, - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "build", - "src", - "tests", - "composer.json", - "package.json", - "Gruntfile.js", - "CONTRIBUTING.md" - ] -} diff --git a/composer.json b/composer.json deleted file mode 100644 index 3d52b425..00000000 --- a/composer.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "mistic100/jquery-querybuilder", - "version": "2.4.0", - "authors": [{ - "name": "Damien \"Mistic\" Sorel", - "email": "contact@git.strangeplanet.fr", - "homepage": "https://www.strangeplanet.fr" - }], - "description": "jQuery plugin for user friendly query/filter creator", - "require": { - "robloach/component-installer": "*", - "components/jquery": ">=1.10.0", - "moment/moment": ">=2.6.0", - "components/bootstrap": ">=3.1.0 <4" - }, - "keywords": [ - "jquery", - "query", - "builder", - "filter" - ], - "license": "MIT", - "homepage": "https://querybuilder.js.org", - "support": { - "issues": "https://github.com/mistic100/jQuery-QueryBuilder/issues" - }, - "extra": { - "component": { - "styles": [ - "dist/css/query-builder.default.css" - ], - "scripts": [ - "dist/js/query-builder.standalone.js" - ], - "files": [ - "dist/css/query-builder.default.min.css", - "dist/css/query-builder.dark.css", - "dist/css/query-builder.dark.min.css", - "dist/js/query-builder.js", - "dist/js/query-builder.min.js", - "dist/js/query-builder.standalone.min.js", - "dist/i18n/*.js" - ] - } - } -} diff --git a/package.json b/package.json index 6b650b9d..14a80bfd 100644 --- a/package.json +++ b/package.json @@ -9,11 +9,12 @@ "description": "jQuery plugin for user friendly query/filter creator", "main": "dist/js/query-builder.js", "dependencies": { - "bootstrap": ">=3.1.0 <4", - "dot": ">=1.0.3", - "jquery": "^3.3.1", - "jquery-extendext": ">=0.1.2", - "moment": "^2.21.0" + "bootstrap": "^3.4.1", + "dot": "^1.1.3", + "jquery": "^3.5.1", + "jquery-extendext": "^1.0.0", + "moment": "^2.29.1", + "sql-parser-mistic": "^1.2.3" }, "devDependencies": { "awesome-bootstrap-checkbox": "^0.3.7", @@ -51,7 +52,6 @@ "jit-grunt": "^0.10.0", "qunit": "^2.5.1", "selectize": "^0.12.4", - "sql-parser-mistic": "^1.2.2", "time-grunt": "^1.3.0" }, "keywords": [ From 7027a020bbd41fb925dde7d6e25a3b427dbdde9e Mon Sep 17 00:00:00 2001 From: Ninezero <41019113+ninezero90hy@users.noreply.github.com> Date: Tue, 3 Nov 2020 05:07:02 +0900 Subject: [PATCH 088/107] Modify the library load information being used in the example (#893) --- examples/index.html | 2 +- tests/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/index.html b/examples/index.html index e6fc840f..8fc91c18 100644 --- a/examples/index.html +++ b/examples/index.html @@ -114,7 +114,7 @@

Output

- + diff --git a/tests/index.html b/tests/index.html index c1e719e0..463bc9eb 100644 --- a/tests/index.html +++ b/tests/index.html @@ -26,7 +26,7 @@ - + From a5950dda1c90042aafba5f886d9cf12bc9763fbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20Strau=C3=9F?= Date: Wed, 10 Jun 2020 10:33:06 +0200 Subject: [PATCH 089/107] Fixed Unexpected 'NUMBER' if you had a query with an "IN" with 10 elements or more, the regex of setRulesFromSQL did not match correctly --- src/plugins/sql-support/plugin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/sql-support/plugin.js b/src/plugins/sql-support/plugin.js index 95b7eda5..17f5c506 100644 --- a/src/plugins/sql-support/plugin.js +++ b/src/plugins/sql-support/plugin.js @@ -214,7 +214,7 @@ QueryBuilder.defaults({ 'named': function(values, char) { if (!char || char.length > 1) char = ':'; var regex1 = new RegExp('^\\' + char); - var regex2 = new RegExp('\\' + char + '(' + Object.keys(values).join('|') + ')', 'g'); + var regex2 = new RegExp('\\' + char + '(' + Object.keys(values).join('|') + ')\\b', 'g'); return { parse: function(v) { return regex1.test(v) ? values[v.slice(1)] : v; From 5a94400d35f497643dcf1f89cecf2da97c852120 Mon Sep 17 00:00:00 2001 From: Robin van der Vliet Date: Fri, 19 Mar 2021 17:07:25 +0100 Subject: [PATCH 090/107] Esperanto translation (#906) --- src/i18n/eo.json | 63 ++++++++++++++++++++++++++++++ src/plugins/invert/i18n/eo.json | 3 ++ src/plugins/not-group/i18n/eo.json | 3 ++ 3 files changed, 69 insertions(+) create mode 100644 src/i18n/eo.json create mode 100644 src/plugins/invert/i18n/eo.json create mode 100644 src/plugins/not-group/i18n/eo.json diff --git a/src/i18n/eo.json b/src/i18n/eo.json new file mode 100644 index 00000000..b3c9166d --- /dev/null +++ b/src/i18n/eo.json @@ -0,0 +1,63 @@ +{ + "__locale": "Esperanto (eo)", + "__author": "Robin van der Vliet, https://robinvandervliet.com/", + + "add_rule": "Aldoni regulon", + "add_group": "Aldoni grupon", + "delete_rule": "Forigi", + "delete_group": "Forigi", + + "conditions": { + "AND": "KAJ", + "OR": "AŬ" + }, + + "operators": { + "equal": "estas egala al", + "not_equal": "ne estas egala al", + "in": "estas en", + "not_in": "ne estas en", + "less": "estas malpli ol", + "less_or_equal": "estas malpli ol aŭ egala al", + "greater": "estas pli ol", + "greater_or_equal": "estas pli ol aŭ egala al", + "between": "estas inter", + "not_between": "ne estas inter", + "begins_with": "komenciĝas per", + "not_begins_with": "ne komenciĝas per", + "contains": "enhavas", + "not_contains": "ne enhavas", + "ends_with": "finiĝas per", + "not_ends_with": "ne finiĝas per", + "is_empty": "estas malplena", + "is_not_empty": "ne estas malplena", + "is_null": "estas senvalora", + "is_not_null": "ne estas senvalora" + }, + + "errors": { + "no_filter": "Neniu filtrilo elektita", + "empty_group": "La grupo estas malplena", + "radio_empty": "Neniu valoro elektita", + "checkbox_empty": "Neniu valoro elektita", + "select_empty": "Neniu valoro elektita", + "string_empty": "Malplena valoro", + "string_exceed_min_length": "Devas enhavi pli ol {0} signojn", + "string_exceed_max_length": "Devas ne enhavi pli ol {0} signojn", + "string_invalid_format": "Nevalida strukturo ({0})", + "number_nan": "Ne estas nombro", + "number_not_integer": "Ne estas entjera nombro", + "number_not_double": "Ne estas reela nombro", + "number_exceed_min": "Devas esti pli ol {0}", + "number_exceed_max": "Devas esti malpli ol {0}", + "number_wrong_step": "Devas esti oblo de {0}", + "number_between_invalid": "Nevalidaj valoroj, {0} estas pli ol {1}", + "datetime_empty": "Malplena valoro", + "datetime_invalid": "Nevalida dato ({0})", + "datetime_exceed_min": "Devas esti post {0}", + "datetime_exceed_max": "Devas esti antaŭ {0}", + "datetime_between_invalid": "Nevalidaj valoroj, {0} estas post {1}", + "boolean_not_valid": "Ne estas bulea valoro", + "operator_not_multiple": "La operacio \"{1}\" ne akceptas plurajn valorojn" + } +} diff --git a/src/plugins/invert/i18n/eo.json b/src/plugins/invert/i18n/eo.json new file mode 100644 index 00000000..e5ddde54 --- /dev/null +++ b/src/plugins/invert/i18n/eo.json @@ -0,0 +1,3 @@ +{ + "invert": "Inversigi" +} diff --git a/src/plugins/not-group/i18n/eo.json b/src/plugins/not-group/i18n/eo.json new file mode 100644 index 00000000..8025e4e8 --- /dev/null +++ b/src/plugins/not-group/i18n/eo.json @@ -0,0 +1,3 @@ +{ + "NOT": "NE" +} From f620fbd06cd620e8b48f8f28bf7c6657a72e268b Mon Sep 17 00:00:00 2001 From: mistic100 Date: Sat, 20 Mar 2021 14:36:53 +0100 Subject: [PATCH 091/107] Fix #905 Potential XSS on template generation --- src/core.js | 10 +++++----- src/plugins/bt-tooltip-errors/plugin.js | 2 +- src/plugins/filter-description/plugin.js | 6 +++--- src/plugins/invert/plugin.js | 4 ++-- src/plugins/not-group/plugin.js | 2 +- src/plugins/sortable/plugin.js | 6 +++--- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/core.js b/src/core.js index 305a9e53..6944c9a3 100644 --- a/src/core.js +++ b/src/core.js @@ -345,7 +345,7 @@ QueryBuilder.prototype.setRoot = function(addRule, data, flags) { addRule = (addRule === undefined || addRule === true); var group_id = this.nextGroupId(); - var $group = $(this.getGroupTemplate(group_id, 1)); + var $group = $($.parseHTML(this.getGroupTemplate(group_id, 1))); this.$el.append($group); this.model.root = new Group(null, $group); @@ -535,7 +535,7 @@ QueryBuilder.prototype.addRule = function(parent, data, flags) { } var rule_id = this.nextRuleId(); - var $rule = $(this.getRuleTemplate(rule_id)); + var $rule = $($.parseHTML(this.getRuleTemplate(rule_id))); var model = parent.addRule($rule); model.data = data; @@ -625,7 +625,7 @@ QueryBuilder.prototype.createRuleFilters = function(rule) { * @returns {QueryBuilder.Filter[]} */ var filters = this.change('getRuleFilters', this.filters, rule); - var $filterSelect = $(this.getRuleFilterSelect(rule, filters)); + var $filterSelect = $($.parseHTML(this.getRuleFilterSelect(rule, filters))); rule.$el.find(QueryBuilder.selectors.filter_container).html($filterSelect); @@ -654,7 +654,7 @@ QueryBuilder.prototype.createRuleOperators = function(rule) { } var operators = this.getOperators(rule.filter); - var $operatorSelect = $(this.getRuleOperatorSelect(rule, operators)); + var $operatorSelect = $($.parseHTML(this.getRuleOperatorSelect(rule, operators))); $operatorContainer.html($operatorSelect); @@ -700,7 +700,7 @@ QueryBuilder.prototype.createRuleInput = function(rule) { var filter = rule.filter; for (var i = 0; i < rule.operator.nb_inputs; i++) { - var $ruleInput = $(this.getRuleInput(rule, i)); + var $ruleInput = $($.parseHTML(this.getRuleInput(rule, i))); if (i > 0) $valueContainer.append(this.settings.inputs_separator); $valueContainer.append($ruleInput); $inputs = $inputs.add($ruleInput); diff --git a/src/plugins/bt-tooltip-errors/plugin.js b/src/plugins/bt-tooltip-errors/plugin.js index e9bc935c..68423252 100644 --- a/src/plugins/bt-tooltip-errors/plugin.js +++ b/src/plugins/bt-tooltip-errors/plugin.js @@ -15,7 +15,7 @@ QueryBuilder.define('bt-tooltip-errors', function(options) { // add BT Tooltip data this.on('getRuleTemplate.filter getGroupTemplate.filter', function(h) { - var $h = $(h.value); + var $h = $($.parseHTML(h.value)); $h.find(QueryBuilder.selectors.error_container).attr('data-toggle', 'tooltip'); h.value = $h.prop('outerHTML'); }); diff --git a/src/plugins/filter-description/plugin.js b/src/plugins/filter-description/plugin.js index bbe58fcb..472dd328 100644 --- a/src/plugins/filter-description/plugin.js +++ b/src/plugins/filter-description/plugin.js @@ -19,7 +19,7 @@ QueryBuilder.define('filter-description', function(options) { } else { if ($p.length === 0) { - $p = $('

'); + $p = $($.parseHTML('

')); $p.appendTo(rule.$el); } else { @@ -49,7 +49,7 @@ QueryBuilder.define('filter-description', function(options) { } else { if ($b.length === 0) { - $b = $(''); + $b = $($.parseHTML('')); $b.prependTo(rule.$el.find(QueryBuilder.selectors.rule_actions)); $b.popover({ @@ -89,7 +89,7 @@ QueryBuilder.define('filter-description', function(options) { } else { if ($b.length === 0) { - $b = $(''); + $b = $($.parseHTML('')); $b.prependTo(rule.$el.find(QueryBuilder.selectors.rule_actions)); $b.on('click', function() { diff --git a/src/plugins/invert/plugin.js b/src/plugins/invert/plugin.js index 6b77e2fd..c0294e84 100644 --- a/src/plugins/invert/plugin.js +++ b/src/plugins/invert/plugin.js @@ -31,7 +31,7 @@ QueryBuilder.define('invert', function(options) { // Modify templates if (!options.disable_template) { this.on('getGroupTemplate.filter', function(h) { - var $h = $(h.value); + var $h = $($.parseHTML(h.value)); $h.find(Selectors.condition_container).after( '
- + + + + + + + + + + + + + + + + + + + + + + + + @@ -80,7 +72,7 @@

jQuery QueryBuilder
-
@@ -106,22 +98,23 @@

Output

- + - - - + + - diff --git a/tests/plugins-gui.module.js b/tests/plugins-gui.module.js index 00a131a1..a6ac0d22 100644 --- a/tests/plugins-gui.module.js +++ b/tests/plugins-gui.module.js @@ -78,22 +78,6 @@ $(function(){ ); }); - /** - * Test bt-selectpicker - */ - QUnit.test('bt-selectpicker', function(assert) { - $b.queryBuilder({ - plugins: ['bt-selectpicker'], - filters: basic_filters, - rules: basic_rules - }); - - assert.ok( - $b.find('.bootstrap-select').length == 8, - 'Should have initialized Bootstrap Select on all filters and operators selectors' - ); - }); - /** * Test chosen-selectpicker */ @@ -131,9 +115,9 @@ $(function(){ $b.queryBuilder('validate'); assert.equal( - $('#builder_group_0 .error-container').eq(0).data('toggle'), + $('#builder_group_0 .error-container').eq(0).data('bs-toggle'), 'tooltip', - 'Should have added data-toggle="tooltip" in the template' + 'Should have added data-bs-toggle="tooltip" in the template' ); assert.equal( @@ -201,7 +185,7 @@ $(function(){ }); assert.ok( - $('#builder_rule_0 button.filter-description').data('toggle') == 'popover', + $('#builder_rule_0 button.filter-description').data('bs-toggle') == 'popover', 'Rule should contain a new button enabled with Popover' ); @@ -216,7 +200,7 @@ $(function(){ }); assert.ok( - $('#builder_rule_0 button.filter-description').data('toggle') == 'bootbox', + $('#builder_rule_0 button.filter-description').data('bs-toggle') == 'bootbox', 'Rule should contain a new button enabled with Bootbox' ); }); diff --git a/yarn.lock b/yarn.lock index 662949ac..ed03d7c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,25 +3,25 @@ "@babel/parser@^7.9.4": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" - integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz" + integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== "@babel/runtime@^7.21.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" - integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== + version "7.23.1" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz" + integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== dependencies: - regenerator-runtime "^0.13.11" + regenerator-runtime "^0.14.0" -"@interactjs/types@1.10.17": - version "1.10.17" - resolved "https://registry.yarnpkg.com/@interactjs/types/-/types-1.10.17.tgz#1649de06d9ead790c81ecece76736b852bdfc77e" - integrity sha512-X2JpoM7xUw0p9Me0tMaI0HNfcF/Hd07ZZlzpnpEMpGerUZOLoyeThrV9P+CrBHxZrluWJrigJbcdqXliFd0YMA== +"@interactjs/types@1.10.19": + version "1.10.19" + resolved "https://registry.npmjs.org/@interactjs/types/-/types-1.10.19.tgz" + integrity sha512-oEqGmt9/Ob+jz0FUaBzpDXBmf+2dfdhPuEwQcMGH6nQTR2ETGtYIlAnQtADHvnCin+cVkrmqVohfHBysyQr4Lw== "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -33,17 +33,29 @@ "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@popperjs/core@^2.0.0", "@popperjs/core@^2.11.8": + version "2.11.8" + resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@selectize/selectize@^0.15.2": + version "0.15.2" + resolved "https://registry.npmjs.org/@selectize/selectize/-/selectize-0.15.2.tgz" + integrity sha512-gY+yzYfrVTc+1ekCAaEtDvN59+upbibFzhkePyyk6PwOXT6kEb05azGA91/w3C/71lUOHPyd3nzLnfyfuRi+pA== + optionalDependencies: + jquery-ui "^1.13.2" + "@types/linkify-it@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9" - integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA== + version "3.0.3" + resolved "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz" + integrity sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g== -"@types/markdown-it@^12.2.3": +"@types/markdown-it@*", "@types/markdown-it@^12.2.3": version "12.2.3" - resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51" + resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz" integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ== dependencies: "@types/linkify-it" "*" @@ -51,17 +63,17 @@ "@types/mdurl@*": version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" + resolved "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz" integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== abbrev@1: version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== accepts@~1.3.4: version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -69,7 +81,7 @@ accepts@~1.3.4: alive-server@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/alive-server/-/alive-server-1.3.0.tgz#ef87166a600a1b76172babbff0b435398ec091ee" + resolved "https://registry.npmjs.org/alive-server/-/alive-server-1.3.0.tgz" integrity sha512-zvE9vFYA6wfDTQpLw7W90s3Mj0a7+HxY7VkTAiOWvYgZZbL9qsSWgBmdL8ndWUnSYdNqaicyPj62HRsGNrC5RQ== dependencies: chokidar "^3.5.3" @@ -89,44 +101,39 @@ alive-server@^1.3.0: ansi-regex@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^6.1.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -ansicolors@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" - integrity sha512-tOIuy1/SK/dr94ZA0ckDohKXNeBNqZ4us6PjMVLs5h1w2GBB6uPtOknp2+VF4F/zcy9LI70W+Z+pE2Soajky1w== - anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -134,124 +141,118 @@ anymatch@~3.1.2: apache-crypt@^1.1.2: version "1.2.6" - resolved "https://registry.yarnpkg.com/apache-crypt/-/apache-crypt-1.2.6.tgz#c3f9b98318b447f0a878b54e2cb113bbb8539698" + resolved "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz" integrity sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA== dependencies: unix-crypt-td-js "^1.1.4" apache-md5@^1.0.6: version "1.1.8" - resolved "https://registry.yarnpkg.com/apache-md5/-/apache-md5-1.1.8.tgz#ea79c6feb03abfed42b2830dde06f75df5e3bbd9" + resolved "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz" integrity sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA== argparse@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-each@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" + resolved "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz" integrity sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA== array-slice@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" + resolved "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz" integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== async@^1.5.2: version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz" integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== -async@^2.6.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - async@~3.2.0: version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== awesome-bootstrap-checkbox@^0.3.7: version "0.3.7" - resolved "https://registry.yarnpkg.com/awesome-bootstrap-checkbox/-/awesome-bootstrap-checkbox-0.3.7.tgz#b112973ee6d5bff40ab217c420185c470251d0e2" + resolved "https://registry.npmjs.org/awesome-bootstrap-checkbox/-/awesome-bootstrap-checkbox-0.3.7.tgz" integrity sha512-W67P0YIPPxN5vg6uuGRrz/rVGqaATFiE3O8/YepssFBXVyMoO8AkfhNMOoHEVJk7m/O5OQ/9n64uXlTZjXiiFw== balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== basic-auth@~2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== dependencies: safe-buffer "5.1.2" batch@0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== bcryptjs@^2.4.3: version "2.4.3" - resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb" + resolved "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz" integrity sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ== binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bluebird@^3.7.2: version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== boolbase@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== -bootbox@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/bootbox/-/bootbox-4.4.0.tgz#ff7f898fb87d4527e547feb64158f88450d1a0c9" - integrity sha512-A07f3gj3XGg/g8esHY1L+mPnjuN9SpbRGA7ZOTe+FtQKV5dOxvh/B9AYVqalROS+MJdBZOMg2Z0bFOqUiCV8zg== +bootbox@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/bootbox/-/bootbox-6.0.0.tgz" + integrity sha512-+Calbj1v5UvxAXXDAHfoBlsx63Hcz1JqHaZdJ5EjIcOlkyAbZLCreVScx0Em6ZUvsMCqynuz/3nGDyd9FtFrNQ== -bootstrap-select@^1.12.4: - version "1.13.18" - resolved "https://registry.yarnpkg.com/bootstrap-select/-/bootstrap-select-1.13.18.tgz#4557119d58dc1159189977161c803962220e4dda" - integrity sha512-V1IzK4rxBq5FrJtkzSH6RmFLFBsjx50byFbfAf8jYyXROWs7ZpprGjdHeoyq2HSsHyjJhMMwjsQhRoYAfxCGow== +bootstrap-icons@^1.11.3: + version "1.11.3" + resolved "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.11.3.tgz" + integrity sha512-+3lpHrCw/it2/7lBL15VR0HEumaBss0+f/Lb6ZvHISn1mlK83jjFpooTLsMWbIjJMDjDjOExMsTxnXSIT4k4ww== + +bootstrap-select@^1.14.0-beta3: + version "1.14.0-beta3" + resolved "https://registry.npmjs.org/bootstrap-select/-/bootstrap-select-1.14.0-beta3.tgz" + integrity sha512-wYUDY4NAYBcNydXybE7wh3+ucyf+AcUOhZ+e0TFIoZ38A+k/3BVT1RPl5f0CiPxAexP1IQuqALKMqI8wtZS71A== bootstrap-slider@^10.0.0: version "10.6.2" - resolved "https://registry.yarnpkg.com/bootstrap-slider/-/bootstrap-slider-10.6.2.tgz#7341f468c012bdaa6a1d8625d989fdeb8ed7dd38" + resolved "https://registry.npmjs.org/bootstrap-slider/-/bootstrap-slider-10.6.2.tgz" integrity sha512-8JTPZB9QVOdrGzYF3YgC3YW6ssfPeBvBwZnXffiZ7YH/zz1D0EKlZvmQsm/w3N0XjVNYQEoQ0ax+jHrErV4K1Q== -bootstrap@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.4.1.tgz#c3a347d419e289ad11f4033e3c4132b87c081d72" - integrity sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA== - -"bootswatch-dist@git+https://github.com/dbtek/bootswatch-dist.git#slate": - version "3.3.7-slate" - resolved "git+https://github.com/dbtek/bootswatch-dist.git#f55986534babf801f99fde84e7144ca7a584263b" +"bootstrap@^4.4.0 || ^5.0.0", bootstrap@^5.3.0, bootstrap@>=3.0.0: + version "5.3.2" + resolved "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz" + integrity sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -259,36 +260,39 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.2, braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -cardinal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-1.0.0.tgz#50e21c1b0aa37729f9377def196b5a9cec932ee9" - integrity sha512-INsuF4GyiFLk8C91FPokbKTc/rwHqV4JnfatVZ6GPhguP1qmkRWX2dp5tepYboYdPpGWisLVLI+KsXoXFPRSMg== - dependencies: - ansicolors "~0.2.1" - redeyed "~1.0.0" - catharsis@^0.9.0: version "0.9.0" - resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.9.0.tgz#40382a168be0e6da308c277d3a2b3eb40c7d2121" + resolved "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz" integrity sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A== dependencies: lodash "^4.17.15" -chalk@^1.0.0, chalk@^1.1.1: +chalk@^1.0.0: version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== dependencies: ansi-styles "^2.2.1" @@ -299,7 +303,7 @@ chalk@^1.0.0, chalk@^1.1.1: chalk@^4.1.2, chalk@~4.1.0: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -307,7 +311,7 @@ chalk@^4.1.2, chalk@~4.1.0: cheerio@^0.22.0: version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + resolved "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz" integrity sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA== dependencies: css-select "~1.2.0" @@ -327,9 +331,9 @@ cheerio@^0.22.0: lodash.reject "^4.4.0" lodash.some "^4.4.0" -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.2, chokidar@^3.5.3: +chokidar@^3.5.2, chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0": version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -344,21 +348,21 @@ cheerio@^0.22.0: chosenjs@^1.4.3: version "1.4.3" - resolved "https://registry.yarnpkg.com/chosenjs/-/chosenjs-1.4.3.tgz#7e171cf9443920b8638184c4746035cc0b8d4c21" + resolved "https://registry.npmjs.org/chosenjs/-/chosenjs-1.4.3.tgz" integrity sha512-RMgwgPszZjQgP+PtcuTaXnhWc9bwcqfP8b4QonKU0vvFYb39Y+WRmsGp0xO0E1MYwyEX/ZcFYecprK8sF/8s9A== dependencies: jquery ">=1.4.4" clean-css@~4.1.1: version "4.1.11" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.11.tgz#2ecdf145aba38f54740f26cefd0ff3e03e125d6a" + resolved "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz" integrity sha512-a3ZEe58u+LizPdSCHM0jIGeKu1hN+oqqXXc1i70mnV0x2Ox3/ho1pE6Y8HD6yhDts5lEQs028H9kutlihP77uQ== dependencies: source-map "0.5.x" cliui@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -367,40 +371,40 @@ cliui@^8.0.1: color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colors@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - colors@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + resolved "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz" integrity sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w== +colors@1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + commander@~2.19.0: version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + resolved "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concurrently@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.0.tgz#cdc9f621a4d913366600355d68254df2c5e782f3" - integrity sha512-nnLMxO2LU492mTUj9qX/az/lESonSZu81UznYDoXtz1IQf996ixVqPAgHXwvHiHCAef/7S8HIK+fTFK7Ifk8YA== + version "8.2.1" + resolved "https://registry.npmjs.org/concurrently/-/concurrently-8.2.1.tgz" + integrity sha512-nVraf3aXOpIcNud5pB9M82p1tynmZkrSGQ1p6X/VY8cJ+2LMVqAgXsJxYYefACSHbTYlm92O1xuhdGTjwoEvbQ== dependencies: chalk "^4.1.2" date-fns "^2.30.0" @@ -414,7 +418,7 @@ concurrently@^8.2.0: connect@^3.7.0: version "3.7.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + resolved "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz" integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== dependencies: debug "2.6.9" @@ -424,7 +428,7 @@ connect@^3.7.0: cors@^2.8.5: version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: object-assign "^4" @@ -432,7 +436,7 @@ cors@^2.8.5: cross-spawn@^7.0.0: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -441,7 +445,7 @@ cross-spawn@^7.0.0: css-select@~1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + resolved "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz" integrity sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA== dependencies: boolbase "~1.0.0" @@ -451,145 +455,124 @@ css-select@~1.2.0: css-what@2.1: version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + resolved "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz" integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== -csv-parse@^4.6.5: - version "4.16.3" - resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.3.tgz#7ca624d517212ebc520a36873c3478fa66efbaf7" - integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== - date-fns@^2.30.0: version "2.30.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz" integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== dependencies: "@babel/runtime" "^7.21.0" dateformat@~4.6.2: version "4.6.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" + resolved "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz" integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@^3.2.7: version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + deepmerge@^2.1.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz" integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== define-lazy-prop@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -depd@2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - depd@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +depd@~2.0.0, depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + destroy@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-file@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@^1.0.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" domhandler "^4.2.0" entities "^2.0.0" -dom-serializer@~0.1.0: +dom-serializer@~0.1.0, dom-serializer@0: version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz" integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== dependencies: domelementtype "^1.3.0" entities "^1.1.1" -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: +domelementtype@^1.3.0, domelementtype@^1.3.1, domelementtype@1: version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domhandler@^2.3.0: version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz" integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== dependencies: domelementtype "1" domhandler@^3.0.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz" integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== dependencies: domelementtype "^2.0.1" domhandler@^4.2.0: version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" -domutils@1.5.1: +domutils@^1.5.1, domutils@1.5.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + resolved "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz" integrity sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw== dependencies: dom-serializer "0" domelementtype "1" -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - domutils@^2.0.0: version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" @@ -598,87 +581,87 @@ domutils@^2.0.0: duplexer@^0.1.1, duplexer@~0.1.1: version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== ee-first@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== entities@^1.1.1, entities@~1.1.1: version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + resolved "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== entities@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== entities@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + resolved "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz" integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== esprima@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esprima@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9" - integrity sha512-xoBq/MIShSydNZOkjkoCEjqod963yHNXTLC40ypBhop6yPqflPz/vTinmCfSrGcywVLnSftRf6a0kJLdFdzemw== - etag@~1.8.1: version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== event-stream@4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-4.0.1.tgz#4092808ec995d0dd75ea4580c1df6a74db2cde65" + resolved "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz" integrity sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA== dependencies: duplexer "^0.1.1" @@ -691,36 +674,36 @@ event-stream@4.0.1: eventemitter2@~0.4.13: version "0.4.14" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" + resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz" integrity sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ== exit@~0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== dependencies: homedir-polyfill "^1.0.1" extend@^3.0.1, extend@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== faye-websocket@0.11.4: version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== dependencies: websocket-driver ">=0.5.1" figures@^1.0.1: version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + resolved "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz" integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ== dependencies: escape-string-regexp "^1.0.5" @@ -728,19 +711,19 @@ figures@^1.0.1: file-sync-cmp@^0.1.0: version "0.1.1" - resolved "https://registry.yarnpkg.com/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz#a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b" + resolved "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz" integrity sha512-0k45oWBokCqh2MOexeYKpyqmGKG+8mQ2Wd8iawx+uWd/weWJQAZ6SoPybagdCI4xFisag8iAR77WPm4h3pTfxA== fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" finalhandler@1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: debug "2.6.9" @@ -753,7 +736,7 @@ finalhandler@1.1.2: findup-sync@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" + resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz" integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== dependencies: detect-file "^1.0.0" @@ -763,7 +746,7 @@ findup-sync@^4.0.0: findup-sync@~5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-5.0.0.tgz#54380ad965a7edca00cc8f63113559aadc541bd2" + resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz" integrity sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ== dependencies: detect-file "^1.0.0" @@ -773,7 +756,7 @@ findup-sync@~5.0.0: fined@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" + resolved "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz" integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== dependencies: expand-tilde "^2.0.2" @@ -784,12 +767,12 @@ fined@^1.2.0: flagged-respawn@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" + resolved "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz" integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== foodoc@^0.0.9: version "0.0.9" - resolved "https://registry.yarnpkg.com/foodoc/-/foodoc-0.0.9.tgz#73822ab01bf3446efe86cdd97e86ee64966d563f" + resolved "https://registry.npmjs.org/foodoc/-/foodoc-0.0.9.tgz" integrity sha512-TjswPE8Vd8Wu1AAwu/aet/g0FlxCtEfWmkbFXppMq1FmgdwvH33U/jPJkIggAM7RoLPTB5UvNB5Cgg0PII/smQ== dependencies: cheerio "^0.22.0" @@ -809,19 +792,19 @@ foodoc@^0.0.9: for-in@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== for-own@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + resolved "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz" integrity sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg== dependencies: for-in "^1.0.1" foreground-child@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== dependencies: cross-spawn "^7.0.0" @@ -829,60 +812,72 @@ foreground-child@^3.1.0: fresh@0.5.2: version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== from@^0.1.7: version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + resolved "https://registry.npmjs.org/from/-/from-0.1.7.tgz" integrity sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g== fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== getobject@~1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/getobject/-/getobject-1.0.2.tgz#25ec87a50370f6dcc3c6ba7ef43c4c16215c4c89" + resolved "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz" integrity sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg== glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob@^10.3.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.1.tgz#9789cb1b994515bedb811a6deca735b5c37d2bf4" - integrity sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw== + version "10.3.7" + resolved "https://registry.npmjs.org/glob/-/glob-10.3.7.tgz" + integrity sha512-wCMbE1m9Nx5yD9LYtgsVWq5VhHlk5WzJirw594qZR6AIvQYuHrdDtIktUVjQItalD53y7dqoedu9xP0u0WaxIQ== dependencies: foreground-child "^3.1.0" jackspeak "^2.0.3" minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2" - path-scurry "^1.10.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" -glob@^7.1.2, glob@^7.1.3: +glob@^7.1.2: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -894,7 +889,7 @@ glob@^7.1.2, glob@^7.1.3: glob@~7.1.6: version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== dependencies: fs.realpath "^1.0.0" @@ -906,7 +901,7 @@ glob@~7.1.6: global-modules@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: global-prefix "^1.0.1" @@ -915,7 +910,7 @@ global-modules@^1.0.0: global-prefix@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== dependencies: expand-tilde "^2.0.2" @@ -926,12 +921,12 @@ global-prefix@^1.0.1: graceful-fs@^4.1.9: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== grunt-cli@~1.4.3: version "1.4.3" - resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.4.3.tgz#22c9f1a3d2780bf9b0d206e832e40f8f499175ff" + resolved "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz" integrity sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ== dependencies: grunt-known-options "~2.0.0" @@ -942,7 +937,7 @@ grunt-cli@~1.4.3: grunt-contrib-clean@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/grunt-contrib-clean/-/grunt-contrib-clean-1.1.0.tgz#564abf2d0378a983a15b9e3f30ee75b738c40638" + resolved "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.1.0.tgz" integrity sha512-tET+TYTd8vCtKeGwbLjoH8+SdI8ngVzGbPr7vlWkewG7mYYHIccd2Ldxq+PK3DyBp5Www3ugdkfsjoNKUl5MTg== dependencies: async "^1.5.2" @@ -950,7 +945,7 @@ grunt-contrib-clean@^1.1.0: grunt-contrib-copy@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz#7060c6581e904b8ab0d00f076e0a8f6e3e7c3573" + resolved "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz" integrity sha512-gFRFUB0ZbLcjKb67Magz1yOHGBkyU6uL29hiEW1tdQ9gQt72NuMKIy/kS6dsCbV0cZ0maNCb0s6y+uT1FKU7jA== dependencies: chalk "^1.1.1" @@ -958,7 +953,7 @@ grunt-contrib-copy@^1.0.0: grunt-contrib-cssmin@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/grunt-contrib-cssmin/-/grunt-contrib-cssmin-2.2.1.tgz#64cbebe60134bc1270ca4154514ec4007cc16f7f" + resolved "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-2.2.1.tgz" integrity sha512-IXNomhQ5ekVZbDbj/ik5YccoD9khU6LT2fDXqO1+/Txjq8cp0tQKjVS8i8EAbHOrSDkL7/UD6A7b+xj98gqh9w== dependencies: chalk "^1.0.0" @@ -967,7 +962,7 @@ grunt-contrib-cssmin@^2.2.1: grunt-contrib-uglify@^3.3.0: version "3.4.0" - resolved "https://registry.yarnpkg.com/grunt-contrib-uglify/-/grunt-contrib-uglify-3.4.0.tgz#8a51ab330be05ef62b11b2833abd3e955e85af03" + resolved "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-3.4.0.tgz" integrity sha512-UXsTpeP0pytpTYlmll3RDndsRXfdwmrf1tI/AtD/PrArQAzGmKMvj83aVt3D8egWlE6KqPjsJBLCCvfC52LI/A== dependencies: chalk "^1.0.0" @@ -977,12 +972,12 @@ grunt-contrib-uglify@^3.3.0: grunt-known-options@~2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/grunt-known-options/-/grunt-known-options-2.0.0.tgz#cac641e897f9a0a680b8c9839803d35f3325103c" + resolved "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz" integrity sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA== grunt-legacy-log-utils@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz#49a8c7dc74051476dcc116c32faf9db8646856ef" + resolved "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz" integrity sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw== dependencies: chalk "~4.1.0" @@ -990,7 +985,7 @@ grunt-legacy-log-utils@~2.1.0: grunt-legacy-log@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz#1c6eaf92371ea415af31ea84ce50d434ef6d39c4" + resolved "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz" integrity sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA== dependencies: colors "~1.1.2" @@ -1000,7 +995,7 @@ grunt-legacy-log@~3.0.0: grunt-legacy-util@~2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz#0f929d13a2faf9988c9917c82bff609e2d9ba255" + resolved "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz" integrity sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w== dependencies: async "~3.2.0" @@ -1011,9 +1006,9 @@ grunt-legacy-util@~2.0.1: underscore.string "~3.3.5" which "~2.0.2" -grunt@^1.0.2: +grunt@^1.0.2, grunt@>=0.4.5: version "1.6.1" - resolved "https://registry.yarnpkg.com/grunt/-/grunt-1.6.1.tgz#0b4dd1524f26676dcf45d8f636b8d9061a8ede16" + resolved "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz" integrity sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA== dependencies: dateformat "~4.6.2" @@ -1032,23 +1027,23 @@ grunt@^1.0.2: gzip-size@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz" integrity sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w== dependencies: duplexer "^0.1.1" handlebars-layouts@^3.1.4: version "3.1.4" - resolved "https://registry.yarnpkg.com/handlebars-layouts/-/handlebars-layouts-3.1.4.tgz#26b3beb931b4b877dfbf7e6feaf4058ee6228b02" + resolved "https://registry.npmjs.org/handlebars-layouts/-/handlebars-layouts-3.1.4.tgz" integrity sha512-2llBmvnj8ueOfxNHdRzJOcgalzZjYVd9+WAl93kPYmlX4WGx7FTHTzNxhK+i9YKY2OSjzfehgpLiIwP/OJr6tw== handlebars@^4.0.11: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + version "4.7.8" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: minimist "^1.2.5" - neo-async "^2.6.0" + neo-async "^2.6.2" source-map "^0.6.1" wordwrap "^1.0.0" optionalDependencies: @@ -1056,43 +1051,43 @@ handlebars@^4.0.11: has-ansi@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== dependencies: ansi-regex "^2.0.0" has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" homedir-polyfill@^1.0.1: version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== dependencies: parse-passwd "^1.0.0" hooker@~0.2.3: version "0.2.3" - resolved "https://registry.yarnpkg.com/hooker/-/hooker-0.2.3.tgz#b834f723cc4a242aa65963459df6d984c5d3d959" + resolved "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" integrity sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA== htmlparser2@^3.9.1: version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz" integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== dependencies: domelementtype "^1.3.1" @@ -1104,7 +1099,7 @@ htmlparser2@^3.9.1: htmlparser2@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz" integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== dependencies: domelementtype "^2.0.1" @@ -1114,12 +1109,12 @@ htmlparser2@^4.1.0: http-auth-connect@^1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/http-auth-connect/-/http-auth-connect-1.0.6.tgz#7b9fd411f8806efd1244e703477171c08396d503" + resolved "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz" integrity sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw== http-auth@4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/http-auth/-/http-auth-4.2.0.tgz#9bb119ba22273b63a50796363d298eed3bdbadae" + resolved "https://registry.npmjs.org/http-auth/-/http-auth-4.2.0.tgz" integrity sha512-trIkGI7dgnFJ5k8YaQFSr1Q5uq9c19vK6Y9ZCjlY0zBEQgdJpXZU3Cyrmk4nwrAGy4pKJhs599o7q6eicbVnhw== dependencies: apache-crypt "^1.1.2" @@ -1127,9 +1122,19 @@ http-auth@4.2.0: bcryptjs "^2.4.3" uuid "^8.3.2" +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-errors@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -1138,81 +1143,66 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-parser-js@>=0.5.1: version "0.5.8" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== -humanize@^0.0.9: - version "0.0.9" - resolved "https://registry.yarnpkg.com/humanize/-/humanize-0.0.9.tgz#1994ffaecdfe9c441ed2bdac7452b7bb4c9e41a4" - integrity sha512-bvZZ7vXpr1RKoImjuQ45hJb5OvE2oJafHysiD/AL3nkqTZH2hFCjQ3YZfCd63FefDitbJze/ispUPP0gfDsT2Q== - iconv-lite@~0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" ignore-by-default@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== immutable@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be" - integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg== + version "4.3.4" + resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz" + integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3: +inherits@^2.0.1, inherits@^2.0.3, inherits@2, inherits@2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== ini@^1.3.4: version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== interactjs@^1.3.3: - version "1.10.17" - resolved "https://registry.yarnpkg.com/interactjs/-/interactjs-1.10.17.tgz#aed66a63020cd092236133f9149e6448dc405d72" - integrity sha512-grjHJgnWkCoQLmAlk2yalNd1r0ztUhXLJNVjSOfWn1wfNNgU2tx1cDEkro9WYerDNC9UG3MZTeD4O6zOM5gbIA== + version "1.10.19" + resolved "https://registry.npmjs.org/interactjs/-/interactjs-1.10.19.tgz" + integrity sha512-5zWXBrfLnXAyhrxKlhRiud/JxWd3GvZkvdTf8bqjeHWDx9zgiu+qFNA3nnJMszadFCig2GU5zKx9PYrkT87OKA== dependencies: - "@interactjs/types" "1.10.17" + "@interactjs/types" "1.10.19" interpret@~1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + resolved "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz" integrity sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA== is-absolute@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + resolved "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz" integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== dependencies: is-relative "^1.0.0" @@ -1220,92 +1210,92 @@ is-absolute@^1.0.0: is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" -is-core-module@^2.11.0: - version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: has "^1.0.3" is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-relative@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + resolved "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz" integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== dependencies: is-unc-path "^1.0.0" is-unc-path@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + resolved "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz" integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== dependencies: unc-path-regex "^0.1.2" is-windows@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== jackspeak@^2.0.3: - version "2.2.1" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" - integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== + version "2.3.3" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz" + integrity sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: @@ -1313,19 +1303,26 @@ jackspeak@^2.0.3: jquery-extendext@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/jquery-extendext/-/jquery-extendext-1.0.0.tgz#00d6615e2ef7da630fbced293910002a1b281ee1" + resolved "https://registry.npmjs.org/jquery-extendext/-/jquery-extendext-1.0.0.tgz" integrity sha512-gDJjpQ8ISd4ZMwSn0yXSuyufsPMCeWtWJ8kmqE85VromJqyVT2sdkHzS5yL0w1GK81UpOzmr2f9JgFln2sbJSg== dependencies: jquery ">=1.9.1" -jquery@>=1.4.4, jquery@>=1.9.1, jquery@^3.5.1: - version "3.7.0" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.0.tgz#fe2c01a05da500709006d8790fe21c8a39d75612" - integrity sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ== +jquery-ui@^1.13.2: + version "1.13.2" + resolved "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.13.2.tgz" + integrity sha512-wBZPnqWs5GaYJmo1Jj0k/mrSkzdQzKDwhXNtHKcBdAcKVxMM3KNYFq+iJ2i1rwiG53Z8M4mTn3Qxrm17uH1D4Q== + dependencies: + jquery ">=1.8.0 <4.0.0" + +"jquery@^1.7.0 || ^2 || ^3", jquery@^3.5.1, jquery@>=1.4.4, "jquery@>=1.8.0 <4.0.0", jquery@>=1.9.1, "jquery@1.9.1 - 3": + version "3.7.1" + resolved "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz" + integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== js-yaml@~3.14.0: version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" @@ -1333,14 +1330,14 @@ js-yaml@~3.14.0: js2xmlparser@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-4.0.2.tgz#2a1fdf01e90585ef2ae872a01bc169c6a8d5e60a" + resolved "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz" integrity sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA== dependencies: xmlcreate "^2.0.4" jsdoc@^3.5.5: version "3.6.11" - resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-3.6.11.tgz#8bbb5747e6f579f141a5238cbad4e95e004458ce" + resolved "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz" integrity sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg== dependencies: "@babel/parser" "^7.9.4" @@ -1361,19 +1358,19 @@ jsdoc@^3.5.5: kind-of@^6.0.2: version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== klaw@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146" + resolved "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz" integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g== dependencies: graceful-fs "^4.1.9" liftup@~3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/liftup/-/liftup-3.0.1.tgz#1cb81aff0f368464ed3a5f1a7286372d6b1a60ce" + resolved "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz" integrity sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw== dependencies: extend "^3.0.2" @@ -1387,111 +1384,111 @@ liftup@~3.0.1: linkify-it@^3.0.1: version "3.0.3" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e" + resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz" integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ== dependencies: uc.micro "^1.0.1" lodash.assignin@^4.0.9: version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + resolved "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz" integrity sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg== lodash.bind@^4.1.4: version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + resolved "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz" integrity sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA== lodash.defaults@^4.0.1: version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz" integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== lodash.filter@^4.4.0: version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + resolved "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz" integrity sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ== lodash.flatten@^4.2.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + resolved "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz" integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== lodash.foreach@^4.3.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + resolved "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz" integrity sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ== lodash.map@^4.4.0: version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + resolved "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz" integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== lodash.merge@^4.4.0: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.pick@^4.2.1: version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + resolved "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz" integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== lodash.reduce@^4.4.0: version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + resolved "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz" integrity sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw== lodash.reject@^4.4.0: version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + resolved "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz" integrity sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ== lodash.some@^4.4.0: version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + resolved "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz" integrity sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ== -lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21, lodash@~4.17.19, lodash@~4.17.21: +lodash@^4.17.15, lodash@^4.17.21, lodash@~4.17.19, lodash@~4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== "lru-cache@^9.1.1 || ^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" - integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== + version "10.0.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz" + integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== lunr@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-1.0.0.tgz#5c9276c92c91ac35a9241b5018d46723d92e2f5f" + resolved "https://registry.npmjs.org/lunr/-/lunr-1.0.0.tgz" integrity sha512-vGgr9YUMBfL1izpsb4RASwPz58JSSdmcTocuCs2v0PyGU3e7CDJWuS5psl4O2m9t0CsNemeR+jhxu2xNkXCM2A== make-iterator@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" + resolved "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz" integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== dependencies: kind-of "^6.0.2" map-cache@^0.2.0: version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== map-stream@0.0.7: version "0.0.7" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.0.7.tgz#8a1f07896d82b10926bd3744a2420009f88974a8" + resolved "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz" integrity sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ== markdown-it-anchor@^8.4.1: version "8.6.7" - resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz#ee6926daf3ad1ed5e4e3968b1740eef1c6399634" + resolved "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz" integrity sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA== -markdown-it@^12.3.2: +markdown-it@*, markdown-it@^12.3.2: version "12.3.2" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90" + resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz" integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg== dependencies: argparse "^2.0.1" @@ -1502,12 +1499,12 @@ markdown-it@^12.3.2: marked@^4.0.10: version "4.3.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + resolved "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz" integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== maxmin@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/maxmin/-/maxmin-2.1.0.tgz#4d3b220903d95eee7eb7ac7fa864e72dc09a3166" + resolved "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz" integrity sha512-NWlApBjW9az9qRPaeg7CX4sQBWwytqz32bIEo1PW9pRW+kBP9KLRfJO3UC+TV31EcQZEUq7eMzikC7zt3zPJcw== dependencies: chalk "^1.0.0" @@ -1517,88 +1514,85 @@ maxmin@^2.1.0: mdurl@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + resolved "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz" integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" picomatch "^2.3.1" -microplugin@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/microplugin/-/microplugin-0.0.3.tgz#1fc2e1bb7c9e19e82bd84bba9137bbe71250d8cd" - integrity sha512-3wKXex4/iyALV0GX2juow66J9dabkEMgHeZAihdLTaRTzm0N+RubXioNPpfIQDPuBRxr3JbjNt7B0Lr/3yE9yQ== - mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@~2.1.17, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@~3.0.4: + version "3.0.8" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz" + integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.1.1: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@^9.0.1: - version "9.0.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.2.tgz#397e387fff22f6795844d00badc903a3d5de7057" - integrity sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg== +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: - brace-expansion "^2.0.1" + brace-expansion "^1.1.7" -minimatch@~3.0.4: - version "3.0.8" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" - integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== +minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: - brace-expansion "^1.1.7" + brace-expansion "^2.0.1" minimist@^1.2.5: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw== - -"minipass@^5.0.0 || ^6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" - integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.3" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz" + integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg== mkdirp@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== moment@^2.22.1, moment@^2.29.1: version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== morgan@^1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" + resolved "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz" integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== dependencies: basic-auth "~2.0.1" @@ -1607,29 +1601,34 @@ morgan@^1.10.0: on-finished "~2.3.0" on-headers "~1.0.2" +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.3, ms@^2.1.1: +ms@2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== negotiator@0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.6.0: +neo-async@^2.6.2: version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nodemon@^2.0.22: version "2.0.22" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz" integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== dependencies: chokidar "^3.5.2" @@ -1645,21 +1644,21 @@ nodemon@^2.0.22: nopt@~1.0.10: version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== dependencies: abbrev "1" nopt@~3.0.6: version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + resolved "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz" integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== dependencies: abbrev "1" nopt@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + resolved "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz" integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== dependencies: abbrev "1" @@ -1667,29 +1666,29 @@ nopt@~4.0.1: normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== nth-check@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== dependencies: boolbase "~1.0.0" number-is-nan@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object.defaults@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" + resolved "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz" integrity sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA== dependencies: array-each "^1.0.1" @@ -1699,7 +1698,7 @@ object.defaults@^1.1.0: object.map@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" + resolved "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz" integrity sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w== dependencies: for-own "^1.0.0" @@ -1707,67 +1706,59 @@ object.map@^1.0.1: object.pick@^1.2.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - on-finished@~2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== dependencies: ee-first "1.1.1" +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + on-headers@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@^1.3.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" open@^8.4.2: version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz" integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== dependencies: define-lazy-prop "^2.0.0" is-docker "^2.1.1" is-wsl "^2.2.0" -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g== - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - os-homedir@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== os-tmpdir@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== osenv@^0.1.4: version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" @@ -1775,7 +1766,7 @@ osenv@^0.1.4: parse-filepath@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" + resolved "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz" integrity sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q== dependencies: is-absolute "^1.0.0" @@ -1784,74 +1775,74 @@ parse-filepath@^1.0.1: parse-passwd@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== parse-srcset@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" + resolved "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz" integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-root-regex@^0.1.0: version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + resolved "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz" integrity sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ== path-root@^0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + resolved "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz" integrity sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg== dependencies: path-root-regex "^0.1.0" -path-scurry@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.0.tgz#0ffbd4c1f7de9600f98a1405507d9f9acb438ab3" - integrity sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g== +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== dependencies: lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" pause-stream@^0.0.11: version "0.0.11" - resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + resolved "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz" integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A== dependencies: through "~2.3" picocolors@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz" integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== postcss@^7.0.27: version "7.0.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" + resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== dependencies: picocolors "^0.2.1" @@ -1859,29 +1850,29 @@ postcss@^7.0.27: pretty-bytes@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf" + resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz" integrity sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow== dependencies: number-is-nan "^1.0.0" proxy-middleware@^0.15.0: version "0.15.0" - resolved "https://registry.yarnpkg.com/proxy-middleware/-/proxy-middleware-0.15.0.tgz#a3fdf1befb730f951965872ac2f6074c61477a56" + resolved "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz" integrity sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q== pstree.remy@^1.1.8: version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== readable-stream@^3.1.1: version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -1890,91 +1881,84 @@ readable-stream@^3.1.1: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" rechoir@^0.7.0: version "0.7.1" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz" integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== dependencies: resolve "^1.9.0" -redeyed@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-1.0.1.tgz#e96c193b40c0816b00aec842698e61185e55498a" - integrity sha512-8eEWsNCkV2rvwKLS1Cvp5agNjMhwRe2um+y32B2+3LqOzg4C9BBPs6vzAfV16Ivb8B9HPNKIqd8OrdBws8kNlQ== - dependencies: - esprima "~3.0.0" - -regenerator-runtime@^0.13.11: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== requizzle@^0.2.3: version "0.2.4" - resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.4.tgz#319eb658b28c370f0c20f968fa8ceab98c13d27c" + resolved "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz" integrity sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw== dependencies: lodash "^4.17.21" resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== dependencies: expand-tilde "^2.0.0" global-modules "^1.0.0" resolve@^1.19.0, resolve@^1.9.0: - version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + version "1.22.6" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz" + integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== dependencies: - is-core-module "^2.11.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" rimraf@^2.5.1: version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" rxjs@^7.8.1: version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" -safe-buffer@5.1.2: +safe-buffer@>=5.1.0, safe-buffer@5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@~5.2.0: +safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sanitize-html@^1.18.2: version "1.27.5" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.27.5.tgz#6c8149462adb23e360e1bb71cc0bae7f08c823c7" + resolved "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.27.5.tgz" integrity sha512-M4M5iXDAUEcZKLXkmk90zSYWEtk5NH3JmojQxKxV371fnMh+x9t1rqdmXaGoyEHw3z/X/8vnFhKjGL5xFGOJ3A== dependencies: htmlparser2 "^4.1.0" @@ -1983,35 +1967,27 @@ sanitize-html@^1.18.2: postcss "^7.0.27" sass@^1.63.6: - version "1.63.6" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.63.6.tgz#481610e612902e0c31c46b46cf2dad66943283ea" - integrity sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw== + version "1.68.0" + resolved "https://registry.npmjs.org/sass/-/sass-1.68.0.tgz" + integrity sha512-Lmj9lM/fef0nQswm1J2HJcEsBUba4wgNx2fea6yJHODREoMFnwRpZydBnX/RjyXw2REIwdkbqE4hrTo4qfDBUA== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" -selectize@^0.12.4: - version "0.12.6" - resolved "https://registry.yarnpkg.com/selectize/-/selectize-0.12.6.tgz#c2cf08cbaa4cb06c5e99bb452919d71b080690d6" - integrity sha512-bWO5A7G+I8+QXyjLfQUgh31VI4WKYagUZQxAXlDyUmDDNrFxrASV0W9hxCOl0XJ/XQ1dZEu3G9HjXV4Wj0yb6w== - dependencies: - microplugin "0.0.3" - sifter "^0.5.1" - semver@^5.7.1: version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@~7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== send@^0.18.0: version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" @@ -2030,7 +2006,7 @@ send@^0.18.0: serve-index@^1.9.1: version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== dependencies: accepts "~1.3.4" @@ -2043,117 +2019,136 @@ serve-index@^1.9.1: setprototypeof@1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.8.1: version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== -sifter@^0.5.1: - version "0.5.4" - resolved "https://registry.yarnpkg.com/sifter/-/sifter-0.5.4.tgz#3cb9e514889edfc887d8d87a355841b01ebdd1ab" - integrity sha512-t2yxTi/MM/ESup7XH5oMu8PUcttlekt269RqxARgnvS+7D/oP6RyA1x3M/5w8dG9OgkOyQ8hNRWelQ8Rj4TAQQ== - dependencies: - async "^2.6.0" - cardinal "^1.0.0" - csv-parse "^4.6.5" - humanize "^0.0.9" - optimist "^0.6.1" - signal-exit@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" - integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== + version "4.1.0" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== simple-update-notifier@^1.0.7: version "1.1.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" + resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz" integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== dependencies: semver "~7.0.0" "source-map-js@>=0.6.2 <2.0.0": version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map@0.5.x: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.6.1, source-map@~0.6.1: +source-map@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@0.5.x: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + spawn-command@0.0.2: version "0.0.2" - resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" + resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz" integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== split@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz" integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== dependencies: through "2" sprintf-js@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + version "1.1.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sql-parser-mistic@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/sql-parser-mistic/-/sql-parser-mistic-1.2.3.tgz#338b8685bd9fe7844df0dccc01afc2ebca0950ea" + resolved "https://registry.npmjs.org/sql-parser-mistic/-/sql-parser-mistic-1.2.3.tgz" integrity sha512-2jyVSr7jIgbeFnPW8JO4hTMkDP5mTxbbWX+P7GcCbCwHp+ffiJeQGBK4dDLoPZvexK2Wgy0aUBfsWgc2DPhYRg== -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - "statuses@>= 1.4.0 < 2", statuses@~1.5.0: version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + stream-combiner@^0.2.2: version "0.2.2" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.2.2.tgz#aec8cbac177b56b6f4fa479ced8c1912cee52858" + resolved "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz" integrity sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ== dependencies: duplexer "~0.1.1" through "~2.3.4" -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -2162,129 +2157,124 @@ stream-combiner@^0.2.2: string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1: version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-json-comments@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== supports-color@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== supports-color@^5.5.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@^8.1.1: version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== taffydb@2.6.2: version "2.6.2" - resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268" + resolved "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz" integrity sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA== -through@2, through@^2.3.8, through@~2.3, through@~2.3.4: +through@^2.3.8, through@~2.3, through@~2.3.4, through@2: version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== touch@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== dependencies: nopt "~1.0.10" tree-kill@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== tslib@^2.1.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== + version "2.6.2" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" - resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - -uglify-js@~3.4.0: +uglify-js@^3.1.4, uglify-js@~3.4.0: version "3.4.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz" integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== dependencies: commander "~2.19.0" @@ -2292,17 +2282,17 @@ uglify-js@~3.4.0: unc-path-regex@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + resolved "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz" integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== undefsafe@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== underscore.string@~3.3.5: version "3.3.6" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.6.tgz#ad8cf23d7423cb3b53b898476117588f4e2f9159" + resolved "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz" integrity sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ== dependencies: sprintf-js "^1.1.1" @@ -2310,54 +2300,54 @@ underscore.string@~3.3.5: underscore@~1.13.2: version "1.13.6" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" + resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz" integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== unix-crypt-td-js@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz#4912dfad1c8aeb7d20fa0a39e4c31918c1d5d5dd" + resolved "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz" integrity sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw== unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== uri-path@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/uri-path/-/uri-path-1.0.0.tgz#9747f018358933c31de0fccfd82d138e67262e32" + resolved "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz" integrity sha512-8pMuAn4KacYdGMkFaoQARicp4HSw24/DHOVKWqVRJ8LhhAwPPFpdGvdL9184JVmUwe7vz7Z9n6IqI6t5n2ELdg== util-deprecate@^1.0.1, util-deprecate@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@^8.3.2: version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8flags@~3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" + resolved "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz" integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== dependencies: homedir-polyfill "^1.0.1" vary@^1: version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== websocket-driver@>=0.5.1: version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: http-parser-js ">=0.5.1" @@ -2366,36 +2356,40 @@ websocket-driver@>=0.5.1: websocket-extensions@>=0.1.1: version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== which@^1.2.14: version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" which@^2.0.1, which@~2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw== +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -2404,7 +2398,7 @@ wordwrap@~0.0.2: wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" @@ -2413,27 +2407,27 @@ wrap-ansi@^8.1.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== xmlcreate@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.4.tgz#0c5ab0f99cdd02a81065fa9cd8f8ae87624889be" + resolved "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz" integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs@^17.7.2: version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" From cf7728fd9da62c91b1a4ced1fe43e3b22ff188d3 Mon Sep 17 00:00:00 2001 From: mistic100 Date: Tue, 30 Jan 2024 18:58:42 +0100 Subject: [PATCH 105/107] Update README.md --- README.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/README.md b/README.md index af82fa55..f0fd8ab7 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,6 @@ [![npm version](https://img.shields.io/npm/v/jQuery-QueryBuilder.svg?style=flat-square)](https://www.npmjs.com/package/jQuery-QueryBuilder) [![jsDelivr CDN](https://data.jsdelivr.com/v1/package/npm/jQuery-QueryBuilder/badge)](https://www.jsdelivr.com/package/npm/jQuery-QueryBuilder) [![Build Status](https://github.com/mistic100/jQuery-QueryBuilder/workflows/CI/badge.svg)](https://github.com/mistic100/jQuery-QueryBuilder/actions) -[![Dependencies Status](https://david-dm.org/mistic100/jQuery-QueryBuilder/status.svg?style=flat-square)](https://david-dm.org/mistic100/jQuery-QueryBuilder) [![gitlocalized](https://gitlocalize.com/repo/5259/whole_project/badge.svg)](https://gitlocalize.com/repo/5259/whole_project?utm_source=badge) jQuery plugin offering an simple interface to create complex queries. @@ -37,16 +36,11 @@ jQuery-QueryBuilder is available on [jsDelivr](https://www.jsdelivr.com/package/ * [Bootstrap 5](https://getbootstrap.com/docs/5.3/) CSS and bundle.js which includes `Popper` for tooltips and popovers * [Bootstrap Icons](https://icons.getbootstrap.com/) * [jQuery.extendext](https://github.com/mistic100/jQuery.extendext) - * [doT.js](https://olado.github.io/doT) * [MomentJS](https://momentjs.com) (optional, for Date/Time validation) * [SQL Parser](https://github.com/mistic100/sql-parser) (optional, for SQL methods) * Other Bootstrap/jQuery plugins used by plugins -($.extendext and doT.js are directly included in the [standalone](https://github.com/mistic100/jQuery-QueryBuilder/blob/master/dist/js/query-builder.standalone.js) file) - -### Browser support - * Internet Explorer >= 11 - * All other recent browsers +($.extendext is directly included in the [standalone](https://github.com/mistic100/jQuery-QueryBuilder/blob/master/dist/js/query-builder.standalone.js) file) From cb1f9ee2a5a6025db46b2a2afbd8d6678e4ff5fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Jul 2024 15:40:35 +0200 Subject: [PATCH 106/107] Bump braces from 3.0.2 to 3.0.3 (#1003) Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3. - [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3) --- updated-dependencies: - dependency-name: braces dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 229 ++++++++++++++++++++---------------------------------- 1 file changed, 85 insertions(+), 144 deletions(-) diff --git a/yarn.lock b/yarn.lock index ed03d7c4..3a1b8f09 100644 --- a/yarn.lock +++ b/yarn.lock @@ -36,7 +36,7 @@ resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@popperjs/core@^2.0.0", "@popperjs/core@^2.11.8": +"@popperjs/core@^2.11.8": version "2.11.8" resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== @@ -53,7 +53,7 @@ resolved "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz" integrity sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g== -"@types/markdown-it@*", "@types/markdown-it@^12.2.3": +"@types/markdown-it@^12.2.3": version "12.2.3" resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz" integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ== @@ -235,17 +235,12 @@ bootstrap-icons@^1.11.3: resolved "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.11.3.tgz" integrity sha512-+3lpHrCw/it2/7lBL15VR0HEumaBss0+f/Lb6ZvHISn1mlK83jjFpooTLsMWbIjJMDjDjOExMsTxnXSIT4k4ww== -bootstrap-select@^1.14.0-beta3: - version "1.14.0-beta3" - resolved "https://registry.npmjs.org/bootstrap-select/-/bootstrap-select-1.14.0-beta3.tgz" - integrity sha512-wYUDY4NAYBcNydXybE7wh3+ucyf+AcUOhZ+e0TFIoZ38A+k/3BVT1RPl5f0CiPxAexP1IQuqALKMqI8wtZS71A== - bootstrap-slider@^10.0.0: version "10.6.2" resolved "https://registry.npmjs.org/bootstrap-slider/-/bootstrap-slider-10.6.2.tgz" integrity sha512-8JTPZB9QVOdrGzYF3YgC3YW6ssfPeBvBwZnXffiZ7YH/zz1D0EKlZvmQsm/w3N0XjVNYQEoQ0ax+jHrErV4K1Q== -"bootstrap@^4.4.0 || ^5.0.0", bootstrap@^5.3.0, bootstrap@>=3.0.0: +bootstrap@^5.3.0: version "5.3.2" resolved "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz" integrity sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g== @@ -266,11 +261,11 @@ brace-expansion@^2.0.1: balanced-match "^1.0.0" braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" catharsis@^0.9.0: version "0.9.0" @@ -279,18 +274,7 @@ catharsis@^0.9.0: dependencies: lodash "^4.17.15" -chalk@^1.0.0: - version "1.1.3" - resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" - integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^1.1.1: +chalk@^1.0.0, chalk@^1.1.1: version "1.1.3" resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== @@ -331,7 +315,7 @@ cheerio@^0.22.0: lodash.reject "^4.4.0" lodash.some "^4.4.0" -chokidar@^3.5.2, chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0": +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -381,16 +365,16 @@ color-name@~1.1.4: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz" - integrity sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w== - colors@1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz" + integrity sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w== + commander@~2.19.0: version "2.19.0" resolved "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz" @@ -470,13 +454,6 @@ dateformat@~4.6.2: resolved "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz" integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - debug@2.6.9: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" @@ -484,6 +461,13 @@ debug@2.6.9: dependencies: ms "2.0.0" +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + deepmerge@^2.1.0: version "2.2.1" resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz" @@ -494,16 +478,16 @@ define-lazy-prop@^2.0.0: resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== +depd@2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + depd@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== -depd@~2.0.0, depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - destroy@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" @@ -514,6 +498,14 @@ detect-file@^1.0.0: resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== +dom-serializer@0, dom-serializer@~0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + dependencies: + domelementtype "^1.3.0" + entities "^1.1.1" + dom-serializer@^1.0.1: version "1.4.1" resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" @@ -523,15 +515,7 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" -dom-serializer@~0.1.0, dom-serializer@0: - version "0.1.1" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -domelementtype@^1.3.0, domelementtype@^1.3.1, domelementtype@1: +domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== @@ -562,7 +546,7 @@ domhandler@^4.2.0: dependencies: domelementtype "^2.2.0" -domutils@^1.5.1, domutils@1.5.1: +domutils@1.5.1, domutils@^1.5.1: version "1.5.1" resolved "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz" integrity sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw== @@ -634,12 +618,7 @@ escape-html@~1.0.3: resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.2: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== @@ -714,10 +693,10 @@ file-sync-cmp@^0.1.0: resolved "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz" integrity sha512-0k45oWBokCqh2MOexeYKpyqmGKG+8mQ2Wd8iawx+uWd/weWJQAZ6SoPybagdCI4xFisag8iAR77WPm4h3pTfxA== -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -863,19 +842,7 @@ glob@^10.3.1: minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry "^1.10.1" -glob@^7.1.2: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3: +glob@^7.1.2, glob@^7.1.3: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -1006,7 +973,7 @@ grunt-legacy-util@~2.0.1: underscore.string "~3.3.5" which "~2.0.2" -grunt@^1.0.2, grunt@>=0.4.5: +grunt@^1.0.2: version "1.6.1" resolved "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz" integrity sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA== @@ -1122,16 +1089,6 @@ http-auth@4.2.0: bcryptjs "^2.4.3" uuid "^8.3.2" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -1143,6 +1100,16 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" @@ -1173,7 +1140,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.1, inherits@^2.0.3, inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1315,7 +1282,7 @@ jquery-ui@^1.13.2: dependencies: jquery ">=1.8.0 <4.0.0" -"jquery@^1.7.0 || ^2 || ^3", jquery@^3.5.1, jquery@>=1.4.4, "jquery@>=1.8.0 <4.0.0", jquery@>=1.9.1, "jquery@1.9.1 - 3": +jquery@>=1.4.4, "jquery@>=1.8.0 <4.0.0", jquery@>=1.9.1, jquery@^3.5.1: version "3.7.1" resolved "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz" integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== @@ -1486,7 +1453,7 @@ markdown-it-anchor@^8.4.1: resolved "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz" integrity sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA== -markdown-it@*, markdown-it@^12.3.2: +markdown-it@^12.3.2: version "12.3.2" resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz" integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg== @@ -1549,14 +1516,7 @@ minimatch@^3.0.4, minimatch@~3.0.4: dependencies: brace-expansion "^1.1.7" -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.1.2: +minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -1601,17 +1561,12 @@ morgan@^1.10.0: on-finished "~2.3.0" on-headers "~1.0.2" -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.3: +ms@2.1.3, ms@^2.1.1: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -1711,13 +1666,6 @@ object.pick@^1.2.0: dependencies: isobject "^3.0.1" -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" - integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== - dependencies: - ee-first "1.1.1" - on-finished@2.4.1: version "2.4.1" resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" @@ -1725,6 +1673,13 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + on-headers@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" @@ -1941,7 +1896,7 @@ rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-buffer@>=5.1.0, safe-buffer@5.1.2: +safe-buffer@5.1.2, safe-buffer@>=5.1.0: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -2061,21 +2016,16 @@ simple-update-notifier@^1.0.7: resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - source-map@0.5.x: version "0.5.7" resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== +source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + spawn-command@0.0.2: version "0.0.2" resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz" @@ -2103,16 +2053,16 @@ sql-parser-mistic@^1.2.3: resolved "https://registry.npmjs.org/sql-parser-mistic/-/sql-parser-mistic-1.2.3.tgz" integrity sha512-2jyVSr7jIgbeFnPW8JO4hTMkDP5mTxbbWX+P7GcCbCwHp+ffiJeQGBK4dDLoPZvexK2Wgy0aUBfsWgc2DPhYRg== -"statuses@>= 1.4.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - statuses@2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +"statuses@>= 1.4.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + stream-combiner@^0.2.2: version "0.2.2" resolved "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz" @@ -2121,13 +2071,6 @@ stream-combiner@^0.2.2: duplexer "~0.1.1" through "~2.3.4" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" @@ -2137,16 +2080,7 @@ string_decoder@^1.1.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -2164,6 +2098,13 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" @@ -2233,7 +2174,7 @@ taffydb@2.6.2: resolved "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz" integrity sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA== -through@^2.3.8, through@~2.3, through@~2.3.4, through@2: +through@2, through@^2.3.8, through@~2.3, through@~2.3.4: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== From 90d265c2fa92cef699d32a458552246b26fc0480 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Sep 2024 09:48:48 +0200 Subject: [PATCH 107/107] Bump micromatch from 4.0.5 to 4.0.8 (#1006) Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.5 to 4.0.8. - [Release notes](https://github.com/micromatch/micromatch/releases) - [Changelog](https://github.com/micromatch/micromatch/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/micromatch/compare/4.0.5...4.0.8) --- updated-dependencies: - dependency-name: micromatch dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3a1b8f09..335e4817 100644 --- a/yarn.lock +++ b/yarn.lock @@ -260,7 +260,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: +braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -1485,11 +1485,11 @@ mdurl@^1.0.1: integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" mime-db@1.52.0: