@vaadin/hilla-lit-form 24.5.0-alpha1 → 24.5.0-alpha2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"BinderNode.d.ts","sourceRoot":"","sources":["src/BinderNode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BinderNode.d.ts","sourceRoot":"","sources":["src/BinderNode.ts"],"names":[],"mappings":"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"}
package/BinderNode.js CHANGED
@@ -175,13 +175,9 @@ class BinderNode extends EventTarget {
175
175
  if (!this.parent) {
176
176
  return void 0;
177
177
  }
178
- let { value } = this.parent;
179
- if (value === void 0) {
180
- this.parent.initializeValue(true);
181
- ({ value } = this.parent);
182
- }
178
+ this.initializeValue();
183
179
  const key = this.model[_key];
184
- return value[key];
180
+ return this.parent.value[key];
185
181
  }
186
182
  set value(value) {
187
183
  this.initializeValue();
package/BinderNode.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["src/BinderNode.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\n/*\n * Copyright 2000-2020 Vaadin Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n// TODO: Fix dependency cycle\n\nimport type { BinderRoot } from './BinderRoot.js';\nimport {\n _createEmptyItemValue,\n _key,\n _parent,\n _validators,\n AbstractModel,\n type ArrayItemModel,\n ArrayModel,\n getObjectModelOwnAndParentGetters,\n ObjectModel,\n type Value,\n} from './Models.js';\nimport type { ClassStaticProperties } from './types.js';\nimport type { Validator, ValueError } from './Validation.js';\nimport { ValidityStateValidator } from './Validators.js';\nimport { _validity } from './Validity.js';\n\nexport const _updateValidation = Symbol('updateValidation');\nexport const _update = Symbol('update');\nexport const _setErrorsWithDescendants = Symbol('setErrorsWithDescendants');\nexport const _clearValidation = Symbol('clearValidation');\n\nconst nodes = new WeakMap<AbstractModel, BinderNode>();\n\nexport function getBinderNode<M extends AbstractModel>(model: M): BinderNode<M> {\n let node = nodes.get(model);\n\n if (!node) {\n node = new BinderNode(model);\n nodes.set(model, node);\n }\n\n return node as BinderNode<M>;\n}\n\nfunction getErrorPropertyName(valueError: ValueError): string {\n return typeof valueError.property === 'string' ? valueError.property : getBinderNode(valueError.property).name;\n}\n\nfunction updateObjectOrArrayKey<M extends AbstractModel>(\n model: M,\n value: Value<M>,\n key: keyof any,\n keyValue: unknown,\n): Value<M> {\n if (model instanceof ObjectModel) {\n // Value contained in object - replace object in parent\n return {\n ...(value as Record<never, never> & Value<M>),\n [key]: keyValue,\n };\n }\n\n if (keyValue === undefined) {\n throw new TypeError('Unexpected undefined value');\n }\n\n if (model instanceof ArrayModel) {\n // Value contained in array - replace array in parent\n const array = (value as unknown[]).slice();\n array[key as number] = keyValue;\n return array as Value<M>;\n }\n\n throw new TypeError(`Unknown model type ${(model as AbstractModel).constructor.name}`);\n}\n\nexport const CHANGED = new Event('binder-node-changed');\n\nclass NotArrayModelError extends Error {\n constructor() {\n super('The model does not represent array');\n }\n}\n\nclass NotArrayItemModelError extends Error {\n constructor() {\n super('The model does not represent array item');\n }\n}\n\ndeclare class ArrayItemBinderNode<M extends AbstractModel> extends BinderNode<M> {\n // @ts-expect-error: re-defining the parent getter.\n declare readonly parent: BinderNode<ArrayModel<M>>;\n}\n\nconst defaultArrayItemCache = new WeakMap<BinderNode, unknown>();\n\n/**\n * The BinderNode\\<M\\> class provides the form binding related APIs\n * with respect to a particular model instance.\n *\n * Structurally, model instances form a tree, in which the object\n * and array models have child nodes of field and array item model\n * instances.\n */\nexport class BinderNode<M extends AbstractModel = AbstractModel> extends EventTarget {\n declare readonly ['constructor']: ClassStaticProperties<typeof BinderNode<M>>;\n readonly model: M;\n /**\n * The validity state read from the bound element, if any. Represents the\n * HTML element internal validation.\n *\n * For elements with `validity.valid === false`, the value in the\n * bound element is considered as invalid.\n */\n [_validity]?: ValidityState;\n #ownErrors?: ReadonlyArray<ValueError<Value<M>>>;\n #validators: ReadonlyArray<Validator<Value<M>>>;\n readonly #validityStateValidator: ValidityStateValidator<Value<M>>;\n #visited = false;\n\n constructor(model: M) {\n super();\n this.model = model;\n nodes.set(model, this);\n this.#validityStateValidator = new ValidityStateValidator<Value<M>>();\n this.#validators = model[_validators];\n\n // Workaround for children initialization with private props\n if (this.constructor === BinderNode) {\n this.initializeValue();\n }\n }\n\n /**\n * The binder for the top-level model.\n */\n get binder(): BinderRoot {\n const binder = this.parent?.binder;\n\n if (!binder) {\n throw new TypeError('BinderNode is detached');\n }\n\n return binder;\n }\n\n /**\n * The default value related to the model\n */\n get defaultValue(): Value<M> | undefined {\n const key = this.model[_key];\n const parentDefaultValue = this.parent!.defaultValue as { readonly [key in typeof key]?: Value<M> };\n\n if (this.#isArrayItem() && !(key in parentDefaultValue)) {\n if (defaultArrayItemCache.has(this.parent)) {\n return defaultArrayItemCache.get(this.parent) as Value<M>;\n }\n\n const value = this.model.constructor.createEmptyValue();\n defaultArrayItemCache.set(this.parent, value);\n return value as Value<M>;\n }\n\n return parentDefaultValue[key];\n }\n\n /**\n * True if the current value is different from the defaultValue.\n */\n get dirty(): boolean {\n return this.value !== this.defaultValue;\n }\n\n /**\n * The combined array of all errors for this node\u2019s model and all its nested\n * models\n */\n get errors(): readonly ValueError[] {\n return [...Array.from(this.#getChildBinderNodes(), (node) => node.errors).flat(), ...this.ownErrors];\n }\n\n /**\n * Indicates if there is any error for the node's model.\n */\n get invalid(): boolean {\n return this.errors.length > 0;\n }\n\n /**\n * The name generated from the model structure, used to set the name\n * attribute on the field components.\n */\n get name(): string {\n let { model }: { model: AbstractModel } = this;\n let name = '';\n\n while (model[_parent] instanceof AbstractModel) {\n name = `${String(model[_key])}${name ? `.${name}` : ''}`;\n model = model[_parent];\n }\n\n return name;\n }\n\n /**\n * The array of validation errors directly related with the model.\n */\n get ownErrors(): ReadonlyArray<ValueError<Value<M>>> {\n return this.#ownErrors ? this.#ownErrors : [];\n }\n\n /**\n * The parent node, if this binder node corresponds to a nested model,\n * otherwise undefined for the top-level binder.\n */\n get parent(): BinderNode | undefined {\n const modelParent = this.model[_parent];\n return modelParent instanceof AbstractModel ? getBinderNode(modelParent) : undefined;\n }\n\n /**\n * True if the value is required to be non-empty.\n */\n get required(): boolean {\n return this.#validators.some((validator) => validator.impliesRequired);\n }\n\n /**\n * The array of validators for the model. The default value is defined in the\n * model.\n */\n get validators(): ReadonlyArray<Validator<Value<M>>> {\n return this.#validators;\n }\n\n set validators(validators: ReadonlyArray<Validator<Value<M>>>) {\n this.#validators = validators;\n this.dispatchEvent(CHANGED);\n }\n\n /**\n * The current value related to the model\n */\n get value(): Value<M> | undefined {\n if (!this.parent) {\n return undefined;\n }\n\n let { value } = this.parent;\n\n if (value === undefined) {\n this.parent.initializeValue(true);\n ({ value } = this.parent);\n }\n\n const key = this.model[_key];\n\n // The value of parent in unknown, so we need to cast it.\n type ParentValue = { readonly [K in typeof key]: Value<M> };\n return (value as ParentValue)[key];\n }\n\n set value(value: Value<M> | undefined) {\n this.initializeValue();\n this.#setValueState(value, undefined);\n }\n\n /**\n * True if the bound field was ever focused and blurred by the user.\n */\n get visited(): boolean {\n return this.#visited;\n }\n\n set visited(v: boolean) {\n if (this.#visited !== v) {\n this.#visited = v;\n this[_updateValidation]().catch(() => {});\n this.dispatchEvent(CHANGED);\n }\n }\n\n /**\n * A helper method to add a validator\n *\n * @param validator - a validator\n */\n addValidator(validator: Validator<Value<M>>): void {\n this.validators = [...this.#validators, validator];\n this.dispatchEvent(CHANGED);\n }\n\n /**\n * Append an item to the array value.\n *\n * Requires the context model to be an array reference.\n *\n * @param item - optional new item value, an empty item is\n * appended if the argument is omitted\n */\n appendItem(item?: Value<ArrayItemModel<M>>): void {\n if (this.#isArray()) {\n const itemValueOrEmptyValue = item ?? this.model[_createEmptyItemValue]();\n const newValue = [...(this.value ?? []), itemValueOrEmptyValue];\n const newDefaultValue = [...(this.defaultValue ?? []), itemValueOrEmptyValue];\n this.#setValueState(newValue, newDefaultValue);\n } else {\n throw new NotArrayModelError();\n }\n }\n\n /**\n * Returns a binder node for the nested model instance.\n *\n * @param model - The nested model instance\n */\n for<N extends AbstractModel>(model: N): BinderNode<N> {\n const binderNode = getBinderNode(model);\n if (binderNode.binder !== this.binder) {\n throw new Error('Unknown binder');\n }\n\n return binderNode;\n }\n\n prependItem(item?: Value<ArrayItemModel<M>>): void {\n if (this.#isArray()) {\n const itemValueOrEmptyValue = item ?? this.model[_createEmptyItemValue]();\n const newValue = [itemValueOrEmptyValue, ...(this.value ?? [])];\n const newDefaultValue = [itemValueOrEmptyValue, ...(this.defaultValue ?? [])];\n this.#setValueState(newValue, newDefaultValue);\n } else {\n throw new NotArrayModelError();\n }\n }\n\n removeSelf(): void {\n if (this.#isArrayItem()) {\n const newValue = (this.parent.value ?? []).filter((_, i) => i !== this.model[_key]);\n const newDefaultValue = (this.parent.defaultValue ?? []).filter((_, i) => i !== this.model[_key]);\n this.parent.#setValueState(newValue, newDefaultValue);\n } else {\n throw new NotArrayItemModelError();\n }\n }\n\n /**\n * Runs all validation callbacks potentially affecting this\n * or any nested model. Returns the combined array of all\n * errors as in the errors property.\n */\n async validate(): Promise<readonly ValueError[]> {\n const errors = await Promise.all([\n ...this.#requestValidationOfDescendants(),\n ...this.#requestValidationWithAncestors(),\n ]).then((arr) => arr.flat());\n this[_setErrorsWithDescendants](errors.length ? errors : undefined);\n this[_update]();\n return errors;\n }\n\n protected [_clearValidation](): boolean {\n if (this.#visited) {\n this.#visited = false;\n this.dispatchEvent(CHANGED);\n }\n let needsUpdate = false;\n if (this.#ownErrors) {\n this.#ownErrors = undefined;\n needsUpdate = true;\n this.dispatchEvent(CHANGED);\n }\n if ([...this.#getChildBinderNodes()].filter((childBinderNode) => childBinderNode[_clearValidation]()).length > 0) {\n needsUpdate = true;\n }\n return needsUpdate;\n }\n\n protected [_setErrorsWithDescendants](errors?: readonly ValueError[]): void {\n const { name } = this;\n const ownErrors = errors\n ? (errors.filter((valueError) => getErrorPropertyName(valueError) === name) as ReadonlyArray<\n ValueError<Value<M>>\n >)\n : undefined;\n const relatedErrors = errors\n ? errors.filter((valueError) => getErrorPropertyName(valueError).startsWith(name))\n : undefined;\n this.#ownErrors = ownErrors;\n for (const childBinderNode of this.#getChildBinderNodes()) {\n childBinderNode[_setErrorsWithDescendants](relatedErrors);\n }\n this.dispatchEvent(CHANGED);\n }\n\n protected [_update](_?: Value<M>): void {\n if (this.parent) {\n this.parent[_update]();\n }\n }\n\n protected async [_updateValidation](): Promise<void> {\n if (this.#visited) {\n await this.validate();\n } else if (this.dirty || this.invalid) {\n await Promise.all(\n [...this.#getChildBinderNodes()].map(async (childBinderNode) => childBinderNode[_updateValidation]()),\n );\n }\n }\n\n *#getChildBinderNodes(): Generator<BinderNode, void, void> {\n if (this.value === undefined || this.defaultValue === undefined) {\n // Undefined value cannot have child properties and items.\n return;\n }\n\n if (this.#isObject()) {\n for (const [, getter] of getObjectModelOwnAndParentGetters(this.model)) {\n const childModel = getter.call(this.model);\n // We need to skip all non-initialised optional fields here in order\n // to prevent infinite recursion for circular references in the model.\n // Here we rely on presence of keys in `defaultValue` to detect all\n // initialised fields. The keys in `defaultValue` are defined for all\n // non-optional fields plus those optional fields whose values were\n // set from initial `binder.read()` or `binder.clear()` or by using a\n // binder node (e.g., form binding) for a nested field.\n if (childModel[_key] in (this.defaultValue as Record<never, never>)) {\n yield getBinderNode(childModel);\n }\n }\n } else if (this.#isArray()) {\n for (const childBinderNode of this.model) {\n yield childBinderNode;\n }\n }\n }\n\n #isArray(): this is BinderNode<ArrayModel> {\n return this.model instanceof ArrayModel;\n }\n\n #isArrayItem(): this is ArrayItemBinderNode<M> {\n return this.model[_parent] instanceof ArrayModel;\n }\n\n #isObject(): this is BinderNode<ObjectModel> {\n return this.model instanceof ObjectModel;\n }\n\n *#requestValidationOfDescendants(): Generator<Promise<readonly ValueError[]>, void, void> {\n for (const node of this.#getChildBinderNodes()) {\n yield* node.#runOwnValidators();\n yield* node.#requestValidationOfDescendants();\n }\n }\n\n *#requestValidationWithAncestors(): Generator<Promise<readonly ValueError[]>, void, void> {\n yield* this.#runOwnValidators();\n\n if (this.parent) {\n yield* this.parent.#requestValidationWithAncestors();\n }\n }\n\n *#runOwnValidators(): Generator<Promise<readonly ValueError[]>, void, void> {\n const hasInvalidState = this[_validity] && !this[_validity].valid;\n const hasBadInput = !!this[_validity]?.badInput;\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n if ((hasInvalidState && !hasBadInput) || !hasInvalidState) {\n for (const validator of this.#validators) {\n yield this.binder.requestValidation(this.model, validator);\n }\n }\n\n if (hasInvalidState) {\n yield this.binder.requestValidation(this.model, this.#validityStateValidator);\n }\n }\n\n initializeValue(forceInitialize = false): void {\n // First, make sure parents have value initialized\n if (\n this.parent &&\n (this.parent.value === undefined || (this.parent.defaultValue as Value<M> | undefined) === undefined)\n ) {\n this.parent.initializeValue(true);\n }\n\n const key = this.model[_key];\n let value: Value<M> | undefined = this.parent\n ? (this.parent.value as { [key in typeof key]: Value<M> })[this.model[_key]]\n : undefined;\n\n const defaultValue: Value<M> | undefined = this.parent\n ? (this.parent.defaultValue as { readonly [key in typeof key]: Value<M> })[this.model[_key]]\n : undefined;\n\n if (value === undefined) {\n // Initialize value if this is the root level node, or it is enforced\n if (forceInitialize || !this.parent) {\n value = this.model.constructor.createEmptyValue() as Value<M>;\n this.#setValueState(value, defaultValue === undefined ? value : defaultValue);\n } else if (\n this.parent.model instanceof ObjectModel &&\n !(key in ((this.parent.value || {}) as { [key in typeof key]?: Value<M> }))\n ) {\n this.#setValueState(undefined, defaultValue === undefined ? value : defaultValue);\n }\n }\n }\n\n #setValueState(value: Value<M> | undefined, defaultValue: Value<M> | undefined): void {\n const { parent } = this;\n if (parent) {\n const key = this.model[_key];\n const parentValue = updateObjectOrArrayKey(parent.model, parent.value, key, value);\n const keepPristine = value === defaultValue && parent.value === parent.defaultValue;\n if (keepPristine) {\n // Keep value and defaultValue equal, so that `dirty` stays false\n parent.#setValueState(parentValue, parentValue);\n } else if (defaultValue !== undefined) {\n // Update value and defaultValue at the same time with different content\n const parentDefaultValue = updateObjectOrArrayKey(parent.model, parent.defaultValue, key, defaultValue);\n parent.#setValueState(parentValue, parentDefaultValue);\n } else {\n parent.#setValueState(parentValue, undefined);\n }\n } else {\n // Root level model - update the binder root\n const binder = this as unknown as BinderRoot<M>;\n if (defaultValue !== undefined) {\n binder.defaultValue = defaultValue;\n }\n binder.value = value!;\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\n/*\n * Copyright 2000-2020 Vaadin Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n// TODO: Fix dependency cycle\n\nimport type { BinderRoot } from './BinderRoot.js';\nimport {\n _createEmptyItemValue,\n _key,\n _parent,\n _validators,\n AbstractModel,\n type ArrayItemModel,\n ArrayModel,\n getObjectModelOwnAndParentGetters,\n ObjectModel,\n type Value,\n} from './Models.js';\nimport type { ClassStaticProperties } from './types.js';\nimport type { Validator, ValueError } from './Validation.js';\nimport { ValidityStateValidator } from './Validators.js';\nimport { _validity } from './Validity.js';\n\nexport const _updateValidation = Symbol('updateValidation');\nexport const _update = Symbol('update');\nexport const _setErrorsWithDescendants = Symbol('setErrorsWithDescendants');\nexport const _clearValidation = Symbol('clearValidation');\n\nconst nodes = new WeakMap<AbstractModel, BinderNode>();\n\nexport function getBinderNode<M extends AbstractModel>(model: M): BinderNode<M> {\n let node = nodes.get(model);\n\n if (!node) {\n node = new BinderNode(model);\n nodes.set(model, node);\n }\n\n return node as BinderNode<M>;\n}\n\nfunction getErrorPropertyName(valueError: ValueError): string {\n return typeof valueError.property === 'string' ? valueError.property : getBinderNode(valueError.property).name;\n}\n\nfunction updateObjectOrArrayKey<M extends AbstractModel>(\n model: M,\n value: Value<M>,\n key: keyof any,\n keyValue: unknown,\n): Value<M> {\n if (model instanceof ObjectModel) {\n // Value contained in object - replace object in parent\n return {\n ...(value as Record<never, never> & Value<M>),\n [key]: keyValue,\n };\n }\n\n if (keyValue === undefined) {\n throw new TypeError('Unexpected undefined value');\n }\n\n if (model instanceof ArrayModel) {\n // Value contained in array - replace array in parent\n const array = (value as unknown[]).slice();\n array[key as number] = keyValue;\n return array as Value<M>;\n }\n\n throw new TypeError(`Unknown model type ${(model as AbstractModel).constructor.name}`);\n}\n\nexport const CHANGED = new Event('binder-node-changed');\n\nclass NotArrayModelError extends Error {\n constructor() {\n super('The model does not represent array');\n }\n}\n\nclass NotArrayItemModelError extends Error {\n constructor() {\n super('The model does not represent array item');\n }\n}\n\ndeclare class ArrayItemBinderNode<M extends AbstractModel> extends BinderNode<M> {\n // @ts-expect-error: re-defining the parent getter.\n declare readonly parent: BinderNode<ArrayModel<M>>;\n}\n\nconst defaultArrayItemCache = new WeakMap<BinderNode, unknown>();\n\n/**\n * The BinderNode\\<M\\> class provides the form binding related APIs\n * with respect to a particular model instance.\n *\n * Structurally, model instances form a tree, in which the object\n * and array models have child nodes of field and array item model\n * instances.\n */\nexport class BinderNode<M extends AbstractModel = AbstractModel> extends EventTarget {\n declare readonly ['constructor']: ClassStaticProperties<typeof BinderNode<M>>;\n readonly model: M;\n /**\n * The validity state read from the bound element, if any. Represents the\n * HTML element internal validation.\n *\n * For elements with `validity.valid === false`, the value in the\n * bound element is considered as invalid.\n */\n [_validity]?: ValidityState;\n #ownErrors?: ReadonlyArray<ValueError<Value<M>>>;\n #validators: ReadonlyArray<Validator<Value<M>>>;\n readonly #validityStateValidator: ValidityStateValidator<Value<M>>;\n #visited = false;\n\n constructor(model: M) {\n super();\n this.model = model;\n nodes.set(model, this);\n this.#validityStateValidator = new ValidityStateValidator<Value<M>>();\n this.#validators = model[_validators];\n\n // Workaround for children initialization with private props\n if (this.constructor === BinderNode) {\n this.initializeValue();\n }\n }\n\n /**\n * The binder for the top-level model.\n */\n get binder(): BinderRoot {\n const binder = this.parent?.binder;\n\n if (!binder) {\n throw new TypeError('BinderNode is detached');\n }\n\n return binder;\n }\n\n /**\n * The default value related to the model\n */\n get defaultValue(): Value<M> | undefined {\n const key = this.model[_key];\n const parentDefaultValue = this.parent!.defaultValue as { readonly [key in typeof key]?: Value<M> };\n\n if (this.#isArrayItem() && !(key in parentDefaultValue)) {\n if (defaultArrayItemCache.has(this.parent)) {\n return defaultArrayItemCache.get(this.parent) as Value<M>;\n }\n\n const value = this.model.constructor.createEmptyValue();\n defaultArrayItemCache.set(this.parent, value);\n return value as Value<M>;\n }\n\n return parentDefaultValue[key];\n }\n\n /**\n * True if the current value is different from the defaultValue.\n */\n get dirty(): boolean {\n return this.value !== this.defaultValue;\n }\n\n /**\n * The combined array of all errors for this node\u2019s model and all its nested\n * models\n */\n get errors(): readonly ValueError[] {\n return [...Array.from(this.#getChildBinderNodes(), (node) => node.errors).flat(), ...this.ownErrors];\n }\n\n /**\n * Indicates if there is any error for the node's model.\n */\n get invalid(): boolean {\n return this.errors.length > 0;\n }\n\n /**\n * The name generated from the model structure, used to set the name\n * attribute on the field components.\n */\n get name(): string {\n let { model }: { model: AbstractModel } = this;\n let name = '';\n\n while (model[_parent] instanceof AbstractModel) {\n name = `${String(model[_key])}${name ? `.${name}` : ''}`;\n model = model[_parent];\n }\n\n return name;\n }\n\n /**\n * The array of validation errors directly related with the model.\n */\n get ownErrors(): ReadonlyArray<ValueError<Value<M>>> {\n return this.#ownErrors ? this.#ownErrors : [];\n }\n\n /**\n * The parent node, if this binder node corresponds to a nested model,\n * otherwise undefined for the top-level binder.\n */\n get parent(): BinderNode | undefined {\n const modelParent = this.model[_parent];\n return modelParent instanceof AbstractModel ? getBinderNode(modelParent) : undefined;\n }\n\n /**\n * True if the value is required to be non-empty.\n */\n get required(): boolean {\n return this.#validators.some((validator) => validator.impliesRequired);\n }\n\n /**\n * The array of validators for the model. The default value is defined in the\n * model.\n */\n get validators(): ReadonlyArray<Validator<Value<M>>> {\n return this.#validators;\n }\n\n set validators(validators: ReadonlyArray<Validator<Value<M>>>) {\n this.#validators = validators;\n this.dispatchEvent(CHANGED);\n }\n\n /**\n * The current value related to the model\n */\n get value(): Value<M> | undefined {\n if (!this.parent) {\n return undefined;\n }\n\n this.initializeValue();\n\n const key = this.model[_key];\n\n // The value of parent in unknown, so we need to cast it.\n type ParentValue = { readonly [K in typeof key]: Value<M> };\n return (this.parent.value as ParentValue)[key];\n }\n\n set value(value: Value<M> | undefined) {\n this.initializeValue();\n this.#setValueState(value, undefined);\n }\n\n /**\n * True if the bound field was ever focused and blurred by the user.\n */\n get visited(): boolean {\n return this.#visited;\n }\n\n set visited(v: boolean) {\n if (this.#visited !== v) {\n this.#visited = v;\n this[_updateValidation]().catch(() => {});\n this.dispatchEvent(CHANGED);\n }\n }\n\n /**\n * A helper method to add a validator\n *\n * @param validator - a validator\n */\n addValidator(validator: Validator<Value<M>>): void {\n this.validators = [...this.#validators, validator];\n this.dispatchEvent(CHANGED);\n }\n\n /**\n * Append an item to the array value.\n *\n * Requires the context model to be an array reference.\n *\n * @param item - optional new item value, an empty item is\n * appended if the argument is omitted\n */\n appendItem(item?: Value<ArrayItemModel<M>>): void {\n if (this.#isArray()) {\n const itemValueOrEmptyValue = item ?? this.model[_createEmptyItemValue]();\n const newValue = [...(this.value ?? []), itemValueOrEmptyValue];\n const newDefaultValue = [...(this.defaultValue ?? []), itemValueOrEmptyValue];\n this.#setValueState(newValue, newDefaultValue);\n } else {\n throw new NotArrayModelError();\n }\n }\n\n /**\n * Returns a binder node for the nested model instance.\n *\n * @param model - The nested model instance\n */\n for<N extends AbstractModel>(model: N): BinderNode<N> {\n const binderNode = getBinderNode(model);\n if (binderNode.binder !== this.binder) {\n throw new Error('Unknown binder');\n }\n\n return binderNode;\n }\n\n prependItem(item?: Value<ArrayItemModel<M>>): void {\n if (this.#isArray()) {\n const itemValueOrEmptyValue = item ?? this.model[_createEmptyItemValue]();\n const newValue = [itemValueOrEmptyValue, ...(this.value ?? [])];\n const newDefaultValue = [itemValueOrEmptyValue, ...(this.defaultValue ?? [])];\n this.#setValueState(newValue, newDefaultValue);\n } else {\n throw new NotArrayModelError();\n }\n }\n\n removeSelf(): void {\n if (this.#isArrayItem()) {\n const newValue = (this.parent.value ?? []).filter((_, i) => i !== this.model[_key]);\n const newDefaultValue = (this.parent.defaultValue ?? []).filter((_, i) => i !== this.model[_key]);\n this.parent.#setValueState(newValue, newDefaultValue);\n } else {\n throw new NotArrayItemModelError();\n }\n }\n\n /**\n * Runs all validation callbacks potentially affecting this\n * or any nested model. Returns the combined array of all\n * errors as in the errors property.\n */\n async validate(): Promise<readonly ValueError[]> {\n const errors = await Promise.all([\n ...this.#requestValidationOfDescendants(),\n ...this.#requestValidationWithAncestors(),\n ]).then((arr) => arr.flat());\n this[_setErrorsWithDescendants](errors.length ? errors : undefined);\n this[_update]();\n return errors;\n }\n\n protected [_clearValidation](): boolean {\n if (this.#visited) {\n this.#visited = false;\n this.dispatchEvent(CHANGED);\n }\n let needsUpdate = false;\n if (this.#ownErrors) {\n this.#ownErrors = undefined;\n needsUpdate = true;\n this.dispatchEvent(CHANGED);\n }\n if ([...this.#getChildBinderNodes()].filter((childBinderNode) => childBinderNode[_clearValidation]()).length > 0) {\n needsUpdate = true;\n }\n return needsUpdate;\n }\n\n protected [_setErrorsWithDescendants](errors?: readonly ValueError[]): void {\n const { name } = this;\n const ownErrors = errors\n ? (errors.filter((valueError) => getErrorPropertyName(valueError) === name) as ReadonlyArray<\n ValueError<Value<M>>\n >)\n : undefined;\n const relatedErrors = errors\n ? errors.filter((valueError) => getErrorPropertyName(valueError).startsWith(name))\n : undefined;\n this.#ownErrors = ownErrors;\n for (const childBinderNode of this.#getChildBinderNodes()) {\n childBinderNode[_setErrorsWithDescendants](relatedErrors);\n }\n this.dispatchEvent(CHANGED);\n }\n\n protected [_update](_?: Value<M>): void {\n if (this.parent) {\n this.parent[_update]();\n }\n }\n\n protected async [_updateValidation](): Promise<void> {\n if (this.#visited) {\n await this.validate();\n } else if (this.dirty || this.invalid) {\n await Promise.all(\n [...this.#getChildBinderNodes()].map(async (childBinderNode) => childBinderNode[_updateValidation]()),\n );\n }\n }\n\n *#getChildBinderNodes(): Generator<BinderNode, void, void> {\n if (this.value === undefined || this.defaultValue === undefined) {\n // Undefined value cannot have child properties and items.\n return;\n }\n\n if (this.#isObject()) {\n for (const [, getter] of getObjectModelOwnAndParentGetters(this.model)) {\n const childModel = getter.call(this.model);\n // We need to skip all non-initialised optional fields here in order\n // to prevent infinite recursion for circular references in the model.\n // Here we rely on presence of keys in `defaultValue` to detect all\n // initialised fields. The keys in `defaultValue` are defined for all\n // non-optional fields plus those optional fields whose values were\n // set from initial `binder.read()` or `binder.clear()` or by using a\n // binder node (e.g., form binding) for a nested field.\n if (childModel[_key] in (this.defaultValue as Record<never, never>)) {\n yield getBinderNode(childModel);\n }\n }\n } else if (this.#isArray()) {\n for (const childBinderNode of this.model) {\n yield childBinderNode;\n }\n }\n }\n\n #isArray(): this is BinderNode<ArrayModel> {\n return this.model instanceof ArrayModel;\n }\n\n #isArrayItem(): this is ArrayItemBinderNode<M> {\n return this.model[_parent] instanceof ArrayModel;\n }\n\n #isObject(): this is BinderNode<ObjectModel> {\n return this.model instanceof ObjectModel;\n }\n\n *#requestValidationOfDescendants(): Generator<Promise<readonly ValueError[]>, void, void> {\n for (const node of this.#getChildBinderNodes()) {\n yield* node.#runOwnValidators();\n yield* node.#requestValidationOfDescendants();\n }\n }\n\n *#requestValidationWithAncestors(): Generator<Promise<readonly ValueError[]>, void, void> {\n yield* this.#runOwnValidators();\n\n if (this.parent) {\n yield* this.parent.#requestValidationWithAncestors();\n }\n }\n\n *#runOwnValidators(): Generator<Promise<readonly ValueError[]>, void, void> {\n const hasInvalidState = this[_validity] && !this[_validity].valid;\n const hasBadInput = !!this[_validity]?.badInput;\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n if ((hasInvalidState && !hasBadInput) || !hasInvalidState) {\n for (const validator of this.#validators) {\n yield this.binder.requestValidation(this.model, validator);\n }\n }\n\n if (hasInvalidState) {\n yield this.binder.requestValidation(this.model, this.#validityStateValidator);\n }\n }\n\n initializeValue(forceInitialize = false): void {\n // First, make sure parents have value initialized\n if (\n this.parent &&\n (this.parent.value === undefined || (this.parent.defaultValue as Value<M> | undefined) === undefined)\n ) {\n this.parent.initializeValue(true);\n }\n\n const key = this.model[_key];\n let value: Value<M> | undefined = this.parent\n ? (this.parent.value as { [key in typeof key]: Value<M> })[this.model[_key]]\n : undefined;\n\n const defaultValue: Value<M> | undefined = this.parent\n ? (this.parent.defaultValue as { readonly [key in typeof key]: Value<M> })[this.model[_key]]\n : undefined;\n\n if (value === undefined) {\n // Initialize value if this is the root level node, or it is enforced\n if (forceInitialize || !this.parent) {\n value = this.model.constructor.createEmptyValue() as Value<M>;\n this.#setValueState(value, defaultValue === undefined ? value : defaultValue);\n } else if (\n this.parent.model instanceof ObjectModel &&\n !(key in ((this.parent.value || {}) as { [key in typeof key]?: Value<M> }))\n ) {\n this.#setValueState(undefined, defaultValue === undefined ? value : defaultValue);\n }\n }\n }\n\n #setValueState(value: Value<M> | undefined, defaultValue: Value<M> | undefined): void {\n const { parent } = this;\n if (parent) {\n const key = this.model[_key];\n const parentValue = updateObjectOrArrayKey(parent.model, parent.value, key, value);\n const keepPristine = value === defaultValue && parent.value === parent.defaultValue;\n if (keepPristine) {\n // Keep value and defaultValue equal, so that `dirty` stays false\n parent.#setValueState(parentValue, parentValue);\n } else if (defaultValue !== undefined) {\n // Update value and defaultValue at the same time with different content\n const parentDefaultValue = updateObjectOrArrayKey(parent.model, parent.defaultValue, key, defaultValue);\n parent.#setValueState(parentValue, parentDefaultValue);\n } else {\n parent.#setValueState(parentValue, undefined);\n }\n } else {\n // Root level model - update the binder root\n const binder = this as unknown as BinderRoot<M>;\n if (defaultValue !== undefined) {\n binder.defaultValue = defaultValue;\n }\n binder.value = value!;\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Validators.d.ts","sourceRoot":"","sources":["src/Validators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Validators.d.ts","sourceRoot":"","sources":["src/Validators.ts"],"names":[],"mappings":"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"}
package/Validators.js CHANGED
@@ -5,7 +5,6 @@ import isDecimal from "validator/es/lib/isDecimal.js";
5
5
  import isEmail from "validator/es/lib/isEmail.js";
6
6
  import isFloat from "validator/es/lib/isFloat.js";
7
7
  import isLength from "validator/es/lib/isLength.js";
8
- import isNumeric from "validator/es/lib/isNumeric.js";
9
8
  import matches from "validator/es/lib/matches.js";
10
9
  import toFloat from "validator/es/lib/toFloat.js";
11
10
  class AbstractValidator {
@@ -38,7 +37,8 @@ function _value(attrs) {
38
37
  }
39
38
  class NumberValidator extends AbstractValidator {
40
39
  validate(value) {
41
- return isNumeric(String(value));
40
+ const num = Number(value);
41
+ return !isNaN(num) && isFinite(num);
42
42
  }
43
43
  }
44
44
  class IsNumber extends NumberValidator {
package/Validators.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["src/Validators.ts"],
4
- "sourcesContent": ["import isAfter from 'validator/es/lib/isAfter.js';\nimport isBefore from 'validator/es/lib/isBefore.js';\nimport isBoolean from 'validator/es/lib/isBoolean.js';\nimport isDecimal from 'validator/es/lib/isDecimal.js';\nimport isEmail from 'validator/es/lib/isEmail.js';\nimport isFloat from 'validator/es/lib/isFloat.js';\nimport isLength from 'validator/es/lib/isLength.js';\nimport isNumeric from 'validator/es/lib/isNumeric.js';\nimport matches from 'validator/es/lib/matches.js';\nimport toFloat from 'validator/es/lib/toFloat.js';\nimport type { Validator } from './Validation.js';\n\ninterface ValidatorAttributes {\n message?: string;\n}\ninterface ValueNumberAttributes extends ValidatorAttributes {\n value: number | string;\n}\ninterface DigitAttributes extends ValidatorAttributes {\n integer: number;\n fraction: number;\n}\ninterface SizeAttributes extends ValidatorAttributes {\n min?: number;\n max?: number;\n}\ninterface PatternAttributes extends ValidatorAttributes {\n regexp: RegExp | string;\n}\ninterface DecimalAttributes extends ValueNumberAttributes {\n inclusive?: boolean;\n}\n\nabstract class AbstractValidator<T> implements Validator<T> {\n message = 'invalid';\n\n impliesRequired = false;\n\n constructor(attrs?: ValidatorAttributes) {\n if (attrs?.message) {\n this.message = attrs.message;\n }\n }\n\n abstract validate(value: T): Promise<boolean> | boolean;\n abstract get name(): string;\n}\n\nexport class Required<T> extends AbstractValidator<T> {\n override impliesRequired = true;\n\n override validate(value: T): boolean {\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length > 0;\n }\n if (typeof value === 'number') {\n return Number.isFinite(value);\n }\n return value !== undefined;\n }\n\n readonly name: string = 'Required';\n}\n\nfunction _asValidatorAttributes(attrs: PatternAttributes | RegExp | ValueNumberAttributes | number | string) {\n return typeof attrs === 'object' ? attrs : {};\n}\n\nfunction _value(attrs: ValueNumberAttributes | number | string) {\n return typeof attrs === 'object' ? attrs.value : attrs;\n}\n\nabstract class NumberValidator<T> extends AbstractValidator<T> {\n override validate(value: T) {\n return isNumeric(String(value));\n }\n}\n\nexport class IsNumber extends NumberValidator<number | null | undefined> {\n optional: boolean;\n\n constructor(optional: boolean, attrs?: ValidatorAttributes) {\n super({ message: 'must be a number', ...attrs });\n this.optional = optional;\n }\n\n override validate(value: number | null | undefined): boolean {\n return (this.optional && value == null) || super.validate(value);\n }\n\n readonly name = 'IsNumber';\n}\n\nabstract class ValueNumberValidator<T> extends NumberValidator<T> {\n value: number;\n\n protected constructor(attrs: ValueNumberAttributes | number | string) {\n super(_asValidatorAttributes(attrs));\n const val = _value(attrs);\n this.value = typeof val === 'string' ? parseFloat(val) : val;\n }\n}\n\n// JSR380 equivalent (https://beanvalidation.org/2.0/spec/#builtinconstraints)\nexport class Email extends AbstractValidator<string> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be a well-formed email address', ...attrs });\n }\n\n override validate(value: string | null | undefined): boolean {\n return !value || isEmail(value);\n }\n\n readonly name = 'Email';\n}\n\nexport class Null extends AbstractValidator<any> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be null', ...attrs });\n }\n\n override validate(value: any): boolean {\n return value == null;\n }\n\n readonly name = 'Null';\n}\n\nexport class NotNull<T> extends Required<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must not be null', ...attrs });\n }\n\n override validate(value: T): value is NonNullable<T> {\n return !new Null().validate(value);\n }\n\n override readonly name = 'NotNull';\n}\n\nexport class NotEmpty<T> extends Required<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must not be empty', ...attrs });\n }\n\n override validate(value: T): boolean {\n return (\n super.validate(value) && new NotNull<T>().validate(value) && ((value as { length?: number }).length ?? 0) > 0\n );\n }\n\n override readonly name = 'NotEmpty';\n}\n\nexport class NotBlank<T> extends Required<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must not be blank', ...attrs });\n }\n\n override validate(value: T): boolean {\n return super.validate(value) && new NotNull<T>().validate(value) && String(value).trim().length > 0;\n }\n\n override readonly name = 'NotBlank';\n}\n\nexport class AssertTrue<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be true', ...attrs });\n }\n\n override validate(value: T): boolean {\n return isBoolean(String(value)) && String(value) === 'true';\n }\n\n readonly name = 'AssertTrue';\n}\n\nexport class AssertFalse<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be false', ...attrs });\n }\n\n override validate(value: T): boolean {\n return !new AssertTrue<T>().validate(value);\n }\n\n readonly name = 'AssertFalse';\n}\n\nfunction _asValueNumberAttributes(attrs: ValueNumberAttributes | number | string) {\n return typeof attrs === 'object' ? attrs : { value: attrs };\n}\n\nexport class Min<T> extends ValueNumberValidator<T> {\n constructor(attrs: ValueNumberAttributes | number | string) {\n super({\n message: `must be greater than or equal to ${_value(attrs)}`,\n ..._asValueNumberAttributes(attrs),\n });\n }\n\n override validate(value: T): boolean {\n return super.validate(value) && isFloat(String(value), { min: this.value });\n }\n\n readonly name = 'Min';\n}\n\nexport class Max<T> extends ValueNumberValidator<T> {\n constructor(attrs: ValueNumberAttributes | number | string) {\n super({\n message: `must be less than or equal to ${_value(attrs)}`,\n ..._asValueNumberAttributes(attrs),\n });\n }\n\n override validate(value: T): boolean {\n return super.validate(value) && isFloat(String(value), { max: this.value });\n }\n\n readonly name = 'Max';\n}\n\nfunction _inclusive(attrs: DecimalAttributes | number | string) {\n return typeof attrs !== 'object' || attrs.inclusive !== false;\n}\n\nexport class DecimalMin<T> extends ValueNumberValidator<T> {\n inclusive: boolean;\n\n constructor(attrs: DecimalAttributes | number | string) {\n super({\n message: `must be greater than ${_inclusive(attrs) ? 'or equal to ' : ''}${_value(attrs)}`,\n ..._asValueNumberAttributes(attrs),\n });\n this.inclusive = _inclusive(attrs);\n }\n\n override validate(value: T): boolean {\n return super.validate(value) && isFloat(String(value), { [this.inclusive ? 'min' : 'gt']: this.value });\n }\n\n readonly name = 'DecimalMin';\n}\n\nexport class DecimalMax<T> extends ValueNumberValidator<T> {\n inclusive: boolean;\n\n constructor(attrs: DecimalAttributes | number | string) {\n super({\n message: `must be less than ${_inclusive(attrs) ? 'or equal to ' : ''}${_value(attrs)}`,\n ..._asValueNumberAttributes(attrs),\n });\n this.inclusive = _inclusive(attrs);\n }\n\n override validate(value: T): boolean {\n return super.validate(value) && isFloat(String(value), { [this.inclusive ? 'max' : 'lt']: this.value });\n }\n\n readonly name = 'DecimalMax';\n}\n\nexport class Negative<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be less than 0', ...attrs });\n }\n\n override validate(value: T): boolean {\n return toFloat(String(value)) < 0;\n }\n\n readonly name = 'Negative';\n}\n\nexport class NegativeOrZero<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be less than or equal to 0', ...attrs });\n }\n\n override validate(value: T): boolean {\n return toFloat(String(value)) <= 0;\n }\n\n readonly name = 'NegativeOrZero';\n}\n\nexport class Positive<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be greater than 0', ...attrs });\n }\n\n override validate(value: T): boolean {\n return toFloat(String(value)) > 0;\n }\n\n readonly name = 'Positive';\n}\n\nexport class PositiveOrZero<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be greater than or equal to 0', ...attrs });\n }\n\n override validate(value: T): boolean {\n return toFloat(String(value)) >= 0;\n }\n\n readonly name = 'PositiveOrZero';\n}\n\nfunction _min(attrs: SizeAttributes) {\n return attrs.min ?? 0;\n}\n\nfunction _max(attrs: SizeAttributes) {\n return attrs.max ?? Number.MAX_SAFE_INTEGER;\n}\n\nexport class Size extends AbstractValidator<string> {\n min: number;\n max: number;\n\n constructor(attrs: SizeAttributes = {}) {\n super({ message: `size must be between ${_min(attrs)} and ${_max(attrs)}`, ...attrs });\n this.min = _min(attrs);\n this.max = _max(attrs);\n if (this.min > 0) {\n this.impliesRequired = true;\n }\n }\n\n override validate(value: string): boolean {\n if (this.min && this.min > 0 && !new Required().validate(value)) {\n return false;\n }\n // eslint-disable-next-line sort-keys\n return isLength(value, { min: this.min, max: this.max });\n }\n\n readonly name = 'Size';\n}\n\nexport class Digits<T> extends AbstractValidator<T> {\n integer: number;\n fraction: number;\n\n constructor(attrs: DigitAttributes) {\n super({\n message: `numeric value out of bounds (<${attrs.integer} digits>.<${attrs.fraction} digits> expected)`,\n ...attrs,\n });\n this.integer = attrs.integer;\n this.fraction = attrs.fraction;\n }\n\n override validate(value: T): boolean {\n return (\n String(Math.floor(Math.abs(toFloat(String(value))))).length <= this.integer &&\n // eslint-disable-next-line camelcase\n isDecimal(String(value), { decimal_digits: `0,${this.fraction}` })\n );\n }\n\n readonly name = 'Digits';\n}\n\nexport class Past<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be a past date', ...attrs });\n }\n\n override validate(value: T): boolean {\n return isBefore(String(value));\n }\n\n readonly name = 'Past';\n}\n\n/*\n @PastOrPresent has no client-side implementation yet.\n It would consider any input valid and let the server-side to do validation.\n (It's not trivial to ensure the same granularity of _present_ as on the server-side:\n year / month / day / minute).\n*/\n// export class PastOrPresent extends AbstractValidator<any> {\n// constructor(attrs?: ValidatorAttributes) {\n// super({ message: 'must be a date in the past or in the present', ...attrs });\n// }\n// validate() {\n// return true;\n// }\n// }\n\nexport class Future<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be a future date', ...attrs });\n }\n\n override validate(value: T): boolean {\n return isAfter(String(value));\n }\n\n readonly name = 'Future';\n}\n\n/*\n @FutureOrPresent has no client-side implementation yet.\n It would consider any input valid and let the server-side to do validation.\n (It's not trivial to ensure the same granularity of _present_ as on the server-side:\n year / month / day / minute).\n*/\n// export class FutureOrPresent extends AbstractValidator<any> {\n// constructor(attrs?: ValidatorAttributes) {\n// super({ message: 'must be a date in the present or in the future', ...attrs });\n// }\n// validate = () => true;\n// }\n\nfunction _regexp(attrs: PatternAttributes | RegExp | string) {\n if (typeof attrs === 'string') {\n return new RegExp(attrs, 'u');\n }\n\n if (attrs instanceof RegExp) {\n return attrs;\n }\n\n if (typeof attrs.regexp === 'string') {\n return new RegExp(attrs.regexp, 'u');\n }\n\n return attrs.regexp;\n}\n\nexport class Pattern extends AbstractValidator<string> {\n regexp: RegExp;\n\n constructor(attrs: PatternAttributes | RegExp | string) {\n super({\n message: `must match the following regular expression: ${_regexp(attrs).toString()}`,\n ..._asValidatorAttributes(attrs),\n });\n this.regexp = _regexp(attrs);\n }\n\n override validate(value: any): boolean {\n return matches(value, this.regexp);\n }\n\n readonly name = 'Pattern';\n}\n\n/**\n * Validator that reports an error when the bound HTML element validation\n * returns false from `element.checkValidity()` and `element.validity.valid`.\n */\nexport class ValidityStateValidator<T> extends AbstractValidator<T> {\n override message = '';\n\n // eslint-disable-next-line no-useless-constructor,@typescript-eslint/no-useless-constructor\n constructor() {\n super();\n }\n\n override validate(): boolean {\n return false;\n }\n\n readonly name = 'ValidityStateValidator';\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import isAfter from 'validator/es/lib/isAfter.js';\nimport isBefore from 'validator/es/lib/isBefore.js';\nimport isBoolean from 'validator/es/lib/isBoolean.js';\nimport isDecimal from 'validator/es/lib/isDecimal.js';\nimport isEmail from 'validator/es/lib/isEmail.js';\nimport isFloat from 'validator/es/lib/isFloat.js';\nimport isLength from 'validator/es/lib/isLength.js';\nimport matches from 'validator/es/lib/matches.js';\nimport toFloat from 'validator/es/lib/toFloat.js';\nimport type { Validator } from './Validation.js';\n\ninterface ValidatorAttributes {\n message?: string;\n}\ninterface ValueNumberAttributes extends ValidatorAttributes {\n value: number | string;\n}\ninterface DigitAttributes extends ValidatorAttributes {\n integer: number;\n fraction: number;\n}\ninterface SizeAttributes extends ValidatorAttributes {\n min?: number;\n max?: number;\n}\ninterface PatternAttributes extends ValidatorAttributes {\n regexp: RegExp | string;\n}\ninterface DecimalAttributes extends ValueNumberAttributes {\n inclusive?: boolean;\n}\n\nabstract class AbstractValidator<T> implements Validator<T> {\n message = 'invalid';\n\n impliesRequired = false;\n\n constructor(attrs?: ValidatorAttributes) {\n if (attrs?.message) {\n this.message = attrs.message;\n }\n }\n\n abstract validate(value: T): Promise<boolean> | boolean;\n abstract get name(): string;\n}\n\nexport class Required<T> extends AbstractValidator<T> {\n override impliesRequired = true;\n\n override validate(value: T): boolean {\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length > 0;\n }\n if (typeof value === 'number') {\n return Number.isFinite(value);\n }\n return value !== undefined;\n }\n\n readonly name: string = 'Required';\n}\n\nfunction _asValidatorAttributes(attrs: PatternAttributes | RegExp | ValueNumberAttributes | number | string) {\n return typeof attrs === 'object' ? attrs : {};\n}\n\nfunction _value(attrs: ValueNumberAttributes | number | string) {\n return typeof attrs === 'object' ? attrs.value : attrs;\n}\n\nabstract class NumberValidator<T> extends AbstractValidator<T> {\n override validate(value: T) {\n const num = Number(value);\n return !isNaN(num) && isFinite(num);\n }\n}\n\nexport class IsNumber extends NumberValidator<number | null | undefined> {\n optional: boolean;\n\n constructor(optional: boolean, attrs?: ValidatorAttributes) {\n super({ message: 'must be a number', ...attrs });\n this.optional = optional;\n }\n\n override validate(value: number | null | undefined): boolean {\n return (this.optional && value == null) || super.validate(value);\n }\n\n readonly name = 'IsNumber';\n}\n\nabstract class ValueNumberValidator<T> extends NumberValidator<T> {\n value: number;\n\n protected constructor(attrs: ValueNumberAttributes | number | string) {\n super(_asValidatorAttributes(attrs));\n const val = _value(attrs);\n this.value = typeof val === 'string' ? parseFloat(val) : val;\n }\n}\n\n// JSR380 equivalent (https://beanvalidation.org/2.0/spec/#builtinconstraints)\nexport class Email extends AbstractValidator<string> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be a well-formed email address', ...attrs });\n }\n\n override validate(value: string | null | undefined): boolean {\n return !value || isEmail(value);\n }\n\n readonly name = 'Email';\n}\n\nexport class Null extends AbstractValidator<any> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be null', ...attrs });\n }\n\n override validate(value: any): boolean {\n return value == null;\n }\n\n readonly name = 'Null';\n}\n\nexport class NotNull<T> extends Required<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must not be null', ...attrs });\n }\n\n override validate(value: T): value is NonNullable<T> {\n return !new Null().validate(value);\n }\n\n override readonly name = 'NotNull';\n}\n\nexport class NotEmpty<T> extends Required<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must not be empty', ...attrs });\n }\n\n override validate(value: T): boolean {\n return (\n super.validate(value) && new NotNull<T>().validate(value) && ((value as { length?: number }).length ?? 0) > 0\n );\n }\n\n override readonly name = 'NotEmpty';\n}\n\nexport class NotBlank<T> extends Required<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must not be blank', ...attrs });\n }\n\n override validate(value: T): boolean {\n return super.validate(value) && new NotNull<T>().validate(value) && String(value).trim().length > 0;\n }\n\n override readonly name = 'NotBlank';\n}\n\nexport class AssertTrue<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be true', ...attrs });\n }\n\n override validate(value: T): boolean {\n return isBoolean(String(value)) && String(value) === 'true';\n }\n\n readonly name = 'AssertTrue';\n}\n\nexport class AssertFalse<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be false', ...attrs });\n }\n\n override validate(value: T): boolean {\n return !new AssertTrue<T>().validate(value);\n }\n\n readonly name = 'AssertFalse';\n}\n\nfunction _asValueNumberAttributes(attrs: ValueNumberAttributes | number | string) {\n return typeof attrs === 'object' ? attrs : { value: attrs };\n}\n\nexport class Min<T> extends ValueNumberValidator<T> {\n constructor(attrs: ValueNumberAttributes | number | string) {\n super({\n message: `must be greater than or equal to ${_value(attrs)}`,\n ..._asValueNumberAttributes(attrs),\n });\n }\n\n override validate(value: T): boolean {\n return super.validate(value) && isFloat(String(value), { min: this.value });\n }\n\n readonly name = 'Min';\n}\n\nexport class Max<T> extends ValueNumberValidator<T> {\n constructor(attrs: ValueNumberAttributes | number | string) {\n super({\n message: `must be less than or equal to ${_value(attrs)}`,\n ..._asValueNumberAttributes(attrs),\n });\n }\n\n override validate(value: T): boolean {\n return super.validate(value) && isFloat(String(value), { max: this.value });\n }\n\n readonly name = 'Max';\n}\n\nfunction _inclusive(attrs: DecimalAttributes | number | string) {\n return typeof attrs !== 'object' || attrs.inclusive !== false;\n}\n\nexport class DecimalMin<T> extends ValueNumberValidator<T> {\n inclusive: boolean;\n\n constructor(attrs: DecimalAttributes | number | string) {\n super({\n message: `must be greater than ${_inclusive(attrs) ? 'or equal to ' : ''}${_value(attrs)}`,\n ..._asValueNumberAttributes(attrs),\n });\n this.inclusive = _inclusive(attrs);\n }\n\n override validate(value: T): boolean {\n return super.validate(value) && isFloat(String(value), { [this.inclusive ? 'min' : 'gt']: this.value });\n }\n\n readonly name = 'DecimalMin';\n}\n\nexport class DecimalMax<T> extends ValueNumberValidator<T> {\n inclusive: boolean;\n\n constructor(attrs: DecimalAttributes | number | string) {\n super({\n message: `must be less than ${_inclusive(attrs) ? 'or equal to ' : ''}${_value(attrs)}`,\n ..._asValueNumberAttributes(attrs),\n });\n this.inclusive = _inclusive(attrs);\n }\n\n override validate(value: T): boolean {\n return super.validate(value) && isFloat(String(value), { [this.inclusive ? 'max' : 'lt']: this.value });\n }\n\n readonly name = 'DecimalMax';\n}\n\nexport class Negative<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be less than 0', ...attrs });\n }\n\n override validate(value: T): boolean {\n return toFloat(String(value)) < 0;\n }\n\n readonly name = 'Negative';\n}\n\nexport class NegativeOrZero<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be less than or equal to 0', ...attrs });\n }\n\n override validate(value: T): boolean {\n return toFloat(String(value)) <= 0;\n }\n\n readonly name = 'NegativeOrZero';\n}\n\nexport class Positive<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be greater than 0', ...attrs });\n }\n\n override validate(value: T): boolean {\n return toFloat(String(value)) > 0;\n }\n\n readonly name = 'Positive';\n}\n\nexport class PositiveOrZero<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be greater than or equal to 0', ...attrs });\n }\n\n override validate(value: T): boolean {\n return toFloat(String(value)) >= 0;\n }\n\n readonly name = 'PositiveOrZero';\n}\n\nfunction _min(attrs: SizeAttributes) {\n return attrs.min ?? 0;\n}\n\nfunction _max(attrs: SizeAttributes) {\n return attrs.max ?? Number.MAX_SAFE_INTEGER;\n}\n\nexport class Size extends AbstractValidator<string> {\n min: number;\n max: number;\n\n constructor(attrs: SizeAttributes = {}) {\n super({ message: `size must be between ${_min(attrs)} and ${_max(attrs)}`, ...attrs });\n this.min = _min(attrs);\n this.max = _max(attrs);\n if (this.min > 0) {\n this.impliesRequired = true;\n }\n }\n\n override validate(value: string): boolean {\n if (this.min && this.min > 0 && !new Required().validate(value)) {\n return false;\n }\n // eslint-disable-next-line sort-keys\n return isLength(value, { min: this.min, max: this.max });\n }\n\n readonly name = 'Size';\n}\n\nexport class Digits<T> extends AbstractValidator<T> {\n integer: number;\n fraction: number;\n\n constructor(attrs: DigitAttributes) {\n super({\n message: `numeric value out of bounds (<${attrs.integer} digits>.<${attrs.fraction} digits> expected)`,\n ...attrs,\n });\n this.integer = attrs.integer;\n this.fraction = attrs.fraction;\n }\n\n override validate(value: T): boolean {\n return (\n String(Math.floor(Math.abs(toFloat(String(value))))).length <= this.integer &&\n // eslint-disable-next-line camelcase\n isDecimal(String(value), { decimal_digits: `0,${this.fraction}` })\n );\n }\n\n readonly name = 'Digits';\n}\n\nexport class Past<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be a past date', ...attrs });\n }\n\n override validate(value: T): boolean {\n return isBefore(String(value));\n }\n\n readonly name = 'Past';\n}\n\n/*\n @PastOrPresent has no client-side implementation yet.\n It would consider any input valid and let the server-side to do validation.\n (It's not trivial to ensure the same granularity of _present_ as on the server-side:\n year / month / day / minute).\n*/\n// export class PastOrPresent extends AbstractValidator<any> {\n// constructor(attrs?: ValidatorAttributes) {\n// super({ message: 'must be a date in the past or in the present', ...attrs });\n// }\n// validate() {\n// return true;\n// }\n// }\n\nexport class Future<T> extends AbstractValidator<T> {\n constructor(attrs?: ValidatorAttributes) {\n super({ message: 'must be a future date', ...attrs });\n }\n\n override validate(value: T): boolean {\n return isAfter(String(value));\n }\n\n readonly name = 'Future';\n}\n\n/*\n @FutureOrPresent has no client-side implementation yet.\n It would consider any input valid and let the server-side to do validation.\n (It's not trivial to ensure the same granularity of _present_ as on the server-side:\n year / month / day / minute).\n*/\n// export class FutureOrPresent extends AbstractValidator<any> {\n// constructor(attrs?: ValidatorAttributes) {\n// super({ message: 'must be a date in the present or in the future', ...attrs });\n// }\n// validate = () => true;\n// }\n\nfunction _regexp(attrs: PatternAttributes | RegExp | string) {\n if (typeof attrs === 'string') {\n return new RegExp(attrs, 'u');\n }\n\n if (attrs instanceof RegExp) {\n return attrs;\n }\n\n if (typeof attrs.regexp === 'string') {\n return new RegExp(attrs.regexp, 'u');\n }\n\n return attrs.regexp;\n}\n\nexport class Pattern extends AbstractValidator<string> {\n regexp: RegExp;\n\n constructor(attrs: PatternAttributes | RegExp | string) {\n super({\n message: `must match the following regular expression: ${_regexp(attrs).toString()}`,\n ..._asValidatorAttributes(attrs),\n });\n this.regexp = _regexp(attrs);\n }\n\n override validate(value: any): boolean {\n return matches(value, this.regexp);\n }\n\n readonly name = 'Pattern';\n}\n\n/**\n * Validator that reports an error when the bound HTML element validation\n * returns false from `element.checkValidity()` and `element.validity.valid`.\n */\nexport class ValidityStateValidator<T> extends AbstractValidator<T> {\n override message = '';\n\n // eslint-disable-next-line no-useless-constructor,@typescript-eslint/no-useless-constructor\n constructor() {\n super();\n }\n\n override validate(): boolean {\n return false;\n }\n\n readonly name = 'ValidityStateValidator';\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/index.js CHANGED
@@ -2,7 +2,7 @@ function __REGISTER__(feature, vaadinObj = window.Vaadin ??= {}) {
2
2
  vaadinObj.registrations ??= [];
3
3
  vaadinObj.registrations.push({
4
4
  is: feature ? `${"@vaadin/hilla-lit-form"}/${feature}` : "@vaadin/hilla-lit-form",
5
- version: "24.5.0-alpha1"
5
+ version: "24.5.0-alpha2"
6
6
  });
7
7
  }
8
8
  export * from "./Binder.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaadin/hilla-lit-form",
3
- "version": "24.5.0-alpha1",
3
+ "version": "24.5.0-alpha2",
4
4
  "description": "Hilla form utils",
5
5
  "main": "index.js",
6
6
  "module": "index.js",
@@ -71,7 +71,7 @@
71
71
  "access": "public"
72
72
  },
73
73
  "dependencies": {
74
- "@vaadin/hilla-frontend": "24.5.0-alpha1",
74
+ "@vaadin/hilla-frontend": "24.5.0-alpha2",
75
75
  "validator": "^13.11.0"
76
76
  },
77
77
  "peerDependencies": {