directus 9.21.2 → 9.22.1

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.
Files changed (103) hide show
  1. package/dist/app.js +9 -5
  2. package/dist/app.test.d.ts +1 -0
  3. package/dist/cli/commands/bootstrap/index.js +2 -2
  4. package/dist/cli/commands/security/secret.js +2 -2
  5. package/dist/cli/utils/create-env/env-stub.liquid +3 -3
  6. package/dist/cli/utils/create-env/index.js +5 -8
  7. package/dist/constants.d.ts +1 -0
  8. package/dist/constants.js +2 -1
  9. package/dist/controllers/assets.js +9 -7
  10. package/dist/controllers/files.js +2 -1
  11. package/dist/controllers/utils.js +2 -2
  12. package/dist/database/helpers/fn/dialects/mssql.js +2 -1
  13. package/dist/database/helpers/fn/dialects/mysql.js +2 -1
  14. package/dist/database/helpers/fn/dialects/oracle.js +2 -1
  15. package/dist/database/helpers/fn/dialects/postgres.js +2 -1
  16. package/dist/database/helpers/fn/dialects/sqlite.js +2 -1
  17. package/dist/database/helpers/fn/types.d.ts +1 -0
  18. package/dist/database/helpers/fn/types.js +5 -4
  19. package/dist/database/helpers/index.d.ts +1 -1
  20. package/dist/database/helpers/schema/dialects/mssql.d.ts +6 -0
  21. package/dist/database/helpers/schema/dialects/mssql.js +14 -0
  22. package/dist/database/helpers/schema/dialects/mysql.d.ts +5 -0
  23. package/dist/database/helpers/schema/dialects/mysql.js +19 -0
  24. package/dist/database/helpers/schema/dialects/oracle.d.ts +1 -0
  25. package/dist/database/helpers/schema/dialects/oracle.js +3 -0
  26. package/dist/database/helpers/schema/index.d.ts +2 -2
  27. package/dist/database/helpers/schema/index.js +4 -4
  28. package/dist/database/helpers/schema/types.d.ts +5 -0
  29. package/dist/database/helpers/schema/types.js +13 -0
  30. package/dist/database/index.d.ts +6 -0
  31. package/dist/database/index.js +20 -1
  32. package/dist/database/migrations/20211007A-update-presets.js +2 -2
  33. package/dist/database/migrations/run.js +7 -31
  34. package/dist/database/run-ast.js +132 -6
  35. package/dist/database/system-data/fields/index.js +2 -1
  36. package/dist/env.js +3 -2
  37. package/dist/exceptions/range-not-satisfiable.d.ts +1 -1
  38. package/dist/extensions.d.ts +7 -1
  39. package/dist/extensions.js +41 -15
  40. package/dist/logger.js +27 -1
  41. package/dist/operations/request/index.d.ts +1 -2
  42. package/dist/operations/request/index.js +2 -2
  43. package/dist/services/assets.d.ts +4 -3
  44. package/dist/services/assets.js +13 -11
  45. package/dist/services/authentication.js +4 -3
  46. package/dist/services/authorization.js +1 -1
  47. package/dist/services/files.d.ts +4 -3
  48. package/dist/services/files.js +92 -68
  49. package/dist/services/flows.d.ts +0 -2
  50. package/dist/services/flows.js +0 -14
  51. package/dist/services/flows.test.d.ts +1 -0
  52. package/dist/services/graphql/index.d.ts +5 -1
  53. package/dist/services/graphql/index.js +29 -31
  54. package/dist/services/import-export.d.ts +4 -3
  55. package/dist/services/items.js +7 -1
  56. package/dist/services/meta.js +2 -2
  57. package/dist/services/operations.d.ts +0 -2
  58. package/dist/services/operations.js +0 -12
  59. package/dist/services/operations.test.d.ts +1 -0
  60. package/dist/services/permissions.d.ts +0 -5
  61. package/dist/services/permissions.js +0 -25
  62. package/dist/services/permissions.test.d.ts +1 -0
  63. package/dist/services/roles.js +0 -3
  64. package/dist/services/roles.test.d.ts +1 -0
  65. package/dist/services/server.js +8 -6
  66. package/dist/services/shares.js +2 -2
  67. package/dist/services/specifications.js +12 -1
  68. package/dist/services/webhooks.d.ts +0 -2
  69. package/dist/services/webhooks.js +0 -10
  70. package/dist/services/webhooks.test.d.ts +1 -0
  71. package/dist/storage/get-storage-driver.d.ts +3 -0
  72. package/dist/storage/get-storage-driver.js +20 -0
  73. package/dist/storage/get-storage-driver.test.d.ts +1 -0
  74. package/dist/storage/index.d.ts +5 -0
  75. package/dist/storage/index.js +20 -0
  76. package/dist/storage/index.test.d.ts +1 -0
  77. package/dist/storage/register-drivers.d.ts +2 -0
  78. package/dist/storage/register-drivers.js +22 -0
  79. package/dist/storage/register-drivers.test.d.ts +1 -0
  80. package/dist/storage/register-locations.d.ts +2 -0
  81. package/dist/storage/register-locations.js +17 -0
  82. package/dist/storage/register-locations.test.d.ts +1 -0
  83. package/dist/utils/apply-query.d.ts +27 -3
  84. package/dist/utils/apply-query.js +180 -127
  85. package/dist/utils/dynamic-import.d.ts +1 -0
  86. package/dist/utils/dynamic-import.js +7 -0
  87. package/dist/utils/get-collection-from-alias.d.ts +6 -0
  88. package/dist/utils/get-collection-from-alias.js +15 -0
  89. package/dist/utils/get-collection-from-alias.test.d.ts +1 -0
  90. package/dist/utils/get-column-path.d.ts +14 -8
  91. package/dist/utils/get-column-path.js +24 -7
  92. package/dist/utils/get-column.d.ts +8 -1
  93. package/dist/utils/get-column.js +10 -3
  94. package/dist/utils/get-config-from-env.js +3 -2
  95. package/dist/utils/get-default-value.d.ts +1 -1
  96. package/dist/utils/parse-image-metadata.d.ts +3 -0
  97. package/dist/utils/parse-image-metadata.js +73 -0
  98. package/dist/utils/track.js +2 -2
  99. package/dist/utils/validate-env.js +3 -2
  100. package/dist/webhooks.js +2 -2
  101. package/package.json +17 -11
  102. package/dist/storage.d.ts +0 -3
  103. package/dist/storage.js +0 -61
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseXmp = exports.parseIptc = void 0;
4
+ const IPTC_ENTRY_TYPES = new Map([
5
+ [0x78, 'caption'],
6
+ [0x6e, 'credit'],
7
+ [0x19, 'keywords'],
8
+ [0x37, 'dateCreated'],
9
+ [0x50, 'byline'],
10
+ [0x55, 'bylineTitle'],
11
+ [0x7a, 'captionWriter'],
12
+ [0x69, 'headline'],
13
+ [0x74, 'copyright'],
14
+ [0x0f, 'category'],
15
+ ]);
16
+ const IPTC_ENTRY_MARKER = Buffer.from([0x1c, 0x02]);
17
+ function parseIptc(buffer) {
18
+ if (!Buffer.isBuffer(buffer))
19
+ return {};
20
+ const iptc = {};
21
+ let lastIptcEntryPos = buffer.indexOf(IPTC_ENTRY_MARKER);
22
+ while (lastIptcEntryPos !== -1) {
23
+ lastIptcEntryPos = buffer.indexOf(IPTC_ENTRY_MARKER, lastIptcEntryPos + IPTC_ENTRY_MARKER.byteLength);
24
+ const iptcBlockTypePos = lastIptcEntryPos + IPTC_ENTRY_MARKER.byteLength;
25
+ const iptcBlockSizePos = iptcBlockTypePos + 1;
26
+ const iptcBlockDataPos = iptcBlockSizePos + 2;
27
+ const iptcBlockType = buffer.readUInt8(iptcBlockTypePos);
28
+ const iptcBlockSize = buffer.readUInt16BE(iptcBlockSizePos);
29
+ if (!IPTC_ENTRY_TYPES.has(iptcBlockType)) {
30
+ continue;
31
+ }
32
+ const iptcBlockTypeId = IPTC_ENTRY_TYPES.get(iptcBlockType);
33
+ const iptcData = buffer.subarray(iptcBlockDataPos, iptcBlockDataPos + iptcBlockSize).toString();
34
+ if (iptcBlockTypeId) {
35
+ if (iptc[iptcBlockTypeId] == null) {
36
+ iptc[iptcBlockTypeId] = iptcData;
37
+ }
38
+ else if (Array.isArray(iptc[iptcBlockTypeId])) {
39
+ iptc[iptcBlockTypeId].push(iptcData);
40
+ }
41
+ else {
42
+ iptc[iptcBlockTypeId] = [iptc[iptcBlockTypeId], iptcData];
43
+ }
44
+ }
45
+ }
46
+ return iptc;
47
+ }
48
+ exports.parseIptc = parseIptc;
49
+ function parseXmp(buffer) {
50
+ const xmp = {};
51
+ ['title', 'description', 'rights', 'creator', 'subject'].forEach((x) => {
52
+ const tagRegex = new RegExp(`<dc:${x}>(.*?)</dc:${x}>`, 'smig'), tagMatches = tagRegex.exec(buffer.toString());
53
+ if (!tagMatches || tagMatches.length === 0) {
54
+ return;
55
+ }
56
+ const value = tagMatches[1].trim();
57
+ if (value.toLowerCase().indexOf('<rdf:bag>') === 0) {
58
+ const r = new RegExp('<rdf:li>(.*?)</rdf:li>', 'smig');
59
+ let match = r.exec(value);
60
+ const result = [];
61
+ while (match) {
62
+ result.push(match[1]);
63
+ match = r.exec(value);
64
+ }
65
+ xmp[x] = result;
66
+ }
67
+ else {
68
+ xmp[x] = value.replace(/<[^>]*>?/gm, '').trim();
69
+ }
70
+ });
71
+ return xmp;
72
+ }
73
+ exports.parseXmp = parseXmp;
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.track = void 0;
7
- const axios_1 = __importDefault(require("axios"));
8
7
  const ms_1 = __importDefault(require("ms"));
9
8
  const node_machine_id_1 = require("node-machine-id");
10
9
  const os_1 = __importDefault(require("os"));
@@ -14,10 +13,11 @@ const env_1 = __importDefault(require("../env"));
14
13
  const logger_1 = __importDefault(require("../logger"));
15
14
  const utils_1 = require("@directus/shared/utils");
16
15
  async function track(event) {
16
+ const axios = (await import('axios')).default;
17
17
  if (env_1.default.TELEMETRY !== false) {
18
18
  const info = await getEnvInfo(event);
19
19
  try {
20
- await axios_1.default.post('https://telemetry.directus.io/', info);
20
+ await axios.post('https://telemetry.directus.io/', info);
21
21
  }
22
22
  catch (err) {
23
23
  if (env_1.default.NODE_ENV === 'development') {
@@ -4,11 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.validateEnv = void 0;
7
- const env_1 = __importDefault(require("../env"));
7
+ const env_1 = require("../env");
8
8
  const logger_1 = __importDefault(require("../logger"));
9
9
  function validateEnv(requiredKeys) {
10
+ const env = (0, env_1.getEnv)();
10
11
  for (const requiredKey of requiredKeys) {
11
- if (requiredKey in env_1.default === false) {
12
+ if (requiredKey in env === false) {
12
13
  logger_1.default.error(`"${requiredKey}" Environment Variable is missing.`);
13
14
  process.exit(1);
14
15
  }
package/dist/webhooks.js CHANGED
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.unregister = exports.register = exports.reload = exports.init = void 0;
7
- const axios_1 = __importDefault(require("axios"));
8
7
  const database_1 = __importDefault(require("./database"));
9
8
  const emitter_1 = __importDefault(require("./emitter"));
10
9
  const logger_1 = __importDefault(require("./logger"));
@@ -53,6 +52,7 @@ function unregister() {
53
52
  exports.unregister = unregister;
54
53
  function createHandler(webhook, event) {
55
54
  return async (meta, context) => {
55
+ const axios = (await import('axios')).default;
56
56
  if (webhook.collections.includes(meta.collection) === false)
57
57
  return;
58
58
  const webhookPayload = {
@@ -66,7 +66,7 @@ function createHandler(webhook, event) {
66
66
  ...meta,
67
67
  };
68
68
  try {
69
- await (0, axios_1.default)({
69
+ await axios({
70
70
  url: webhook.url,
71
71
  method: webhook.method,
72
72
  data: webhook.data ? webhookPayload : null,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "directus",
3
- "version": "9.21.2",
3
+ "version": "9.22.1",
4
4
  "description": "Directus is a real-time API and App dashboard for managing SQL database content",
5
5
  "keywords": [
6
6
  "directus",
@@ -90,7 +90,7 @@
90
90
  "encodeurl": "1.0.2",
91
91
  "eventemitter2": "6.4.9",
92
92
  "execa": "5.1.1",
93
- "exifr": "7.1.3",
93
+ "exif-reader": "1.0.3",
94
94
  "express": "4.18.2",
95
95
  "fast-redact": "3.1.2",
96
96
  "flat": "5.0.2",
@@ -99,6 +99,7 @@
99
99
  "graphql": "16.6.0",
100
100
  "graphql-compose": "9.0.10",
101
101
  "helmet": "6.0.0",
102
+ "icc": "2.0.0",
102
103
  "inquirer": "8.2.4",
103
104
  "ioredis": "5.2.4",
104
105
  "joi": "17.7.0",
@@ -128,6 +129,7 @@
128
129
  "pino": "8.7.0",
129
130
  "pino-http": "8.2.1",
130
131
  "pino-http-print": "3.1.0",
132
+ "pino-pretty": "9.1.1",
131
133
  "qs": "6.11.0",
132
134
  "rate-limiter-flexible": "2.4.1",
133
135
  "rollup": "3.3.0",
@@ -143,17 +145,20 @@
143
145
  "uuid-validate": "0.0.3",
144
146
  "vm2": "3.9.11",
145
147
  "wellknown": "0.5.0",
146
- "@directus/app": "9.21.2",
147
- "@directus/drive": "9.21.2",
148
- "@directus/drive-azure": "9.21.2",
149
- "@directus/drive-gcs": "9.21.2",
150
- "@directus/drive-s3": "9.21.2",
151
- "@directus/extensions-sdk": "9.21.2",
152
- "@directus/schema": "9.21.2",
153
- "@directus/shared": "9.21.2",
154
- "@directus/specs": "9.21.2"
148
+ "@directus/app": "9.22.1",
149
+ "@directus/extensions-sdk": "9.22.1",
150
+ "@directus/schema": "9.22.1",
151
+ "@directus/shared": "9.22.1",
152
+ "@directus/specs": "9.22.1",
153
+ "@directus/storage": "9.22.1",
154
+ "@directus/storage-driver-azure": "9.22.1",
155
+ "@directus/storage-driver-cloudinary": "9.22.1",
156
+ "@directus/storage-driver-gcs": "9.22.1",
157
+ "@directus/storage-driver-local": "9.22.1",
158
+ "@directus/storage-driver-s3": "9.22.1"
155
159
  },
156
160
  "devDependencies": {
161
+ "@ngneat/falso": "6.3.0",
157
162
  "@types/async": "3.2.15",
158
163
  "@types/busboy": "1.5.0",
159
164
  "@types/bytes": "3.1.1",
@@ -162,6 +167,7 @@
162
167
  "@types/deep-diff": "1.0.1",
163
168
  "@types/destroy": "1.0.0",
164
169
  "@types/encodeurl": "1.0.0",
170
+ "@types/exif-reader": "1.0.0",
165
171
  "@types/express": "4.17.14",
166
172
  "@types/express-serve-static-core": "4.17.31",
167
173
  "@types/fast-redact": "3.0.2",
package/dist/storage.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import { StorageManager } from '@directus/drive';
2
- declare const storage: StorageManager;
3
- export default storage;
package/dist/storage.js DELETED
@@ -1,61 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const drive_1 = require("@directus/drive");
7
- const drive_azure_1 = require("@directus/drive-azure");
8
- const drive_gcs_1 = require("@directus/drive-gcs");
9
- const drive_s3_1 = require("@directus/drive-s3");
10
- const env_1 = __importDefault(require("./env"));
11
- const get_config_from_env_1 = require("./utils/get-config-from-env");
12
- const utils_1 = require("@directus/shared/utils");
13
- const validate_env_1 = require("./utils/validate-env");
14
- (0, validate_env_1.validateEnv)(['STORAGE_LOCATIONS']);
15
- const storage = new drive_1.StorageManager(getStorageConfig());
16
- registerDrivers(storage);
17
- exports.default = storage;
18
- function getStorageConfig() {
19
- const config = {
20
- disks: {},
21
- };
22
- const locations = (0, utils_1.toArray)(env_1.default.STORAGE_LOCATIONS);
23
- locations.forEach((location) => {
24
- location = location.trim();
25
- const diskConfig = {
26
- driver: env_1.default[`STORAGE_${location.toUpperCase()}_DRIVER`],
27
- config: (0, get_config_from_env_1.getConfigFromEnv)(`STORAGE_${location.toUpperCase()}_`),
28
- };
29
- delete diskConfig.config.publicUrl;
30
- delete diskConfig.config.driver;
31
- config.disks[location] = diskConfig;
32
- });
33
- return config;
34
- }
35
- function registerDrivers(storage) {
36
- const usedDrivers = [];
37
- for (const [key, value] of Object.entries(env_1.default)) {
38
- if ((key.startsWith('STORAGE') && key.endsWith('DRIVER')) === false)
39
- continue;
40
- if (value && usedDrivers.includes(value) === false)
41
- usedDrivers.push(value);
42
- }
43
- usedDrivers.forEach((driver) => {
44
- const storageDriver = getStorageDriver(driver);
45
- if (storageDriver) {
46
- storage.registerDriver(driver, storageDriver);
47
- }
48
- });
49
- }
50
- function getStorageDriver(driver) {
51
- switch (driver) {
52
- case 'local':
53
- return drive_1.LocalFileSystemStorage;
54
- case 's3':
55
- return drive_s3_1.AmazonWebServicesS3Storage;
56
- case 'gcs':
57
- return drive_gcs_1.GoogleCloudStorage;
58
- case 'azure':
59
- return drive_azure_1.AzureBlobWebServicesStorage;
60
- }
61
- }