@strapi/database 4.0.7 → 4.0.8

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.
@@ -14,15 +14,20 @@ class MysqlDialect extends Dialect {
14
14
  this.db.config.connection.connection.supportBigNumbers = true;
15
15
  this.db.config.connection.connection.bigNumberStrings = true;
16
16
  this.db.config.connection.connection.typeCast = (field, next) => {
17
- if (field.type == 'DECIMAL' || field.type === 'NEWDECIMAL') {
17
+ if (field.type === 'DECIMAL' || field.type === 'NEWDECIMAL') {
18
18
  var value = field.string();
19
19
  return value === null ? null : Number(value);
20
20
  }
21
21
 
22
- if (field.type == 'TINY' && field.length == 1) {
22
+ if (field.type === 'TINY' && field.length === 1) {
23
23
  let value = field.string();
24
- return value ? value == '1' : null;
24
+ return value ? value === '1' : null;
25
25
  }
26
+
27
+ if (field.type === 'DATE') {
28
+ return field.string();
29
+ }
30
+
26
31
  return next();
27
32
  };
28
33
  }
@@ -16,6 +16,7 @@ class PostgresDialect extends Dialect {
16
16
  }
17
17
 
18
18
  initialize() {
19
+ this.db.connection.client.driver.types.setTypeParser(1082, 'text', v => v); // Don't cast DATE string to Date()
19
20
  this.db.connection.client.driver.types.setTypeParser(1700, 'text', parseFloat);
20
21
  }
21
22
 
package/lib/fields.js CHANGED
@@ -98,6 +98,8 @@ class BigIntegerField extends NumberField {
98
98
  }
99
99
 
100
100
  const timeRegex = new RegExp('^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]{1,3})?$');
101
+ const dateRegex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
102
+ const partialDateRegex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])/g;
101
103
 
102
104
  const parseTime = value => {
103
105
  if (dateFns.isDate(value)) return dateFns.format(value, 'HH:mm:ss.SSS');
@@ -118,16 +120,23 @@ const parseTime = value => {
118
120
  };
119
121
 
120
122
  const parseDate = value => {
121
- if (dateFns.isDate(value)) return dateFns.format(value, 'yyyy-MM-dd');
122
- try {
123
- let date = dateFns.parseISO(value);
123
+ const found = _.isString(value) ? value.match(partialDateRegex) || [] : [];
124
+ const extractedValue = found[0];
124
125
 
125
- if (dateFns.isValid(date)) return dateFns.format(date, 'yyyy-MM-dd');
126
+ if (extractedValue && !dateRegex.test(value)) {
127
+ // TODO V5: throw an error when format yyyy-MM-dd is not respected
128
+ // throw new InvalidDateError(`Invalid format, expected yyyy-MM-dd`);
129
+ process.emitWarning(
130
+ `[deprecated] Using a date format other than YYYY-MM-DD will be removed in future versions. Date received: ${value}. Date stored: ${extractedValue}.`
131
+ );
132
+ }
126
133
 
127
- throw new InvalidDateError(`Invalid format, expected an ISO compatible date`);
128
- } catch (error) {
129
- throw new InvalidDateError(`Invalid format, expected an ISO compatible date`);
134
+ let date = dateFns.parseISO(extractedValue);
135
+ if (!dateFns.isValid(date)) {
136
+ throw new InvalidDateError(`Invalid date`);
130
137
  }
138
+
139
+ return extractedValue;
131
140
  };
132
141
 
133
142
  const parseDateTimeOrTimestamp = value => {
@@ -151,8 +160,7 @@ class DateField extends Field {
151
160
  }
152
161
 
153
162
  fromDB(value) {
154
- const cast = new Date(value);
155
- return dateFns.isValid(cast) ? dateFns.formatISO(cast, { representation: 'date' }) : null;
163
+ return value;
156
164
  }
157
165
  }
158
166
  class DatetimeField extends Field {
@@ -249,12 +249,16 @@ const applyOperator = (qb, column, operator, value) => {
249
249
  case '$null': {
250
250
  if (value) {
251
251
  qb.whereNull(column);
252
+ } else {
253
+ qb.whereNotNull(column);
252
254
  }
253
255
  break;
254
256
  }
255
257
  case '$notNull': {
256
258
  if (value) {
257
259
  qb.whereNotNull(column);
260
+ } else {
261
+ qb.whereNull(column);
258
262
  }
259
263
  break;
260
264
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/database",
3
- "version": "4.0.7",
3
+ "version": "4.0.8",
4
4
  "description": "Strapi's database layer",
5
5
  "homepage": "https://strapi.io",
6
6
  "bugs": {
@@ -42,5 +42,5 @@
42
42
  "node": ">=12.22.0 <=16.x.x",
43
43
  "npm": ">=6.0.0"
44
44
  },
45
- "gitHead": "af0cba8c5b2ba7b371523e8f55413ef0fce98e1e"
45
+ "gitHead": "669bb2f0440d3b21a23c8d665fdba98bd3d8cc71"
46
46
  }