@fkui/i18next-translate 5.44.0 → 5.45.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.
package/dist/cjs/index.js CHANGED
@@ -80,6 +80,7 @@ const getPath = (object, path) => {
80
80
  k
81
81
  } = getLastOfPath(object, path);
82
82
  if (!obj) return undefined;
83
+ if (!Object.prototype.hasOwnProperty.call(obj, k)) return undefined;
83
84
  return obj[k];
84
85
  };
85
86
  const getPathWithDefaults = (data, defaultData, key) => {
@@ -160,7 +161,10 @@ const looksLikeObjectPath = (key, nsSeparator, keySeparator) => {
160
161
  const deepFind = function (obj, path) {
161
162
  let keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';
162
163
  if (!obj) return undefined;
163
- if (obj[path]) return obj[path];
164
+ if (obj[path]) {
165
+ if (!Object.prototype.hasOwnProperty.call(obj, path)) return undefined;
166
+ return obj[path];
167
+ }
164
168
  const tokens = path.split(keySeparator);
165
169
  let current = obj;
166
170
  for (let i = 0; i < tokens.length;) {
@@ -473,7 +477,7 @@ class Translator extends EventEmitter {
473
477
  let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
474
478
  interpolation: {}
475
479
  };
476
- if (key === undefined || key === null) {
480
+ if (key == null) {
477
481
  return false;
478
482
  }
479
483
  const resolved = this.resolve(key, options);
@@ -511,7 +515,7 @@ class Translator extends EventEmitter {
511
515
  ...options
512
516
  };
513
517
  if (!options) options = {};
514
- if (keys === undefined || keys === null) return '';
518
+ if (keys == null) return '';
515
519
  if (!Array.isArray(keys)) keys = [String(keys)];
516
520
  const returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;
517
521
  const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;
@@ -727,7 +731,7 @@ class Translator extends EventEmitter {
727
731
  }
728
732
  const postProcess = options.postProcess || this.options.postProcess;
729
733
  const postProcessorNames = isString$1(postProcess) ? [postProcess] : postProcess;
730
- if (res !== undefined && res !== null && postProcessorNames?.length && options.applyPostProcessor !== false) {
734
+ if (res != null && postProcessorNames?.length && options.applyPostProcessor !== false) {
731
735
  res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {
732
736
  i18nResolved: {
733
737
  ...resolved,
@@ -1730,7 +1734,7 @@ class I18n extends EventEmitter {
1730
1734
  callback = options;
1731
1735
  options = {};
1732
1736
  }
1733
- if (!options.defaultNS && options.defaultNS !== false && options.ns) {
1737
+ if (options.defaultNS == null && options.ns) {
1734
1738
  if (isString$1(options.ns)) {
1735
1739
  options.defaultNS = options.ns;
1736
1740
  } else if (options.ns.indexOf('translation') < 0) {
@@ -4413,7 +4417,7 @@ const formatter = {
4413
4417
  class FDate {
4414
4418
  value;
4415
4419
  constructor(value) {
4416
- this.value = dayjs(value, ISO8601_YYYY_MM_DD, true);
4420
+ this.value = dayjs(value, ISO8601_YYYY_MM_DD, true).startOf("day");
4417
4421
  }
4418
4422
  /**
4419
4423
  * Create {@link FDate} with an invalid state.
@@ -4717,7 +4721,7 @@ class FDate {
4717
4721
  if (typeof rhs === "string") {
4718
4722
  rhs = FDate.fromIso(rhs);
4719
4723
  }
4720
- return this.value.isBefore(rhs.value);
4724
+ return this.value.isBefore(rhs.value, "day");
4721
4725
  }
4722
4726
  /**
4723
4727
  * Returns true if this date is after given date.
@@ -4728,7 +4732,7 @@ class FDate {
4728
4732
  if (typeof rhs === "string") {
4729
4733
  rhs = FDate.fromIso(rhs);
4730
4734
  }
4731
- return this.value.isAfter(rhs.value);
4735
+ return this.value.isAfter(rhs.value, "day");
4732
4736
  }
4733
4737
  /**
4734
4738
  * Compares two {@link FDate} objects. Returns and integer indicating whenever
@@ -4767,10 +4771,10 @@ class FDate {
4767
4771
  return -1;
4768
4772
  }
4769
4773
  }
4770
- if (a.value.isSame(b.value)) {
4774
+ if (a.equals(b)) {
4771
4775
  return 0;
4772
4776
  }
4773
- else if (a.value.isBefore(b.value)) {
4777
+ else if (a.isBefore(b)) {
4774
4778
  return -1;
4775
4779
  }
4776
4780
  else {
@@ -4813,6 +4817,26 @@ class FDate {
4813
4817
  }
4814
4818
  }
4815
4819
 
4820
+ /**
4821
+ * @public
4822
+ */
4823
+ function parseDate(value) {
4824
+ if (isEmpty(value)) {
4825
+ return undefined;
4826
+ }
4827
+ const normalized = normalizeDateFormat(value);
4828
+ if (!normalized) {
4829
+ return undefined;
4830
+ }
4831
+ const date = FDate.fromIso(normalized);
4832
+ if (date.isValid()) {
4833
+ return date.toString();
4834
+ }
4835
+ else {
4836
+ return undefined;
4837
+ }
4838
+ }
4839
+
4816
4840
  /**
4817
4841
  * Strips all whitespace from the text (not only leading and trailing)
4818
4842
  *
@@ -4939,6 +4963,18 @@ function parsePersonnummerLuhn(value) {
4939
4963
  }
4940
4964
  return parsed;
4941
4965
  }
4966
+ /**
4967
+ * Formats personnummer to a 8-digit date.
4968
+ *
4969
+ * @public
4970
+ */
4971
+ function formatPersonnummerToDate(value) {
4972
+ const datePart = parseDate(parsePersonnummer(value)?.slice(0, 8) || "");
4973
+ if (!datePart) {
4974
+ return undefined;
4975
+ }
4976
+ return FDate.fromIso(datePart);
4977
+ }
4942
4978
 
4943
4979
  const PLUSGIRO_REGEXP = /^\d{1,7}[-]?\d{1}$/;
4944
4980
  function hyphenShouldBeAdded(value) {
@@ -5106,16 +5142,16 @@ function getErrorMessages() {
5106
5142
  return ValidationErrorMessageBuilder.create()
5107
5143
  .map("bankAccountNumber", "Kontonumret är inte rätt ifyllt. Kolla att det stämmer.")
5108
5144
  .mapCombined("required", "bankAccountNumber", "Fyll i ett kontonummer.")
5109
- .map("bankgiro", "Skriv bankgironumret med sju eller åtta siffror och bindestreck.")
5145
+ .map("bankgiro", "Fyll i bankgironumret med sju eller åtta siffror och bindestreck.")
5110
5146
  .mapCombined("required", "bankgiro", "Fyll i bankgironumret.")
5111
5147
  .mapCombined("maxLength", "bankgiro", "Bankgironumret kan inte ha mer än 9 tecken.")
5112
5148
  .map("clearingNumber", "Clearingnumret är inte rätt ifyllt. Kolla att det stämmer.")
5113
5149
  .mapCombined("required", "clearingNumber", "Fyll i ett clearingnummer.")
5114
5150
  .map("currency", "Fyll i ett belopp.")
5115
5151
  .mapCombined("required", "currency", "Fyll i ett belopp.")
5116
- .map("date", "Du har skrivit ett felaktigt datum.")
5152
+ .map("date", "Du har fyllt i ett felaktigt datum.")
5117
5153
  .mapCombined("required", "date", "Välj ett datum.")
5118
- .map("dateFormat", "Skriv datumet med åtta siffror.")
5154
+ .map("dateFormat", "Fyll i datumet med åtta siffror.")
5119
5155
  .map("decimal", "Fyll i ett värde med rätt antal decimaler.")
5120
5156
  .map("email", "Mejladressen är inte korrekt ifylld.")
5121
5157
  .mapCombined("required", "email", "Fyll i en mejladress.")
@@ -5142,9 +5178,9 @@ function getErrorMessages() {
5142
5178
  .mapCombined("required", "percent", "Fyll i en siffra.")
5143
5179
  .mapCombined("minValue", "percent", "Fyll i en högre siffra.")
5144
5180
  .mapCombined("maxValue", "percent", "Fyll i en lägre siffra.")
5145
- .map("personnummerFormat", "Skriv personnumret med 10 siffror.")
5146
- .mapCombined("required", "personnummerFormat", "Skriv personnumret med 10 siffror.")
5147
- .mapCombined("maxLength", "personnummerFormat", "Skriv personnumret med 10 siffror.")
5181
+ .map("personnummerFormat", "Fyll i personnumret med 10 siffror.")
5182
+ .mapCombined("required", "personnummerFormat", "Fyll i personnumret med 10 siffror.")
5183
+ .mapCombined("maxLength", "personnummerFormat", "Fyll i personnumret med 10 siffror.")
5148
5184
  .map("personnummerLuhn", "Kolla att personnumret stämmer.")
5149
5185
  .map("postalCode", "Fyll i postnumret med fem siffror.")
5150
5186
  .mapCombined("required", "postalCode", "Fyll i ett postnummer.")
@@ -5152,7 +5188,7 @@ function getErrorMessages() {
5152
5188
  .map("phoneNumber", "Telefonnumret är inte rätt ifyllt.")
5153
5189
  .mapCombined("required", "phoneNumber", "Fyll i ett telefonnummer.")
5154
5190
  .mapCombined("matches", "phoneNumber", "Kolla att telefonnumret stämmer.")
5155
- .map("plusgiro", "Skriv plusgironumret med siffror och bindestreck.")
5191
+ .map("plusgiro", "Fyll i plusgironumret med siffror och bindestreck.")
5156
5192
  .mapCombined("required", "plusgiro", "Fyll i plusgironumret.")
5157
5193
  .mapCombined("maxLength", "plusgiro", "Plusgironumret kan inte ha mer än 11 tecken.")
5158
5194
  .map("matches", "Fälten stämmer inte överens.")
@@ -5163,6 +5199,7 @@ function getErrorMessages() {
5163
5199
  .map("invalidDates", "Du kan inte välja det här datumet.")
5164
5200
  .map("invalidWeekdays", "Du kan inte välja det här datumet.")
5165
5201
  .map("whitelist", 'Fältet innehåller otillåtna tecken. Exempel på ogiltiga tecken är /, % och ".')
5202
+ .map("allowList", "Välj ett av alternativen i listan.")
5166
5203
  .build();
5167
5204
  }
5168
5205
 
@@ -5815,6 +5852,21 @@ class ValidationServiceImpl {
5815
5852
  */
5816
5853
  const ValidationService = new ValidationServiceImpl();
5817
5854
 
5855
+ /**
5856
+ * @public
5857
+ */
5858
+ const allowListValidator = {
5859
+ name: "allowList",
5860
+ validation(value, element, config) {
5861
+ if (isEmpty(value) ||
5862
+ config.list === undefined ||
5863
+ config.list.length === 0) {
5864
+ return true;
5865
+ }
5866
+ return config.list.includes(value);
5867
+ },
5868
+ };
5869
+
5818
5870
  const bankAccountNumberValidator = {
5819
5871
  name: "bankAccountNumber",
5820
5872
  validation(value) {
@@ -5829,6 +5881,26 @@ const bankgiroValidator = {
5829
5881
  },
5830
5882
  };
5831
5883
 
5884
+ function toArray(value) {
5885
+ if (Array.isArray(value)) {
5886
+ return value;
5887
+ }
5888
+ else {
5889
+ return [value];
5890
+ }
5891
+ }
5892
+ const blacklistValidator = {
5893
+ name: "blacklist",
5894
+ validation(value, _element, config) {
5895
+ if (!config.values) {
5896
+ throw new Error("config.exclude must have values");
5897
+ }
5898
+ const values = toArray(config.values);
5899
+ const found = values.some((it) => String(it) === value);
5900
+ return !found;
5901
+ },
5902
+ };
5903
+
5832
5904
  const clearingNumberValidator = {
5833
5905
  name: "clearingNumber",
5834
5906
  validation(value) {
@@ -5836,6 +5908,13 @@ const clearingNumberValidator = {
5836
5908
  },
5837
5909
  };
5838
5910
 
5911
+ const currencyValidator = {
5912
+ name: "currency",
5913
+ validation(value) {
5914
+ return isEmpty(value) || isSet(parseNumber(value));
5915
+ },
5916
+ };
5917
+
5839
5918
  const dateValidator = {
5840
5919
  name: "date",
5841
5920
  validation(value) {
@@ -5889,26 +5968,6 @@ const decimalValidator = {
5889
5968
  },
5890
5969
  };
5891
5970
 
5892
- function toArray(value) {
5893
- if (Array.isArray(value)) {
5894
- return value;
5895
- }
5896
- else {
5897
- return [value];
5898
- }
5899
- }
5900
- const blacklistValidator = {
5901
- name: "blacklist",
5902
- validation(value, _element, config) {
5903
- if (!config.values) {
5904
- throw new Error("config.exclude must have values");
5905
- }
5906
- const values = toArray(config.values);
5907
- const found = values.some((it) => String(it) === value);
5908
- return !found;
5909
- },
5910
- };
5911
-
5912
5971
  const emailValidator = {
5913
5972
  name: "email",
5914
5973
  validation(value, _element, config) {
@@ -5918,6 +5977,35 @@ const emailValidator = {
5918
5977
  },
5919
5978
  };
5920
5979
 
5980
+ /**
5981
+ * @internal
5982
+ */
5983
+ function numberValidator$1(value, config, name, compare) {
5984
+ if (value === "") {
5985
+ return true;
5986
+ }
5987
+ const limit = config[name];
5988
+ if (!isSet(limit)) {
5989
+ return false;
5990
+ }
5991
+ const limitAsNumber = parseNumber(String(config[name]));
5992
+ if (limitAsNumber === undefined) {
5993
+ throw new Error(`config.${String(name)} must be a number`);
5994
+ }
5995
+ const valueAsNumber = parseNumber(value);
5996
+ if (valueAsNumber === undefined) {
5997
+ return false;
5998
+ }
5999
+ return compare(valueAsNumber, limitAsNumber);
6000
+ }
6001
+
6002
+ const greaterThanValidator = {
6003
+ name: "greaterThan",
6004
+ validation(value, _element, config) {
6005
+ return numberValidator$1(value, config, "limit", (value, limit) => value > limit);
6006
+ },
6007
+ };
6008
+
5921
6009
  const NUMBER_REGEXP = /^([-−]?[0-9]+)?$/;
5922
6010
  const integerValidator = {
5923
6011
  name: "integer",
@@ -5975,35 +6063,6 @@ const invalidWeekdaysValidator = {
5975
6063
  },
5976
6064
  };
5977
6065
 
5978
- /**
5979
- * @internal
5980
- */
5981
- function numberValidator$1(value, config, name, compare) {
5982
- if (value === "") {
5983
- return true;
5984
- }
5985
- const limit = config[name];
5986
- if (!isSet(limit)) {
5987
- return false;
5988
- }
5989
- const limitAsNumber = parseNumber(String(config[name]));
5990
- if (limitAsNumber === undefined) {
5991
- throw new Error(`config.${String(name)} must be a number`);
5992
- }
5993
- const valueAsNumber = parseNumber(value);
5994
- if (valueAsNumber === undefined) {
5995
- return false;
5996
- }
5997
- return compare(valueAsNumber, limitAsNumber);
5998
- }
5999
-
6000
- const greaterThanValidator = {
6001
- name: "greaterThan",
6002
- validation(value, _element, config) {
6003
- return numberValidator$1(value, config, "limit", (value, limit) => value > limit);
6004
- },
6005
- };
6006
-
6007
6066
  const lessThanValidator = {
6008
6067
  name: "lessThan",
6009
6068
  validation(value, _element, config) {
@@ -6024,6 +6083,22 @@ const matchesValidator = {
6024
6083
  },
6025
6084
  };
6026
6085
 
6086
+ const maxDateValidator = {
6087
+ name: "maxDate",
6088
+ validation(value, _element, config) {
6089
+ if (isEmpty(value)) {
6090
+ return true;
6091
+ }
6092
+ const normalizedValue = normalizeDateFormat(value);
6093
+ if (!normalizedValue) {
6094
+ return false;
6095
+ }
6096
+ const parsed = FDate.fromIso(normalizedValue);
6097
+ const limit = FDate.fromIso(validLimit(config.limit));
6098
+ return parsed.equals(limit) || parsed.isBefore(limit);
6099
+ },
6100
+ };
6101
+
6027
6102
  const maxLengthValidator = {
6028
6103
  name: "maxLength",
6029
6104
  validation(value, _element, config) {
@@ -6054,22 +6129,6 @@ const minDateValidator = {
6054
6129
  },
6055
6130
  };
6056
6131
 
6057
- const maxDateValidator = {
6058
- name: "maxDate",
6059
- validation(value, _element, config) {
6060
- if (isEmpty(value)) {
6061
- return true;
6062
- }
6063
- const normalizedValue = normalizeDateFormat(value);
6064
- if (!normalizedValue) {
6065
- return false;
6066
- }
6067
- const parsed = FDate.fromIso(normalizedValue);
6068
- const limit = FDate.fromIso(validLimit(config.limit));
6069
- return parsed.equals(limit) || parsed.isBefore(limit);
6070
- },
6071
- };
6072
-
6073
6132
  const minLengthValidator = {
6074
6133
  name: "minLength",
6075
6134
  validation(value, _element, config) {
@@ -6091,13 +6150,6 @@ const numberValidator = {
6091
6150
  },
6092
6151
  };
6093
6152
 
6094
- const currencyValidator = {
6095
- name: "currency",
6096
- validation(value) {
6097
- return isEmpty(value) || isSet(parseNumber(value));
6098
- },
6099
- };
6100
-
6101
6153
  const organisationsnummerValidator = {
6102
6154
  name: "organisationsnummer",
6103
6155
  validation(value) {
@@ -6131,6 +6183,48 @@ const personnummerLuhnValidator = {
6131
6183
  },
6132
6184
  };
6133
6185
 
6186
+ const personnummerNotSame = {
6187
+ name: "personnummerNotSame",
6188
+ validation(value, _element, config) {
6189
+ const valuePnr = parsePersonnummer(String(value));
6190
+ if (!valuePnr) {
6191
+ return true;
6192
+ }
6193
+ const otherFieldPnr = parsePersonnummer(String(config.otherField));
6194
+ if (!otherFieldPnr) {
6195
+ return true;
6196
+ }
6197
+ if (valuePnr === otherFieldPnr) {
6198
+ return false;
6199
+ }
6200
+ return true;
6201
+ },
6202
+ };
6203
+
6204
+ const personnummerOlder = {
6205
+ name: "personnummerOlder",
6206
+ validation(value, _element, config) {
6207
+ const valueAsDate = formatPersonnummerToDate(value);
6208
+ const otherAsDate = formatPersonnummerToDate(String(config.otherField));
6209
+ if (!valueAsDate || !otherAsDate) {
6210
+ return true;
6211
+ }
6212
+ return FDate.compare(valueAsDate, otherAsDate) !== 1;
6213
+ },
6214
+ };
6215
+
6216
+ const personnummerYounger = {
6217
+ name: "personnummerYounger",
6218
+ validation(value, _element, config) {
6219
+ const valueAsDate = formatPersonnummerToDate(value);
6220
+ const otherAsDate = formatPersonnummerToDate(String(config.otherField));
6221
+ if (!valueAsDate || !otherAsDate) {
6222
+ return true;
6223
+ }
6224
+ return FDate.compare(valueAsDate, otherAsDate) !== -1;
6225
+ },
6226
+ };
6227
+
6134
6228
  const PHONE_NUMBER_REGEXP = /^(\+?[-_/() ]*(\d[-_/() ]*?){3,17})$/;
6135
6229
  const phoneNumberValidator = {
6136
6230
  name: "phoneNumber",
@@ -6197,32 +6291,36 @@ const whitelistValidator = {
6197
6291
  },
6198
6292
  };
6199
6293
 
6294
+ ValidationService.registerValidator(allowListValidator);
6200
6295
  ValidationService.registerValidator(bankAccountNumberValidator);
6201
6296
  ValidationService.registerValidator(bankgiroValidator);
6297
+ ValidationService.registerValidator(blacklistValidator);
6202
6298
  ValidationService.registerValidator(clearingNumberValidator);
6299
+ ValidationService.registerValidator(currencyValidator);
6203
6300
  ValidationService.registerValidator(dateFormatValidator);
6204
6301
  ValidationService.registerValidator(dateValidator);
6205
6302
  ValidationService.registerValidator(decimalValidator);
6206
- ValidationService.registerValidator(blacklistValidator);
6207
6303
  ValidationService.registerValidator(emailValidator);
6208
- ValidationService.registerValidator(integerValidator);
6209
6304
  ValidationService.registerValidator(greaterThanValidator);
6305
+ ValidationService.registerValidator(integerValidator);
6210
6306
  ValidationService.registerValidator(invalidDatesValidator);
6211
6307
  ValidationService.registerValidator(invalidWeekdaysValidator);
6212
6308
  ValidationService.registerValidator(lessThanValidator);
6213
- ValidationService.registerValidator(minLengthValidator);
6214
6309
  ValidationService.registerValidator(matchesValidator);
6310
+ ValidationService.registerValidator(maxDateValidator);
6215
6311
  ValidationService.registerValidator(maxLengthValidator);
6216
- ValidationService.registerValidator(minValueValidator);
6217
6312
  ValidationService.registerValidator(maxValueValidator);
6218
6313
  ValidationService.registerValidator(minDateValidator);
6219
- ValidationService.registerValidator(maxDateValidator);
6314
+ ValidationService.registerValidator(minLengthValidator);
6315
+ ValidationService.registerValidator(minValueValidator);
6220
6316
  ValidationService.registerValidator(numberValidator);
6221
- ValidationService.registerValidator(currencyValidator);
6222
6317
  ValidationService.registerValidator(organisationsnummerValidator);
6223
6318
  ValidationService.registerValidator(percentValidator);
6224
6319
  ValidationService.registerValidator(personnummerFormatValidator);
6225
6320
  ValidationService.registerValidator(personnummerLuhnValidator);
6321
+ ValidationService.registerValidator(personnummerNotSame);
6322
+ ValidationService.registerValidator(personnummerOlder);
6323
+ ValidationService.registerValidator(personnummerYounger);
6226
6324
  ValidationService.registerValidator(phoneNumberValidator);
6227
6325
  ValidationService.registerValidator(plusgiroValidator);
6228
6326
  ValidationService.registerValidator(postalCodeValidator);