refs #5483 Automatic fixtures, refactor and fixes

This commit is contained in:
Juan Ferrer 2023-08-11 15:41:03 +02:00
parent e126860ca0
commit 276b295f3f
26 changed files with 534 additions and 306 deletions

View File

@ -13,6 +13,11 @@ development, so any help is welcomed! Feel free to contribute.
## Installation ## Installation
Required libraries to build with *node-gyp*.
```text
# apt install libkrb5-dev libssl-dev
```
It's recommended to install the package globally. It's recommended to install the package globally.
```text ```text
@ -148,9 +153,10 @@ routines.
You can create your local fixture and structure files. You can create your local fixture and structure files.
* *dump/beforeDump.sql* * *dump/dump.before.sql*
* *dump/afterDump.sql* * *dump/dump.after.sql*
* *dump/fixtures.sql* * *dump/fixtures.before.sql*
* *dump/fixtures.after.sql*
## Versioning commands ## Versioning commands
@ -180,7 +186,7 @@ When *--checkout* option is provided, it does the following before export:
Applies versions and routine changes into database. Applies versions and routine changes into database.
```text ```text
$ myt push [<remote>] [-f|--force] [-c|--commit] [-s|--sums] $ myt push [<remote>] [-f|--force] [-c|--commit] [-s|--sums] [-t|--triggers]
``` ```
Commit is saved into database only if *--commit* option is provided, it Commit is saved into database only if *--commit* option is provided, it
@ -221,7 +227,7 @@ Exports database structure and fixtures from remote into hidden files located
in *dump* folder. If no remote is specified *production* is used. in *dump* folder. If no remote is specified *production* is used.
```text ```text
$ myt dump [<remote>] [-l|--lock] $ myt dump [<remote>] [-l|--lock] [-t|--triggers]
``` ```
### fixtures ### fixtures

View File

@ -2,7 +2,24 @@ versionSchema: myt
versionDigits: 5 versionDigits: 5
maxOldVersions: 20 maxOldVersions: 20
mockDate: false mockDate: false
mockFunctions:
- mockTime
- mockUtcTime
sumViews: true sumViews: true
privileges:
userTable: global_priv
userWhere: >-
JSON_VALUE(`Priv`, '$.is_role')
AND JSON_VALUE(`Priv`, '$.authentication_string') IS NULL
AND JSON_VALUE(`Priv`, '$.mysql_old_password') IS NULL
AND JSON_VALUE(`Priv`, '$.mysql_native_password') IS NULL
tables:
- db
- tables_priv
- columns_priv
- procs_priv
where: >-
`Host` = ''
schemas: schemas:
- myt - myt
fixtures: fixtures:

79
helpers/local-fixtures.js Normal file
View File

@ -0,0 +1,79 @@
#!/bin/node
require('require-yaml');
const mysql = require('mysql2/promise');
const {fixtures} = require(`${process.cwd()}/myt.config.yml`);
const config = {
host: 'localhost',
user: 'root',
password: 'root'
};
async function connectAndQuery() {
try {
const connection = await mysql.createConnection(config);
// Get schemas
const [schemaResults] = await connection.query('SHOW DATABASES');
const schemaNames = schemaResults.map(r => r.Database);
// Filter system schemas
const systemSchemas = ['mysql', 'sys', 'information_schema', 'performance_schema'];
const userSchemas = schemaNames.filter(s => !systemSchemas.includes(s));
if (userSchemas.length === 0) {
console.log('There are no user schemas with tables that have records.');
connection.end();
return;
}
// Get tables with records
userSchemas.sort((a, b) => a.localeCompare(b));
for (const schemaName of userSchemas) {
const [tableResults] = await connection.query(
`SELECT TABLE_NAME tableName
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = ?
AND TABLE_TYPE <> 'VIEW'`,
[schemaName]
);
const tableNames = tableResults.map(r => r.tableName);
if (tableNames.length === 0) continue;
const schemaFixtures = new Set(fixtures[schemaName]);
const nonEmptyTables = [];
for (const tableName of tableNames) {
if (schemaFixtures.has(tableName)) continue;
try {
const [[row]] = await connection.query(
`SELECT COUNT(*) \`count\` FROM ??.??`,
[schemaName, tableName]
);
if (row.count == 0) continue;
if (!fixtures[schemaName]?.[tableName])
nonEmptyTables.push(tableName);
} catch (err) {
console.error('Error:', err.message);
}
}
nonEmptyTables.sort((a, b) => a.localeCompare(b));
if (nonEmptyTables.length) {
console.log(`${schemaName}:`);
for (const tableName of nonEmptyTables)
console.log(` - ${tableName}`);
}
}
connection.end();
} catch (err) {
console.error('Error:', err.message);
}
}
connectAndQuery();

View File

@ -10,4 +10,10 @@ module.exports = class MytCommand {
async run(myt, opts) { async run(myt, opts) {
throw new Error('run command not defined'); throw new Error('run command not defined');
} }
emit(event) {
const messages = this.constructor.messages;
if (messages && messages[event])
console.log(messages[event]);
}
} }

View File

@ -8,12 +8,11 @@ module.exports = class Dumper {
this.opts = opts; this.opts = opts;
} }
async init(dumpFile) { async init(dumpDir, dumpFile) {
const dumpDir = this.opts.dumpDir;
if (!await fs.pathExists(dumpDir)) if (!await fs.pathExists(dumpDir))
await fs.mkdir(dumpDir); await fs.mkdir(dumpDir, {recursive: true});
const dumpPath = path.join(dumpDir, dumpFile); const dumpPath = path.join(dumpDir, `${dumpFile}.sql`);
// FIXME: If it's called after docker.build() statement it creates an // FIXME: If it's called after docker.build() statement it creates an
// "invalid" WriteStream // "invalid" WriteStream
@ -28,6 +27,10 @@ module.exports = class Dumper {
this.dumpStream = dumpStream; this.dumpStream = dumpStream;
} }
async end() {
await this.dumpStream.end();
}
async use(schema) { async use(schema) {
await this.dumpStream.write( await this.dumpStream.write(
`USE ${SqlString.escapeId(schema, true)};\n`, `USE ${SqlString.escapeId(schema, true)};\n`,
@ -36,7 +39,7 @@ module.exports = class Dumper {
} }
async dumpFixtures(tables, replace, args) { async dumpFixtures(tables, replace, args) {
const fixturesArgs = [ let fixturesArgs = [
'--no-create-info', '--no-create-info',
'--skip-triggers', '--skip-triggers',
'--skip-extended-insert', '--skip-extended-insert',
@ -45,18 +48,40 @@ module.exports = class Dumper {
'--skip-set-charset', '--skip-set-charset',
'--skip-comments', '--skip-comments',
'--skip-tz-utc' '--skip-tz-utc'
].concat(args); ]
if (args)
fixturesArgs = fixturesArgs.concat(args);
if (replace) if (replace)
fixturesArgs.push('--replace'); fixturesArgs.push('--replace');
for (const schema in tables) { for (const schema in tables) {
await this.use(schema);
const args = fixturesArgs.concat([schema], tables[schema]); const args = fixturesArgs.concat([schema], tables[schema]);
await this.runDump('mysqldump', args, this.dumpStream); await this.use(schema);
await this.runDump('mysqldump', args);
} }
} }
async dumpPrivileges(tables, args, where) {
let privArgs = [
'--no-create-info',
'--skip-triggers',
'--insert-ignore',
'--skip-extended-insert',
'--skip-add-locks',
'--skip-set-charset',
'--skip-comments',
'--skip-tz-utc'
];
if (args)
privArgs = privArgs.concat(args);
if (where)
privArgs.push('--where', where);
args = privArgs.concat(['mysql'], tables);
await this.use('mysql');
await this.runDump('mysqldump', args);
}
async runDump(command, args) { async runDump(command, args) {
const iniPath = path.join(this.opts.subdir || '', 'remotes', this.opts.iniFile); const iniPath = path.join(this.opts.subdir || '', 'remotes', this.opts.iniFile);
const myArgs = [ const myArgs = [
@ -76,8 +101,4 @@ module.exports = class Dumper {
rm: true rm: true
}, execOptions); }, execOptions);
} }
async end() {
await this.dumpStream.end();
}
} }

View File

@ -1,13 +1,15 @@
const Myt = require('./myt'); const Myt = require('./myt');
const Command = require('./lib/command'); const Command = require('./lib/command');
const fs = require('fs-extra');
const Dumper = require('./lib/dumper'); const Dumper = require('./lib/dumper');
const fs = require('fs-extra');
const path = require('path');
class Dump extends Command { class Dump extends Command {
static usage = { static usage = {
description: 'Dumps structure and fixtures from remote', description: 'Dumps structure and fixtures from remote',
params: { params: {
lock: 'Whether to lock tables on dump' lock: 'Whether to lock tables on dump',
triggers: 'Wether to include triggers into dump'
}, },
operand: 'remote' operand: 'remote'
}; };
@ -17,54 +19,111 @@ class Dump extends Command {
remote: 'production' remote: 'production'
}, },
alias: { alias: {
lock: 'l' lock: 'l',
triggers: 't'
}, },
boolean: [ boolean: [
'lock' 'lock',
'triggers'
] ]
}; };
static messages = {
dumpStructure: 'Dumping structure.',
dumpData: 'Dumping data.',
dumpPrivileges: 'Dumping privileges.',
dumpTriggers: 'Dumping triggers.'
};
async run(myt, opts) { async run(myt, opts) {
const dumper = new Dumper(opts); let dumper;
await dumper.init('.dump.sql'); const dumpDataDir = path.join(opts.dumpDir, '.dump');
const baseArgs = [ const baseArgs = [
`--lock-tables=${opts.lock ? 'true' : 'false'}` `--lock-tables=${opts.lock ? 'true' : 'false'}`
]; ];
console.log('Dumping structure.'); await fs.remove(dumpDataDir);
// Structure
this.emit('dumpStructure');
dumper = new Dumper(opts);
await dumper.init(dumpDataDir, 'structure');
let dumpArgs = [ let dumpArgs = [
'--default-character-set=utf8', '--default-character-set=utf8',
'--no-data', '--no-data',
'--comments', '--comments',
'--routines', '--routines',
'--events', '--events',
'--skip-triggers', '--skip-triggers'
'--databases'
].concat(baseArgs); ].concat(baseArgs);
dumpArgs.push('--databases');
dumpArgs = dumpArgs.concat(opts.schemas); dumpArgs = dumpArgs.concat(opts.schemas);
await dumper.runDump('docker-dump.sh', dumpArgs); await dumper.runDump('docker-dump.sh', dumpArgs);
await dumper.end();
console.log('Dumping fixtures.'); // Data
this.emit('dumpData');
dumper = new Dumper(opts);
await dumper.init(dumpDataDir, 'data');
await dumper.dumpFixtures(opts.fixtures, false, baseArgs); await dumper.dumpFixtures(opts.fixtures, false, baseArgs);
await dumper.end();
// Privileges
console.log('Dumping privileges.');
const privs = opts.privileges; const privs = opts.privileges;
if (privs && Array.isArray(privs.tables)) { if (privs) {
let args = [ this.emit('dumpPrivileges');
'--no-create-info',
'--skip-triggers',
'--insert-ignore',
'--complete-insert'
].concat(baseArgs);
if (privs.where) args.push('--where', privs.where);
args = args.concat(['mysql'], privs.tables);
await dumper.use('mysql'); dumper = new Dumper(opts);
await dumper.runDump('mysqldump', args); await dumper.init(dumpDataDir, 'privileges');
const {tables, userTable, where} = privs;
if (tables)
await dumper.dumpPrivileges(tables, baseArgs, where);
if (userTable) {
let userWhere = '';
for (const cond of [where, privs.userWhere]) {
if (!cond) continue;
if (userWhere) userWhere += ' AND ';
userWhere += cond;
}
await dumper.dumpPrivileges([userTable], baseArgs, userWhere);
}
await dumper.end();
} }
await dumper.end(); await dumper.end();
// Triggers
if (opts.triggers) {
this.emit('dumpTriggers');
const dumper = new Dumper(opts);
await dumper.init(dumpDataDir, 'triggers');
let dumpArgs = [
'--default-character-set=utf8',
'--no-create-info',
'--no-data',
'--no-create-db',
'--skip-opt',
'--comments'
].concat(baseArgs);
dumpArgs.push('--databases');
dumpArgs = dumpArgs.concat(opts.schemas);
await dumper.runDump('mysqldump', dumpArgs);
await dumper.end();
}
} }
} }

View File

@ -16,8 +16,8 @@ class Fixtures extends Command {
async run(myt, opts) { async run(myt, opts) {
const dumper = new Dumper(opts); const dumper = new Dumper(opts);
await dumper.init('fixtures.sql'); await dumper.init(opts.dumpDir, '.fixtures');
await dumper.dumpFixtures(opts.localFixtures, true); await dumper.dumpFixtures(opts.localFixtures, false);
await dumper.end(); await dumper.end();
} }
} }
@ -26,4 +26,3 @@ module.exports = Fixtures;
if (require.main === module) if (require.main === module)
new Myt().run(Fixtures); new Myt().run(Fixtures);

View File

@ -98,7 +98,7 @@ class Pull extends Command {
const schemas = await fs.readdir(routinesDir); const schemas = await fs.readdir(routinesDir);
for (const schema of schemas) { for (const schema of schemas) {
if (opts.schemas.indexOf(schema) == -1) if (opts.schemas.indexOf(schema) == -1)
await fs.remove(`${routinesDir}/${schema}`, {recursive: true}); await fs.remove(`${routinesDir}/${schema}`);
} }
for (const schema in shaSums) { for (const schema in shaSums) {

View File

@ -311,7 +311,7 @@ class Push extends Command {
for (const change of changes) for (const change of changes)
try { try {
if (opts.trigger && change.type.name === 'TRIGGER') if (opts.triggers && change.type.name === 'TRIGGER')
continue; continue;
const schema = change.schema; const schema = change.schema;
@ -325,7 +325,14 @@ class Push extends Command {
newSql = await fs.readFile(fullPath, 'utf8'); newSql = await fs.readFile(fullPath, 'utf8');
const oldSql = await engine.fetchRoutine(type, schema, name); const oldSql = await engine.fetchRoutine(type, schema, name);
const oldSum = engine.getShaSum(type, schema, name); const oldSum = engine.getShaSum(type, schema, name);
const isEqual = newSql == oldSql;
const isMockFn = type == 'function'
&& schema == opts.versionSchema
&& opts.remote == 'local'
&& opts.mockDate
&& opts.mockFunctions
&& opts.mockFunctions.indexOf(name) !== -1;
const ignore = newSql == oldSql || isMockFn;
let statusMsg; let statusMsg;
if (exists && !oldSql) if (exists && !oldSql)
@ -336,7 +343,7 @@ class Push extends Command {
statusMsg = '[·]'.yellow; statusMsg = '[·]'.yellow;
let actionMsg; let actionMsg;
if (isEqual) if (ignore)
actionMsg = '[I]'.blue; actionMsg = '[I]'.blue;
else else
actionMsg = '[A]'.green; actionMsg = '[A]'.green;
@ -348,7 +355,7 @@ class Push extends Command {
change.fullName change.fullName
); );
if (!isEqual) { if (!ignore) {
const scapedSchema = SqlString.escapeId(schema, true); const scapedSchema = SqlString.escapeId(schema, true);
if (exists) { if (exists) {

View File

@ -36,9 +36,10 @@ class Run extends Command {
async run(myt, opts) { async run(myt, opts) {
const dumpDir = opts.dumpDir; const dumpDir = opts.dumpDir;
const dumpDataDir = path.join(dumpDir, '.dump');
const serverDir = path.join(__dirname, 'server'); const serverDir = path.join(__dirname, 'server');
if (!await fs.pathExists(`${dumpDir}/.dump.sql`)) if (!await fs.pathExists(`${dumpDataDir}/structure.sql`))
throw new Error('To run local database you have to create a dump first'); throw new Error('To run local database you have to create a dump first');
// Build base image // Build base image
@ -118,41 +119,8 @@ class Run extends Command {
} }
await server.wait(); await server.wait();
// Apply changes
Object.assign(opts, {
commit: true,
trigger: true,
dbConfig
});
await myt.runCommand(Push, opts);
// Apply fixtures
console.log('Applying fixtures.');
await ct.exec(null,
'docker-import.sh',
['/workspace/dump/fixtures'],
'spawn',
true
);
// Create triggers
console.log('Creating triggers.');
const conn = await myt.createConnection(); const conn = await myt.createConnection();
for (const schema of opts.schemas) {
const triggersPath = `${opts.routinesDir}/${schema}/triggers`;
if (!await fs.pathExists(triggersPath))
continue;
const triggersDir = await fs.readdir(triggersPath);
for (const triggerFile of triggersDir)
await connExt.queryFromFile(conn, `${triggersPath}/${triggerFile}`);
}
// Mock date functions // Mock date functions
console.log('Mocking date functions.'); console.log('Mocking date functions.');
@ -167,6 +135,51 @@ class Run extends Command {
await connExt.multiQuery(conn, sql); await connExt.multiQuery(conn, sql);
} }
// Apply changes
const hasTriggers = await fs.exists(`${dumpDataDir}/triggers.sql`);
Object.assign(opts, {
triggers: hasTriggers,
commit: true,
dbConfig
});
await myt.runCommand(Push, opts);
// Apply fixtures
console.log('Applying fixtures.');
const fixturesFiles = [
'fixtures.before',
'.fixtures',
'fixtures.after',
'fixtures.local'
]
for (const file of fixturesFiles) {
if (!await fs.exists(`${dumpDir}/${file}.sql`)) continue;
await ct.exec(null, 'docker-import.sh',
[`/workspace/dump/${file}`],
'spawn',
true
);
}
// Create triggers
if (!hasTriggers) {
console.log('Creating triggers.');
for (const schema of opts.schemas) {
const triggersPath = `${opts.routinesDir}/${schema}/triggers`;
if (!await fs.pathExists(triggersPath))
continue;
const triggersDir = await fs.readdir(triggersPath);
for (const triggerFile of triggersDir)
await connExt.queryFromFile(conn, `${triggersPath}/${triggerFile}`);
}
}
return server; return server;
} }
} }

View File

@ -123,7 +123,7 @@ class Version extends Command {
} catch (err) { } catch (err) {
await conn.query('ROLLBACK'); await conn.query('ROLLBACK');
if (newVersionDir && await fs.pathExists(newVersionDir)) if (newVersionDir && await fs.pathExists(newVersionDir))
await fs.remove(newVersionDir, {recursive: true}); await fs.remove(newVersionDir);
throw err; throw err;
} }
} }

23
myt.js
View File

@ -170,12 +170,29 @@ class Myt {
async load(opts) { async load(opts) {
// Configuration file // Configuration file
const config = require(`${__dirname}/assets/myt.default.yml`); const defaultConfig = require(`${__dirname}/assets/myt.default.yml`);
const config = Object.assign({}, defaultConfig);
const configFile = 'myt.config.yml'; const configFile = 'myt.config.yml';
const configPath = path.join(opts.workspace, configFile); const configPath = path.join(opts.workspace, configFile);
if (await fs.pathExists(configPath))
Object.assign(config, require(configPath)); if (await fs.pathExists(configPath)) {
const mergeKeys = new Set([
'privileges'
]);
const wsConfig = require(configPath);
for (const key in wsConfig) {
if (!mergeKeys.has(key)) {
config[key] = wsConfig[key];
} else {
config[key] = Object.assign({},
config[key],
wsConfig[key]
);
}
}
}
Object.assign(opts, config); Object.assign(opts, config);
opts.configFile = configFile; opts.configFile = configFile;

407
package-lock.json generated
View File

@ -1,21 +1,21 @@
{ {
"name": "@verdnatura/myt", "name": "@verdnatura/myt",
"version": "1.5.20", "version": "1.5.21",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@verdnatura/myt", "name": "@verdnatura/myt",
"version": "1.5.20", "version": "1.5.21",
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
"@sqltools/formatter": "^1.2.5", "@sqltools/formatter": "^1.2.5",
"colors": "^1.4.0", "colors": "^1.4.0",
"ejs": "^3.1.9", "ejs": "^3.1.9",
"fs-extra": "^8.1.0", "fs-extra": "^11.1.1",
"getopts": "^2.3.0", "getopts": "^2.3.0",
"ini": "^1.3.8", "ini": "^4.1.1",
"mysql2": "^2.3.3", "mysql2": "^3.3.4",
"nodegit": "^0.27.0", "nodegit": "^0.27.0",
"require-yaml": "^0.0.1", "require-yaml": "^0.0.1",
"sha.js": "^2.4.11" "sha.js": "^2.4.11"
@ -76,9 +76,9 @@
} }
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "18.11.9", "version": "20.3.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.0.tgz",
"integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" "integrity": "sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ=="
}, },
"node_modules/@types/responselike": { "node_modules/@types/responselike": {
"version": "1.0.0", "version": "1.0.0",
@ -166,9 +166,9 @@
} }
}, },
"node_modules/async": { "node_modules/async": {
"version": "3.2.3", "version": "3.2.4",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
"integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
}, },
"node_modules/asynckit": { "node_modules/asynckit": {
"version": "0.4.0", "version": "0.4.0",
@ -184,9 +184,9 @@
} }
}, },
"node_modules/aws4": { "node_modules/aws4": {
"version": "1.11.0", "version": "1.12.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
}, },
"node_modules/balanced-match": { "node_modules/balanced-match": {
"version": "1.0.0", "version": "1.0.0",
@ -251,9 +251,9 @@
} }
}, },
"node_modules/cacheable-request": { "node_modules/cacheable-request": {
"version": "7.0.2", "version": "7.0.4",
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz",
"integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==",
"dependencies": { "dependencies": {
"clone-response": "^1.0.2", "clone-response": "^1.0.2",
"get-stream": "^5.1.0", "get-stream": "^5.1.0",
@ -429,9 +429,9 @@
"integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
}, },
"node_modules/denque": { "node_modules/denque": {
"version": "2.0.1", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
"integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==", "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
"engines": { "engines": {
"node": ">=0.10" "node": ">=0.10"
} }
@ -507,9 +507,9 @@
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
}, },
"node_modules/filelist": { "node_modules/filelist": {
"version": "1.0.3", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.3.tgz", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
"integrity": "sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q==", "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
"dependencies": { "dependencies": {
"minimatch": "^5.0.1" "minimatch": "^5.0.1"
} }
@ -523,9 +523,9 @@
} }
}, },
"node_modules/filelist/node_modules/minimatch": { "node_modules/filelist/node_modules/minimatch": {
"version": "5.0.1", "version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"dependencies": { "dependencies": {
"brace-expansion": "^2.0.1" "brace-expansion": "^2.0.1"
}, },
@ -560,16 +560,35 @@
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
}, },
"node_modules/fs-extra": { "node_modules/fs-extra": {
"version": "8.1.0", "version": "11.1.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
"dependencies": { "dependencies": {
"graceful-fs": "^4.2.0", "graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0", "jsonfile": "^6.0.1",
"universalify": "^0.1.0" "universalify": "^2.0.0"
}, },
"engines": { "engines": {
"node": ">=6 <7 || >=8" "node": ">=14.14"
}
},
"node_modules/fs-extra/node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dependencies": {
"universalify": "^2.0.0"
},
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
"node_modules/fs-extra/node_modules/universalify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
"engines": {
"node": ">= 10.0.0"
} }
}, },
"node_modules/fs-minipass": { "node_modules/fs-minipass": {
@ -774,9 +793,12 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
}, },
"node_modules/ini": { "node_modules/ini": {
"version": "1.3.8", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==",
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
}, },
"node_modules/is-fullwidth-code-point": { "node_modules/is-fullwidth-code-point": {
"version": "1.0.0", "version": "1.0.0",
@ -792,7 +814,7 @@
"node_modules/is-property": { "node_modules/is-property": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
"integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
}, },
"node_modules/is-typedarray": { "node_modules/is-typedarray": {
"version": "1.0.0", "version": "1.0.0",
@ -815,14 +837,14 @@
"integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
}, },
"node_modules/jake": { "node_modules/jake": {
"version": "10.8.5", "version": "10.8.7",
"resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz",
"integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==",
"dependencies": { "dependencies": {
"async": "^3.2.3", "async": "^3.2.3",
"chalk": "^4.0.2", "chalk": "^4.0.2",
"filelist": "^1.0.1", "filelist": "^1.0.4",
"minimatch": "^3.0.4" "minimatch": "^3.1.2"
}, },
"bin": { "bin": {
"jake": "bin/cli.js" "jake": "bin/cli.js"
@ -868,9 +890,9 @@
"integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
}, },
"node_modules/json5": { "node_modules/json5": {
"version": "2.2.2", "version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"bin": { "bin": {
"json5": "lib/cli.js" "json5": "lib/cli.js"
}, },
@ -914,9 +936,9 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
}, },
"node_modules/long": { "node_modules/long": {
"version": "4.0.0", "version": "5.2.3",
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
}, },
"node_modules/lowercase-keys": { "node_modules/lowercase-keys": {
"version": "2.0.0", "version": "2.0.0",
@ -927,14 +949,11 @@
} }
}, },
"node_modules/lru-cache": { "node_modules/lru-cache": {
"version": "6.0.0", "version": "8.0.5",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==",
"dependencies": {
"yallist": "^4.0.0"
},
"engines": { "engines": {
"node": ">=10" "node": ">=16.14"
} }
}, },
"node_modules/mime-db": { "node_modules/mime-db": {
@ -979,9 +998,9 @@
} }
}, },
"node_modules/minimist": { "node_modules/minimist": {
"version": "1.2.7", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
"integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"funding": { "funding": {
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
@ -995,11 +1014,6 @@
"yallist": "^3.0.0" "yallist": "^3.0.0"
} }
}, },
"node_modules/minipass/node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
},
"node_modules/minizlib": { "node_modules/minizlib": {
"version": "1.3.3", "version": "1.3.3",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
@ -1025,16 +1039,16 @@
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}, },
"node_modules/mysql2": { "node_modules/mysql2": {
"version": "2.3.3", "version": "3.3.4",
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.3.4.tgz",
"integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", "integrity": "sha512-66K70s503WCweXmC8rKZ6oFpo+1qd96bx1QloaoYcSABwxvDzjGlqAHSxiDoXgBIv6YSTSZd6lvgWteYhBz7WA==",
"dependencies": { "dependencies": {
"denque": "^2.0.1", "denque": "^2.1.0",
"generate-function": "^2.3.1", "generate-function": "^2.3.1",
"iconv-lite": "^0.6.3", "iconv-lite": "^0.6.3",
"long": "^4.0.0", "long": "^5.2.1",
"lru-cache": "^6.0.0", "lru-cache": "^8.0.0",
"named-placeholders": "^1.1.2", "named-placeholders": "^1.1.3",
"seq-queue": "^0.0.5", "seq-queue": "^0.0.5",
"sqlstring": "^2.3.2" "sqlstring": "^2.3.2"
}, },
@ -1043,30 +1057,24 @@
} }
}, },
"node_modules/named-placeholders": { "node_modules/named-placeholders": {
"version": "1.1.2", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz",
"integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
"dependencies": { "dependencies": {
"lru-cache": "^4.1.3" "lru-cache": "^7.14.1"
}, },
"engines": { "engines": {
"node": ">=6.0.0" "node": ">=12.0.0"
} }
}, },
"node_modules/named-placeholders/node_modules/lru-cache": { "node_modules/named-placeholders/node_modules/lru-cache": {
"version": "4.1.5", "version": "7.18.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
"integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
"dependencies": { "engines": {
"pseudomap": "^1.0.2", "node": ">=12"
"yallist": "^2.1.2"
} }
}, },
"node_modules/named-placeholders/node_modules/yallist": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
},
"node_modules/nan": { "node_modules/nan": {
"version": "2.17.0", "version": "2.17.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
@ -1361,11 +1369,6 @@
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
}, },
"node_modules/pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
},
"node_modules/psl": { "node_modules/psl": {
"version": "1.9.0", "version": "1.9.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
@ -1381,9 +1384,9 @@
} }
}, },
"node_modules/punycode": { "node_modules/punycode": {
"version": "2.1.1", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
"engines": { "engines": {
"node": ">=6" "node": ">=6"
} }
@ -1415,10 +1418,15 @@
"rc": "cli.js" "rc": "cli.js"
} }
}, },
"node_modules/rc/node_modules/ini": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
},
"node_modules/readable-stream": { "node_modules/readable-stream": {
"version": "2.3.7", "version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dependencies": { "dependencies": {
"core-util-is": "~1.0.0", "core-util-is": "~1.0.0",
"inherits": "~2.0.3", "inherits": "~2.0.3",
@ -1516,7 +1524,7 @@
"node_modules/seq-queue": { "node_modules/seq-queue": {
"version": "0.0.5", "version": "0.0.5",
"resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
"integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
}, },
"node_modules/set-blocking": { "node_modules/set-blocking": {
"version": "2.0.0", "version": "2.0.0",
@ -1696,11 +1704,6 @@
} }
] ]
}, },
"node_modules/tar/node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
},
"node_modules/to-buffer": { "node_modules/to-buffer": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
@ -1834,9 +1837,9 @@
} }
}, },
"node_modules/yallist": { "node_modules/yallist": {
"version": "4.0.0", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
} }
}, },
"dependencies": { "dependencies": {
@ -1883,9 +1886,9 @@
} }
}, },
"@types/node": { "@types/node": {
"version": "18.11.9", "version": "20.3.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.0.tgz",
"integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" "integrity": "sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ=="
}, },
"@types/responselike": { "@types/responselike": {
"version": "1.0.0", "version": "1.0.0",
@ -1957,9 +1960,9 @@
"integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="
}, },
"async": { "async": {
"version": "3.2.3", "version": "3.2.4",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
"integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
}, },
"asynckit": { "asynckit": {
"version": "0.4.0", "version": "0.4.0",
@ -1972,9 +1975,9 @@
"integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="
}, },
"aws4": { "aws4": {
"version": "1.11.0", "version": "1.12.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
}, },
"balanced-match": { "balanced-match": {
"version": "1.0.0", "version": "1.0.0",
@ -2036,9 +2039,9 @@
} }
}, },
"cacheable-request": { "cacheable-request": {
"version": "7.0.2", "version": "7.0.4",
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz",
"integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==",
"requires": { "requires": {
"clone-response": "^1.0.2", "clone-response": "^1.0.2",
"get-stream": "^5.1.0", "get-stream": "^5.1.0",
@ -2174,9 +2177,9 @@
"integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
}, },
"denque": { "denque": {
"version": "2.0.1", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
"integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==" "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="
}, },
"detect-libc": { "detect-libc": {
"version": "1.0.3", "version": "1.0.3",
@ -2234,9 +2237,9 @@
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
}, },
"filelist": { "filelist": {
"version": "1.0.3", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.3.tgz", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
"integrity": "sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q==", "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
"requires": { "requires": {
"minimatch": "^5.0.1" "minimatch": "^5.0.1"
}, },
@ -2250,9 +2253,9 @@
} }
}, },
"minimatch": { "minimatch": {
"version": "5.0.1", "version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"requires": { "requires": {
"brace-expansion": "^2.0.1" "brace-expansion": "^2.0.1"
} }
@ -2280,13 +2283,29 @@
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
}, },
"fs-extra": { "fs-extra": {
"version": "8.1.0", "version": "11.1.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
"requires": { "requires": {
"graceful-fs": "^4.2.0", "graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0", "jsonfile": "^6.0.1",
"universalify": "^0.1.0" "universalify": "^2.0.0"
},
"dependencies": {
"jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"requires": {
"graceful-fs": "^4.1.6",
"universalify": "^2.0.0"
}
},
"universalify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
}
} }
}, },
"fs-minipass": { "fs-minipass": {
@ -2456,9 +2475,9 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
}, },
"ini": { "ini": {
"version": "1.3.8", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g=="
}, },
"is-fullwidth-code-point": { "is-fullwidth-code-point": {
"version": "1.0.0", "version": "1.0.0",
@ -2471,7 +2490,7 @@
"is-property": { "is-property": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
"integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
}, },
"is-typedarray": { "is-typedarray": {
"version": "1.0.0", "version": "1.0.0",
@ -2494,14 +2513,14 @@
"integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
}, },
"jake": { "jake": {
"version": "10.8.5", "version": "10.8.7",
"resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz",
"integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==",
"requires": { "requires": {
"async": "^3.2.3", "async": "^3.2.3",
"chalk": "^4.0.2", "chalk": "^4.0.2",
"filelist": "^1.0.1", "filelist": "^1.0.4",
"minimatch": "^3.0.4" "minimatch": "^3.1.2"
} }
}, },
"js-yaml": { "js-yaml": {
@ -2538,9 +2557,9 @@
"integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
}, },
"json5": { "json5": {
"version": "2.2.2", "version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==" "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="
}, },
"jsonfile": { "jsonfile": {
"version": "4.0.0", "version": "4.0.0",
@ -2575,9 +2594,9 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
}, },
"long": { "long": {
"version": "4.0.0", "version": "5.2.3",
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
}, },
"lowercase-keys": { "lowercase-keys": {
"version": "2.0.0", "version": "2.0.0",
@ -2585,12 +2604,9 @@
"integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
}, },
"lru-cache": { "lru-cache": {
"version": "6.0.0", "version": "8.0.5",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA=="
"requires": {
"yallist": "^4.0.0"
}
}, },
"mime-db": { "mime-db": {
"version": "1.52.0", "version": "1.52.0",
@ -2619,9 +2635,9 @@
} }
}, },
"minimist": { "minimist": {
"version": "1.2.7", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
"integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
}, },
"minipass": { "minipass": {
"version": "2.9.0", "version": "2.9.0",
@ -2630,13 +2646,6 @@
"requires": { "requires": {
"safe-buffer": "^5.1.2", "safe-buffer": "^5.1.2",
"yallist": "^3.0.0" "yallist": "^3.0.0"
},
"dependencies": {
"yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
}
} }
}, },
"minizlib": { "minizlib": {
@ -2661,41 +2670,32 @@
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}, },
"mysql2": { "mysql2": {
"version": "2.3.3", "version": "3.3.4",
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.3.4.tgz",
"integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", "integrity": "sha512-66K70s503WCweXmC8rKZ6oFpo+1qd96bx1QloaoYcSABwxvDzjGlqAHSxiDoXgBIv6YSTSZd6lvgWteYhBz7WA==",
"requires": { "requires": {
"denque": "^2.0.1", "denque": "^2.1.0",
"generate-function": "^2.3.1", "generate-function": "^2.3.1",
"iconv-lite": "^0.6.3", "iconv-lite": "^0.6.3",
"long": "^4.0.0", "long": "^5.2.1",
"lru-cache": "^6.0.0", "lru-cache": "^8.0.0",
"named-placeholders": "^1.1.2", "named-placeholders": "^1.1.3",
"seq-queue": "^0.0.5", "seq-queue": "^0.0.5",
"sqlstring": "^2.3.2" "sqlstring": "^2.3.2"
} }
}, },
"named-placeholders": { "named-placeholders": {
"version": "1.1.2", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz",
"integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
"requires": { "requires": {
"lru-cache": "^4.1.3" "lru-cache": "^7.14.1"
}, },
"dependencies": { "dependencies": {
"lru-cache": { "lru-cache": {
"version": "4.1.5", "version": "7.18.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
"integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="
"requires": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
}
},
"yallist": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
} }
} }
}, },
@ -2928,11 +2928,6 @@
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
}, },
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
},
"psl": { "psl": {
"version": "1.9.0", "version": "1.9.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
@ -2948,9 +2943,9 @@
} }
}, },
"punycode": { "punycode": {
"version": "2.1.1", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
}, },
"qs": { "qs": {
"version": "6.5.3", "version": "6.5.3",
@ -2971,12 +2966,19 @@
"ini": "~1.3.0", "ini": "~1.3.0",
"minimist": "^1.2.0", "minimist": "^1.2.0",
"strip-json-comments": "~2.0.1" "strip-json-comments": "~2.0.1"
},
"dependencies": {
"ini": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
}
} }
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.7", "version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"requires": { "requires": {
"core-util-is": "~1.0.0", "core-util-is": "~1.0.0",
"inherits": "~2.0.3", "inherits": "~2.0.3",
@ -3061,7 +3063,7 @@
"seq-queue": { "seq-queue": {
"version": "0.0.5", "version": "0.0.5",
"resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
"integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
}, },
"set-blocking": { "set-blocking": {
"version": "2.0.0", "version": "2.0.0",
@ -3160,11 +3162,6 @@
"version": "5.2.1", "version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
} }
} }
}, },
@ -3308,9 +3305,9 @@
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
}, },
"yallist": { "yallist": {
"version": "4.0.0", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
} }
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@verdnatura/myt", "name": "@verdnatura/myt",
"version": "1.5.20", "version": "1.5.21",
"author": "Verdnatura Levante SL", "author": "Verdnatura Levante SL",
"description": "MySQL version control", "description": "MySQL version control",
"license": "GPL-3.0", "license": "GPL-3.0",
@ -15,10 +15,10 @@
"@sqltools/formatter": "^1.2.5", "@sqltools/formatter": "^1.2.5",
"colors": "^1.4.0", "colors": "^1.4.0",
"ejs": "^3.1.9", "ejs": "^3.1.9",
"fs-extra": "^8.1.0", "fs-extra": "^11.1.1",
"getopts": "^2.3.0", "getopts": "^2.3.0",
"ini": "^1.3.8", "ini": "^4.1.1",
"mysql2": "^2.3.3", "mysql2": "^3.3.4",
"nodegit": "^0.27.0", "nodegit": "^0.27.0",
"require-yaml": "^0.0.1", "require-yaml": "^0.0.1",
"sha.js": "^2.4.11" "sha.js": "^2.4.11"

View File

@ -2,11 +2,8 @@ FROM myt/server
USER root USER root
COPY \ COPY .dump dump/.dump
.dump.sql \ COPY dump.*.sql dump/
beforeDump.sql \
afterDump.sql \
dump/
RUN gosu mysql docker-init.sh RUN gosu mysql docker-init.sh

View File

@ -1,4 +1,5 @@
#!/bin/bash #!/bin/bash
# FIXME: It can corrupt data # FIXME: It can corrupt data
# Currently not used, instead mysqldump --skip-extended-insert option is used
mysqldump $@ | sed -E 's/(VALUES |\),)\(/\1\n\t\(/g' mysqldump $@ | sed -E 's/(VALUES |\),)\(/\1\n\t\(/g'

View File

@ -1,6 +1,10 @@
#!/bin/bash #!/bin/bash
FILE="$1.sql" FILE="$1.sql"
if [[ ! -f "$FILE" ]] ; then
exit
fi
echo "[LOG] -> Importing $FILE" echo "[LOG] -> Importing $FILE"
export MYSQL_PWD=root export MYSQL_PWD=root
mysql -u root --default-character-set=utf8 --comments -f < "$FILE" mysql -u root --default-character-set=utf8 --comments -f < "$FILE"

View File

@ -13,8 +13,11 @@ docker_temp_server_start "$CMD"
docker_setup_db docker_setup_db
docker_process_init_files /docker-entrypoint-initdb.d/* docker_process_init_files /docker-entrypoint-initdb.d/*
docker-import.sh dump/beforeDump docker-import.sh dump/dump.before
docker-import.sh dump/.dump docker-import.sh dump/.dump/structure
docker-import.sh dump/afterDump docker-import.sh dump/.dump/data
docker-import.sh dump/.dump/triggers
docker-import.sh dump/.dump/privileges
docker-import.sh dump/dump.after
docker_temp_server_stop docker_temp_server_stop

1
template/.gitignore vendored
View File

@ -4,3 +4,4 @@ remotes/*.ini
!remotes/local.ini !remotes/local.ini
!remotes/docker.ini !remotes/docker.ini
dump/.changes dump/.changes
dump/fixtures.local.sql

View File

@ -1 +0,0 @@
-- Executed after data dump

View File

@ -1 +0,0 @@
-- Executed before data dump

View File

@ -0,0 +1 @@
-- Executed after dump

View File

@ -0,0 +1 @@
-- Executed before dump

View File

@ -0,0 +1 @@
-- Executed after fixtures

View File

@ -0,0 +1 @@
-- Executed before fixtures

View File

@ -1 +0,0 @@
-- Place your local fixtures here