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

Create initial story JSON schema #12131

Merged
merged 27 commits into from
Sep 8, 2022
Merged

Create initial story JSON schema #12131

merged 27 commits into from
Sep 8, 2022

Conversation

swissspidy
Copy link
Collaborator

@swissspidy swissspidy commented Aug 19, 2022

Context

See #12084

Summary

Found some bugs thanks to this:

343f355

Relevant Technical Choices

  • Storing schema in bin/ for now
  • Using ajv-cli for JSON schema validation
  • USing ajv-formats to add support for things like uuid and date-time types

To-do

  • Maybe add data migrations to remove backgroundOverlay and fontWeight from existing stories.
    Not sure how likely these exists on existing stories though.
  • Stickers: avoid properties like showInLibrary from ending up in the JSON data. Add a data migration accordingly & remove from schema.
  • Schema: Add schema for resource sizes
  • Data structure: consider storing all existing fonts at the story level instead of on each element to reduce redundancy
  • Pages: pages have type: page and we register a special "page" element type. Is that still relevant or outdated?
  • Story: Do not persistently store global properties things like current, selection, and story
  • Elements: Do not persistently store the basedOn property. Seems useless to keep, since this is only used when duplicating elements.

User-facing changes

N/A

Testing Instructions

  • This is a non-user-facing change and requires no QA

This PR can be tested by following these steps:

Reviews

Does this PR have a security-related impact?

No

Does this PR change what data or activity we track or use?

No

Does this PR have a legal-related impact?

No

Checklist

  • This PR addresses an existing issue and I have linked this PR to it in ZenHub
  • I have tested this code to the best of my abilities
  • I have verified accessibility to the best of my abilities (docs)
  • I have verified i18n and l10n (translation, right-to-left layout) to the best of my abilities
  • This code is covered by automated tests (unit, integration, and/or e2e) to verify it works as intended (docs)
  • I have added documentation where necessary
  • I have added a matching Type: XYZ label to the PR

Fixes #12084

@swissspidy swissspidy added Type: Documentation Improvements or additions to documentation Type: Infrastructure Changes impacting testing infrastructure or build tooling labels Aug 19, 2022
@googleforcreators-bot
Copy link
Collaborator

googleforcreators-bot commented Aug 19, 2022

Plugin builds for 868d956 are ready 🛎️!

bin/schemas/story.json Outdated Show resolved Hide resolved
bin/schemas/story.json Show resolved Hide resolved
bin/schemas/story.json Outdated Show resolved Hide resolved
bin/schemas/story.json Outdated Show resolved Hide resolved
bin/schemas/story.json Show resolved Hide resolved
bin/schemas/story.json Show resolved Hide resolved
bin/schemas/story.json Outdated Show resolved Hide resolved
bin/schemas/story.json Outdated Show resolved Hide resolved
packages/migration/src/migrate.js Outdated Show resolved Hide resolved
@swissspidy swissspidy removed the request for review from spacedmonkey August 30, 2022 12:50
@swissspidy
Copy link
Collaborator Author

@miina @barklund @merapi Would appreciate feedback here, especially on the thoughts in the to-do section above.

@miina
Copy link
Contributor

miina commented Sep 2, 2022

@swissspidy On not storing the said values on elements (e.g. basedOn etc.): makes sense, I've also thought about it quite a few times when adding some values that are needed only temporarily. Did you have anything in mind for it? Perhaps we could create a hardcoded list of values that should not get saved, e.g. something similar to how some values don't create a new history entry with ELEMENT_PROPS_TO_IGNORE.

Pages: pages have type: page and we register a special "page" element type. Is that still relevant or outdated?

Having a page element type is still relevant as it currently is. The same utils are used for creating a page as for other elements, it has its default element attributes etc. Not sure if storing type: 'page' is really needed for it but the general logic for creating a page depends on it being handled as an element.

bin/schemas/story.json Outdated Show resolved Hide resolved
bin/schemas/story.json Show resolved Hide resolved
bin/schemas/story.json Outdated Show resolved Hide resolved
bin/schemas/story.json Show resolved Hide resolved
bin/schemas/story.json Outdated Show resolved Hide resolved
bin/schemas/story.json Outdated Show resolved Hide resolved
bin/schemas/story.json Outdated Show resolved Hide resolved
bin/schemas/story.json Outdated Show resolved Hide resolved
bin/schemas/story.json Outdated Show resolved Hide resolved
"type": "object",
"title": "The default background element",
"$ref": "#/$defs/shapeElement",
"$comment": "TODO: Move to story element or remove?"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why remove? :)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was wondering whether it makes sense to store the default background element in the story data JSON in the first place, since this could in theory just be a const somewhere in the editor since it's static and never changes.

From what I can see we mainly need this information about the default background element when removing the background element (e.g. an image or video) and need to restore the default.

We can still have the isDefaultBackground property to identify the default in the story JSON, should we ever need a data migration for it.

Does that make sense?

@miina
Copy link
Contributor

miina commented Sep 2, 2022

Having a page element type is still relevant as it currently is. The same utils are used for creating a page as for other elements, it has its default element attributes etc. Not sure if storing type: 'page' is really needed for it but the general logic for creating a page depends on it being handled as an element.

I'm checking now that the defaultAttributes the page has is actually just empty 😄 Thought for some reason that it included elements array as well but looks like not.

@swissspidy
Copy link
Collaborator Author

On not storing the said values on elements (e.g. basedOn etc.): makes sense, I've also thought about it quite a few times when adding some values that are needed only temporarily. Did you have anything in mind for it? Perhaps we could create a hardcoded list of values that should not get saved, e.g. something similar to how some values don't create a new history entry with ELEMENT_PROPS_TO_IGNORE.

I didn't have anything in mind, but I can create a ticket to further discuss this idea 👍

The risk with a hardcoded list is that we forget to maintain it, but I think that becomes easier once we have strong TypeScript types for elements. Then one will get yelled at when adding a new unknown property anyway :-)

@github-actions
Copy link
Contributor

github-actions bot commented Sep 6, 2022

Size Change: -761 B (0%)

Total Size: 2.68 MB

Filename Size Change
assets/js/chunk-web-stories-template-60.js 9.51 kB -127 B (-1%)
ℹ️ View Unchanged
Filename Size Change
assets/css/carousel-view-rtl.css 702 B 0 B
assets/css/carousel-view.css 701 B 0 B
assets/css/web-stories-block-rtl.css 4.52 kB 0 B
assets/css/web-stories-block.css 4.56 kB 0 B
assets/css/web-stories-embed-rtl.css 318 B 0 B
assets/css/web-stories-embed.css 317 B 0 B
assets/css/web-stories-list-styles-rtl.css 2.36 kB 0 B
assets/css/web-stories-list-styles.css 2.39 kB 0 B
assets/css/web-stories-theme-style-twentyeleven-rtl.css 102 B 0 B
assets/css/web-stories-theme-style-twentyeleven.css 102 B 0 B
assets/css/web-stories-theme-style-twentyfifteen-rtl.css 251 B 0 B
assets/css/web-stories-theme-style-twentyfifteen.css 251 B 0 B
assets/css/web-stories-theme-style-twentyfourteen-rtl.css 287 B 0 B
assets/css/web-stories-theme-style-twentyfourteen.css 287 B 0 B
assets/css/web-stories-theme-style-twentyseventeen-rtl.css 288 B 0 B
assets/css/web-stories-theme-style-twentyseventeen.css 288 B 0 B
assets/css/web-stories-theme-style-twentysixteen-rtl.css 224 B 0 B
assets/css/web-stories-theme-style-twentysixteen.css 224 B 0 B
assets/css/web-stories-theme-style-twentyten-rtl.css 143 B 0 B
assets/css/web-stories-theme-style-twentyten.css 143 B 0 B
assets/css/web-stories-theme-style-twentytwelve-rtl.css 256 B 0 B
assets/css/web-stories-theme-style-twentytwelve.css 256 B 0 B
assets/css/web-stories-theme-style-twentytwenty-rtl.css 86 B 0 B
assets/css/web-stories-theme-style-twentytwenty.css 86 B 0 B
assets/css/web-stories-theme-style-twentytwentyone-rtl.css 326 B 0 B
assets/css/web-stories-theme-style-twentytwentyone.css 326 B 0 B
assets/css/web-stories-widget-rtl.css 482 B 0 B
assets/css/web-stories-widget.css 482 B 0 B
assets/css/wp-dashboard-rtl.css 657 B 0 B
assets/css/wp-dashboard.css 659 B 0 B
assets/css/wp-story-editor-rtl.css 737 B 0 B
assets/css/wp-story-editor.css 738 B 0 B
assets/js/1303.js 1.14 MB 0 B
assets/js/1814.js 7.45 kB 0 B
assets/js/4317.js 37.2 kB 0 B
assets/js/4422.js 49.3 kB 0 B
assets/js/6527.js 223 kB 0 B
assets/js/7903.js 5.82 kB 0 B
assets/js/carousel-view.js 3.41 kB 0 B
assets/js/chunk-colorthief.js 2.64 kB 0 B
assets/js/chunk-ffmpeg.js 5.64 kB 0 B
assets/js/chunk-focus-visible.js 1.01 kB 0 B
assets/js/chunk-getStoryMarkup.js 5.79 kB 0 B
assets/js/chunk-html-to-image.js 4.55 kB 0 B
assets/js/chunk-opentype.js 96 B 0 B
assets/js/chunk-react-calendar.js 12.4 kB 0 B
assets/js/chunk-react-color.js 44.3 kB 0 B
assets/js/chunk-web-animations-js.js 14.6 kB 0 B
assets/js/chunk-web-stories-template-0-metaData.js 545 B 0 B
assets/js/chunk-web-stories-template-0.js 11.4 kB -14 B (0%)
assets/js/chunk-web-stories-template-1-metaData.js 539 B 0 B
assets/js/chunk-web-stories-template-1.js 9.61 kB +7 B (0%)
assets/js/chunk-web-stories-template-10-metaData.js 533 B 0 B
assets/js/chunk-web-stories-template-10.js 7.37 kB -7 B (0%)
assets/js/chunk-web-stories-template-11-metaData.js 539 B 0 B
assets/js/chunk-web-stories-template-11.js 9.09 kB +5 B (0%)
assets/js/chunk-web-stories-template-12-metaData.js 497 B 0 B
assets/js/chunk-web-stories-template-12.js 9.7 kB +5 B (0%)
assets/js/chunk-web-stories-template-13-metaData.js 525 B 0 B
assets/js/chunk-web-stories-template-13.js 7.4 kB -24 B (0%)
assets/js/chunk-web-stories-template-14-metaData.js 582 B 0 B
assets/js/chunk-web-stories-template-14.js 7.37 kB -15 B (0%)
assets/js/chunk-web-stories-template-15-metaData.js 544 B 0 B
assets/js/chunk-web-stories-template-15.js 9 kB -12 B (0%)
assets/js/chunk-web-stories-template-16-metaData.js 588 B 0 B
assets/js/chunk-web-stories-template-16.js 10.9 kB +6 B (0%)
assets/js/chunk-web-stories-template-17-metaData.js 539 B 0 B
assets/js/chunk-web-stories-template-17.js 9.2 kB 0 B
assets/js/chunk-web-stories-template-18-metaData.js 585 B 0 B
assets/js/chunk-web-stories-template-18.js 9.91 kB -1 B (0%)
assets/js/chunk-web-stories-template-19-metaData.js 501 B 0 B
assets/js/chunk-web-stories-template-19.js 10.8 kB 0 B
assets/js/chunk-web-stories-template-2-metaData.js 586 B 0 B
assets/js/chunk-web-stories-template-2.js 9.3 kB -23 B (0%)
assets/js/chunk-web-stories-template-20-metaData.js 548 B 0 B
assets/js/chunk-web-stories-template-20.js 9.01 kB -11 B (0%)
assets/js/chunk-web-stories-template-21-metaData.js 535 B 0 B
assets/js/chunk-web-stories-template-21.js 9.85 kB -6 B (0%)
assets/js/chunk-web-stories-template-22-metaData.js 525 B 0 B
assets/js/chunk-web-stories-template-22.js 7.83 kB 0 B
assets/js/chunk-web-stories-template-23-metaData.js 605 B 0 B
assets/js/chunk-web-stories-template-23.js 7.48 kB +7 B (0%)
assets/js/chunk-web-stories-template-24-metaData.js 516 B 0 B
assets/js/chunk-web-stories-template-24.js 11.7 kB -14 B (0%)
assets/js/chunk-web-stories-template-25-metaData.js 544 B 0 B
assets/js/chunk-web-stories-template-25.js 7.06 kB -14 B (0%)
assets/js/chunk-web-stories-template-26-metaData.js 601 B 0 B
assets/js/chunk-web-stories-template-26.js 7.27 kB -6 B (0%)
assets/js/chunk-web-stories-template-27-metaData.js 542 B 0 B
assets/js/chunk-web-stories-template-27.js 7.82 kB +1 B (0%)
assets/js/chunk-web-stories-template-28-metaData.js 532 B 0 B
assets/js/chunk-web-stories-template-28.js 9.07 kB -17 B (0%)
assets/js/chunk-web-stories-template-29-metaData.js 562 B 0 B
assets/js/chunk-web-stories-template-29.js 9.25 kB -24 B (0%)
assets/js/chunk-web-stories-template-3-metaData.js 539 B 0 B
assets/js/chunk-web-stories-template-3.js 8.42 kB -17 B (0%)
assets/js/chunk-web-stories-template-30-metaData.js 576 B 0 B
assets/js/chunk-web-stories-template-30.js 7.89 kB -27 B (0%)
assets/js/chunk-web-stories-template-31-metaData.js 502 B 0 B
assets/js/chunk-web-stories-template-31.js 10.3 kB -15 B (0%)
assets/js/chunk-web-stories-template-32-metaData.js 552 B 0 B
assets/js/chunk-web-stories-template-32.js 13.3 kB -72 B (-1%)
assets/js/chunk-web-stories-template-33-metaData.js 492 B 0 B
assets/js/chunk-web-stories-template-33.js 9.07 kB -7 B (0%)
assets/js/chunk-web-stories-template-34-metaData.js 571 B 0 B
assets/js/chunk-web-stories-template-34.js 7.58 kB +4 B (0%)
assets/js/chunk-web-stories-template-35-metaData.js 566 B 0 B
assets/js/chunk-web-stories-template-35.js 8.91 kB +6 B (0%)
assets/js/chunk-web-stories-template-36-metaData.js 577 B 0 B
assets/js/chunk-web-stories-template-36.js 12.7 kB +2 B (0%)
assets/js/chunk-web-stories-template-37-metaData.js 528 B 0 B
assets/js/chunk-web-stories-template-37.js 6.71 kB 0 B
assets/js/chunk-web-stories-template-38-metaData.js 572 B 0 B
assets/js/chunk-web-stories-template-38.js 7.94 kB -4 B (0%)
assets/js/chunk-web-stories-template-39-metaData.js 588 B 0 B
assets/js/chunk-web-stories-template-39.js 8.08 kB -12 B (0%)
assets/js/chunk-web-stories-template-4-metaData.js 564 B 0 B
assets/js/chunk-web-stories-template-4.js 12.7 kB +8 B (0%)
assets/js/chunk-web-stories-template-40-metaData.js 557 B 0 B
assets/js/chunk-web-stories-template-40.js 10.2 kB -17 B (0%)
assets/js/chunk-web-stories-template-41-metaData.js 572 B 0 B
assets/js/chunk-web-stories-template-41.js 7.75 kB -20 B (0%)
assets/js/chunk-web-stories-template-42-metaData.js 521 B 0 B
assets/js/chunk-web-stories-template-42.js 7 kB +2 B (0%)
assets/js/chunk-web-stories-template-43-metaData.js 557 B 0 B
assets/js/chunk-web-stories-template-43.js 8.76 kB -17 B (0%)
assets/js/chunk-web-stories-template-44-metaData.js 584 B 0 B
assets/js/chunk-web-stories-template-44.js 11.1 kB -16 B (0%)
assets/js/chunk-web-stories-template-45-metaData.js 565 B 0 B
assets/js/chunk-web-stories-template-45.js 7.52 kB +6 B (0%)
assets/js/chunk-web-stories-template-46-metaData.js 531 B 0 B
assets/js/chunk-web-stories-template-46.js 5.22 kB +1 B (0%)
assets/js/chunk-web-stories-template-47-metaData.js 592 B 0 B
assets/js/chunk-web-stories-template-47.js 9.42 kB -1 B (0%)
assets/js/chunk-web-stories-template-48-metaData.js 555 B 0 B
assets/js/chunk-web-stories-template-48.js 9.09 kB 0 B
assets/js/chunk-web-stories-template-49-metaData.js 518 B 0 B
assets/js/chunk-web-stories-template-49.js 9.69 kB -7 B (0%)
assets/js/chunk-web-stories-template-5-metaData.js 556 B 0 B
assets/js/chunk-web-stories-template-5.js 9.94 kB -22 B (0%)
assets/js/chunk-web-stories-template-50-metaData.js 503 B 0 B
assets/js/chunk-web-stories-template-50.js 9.15 kB -14 B (0%)
assets/js/chunk-web-stories-template-51-metaData.js 526 B 0 B
assets/js/chunk-web-stories-template-51.js 10.4 kB +2 B (0%)
assets/js/chunk-web-stories-template-52-metaData.js 602 B 0 B
assets/js/chunk-web-stories-template-52.js 10.4 kB +2 B (0%)
assets/js/chunk-web-stories-template-53-metaData.js 553 B 0 B
assets/js/chunk-web-stories-template-53.js 5.78 kB -3 B (0%)
assets/js/chunk-web-stories-template-54-metaData.js 547 B 0 B
assets/js/chunk-web-stories-template-54.js 7.67 kB +4 B (0%)
assets/js/chunk-web-stories-template-55-metaData.js 573 B 0 B
assets/js/chunk-web-stories-template-55.js 7.13 kB -6 B (0%)
assets/js/chunk-web-stories-template-56-metaData.js 542 B 0 B
assets/js/chunk-web-stories-template-56.js 9.87 kB -20 B (0%)
assets/js/chunk-web-stories-template-57-metaData.js 527 B 0 B
assets/js/chunk-web-stories-template-57.js 14.9 kB -15 B (0%)
assets/js/chunk-web-stories-template-58-metaData.js 555 B 0 B
assets/js/chunk-web-stories-template-58.js 5.74 kB -6 B (0%)
assets/js/chunk-web-stories-template-59-metaData.js 590 B 0 B
assets/js/chunk-web-stories-template-59.js 8.96 kB -11 B (0%)
assets/js/chunk-web-stories-template-6-metaData.js 569 B 0 B
assets/js/chunk-web-stories-template-6.js 7.07 kB +5 B (0%)
assets/js/chunk-web-stories-template-60-metaData.js 510 B 0 B
assets/js/chunk-web-stories-template-7-metaData.js 569 B 0 B
assets/js/chunk-web-stories-template-7.js 7.46 kB +5 B (0%)
assets/js/chunk-web-stories-template-8-metaData.js 569 B 0 B
assets/js/chunk-web-stories-template-8.js 8.93 kB -13 B (0%)
assets/js/chunk-web-stories-template-9-metaData.js 581 B 0 B
assets/js/chunk-web-stories-template-9.js 8.46 kB -22 B (0%)
assets/js/chunk-web-stories-templates.js 443 B 0 B
assets/js/chunk-web-stories-textset-0.js 5.06 kB -16 B (0%)
assets/js/chunk-web-stories-textset-1.js 6.65 kB -14 B (0%)
assets/js/chunk-web-stories-textset-2.js 7.65 kB -16 B (0%)
assets/js/chunk-web-stories-textset-3.js 15.1 kB -33 B (0%)
assets/js/chunk-web-stories-textset-4.js 4.15 kB -15 B (0%)
assets/js/chunk-web-stories-textset-5.js 5.47 kB -16 B (0%)
assets/js/chunk-web-stories-textset-6.js 5.28 kB -20 B (0%)
assets/js/chunk-web-stories-textset-7.js 10.2 kB -15 B (0%)
assets/js/generateBlurhash.worker.worker.js 1.1 kB 0 B
assets/js/imgareaselect.js 3.77 kB 0 B
assets/js/lightbox.js 550 B 0 B
assets/js/tinymce-button.js 2.84 kB 0 B
assets/js/web-stories-activation-notice.js 25.4 kB 0 B
assets/js/web-stories-block.js 18 kB 0 B
assets/js/web-stories-embed.js 20 B 0 B
assets/js/web-stories-widget.js 587 B 0 B
assets/js/wp-dashboard.js 72.5 kB -8 B (0%)
assets/js/wp-story-editor.js 331 kB -7 B (0%)

compressed-size-action

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Type: Documentation Improvements or additions to documentation Type: Infrastructure Changes impacting testing infrastructure or build tooling
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Document data model as JSON schema
4 participants