directus 9.4.3 → 9.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/auth/auth.d.ts +2 -1
- package/dist/auth/drivers/oauth2.js +10 -20
- package/dist/auth/drivers/openid.js +12 -2
- package/dist/cli/commands/init/questions.d.ts +3 -0
- package/dist/cli/commands/init/questions.js +2 -0
- package/dist/cli/utils/create-db-connection.d.ts +1 -1
- package/dist/cli/utils/create-db-connection.js +11 -1
- package/dist/cli/utils/drivers.d.ts +1 -0
- package/dist/cli/utils/drivers.js +2 -1
- package/dist/controllers/files.js +1 -1
- package/dist/controllers/utils.js +2 -0
- package/dist/database/helpers/date/index.d.ts +1 -0
- package/dist/database/helpers/date/index.js +3 -1
- package/dist/database/helpers/geometry/index.d.ts +1 -0
- package/dist/database/helpers/geometry/index.js +3 -1
- package/dist/database/helpers/index.d.ts +2 -0
- package/dist/database/helpers/index.js +2 -0
- package/dist/database/helpers/schema/dialects/cockroachdb.d.ts +16 -0
- package/dist/database/helpers/schema/dialects/cockroachdb.js +16 -0
- package/dist/database/helpers/schema/dialects/default.d.ts +3 -0
- package/dist/database/helpers/schema/dialects/default.js +7 -0
- package/dist/database/helpers/schema/dialects/oracle.d.ts +12 -0
- package/dist/database/helpers/schema/dialects/oracle.js +13 -0
- package/dist/database/helpers/schema/index.d.ts +7 -0
- package/dist/database/helpers/schema/index.js +17 -0
- package/dist/database/helpers/schema/types.d.ts +25 -0
- package/dist/database/helpers/schema/types.js +89 -0
- package/dist/database/index.d.ts +1 -1
- package/dist/database/index.js +33 -16
- package/dist/database/migrations/20201105B-change-webhook-url-type.js +6 -25
- package/dist/database/migrations/20210312A-webhooks-collections-text.js +6 -25
- package/dist/database/migrations/20210415A-make-filesize-nullable.js +9 -4
- package/dist/database/migrations/20210506A-rename-interfaces.js +1 -1
- package/dist/database/migrations/20210510A-restructure-relations.js +12 -4
- package/dist/database/migrations/20210525A-add-insights.js +2 -2
- package/dist/database/migrations/20210626A-change-filesize-bigint.js +5 -7
- package/dist/database/migrations/20210903A-add-auth-provider.js +11 -2
- package/dist/database/migrations/20210907A-webhooks-collections-not-null.js +6 -20
- package/dist/database/migrations/20210920A-webhooks-url-not-null.js +10 -14
- package/dist/database/migrations/20211211A-add-shares.js +2 -2
- package/dist/database/run-ast.d.ts +1 -1
- package/dist/database/seeds/01-collections.yaml +1 -0
- package/dist/database/seeds/02-roles.yaml +1 -0
- package/dist/database/seeds/03-users.yaml +1 -0
- package/dist/database/system-data/relations/index.d.ts +1 -1
- package/dist/emitter.d.ts +3 -4
- package/dist/emitter.js +2 -8
- package/dist/exceptions/database/translate.js +1 -0
- package/dist/exceptions/index.d.ts +1 -0
- package/dist/exceptions/index.js +1 -0
- package/dist/exceptions/unsupported-media-type.d.ts +4 -0
- package/dist/exceptions/unsupported-media-type.js +10 -0
- package/dist/extensions.d.ts +6 -5
- package/dist/extensions.js +56 -42
- package/dist/logger.js +22 -1
- package/dist/services/authentication.d.ts +2 -2
- package/dist/services/authentication.js +3 -1
- package/dist/services/authorization.d.ts +2 -3
- package/dist/services/collections.d.ts +2 -2
- package/dist/services/collections.js +10 -6
- package/dist/services/fields.d.ts +2 -3
- package/dist/services/fields.js +8 -4
- package/dist/services/graphql.d.ts +2 -1
- package/dist/services/import.d.ts +2 -2
- package/dist/services/import.js +2 -1
- package/dist/services/items.d.ts +2 -2
- package/dist/services/items.js +22 -18
- package/dist/services/mail/index.d.ts +2 -2
- package/dist/services/meta.d.ts +2 -2
- package/dist/services/payload.d.ts +2 -2
- package/dist/services/relations.d.ts +2 -2
- package/dist/services/server.d.ts +2 -2
- package/dist/services/specifications.d.ts +2 -2
- package/dist/services/users.d.ts +2 -3
- package/dist/services/utils.d.ts +2 -2
- package/dist/types/ast.d.ts +1 -2
- package/dist/types/auth.d.ts +1 -3
- package/dist/types/index.d.ts +0 -3
- package/dist/types/index.js +0 -3
- package/dist/types/services.d.ts +1 -3
- package/dist/types/snapshot.d.ts +1 -2
- package/dist/utils/apply-query.d.ts +1 -2
- package/dist/utils/apply-query.js +1 -1
- package/dist/utils/apply-snapshot.d.ts +2 -1
- package/dist/utils/get-ast-from-query.d.ts +2 -3
- package/dist/utils/get-permissions.d.ts +1 -2
- package/dist/utils/get-relation-type.d.ts +1 -1
- package/dist/utils/get-schema.d.ts +1 -2
- package/dist/utils/get-snapshot.d.ts +2 -1
- package/dist/utils/merge-permissions-for-share.d.ts +1 -2
- package/dist/utils/reduce-schema.d.ts +1 -2
- package/example.env +8 -0
- package/package.json +15 -14
- package/dist/cli/index.test.d.ts +0 -1
- package/dist/cli/index.test.js +0 -58
- package/dist/middleware/cache.test.d.ts +0 -1
- package/dist/middleware/cache.test.js +0 -62
- package/dist/tests/database/migrations/run.test.d.ts +0 -1
- package/dist/tests/database/migrations/run.test.js +0 -29
- package/dist/types/extensions.d.ts +0 -43
- package/dist/types/extensions.js +0 -2
- package/dist/types/relation.d.ts +0 -21
- package/dist/types/relation.js +0 -2
- package/dist/types/schema.d.ts +0 -32
- package/dist/types/schema.js +0 -2
- package/dist/utils/get-cache-key.test.d.ts +0 -1
- package/dist/utils/get-cache-key.test.js +0 -53
package/dist/database/index.js
CHANGED
|
@@ -24,37 +24,43 @@ function getDatabase() {
|
|
|
24
24
|
}
|
|
25
25
|
const connectionConfig = (0, get_config_from_env_1.getConfigFromEnv)('DB_', [
|
|
26
26
|
'DB_CLIENT',
|
|
27
|
+
'DB_VERSION',
|
|
27
28
|
'DB_SEARCH_PATH',
|
|
28
29
|
'DB_CONNECTION_STRING',
|
|
29
30
|
'DB_POOL',
|
|
30
31
|
'DB_EXCLUDE_TABLES',
|
|
32
|
+
'DB_VERSION',
|
|
31
33
|
]);
|
|
32
34
|
const poolConfig = (0, get_config_from_env_1.getConfigFromEnv)('DB_POOL');
|
|
33
35
|
const requiredEnvVars = ['DB_CLIENT'];
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
36
|
+
switch (env_1.default.DB_CLIENT) {
|
|
37
|
+
case 'sqlite3':
|
|
38
|
+
requiredEnvVars.push('DB_FILENAME');
|
|
39
|
+
break;
|
|
40
|
+
case 'oracledb':
|
|
41
|
+
if (!env_1.default.DB_CONNECT_STRING) {
|
|
42
|
+
requiredEnvVars.push('DB_HOST', 'DB_PORT', 'DB_DATABASE', 'DB_USER', 'DB_PASSWORD');
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
requiredEnvVars.push('DB_USER', 'DB_PASSWORD', 'DB_CONNECT_STRING');
|
|
46
|
+
}
|
|
47
|
+
break;
|
|
48
|
+
case 'cockroachdb':
|
|
49
|
+
case 'pg':
|
|
47
50
|
if (!env_1.default.DB_CONNECTION_STRING) {
|
|
48
51
|
requiredEnvVars.push('DB_HOST', 'DB_PORT', 'DB_DATABASE', 'DB_USER');
|
|
49
52
|
}
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
else {
|
|
54
|
+
requiredEnvVars.push('DB_CONNECTION_STRING');
|
|
55
|
+
}
|
|
56
|
+
break;
|
|
57
|
+
default:
|
|
52
58
|
requiredEnvVars.push('DB_HOST', 'DB_PORT', 'DB_DATABASE', 'DB_USER', 'DB_PASSWORD');
|
|
53
|
-
}
|
|
54
59
|
}
|
|
55
60
|
(0, validate_env_1.validateEnv)(requiredEnvVars);
|
|
56
61
|
const knexConfig = {
|
|
57
62
|
client: env_1.default.DB_CLIENT,
|
|
63
|
+
version: env_1.default.DB_VERSION,
|
|
58
64
|
searchPath: env_1.default.DB_SEARCH_PATH,
|
|
59
65
|
connection: env_1.default.DB_CONNECTION_STRING || connectionConfig,
|
|
60
66
|
log: {
|
|
@@ -82,6 +88,15 @@ function getDatabase() {
|
|
|
82
88
|
callback(null, conn);
|
|
83
89
|
};
|
|
84
90
|
}
|
|
91
|
+
if (env_1.default.DB_CLIENT === 'cockroachdb') {
|
|
92
|
+
poolConfig.afterCreate = async (conn, callback) => {
|
|
93
|
+
logger_1.default.trace('Setting CRDB serial_normalization and default_int_size');
|
|
94
|
+
const run = (0, util_1.promisify)(conn.query.bind(conn));
|
|
95
|
+
await run('SET serial_normalization = "sql_sequence"');
|
|
96
|
+
await run('SET default_int_size = 4');
|
|
97
|
+
callback(null, conn);
|
|
98
|
+
};
|
|
99
|
+
}
|
|
85
100
|
if (env_1.default.DB_CLIENT === 'mssql') {
|
|
86
101
|
// This brings MS SQL in line with the other DB vendors. We shouldn't do any automatic
|
|
87
102
|
// timezone conversion on the database level, especially not when other database vendors don't
|
|
@@ -154,6 +169,8 @@ function getDatabaseClient(database) {
|
|
|
154
169
|
return 'mysql';
|
|
155
170
|
case 'Client_PG':
|
|
156
171
|
return 'postgres';
|
|
172
|
+
case 'Client_CockroachDB':
|
|
173
|
+
return 'cockroachdb';
|
|
157
174
|
case 'Client_SQLite3':
|
|
158
175
|
return 'sqlite';
|
|
159
176
|
case 'Client_Oracledb':
|
|
@@ -1,35 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.down = exports.up = void 0;
|
|
7
|
-
|
|
8
|
-
const oracledb_1 = __importDefault(require("knex/lib/dialects/oracledb"));
|
|
9
|
-
async function oracleAlterUrl(knex, type) {
|
|
10
|
-
await knex.raw('ALTER TABLE "directus_webhooks" ADD "url__temp" ?', [knex.raw(type)]);
|
|
11
|
-
await knex.raw('UPDATE "directus_webhooks" SET "url__temp"="url"');
|
|
12
|
-
await knex.raw('ALTER TABLE "directus_webhooks" DROP COLUMN "url"');
|
|
13
|
-
await knex.raw('ALTER TABLE "directus_webhooks" RENAME COLUMN "url__temp" TO "url"');
|
|
14
|
-
await knex.raw('ALTER TABLE "directus_webhooks" MODIFY "url" NOT NULL');
|
|
15
|
-
}
|
|
4
|
+
const helpers_1 = require("../helpers");
|
|
16
5
|
async function up(knex) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
await knex.schema.alterTable('directus_webhooks', (table) => {
|
|
22
|
-
table.text('url').alter();
|
|
23
|
-
});
|
|
6
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
7
|
+
await helper.changeToText('directus_webhooks', 'url');
|
|
24
8
|
}
|
|
25
9
|
exports.up = up;
|
|
26
10
|
async function down(knex) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
await knex.schema.alterTable('directus_webhooks', (table) => {
|
|
32
|
-
table.string('url').notNullable().alter();
|
|
11
|
+
await (0, helpers_1.getHelpers)(knex).schema.changeToString('directus_webhooks', 'url', {
|
|
12
|
+
nullable: false,
|
|
13
|
+
length: 255,
|
|
33
14
|
});
|
|
34
15
|
}
|
|
35
16
|
exports.down = down;
|
|
@@ -1,35 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.down = exports.up = void 0;
|
|
7
|
-
|
|
8
|
-
const oracledb_1 = __importDefault(require("knex/lib/dialects/oracledb"));
|
|
9
|
-
async function oracleAlterCollections(knex, type) {
|
|
10
|
-
await knex.raw('ALTER TABLE "directus_webhooks" ADD "collections__temp" ?', [knex.raw(type)]);
|
|
11
|
-
await knex.raw('UPDATE "directus_webhooks" SET "collections__temp"="collections"');
|
|
12
|
-
await knex.raw('ALTER TABLE "directus_webhooks" DROP COLUMN "collections"');
|
|
13
|
-
await knex.raw('ALTER TABLE "directus_webhooks" RENAME COLUMN "collections__temp" TO "collections"');
|
|
14
|
-
await knex.raw('ALTER TABLE "directus_webhooks" MODIFY "collections" NOT NULL');
|
|
15
|
-
}
|
|
4
|
+
const helpers_1 = require("../helpers");
|
|
16
5
|
async function up(knex) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
await knex.schema.alterTable('directus_webhooks', (table) => {
|
|
22
|
-
table.text('collections').alter();
|
|
23
|
-
});
|
|
6
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
7
|
+
await helper.changeToText('directus_webhooks', 'collections');
|
|
24
8
|
}
|
|
25
9
|
exports.up = up;
|
|
26
10
|
async function down(knex) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
await knex.schema.alterTable('directus_webhooks', (table) => {
|
|
32
|
-
table.string('collections').notNullable().alter();
|
|
11
|
+
await (0, helpers_1.getHelpers)(knex).schema.changeToString('directus_webhooks', 'collections', {
|
|
12
|
+
nullable: false,
|
|
13
|
+
length: 255,
|
|
33
14
|
});
|
|
34
15
|
}
|
|
35
16
|
exports.down = down;
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.down = exports.up = void 0;
|
|
4
|
+
const helpers_1 = require("../helpers");
|
|
4
5
|
async function up(knex) {
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
7
|
+
await helper.changeToInteger('directus_files', 'filesize', {
|
|
8
|
+
nullable: true,
|
|
9
|
+
default: null,
|
|
7
10
|
});
|
|
8
11
|
}
|
|
9
12
|
exports.up = up;
|
|
10
13
|
async function down(knex) {
|
|
11
|
-
|
|
12
|
-
|
|
14
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
15
|
+
await helper.changeToInteger('directus_files', 'filesize', {
|
|
16
|
+
nullable: false,
|
|
17
|
+
default: 0,
|
|
13
18
|
});
|
|
14
19
|
}
|
|
15
20
|
exports.down = down;
|
|
@@ -32,7 +32,7 @@ const changes = [
|
|
|
32
32
|
['toggle', 'boolean'],
|
|
33
33
|
['translations', 'translations'],
|
|
34
34
|
['tree-view', 'list-o2m-tree-view'],
|
|
35
|
-
['user', 'select-dropdown-m2o', { template: '{{avatar.$thumbnail}}
|
|
35
|
+
['user', 'select-dropdown-m2o', { template: '{{avatar.$thumbnail}} {{first_name}} {{last_name}}' }],
|
|
36
36
|
['wysiwyg', 'input-rich-text-html'],
|
|
37
37
|
// System:
|
|
38
38
|
['collection', 'system-collection'],
|
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.down = exports.up = void 0;
|
|
4
|
+
const helpers_1 = require("../helpers");
|
|
4
5
|
async function up(knex) {
|
|
6
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
5
7
|
await knex.schema.alterTable('directus_relations', (table) => {
|
|
6
8
|
table.dropColumns('many_primary', 'one_primary');
|
|
7
9
|
table.string('one_deselect_action').defaultTo('nullify');
|
|
8
|
-
table.string('sort_field', 64).alter();
|
|
9
10
|
});
|
|
10
11
|
await knex('directus_relations').update({ one_deselect_action: 'nullify' });
|
|
11
|
-
await
|
|
12
|
-
|
|
12
|
+
await helper.changeToString('directus_relations', 'sort_field', {
|
|
13
|
+
length: 64,
|
|
14
|
+
});
|
|
15
|
+
await helper.changeToString('directus_relations', 'one_deselect_action', {
|
|
16
|
+
nullable: false,
|
|
17
|
+
default: 'nullify',
|
|
13
18
|
});
|
|
14
19
|
}
|
|
15
20
|
exports.up = up;
|
|
16
21
|
async function down(knex) {
|
|
22
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
23
|
+
await helper.changeToString('directus_relations', 'sort_field', {
|
|
24
|
+
length: 255,
|
|
25
|
+
});
|
|
17
26
|
await knex.schema.alterTable('directus_relations', (table) => {
|
|
18
27
|
table.dropColumn('one_deselect_action');
|
|
19
28
|
table.string('many_primary', 64);
|
|
20
29
|
table.string('one_primary', 64);
|
|
21
|
-
table.string('sort_field', 255).alter();
|
|
22
30
|
});
|
|
23
31
|
}
|
|
24
32
|
exports.down = down;
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.down = exports.up = void 0;
|
|
4
4
|
async function up(knex) {
|
|
5
5
|
await knex.schema.createTable('directus_dashboards', (table) => {
|
|
6
|
-
table.uuid('id').primary();
|
|
6
|
+
table.uuid('id').primary().notNullable();
|
|
7
7
|
table.string('name').notNullable();
|
|
8
8
|
table.string('icon', 30).notNullable().defaultTo('dashboard');
|
|
9
9
|
table.text('note');
|
|
@@ -11,7 +11,7 @@ async function up(knex) {
|
|
|
11
11
|
table.uuid('user_created').references('id').inTable('directus_users').onDelete('SET NULL');
|
|
12
12
|
});
|
|
13
13
|
await knex.schema.createTable('directus_panels', (table) => {
|
|
14
|
-
table.uuid('id').primary();
|
|
14
|
+
table.uuid('id').primary().notNullable();
|
|
15
15
|
table.uuid('dashboard').notNullable().references('id').inTable('directus_dashboards').onDelete('CASCADE');
|
|
16
16
|
table.string('name');
|
|
17
17
|
table.string('icon', 30).defaultTo('insert_chart');
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.down = exports.up = void 0;
|
|
7
|
-
|
|
8
|
-
const oracledb_1 = __importDefault(require("knex/lib/dialects/oracledb"));
|
|
4
|
+
const helpers_1 = require("../helpers");
|
|
9
5
|
async function up(knex) {
|
|
10
|
-
|
|
6
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
7
|
+
if (helper.isOneOfClients(['oracle', 'cockroachdb'])) {
|
|
11
8
|
return;
|
|
12
9
|
}
|
|
13
10
|
await knex.schema.alterTable('directus_files', (table) => {
|
|
@@ -16,7 +13,8 @@ async function up(knex) {
|
|
|
16
13
|
}
|
|
17
14
|
exports.up = up;
|
|
18
15
|
async function down(knex) {
|
|
19
|
-
|
|
16
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
17
|
+
if (helper.isOneOfClients(['oracle', 'cockroachdb'])) {
|
|
20
18
|
return;
|
|
21
19
|
}
|
|
22
20
|
await knex.schema.alterTable('directus_files', (table) => {
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.down = exports.up = void 0;
|
|
4
|
+
const helpers_1 = require("../helpers");
|
|
4
5
|
async function up(knex) {
|
|
6
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
5
7
|
await knex.schema.alterTable('directus_users', (table) => {
|
|
6
8
|
table.dropUnique(['email']);
|
|
7
9
|
});
|
|
8
10
|
await knex.schema.alterTable('directus_users', (table) => {
|
|
9
11
|
table.string('provider', 128).notNullable().defaultTo('default');
|
|
10
12
|
table.string('external_identifier').unique();
|
|
11
|
-
|
|
13
|
+
});
|
|
14
|
+
await helper.changeToString('directus_users', 'email', {
|
|
15
|
+
nullable: true,
|
|
16
|
+
length: 128,
|
|
12
17
|
});
|
|
13
18
|
await knex.schema.alterTable('directus_users', (table) => {
|
|
14
19
|
table.unique(['email']);
|
|
@@ -19,10 +24,14 @@ async function up(knex) {
|
|
|
19
24
|
}
|
|
20
25
|
exports.up = up;
|
|
21
26
|
async function down(knex) {
|
|
27
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
22
28
|
await knex.schema.alterTable('directus_users', (table) => {
|
|
23
29
|
table.dropColumn('provider');
|
|
24
30
|
table.dropColumn('external_identifier');
|
|
25
|
-
|
|
31
|
+
});
|
|
32
|
+
await helper.changeToString('directus_users', 'email', {
|
|
33
|
+
nullable: false,
|
|
34
|
+
length: 128,
|
|
26
35
|
});
|
|
27
36
|
await knex.schema.alterTable('directus_sessions', (table) => {
|
|
28
37
|
table.dropColumn('data');
|
|
@@ -1,30 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.down = exports.up = void 0;
|
|
7
|
-
|
|
8
|
-
const oracledb_1 = __importDefault(require("knex/lib/dialects/oracledb"));
|
|
4
|
+
const helpers_1 = require("../helpers");
|
|
9
5
|
async function up(knex) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
await knex.schema.alterTable('directus_webhooks', (table) => {
|
|
16
|
-
table.text('collections').notNullable().alter();
|
|
6
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
7
|
+
await helper.changeToText('directus_webhooks', 'collections', {
|
|
8
|
+
nullable: false,
|
|
17
9
|
});
|
|
18
10
|
}
|
|
19
11
|
exports.up = up;
|
|
20
12
|
async function down(knex) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// "20210312A-webhooks-collections-text.ts"
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
await knex.schema.alterTable('directus_webhooks', (table) => {
|
|
27
|
-
table.text('collections').alter();
|
|
28
|
-
});
|
|
13
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
14
|
+
await helper.changeToText('directus_webhooks', 'collections');
|
|
29
15
|
}
|
|
30
16
|
exports.down = down;
|
|
@@ -1,30 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.down = exports.up = void 0;
|
|
7
|
-
|
|
8
|
-
const oracledb_1 = __importDefault(require("knex/lib/dialects/oracledb"));
|
|
4
|
+
const helpers_1 = require("../helpers");
|
|
9
5
|
async function up(knex) {
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
7
|
+
if (helper.isOneOfClients(['oracle', 'cockroachdb'])) {
|
|
8
|
+
// Oracle and Cockroach are already not nullable due to an oversight in
|
|
12
9
|
// "20201105B-change-webhook-url-type.ts"
|
|
13
10
|
return;
|
|
14
11
|
}
|
|
15
|
-
await
|
|
16
|
-
|
|
12
|
+
await helper.changeToText('directus_webhooks', 'url', {
|
|
13
|
+
nullable: false,
|
|
17
14
|
});
|
|
18
15
|
}
|
|
19
16
|
exports.up = up;
|
|
20
17
|
async function down(knex) {
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
19
|
+
if (helper.isOneOfClients(['oracle', 'cockroachdb'])) {
|
|
20
|
+
// Oracle and Cockroach are already not nullable due to an oversight in
|
|
23
21
|
// "20201105B-change-webhook-url-type.ts"
|
|
24
22
|
return;
|
|
25
23
|
}
|
|
26
|
-
await
|
|
27
|
-
table.text('url').alter();
|
|
28
|
-
});
|
|
24
|
+
await helper.changeToText('directus_webhooks', 'url');
|
|
29
25
|
}
|
|
30
26
|
exports.down = down;
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.down = exports.up = void 0;
|
|
4
4
|
async function up(knex) {
|
|
5
5
|
await knex.schema.createTable('directus_shares', (table) => {
|
|
6
|
-
table.uuid('id').primary();
|
|
6
|
+
table.uuid('id').primary().notNullable();
|
|
7
7
|
table.string('name');
|
|
8
8
|
table.string('collection', 64).references('collection').inTable('directus_collections').onDelete('CASCADE');
|
|
9
9
|
table.string('item');
|
|
@@ -21,7 +21,7 @@ async function up(knex) {
|
|
|
21
21
|
table.dropColumn('data');
|
|
22
22
|
});
|
|
23
23
|
await knex.schema.alterTable('directus_sessions', (table) => {
|
|
24
|
-
table.
|
|
24
|
+
table.setNullable('user');
|
|
25
25
|
table.uuid('share').references('id').inTable('directus_shares').onDelete('CASCADE');
|
|
26
26
|
});
|
|
27
27
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { RelationMeta } from '
|
|
1
|
+
import { RelationMeta } from '@directus/shared/types';
|
|
2
2
|
export declare const systemRelationRows: RelationMeta[];
|
package/dist/emitter.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { ActionHandler,
|
|
1
|
+
import { ActionHandler, EventContext, FilterHandler, InitHandler } from '@directus/shared/types';
|
|
2
2
|
export declare class Emitter {
|
|
3
3
|
private filterEmitter;
|
|
4
4
|
private actionEmitter;
|
|
5
5
|
private initEmitter;
|
|
6
6
|
constructor();
|
|
7
|
-
emitFilter<T>(event: string, payload: T, meta: Record<string, any>, context:
|
|
8
|
-
emitAction(event: string, meta: Record<string, any>, context:
|
|
7
|
+
emitFilter<T>(event: string | string[], payload: T, meta: Record<string, any>, context: EventContext): Promise<T>;
|
|
8
|
+
emitAction(event: string | string[], meta: Record<string, any>, context: EventContext): void;
|
|
9
9
|
emitInit(event: string, meta: Record<string, any>): Promise<void>;
|
|
10
10
|
onFilter(event: string, handler: FilterHandler): void;
|
|
11
11
|
onAction(event: string, handler: ActionHandler): void;
|
|
@@ -14,7 +14,6 @@ export declare class Emitter {
|
|
|
14
14
|
offAction(event: string, handler: ActionHandler): void;
|
|
15
15
|
offInit(event: string, handler: InitHandler): void;
|
|
16
16
|
offAll(): void;
|
|
17
|
-
private eventsToEmit;
|
|
18
17
|
}
|
|
19
18
|
declare const emitter: Emitter;
|
|
20
19
|
export default emitter;
|
package/dist/emitter.js
CHANGED
|
@@ -20,7 +20,7 @@ class Emitter {
|
|
|
20
20
|
this.initEmitter = new eventemitter2_1.EventEmitter2(emitterOptions);
|
|
21
21
|
}
|
|
22
22
|
async emitFilter(event, payload, meta, context) {
|
|
23
|
-
const events =
|
|
23
|
+
const events = Array.isArray(event) ? event : [event];
|
|
24
24
|
const listeners = events.flatMap((event) => this.filterEmitter.listeners(event));
|
|
25
25
|
let updatedPayload = payload;
|
|
26
26
|
for (const listener of listeners) {
|
|
@@ -32,7 +32,7 @@ class Emitter {
|
|
|
32
32
|
return updatedPayload;
|
|
33
33
|
}
|
|
34
34
|
emitAction(event, meta, context) {
|
|
35
|
-
const events =
|
|
35
|
+
const events = Array.isArray(event) ? event : [event];
|
|
36
36
|
for (const event of events) {
|
|
37
37
|
this.actionEmitter.emitAsync(event, meta, context).catch((err) => {
|
|
38
38
|
logger_1.default.warn(`An error was thrown while executing action "${event}"`);
|
|
@@ -72,12 +72,6 @@ class Emitter {
|
|
|
72
72
|
this.actionEmitter.removeAllListeners();
|
|
73
73
|
this.initEmitter.removeAllListeners();
|
|
74
74
|
}
|
|
75
|
-
eventsToEmit(event, meta) {
|
|
76
|
-
if (event.startsWith('items')) {
|
|
77
|
-
return [event, `${meta.collection}.${event}`];
|
|
78
|
-
}
|
|
79
|
-
return [event];
|
|
80
|
-
}
|
|
81
75
|
}
|
|
82
76
|
exports.Emitter = Emitter;
|
|
83
77
|
const emitter = new Emitter();
|
|
@@ -14,5 +14,6 @@ export * from './range-not-satisfiable';
|
|
|
14
14
|
export * from './route-not-found';
|
|
15
15
|
export * from './service-unavailable';
|
|
16
16
|
export * from './unprocessable-entity';
|
|
17
|
+
export * from './unsupported-media-type';
|
|
17
18
|
export * from './user-suspended';
|
|
18
19
|
export * from './unexpected-response';
|
package/dist/exceptions/index.js
CHANGED
|
@@ -26,5 +26,6 @@ __exportStar(require("./range-not-satisfiable"), exports);
|
|
|
26
26
|
__exportStar(require("./route-not-found"), exports);
|
|
27
27
|
__exportStar(require("./service-unavailable"), exports);
|
|
28
28
|
__exportStar(require("./unprocessable-entity"), exports);
|
|
29
|
+
__exportStar(require("./unsupported-media-type"), exports);
|
|
29
30
|
__exportStar(require("./user-suspended"), exports);
|
|
30
31
|
__exportStar(require("./unexpected-response"), exports);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnsupportedMediaTypeException = void 0;
|
|
4
|
+
const exceptions_1 = require("@directus/shared/exceptions");
|
|
5
|
+
class UnsupportedMediaTypeException extends exceptions_1.BaseException {
|
|
6
|
+
constructor(message, extensions) {
|
|
7
|
+
super(message, 415, 'UNSUPPORTED_MEDIA_TYPE', extensions);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.UnsupportedMediaTypeException = UnsupportedMediaTypeException;
|
package/dist/extensions.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
2
|
import { AppExtensionType, ExtensionType } from '@directus/shared/types';
|
|
3
3
|
export declare function getExtensionManager(): ExtensionManager;
|
|
4
|
+
declare type Options = {
|
|
5
|
+
schedule: boolean;
|
|
6
|
+
watch: boolean;
|
|
7
|
+
};
|
|
4
8
|
declare class ExtensionManager {
|
|
5
9
|
private isLoaded;
|
|
6
|
-
private
|
|
10
|
+
private options;
|
|
7
11
|
private extensions;
|
|
8
12
|
private appExtensions;
|
|
9
13
|
private apiExtensions;
|
|
@@ -11,10 +15,7 @@ declare class ExtensionManager {
|
|
|
11
15
|
private endpointRouter;
|
|
12
16
|
private watcher;
|
|
13
17
|
constructor();
|
|
14
|
-
initialize(
|
|
15
|
-
schedule: boolean;
|
|
16
|
-
watch: boolean;
|
|
17
|
-
}): Promise<void>;
|
|
18
|
+
initialize(options?: Partial<Options>): Promise<void>;
|
|
18
19
|
reload(): Promise<void>;
|
|
19
20
|
getExtensionsList(type?: ExtensionType): string[];
|
|
20
21
|
getAppExtensions(type: AppExtensionType): string | undefined;
|