@tinacms/graphql 2.4.2 → 2.4.4

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.
@@ -41,6 +41,7 @@ export type IndexDefinition = {
41
41
  export type PadDefinition = {
42
42
  fillString: string;
43
43
  maxLength: number;
44
+ decimalPrecision?: number;
44
45
  };
45
46
  export type FilterOperand = string | number | boolean | string[] | number[];
46
47
  export type FilterCondition = {
@@ -53,6 +54,8 @@ export declare const REFS_COLLECTIONS_SORT_KEY = "__refs__";
53
54
  export declare const REFS_REFERENCE_FIELD = "__tina_ref__";
54
55
  export declare const REFS_PATH_FIELD = "__tina_ref_path__";
55
56
  export declare const DEFAULT_NUMERIC_LPAD = 4;
57
+ export declare const DEFAULT_NUMERIC_DECIMAL_PRECISION = 3;
58
+ export declare const DEFAULT_NUMERIC_PAD: PadDefinition;
56
59
  export declare const coerceFilterChainOperands: (filterChain: (BinaryFilter | TernaryFilter)[], escapeString?: StringEscaper) => (BinaryFilter | TernaryFilter)[];
57
60
  export declare const makeFilter: ({ filterChain, }: {
58
61
  filterChain?: (BinaryFilter | TernaryFilter)[];
package/dist/index.js CHANGED
@@ -3028,14 +3028,31 @@ var validateField = async (field) => {
3028
3028
  });
3029
3029
  await schema.validate(field);
3030
3030
  const validField = await schema.cast(field);
3031
+ assertCheckboxGroupIsList(validField);
3031
3032
  return validField;
3032
3033
  };
3034
+ var assertCheckboxGroupIsList = (field) => {
3035
+ if (field.ui?.component === "checkbox-group" && !field.list) {
3036
+ throw new Error(
3037
+ `Field "${field.name}" uses "checkbox-group" without list: true at ${field.namespace.join(
3038
+ "."
3039
+ )}. Add list: true or use "select" instead.`
3040
+ );
3041
+ }
3042
+ if (field.type === "object" || field.type === "rich-text") {
3043
+ const nested = [
3044
+ ...field.type === "object" ? field.fields ?? [] : [],
3045
+ ...(field.templates ?? []).flatMap((template) => template.fields ?? [])
3046
+ ];
3047
+ nested.forEach(assertCheckboxGroupIsList);
3048
+ }
3049
+ };
3033
3050
 
3034
3051
  // package.json
3035
3052
  var package_default = {
3036
3053
  name: "@tinacms/graphql",
3037
3054
  type: "module",
3038
- version: "2.4.2",
3055
+ version: "2.4.4",
3039
3056
  main: "dist/index.js",
3040
3057
  module: "./dist/index.js",
3041
3058
  files: [
@@ -3808,14 +3825,39 @@ var REFS_COLLECTIONS_SORT_KEY = "__refs__";
3808
3825
  var REFS_REFERENCE_FIELD = "__tina_ref__";
3809
3826
  var REFS_PATH_FIELD = "__tina_ref_path__";
3810
3827
  var DEFAULT_NUMERIC_LPAD = 4;
3828
+ var DEFAULT_NUMERIC_DECIMAL_PRECISION = 3;
3829
+ var DEFAULT_NUMERIC_PAD = {
3830
+ fillString: "0",
3831
+ maxLength: DEFAULT_NUMERIC_LPAD + 1 + DEFAULT_NUMERIC_DECIMAL_PRECISION,
3832
+ decimalPrecision: DEFAULT_NUMERIC_DECIMAL_PRECISION
3833
+ };
3834
+ var ensureUTC = (value) => {
3835
+ const s = String(value);
3836
+ if (s.includes("T") && !/[Zz]|[+-]\d{2}:\d{2}$/.test(s)) {
3837
+ return `${s}Z`;
3838
+ }
3839
+ return s;
3840
+ };
3841
+ var parseDatetimeUTC = (value) => {
3842
+ const n = Number(value);
3843
+ const d = Number.isNaN(n) ? new Date(ensureUTC(String(value))) : new Date(n);
3844
+ return Number.isNaN(d.getTime()) ? String(value) : d.toISOString();
3845
+ };
3846
+ var padValue = (val, pad) => {
3847
+ if (pad.decimalPrecision !== void 0) {
3848
+ const n = Number(val);
3849
+ if (!Number.isNaN(n)) {
3850
+ return n.toFixed(pad.decimalPrecision).padStart(pad.maxLength, pad.fillString);
3851
+ }
3852
+ }
3853
+ return String(val).padStart(pad.maxLength, pad.fillString);
3854
+ };
3811
3855
  var applyPadding = (input, pad) => {
3812
3856
  if (pad) {
3813
3857
  if (Array.isArray(input)) {
3814
- return input.map(
3815
- (val) => String(val).padStart(pad.maxLength, pad.fillString)
3816
- );
3858
+ return input.map((val) => padValue(val, pad));
3817
3859
  } else {
3818
- return String(input).padStart(pad.maxLength, pad.fillString);
3860
+ return padValue(input, pad);
3819
3861
  }
3820
3862
  }
3821
3863
  return input;
@@ -3854,7 +3896,7 @@ var makeKeyForField = (definition, data, stringEscaper2, maxStringLength = 100)
3854
3896
  const rawValue = data[field.name];
3855
3897
  let resolvedValue;
3856
3898
  if (field.type === "datetime") {
3857
- resolvedValue = String(new Date(rawValue).getTime());
3899
+ resolvedValue = parseDatetimeUTC(rawValue);
3858
3900
  } else {
3859
3901
  if (field.type === "string") {
3860
3902
  const escapedString = stringEscaper2(rawValue);
@@ -3885,23 +3927,23 @@ var coerceFilterChainOperands = (filterChain, escapeString = stringEscaper) => {
3885
3927
  if (filter.leftOperand !== void 0) {
3886
3928
  result.push({
3887
3929
  ...filter,
3888
- rightOperand: new Date(filter.rightOperand).getTime(),
3889
- leftOperand: new Date(
3930
+ rightOperand: parseDatetimeUTC(filter.rightOperand),
3931
+ leftOperand: parseDatetimeUTC(
3890
3932
  filter.leftOperand
3891
- ).getTime()
3933
+ )
3892
3934
  });
3893
3935
  } else {
3894
3936
  if (Array.isArray(filter.rightOperand)) {
3895
3937
  result.push({
3896
3938
  ...filter,
3897
3939
  rightOperand: filter.rightOperand.map(
3898
- (operand) => new Date(operand).getTime()
3940
+ (operand) => parseDatetimeUTC(operand)
3899
3941
  )
3900
3942
  });
3901
3943
  } else {
3902
3944
  result.push({
3903
3945
  ...filter,
3904
- rightOperand: new Date(filter.rightOperand).getTime()
3946
+ rightOperand: parseDatetimeUTC(filter.rightOperand)
3905
3947
  });
3906
3948
  }
3907
3949
  }
@@ -4046,13 +4088,11 @@ var makeFilter = ({
4046
4088
  } else if (dataType === "datetime") {
4047
4089
  operands = resolvedValues.map((resolvedValue) => {
4048
4090
  if (isList) {
4049
- return resolvedValue.map((listValue) => {
4050
- const coerced2 = new Date(listValue).getTime();
4051
- return isNaN(coerced2) ? Number(listValue) : coerced2;
4052
- });
4091
+ return resolvedValue.map(
4092
+ (listValue) => parseDatetimeUTC(listValue)
4093
+ );
4053
4094
  }
4054
- const coerced = new Date(resolvedValue).getTime();
4055
- return isNaN(coerced) ? Number(resolvedValue) : coerced;
4095
+ return parseDatetimeUTC(resolvedValue);
4056
4096
  });
4057
4097
  } else if (dataType === "boolean") {
4058
4098
  operands = resolvedValues.map((resolvedValue) => {
@@ -4138,7 +4178,7 @@ var makeFilterChain = ({
4138
4178
  rightOperand: filterExpression[key1],
4139
4179
  operator: inferOperatorFromFilter(key1),
4140
4180
  type: _type,
4141
- pad: _type === "number" ? { fillString: "0", maxLength: DEFAULT_NUMERIC_LPAD } : void 0
4181
+ pad: _type === "number" ? DEFAULT_NUMERIC_PAD : void 0
4142
4182
  });
4143
4183
  } else if (key1 && key2) {
4144
4184
  const leftFilterOperator = getFilterOperator(filterExpression, "gt") || getFilterOperator(filterExpression, "gte") || getFilterOperator(filterExpression, "after") || void 0;
@@ -4161,7 +4201,7 @@ var makeFilterChain = ({
4161
4201
  leftOperator: inferOperatorFromFilter(leftFilterOperator),
4162
4202
  rightOperator: inferOperatorFromFilter(rightFilterOperator),
4163
4203
  type: _type,
4164
- pad: _type === "number" ? { fillString: "0", maxLength: DEFAULT_NUMERIC_LPAD } : void 0
4204
+ pad: _type === "number" ? DEFAULT_NUMERIC_PAD : void 0
4165
4205
  });
4166
4206
  } else {
4167
4207
  throw new Error(
@@ -7292,7 +7332,7 @@ var Database = class {
7292
7332
  name: field.name,
7293
7333
  type: field.type,
7294
7334
  list: !!field.list,
7295
- pad: field.type === "number" ? { fillString: "0", maxLength: DEFAULT_NUMERIC_LPAD } : void 0
7335
+ pad: field.type === "number" ? DEFAULT_NUMERIC_PAD : void 0
7296
7336
  }
7297
7337
  ]
7298
7338
  };
@@ -7308,7 +7348,8 @@ var Database = class {
7308
7348
  return {
7309
7349
  name: indexField.name,
7310
7350
  type: field?.type,
7311
- list: !!field?.list
7351
+ list: !!field?.list,
7352
+ pad: field?.type === "number" ? DEFAULT_NUMERIC_PAD : void 0
7312
7353
  };
7313
7354
  })
7314
7355
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tinacms/graphql",
3
3
  "type": "module",
4
- "version": "2.4.2",
4
+ "version": "2.4.4",
5
5
  "main": "dist/index.js",
6
6
  "module": "./dist/index.js",
7
7
  "files": [
@@ -43,8 +43,8 @@
43
43
  "normalize-path": "^3.0.0",
44
44
  "readable-stream": "^4.7.0",
45
45
  "yup": "^1.6.1",
46
- "@tinacms/schema-tools": "2.8.0",
47
- "@tinacms/mdx": "2.1.5"
46
+ "@tinacms/mdx": "2.1.6",
47
+ "@tinacms/schema-tools": "2.8.1"
48
48
  },
49
49
  "publishConfig": {
50
50
  "registry": "https://registry.npmjs.org"
@@ -72,7 +72,7 @@
72
72
  "vite": "^4.5.9",
73
73
  "vitest": "^0.32.4",
74
74
  "zod": "^3.24.2",
75
- "@tinacms/schema-tools": "2.8.0",
75
+ "@tinacms/schema-tools": "2.8.1",
76
76
  "@tinacms/scripts": "1.6.1"
77
77
  },
78
78
  "scripts": {