mirror of
https://github.com/strapi/strapi.git
synced 2025-08-27 10:15:59 +00:00
Merge branch 'master' into feature/relational-fields
This commit is contained in:
commit
aa3d7eb2e0
@ -12,7 +12,7 @@
|
|||||||
"strapi": "strapi"
|
"strapi": "strapi"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"knex": "^0.20.0",
|
"knex": "^0.21.13",
|
||||||
"lodash": "4.17.19",
|
"lodash": "4.17.19",
|
||||||
"mysql": "^2.17.1",
|
"mysql": "^2.17.1",
|
||||||
"pg": "8.4.0",
|
"pg": "8.4.0",
|
||||||
|
@ -84,7 +84,7 @@
|
|||||||
"react-redux": "7.2.0",
|
"react-redux": "7.2.0",
|
||||||
"react-router": "^5.0.0",
|
"react-router": "^5.0.0",
|
||||||
"react-router-dom": "^5.0.0",
|
"react-router-dom": "^5.0.0",
|
||||||
"react-select": "^3.0.8",
|
"react-select": "^3.1.1",
|
||||||
"react-transition-group": "4.4.1",
|
"react-transition-group": "4.4.1",
|
||||||
"react-virtualized": "^9.21.2",
|
"react-virtualized": "^9.21.2",
|
||||||
"reactstrap": "8.4.1",
|
"reactstrap": "8.4.1",
|
||||||
|
@ -9,7 +9,7 @@ const { getManyRelations } = require('./utils/associations');
|
|||||||
const createMigrationRunner = require('./migrations/create-migration-runner');
|
const createMigrationRunner = require('./migrations/create-migration-runner');
|
||||||
const draftPublishMigration = require('./migrations/draft-publish-migration');
|
const draftPublishMigration = require('./migrations/draft-publish-migration');
|
||||||
|
|
||||||
const migrateSchemas = async ({ ORM, loadedModel, definition, connection, model }) => {
|
const migrateSchemas = async ({ ORM, loadedModel, definition, connection, model }, context) => {
|
||||||
// Add created_at and updated_at field if timestamp option is true
|
// Add created_at and updated_at field if timestamp option is true
|
||||||
if (loadedModel.hasTimestamps) {
|
if (loadedModel.hasTimestamps) {
|
||||||
definition.attributes[loadedModel.hasTimestamps[0]] = { type: 'currentTimestamp' };
|
definition.attributes[loadedModel.hasTimestamps[0]] = { type: 'currentTimestamp' };
|
||||||
@ -18,13 +18,16 @@ const migrateSchemas = async ({ ORM, loadedModel, definition, connection, model
|
|||||||
|
|
||||||
// Equilize tables
|
// Equilize tables
|
||||||
if (connection.options && connection.options.autoMigration !== false) {
|
if (connection.options && connection.options.autoMigration !== false) {
|
||||||
await createOrUpdateTable({
|
await createOrUpdateTable(
|
||||||
table: loadedModel.tableName,
|
{
|
||||||
attributes: definition.attributes,
|
table: loadedModel.tableName,
|
||||||
definition,
|
attributes: definition.attributes,
|
||||||
ORM,
|
definition,
|
||||||
model,
|
ORM,
|
||||||
});
|
model,
|
||||||
|
},
|
||||||
|
context
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Equilize polymorphic relations
|
// Equilize polymorphic relations
|
||||||
@ -42,13 +45,16 @@ const migrateSchemas = async ({ ORM, loadedModel, definition, connection, model
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (connection.options && connection.options.autoMigration !== false) {
|
if (connection.options && connection.options.autoMigration !== false) {
|
||||||
await createOrUpdateTable({
|
await createOrUpdateTable(
|
||||||
table: `${loadedModel.tableName}_morph`,
|
{
|
||||||
attributes,
|
table: `${loadedModel.tableName}_morph`,
|
||||||
definition,
|
attributes,
|
||||||
ORM,
|
definition,
|
||||||
model,
|
ORM,
|
||||||
});
|
model,
|
||||||
|
},
|
||||||
|
context
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,7 +91,7 @@ const migrateSchemas = async ({ ORM, loadedModel, definition, connection, model
|
|||||||
|
|
||||||
const table = manyRelation.tableCollectionName;
|
const table = manyRelation.tableCollectionName;
|
||||||
if (connection.options && connection.options.autoMigration !== false) {
|
if (connection.options && connection.options.autoMigration !== false) {
|
||||||
await createOrUpdateTable({ table, attributes, definition, ORM, model });
|
await createOrUpdateTable({ table, attributes, definition, ORM, model }, context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -203,7 +209,7 @@ const buildColType = ({ name, attribute, table, tableExists = false, definition,
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Equilize database tables
|
// Equilize database tables
|
||||||
const createOrUpdateTable = async ({ table, attributes, definition, ORM, model }) => {
|
const createOrUpdateTable = async ({ table, attributes, definition, ORM, model }, context) => {
|
||||||
const tableExists = await ORM.knex.schema.hasTable(table);
|
const tableExists = await ORM.knex.schema.hasTable(table);
|
||||||
|
|
||||||
const createIdType = table => {
|
const createIdType = table => {
|
||||||
@ -300,84 +306,93 @@ const createOrUpdateTable = async ({ table, attributes, definition, ORM, model }
|
|||||||
ORM
|
ORM
|
||||||
);
|
);
|
||||||
|
|
||||||
if (columnsToAlter.length > 0) {
|
const shouldRebuild =
|
||||||
if (definition.client === 'sqlite3') {
|
columnsToAlter.length > 0 || (definition.client === 'sqlite3' && context.recreateSqliteTable);
|
||||||
const tmpTable = `tmp_${table}`;
|
|
||||||
|
|
||||||
const rebuildTable = async trx => {
|
if (shouldRebuild) {
|
||||||
await trx.schema.renameTable(table, tmpTable);
|
switch (definition.client) {
|
||||||
|
case 'sqlite3': {
|
||||||
|
const tmpTable = `tmp_${table}`;
|
||||||
|
|
||||||
// drop possible conflicting indexes
|
const rebuildTable = async trx => {
|
||||||
await Promise.all(
|
await trx.schema.renameTable(table, tmpTable);
|
||||||
attributesNames.map(key => trx.raw('DROP INDEX IF EXISTS ??', uniqueColName(table, key)))
|
|
||||||
);
|
|
||||||
|
|
||||||
// create the table
|
// drop possible conflicting indexes
|
||||||
await createTable(table, { trx });
|
await Promise.all(
|
||||||
|
attributesNames.map(key =>
|
||||||
const attrs = attributesNames.filter(attributeName =>
|
trx.raw('DROP INDEX IF EXISTS ??', uniqueColName(table, key))
|
||||||
isColumn({
|
)
|
||||||
definition,
|
|
||||||
attribute: attributes[attributeName],
|
|
||||||
name: attributeName,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
const allAttrs = ['id', ...attrs];
|
|
||||||
|
|
||||||
await trx.insert(qb => qb.select(allAttrs).from(tmpTable)).into(table);
|
|
||||||
await trx.schema.dropTableIfExists(tmpTable);
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
await ORM.knex.transaction(trx => rebuildTable(trx));
|
|
||||||
} catch (err) {
|
|
||||||
if (err.message.includes('UNIQUE constraint failed')) {
|
|
||||||
strapi.log.error(
|
|
||||||
`Unique constraint fails, make sure to update your data and restart to apply the unique constraint.\n\t- ${err.stack}`
|
|
||||||
);
|
);
|
||||||
} else {
|
|
||||||
strapi.log.error(`Migration failed`);
|
|
||||||
strapi.log.error(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
// create the table
|
||||||
|
await createTable(table, { trx });
|
||||||
|
|
||||||
|
const attrs = attributesNames.filter(attributeName =>
|
||||||
|
isColumn({
|
||||||
|
definition,
|
||||||
|
attribute: attributes[attributeName],
|
||||||
|
name: attributeName,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
const allAttrs = ['id', ...attrs];
|
||||||
|
|
||||||
|
await trx.insert(qb => qb.select(allAttrs).from(tmpTable)).into(table);
|
||||||
|
await trx.schema.dropTableIfExists(tmpTable);
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
await ORM.knex.transaction(trx => rebuildTable(trx));
|
||||||
|
} catch (err) {
|
||||||
|
if (err.message.includes('UNIQUE constraint failed')) {
|
||||||
|
strapi.log.error(
|
||||||
|
`Unique constraint fails, make sure to update your data and restart to apply the unique constraint.\n\t- ${err.stack}`
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
strapi.log.error(`Migration failed`);
|
||||||
|
strapi.log.error(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
default: {
|
||||||
const alterTable = async trx => {
|
const alterTable = async trx => {
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
columnsToAlter.map(col => {
|
columnsToAlter.map(col => {
|
||||||
return ORM.knex.schema
|
return ORM.knex.schema
|
||||||
.alterTable(table, tbl => {
|
.alterTable(table, tbl => {
|
||||||
tbl.dropUnique(col, uniqueColName(table, col));
|
tbl.dropUnique(col, uniqueColName(table, col));
|
||||||
})
|
})
|
||||||
.catch(() => {});
|
.catch(() => {});
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
await trx.schema.alterTable(table, tbl => {
|
await trx.schema.alterTable(table, tbl => {
|
||||||
alterColumns(tbl, _.pick(attributes, columnsToAlter), {
|
alterColumns(tbl, _.pick(attributes, columnsToAlter), {
|
||||||
tableExists,
|
tableExists,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
};
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await ORM.knex.transaction(trx => alterTable(trx));
|
await ORM.knex.transaction(trx => alterTable(trx));
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err.code === '23505' && definition.client === 'pg') {
|
if (err.code === '23505' && definition.client === 'pg') {
|
||||||
strapi.log.error(
|
strapi.log.error(
|
||||||
`Unique constraint fails, make sure to update your data and restart to apply the unique constraint.\n\t- ${err.message}\n\t- ${err.detail}`
|
`Unique constraint fails, make sure to update your data and restart to apply the unique constraint.\n\t- ${err.message}\n\t- ${err.detail}`
|
||||||
);
|
);
|
||||||
} else if (definition.client === 'mysql' && err.errno === 1062) {
|
} else if (definition.client === 'mysql' && err.errno === 1062) {
|
||||||
strapi.log.error(
|
strapi.log.error(
|
||||||
`Unique constraint fails, make sure to update your data and restart to apply the unique constraint.\n\t- ${err.sqlMessage}`
|
`Unique constraint fails, make sure to update your data and restart to apply the unique constraint.\n\t- ${err.sqlMessage}`
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
strapi.log.error(`Migration failed`);
|
strapi.log.error(`Migration failed`);
|
||||||
strapi.log.error(err);
|
strapi.log.error(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,27 +2,27 @@
|
|||||||
|
|
||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
|
|
||||||
const createMigrationRunner = (migrationFunction, { hooks = [] } = {}) => {
|
const createMigrationRunner = (migrationFunction, { hooks = [] } = {}, context = {}) => {
|
||||||
const beforeHook = async options => {
|
const beforeHook = async (options, context) => {
|
||||||
for (const migration of hooks) {
|
for (const migration of hooks) {
|
||||||
if (_.isFunction(migration.before)) {
|
if (_.isFunction(migration.before)) {
|
||||||
await migration.before(options);
|
await migration.before(options, context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const afterHook = async options => {
|
const afterHook = async (options, context) => {
|
||||||
for (const migration of hooks.slice(0).reverse()) {
|
for (const migration of hooks.slice(0).reverse()) {
|
||||||
if (_.isFunction(migration.after)) {
|
if (_.isFunction(migration.after)) {
|
||||||
await migration.after(options);
|
await migration.after(options, context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const run = async options => {
|
const run = async options => {
|
||||||
await beforeHook(options);
|
await beforeHook(options, context);
|
||||||
await migrationFunction(options);
|
await migrationFunction(options, context);
|
||||||
await afterHook(options);
|
await afterHook(options, context);
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -23,7 +23,7 @@ const getDraftAndPublishMigrationWay = async ({ definition, ORM }) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const before = async ({ definition, ORM }) => {
|
const before = async ({ definition, ORM }, context) => {
|
||||||
const way = await getDraftAndPublishMigrationWay({ definition, ORM });
|
const way = await getDraftAndPublishMigrationWay({ definition, ORM });
|
||||||
|
|
||||||
if (way === 'disable') {
|
if (way === 'disable') {
|
||||||
@ -37,9 +37,15 @@ const before = async ({ definition, ORM }) => {
|
|||||||
.delete()
|
.delete()
|
||||||
.where(PUBLISHED_AT_ATTRIBUTE, null);
|
.where(PUBLISHED_AT_ATTRIBUTE, null);
|
||||||
|
|
||||||
await ORM.knex.schema.table(definition.collectionName, table => {
|
if (definition.client === 'sqlite3') {
|
||||||
table.dropColumn(PUBLISHED_AT_ATTRIBUTE);
|
// Bug when droping column with sqlite3 https://github.com/knex/knex/issues/631
|
||||||
});
|
// Need to recreate the table
|
||||||
|
context.recreateSqliteTable = true;
|
||||||
|
} else {
|
||||||
|
await ORM.knex.schema.table(definition.collectionName, table => {
|
||||||
|
table.dropColumn(PUBLISHED_AT_ATTRIBUTE);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -16,6 +16,10 @@ const dogModel = {
|
|||||||
name: {
|
name: {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
},
|
},
|
||||||
|
code: {
|
||||||
|
type: 'string',
|
||||||
|
unique: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
connection: 'default',
|
connection: 'default',
|
||||||
name: 'dog',
|
name: 'dog',
|
||||||
@ -26,9 +30,11 @@ const dogModel = {
|
|||||||
const dogs = [
|
const dogs = [
|
||||||
{
|
{
|
||||||
name: 'Nelson',
|
name: 'Nelson',
|
||||||
|
code: '1',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Atos',
|
name: 'Atos',
|
||||||
|
code: '2',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -143,6 +149,24 @@ describe('Migration - draft and publish', () => {
|
|||||||
expect(body.results[0]).toMatchObject(_.pick(data.dogs[0], ['name']));
|
expect(body.results[0]).toMatchObject(_.pick(data.dogs[0], ['name']));
|
||||||
expect(body.results[0].published_at).toBeUndefined();
|
expect(body.results[0].published_at).toBeUndefined();
|
||||||
});
|
});
|
||||||
|
test('Unique constraint is kept after disabling the feature', async () => {
|
||||||
|
const dogToCreate = { code: 'sameCode' };
|
||||||
|
let res = await rq({
|
||||||
|
method: 'POST',
|
||||||
|
url: `/content-manager/explorer/application::dog.dog/`,
|
||||||
|
body: dogToCreate,
|
||||||
|
});
|
||||||
|
expect(res.statusCode).toBe(200);
|
||||||
|
expect(res.body).toMatchObject(dogToCreate);
|
||||||
|
data.dogs.push(res.body);
|
||||||
|
|
||||||
|
res = await rq({
|
||||||
|
method: 'POST',
|
||||||
|
url: `/content-manager/explorer/application::dog.dog/`,
|
||||||
|
body: dogToCreate,
|
||||||
|
});
|
||||||
|
expect(res.statusCode).toBe(400);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
{
|
{
|
||||||
"components.Row.generatedDate": "Last generation",
|
"components.Row.generatedDate": "Letztes Mal generiert",
|
||||||
"components.Row.open": "Open",
|
"components.Row.open": "Öffnen",
|
||||||
"components.Row.regenerate": "Regenerate",
|
"components.Row.regenerate": "Neu generieren",
|
||||||
"containers.HomePage.Block.title": "Versions",
|
"containers.HomePage.Block.title": "Versionen",
|
||||||
"containers.HomePage.Button.open": "Open the documentation",
|
"containers.HomePage.Button.open": "Dokumentation öffnen",
|
||||||
"containers.HomePage.Button.update": "Update",
|
"containers.HomePage.Button.update": "Aktualisieren",
|
||||||
"containers.HomePage.PluginHeader.description": "Configure the documentation plugin",
|
"containers.HomePage.PluginHeader.description": "Einstellungen des Dokumentation-Plugins ändern",
|
||||||
"containers.HomePage.PluginHeader.title": "Documentation - Settings",
|
"containers.HomePage.PluginHeader.title": "Dokumentation - Einstellungen",
|
||||||
"containers.HomePage.PopUpWarning.confirm": "I understand",
|
"containers.HomePage.PopUpWarning.confirm": "Ich verstehe",
|
||||||
"containers.HomePage.PopUpWarning.message": "Are you sure you want to delete this version?",
|
"containers.HomePage.PopUpWarning.message": "Sind Sie sich sicher, dass Sie diese Version löschen wollen?",
|
||||||
"containers.HomePage.form.password": "Password",
|
"containers.HomePage.form.password": "Passwort",
|
||||||
"containers.HomePage.form.password.inputDescription": "Set the password to access the documentation",
|
"containers.HomePage.form.password.inputDescription": "Setzen Sie ein Passwort, um die Dokumentation privat zu machen",
|
||||||
"containers.HomePage.form.restrictedAccess": "Restricted access",
|
"containers.HomePage.form.restrictedAccess": "Zugriff beschränken",
|
||||||
"containers.HomePage.form.restrictedAccess.inputDescription": "Make the documentation endpoint private. By default, the access is public",
|
"containers.HomePage.form.restrictedAccess.inputDescription": "Den Endpoint der Dokumentation privat machen. Dieser ist standardmäßig öffentlich.",
|
||||||
"containers.HomePage.form.showGeneratedFiles": "Show generated files",
|
"containers.HomePage.form.showGeneratedFiles": "Generierte Dateien anzeigen",
|
||||||
"containers.HomePage.form.showGeneratedFiles.inputDescription": "Useful when you want to override the generated documentation. \nThe plugin will generate files split by model and plugin. \nBy enabling this option it will be easier to customize your documentation",
|
"containers.HomePage.form.showGeneratedFiles.inputDescription": "Nützlich, wenn Sie die generierte Dokumentation überschreiben möchten. \nDas Plugin wird nach Modell und Plugin geteilte Dateien erzeugen. \nDurch die Aktivierung dieser Option wird es einfacher sein, Ihre Dokumentation anzupassen.",
|
||||||
"error.deleteDoc.versionMissing": "The version you are trying to delete does not exist.",
|
"error.deleteDoc.versionMissing": "Die Version, die Sie zu löschen versuchen, existiert nicht.",
|
||||||
"error.noVersion": "A version is required",
|
"error.noVersion": "Eine Version wird benötigt",
|
||||||
"error.regenerateDoc": "An error occurred while regenerating the doc",
|
"error.regenerateDoc": "Ein Fehler ist während dem Neu-Erstellen der Dokumentation aufgetreten.",
|
||||||
"error.regenerateDoc.versionMissing": "The version you are trying to generate doesn't exist",
|
"error.regenerateDoc.versionMissing": "Die Version, die Sie zu generieren versuchen, existiert nicht",
|
||||||
"notification.update.success": "Settings updated successfully",
|
"notification.update.success": "Einstellungen wurden erfolgreich aktualisiert",
|
||||||
"plugin.name": "Dokumentation"
|
"plugin.name": "Dokumentation"
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import de from './de.json';
|
||||||
import en from './en.json';
|
import en from './en.json';
|
||||||
import es from './es.json';
|
import es from './es.json';
|
||||||
import fr from './fr.json';
|
import fr from './fr.json';
|
||||||
@ -12,6 +13,7 @@ import sk from './sk.json';
|
|||||||
import zh from './zh.json';
|
import zh from './zh.json';
|
||||||
|
|
||||||
const trads = {
|
const trads = {
|
||||||
|
de,
|
||||||
en,
|
en,
|
||||||
es,
|
es,
|
||||||
fr,
|
fr,
|
||||||
|
98
yarn.lock
98
yarn.lock
@ -5625,12 +5625,7 @@ color@^3.0.0, color@^3.1.2:
|
|||||||
color-convert "^1.9.1"
|
color-convert "^1.9.1"
|
||||||
color-string "^1.5.2"
|
color-string "^1.5.2"
|
||||||
|
|
||||||
colorette@1.1.0:
|
colorette@1.2.1, colorette@^1.2.1:
|
||||||
version "1.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7"
|
|
||||||
integrity sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg==
|
|
||||||
|
|
||||||
colorette@^1.2.1:
|
|
||||||
version "1.2.1"
|
version "1.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
|
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
|
||||||
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
|
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
|
||||||
@ -5670,7 +5665,7 @@ commander@2.3.0:
|
|||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873"
|
||||||
integrity sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=
|
integrity sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=
|
||||||
|
|
||||||
commander@6.1.0, commander@^6.0.0:
|
commander@6.1.0:
|
||||||
version "6.1.0"
|
version "6.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc"
|
||||||
integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==
|
integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==
|
||||||
@ -5680,10 +5675,10 @@ commander@^2.19.0, commander@^2.20.0, commander@^2.20.3:
|
|||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
||||||
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
||||||
|
|
||||||
commander@^4.1.1:
|
commander@^6.0.0, commander@^6.2.0:
|
||||||
version "4.1.1"
|
version "6.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
|
||||||
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
|
integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
|
||||||
|
|
||||||
commander@~2.19.0:
|
commander@~2.19.0:
|
||||||
version "2.19.0"
|
version "2.19.0"
|
||||||
@ -6508,10 +6503,10 @@ dateformat@^3.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
|
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
|
||||||
integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
|
integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
|
||||||
|
|
||||||
debug@*, debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0:
|
debug@*, debug@4, debug@4.3.1, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0:
|
||||||
version "4.2.0"
|
version "4.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
|
||||||
integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==
|
integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
ms "2.1.2"
|
ms "2.1.2"
|
||||||
|
|
||||||
@ -9825,7 +9820,7 @@ inflight@^1.0.4:
|
|||||||
once "^1.3.0"
|
once "^1.3.0"
|
||||||
wrappy "1"
|
wrappy "1"
|
||||||
|
|
||||||
inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4:
|
inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
|
||||||
version "2.0.4"
|
version "2.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||||
@ -9919,7 +9914,7 @@ interpret@^1.4.0:
|
|||||||
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
|
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
|
||||||
integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
|
integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
|
||||||
|
|
||||||
interpret@^2.0.0:
|
interpret@^2.2.0:
|
||||||
version "2.2.0"
|
version "2.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
|
resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
|
||||||
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
|
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
|
||||||
@ -11369,26 +11364,23 @@ klona@^2.0.3:
|
|||||||
resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0"
|
resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0"
|
||||||
integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==
|
integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==
|
||||||
|
|
||||||
knex@^0.20.0:
|
knex@^0.21.13:
|
||||||
version "0.20.15"
|
version "0.21.13"
|
||||||
resolved "https://registry.yarnpkg.com/knex/-/knex-0.20.15.tgz#b7e9e1efd9cf35d214440d9439ed21153574679d"
|
resolved "https://registry.yarnpkg.com/knex/-/knex-0.21.13.tgz#5738db52d041d38f8bd9ab15d64f4a8ebb1e97c4"
|
||||||
integrity sha512-WHmvgfQfxA5v8pyb9zbskxCS1L1WmYgUbwBhHojlkmdouUOazvroUWlCr6KIKMQ8anXZh1NXOOtIUMnxENZG5Q==
|
integrity sha512-O3Zfc7ZHWe32q5k1Z8TqzmiGYVQ9+Tiqb4wP9tPF/ho9DUrHuuy5fLVDdkwDN0gHIr+q5t+XJzNW40DkmeL7lw==
|
||||||
dependencies:
|
dependencies:
|
||||||
colorette "1.1.0"
|
colorette "1.2.1"
|
||||||
commander "^4.1.1"
|
commander "^6.2.0"
|
||||||
debug "4.1.1"
|
debug "4.3.1"
|
||||||
esm "^3.2.25"
|
esm "^3.2.25"
|
||||||
getopts "2.2.5"
|
getopts "2.2.5"
|
||||||
inherits "~2.0.4"
|
interpret "^2.2.0"
|
||||||
interpret "^2.0.0"
|
|
||||||
liftoff "3.1.0"
|
liftoff "3.1.0"
|
||||||
lodash "^4.17.15"
|
lodash "^4.17.20"
|
||||||
mkdirp "^0.5.1"
|
pg-connection-string "2.4.0"
|
||||||
pg-connection-string "2.1.0"
|
tarn "^3.0.1"
|
||||||
tarn "^2.0.0"
|
|
||||||
tildify "2.0.0"
|
tildify "2.0.0"
|
||||||
uuid "^7.0.1"
|
v8flags "^3.2.0"
|
||||||
v8flags "^3.1.3"
|
|
||||||
|
|
||||||
known-css-properties@^0.14.0:
|
known-css-properties@^0.14.0:
|
||||||
version "0.14.0"
|
version "0.14.0"
|
||||||
@ -14209,12 +14201,7 @@ performance-now@^2.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||||
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
|
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
|
||||||
|
|
||||||
pg-connection-string@2.1.0:
|
pg-connection-string@2.4.0, pg-connection-string@^2.4.0:
|
||||||
version "2.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.1.0.tgz#e07258f280476540b24818ebb5dca29e101ca502"
|
|
||||||
integrity sha512-bhlV7Eq09JrRIvo1eKngpwuqKtJnNhZdpdOlvrPrA4dxqXPjxSrbNrfnIDmTpwMyRszrcV4kU5ZA4mMsQUrjdg==
|
|
||||||
|
|
||||||
pg-connection-string@^2.4.0:
|
|
||||||
version "2.4.0"
|
version "2.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.4.0.tgz#c979922eb47832999a204da5dbe1ebf2341b6a10"
|
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.4.0.tgz#c979922eb47832999a204da5dbe1ebf2341b6a10"
|
||||||
integrity sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ==
|
integrity sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ==
|
||||||
@ -15598,10 +15585,10 @@ react-router@^5.0.0:
|
|||||||
tiny-invariant "^1.0.2"
|
tiny-invariant "^1.0.2"
|
||||||
tiny-warning "^1.0.0"
|
tiny-warning "^1.0.0"
|
||||||
|
|
||||||
react-select@^3.0.8:
|
react-select@^3.1.1:
|
||||||
version "3.1.0"
|
version "3.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.1.0.tgz#ab098720b2e9fe275047c993f0d0caf5ded17c27"
|
resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.1.1.tgz#156a5b4a6c22b1e3d62a919cb1fd827adb4060bc"
|
||||||
integrity sha512-wBFVblBH1iuCBprtpyGtd1dGMadsG36W5/t2Aj8OE6WbByDg5jIFyT7X5gT+l0qmT5TqWhxX+VsKJvCEl2uL9g==
|
integrity sha512-HjC6jT2BhUxbIbxMZWqVcDibrEpdUJCfGicN0MMV+BQyKtCaPTgFekKWiOizSCy4jdsLMGjLqcFGJMhVGWB0Dg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.4.4"
|
"@babel/runtime" "^7.4.4"
|
||||||
"@emotion/cache" "^10.0.9"
|
"@emotion/cache" "^10.0.9"
|
||||||
@ -15635,13 +15622,6 @@ react-test-renderer@^16.0.0-0:
|
|||||||
react-is "^16.8.6"
|
react-is "^16.8.6"
|
||||||
scheduler "^0.19.1"
|
scheduler "^0.19.1"
|
||||||
|
|
||||||
react-tooltip@4.2.11:
|
|
||||||
version "4.2.11"
|
|
||||||
resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.2.11.tgz#244d4d1833c583160c4e6c95a8a89e0fb320e18a"
|
|
||||||
integrity sha512-exREte3mK/qbeuQpFbEL3ImdF5/TSAb+x/T7pkVfKmgVcfQLZKHSgLN+Msv7ZOHxaWNJwuCrSsCAy/iTGoPigg==
|
|
||||||
dependencies:
|
|
||||||
prop-types "^15.7.2"
|
|
||||||
uuid "^7.0.3"
|
|
||||||
react-test-renderer@^17.0.1:
|
react-test-renderer@^17.0.1:
|
||||||
version "17.0.1"
|
version "17.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-17.0.1.tgz#3187e636c3063e6ae498aedf21ecf972721574c7"
|
resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-17.0.1.tgz#3187e636c3063e6ae498aedf21ecf972721574c7"
|
||||||
@ -15652,6 +15632,14 @@ react-test-renderer@^17.0.1:
|
|||||||
react-shallow-renderer "^16.13.1"
|
react-shallow-renderer "^16.13.1"
|
||||||
scheduler "^0.20.1"
|
scheduler "^0.20.1"
|
||||||
|
|
||||||
|
react-tooltip@4.2.11:
|
||||||
|
version "4.2.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.2.11.tgz#244d4d1833c583160c4e6c95a8a89e0fb320e18a"
|
||||||
|
integrity sha512-exREte3mK/qbeuQpFbEL3ImdF5/TSAb+x/T7pkVfKmgVcfQLZKHSgLN+Msv7ZOHxaWNJwuCrSsCAy/iTGoPigg==
|
||||||
|
dependencies:
|
||||||
|
prop-types "^15.7.2"
|
||||||
|
uuid "^7.0.3"
|
||||||
|
|
||||||
react-transition-group@4.4.1, react-transition-group@^4.3.0:
|
react-transition-group@4.4.1, react-transition-group@^4.3.0:
|
||||||
version "4.4.1"
|
version "4.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9"
|
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9"
|
||||||
@ -18418,10 +18406,10 @@ tar@^4, tar@^4.4.10, tar@^4.4.12, tar@^4.4.8:
|
|||||||
safe-buffer "^5.1.2"
|
safe-buffer "^5.1.2"
|
||||||
yallist "^3.0.3"
|
yallist "^3.0.3"
|
||||||
|
|
||||||
tarn@^2.0.0:
|
tarn@^3.0.1:
|
||||||
version "2.0.0"
|
version "3.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/tarn/-/tarn-2.0.0.tgz#c68499f69881f99ae955b4317ca7d212d942fdee"
|
resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.1.tgz#ebac2c6dbc6977d34d4526e0a7814200386a8aec"
|
||||||
integrity sha512-7rNMCZd3s9bhQh47ksAQd92ADFcJUjjbyOvyFjNLwTPpGieFHMC84S+LOzw0fx1uh6hnDz/19r8CPMnIjJlMMA==
|
integrity sha512-6usSlV9KyHsspvwu2duKH+FMUhqJnAh6J5J/4MITl8s94iSUQTLkJggdiewKv4RyARQccnigV48Z+khiuVZDJw==
|
||||||
|
|
||||||
teeny-request@^3.11.3:
|
teeny-request@^3.11.3:
|
||||||
version "3.11.3"
|
version "3.11.3"
|
||||||
@ -19282,7 +19270,7 @@ uuid@^3.0.1, uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2, uuid@^3.3.3, uuid@^3.4.0:
|
|||||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
|
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
|
||||||
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
|
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
|
||||||
|
|
||||||
uuid@^7.0.1, uuid@^7.0.3:
|
uuid@^7.0.3:
|
||||||
version "7.0.3"
|
version "7.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
|
resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
|
||||||
integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==
|
integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==
|
||||||
@ -19306,7 +19294,7 @@ v8-to-istanbul@^7.0.0:
|
|||||||
convert-source-map "^1.6.0"
|
convert-source-map "^1.6.0"
|
||||||
source-map "^0.7.3"
|
source-map "^0.7.3"
|
||||||
|
|
||||||
v8flags@^3.1.3:
|
v8flags@^3.2.0:
|
||||||
version "3.2.0"
|
version "3.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656"
|
resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656"
|
||||||
integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==
|
integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==
|
||||||
|
Loading…
x
Reference in New Issue
Block a user