directus 9.6.0 → 9.8.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/dist/app.js +3 -1
- package/dist/auth/drivers/oauth2.js +3 -0
- package/dist/auth/drivers/openid.js +3 -0
- package/dist/cache.d.ts +4 -1
- package/dist/cache.js +29 -7
- package/dist/cli/commands/schema/apply.d.ts +1 -0
- package/dist/cli/commands/schema/apply.js +9 -5
- package/dist/cli/index.js +1 -0
- package/dist/controllers/assets.js +9 -1
- package/dist/controllers/utils.js +18 -1
- package/dist/database/helpers/date/dialects/default.d.ts +3 -0
- package/dist/database/helpers/date/dialects/default.js +7 -0
- package/dist/database/helpers/date/dialects/sqlite.d.ts +0 -9
- package/dist/database/helpers/date/dialects/sqlite.js +0 -24
- package/dist/database/helpers/date/index.d.ts +6 -6
- package/dist/database/helpers/date/index.js +13 -13
- package/dist/database/helpers/date/types.d.ts +0 -9
- package/dist/database/helpers/{date → fn}/dialects/mssql.d.ts +3 -2
- package/dist/database/helpers/{date → fn}/dialects/mssql.js +14 -3
- package/dist/database/helpers/{date → fn}/dialects/mysql.d.ts +3 -2
- package/dist/database/helpers/{date → fn}/dialects/mysql.js +14 -3
- package/dist/database/helpers/{date → fn}/dialects/oracle.d.ts +3 -2
- package/dist/database/helpers/{date → fn}/dialects/oracle.js +14 -3
- package/dist/database/helpers/{date → fn}/dialects/postgres.d.ts +3 -2
- package/dist/database/helpers/{date → fn}/dialects/postgres.js +14 -3
- package/dist/database/helpers/fn/dialects/sqlite.d.ts +13 -0
- package/dist/database/helpers/fn/dialects/sqlite.js +42 -0
- package/dist/database/helpers/fn/index.d.ts +7 -0
- package/dist/database/helpers/fn/index.js +17 -0
- package/dist/database/helpers/fn/types.d.ts +18 -0
- package/dist/database/helpers/fn/types.js +27 -0
- package/dist/database/helpers/index.d.ts +4 -1
- package/dist/database/helpers/index.js +7 -1
- package/dist/database/index.js +0 -3
- package/dist/database/migrations/20220308A-add-bookmark-icon-and-color.d.ts +3 -0
- package/dist/database/migrations/20220308A-add-bookmark-icon-and-color.js +17 -0
- package/dist/database/migrations/20220314A-add-translation-strings.d.ts +3 -0
- package/dist/database/migrations/20220314A-add-translation-strings.js +15 -0
- package/dist/database/migrations/20220322A-rename-field-typecast-flags.d.ts +3 -0
- package/dist/database/migrations/20220322A-rename-field-typecast-flags.js +77 -0
- package/dist/database/migrations/20220323A-add-field-validation.d.ts +3 -0
- package/dist/database/migrations/20220323A-add-field-validation.js +17 -0
- package/dist/database/migrations/20220325A-fix-typecast-flags.d.ts +3 -0
- package/dist/database/migrations/20220325A-fix-typecast-flags.js +49 -0
- package/dist/database/migrations/20220325B-add-default-language.d.ts +3 -0
- package/dist/database/migrations/20220325B-add-default-language.js +28 -0
- package/dist/database/migrations/run.js +1 -1
- package/dist/database/run-ast.js +11 -3
- package/dist/database/system-data/fields/activity.yaml +4 -4
- package/dist/database/system-data/fields/collections.yaml +4 -4
- package/dist/database/system-data/fields/fields.yaml +17 -8
- package/dist/database/system-data/fields/files.yaml +2 -2
- package/dist/database/system-data/fields/panels.yaml +2 -2
- package/dist/database/system-data/fields/permissions.yaml +4 -4
- package/dist/database/system-data/fields/presets.yaml +17 -3
- package/dist/database/system-data/fields/relations.yaml +1 -1
- package/dist/database/system-data/fields/revisions.yaml +2 -2
- package/dist/database/system-data/fields/roles.yaml +4 -4
- package/dist/database/system-data/fields/settings.yaml +19 -4
- package/dist/database/system-data/fields/users.yaml +2 -2
- package/dist/database/system-data/fields/webhooks.yaml +4 -4
- package/dist/env.js +6 -2
- package/dist/exceptions/database/dialects/mysql.js +23 -17
- package/dist/logger.js +2 -1
- package/dist/middleware/respond.js +7 -28
- package/dist/services/activity.js +4 -1
- package/dist/services/authorization.d.ts +1 -1
- package/dist/services/authorization.js +156 -14
- package/dist/services/collections.js +222 -198
- package/dist/services/fields.js +184 -173
- package/dist/services/files.js +69 -3
- package/dist/services/graphql.js +2 -2
- package/dist/services/import-export.d.ts +34 -0
- package/dist/services/import-export.js +270 -0
- package/dist/services/index.d.ts +2 -1
- package/dist/services/index.js +2 -1
- package/dist/services/items.js +1 -0
- package/dist/services/payload.js +11 -9
- package/dist/services/permissions.js +10 -10
- package/dist/services/relations.js +93 -78
- package/dist/services/server.js +1 -0
- package/dist/services/shares.js +2 -1
- package/dist/services/users.js +3 -1
- package/dist/utils/apply-query.js +21 -3
- package/dist/utils/get-column.d.ts +6 -5
- package/dist/utils/get-column.js +16 -8
- package/dist/utils/get-date-formatted.d.ts +1 -0
- package/dist/utils/get-date-formatted.js +14 -0
- package/dist/utils/get-local-type.js +2 -2
- package/dist/utils/get-permissions.js +1 -1
- package/dist/utils/get-schema.d.ts +1 -1
- package/dist/utils/get-schema.js +16 -11
- package/dist/utils/track.js +3 -2
- package/dist/utils/url.d.ts +1 -1
- package/dist/utils/url.js +1 -1
- package/dist/utils/validate-storage.js +3 -1
- package/package.json +13 -12
- package/dist/services/import.d.ts +0 -13
- package/dist/services/import.js +0 -118
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SchemaOverview } from '@directus/shared/types';
|
|
2
|
+
import { Knex } from 'knex';
|
|
3
|
+
import { DatabaseHelper } from '../types';
|
|
4
|
+
export declare abstract class FnHelper extends DatabaseHelper {
|
|
5
|
+
protected knex: Knex;
|
|
6
|
+
protected schema: SchemaOverview;
|
|
7
|
+
constructor(knex: Knex, schema: SchemaOverview);
|
|
8
|
+
abstract year(table: string, column: string): Knex.Raw;
|
|
9
|
+
abstract month(table: string, column: string): Knex.Raw;
|
|
10
|
+
abstract week(table: string, column: string): Knex.Raw;
|
|
11
|
+
abstract day(table: string, column: string): Knex.Raw;
|
|
12
|
+
abstract weekday(table: string, column: string): Knex.Raw;
|
|
13
|
+
abstract hour(table: string, column: string): Knex.Raw;
|
|
14
|
+
abstract minute(table: string, column: string): Knex.Raw;
|
|
15
|
+
abstract second(table: string, column: string): Knex.Raw;
|
|
16
|
+
abstract count(table: string, column: string): Knex.Raw;
|
|
17
|
+
protected _relationalCount(table: string, column: string): Knex.Raw;
|
|
18
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FnHelper = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
class FnHelper extends types_1.DatabaseHelper {
|
|
6
|
+
constructor(knex, schema) {
|
|
7
|
+
super(knex);
|
|
8
|
+
this.knex = knex;
|
|
9
|
+
this.schema = schema;
|
|
10
|
+
this.schema = schema;
|
|
11
|
+
}
|
|
12
|
+
_relationalCount(table, column) {
|
|
13
|
+
const relation = this.schema.relations.find((relation) => { var _a; return relation.related_collection === table && ((_a = relation === null || relation === void 0 ? void 0 : relation.meta) === null || _a === void 0 ? void 0 : _a.one_field) === column; });
|
|
14
|
+
const currentPrimary = this.schema.collections[table].primary;
|
|
15
|
+
if (!relation) {
|
|
16
|
+
throw new Error(`Field ${table}.${column} isn't a nested relational collection`);
|
|
17
|
+
}
|
|
18
|
+
return this.knex.raw('(' +
|
|
19
|
+
this.knex
|
|
20
|
+
.count('*')
|
|
21
|
+
.from(relation.collection)
|
|
22
|
+
.where(relation.field, '=', this.knex.raw(`??.??`, [table, currentPrimary]))
|
|
23
|
+
.toQuery() +
|
|
24
|
+
')');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.FnHelper = FnHelper;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import { SchemaOverview } from '@directus/shared/types';
|
|
1
2
|
import { Knex } from 'knex';
|
|
2
3
|
import * as dateHelpers from './date';
|
|
4
|
+
import * as fnHelpers from './fn';
|
|
3
5
|
import * as geometryHelpers from './geometry';
|
|
4
6
|
import * as schemaHelpers from './schema';
|
|
5
7
|
export declare function getHelpers(database: Knex): {
|
|
6
|
-
date: dateHelpers.postgres | dateHelpers.
|
|
8
|
+
date: dateHelpers.postgres | dateHelpers.sqlite;
|
|
7
9
|
st: geometryHelpers.postgres | geometryHelpers.redshift | geometryHelpers.oracle | geometryHelpers.sqlite | geometryHelpers.mysql | geometryHelpers.mssql;
|
|
8
10
|
schema: schemaHelpers.postgres | schemaHelpers.cockroachdb | schemaHelpers.oracle;
|
|
9
11
|
};
|
|
12
|
+
export declare function getFunctions(database: Knex, schema: SchemaOverview): fnHelpers.postgres | fnHelpers.oracle | fnHelpers.sqlite | fnHelpers.mysql | fnHelpers.mssql;
|
|
10
13
|
export declare type Helpers = ReturnType<typeof getHelpers>;
|
|
@@ -19,9 +19,10 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
19
19
|
return result;
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.getHelpers = void 0;
|
|
22
|
+
exports.getFunctions = exports.getHelpers = void 0;
|
|
23
23
|
const __1 = require("..");
|
|
24
24
|
const dateHelpers = __importStar(require("./date"));
|
|
25
|
+
const fnHelpers = __importStar(require("./fn"));
|
|
25
26
|
const geometryHelpers = __importStar(require("./geometry"));
|
|
26
27
|
const schemaHelpers = __importStar(require("./schema"));
|
|
27
28
|
function getHelpers(database) {
|
|
@@ -33,3 +34,8 @@ function getHelpers(database) {
|
|
|
33
34
|
};
|
|
34
35
|
}
|
|
35
36
|
exports.getHelpers = getHelpers;
|
|
37
|
+
function getFunctions(database, schema) {
|
|
38
|
+
const client = (0, __1.getDatabaseClient)(database);
|
|
39
|
+
return new fnHelpers[client](database, schema);
|
|
40
|
+
}
|
|
41
|
+
exports.getFunctions = getFunctions;
|
package/dist/database/index.js
CHANGED
|
@@ -235,9 +235,6 @@ exports.validateDatabaseExtensions = validateDatabaseExtensions;
|
|
|
235
235
|
async function validateDatabaseCharset(database) {
|
|
236
236
|
database = database !== null && database !== void 0 ? database : getDatabase();
|
|
237
237
|
if (getDatabaseClient(database) === 'mysql') {
|
|
238
|
-
if (env_1.default.DB_CHARSET) {
|
|
239
|
-
logger_1.default.warn(`Using custom DB_CHARSET "${env_1.default.DB_CHARSET}". Using a charset different from the database's default can cause problems in relationships. Omitting DB_CHARSET is strongly recommended.`);
|
|
240
|
-
}
|
|
241
238
|
const { collation } = await database.select(database.raw(`@@collation_database as collation`)).first();
|
|
242
239
|
const tables = await database('information_schema.tables')
|
|
243
240
|
.select({ name: 'TABLE_NAME', collation: 'TABLE_COLLATION' })
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.down = exports.up = void 0;
|
|
4
|
+
async function up(knex) {
|
|
5
|
+
await knex.schema.alterTable('directus_presets', (table) => {
|
|
6
|
+
table.string('icon', 30).notNullable().defaultTo('bookmark_outline');
|
|
7
|
+
table.string('color').nullable();
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
exports.up = up;
|
|
11
|
+
async function down(knex) {
|
|
12
|
+
await knex.schema.alterTable('directus_presets', (table) => {
|
|
13
|
+
table.dropColumn('icon');
|
|
14
|
+
table.dropColumn('color');
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
exports.down = down;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.down = exports.up = void 0;
|
|
4
|
+
async function up(knex) {
|
|
5
|
+
await knex.schema.alterTable('directus_settings', (table) => {
|
|
6
|
+
table.json('translation_strings');
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
exports.up = up;
|
|
10
|
+
async function down(knex) {
|
|
11
|
+
await knex.schema.alterTable('directus_settings', (table) => {
|
|
12
|
+
table.dropColumn('translation_strings');
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
exports.down = down;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.down = exports.up = void 0;
|
|
4
|
+
const utils_1 = require("@directus/shared/utils");
|
|
5
|
+
const lodash_1 = require("lodash");
|
|
6
|
+
async function up(knex) {
|
|
7
|
+
const fields = await knex
|
|
8
|
+
.select('id', 'special')
|
|
9
|
+
.from('directus_fields')
|
|
10
|
+
.whereNotNull('special')
|
|
11
|
+
.orWhere('special', '<>', '');
|
|
12
|
+
for (const { id, special } of fields) {
|
|
13
|
+
let parsedSpecial;
|
|
14
|
+
try {
|
|
15
|
+
parsedSpecial = (0, utils_1.toArray)(special);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (parsedSpecial && (0, lodash_1.isArray)(parsedSpecial)) {
|
|
21
|
+
let updateRequired = false;
|
|
22
|
+
parsedSpecial = parsedSpecial.map((special) => {
|
|
23
|
+
switch (special) {
|
|
24
|
+
case 'boolean':
|
|
25
|
+
case 'csv':
|
|
26
|
+
case 'json':
|
|
27
|
+
updateRequired = true;
|
|
28
|
+
return 'cast-' + special;
|
|
29
|
+
default:
|
|
30
|
+
return special;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
if (updateRequired) {
|
|
34
|
+
await knex('directus_fields')
|
|
35
|
+
.update({ special: parsedSpecial.join(',') })
|
|
36
|
+
.where({ id });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.up = up;
|
|
42
|
+
async function down(knex) {
|
|
43
|
+
const fields = await knex
|
|
44
|
+
.select('id', 'special')
|
|
45
|
+
.from('directus_fields')
|
|
46
|
+
.whereNotNull('special')
|
|
47
|
+
.orWhere('special', '<>', '');
|
|
48
|
+
for (const { id, special } of fields) {
|
|
49
|
+
let parsedSpecial;
|
|
50
|
+
try {
|
|
51
|
+
parsedSpecial = (0, utils_1.toArray)(special);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (parsedSpecial && (0, lodash_1.isArray)(parsedSpecial)) {
|
|
57
|
+
let updateRequired = false;
|
|
58
|
+
parsedSpecial = parsedSpecial.map((special) => {
|
|
59
|
+
switch (special) {
|
|
60
|
+
case 'cast-boolean':
|
|
61
|
+
case 'cast-csv':
|
|
62
|
+
case 'cast-json':
|
|
63
|
+
updateRequired = true;
|
|
64
|
+
return special.replace('cast-', '');
|
|
65
|
+
default:
|
|
66
|
+
return special;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
if (updateRequired) {
|
|
70
|
+
await knex('directus_fields')
|
|
71
|
+
.update({ special: parsedSpecial.join(',') })
|
|
72
|
+
.where({ id });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.down = down;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.down = exports.up = void 0;
|
|
4
|
+
async function up(knex) {
|
|
5
|
+
await knex.schema.alterTable('directus_fields', (table) => {
|
|
6
|
+
table.json('validation');
|
|
7
|
+
table.text('validation_message');
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
exports.up = up;
|
|
11
|
+
async function down(knex) {
|
|
12
|
+
await knex.schema.alterTable('directus_fields', (table) => {
|
|
13
|
+
table.dropColumn('validation');
|
|
14
|
+
table.dropColumn('validation_message');
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
exports.down = down;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.down = exports.up = void 0;
|
|
4
|
+
const utils_1 = require("@directus/shared/utils");
|
|
5
|
+
const lodash_1 = require("lodash");
|
|
6
|
+
async function up(knex) {
|
|
7
|
+
const fields = await knex
|
|
8
|
+
.select('id', 'special')
|
|
9
|
+
.from('directus_fields')
|
|
10
|
+
.whereNotNull('special')
|
|
11
|
+
.orWhere('special', '<>', '');
|
|
12
|
+
for (const { id, special } of fields) {
|
|
13
|
+
let parsedSpecial;
|
|
14
|
+
try {
|
|
15
|
+
if (special.includes('{')) {
|
|
16
|
+
// Fix invalid data in Postgres
|
|
17
|
+
parsedSpecial = (0, utils_1.toArray)(special.replace(/{/g, '').replace(/}/g, '').replace(/"/g, ''));
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
parsedSpecial = (0, utils_1.toArray)(special);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (parsedSpecial && (0, lodash_1.isArray)(parsedSpecial)) {
|
|
27
|
+
// Perform the update again in case it was not performed prior
|
|
28
|
+
parsedSpecial = parsedSpecial.map((special) => {
|
|
29
|
+
switch (special) {
|
|
30
|
+
case 'boolean':
|
|
31
|
+
case 'csv':
|
|
32
|
+
case 'json':
|
|
33
|
+
return 'cast-' + special;
|
|
34
|
+
default:
|
|
35
|
+
return special;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
const parsedSpecialString = parsedSpecial.join(',');
|
|
39
|
+
if (parsedSpecialString !== special) {
|
|
40
|
+
await knex('directus_fields').update({ special: parsedSpecialString }).where({ id });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.up = up;
|
|
46
|
+
async function down(_knex) {
|
|
47
|
+
// Do nothing
|
|
48
|
+
}
|
|
49
|
+
exports.down = down;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.down = exports.up = void 0;
|
|
4
|
+
const helpers_1 = require("../helpers");
|
|
5
|
+
async function up(knex) {
|
|
6
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
7
|
+
await knex.schema.alterTable('directus_settings', (table) => {
|
|
8
|
+
table.string('default_language').notNullable().defaultTo('en-US');
|
|
9
|
+
});
|
|
10
|
+
await helper.changeToString('directus_users', 'language', {
|
|
11
|
+
nullable: true,
|
|
12
|
+
default: null,
|
|
13
|
+
length: 255,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
exports.up = up;
|
|
17
|
+
async function down(knex) {
|
|
18
|
+
const helper = (0, helpers_1.getHelpers)(knex).schema;
|
|
19
|
+
await knex.schema.alterTable('directus_settings', (table) => {
|
|
20
|
+
table.dropColumn('default_language');
|
|
21
|
+
});
|
|
22
|
+
await helper.changeToString('directus_users', 'language', {
|
|
23
|
+
nullable: true,
|
|
24
|
+
default: 'en-US',
|
|
25
|
+
length: 255,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
exports.down = down;
|
|
@@ -63,7 +63,7 @@ async function run(database, direction, log = true) {
|
|
|
63
63
|
await database.insert({ version: nextVersion.version, name: nextVersion.name }).into('directus_migrations');
|
|
64
64
|
}
|
|
65
65
|
async function down() {
|
|
66
|
-
const lastAppliedMigration = (0, lodash_1.orderBy)(completedMigrations, ['timestamp'], ['desc'])[0];
|
|
66
|
+
const lastAppliedMigration = (0, lodash_1.orderBy)(completedMigrations, ['timestamp', 'version'], ['desc', 'desc'])[0];
|
|
67
67
|
if (!lastAppliedMigration) {
|
|
68
68
|
throw Error('Nothing to downgrade');
|
|
69
69
|
}
|
package/dist/database/run-ast.js
CHANGED
|
@@ -64,7 +64,10 @@ async function runAST(originalAST, schema, options) {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
else {
|
|
67
|
-
|
|
67
|
+
const node = (0, lodash_1.merge)({}, nestedNode, {
|
|
68
|
+
query: { limit: -1 },
|
|
69
|
+
});
|
|
70
|
+
nestedItems = (await runAST(node, schema, { knex, nested: true }));
|
|
68
71
|
if (nestedItems) {
|
|
69
72
|
// Merge all fetched nested records with the parent items
|
|
70
73
|
items = mergeWithParentItems(schema, nestedItems, items, nestedNode);
|
|
@@ -148,7 +151,7 @@ function getColumnPreprocessor(knex, schema, table) {
|
|
|
148
151
|
if (field.type.startsWith('geometry')) {
|
|
149
152
|
return helpers.st.asText(table, field.field);
|
|
150
153
|
}
|
|
151
|
-
return (0, get_column_1.getColumn)(knex, table, fieldNode.name, alias);
|
|
154
|
+
return (0, get_column_1.getColumn)(knex, table, fieldNode.name, alias, schema);
|
|
152
155
|
};
|
|
153
156
|
}
|
|
154
157
|
function getDBQuery(schema, knex, table, fieldNodes, query) {
|
|
@@ -238,7 +241,12 @@ function mergeWithParentItems(schema, nestedItem, parentItem, nestedNode) {
|
|
|
238
241
|
((_a = nestedItem[nestedNode.relation.field]) === null || _a === void 0 ? void 0 : _a[schema.collections[nestedNode.relation.related_collection].primary]) == parentItem[schema.collections[nestedNode.relation.related_collection].primary]);
|
|
239
242
|
});
|
|
240
243
|
parentItem[nestedNode.fieldKey].push(...itemChildren);
|
|
241
|
-
|
|
244
|
+
if (nestedNode.query.offset && nestedNode.query.offset >= 0) {
|
|
245
|
+
parentItem[nestedNode.fieldKey] = parentItem[nestedNode.fieldKey].slice(nestedNode.query.offset);
|
|
246
|
+
}
|
|
247
|
+
if (nestedNode.query.limit !== -1) {
|
|
248
|
+
parentItem[nestedNode.fieldKey] = parentItem[nestedNode.fieldKey].slice(0, (_a = nestedNode.query.limit) !== null && _a !== void 0 ? _a : 100);
|
|
249
|
+
}
|
|
242
250
|
parentItem[nestedNode.fieldKey] = parentItem[nestedNode.fieldKey].sort((a, b) => {
|
|
243
251
|
// This is pre-filled in get-ast-from-query
|
|
244
252
|
const sortField = nestedNode.query.sort[0];
|
|
@@ -46,19 +46,19 @@ fields:
|
|
|
46
46
|
width: half
|
|
47
47
|
|
|
48
48
|
- field: comment
|
|
49
|
-
display: formatted-
|
|
49
|
+
display: formatted-value
|
|
50
50
|
display_options:
|
|
51
|
-
|
|
51
|
+
color: 'var(--foreground-subdued)'
|
|
52
52
|
width: half
|
|
53
53
|
|
|
54
54
|
- field: user_agent
|
|
55
|
-
display: formatted-
|
|
55
|
+
display: formatted-value
|
|
56
56
|
display_options:
|
|
57
57
|
font: monospace
|
|
58
58
|
width: half
|
|
59
59
|
|
|
60
60
|
- field: ip
|
|
61
|
-
display: formatted-
|
|
61
|
+
display: formatted-value
|
|
62
62
|
display_options:
|
|
63
63
|
font: monospace
|
|
64
64
|
width: half
|
|
@@ -42,21 +42,21 @@ fields:
|
|
|
42
42
|
width: full
|
|
43
43
|
|
|
44
44
|
- field: hidden
|
|
45
|
-
special: boolean
|
|
45
|
+
special: cast-boolean
|
|
46
46
|
interface: boolean
|
|
47
47
|
options:
|
|
48
48
|
label: $t:field_options.directus_collections.hidden_label
|
|
49
49
|
width: half
|
|
50
50
|
|
|
51
51
|
- field: singleton
|
|
52
|
-
special: boolean
|
|
52
|
+
special: cast-boolean
|
|
53
53
|
interface: boolean
|
|
54
54
|
options:
|
|
55
55
|
label: $t:singleton_label
|
|
56
56
|
width: half
|
|
57
57
|
|
|
58
58
|
- field: translations
|
|
59
|
-
special: json
|
|
59
|
+
special: cast-json
|
|
60
60
|
interface: list
|
|
61
61
|
options:
|
|
62
62
|
template: '{{ translation }} ({{ language }})'
|
|
@@ -115,7 +115,7 @@ fields:
|
|
|
115
115
|
|
|
116
116
|
- field: archive_app_filter
|
|
117
117
|
interface: boolean
|
|
118
|
-
special: boolean
|
|
118
|
+
special: cast-boolean
|
|
119
119
|
options:
|
|
120
120
|
label: $t:field_options.directus_collections.archive_app_filter
|
|
121
121
|
width: half
|
|
@@ -17,7 +17,7 @@ fields:
|
|
|
17
17
|
- collection: directus_fields
|
|
18
18
|
field: special
|
|
19
19
|
hidden: true
|
|
20
|
-
special: csv
|
|
20
|
+
special: cast-csv
|
|
21
21
|
width: half
|
|
22
22
|
|
|
23
23
|
- collection: directus_fields
|
|
@@ -27,7 +27,7 @@ fields:
|
|
|
27
27
|
- collection: directus_fields
|
|
28
28
|
field: options
|
|
29
29
|
hidden: true
|
|
30
|
-
special: json
|
|
30
|
+
special: cast-json
|
|
31
31
|
width: half
|
|
32
32
|
|
|
33
33
|
- collection: directus_fields
|
|
@@ -37,25 +37,25 @@ fields:
|
|
|
37
37
|
- collection: directus_fields
|
|
38
38
|
field: display_options
|
|
39
39
|
hidden: true
|
|
40
|
-
special: json
|
|
40
|
+
special: cast-json
|
|
41
41
|
width: half
|
|
42
42
|
|
|
43
43
|
- collection: directus_fields
|
|
44
44
|
field: readonly
|
|
45
45
|
hidden: true
|
|
46
|
-
special: boolean
|
|
46
|
+
special: cast-boolean
|
|
47
47
|
width: half
|
|
48
48
|
|
|
49
49
|
- collection: directus_fields
|
|
50
50
|
field: hidden
|
|
51
51
|
hidden: true
|
|
52
|
-
special: boolean
|
|
52
|
+
special: cast-boolean
|
|
53
53
|
width: half
|
|
54
54
|
|
|
55
55
|
- collection: directus_fields
|
|
56
56
|
field: required
|
|
57
57
|
hidden: true
|
|
58
|
-
special: boolean
|
|
58
|
+
special: cast-boolean
|
|
59
59
|
width: half
|
|
60
60
|
|
|
61
61
|
- collection: directus_fields
|
|
@@ -73,7 +73,7 @@ fields:
|
|
|
73
73
|
- collection: directus_fields
|
|
74
74
|
field: translations
|
|
75
75
|
hidden: true
|
|
76
|
-
special: json
|
|
76
|
+
special: cast-json
|
|
77
77
|
width: half
|
|
78
78
|
|
|
79
79
|
- collection: directus_fields
|
|
@@ -83,4 +83,13 @@ fields:
|
|
|
83
83
|
- collection: directus_fields
|
|
84
84
|
field: conditions
|
|
85
85
|
hidden: true
|
|
86
|
-
special: json
|
|
86
|
+
special: cast-json
|
|
87
|
+
|
|
88
|
+
- collection: directus_fields
|
|
89
|
+
field: validation
|
|
90
|
+
hidden: true
|
|
91
|
+
special: cast-json
|
|
92
|
+
|
|
93
|
+
- collection: directus_fields
|
|
94
|
+
field: validation_message
|
|
95
|
+
hidden: true
|
|
@@ -23,7 +23,7 @@ fields:
|
|
|
23
23
|
interface: tags
|
|
24
24
|
options:
|
|
25
25
|
iconRight: local_offer
|
|
26
|
-
special: json
|
|
26
|
+
special: cast-json
|
|
27
27
|
width: full
|
|
28
28
|
display: labels
|
|
29
29
|
display_options:
|
|
@@ -71,7 +71,7 @@ fields:
|
|
|
71
71
|
|
|
72
72
|
- field: metadata
|
|
73
73
|
hidden: true
|
|
74
|
-
special: json
|
|
74
|
+
special: cast-json
|
|
75
75
|
|
|
76
76
|
- field: type
|
|
77
77
|
display: mime-type
|
|
@@ -9,13 +9,13 @@ fields:
|
|
|
9
9
|
- field: note
|
|
10
10
|
- field: type
|
|
11
11
|
- field: show_header
|
|
12
|
-
special: boolean
|
|
12
|
+
special: cast-boolean
|
|
13
13
|
- field: position_x
|
|
14
14
|
- field: position_y
|
|
15
15
|
- field: width
|
|
16
16
|
- field: height
|
|
17
17
|
- field: options
|
|
18
|
-
special: json
|
|
18
|
+
special: cast-json
|
|
19
19
|
- field: date_created
|
|
20
20
|
special: date-created
|
|
21
21
|
- field: user_created
|
|
@@ -4,12 +4,12 @@ table: directus_permissions
|
|
|
4
4
|
fields:
|
|
5
5
|
- field: permissions
|
|
6
6
|
hidden: true
|
|
7
|
-
special: json
|
|
7
|
+
special: cast-json
|
|
8
8
|
width: half
|
|
9
9
|
|
|
10
10
|
- field: presets
|
|
11
11
|
hidden: true
|
|
12
|
-
special: json
|
|
12
|
+
special: cast-json
|
|
13
13
|
width: half
|
|
14
14
|
|
|
15
15
|
- field: role
|
|
@@ -23,11 +23,11 @@ fields:
|
|
|
23
23
|
|
|
24
24
|
- field: fields
|
|
25
25
|
width: half
|
|
26
|
-
special: csv
|
|
26
|
+
special: cast-csv
|
|
27
27
|
|
|
28
28
|
- field: action
|
|
29
29
|
width: half
|
|
30
30
|
|
|
31
31
|
- field: validation
|
|
32
32
|
width: half
|
|
33
|
-
special: json
|
|
33
|
+
special: cast-json
|
|
@@ -3,21 +3,29 @@ table: directus_presets
|
|
|
3
3
|
fields:
|
|
4
4
|
- field: filter
|
|
5
5
|
hidden: true
|
|
6
|
-
special: json
|
|
6
|
+
special: cast-json
|
|
7
7
|
|
|
8
8
|
- field: layout_query
|
|
9
9
|
hidden: true
|
|
10
|
-
special: json
|
|
10
|
+
special: cast-json
|
|
11
11
|
|
|
12
12
|
- field: layout_options
|
|
13
13
|
hidden: true
|
|
14
|
-
special: json
|
|
14
|
+
special: cast-json
|
|
15
15
|
|
|
16
16
|
- field: role
|
|
17
17
|
width: half
|
|
18
|
+
special: m2o
|
|
19
|
+
display: related-values
|
|
20
|
+
display_options:
|
|
21
|
+
template: '{{ name }}'
|
|
18
22
|
|
|
19
23
|
- field: user
|
|
20
24
|
width: half
|
|
25
|
+
special: m2o
|
|
26
|
+
display: related-values
|
|
27
|
+
display_options:
|
|
28
|
+
template: '{{ email }}'
|
|
21
29
|
|
|
22
30
|
- field: id
|
|
23
31
|
width: half
|
|
@@ -25,6 +33,12 @@ fields:
|
|
|
25
33
|
- field: bookmark
|
|
26
34
|
width: half
|
|
27
35
|
|
|
36
|
+
- field: icon
|
|
37
|
+
width: half
|
|
38
|
+
|
|
39
|
+
- field: color
|
|
40
|
+
width: half
|
|
41
|
+
|
|
28
42
|
- field: search
|
|
29
43
|
width: half
|
|
30
44
|
|