diff options
Diffstat (limited to 'srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/src/MySQL.js')
| -rw-r--r-- | srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/src/MySQL.js | 251 |
1 files changed, 251 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/src/MySQL.js b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/src/MySQL.js new file mode 100644 index 0000000..99f4561 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/src/MySQL.js @@ -0,0 +1,251 @@ +'use strict'; + +const common = require(__dirname + '/common'); +const cleaner = require(__dirname + '/cleaner'); + +/** + * Complete a doc element with info found in table + * @param {HTMLTableRowElement[]} rows The table rows + * @param {Object} doc The doc object + */ +function completeDoc($, rows, doc) { + $(rows).each((i, elem) => { + let tds = $(elem).find('td'); // first is key and last is value + var name = tds + .first() + .text() + .toLowerCase() + .trim(); + var value = tds.last(); + switch (name) { + case 'dynamic': + doc.dynamic = + value + .text() + .toLowerCase() + .trim() === 'yes'; + break; + case 'name': + doc.name = value.text().trim(); + break; + case 'system variable': + // Do not overwrite the name + if (typeof doc.name === 'undefined') { + doc.name = value + .text() + .toLowerCase() + .trim(); + } + break; + case 'scope': + let scope = value.text().toLowerCase(); + if (scope === 'both') { + // found on mysql-cluster-options-variables.html + doc.scope = ['global', 'session']; + } else if (scope != '') { + doc.scope = scope.split(',').map(item => { + if (item.match(/session/)) { + return 'session'; + } else if (item.match(/global/)) { + return 'global'; + } else { + return item.trim(); + } + }); + } + if (doc.scope !== undefined) { + doc.scope = doc.scope.filter(function(e) { + return e === 0 || e; + }); + } + break; + case 'type': + let type = value + .text() + .toLowerCase() + .trim(); + if (type != '') { + doc.type = cleaner.cleanType(type); + } + break; + case 'default value': + case 'default, range': + doc.default = cleaner.cleanDefault(value.text().trim()); + break; + case 'valid values': + doc.validValues = $(value) + .find('code') + .get() + .map(el => $(el).text()); + break; + case 'minimum value': + if (doc.range == undefined) { + doc.range = {}; + } + doc.range.from = parseFloat(value.text().trim()); + break; + case 'maximum value': + if (doc.range == undefined) { + doc.range = {}; + } + doc.range.to = parseFloat(value.text().trim()); + break; + case 'command-line format': + doc.cli = cleaner.cleanCli(value.text().trim()); + break; + case 'command line': + if (typeof doc.cli !== 'string') { + doc.cli = + value + .text() + .toLowerCase() + .trim() === 'yes'; + } + break; + } + }); +} + +/** + * Create a doc element + * @param {Element} element The root element + * @returns object The doc object + */ +function createDoc($, element, doc) { + completeDoc($, $(element).find('tbody > tr'), doc); + if (doc.range !== undefined) { + doc.range = cleaner.cleanRange(doc.range); + } + + if (doc.name && doc.name.match(cleaner.regexCli)) { + delete doc.name; + } + + return doc; +} + +function parsePage($, cbSuccess) { + var anchors = []; + $('.informaltable, .table') + .filter(function(i, elem) { + return ( + $(elem) + .find('th') + .first() + .text() === 'Property' + ); + }) + .each(function(i, elem) { + let doc = { + id: $(elem) + .prevAll() + .find('a') + .filter(function(i, el) { + return typeof $(el).attr('name') === 'string' && typeof $(el).attr('class') === 'undefined'; + }) + .first() + .attr('name'), + }; + if (typeof doc.id !== 'string') { + doc.id = $(elem) + .prevAll() + .find('.link') + .first() + .attr('href') + .split('#')[1]; + } + createDoc($, elem, doc); + if (typeof doc.cli === 'boolean') { + doc.cli = $(elem) + .prevAll() + .find('.option') + .first() + .text(); + if (doc.cli === '') { + delete doc.cli; + } + } + if (!doc.name && doc.cli) { + var matches = doc.cli.match(cleaner.regexCli); + doc.name = matches[2].replace(/-/g, '_'); + } + anchors.push(doc); + }); + + cbSuccess(anchors); +} + +const KB_URL = 'https://dev.mysql.com/doc/refman/8.0/en/'; +const KB_URL57 = 'https://dev.mysql.com/doc/refman/5.7/en/'; + +const pages = [ + { + url: KB_URL + 'server-system-variables.html', + name: 'server-system-variables', + }, + { + url: KB_URL + 'innodb-parameters.html', + name: 'innodb-parameters', + }, + { + url: KB_URL + 'performance-schema-system-variables.html', + name: 'performance-schema-system-variables', + }, + { + url: KB_URL + 'x-plugin-options-system-variables.html', + name: 'x-plugin-options-system-variables', + }, + { + url: KB_URL + 'replication-options-binary-log.html', + name: 'replication-options-binary-log', + }, + { + url: KB_URL57 + 'replication-options-binary-log.html', + name: 'replication-options-binary-log_5.7', + }, + { + url: KB_URL + 'pluggable-authentication-system-variables.html', + name: 'pluggable-authentication-system-variables', + }, + { + url: KB_URL + 'audit-log-reference.html', + name: 'audit-log-reference', + }, + { + url: KB_URL + 'replication-options-gtids.html', + name: 'replication-options-gtids', + }, + { + url: KB_URL + 'replication-options-slave.html', + name: 'replication-options-slave', + }, + { + url: KB_URL + 'replication-options-master.html', + name: 'replication-options-master', + }, + { + url: KB_URL + 'replication-options.html', + name: 'replication-options', + }, + { + url: KB_URL57 + 'mysql-cluster-options-variables.html', + name: 'mysql-cluster-options-variables', + }, + { + url: KB_URL + 'server-options.html', + name: 'server-options', + }, + { + url: KB_URL + 'version-tokens-reference.html', + name: 'version-tokens-reference', + }, +]; + +module.exports = { + parsePage: parsePage, + createDoc: createDoc, + completeDoc: completeDoc, + run: () => { + return common.processDataExtraction(pages, 'mysql-', parsePage); + }, +}; |
