@burnsred/entity 0.6.6 → 1.0.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 (105) hide show
  1. package/README.md +174 -1
  2. package/dist/cleaner/as-boolean.d.ts +7 -0
  3. package/dist/cleaner/as-boolean.js +10 -0
  4. package/dist/cleaner/as-boolean.js.map +1 -0
  5. package/dist/cleaner/as-date.d.ts +1 -0
  6. package/dist/cleaner/as-date.js +5 -0
  7. package/dist/cleaner/as-date.js.map +1 -0
  8. package/dist/cleaner/as-integer.d.ts +1 -0
  9. package/dist/cleaner/as-integer.js +5 -0
  10. package/dist/cleaner/as-integer.js.map +1 -0
  11. package/dist/cleaner/as-number.d.ts +1 -0
  12. package/dist/cleaner/as-number.js +5 -0
  13. package/dist/cleaner/as-number.js.map +1 -0
  14. package/dist/cleaner/as-string.d.ts +1 -0
  15. package/dist/cleaner/as-string.js +4 -0
  16. package/dist/cleaner/as-string.js.map +1 -0
  17. package/dist/cleaner/collapse-spaces.d.ts +4 -0
  18. package/dist/cleaner/collapse-spaces.js +7 -0
  19. package/dist/cleaner/collapse-spaces.js.map +1 -0
  20. package/dist/cleaner/index.d.ts +7 -0
  21. package/dist/cleaner/index.js +8 -0
  22. package/dist/cleaner/index.js.map +1 -0
  23. package/dist/cleaner/trim.d.ts +1 -0
  24. package/dist/cleaner/trim.js +4 -0
  25. package/dist/cleaner/trim.js.map +1 -0
  26. package/dist/entity/Entity.d.ts +20 -0
  27. package/dist/entity/Entity.js +63 -0
  28. package/dist/entity/Entity.js.map +1 -0
  29. package/dist/entity/index.d.ts +8 -0
  30. package/dist/entity/index.js +9 -0
  31. package/dist/entity/index.js.map +1 -0
  32. package/dist/field/BooleanField.d.ts +7 -0
  33. package/dist/field/BooleanField.js +8 -0
  34. package/dist/field/BooleanField.js.map +1 -0
  35. package/dist/field/CharField.d.ts +7 -0
  36. package/dist/field/CharField.js +8 -0
  37. package/dist/field/CharField.js.map +1 -0
  38. package/dist/field/DateField.d.ts +9 -0
  39. package/dist/field/DateField.js +19 -0
  40. package/dist/field/DateField.js.map +1 -0
  41. package/dist/field/DateTimeField.d.ts +9 -0
  42. package/dist/field/DateTimeField.js +14 -0
  43. package/dist/field/DateTimeField.js.map +1 -0
  44. package/dist/field/EntityField.d.ts +24 -0
  45. package/dist/field/EntityField.js +63 -0
  46. package/dist/field/EntityField.js.map +1 -0
  47. package/dist/field/Field.d.ts +42 -0
  48. package/dist/field/Field.js +97 -0
  49. package/dist/field/Field.js.map +1 -0
  50. package/dist/field/IdField.d.ts +15 -0
  51. package/dist/field/IdField.js +23 -0
  52. package/dist/field/IdField.js.map +1 -0
  53. package/dist/field/IntegerField.d.ts +6 -0
  54. package/dist/field/IntegerField.js +9 -0
  55. package/dist/field/IntegerField.js.map +1 -0
  56. package/dist/field/NumberField.d.ts +7 -0
  57. package/dist/field/NumberField.js +8 -0
  58. package/dist/field/NumberField.js.map +1 -0
  59. package/dist/field/TextField.d.ts +4 -0
  60. package/dist/field/TextField.js +5 -0
  61. package/dist/field/TextField.js.map +1 -0
  62. package/dist/field/index.d.ts +68 -0
  63. package/dist/field/index.js +12 -0
  64. package/dist/field/index.js.map +1 -0
  65. package/dist/index.d.ts +67 -0
  66. package/dist/index.js +5 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/validator/entity-valid.d.ts +9 -0
  69. package/dist/validator/entity-valid.js +12 -0
  70. package/dist/validator/entity-valid.js.map +1 -0
  71. package/dist/validator/index.d.ts +2 -0
  72. package/dist/validator/index.js +3 -0
  73. package/dist/validator/index.js.map +1 -0
  74. package/dist/validator/value-range.d.ts +8 -0
  75. package/dist/validator/value-range.js +24 -0
  76. package/dist/validator/value-range.js.map +1 -0
  77. package/package.json +21 -37
  78. package/CHANGELOG.md +0 -116
  79. package/LICENSE +0 -21
  80. package/dist/development.js +0 -1377
  81. package/dist/development.js.map +0 -1
  82. package/dist/entity/src/cleaner/remove-multi-space.test.d.ts +0 -1
  83. package/dist/entity/src/cleaner/slice-to-max-length.test.d.ts +0 -1
  84. package/dist/entity/src/entity/entity.test.d.ts +0 -1
  85. package/dist/entity/src/entity/sample-todo-entity.d.ts +0 -19
  86. package/dist/entity/src/entity/sample-useQuery.d.ts +0 -1
  87. package/dist/entity/src/field/field-any.test.d.ts +0 -1
  88. package/dist/entity/src/field/field-boolean.test.d.ts +0 -1
  89. package/dist/entity/src/field/field-char.test.d.ts +0 -1
  90. package/dist/entity/src/field/field-date.test.d.ts +0 -1
  91. package/dist/entity/src/field/field-datetime.test.d.ts +0 -1
  92. package/dist/entity/src/field/field-entity.test.d.ts +0 -1
  93. package/dist/entity/src/field/field-enum.test.d.ts +0 -1
  94. package/dist/entity/src/field/field-id.test.d.ts +0 -1
  95. package/dist/entity/src/field/field-integer.test.d.ts +0 -1
  96. package/dist/entity/src/field/field-number.test.d.ts +0 -1
  97. package/dist/entity/src/field/field-text.test.d.ts +0 -1
  98. package/dist/entity/src/field/field.test.d.ts +0 -1
  99. package/dist/entity/src/types.d.ts +0 -223
  100. package/dist/entity/src/validator/allow-blank.test.d.ts +0 -1
  101. package/dist/entity/src/validator/is-required.test.d.ts +0 -1
  102. package/dist/entity/src/validator/may-not-be-blank.test.d.ts +0 -1
  103. package/dist/legacy.js +0 -30
  104. package/dist/production.min.js +0 -1
  105. package/dist/production.min.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"development.js","sources":["../src/cleaner/remove-multi-space.js","../src/cleaner/slice-to-max-length.js","../src/validator/allow-blank.js","../src/validator/entity-valid.js","../src/validator/is-required.js","../src/validator/is-required-if.js","../src/validator/list.js","../src/validator/may-not-be-blank.js","../src/field/field.js","../src/field/field-any.js","../src/field/field-boolean.js","../src/field/field-char.js","../src/field/field-date.js","../src/field/field-datetime.js","../src/field/field-entity.js","../src/field/field-id.js","../src/entity/entity.js","../src/entity/entity-locale.js","../src/entity/entity-enum.js","../src/field/field-enum.js","../src/field/field-number.js","../src/field/field-integer.js","../src/field/field-text.js","../src/entity/entity-filter.js","../src/entity/entity-title.js"],"sourcesContent":["import _ from 'lodash';\n\nexport default (value) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!_.isString(value))\n throw new Error(\n 'cleaners.removeMultiSpace: value must be of type string',\n );\n }\n\n return value.replace(/\\s\\s+/g, ' ');\n};\n","import _ from 'lodash';\n\nexport default (value, { field }) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!_.isString(value))\n throw new Error(\n 'cleaners.removeMultiSpace: value must be of type string',\n );\n }\n\n return field.maxLength ? value.slice(0, field.maxLength) : value;\n};\n","export default () => false;\n","export default (value, options = {}) => {\n const errors = options.field.entity.validate(value, options);\n\n return !!errors && errors.size > 0 && errors;\n};\n","export default (value, configs = {}) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!configs.field)\n throw new Error('validators.isRequired: \"field\" option is required');\n }\n\n return configs.field.isBlank(value, configs) && 'May not be blank';\n};\n","import _ from 'lodash';\n\nimport isRequired from './is-required';\n\nexport default (predicate) => (value, configs) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!_.isFunction(predicate))\n throw new Error(\n 'validators.isRequiredIf: predicate argument must be of type function',\n );\n }\n\n return predicate({ value, ...configs }) && isRequired(value, configs);\n};\n","import { List, Map } from 'immutable';\n\nexport default (validators) => (values, configs) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!List.isList(values))\n throw new Error('validators.list: \"values\" must be a list');\n }\n\n const errors = values.map((value) =>\n List(validators)\n .map((validator) => validator(value, configs))\n .filter((error) => error),\n );\n\n return (\n errors.some((error) => error.size > 0) &&\n Map({\n errors,\n list: true,\n message: 'Invalid list',\n })\n );\n};\n","import isRequired from './is-required';\n\nexport default (value, configs = {}) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!configs.field)\n throw new Error('validator.mayNotBeBlank: \"field\" option is required');\n }\n\n const validator = configs.flag && configs.field.flags[configs.flag];\n\n const defaultError = !configs.field.blank && isRequired(value, configs);\n\n if (!validator) return defaultError;\n\n const flagError = validator(value, configs);\n\n return defaultError\n ? flagError && defaultError\n : flagError && 'May not be blank';\n};\n","import _ from 'lodash';\nimport { fromJS, isImmutable, List, Map } from 'immutable';\n\nimport isRequired from '../validator/is-required';\n\nexport default class Field {\n constructor(options = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (options.options && !List.isList(options.options))\n throw new Error(\n `Field.constructor (${this.constructor.name}): options.options must be a an immutable List`,\n );\n if (\n options.options &&\n options.options.size !== options.options.toSet().size\n )\n throw new Error(\n `Field.constructor (${this.constructor.name}): options.options must have unique items.`,\n );\n }\n\n const defaults = {\n blank: false,\n cleaners: [],\n many: false,\n validators: options.blank ? [] : [isRequired],\n };\n\n Object.assign(this, defaults, options, {\n validators: _.isFunction(options.validators)\n ? options.validators(defaults.validators)\n : options.validators || defaults.validators,\n });\n }\n\n clean(record, configs = {}) {\n const newOptions = { ...configs, field: this };\n\n return this.cleaners.reduce(\n (prev, cleaner) => cleaner(prev, newOptions),\n record,\n );\n }\n\n dataToValue(data) {\n return fromJS(data);\n }\n\n default() {\n return this.many ? List() : null;\n }\n\n getErrors(errors, configs = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (configs.name)\n throw new Error(\n `Field.getErrors (${this.constructor.name}): option \"name\" is not supported.`,\n );\n }\n\n return errors;\n }\n\n getErrorsArray(errors, options = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (options.index === undefined)\n throw new Error(\n `Field.getErrorsArray (${this.constructor.name}): option \"index\" is required.`,\n );\n }\n\n return errors\n .filter((error) => Map.isMap(error) && error.get('list'))\n .flatMap((error) => error.getIn(['errors', options.index]));\n }\n\n getField(options = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (options.name)\n throw new Error(\n `Field.getField (${this.constructor.name}): method with option name is not supported.`,\n );\n }\n\n return options.name ? null : this;\n }\n\n getId() {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n `Field.getId (${this.constructor.name}): method is not supported.`,\n );\n }\n }\n\n getKey(value) {\n return this.toString(value);\n }\n\n getOptions() {\n return this.options || List();\n }\n\n getValue(value, options = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (options.name)\n throw new Error(\n `Field.getValue (${this.constructor.name}): option \"name\" is not supported.`,\n );\n }\n\n return options.name ? null : value;\n }\n\n isBlank(value = null, options = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (options.name)\n throw new Error(\n `Field.isBlank (${this.constructor.name}): method with option name is not supported.`,\n );\n }\n\n return value === null || (this.many ? value.size === 0 : value === '');\n }\n\n toData(value) {\n return isImmutable(value) ? value.toJS() : value;\n }\n\n toParams(value) {\n return (value && value.toString()) || '';\n }\n\n toString(value = null) {\n return value === null ? '' : value.toString();\n }\n\n validate(value, options = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (this.many && !List.isList(value))\n throw new Error(\n `Field.validate (${this.constructor.name}-${options.fieldName}): \"value\" must be an \"Immutable List\" with field option \"many\"`,\n );\n }\n\n const validators = _.isFunction(options.validators)\n ? options.validators(this.validators)\n : options.validators || this.validators;\n\n return List(validators)\n .map((validator) => validator(value, { ...options, field: this }))\n .filter((error) => error);\n }\n}\n","import Field from './field';\n\nexport default class AnyField extends Field {}\n","import AnyField from './field-any';\n\nexport default class BooleanField extends AnyField {\n constructor(configs = {}) {\n super({ type: 'boolean', ...configs });\n }\n}\n","import { List } from 'immutable';\n\nimport AnyField from './field-any';\n\nexport default class CharField extends AnyField {\n constructor(configs = {}) {\n super({ type: 'char', ...configs });\n }\n\n default() {\n return this.many ? List() : '';\n }\n}\n","import moment from 'moment';\n\nimport AnyField from './field-any';\n\nexport default class DateField extends AnyField {\n constructor(configs = {}) {\n super({\n allowTime: false,\n dateFormat: 'YYYY-MM-DD',\n type: 'date',\n ...configs,\n });\n }\n\n dataToValue(data) {\n return data && moment(data);\n }\n\n toData(value) {\n return value && value.format(this.dateFormat);\n }\n\n toParams(value) {\n return (value && value.format(this.dateFormat)) || '';\n }\n\n toString(value) {\n return (value && value.format(this.dateFormat)) || '';\n }\n}\n","import DateField from './field-date';\n\nexport default class DateTimeField extends DateField {\n constructor(configs = {}) {\n super({\n dateFormat: 'YYYY-MM-DD HH:mm',\n allowTime: true,\n ...configs,\n });\n }\n}\n","import _ from 'lodash';\nimport { List, Map } from 'immutable';\n\nimport AnyField from './field-any';\nimport entityValid from '../validator/entity-valid';\nimport list from '../validator/list';\n\nexport default class EntityField extends AnyField {\n constructor(configs = {}) {\n const defaults = {\n nested: true,\n type: 'entity',\n };\n\n const entityValidators = configs.many\n ? [list([entityValid])]\n : [entityValid];\n\n super(\n Object.assign(defaults, configs, {\n validators: (defaultValidators) =>\n _.isFunction(configs.validators)\n ? configs.validators(defaultValidators.concat(entityValidators))\n : configs.validators || defaultValidators.concat(entityValidators),\n }),\n );\n\n if (process.env.NODE_ENV !== 'production') {\n if (!configs.entity)\n throw new Error(\n `${this.constructor.name}.constructor: \"entity\" option is required`,\n );\n }\n }\n\n dataToValue(data) {\n return this.entity.dataToRecord(data);\n }\n\n default() {\n if (this.many) return List();\n\n return this.blank ? null : this.entity.dataToRecord({});\n }\n\n getErrors(errors, configs = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (configs.name && !_.isString(configs.name))\n throw new Error(\n `EntityField.getErrors (${this.entity.name}): \"name\" option must be either a string or undefined`,\n );\n if (configs.name && !this.entity.fields[configs.name])\n throw new Error(\n `EntityField.getErrors (${this.entity.name}): field \"${configs.name}\" not found`,\n );\n }\n\n return configs.name\n ? errors\n .filter((error) => Map.isMap(error) && error.get('detail'))\n .flatMap((error) =>\n Map.isMap(error.getIn(['errors', configs.name]))\n ? List([error.getIn(['errors', configs.name])])\n : error.getIn(['errors', configs.name]),\n )\n .filter((error) => error)\n : errors;\n }\n\n getField(configs = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (configs.name && !_.isString(configs.name))\n throw new Error(\n `EntityField.getField (${this.entity.name}): \"name\" option must be either a string or undefined`,\n );\n if (configs.name && !this.entity.fields[configs.name])\n throw new Error(\n `EntityField.getField (${this.entity.name}): field \"${configs.name}\" not found`,\n );\n }\n\n return configs.name ? this.entity.fields[configs.name] : this;\n }\n\n getId(value, configs = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (configs.name && !_.isString(configs.name))\n throw new Error(\n `EntityField.getId (${this.entity.name}): \"name\" option must be either a string or undefined`,\n );\n if (configs.name && !this.entity.fields[configs.name])\n throw new Error(\n `EntityField.getId (${this.entity.name}): field \"${configs.name}\" not found`,\n );\n }\n\n return this.getField({ value, ...configs }).entity.getId(\n this.getValue(value, configs),\n );\n }\n\n getKey(value) {\n return this.getId(value);\n }\n\n getOptions() {\n return this.options || this.entity.options || List();\n }\n\n getValue(value, configs = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (configs.name && !_.isString(configs.name))\n throw new Error(\n `EntityField.getValue (${this.entity.name}): \"name\" option must be either a string or undefined`,\n );\n if (configs.name && !this.entity.fields[configs.name])\n throw new Error(\n `EntityField.getValue (${this.entity.name}): field \"${configs.name}\" not found`,\n );\n }\n\n return configs.name && value ? value.get(configs.name) : value;\n }\n\n isBlank(value = null, configs = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (configs.name && !_.isString(configs.name))\n throw new Error(\n `EntityField.isBlank (${this.entity.name}): \"name\" option must be either a string or undefined`,\n );\n if (configs.name && !this.entity.fields[configs.name])\n throw new Error(\n `EntityField.isBlank (${this.entity.name}): field \"${configs.name}\" not found`,\n );\n }\n\n return value === null || (this.many ? value.size === 0 : value === '');\n }\n\n toData(value, configs = {}) {\n return this.entity.toData(value, configs);\n }\n\n valueToParam(value = null) {\n return value === null ? undefined : value.get(this.entity.idField);\n }\n\n toParams(value, configs) {\n return this.getId(value, configs);\n }\n\n toString(value, configs = {}) {\n return this.entity.toString(value, configs);\n }\n}\n","import _ from 'lodash';\nimport idx from 'idx';\nimport AnyField from './field-any';\n\nexport default class IdField extends AnyField {\n constructor(configs = {}) {\n super(configs);\n\n if (process.env.NODE_ENV !== 'production') {\n if (configs.many)\n throw new Error(\n `${this.constructor.name}.constructor: \"many\" option is not supported.`,\n );\n }\n }\n\n dataToValue(data) {\n return _.isFunction(idx(data, (x) => x.toString)) ? data.toString() : data;\n }\n\n default() {\n return undefined;\n }\n}\n","import _ from 'lodash';\nimport { List, Map } from 'immutable';\n\nimport EntityField from '../field/field-entity';\nimport IdField from '../field/field-id';\n\nexport default class Entity {\n static cleaners = [];\n\n static idField = 'uuid';\n\n static fields = {\n uuid: new IdField({ blank: true, mock: 'random.uuid' }),\n };\n\n static paths = {};\n\n static actionArrayDeleteAtIndex(records, { index = null } = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (!List.isList(records))\n throw new Error(\n `Entity.actionArrayDeleteAt (${this.name}): \"records\" must be an immutable List.`,\n );\n if (index === null)\n throw new Error(\n `Entity.actionArrayDeleteAt (${this.name}): \"index\" option must be set.`,\n );\n }\n\n return records.delete(index);\n }\n\n static actionArrayMoveAtIndex(\n records,\n { index = null, indexTo = null } = {},\n ) {\n if (process.env.NODE_ENV !== 'production') {\n if (!List.isList(records))\n throw new Error(\n `Entity.actionArrayMoveAtIndex (${this.name}): \"records\" must be an immutable List.`,\n );\n if (index === null)\n throw new Error(\n `Entity.actionArrayMoveAtIndex (${this.name}): \"index\" option must be set.`,\n );\n if (indexTo === null)\n throw new Error(\n `Entity.actionArrayMoveAtIndex (${this.name}): \"indexTo\" option must be set.`,\n );\n }\n\n return records.delete(index).insert(indexTo, records.get(index));\n }\n\n static actionReset(record, configs = {}) {\n return (\n configs.valueInitial ||\n this.dataToRecord({\n [this.idField]: record.get(this.idField),\n })\n );\n }\n\n static clean(record, configs = {}) {\n const newOptions = { ...configs, entity: this };\n\n return this.cleaners.reduce(\n (prev, cleaner) => cleaner(prev, newOptions),\n record,\n );\n }\n\n static dataToRecord(data = null) {\n const fieldDataToValue = (value, key) =>\n List.isList(value) || Array.isArray(value)\n ? List(value).map((val) => this.fields[key].dataToValue(val, { data }))\n : this.fields[key].dataToValue(value, { data });\n\n const getDefaultFromField = (field) =>\n _.isFunction(field.default) ? field.default({ data }) : field.default;\n\n const values = Map(data)\n .filter((value, key) => key in this.fields)\n .filterNot((value) => value === undefined)\n .map(fieldDataToValue);\n\n return (\n data &&\n Map(this.fields)\n .filter((value, key) => data[key] === undefined)\n .map(getDefaultFromField)\n .merge(values)\n );\n }\n\n static getEntityField(configs = {}) {\n return new EntityField({ entity: this, ...configs });\n }\n\n static getId(record = null) {\n return record === null ? undefined : record.get(this.idField);\n }\n\n static getPaths() {\n return this.paths;\n }\n\n static getSize() {\n return 0;\n }\n\n static isEntity(maybeEntity) {\n return !!maybeEntity && maybeEntity.prototype instanceof Entity;\n }\n\n static isEntityDescendant(maybeDescendant) {\n return !!maybeDescendant && maybeDescendant.prototype instanceof this;\n }\n\n static isValid(record, configs) {\n return this.validate(record, configs).size === 0;\n }\n\n static isValidFromErrors(errors, configs = {}) {\n return configs.name\n ? configs.name.some(\n (n) =>\n errors\n .filter((error) => Map.isMap(error) && error.get('detail'))\n .flatMap((error) => error.getIn(['errors', n]))\n .filter((error) => error).size > 0,\n )\n : !errors || errors.size === 0;\n }\n\n static mock(faker, index, mockData) {\n return _.flowRight([\n (record) => this.toData(record),\n (data) => this.dataToRecord(data),\n (fields) => ({\n ..._.mapValues(fields, (field) => {\n if (\n field instanceof EntityField &&\n !field.blank &&\n field.entity.store\n ) {\n return field.many\n ? _.sampleSize(Object.values(field.entity.store))\n : _.sample(Object.values(field.entity.store));\n }\n\n return (\n field.mock &&\n (field.mock === 'index'\n ? index\n : _.get(faker, field.mock)(...(field.mockConfigs || [])))\n );\n }),\n ...mockData,\n }),\n ])(this.fields);\n }\n\n static mockMany(faker, configs = {}) {\n return _.keyBy(\n _.range(configs.size).map((index) => this.mock(faker, index)),\n this.idField,\n );\n }\n\n static toData(record) {\n if (process.env.NODE_ENV !== 'production') {\n if (record && !Map.isMap(record))\n throw new Error(\n `Entity.toData (${this.name}): record must be either a Map or null or undefined`,\n );\n }\n\n const fieldValueToData = (value, key) =>\n List.isList(value)\n ? value.map((val) => this.fields[key].toData(val, { record })).toArray()\n : this.fields[key].toData(value, { record });\n\n return (\n record &&\n record\n .filter((value, key) => key in this.fields)\n .filterNot((value, key) => this.fields[key].local)\n .map(fieldValueToData)\n .toObject()\n );\n }\n\n static toString(record) {\n if (process.env.NODE_ENV !== 'production') {\n if (record && !Map.isMap(record))\n throw new Error(\n `Entity.toString (${this.name}): record must be either a Map or null or undefined`,\n );\n }\n\n return (record && record.get(this.idField)) || '';\n }\n\n static validate(record, configs = {}) {\n if (!record) return record;\n\n const detailErrors = Map(this.fields)\n .filter((field, key) => !configs.fields || configs.fields[key])\n .map((field, key) =>\n field.validate(record.get(key), {\n ...configs,\n fieldName: key,\n record,\n validators: configs.fields && configs.fields[key],\n }),\n )\n .filterNot((errors) => errors.size === 0);\n\n return detailErrors.size === 0\n ? null\n : Map({\n detail: true,\n message: 'Invalid Entity',\n errors: detailErrors,\n });\n }\n}\n","import Entity from './entity';\nimport AnyField from '../field/field-any';\nimport CharField from '../field/field-char';\nimport IdField from '../field/field-id';\n\nexport default class Locale extends Entity {\n static fields = {\n messages: new AnyField(),\n defaultMessage: new CharField(),\n description: new CharField(),\n id: new CharField(),\n uuid: new IdField({ mock: 'random.uuid' }),\n };\n}\n","import Entity from './entity';\nimport EntityLocale from './entity-locale';\nimport BooleanField from '../field/field-boolean';\nimport CharField from '../field/field-char';\nimport EntityField from '../field/field-entity';\n\nexport default class Enum extends Entity {\n static idField = 'value';\n\n static fields = {\n disabled: new BooleanField({ default: false }),\n hidden: new BooleanField({ default: false }),\n label: new CharField(),\n locale: new EntityField({\n blank: true,\n entity: EntityLocale,\n }),\n value: new CharField(),\n };\n\n static toString(record) {\n return (record && record.get('label')) || '';\n }\n}\n","import { List } from 'immutable';\n\nimport EntityField from './field-entity';\nimport EntityEnum from '../entity/entity-enum';\n\nexport default class EnumField extends EntityField {\n constructor(configs = {}) {\n super({ entity: EntityEnum, type: 'enum', ...configs });\n }\n\n dataToValue(data = null) {\n return (\n data &&\n this.getOptions().find((option) => this.entity.getId(option) === data)\n );\n }\n\n default() {\n return this.many ? List() : null;\n }\n\n isEnumActive(value, { name }) {\n return this.many\n ? value.some((v) => v.get('value') === name)\n : !!value && value.get('value') === name;\n }\n\n valueToData(value = null) {\n return value && this.entity.getId(value);\n }\n\n valueToParam(value = null) {\n return value === null ? undefined : this.entity.getId(value);\n }\n}\n","import AnyField from './field-any';\n\nexport default class NumberField extends AnyField {\n constructor(options = {}) {\n super({ type: 'number', ...options });\n }\n}\n","import NumberField from './field-number';\n\nexport default class IntegerField extends NumberField {\n dataToValue(data) {\n const value = parseInt(data, 10);\n\n return Number.isNaN(value) ? null : value;\n }\n}\n","import CharField from './field-char';\n\nexport default class TextField extends CharField {\n constructor(configs = {}) {\n super({ type: 'text', ...configs });\n }\n}\n","import { List, Map } from 'immutable';\n\nimport Entity from './entity';\n\nimport IdField from '../field/field-id';\nimport IntegerField from '../field/field-integer';\n\nexport default class Filter extends Entity {\n static fields = {\n page: new IntegerField({ default: 1 }),\n page_size: new IntegerField({ default: 20 }),\n uuid: new IdField({ blank: true, mock: 'random.uuid' }),\n };\n\n // NOTE(thierry): returning a map from field.toParams will flatten the output\n static toParams(record, options = {}) {\n const fieldValueToParams = (value, key) =>\n List.isList(value)\n ? value\n .map((val) =>\n this.fields[key].toParams(val, { record, ...options }),\n )\n .reduce(\n (prev, param) =>\n prev.mergeWith(\n (prevParam, nextParam) =>\n prevParam ? `${prevParam},${nextParam}` : nextParam,\n Map.isMap(param) ? param : Map({ [key]: param }),\n ),\n Map(),\n )\n : this.fields[key].toParams(value, { record, ...options });\n\n return record\n ? record\n .filter((_, key) => key in this.fields)\n .filterNot((_, key) => this.fields[key].local)\n .filterNot((value) => value === undefined)\n .map(fieldValueToParams)\n .flatten()\n : Map();\n }\n}\n","import _ from 'lodash';\nimport idx from 'idx';\nimport queryString from 'query-string';\nimport { Map } from 'immutable';\n\nimport Entity from './entity';\nimport EntityLocale from './entity-locale';\n\nimport BooleanField from '../field/field-boolean';\nimport CharField from '../field/field-char';\nimport EntityField from '../field/field-entity';\nimport IdField from '../field/field-id';\nimport IntegerField from '../field/field-integer';\nimport TextField from '../field/field-text';\n\nexport default class Title extends Entity {\n static fields = {\n description: new TextField({ blank: true }),\n is_archived: new BooleanField({ default: false }),\n locale: new EntityField({\n blank: true,\n entity: EntityLocale,\n }),\n order: new IntegerField({ mock: 'index' }),\n title: new CharField({ mock: 'lorem.sentence' }),\n title_short: new CharField({ blank: true }),\n uuid: new IdField({ blank: true, mock: 'random.uuid' }),\n };\n\n static paths = {\n urlBase: '',\n };\n\n static actionArchive(record, configs = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (!idx(this, (x) => x.duck.actions.save))\n throw new Error(\n `EntityTitle.actionArchive (${this.name}): \"save\" action is required in duck`,\n );\n }\n\n return this.duck.actions.save(record, {\n action: 'archive',\n method: 'post',\n ...configs,\n });\n }\n\n static actionArrayDeleteAtIndexOrdered(records, configs) {\n return this.actionArrayDeleteAtIndex(records, configs).map((record, i) =>\n record.set('order', i),\n );\n }\n\n static actionArrayMoveAtIndexOrdered(records, configs) {\n return this.actionArrayMoveAtIndex(records, configs).map((record, i) =>\n record.set('order', i),\n );\n }\n\n static actionSave(record, configs = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (!idx(this, (x) => x.duck.actions.save))\n throw new Error(\n `EntityTitle.actionSave (${this.name}): \"save\" action is required in duck`,\n );\n }\n\n return this.duck.actions.save(record, {\n invalidateList: true,\n ...configs,\n });\n }\n\n static toLink(record, configs = {}) {\n const computedParams = (configs.params || Map()).filterNot(\n (param) => param === undefined,\n );\n\n const path = this.getPaths(configs).urlBase;\n if (process.env.NODE_ENV !== 'production') {\n if (!/^\\/.*\\/$/.test(path))\n throw new Error(\n `EntityTitle.toLink (${this.name}): \"urlBase\" property must start with a \"/\" and end with a \"/\"`,\n );\n if (computedParams.some((value) => !_.isString(value)))\n throw new Error(\n `EntityTitle.toLink (${this.name}): every params must be a string or undefined`,\n );\n }\n\n return `${path}${this.getId(record, configs)}/?${queryString.stringify(\n computedParams.toJS(),\n )}`;\n }\n\n static toString(record) {\n return (record && record.get('title')) || '';\n }\n\n static toStringOrdered(record) {\n return record ? `${record.get('order') + 1}. ${this.toString(record)}` : '';\n }\n\n static toUrl(record, configs = {}) {\n const computedParams = (configs.params || Map())\n .remove('page')\n .remove('page_size')\n .filterNot((param) => param === undefined);\n\n const path = this.getPaths(configs).urlBase;\n\n if (process.env.NODE_ENV !== 'production') {\n if (!/^\\/.*\\/$/.test(path))\n throw new Error(\n `EntityTitle.toUrl (${this.name}): \"urlBase\" property must start with a \"/\" and end with a \"/\"`,\n );\n if (computedParams.some((param) => !_.isString(param)))\n throw new Error(\n `EntityTitle.toUrl (${this.name}): every params must be a string or undefined`,\n );\n if (!(configs.settings && configs.settings.BASE_URL))\n throw new Error(\n `EntityTitle.toUrl (${this.name}): \"settings.BASE_URL\" must be set.`,\n );\n }\n\n return `${configs.settings.BASE_URL}${path}${this.getId(\n record,\n configs,\n )}/?${queryString.stringify(computedParams.toJS())}`;\n }\n\n static toUrlExport(configs = {}) {\n const computedParams = configs.params\n ? configs.params\n .remove('page')\n .remove('page_size')\n .filterNot((param) => param === undefined)\n : Map();\n\n const path = this.getPaths(configs).apiBase;\n\n if (process.env.NODE_ENV !== 'production') {\n if (!/^\\/.*\\/$/.test(path))\n throw new Error(\n `EntityTitle.toUrlExport (${this.name}): \"apiBase\" property must start with a \"/\" and end with a \"/\"`,\n );\n if (computedParams.some((param) => !_.isString(param)))\n throw new Error(\n `EntityTitle.toUrlExport (${this.name}): every params must be a string or undefined`,\n );\n if (!(configs.settings && configs.settings.BASE_API_URL))\n throw new Error(\n `EntityTitle.toUrlExport (${this.name}): \"settings.BASE_API_URL\" must be set.`,\n );\n }\n\n return `${configs.settings.BASE_API_URL}${path}?${queryString.stringify(\n computedParams.toJS(),\n )}&format=xlsx`;\n }\n}\n"],"names":["value","process","env","NODE_ENV","Error","replace","field","maxLength","slice","options","errors","entity","validate","size","configs","isBlank","predicate","isRequired","validators","values","List","isList","map","validator","filter","error","some","Map","list","message","flag","flags","defaultError","blank","flagError","Field","constructor","name","toSet","defaults","cleaners","many","Object","assign","record","newOptions","reduce","prev","cleaner","data","fromJS","index","undefined","isMap","get","flatMap","getIn","toString","isImmutable","toJS","fieldName","AnyField","BooleanField","type","CharField","DateField","allowTime","dateFormat","moment","format","DateTimeField","EntityField","nested","entityValidators","entityValid","defaultValidators","concat","dataToRecord","fields","getField","getId","getValue","toData","idField","IdField","Entity","records","delete","indexTo","insert","valueInitial","fieldDataToValue","key","Array","isArray","val","dataToValue","getDefaultFromField","default","filterNot","merge","paths","maybeEntity","prototype","maybeDescendant","n","faker","mockData","store","mock","mockConfigs","fieldValueToData","toArray","local","toObject","detailErrors","detail","uuid","Locale","messages","defaultMessage","description","id","Enum","disabled","hidden","label","locale","EntityLocale","EnumField","EntityEnum","getOptions","find","option","v","NumberField","IntegerField","parseInt","Number","isNaN","TextField","Filter","fieldValueToParams","toParams","param","mergeWith","prevParam","nextParam","_","flatten","page","page_size","Title","duck","actions","save","action","method","actionArrayDeleteAtIndex","i","set","actionArrayMoveAtIndex","invalidateList","computedParams","params","path","getPaths","urlBase","test","queryString","stringify","remove","settings","BASE_URL","apiBase","BASE_API_URL","is_archived","order","title","title_short"],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,19 +0,0 @@
1
- import { EntityFields, EntityRecord } from '../types';
2
- import { default as Entity } from './entity';
3
- declare class TodoEntity extends Entity {
4
- static paginated: boolean;
5
- static paths: {
6
- apiBase: string;
7
- };
8
- static fields: EntityFields<TodoEntityFields>;
9
- }
10
- export type TodoEntityFields = {
11
- uuid: string;
12
- title: string;
13
- is_done: boolean;
14
- type: string;
15
- created_at: string;
16
- updated_at: string;
17
- };
18
- export type TodoEntityRecord = EntityRecord<TodoEntityFields>;
19
- export default TodoEntity;
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,223 +0,0 @@
1
- import { List, Map } from 'immutable';
2
- /** A validation function that returns an error string or a falsy value when valid. */
3
- export type Validator = (value: unknown, options: Partial<ValidateOptions>) => string | false | null | undefined;
4
- /** Options passed to each validator function during field validation. */
5
- export interface ValidateOptions {
6
- /** The Field instance being validated. */
7
- field: any;
8
- /** The key name of the field within the entity. */
9
- fieldName?: string;
10
- /** The full entity record being validated. */
11
- record?: Map<string, unknown>;
12
- /** Field name for nested lookups. */
13
- name?: string;
14
- /** Override validators for this validation pass. */
15
- validators?: Validator[] | ((defaults: Validator[]) => Validator[]);
16
- [key: string]: unknown;
17
- }
18
- /** An entity-level cleaner that transforms a record before submission. */
19
- export type EntityCleaner = (record: Map<string, unknown>, options: EntityCleanOptions) => Map<string, unknown>;
20
- /** Options passed to entity-level cleaners. */
21
- export interface EntityCleanOptions {
22
- /** The Entity class running the cleaner. */
23
- entity?: any;
24
- [key: string]: unknown;
25
- }
26
- /** A field-level cleaner that transforms a single field value. */
27
- export type FieldCleaner = (value: unknown, options: FieldCleanOptions) => unknown;
28
- /** Options passed to field-level cleaners. */
29
- export interface FieldCleanOptions {
30
- /** The Field instance running the cleaner. */
31
- field?: any;
32
- [key: string]: unknown;
33
- }
34
- /** Options accepted by the `Field` base class constructor. */
35
- export interface FieldOptions {
36
- /** If true, the field is not required (skips isRequired validator). */
37
- blank?: boolean;
38
- /** Field-level cleaners applied before validation. */
39
- cleaners?: FieldCleaner[];
40
- /** If true, the field holds a List of values rather than a single value. */
41
- many?: boolean;
42
- /** Custom validators, or a function that receives defaults and returns validators. */
43
- validators?: Validator[] | ((defaults: Validator[]) => Validator[]);
44
- /** Immutable List of selectable options for enum/select fields. */
45
- options?: List<unknown>;
46
- /** Faker.js path (e.g. `'name.firstName'`) or `'index'` for mock data generation. */
47
- mock?: string;
48
- /** Extra arguments passed to the faker mock function. */
49
- mockConfigs?: unknown[];
50
- /** Default value, or a function `({ data }) => value` for computed defaults. */
51
- default?: unknown | ((context: {
52
- data: unknown;
53
- }) => unknown);
54
- /** If true, the field is excluded from `toData()` serialisation. */
55
- local?: boolean;
56
- /** Widget type hint (e.g. `'char'`, `'boolean'`, `'date'`, `'entity'`). */
57
- type?: string;
58
- /** Allow extra properties from subclasses. */
59
- [key: string]: unknown;
60
- }
61
- /** Options for EntityField constructor. Requires an `entity` class reference. */
62
- export interface EntityFieldOptions extends FieldOptions {
63
- /** The Entity class this field references. */
64
- entity: any;
65
- /** Whether this is a nested (inline) relationship. Defaults to true. */
66
- nested?: boolean;
67
- }
68
- /** Options for DateField constructor. */
69
- export interface DateFieldOptions extends FieldOptions {
70
- /** Whether the field allows a time component. */
71
- allowTime?: boolean;
72
- /** Moment.js format string (e.g. `'YYYY-MM-DD'`). */
73
- dateFormat?: string;
74
- }
75
- /** Static paths configuration on an Entity class. */
76
- export interface EntityPaths {
77
- /** Base URL for API requests (e.g. `'/api/items/'`). */
78
- apiBase?: string;
79
- /** Base URL for frontend routes (e.g. `'/items/'`). */
80
- urlBase?: string;
81
- [key: string]: string | undefined;
82
- }
83
- /**
84
- * A utility type to assist in debugging complex generic types.
85
- *
86
- * WIP
87
- *
88
- * ```ts
89
- * type User = Typed{
90
- * // ...complex type definition
91
- * };
92
- *
93
- * type Debug =
94
- *
95
- * // { name: string; age: number; }
96
- * ```
97
- *
98
- * @link [Matt Pocock: 6 TypeScript tips..](https://www.youtube.com/watch?v=lraHlXpuhKs&t=420s)
99
- */
100
- export type Prettify<T> = {
101
- [K in keyof T]: T[K];
102
- } & {};
103
- /**
104
- * A type-safe wrapper around Immutable.js `Map`.
105
- *
106
- * Provides typed overloads for common Map operations so IDE
107
- * autocompletion and type-checking work against the declared field
108
- * names and value types in `T`.
109
- *
110
- * @example
111
- * ```ts
112
- * type MyFields = {
113
- * uuid: string;
114
- * title: string;
115
- * is_done: boolean;
116
- * nested: TypedMap<{
117
- * foo: string;
118
- * }>;
119
- * };
120
- *
121
- * const record: TypedMap<MyFields> = Map({
122
- * uuid: '123',
123
- * title: 'Todo 1',
124
- * is_done: false,
125
- * nested: Map({
126
- * foo: 'bar',
127
- * }),
128
- * });
129
- *
130
- * record.get('title'); // string
131
- * record.get('is_done'); // boolean
132
- * record.set('title', 'New'); // TypedMap<MyFields>
133
- * // ^ autocompleted and type-checked
134
- * const obj = record.toJS(); // { uuid: string, title: string, is_done: boolean }
135
- * ```
136
- *
137
- * ### Methods not typed
138
- *
139
- * - Deep path operations (getIn, setIn, deleteIn, updateIn)
140
- * these require recursive type utilities that are fragile
141
- * and complex; the base Map signatures work fine for path-based access.
142
- * - Iteration methods (filter, map, filterNot, flatMap)
143
- * these transform the map's type, so overriding them to return this
144
- * would be incorrect. The base Map types handle them adequately.
145
- *
146
- * @see https://stackoverflow.com/questions/43607652/typescript-immutable-proper-way-of-extending-immutable-map-type
147
- * @see https://stackoverflow.com/questions/46284131/typescript-and-immutable-js-interface
148
- */
149
- export interface TypedMap<T> extends Map<string, unknown> {
150
- get<K extends keyof T & string>(key: K): T[K];
151
- get<K extends keyof T & string>(key: K, notSetValue: T[K]): T[K];
152
- /**
153
- * @deprecated prefer `get` instead, for robust type-checking
154
- *
155
- * ```ts
156
- * record.getIn(['nested', 'foo']) // ❌ return type: unknown
157
- * // ^ only the first key is checked
158
- *
159
- * record.get('nested')?.get('foo') // ✅ return type: string
160
- * // ^ each key is checked
161
- *
162
- * record.get('nested')?.get('foo') ?? null
163
- * // ^ ^
164
- * // ensure you use optional chaining and nullish coalescing for safety!
165
- * ```
166
- */
167
- getIn<K extends keyof T & string>(keyArray: [K, ...(string | number)[]], notSetValue?: unknown): unknown;
168
- has(key: keyof T & string): boolean;
169
- set<K extends keyof T & string>(key: K, value: T[K]): this;
170
- /**
171
- * @deprecated prefer `set` instead, for robust type-checking
172
- *
173
- * ```ts
174
- * record.setIn(['nested', 'foo'], 'bar') // ❌ keys are not checked
175
- * record.set('nested').set('foo', 'bar') // ✅ each key is checked
176
- * ```
177
- */
178
- setIn(keyArray: unknown[], value: unknown): this;
179
- delete(key: keyof T & string): this;
180
- remove(key: keyof T & string): this;
181
- update<K extends keyof T & string>(key: K, updater: (value: T[K]) => T[K]): this;
182
- update<K extends keyof T & string>(key: K, notSetValue: T[K], updater: (value: T[K]) => T[K]): this;
183
- update<R>(updater: (value: this) => R): R;
184
- merge(...collections: Array<Partial<T>>): this;
185
- merge<KC, VC>(...collections: Array<Iterable<[KC, VC]>>): Map<string | KC, unknown>;
186
- merge<C>(...collections: Array<{
187
- [key: string]: C;
188
- }>): Map<string, unknown>;
189
- mergeWith(merger: (oldVal: unknown, newVal: unknown, key: string) => unknown, ...collections: Array<Partial<T>>): this;
190
- mergeDeep(...collections: Array<Partial<T>>): this;
191
- mergeDeepWith(merger: (oldVal: unknown, newVal: unknown, key: unknown) => unknown, ...collections: Array<Partial<T>>): this;
192
- /**
193
- * Deep conversion — recursively converts nested immutable
194
- * collections to plain JS objects / arrays.
195
- *
196
- * FIXME this type is not actually recursive
197
- */
198
- toJS(): {
199
- [K in keyof T]: T[K];
200
- };
201
- /**
202
- * Shallow conversion — only unwraps the top-level Map.
203
- * Nested immutable values stay as-is. This is the method
204
- * `JSON.stringify()` calls under the hood.
205
- *
206
- * For flat structures the return type matches `toJS()`;
207
- * the difference is only observable when `T` contains
208
- * nested immutable collections.
209
- */
210
- toJSON(): {
211
- [K in keyof T]: T[K];
212
- };
213
- /** Shallow conversion to a plain object (same as `toJSON` for Maps). */
214
- toObject(): {
215
- [K in keyof T]: T[K];
216
- };
217
- withMutations(mutator: (mutable: this) => void): this;
218
- }
219
- export interface EntityRecord<T> extends TypedMap<T> {
220
- }
221
- export type EntityFields<T> = {
222
- [FieldName in keyof T]: unknown;
223
- };
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
package/dist/legacy.js DELETED
@@ -1,30 +0,0 @@
1
- /*
2
- Legacy configuration: this file is copied into each package dist folder in the
3
- production build step, for the purpose of selecting the appropriate bundle
4
- according to the current NODE_ENV.
5
-
6
- It's only used in legacy environments which don't support the package.json
7
- `exports` field (node <12). In this case, the `main` field will be used, which
8
- references this file.
9
-
10
- > If both "exports" and "main" are defined, the "exports" field takes precedence
11
- > over "main".
12
- https://nodejs.org/docs/latest-v18.x/api/packages.html#conditional-exports
13
- https://nodejs.org/docs/latest-v12.x/api/packages.html#packages_conditional_exports
14
-
15
- Note(ptim): I'm not confident that the build in 0.6.2 works correctly
16
- regardless, as importing this file in a project of `type: module` fails with:
17
-
18
- > RollupError: src/entities/Todo.ts (1:9): "Entity" is not exported by
19
- > "../burnsred-entity-library/packages/entity/dist/index.js", imported by
20
- > "src/entities/Todo.ts". file:
21
- > /source/burnsred-application-frontend-skeleton/src/entities/Todo.ts:1:9 1:
22
- > import { Entity, Fields } from '@burnsred/entity';
23
- > ^
24
- */
25
- module.exports =
26
- process.env.NODE_ENV === 'production'
27
- ? // eslint-disable-next-line import/no-unresolved
28
- require('./production.js')
29
- : // eslint-disable-next-line import/no-unresolved
30
- require('./development.js');
@@ -1 +0,0 @@
1
- import"core-js/modules/es6.regexp.replace";import"lodash/isString";import t from"lodash/isFunction";import{List as e,Map as n,fromJS as r,isImmutable as i}from"immutable";import"core-js/modules/es6.regexp.flags";import"core-js/modules/es6.regexp.to-string";import"core-js/modules/es6.object.assign";import"core-js/modules/es6.function.name";import o from"moment";import"core-js/modules/es6.array.find";import"core-js/modules/web.dom.iterable";import"core-js/modules/es6.array.iterator";import"core-js/modules/es7.object.values";import a from"lodash/range";import u from"lodash/keyBy";import l from"lodash/get";import s from"lodash/sample";import c from"lodash/sampleSize";import f from"lodash/mapValues";import d from"lodash/flowRight";import"core-js/modules/es6.number.constructor";import"core-js/modules/es6.number.is-nan";import v from"query-string";var h=Object.freeze({removeMultiSpace:function(t){return t.replace(/\s\s+/g," ")},sliceToMaxLength:function(t,e){var n=e.field;return n.maxLength?t.slice(0,n.maxLength):t}}),y=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.field.entity.validate(t,e);return!!n&&n.size>0&&n},m=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.field.isBlank(t,e)&&"May not be blank"};function g(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function p(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function k(t,e,n){return e&&p(t.prototype,e),n&&p(t,n),t}function b(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function w(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable}))),r.forEach(function(e){b(t,e,n[e])})}return t}function j(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&F(t,e)}function O(t){return(O=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function F(t,e){return(F=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function I(t,e){return!e||"object"!=typeof e&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function S(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e<t.length;e++)n[e]=t[e];return n}}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}var A=function(t){return function(r,i){var o=r.map(function(n){return e(t).map(function(t){return t(n,i)}).filter(function(t){return t})});return o.some(function(t){return t.size>0})&&n({errors:o,list:!0,message:"Invalid list"})}},T=Object.freeze({allowBlank:function(){return!1},entityValid:y,isRequired:m,isRequiredIf:function(t){return function(e,n){return t(w({value:e},n))&&m(e,n)}},list:A,mayNotBeBlank:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.flag&&e.field.flags[e.flag],r=!e.field.blank&&m(t,e);if(!n)return r;var i=n(t,e);return r?i&&r:i&&"May not be blank"}}),x=function(){function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};g(this,o);var n={blank:!1,cleaners:[],many:!1,validators:e.blank?[]:[m]};Object.assign(this,n,e,{validators:t(e.validators)?e.validators(n.validators):e.validators||n.validators})}return k(o,[{key:"clean",value:function(t){var e=w({},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{field:this});return this.cleaners.reduce(function(t,n){return n(t,e)},t)}},{key:"dataToValue",value:function(t){return r(t)}},{key:"default",value:function(){return this.many?e():null}},{key:"getErrors",value:function(t){return t}},{key:"getErrorsArray",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.filter(function(t){return n.isMap(t)&&t.get("list")}).flatMap(function(t){return t.getIn(["errors",e.index])})}},{key:"getField",value:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).name?null:this}},{key:"getId",value:function(){}},{key:"getKey",value:function(t){return this.toString(t)}},{key:"getOptions",value:function(){return this.options||e()}},{key:"getValue",value:function(t){return(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).name?null:t}},{key:"isBlank",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null===t||(this.many?0===t.size:""===t)}},{key:"toData",value:function(t){return i(t)?t.toJS():t}},{key:"toParams",value:function(t){return t&&t.toString()||""}},{key:"toString",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null===t?"":t.toString()}},{key:"validate",value:function(n){var r=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=t(i.validators)?i.validators(this.validators):i.validators||this.validators;return e(o).map(function(t){return t(n,w({},i,{field:r}))}).filter(function(t){return t})}}]),o}(),E=function(t){function e(){return g(this,e),I(this,O(e).apply(this,arguments))}return j(e,x),e}(),P=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return g(this,e),I(this,O(e).call(this,w({type:"boolean"},t)))}return j(e,E),e}(),M=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return g(this,n),I(this,O(n).call(this,w({type:"char"},t)))}return j(n,E),k(n,[{key:"default",value:function(){return this.many?e():""}}]),n}(),D=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return g(this,e),I(this,O(e).call(this,w({allowTime:!1,dateFormat:"YYYY-MM-DD",type:"date"},t)))}return j(e,E),k(e,[{key:"dataToValue",value:function(t){return t&&o(t)}},{key:"toData",value:function(t){return t&&t.format(this.dateFormat)}},{key:"toParams",value:function(t){return t&&t.format(this.dateFormat)||""}},{key:"toString",value:function(t){return t&&t.format(this.dateFormat)||""}}]),e}(),z=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return g(this,e),I(this,O(e).call(this,w({dateFormat:"YYYY-MM-DD HH:mm",allowTime:!0},t)))}return j(e,D),e}(),_=function(r){function i(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};g(this,i);var n=e.many?[A([y])]:[y];return I(this,O(i).call(this,Object.assign({nested:!0,type:"entity"},e,{validators:function(r){return t(e.validators)?e.validators(r.concat(n)):e.validators||r.concat(n)}})))}return j(i,E),k(i,[{key:"dataToValue",value:function(t){return this.entity.dataToRecord(t)}},{key:"default",value:function(){return this.many?e():this.blank?null:this.entity.dataToRecord({})}},{key:"getErrors",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return r.name?t.filter(function(t){return n.isMap(t)&&t.get("detail")}).flatMap(function(t){return n.isMap(t.getIn(["errors",r.name]))?e([t.getIn(["errors",r.name])]):t.getIn(["errors",r.name])}).filter(function(t){return t}):t}},{key:"getField",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t.name?this.entity.fields[t.name]:this}},{key:"getId",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getField(w({value:t},e)).entity.getId(this.getValue(t,e))}},{key:"getKey",value:function(t){return this.getId(t)}},{key:"getOptions",value:function(){return this.options||this.entity.options||e()}},{key:"getValue",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.name&&t?t.get(e.name):t}},{key:"isBlank",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null===t||(this.many?0===t.size:""===t)}},{key:"toData",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.entity.toData(t,e)}},{key:"valueToParam",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null===t?void 0:t.get(this.entity.idField)}},{key:"toParams",value:function(t,e){return this.getId(t,e)}},{key:"toString",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.entity.toString(t,e)}}]),i}(),V=function(e){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return g(this,n),I(this,O(n).call(this,t))}return j(n,E),k(n,[{key:"dataToValue",value:function(e){var n;return t(null!=(n=e)?n.toString:n)?e.toString():e}},{key:"default",value:function(){}}]),n}(),B=function(){function r(){g(this,r)}return k(r,null,[{key:"actionArrayDeleteAtIndex",value:function(t){var e=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).index,n=void 0===e?null:e;return t.delete(n)}},{key:"actionArrayMoveAtIndex",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.index,r=void 0===n?null:n,i=e.indexTo,o=void 0===i?null:i;return t.delete(r).insert(o,t.get(r))}},{key:"actionReset",value:function(t){return(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).valueInitial||this.dataToRecord(b({},this.idField,t.get(this.idField)))}},{key:"clean",value:function(t){var e=w({},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{entity:this});return this.cleaners.reduce(function(t,n){return n(t,e)},t)}},{key:"dataToRecord",value:function(){var r=this,i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,o=n(i).filter(function(t,e){return e in r.fields}).filterNot(function(t){return void 0===t}).map(function(t,n){return e.isList(t)||Array.isArray(t)?e(t).map(function(t){return r.fields[n].dataToValue(t,{data:i})}):r.fields[n].dataToValue(t,{data:i})});return i&&n(this.fields).filter(function(t,e){return void 0===i[e]}).map(function(e){return t(e.default)?e.default({data:i}):e.default}).merge(o)}},{key:"getEntityField",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new _(w({entity:this},t))}},{key:"getId",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null===t?void 0:t.get(this.idField)}},{key:"getPaths",value:function(){return this.paths}},{key:"getSize",value:function(){return 0}},{key:"isEntity",value:function(t){return!!t&&t.prototype instanceof r}},{key:"isEntityDescendant",value:function(t){return!!t&&t.prototype instanceof this}},{key:"isValid",value:function(t,e){return 0===this.validate(t,e).size}},{key:"isValidFromErrors",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.name?e.name.some(function(e){return t.filter(function(t){return n.isMap(t)&&t.get("detail")}).flatMap(function(t){return t.getIn(["errors",e])}).filter(function(t){return t}).size>0}):!t||0===t.size}},{key:"mock",value:function(t,e,n){var r=this;return d([function(t){return r.toData(t)},function(t){return r.dataToRecord(t)},function(r){return w({},f(r,function(n){return n instanceof _&&!n.blank&&n.entity.store?n.many?c(Object.values(n.entity.store)):s(Object.values(n.entity.store)):n.mock&&("index"===n.mock?e:l(t,n.mock).apply(void 0,S(n.mockConfigs||[])))}),n)}])(this.fields)}},{key:"mockMany",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return u(a(n.size).map(function(n){return e.mock(t,n)}),this.idField)}},{key:"toData",value:function(t){var n=this;return t&&t.filter(function(t,e){return e in n.fields}).filterNot(function(t,e){return n.fields[e].local}).map(function(r,i){return e.isList(r)?r.map(function(e){return n.fields[i].toData(e,{record:t})}).toArray():n.fields[i].toData(r,{record:t})}).toObject()}},{key:"toString",value:function(t){return t&&t.get(this.idField)||""}},{key:"validate",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t)return t;var r=n(this.fields).filter(function(t,n){return!e.fields||e.fields[n]}).map(function(n,r){return n.validate(t.get(r),w({},e,{fieldName:r,record:t,validators:e.fields&&e.fields[r]}))}).filterNot(function(t){return 0===t.size});return 0===r.size?null:n({detail:!0,message:"Invalid Entity",errors:r})}}]),r}();b(B,"cleaners",[]),b(B,"idField","uuid"),b(B,"fields",{uuid:new V({blank:!0,mock:"random.uuid"})}),b(B,"paths",{});var N=function(t){function e(){return g(this,e),I(this,O(e).apply(this,arguments))}return j(e,B),e}();b(N,"fields",{messages:new E,defaultMessage:new M,description:new M,id:new M,uuid:new V({mock:"random.uuid"})});var R=function(t){function e(){return g(this,e),I(this,O(e).apply(this,arguments))}return j(e,B),k(e,null,[{key:"toString",value:function(t){return t&&t.get("label")||""}}]),e}();b(R,"idField","value"),b(R,"fields",{disabled:new P({default:!1}),hidden:new P({default:!1}),label:new M,locale:new _({blank:!0,entity:N}),value:new M});var L=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return g(this,n),I(this,O(n).call(this,w({entity:R,type:"enum"},t)))}return j(n,_),k(n,[{key:"dataToValue",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return e&&this.getOptions().find(function(n){return t.entity.getId(n)===e})}},{key:"default",value:function(){return this.many?e():null}},{key:"isEnumActive",value:function(t,e){var n=e.name;return this.many?t.some(function(t){return t.get("value")===n}):!!t&&t.get("value")===n}},{key:"valueToData",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return t&&this.entity.getId(t)}},{key:"valueToParam",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null===t?void 0:this.entity.getId(t)}}]),n}(),Y=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return g(this,e),I(this,O(e).call(this,w({type:"number"},t)))}return j(e,E),e}(),J=function(t){function e(){return g(this,e),I(this,O(e).apply(this,arguments))}return j(e,Y),k(e,[{key:"dataToValue",value:function(t){var e=parseInt(t,10);return Number.isNaN(e)?null:e}}]),e}(),U=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return g(this,e),I(this,O(e).call(this,w({type:"text"},t)))}return j(e,M),e}(),q=Object.freeze({Field:x,AnyField:E,BooleanField:P,CharField:M,DateField:D,DateTimeField:z,EntityField:_,EnumField:L,IdField:V,IntegerField:J,NumberField:Y,TextField:U}),C=function(t){function r(){return g(this,r),I(this,O(r).apply(this,arguments))}return j(r,B),k(r,null,[{key:"toParams",value:function(t){var r=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t?t.filter(function(t,e){return e in r.fields}).filterNot(function(t,e){return r.fields[e].local}).filterNot(function(t){return void 0===t}).map(function(o,a){return e.isList(o)?o.map(function(e){return r.fields[a].toParams(e,w({record:t},i))}).reduce(function(t,e){return t.mergeWith(function(t,e){return t?"".concat(t,",").concat(e):e},n.isMap(e)?e:n(b({},a,e)))},n()):r.fields[a].toParams(o,w({record:t},i))}).flatten():n()}}]),r}();b(C,"fields",{page:new J({default:1}),page_size:new J({default:20}),uuid:new V({blank:!0,mock:"random.uuid"})});var H=function(t){function e(){return g(this,e),I(this,O(e).apply(this,arguments))}return j(e,B),k(e,null,[{key:"actionArchive",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.duck.actions.save(t,w({action:"archive",method:"post"},e))}},{key:"actionArrayDeleteAtIndexOrdered",value:function(t,e){return this.actionArrayDeleteAtIndex(t,e).map(function(t,e){return t.set("order",e)})}},{key:"actionArrayMoveAtIndexOrdered",value:function(t,e){return this.actionArrayMoveAtIndex(t,e).map(function(t,e){return t.set("order",e)})}},{key:"actionSave",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.duck.actions.save(t,w({invalidateList:!0},e))}},{key:"toLink",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=(e.params||n()).filterNot(function(t){return void 0===t}),i=this.getPaths(e).urlBase;return"".concat(i).concat(this.getId(t,e),"/?").concat(v.stringify(r.toJS()))}},{key:"toString",value:function(t){return t&&t.get("title")||""}},{key:"toStringOrdered",value:function(t){return t?"".concat(t.get("order")+1,". ").concat(this.toString(t)):""}},{key:"toUrl",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=(e.params||n()).remove("page").remove("page_size").filterNot(function(t){return void 0===t}),i=this.getPaths(e).urlBase;return"".concat(e.settings.BASE_URL).concat(i).concat(this.getId(t,e),"/?").concat(v.stringify(r.toJS()))}},{key:"toUrlExport",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.params?t.params.remove("page").remove("page_size").filterNot(function(t){return void 0===t}):n(),r=this.getPaths(t).apiBase;return"".concat(t.settings.BASE_API_URL).concat(r,"?").concat(v.stringify(e.toJS()),"&format=xlsx")}}]),e}();b(H,"fields",{description:new U({blank:!0}),is_archived:new P({default:!1}),locale:new _({blank:!0,entity:N}),order:new J({mock:"index"}),title:new M({mock:"lorem.sentence"}),title_short:new M({blank:!0}),uuid:new V({blank:!0,mock:"random.uuid"})}),b(H,"paths",{urlBase:""});export{h as cleaners,T as validators,q as Fields,B as Entity,R as EntityEnum,C as EntityFilter,N as EntityLocale,H as EntityTitle};