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

Ion Schema Sandbox links do not work for large schemas #136

Open
popematt opened this issue May 28, 2024 · 0 comments
Open

Ion Schema Sandbox links do not work for large schemas #136

popematt opened this issue May 28, 2024 · 0 comments
Labels
bug Something isn't working

Comments

@popematt
Copy link
Contributor

The naive approach of simply putting the text content of the schema and data boxes in the URL's query parameters fails for sufficiently large schemas. We should consider converting the data to Ion binary to take advantage of the symbol table to reduce the size, adding some sort of general purpose compression, or both.

As a partial mitigation, we could trim whitespace for really large payloads and we can warn the user if their code snippet is going to be too large to share.


Example link:

https://amazon-ion.github.io/ion-schema/sandbox?schema=%24ion_schema_2_0%0Atype%3A%3A%7B%0A%20%20name%3A%20conformance_test_file%2C%0A%20%20type%3A%20document%2C%0A%20%20element%3A%20test%2C%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20test%2C%0A%20%20ordered_elements%3A%20%5B%0A%20%20%20%20%7B%20valid_values%3A%20%5B%20in10%2C%20in11%2C%20in1x%20%5D%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20fragment%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20any%2C%20occurs%3A%20range%3A%3A%5B1%2C%20max%5D%7D%2C%0A%20%20%5D%2C%0A%20%20one_of%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%20%20%7B%20type%3A%20any%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%20%20%20%20%20%20expectation%2C%0A%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%7D%2C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%20%20%7B%20type%3A%20any%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%20type%3A%20extension%2C%20occurs%3A%20range%3A%3A%5B1%2C%20max%5D%20%7D%2C%0A%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%7D%2C%0A%20%20%5D%0A%7D%0A%0A%2F*%0Afragment%20%3A%3A%3D%20%20%22(%22%20%20%22text%22%20%20%20%20%20%20string*%20%20%22)%22%0A%20%20%20%20%20%20%20%20%20%20%20%7C%20%20%22(%22%20%20%22binary%22%20%20%20%20bytes*%20%20%20%22)%22%0A%20%20%20%20%20%20%20%20%20%20%20%7C%20%20%22(%22%20%20%22toplevel%22%20%20ast*%20%20%20%20%20%22)%22%0A%20%20%20%20%20%20%20%20%20%20%20%7C%20%20%22(%22%20%20%22encoding%22%20%20ast*%20%20%20%20%20%22)%22%0A%20%20%20%20%20%20%20%20%20%20%20%7C%20%20%22(%22%20%20%22mactab%22%20%20%20%20ast*%20%20%20%20%20%22)%22%0A*%2F%0Atype%3A%3A%7B%0A%20%20name%3A%20fragment%2C%0A%20%20one_of%3A%20%5B%0A%20%20%20%20text_fragment%2C%20binary_fragment%2C%0A%20%20%20%20toplevel_fragment%2C%20encoding_fragment%2C%0A%20%20%20%20mactab_fragment%2C%0A%20%20%5D%0A%7D%0Atype%3A%3A%7B%0A%20%20name%3A%20text_fragment%2C%0A%20%20ordered_elements%3A%5B%0A%20%20%20%20%7B%20valid_values%3A%20%5Btext%5D%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20string%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%5D%0A%7D%0Atype%3A%3A%7B%0A%20%20name%3A%20binary_fragment%2C%0A%20%20ordered_elements%3A%5B%0A%20%20%20%20%7B%20valid_values%3A%20%5Bbinary%5D%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20bytes%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%5D%0A%7D%0Atype%3A%3A%7B%0A%20%20name%3A%20toplevel_fragment%2C%0A%20%20ordered_elements%3A%5B%0A%20%20%20%20%7B%20valid_values%3A%20%5Btoplevel%5D%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20ast%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%5D%0A%7D%0Atype%3A%3A%7B%0A%20%20name%3A%20encoding_fragment%2C%0A%20%20ordered_elements%3A%5B%0A%20%20%20%20%7B%20valid_values%3A%20%5Bencoding%5D%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20ast%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%5D%0A%7D%0Atype%3A%3A%7B%0A%20%20name%3A%20mactab_fragment%2C%0A%20%20ordered_elements%3A%5B%0A%20%20%20%20%7B%20valid_values%3A%20%5Bmactab%5D%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20ast%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%5D%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20bytes%2C%0A%20%20one_of%3A%20%5B%0A%20%20%20%20%7B%20type%3A%20string%2C%20regex%3A%20%22%5E(%5B0-9a-fA-F%5D%7B2%7D%5B%20%5Cn%5D*)%2B%24%22%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20int%2C%20valid_values%3A%20range%3A%3A%5B0%2C255%5D%20%7D%2C%0A%20%20%5D%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20expectation%2C%0A%20%20one_of%3A%20%5B%0A%20%20%20%20%7B%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%7Bvalid_values%3A%5Bproduces%5D%7D%2C%0A%20%20%20%20%20%20%7Btype%3Adatum%2Coccurs%3Arange%3A%3A%5B0%2Cmax%5D%7D%2C%0A%20%20%20%20%20%20%5D%20%7D%2C%0A%20%20%20%20%7B%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%7Bvalid_values%3A%5Bdenotes%5D%7D%2C%0A%20%20%20%20%20%20%7Btype%3Amodel_value%2Coccurs%3Arange%3A%3A%5B0%2Cmax%5D%7D%2C%0A%20%20%20%20%20%20%5D%20%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bsignals%5D%7D%2Cstring%5D%7D%2C%0A%20%20%20%20%7B%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%7Bvalid_values%3A%5Band%5D%7D%2C%0A%20%20%20%20%20%20%2F%2F%20TODO%3A%20the%20min%20of%20this%20range%20should%20probably%20be%202.%0A%20%20%20%20%20%20%7Btype%3Aexpectation%2Coccurs%3Arange%3A%3A%5B1%2Cmax%5D%7D%2C%0A%20%20%20%20%20%20%5D%20%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bnot%5D%7D%2Cexpectation%5D%7D%2C%0A%20%20%5D%2C%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20extension%2C%0A%20%20%2F%2F%20continuation%20%3A%3A%3D%20%20expectation%20%20%7C%20%20extension%2B%0A%20%20one_of%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%20%20%7B%20valid_values%3A%20%5Bthen%2C%20each%5D%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%20type%3A%20fragment%2C%20occurs%3A%20range%3A%3A%5B1%2C%20max%5D%20%7D%2C%0A%20%20%20%20%20%20%20%20expectation%2C%0A%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%7D%2C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%20%20%7B%20valid_values%3A%20%5Bthen%2C%20each%5D%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%20type%3A%20fragment%2C%20occurs%3A%20range%3A%3A%5B1%2C%20max%5D%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%20type%3A%20extension%2C%20occurs%3A%20range%3A%3A%5B1%2C%20max%5D%20%7D%2C%0A%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%7D%2C%0A%20%20%5D%0A%7D%0A%0A%2F%2F%20Any%20Ion%20Value%0Atype%3A%3A%7B%20name%3Adatum%20%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20model_value%2C%0A%20%20one_of%3A%20%5B%0A%20%20%20%20model_content%2C%0A%20%20%20%20%7B%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%7Bvalid_values%3A%5Bannot%5D%7D%2C%0A%20%20%20%20%20%20model_content%2C%0A%20%20%20%20%20%20%2F%2F%20TODO%3A%20Annotations%20should%20probably%20be%20model_symtok%0A%20%20%20%20%20%20%7Btype%3Astring%2Coccurs%3Arange%3A%3A%5B1%2Cmax%5D%7D%0A%20%20%20%20%20%20%5D%20%7D%0A%20%20%5D%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20model_content%2C%0A%20%20annotations%3A%20closed%3A%3A%5B%5D%2C%0A%20%20one_of%3A%5B%0A%20%20%20%20%24null%2C%0A%20%20%20%20bool%2C%0A%20%20%20%20int%2C%0A%20%20%20%20string%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bnull%2C'null'%2C%22null%22%5D%7D%2Cmodel_type%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bint%5D%7D%2Cint%5D%7D%2C%0A%20%20%20%20%2F%2F%20TODO%3A%20how%20do%20we%20denote%20floats%3F%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bfloat%5D%7D%2Cfloat%5D%7D%2C%0A%20%20%20%20model_decimal%2C%0A%20%20%20%20model_timestamp%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bstring%5D%7D%2C%7Btype%3Acodepoint%2Coccurs%3Arange%3A%3A%5B0%2Cmax%5D%7D%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bsymbol%5D%7D%2Cmodel_symtok%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bblob%2Cclob%5D%7D%2C%7Btype%3Abytes%2Coccurs%3Arange%3A%3A%5B0%2Cmax%5D%7D%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Blist%2Csexp%5D%7D%2C%7Btype%3Amodel_value%2Coccurs%3Arange%3A%3A%5B0%2Cmax%5D%7D%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bstruct%5D%7D%2C%7Btype%3Amodel_field%2Coccurs%3Arange%3A%3A%5B0%2Cmax%5D%7D%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5B'null'%5D%7D%2Cmodel_type%5D%7D%2C%0A%20%20%5D%0A%7D%0Atype%3A%3A%7B%0A%20%20name%3A%20model_decimal%2C%0A%20%20ordered_elements%3A%5B%0A%20%20%20%20%7Bvalid_values%3A%5Bdecimal%5D%7D%2C%0A%20%20%20%20int%2C%20%2F%2F%20coefficient%0A%20%20%20%20int%2C%20%2F%2F%20exponent%0A%20%20%5D%2C%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20model_timestamp%2C%0A%20%20one_of%3A%5B%0A%20%20%20%20%7Bordered_elements%3A%5Byear%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5Byear%2Cmonth%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5Byear%2Cmonth%2Cday%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5Byear%2Cmonth%2Cday%2Chour%2Cminute%2C%7Btype%3Aoffset%2Coccurs%3Aoptional%7D%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5Byear%2Cmonth%2Cday%2Chour%2Cminute%2Csecond%2C%7Btype%3Aoffset%2Coccurs%3Aoptional%7D%5D%7D%2C%0A%20%20%20%20%2F%2F%20Last%20int%2Cint%20are%20coefficient%20and%20exponent%20for%20fractional%20seconds.%0A%20%20%20%20%7Bordered_elements%3A%5Byear%2Cmonth%2Cday%2Chour%2Cminute%2Csecond%2Cint%2Cint%2C%7Btype%3Aoffset%2Coccurs%3Aoptional%7D%5D%7D%2C%0A%20%20%5D%0A%7D%0A%0Atype%3A%3A%7Bname%3Ayear%2C%20type%3Aint%2C%20valid_values%3Arange%3A%3A%5B0%2C9999%5D%7D%0Atype%3A%3A%7Bname%3Amonth%2C%20type%3Aint%2C%20valid_values%3Arange%3A%3A%5B1%2C12%5D%7D%0Atype%3A%3A%7Bname%3Aday%2C%20type%3Aint%2C%20valid_values%3Arange%3A%3A%5B1%2C31%5D%7D%0Atype%3A%3A%7Bname%3Ahour%2C%20type%3Aint%2C%20valid_values%3Arange%3A%3A%5B0%2C23%5D%7D%0Atype%3A%3A%7Bname%3Aminute%2C%20type%3Aint%2C%20valid_values%3Arange%3A%3A%5B0%2C59%5D%7D%0Atype%3A%3A%7Bname%3Asecond%2C%20type%3Aint%2C%20valid_values%3Arange%3A%3A%5B0%2C59%5D%7D%0Atype%3A%3A%7B%0A%20%20name%3Aoffset%2C%0A%20%20regex%3A%20%22%5EZ%7C%5B%2B-%5D%5B012%5D%5B0-9%5D%3A%5B0-5%5D%5B0-9%5D%24%22%2C%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20model_type%2C%0A%20%20annotations%3A%20closed%3A%3A%5B%5D%2C%0A%20%20valid_values%3A%20%5Bbool%2Cint%2Cfloat%2Cdecimal%2Ctimestamp%2Cstring%2Csymbol%2Cclob%2Cblob%2Clist%2Csexp%2Cstruct%5D%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20codepoint%2C%0A%20%20type%3A%20int%2C%0A%20%20valid_values%3A%20range%3A%3A%5B0%2C%200x10FFFF%5D%2C%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20model_symtok%2C%0A%20%20one_of%3A%5B%0A%20%20%20%20string%2C%0A%20%20%20%20int%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Btext%5D%7D%2C%7Btype%3Acodepoint%2Coccurs%3Arange%3A%3A%5B1%2Cmax%5D%7D%5D%7D%2C%0A%20%20%20%20%2F%2F%20string%2Cint%20%3D%3D%20symtab%20name%20%2B%20offset%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Babsent%5D%7D%2Cstring%2Cint%5D%7D%0A%20%20%5D%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20model_field%2C%0A%20%20ordered_elements%3A%5Bmodel_symtok%2Cmodel_value%5D%2C%0A%7D%0A%0A%2F%2F%20Ast%20has%20special%20semantics%2C%20but%20it%20can%20be%20any%20Ion%20value%0Atype%3A%3A%7B%20name%3A%20ast%20%7D%0A&value=(in10%20(text%20'''%20%7Ba%3A1%2C%20b%3A2%7D%20%22two%22%20''')%0A%20%20%20%20%20%20(produces%20%7Bb%3A2%2C%20a%3A1%7D%20%22two%22))%0A%20%20%20%20%20%20%0A(in11%20(text%20'''%24ion_encoding%3A%3A((module%20M%20(macro_table%20(macro%20mac%20%5B%5D%201)))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(macro_table%20M))'''%0A%20%20%20%20%20%20(then%20(text%20%22(%3AM%3Amac)%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20(produces%201))%0A%20%20%20%20%20%20(then%20(text%20%22(%3AM%3A0)%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20(produces%201)))%0A%20%20%20%20%20%20(then%20(text%20%22(%3Amac)%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20(produces%201))%0A%20%20%20%20%20%20(then%20(text%20%22(%3A0)%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20(produces%201)))&type=conformance_test_file

@popematt popematt added the bug Something isn't working label May 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant