Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Block Parser: Implement block schema numeric range validation #19433

Closed
wants to merge 2 commits into from

Conversation

aduth
Copy link
Member

@aduth aduth commented Jan 6, 2020

Previously: #16314 (comment)

This pull request seeks to enhance the block parser validation to support JSON schema numeric ranges. This follows existing validation behavior for enums (#14810) as precedent.

In doing so, it resolves a typo in the Column block schema use of the minimum (previously min) and maximum (previously max) schema keywords, which previously had no effect since the validation was not yet in place.

Implementation Notes: If and as this sort of validation becomes further enhanced, we should consider to improve developer communication of invalid values. For example, logging useful warning messages not unlike the equivalent REST errors. For the time being, I might consider this blocked by #19317, and worth considering for a subsequent pull request.

Open Questions: There's an open question as to just how far it makes sense to take this validation, given that to this point it's been implemented in an ad hoc fashion. Similarly, it begs the question whether we should consider leveraging an existing JSON schema validation solution (of which there are many) rather than to implement our own. Personally, I am mostly content to implement a subset of the validation features, considering the full extent of JSON schema is quite substantial (often manifesting itself in code size). Ideally, the implementations of schema validation is consistent with the equivalent rest_validate_value_from_schema implementation to assure a consistent expected behavior. The supported validation should be documented as well.

Testing Instructions:

Ensure unit tests pass:

npm run test-unit

Verify that manually changing the width of a Column block (likely modifying the comment-delimited attributes using the "Code Editor" mode) to a value less than 0 or greater than 100, will result in the value to be reset to an undefined state.

@aduth aduth added [Type] Enhancement A suggestion for improvement. [Feature] Block API API that allows to express the block paradigm. [Feature] Block Validation/Deprecation Handling block validation to determine accuracy and deprecation labels Jan 6, 2020
@aduth aduth force-pushed the add/block-parser-numeric-range-validation branch from 4d0bc7a to a0f977a Compare March 12, 2020 20:02
@github-actions
Copy link

Size Change: +100 B (0%)

Total Size: 856 kB

Filename Size Change
build/block-library/index.js 111 kB +7 B (0%)
build/blocks/index.js 57.8 kB +93 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.01 kB 0 B
build/annotations/index.js 3.43 kB 0 B
build/api-fetch/index.js 3.39 kB 0 B
build/autop/index.js 2.58 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/index.js 6.02 kB 0 B
build/block-directory/style-rtl.css 760 B 0 B
build/block-directory/style.css 760 B 0 B
build/block-editor/index.js 100 kB 0 B
build/block-editor/style-rtl.css 10.7 kB 0 B
build/block-editor/style.css 10.7 kB 0 B
build/block-library/editor-rtl.css 7.23 kB 0 B
build/block-library/editor.css 7.24 kB 0 B
build/block-library/style-rtl.css 7.38 kB 0 B
build/block-library/style.css 7.39 kB 0 B
build/block-library/theme-rtl.css 669 B 0 B
build/block-library/theme.css 671 B 0 B
build/block-serialization-default-parser/index.js 1.65 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/components/index.js 191 kB 0 B
build/components/style-rtl.css 15.5 kB 0 B
build/components/style.css 15.5 kB 0 B
build/compose/index.js 5.76 kB 0 B
build/core-data/index.js 10.6 kB 0 B
build/data-controls/index.js 1.04 kB 0 B
build/data/index.js 8.21 kB 0 B
build/date/index.js 5.37 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 568 B 0 B
build/dom/index.js 3.06 kB 0 B
build/edit-post/index.js 91.3 kB 0 B
build/edit-post/style-rtl.css 8.64 kB 0 B
build/edit-post/style.css 8.64 kB 0 B
build/edit-site/index.js 4.64 kB 0 B
build/edit-site/style-rtl.css 2.48 kB 0 B
build/edit-site/style.css 2.48 kB 0 B
build/edit-widgets/index.js 4.45 kB 0 B
build/edit-widgets/style-rtl.css 2.58 kB 0 B
build/edit-widgets/style.css 2.58 kB 0 B
build/editor/editor-styles-rtl.css 381 B 0 B
build/editor/editor-styles.css 382 B 0 B
build/editor/index.js 43.8 kB 0 B
build/editor/style-rtl.css 3.97 kB 0 B
build/editor/style.css 3.96 kB 0 B
build/element/index.js 4.45 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.09 kB 0 B
build/format-library/style-rtl.css 502 B 0 B
build/format-library/style.css 502 B 0 B
build/hooks/index.js 1.92 kB 0 B
build/html-entities/index.js 621 B 0 B
build/i18n/index.js 3.49 kB 0 B
build/is-shallow-equal/index.js 710 B 0 B
build/keyboard-shortcuts/index.js 2.3 kB 0 B
build/keycodes/index.js 1.68 kB 0 B
build/list-reusable-blocks/index.js 2.99 kB 0 B
build/list-reusable-blocks/style-rtl.css 226 B 0 B
build/list-reusable-blocks/style.css 226 B 0 B
build/media-utils/index.js 4.85 kB 0 B
build/notices/index.js 1.57 kB 0 B
build/nux/index.js 3.01 kB 0 B
build/nux/style-rtl.css 616 B 0 B
build/nux/style.css 613 B 0 B
build/plugins/index.js 2.54 kB 0 B
build/primitives/index.js 1.49 kB 0 B
build/priority-queue/index.js 779 B 0 B
build/redux-routine/index.js 2.84 kB 0 B
build/rich-text/index.js 14.3 kB 0 B
build/server-side-render/index.js 2.55 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 4.01 kB 0 B
build/viewport/index.js 1.61 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.18 kB 0 B

compressed-size-action

@chrisvanpatten
Copy link
Contributor

Similarly, it begs the question whether we should consider leveraging an existing JSON schema validation solution (of which there are many) rather than to implement our own. Personally, I am mostly content to implement a subset of the validation features, considering the full extent of JSON schema is quite substantial (often manifesting itself in code size).

I tend to agree the code size aspect probably means avoiding using a pre-packaged JSON schema validation solution, but it would be good to see parity with the server-side interpretation of JSON schema, potentially including some form of format validation (which is slightly tricky in a reactive context, but it would be useful perhaps to validate on save, for instance).

@aduth
Copy link
Member Author

aduth commented Jun 3, 2020

it would be good to see parity with the server-side interpretation of JSON schema

I'd agree with this, and it makes for a nice simple target baseline.

Separately, I'd still wonder the question of: What subset of JSON schema are those REST validation functions intending to support? Or, more directly, is there a well-defined criteria, or is it the same sort of ad hoc decisions we've made client-side? I guess my fear there is that it could become a moving target, if and when the REST schema capability changes.

Base automatically changed from master to trunk March 1, 2021 15:43
@annezazu annezazu closed this Jul 27, 2022
@sirreal sirreal deleted the add/block-parser-numeric-range-validation branch September 25, 2024 15:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Block API API that allows to express the block paradigm. [Feature] Block Validation/Deprecation Handling block validation to determine accuracy and deprecation [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants