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

JSONSchema using schemasafe adaptor failing runtime in SPA mode #484

Open
1 task done
h7kanna opened this issue Sep 19, 2024 · 21 comments
Open
1 task done

JSONSchema using schemasafe adaptor failing runtime in SPA mode #484

h7kanna opened this issue Sep 19, 2024 · 21 comments
Labels
documentation Improvements or additions to documentation

Comments

@h7kanna
Copy link

h7kanna commented Sep 19, 2024

  • Before posting an issue, read the FAQ and search the previous issues.

Description
Schemasafe adapter throwing runtime error

sveltekit-superforms….js?v=e66d4914:2613 Uncaught (in promise) TypeError: validator is not a function
    at cachedValidator (sveltekit-superforms…?v=e66d4914:2613:30)
    at async Object.validate (sveltekit-superforms…?v=e66d4914:2626:25)
    at async Form_validate (sveltekit-superforms…?v=0dbc1997:2868:16)
    at async Form_clientValidation (sveltekit-superforms…?v=0dbc1997:2948:20)

App is created by following the documentation at https://superforms.rocks/concepts/spa#without-a-pagets-file

SvelteLab sample
https://www.sveltelab.dev/?provider=github&owner=h7kanna&repo=superforms-schemasafe

@h7kanna h7kanna added the bug Something isn't working label Sep 19, 2024
@ciscoheat
Copy link
Owner

This is working for me when I submit (without constraints, to see the JSON Schema error messages), how to reproduce it?

@ciscoheat ciscoheat added the question Further information is requested label Sep 20, 2024
@h7kanna
Copy link
Author

h7kanna commented Sep 20, 2024

This is working for me when I submit (without constraints, to see the JSON Schema error messages), how to reproduce it?

Screenshot 2024-09-20 at 9 25 38 AM

@ciscoheat
Copy link
Owner

Can you link to a saved version on SvelteLab, otherwise I cannot see what has been modified?

@h7kanna
Copy link
Author

h7kanna commented Oct 5, 2024

Hi, I am not sure what it means by saved version.
I did create a new svelte app and opening it on the SvelteLab.

In the SvelteLab link above you need to go to /jsonschema route and fill the form and on submit it throws error in the browser console.

Source for the page for the usage here https://github.com/h7kanna/superforms-schemasafe/blob/main/src/routes/jsonschema/%2Bpage.svelte

Note : I was not able replicate it exactly using the project template so created a sample sveltekit app

I am able to open it in the SvelteLab
https://www.sveltelab.dev/?provider=github&owner=h7kanna&repo=superforms-schemasafe

@ciscoheat
Copy link
Owner

You need to login at SvelteLab and save it, so it gets a shorter url.

@h7kanna
Copy link
Author

h7kanna commented Oct 5, 2024

@ciscoheat ciscoheat added confirmed Confirmed bug, will be worked upon in a near release. and removed question Further information is requested labels Oct 6, 2024
@ciscoheat
Copy link
Owner

I'll take a look and see what can be done for the next release.

@ciscoheat
Copy link
Owner

This project works locally for me, but not in SvelteLab, so it needs further investigation. Does it work for you locally (Node, VS Code)?

@ciscoheat ciscoheat added the question Further information is requested label Oct 18, 2024
@h7kanna
Copy link
Author

h7kanna commented Oct 21, 2024

Hi, It does not work in local.

Verified in

OS: macOS 15.0.1
Platform: Darwin OS arm64
Browsers:

  • Chrome Version 130.0.6723.59 (Official Build) (arm64)
  • Firefox 131.0.3 (aarch64)

Node: v20.17.0

Console:

sveltekit-superforms_adapters.js?v=56fe33c9:2613 Uncaught (in promise) TypeError: validator is not a function
    at cachedValidator (sveltekit-superforms_adapters.js?v=56fe33c9:2613:30)
    at async Object.validate (sveltekit-superforms_adapters.js?v=56fe33c9:2626:25)
    at async Form_validate (sveltekit-superforms.js?v=56fe33c9:2868:16)
    at async Form_clientValidation (sveltekit-superforms.js?v=56fe33c9:2948:20)
cachedValidator @ sveltekit-superforms_adapters.js?v=56fe33c9:2613
await in cachedValidator
(anonymous) @ sveltekit-superforms.js?v=56fe33c9:3135
setTimeout
NextChange_setHtmlEvent @ sveltekit-superforms.js?v=56fe33c9:3134
Tainted_update @ sveltekit-superforms.js?v=56fe33c9:3264
set @ sveltekit-superforms.js?v=56fe33c9:2839
input1_input_handler @ +page.svelte:36
Show 5 more frames
Show lessUnderstand this errorAI
sveltekit-superforms_adapters.js?v=56fe33c9:2613 Uncaught (in promise) TypeError: validator is not a function
    at cachedValidator (sveltekit-superforms_adapters.js?v=56fe33c9:2613:30)
    at async Object.validate (sveltekit-superforms_adapters.js?v=56fe33c9:2626:25)
    at async Form_validate (sveltekit-superforms.js?v=56fe33c9:2868:16)
    at async Form_clientValidation (sveltekit-superforms.js?v=56fe33c9:2948:20)
cachedValidator @ sveltekit-superforms_adapters.js?v=56fe33c9:2613
await in cachedValidator
onBlur @ sveltekit-superforms.js?v=56fe33c9:3448
Show 2 more frames
Show lessUnderstand this errorAI

@paradoxe
Copy link

paradoxe commented Oct 28, 2024

@ciscoheat did you check the /jsonschema route on the provided example ? Otherwise I made another project without the input constraints here: https://www.sveltelab.dev/x2esljhbjk8tb7k
I suspect the issue is related to the dynamic module import of the schemasafe library in HMR mode...

@gosongying
Copy link

Hello, is there any update on this issue? I'm encountering it as well.

@ciscoheat
Copy link
Owner

I suspect the issue is related to the dynamic module import of the schemasafe library in HMR mode...

Any ideas why this is the case? It works with other adapters without any problems. It's strange that it works for me locally (in HMR mode).

@ciscoheat ciscoheat added help wanted Extra attention is needed and removed question Further information is requested labels Nov 4, 2024
@LickABrick
Copy link

LickABrick commented Nov 21, 2024

Hi, I have the same issue (comparable setup to @h7kanna) is there any workaround to get around this? I don't have any constraints configured (as I don't need them yet).

@ciscoheat
Copy link
Owner

The workaround is not to use the adapter client-side, as it seems to work fine on the server. I cannot reproduce it locally, so it's hard to know what goes wrong (when building, most likely).

@LickABrick
Copy link

Ah that's a shame. I actually am using Tauri and it allows the user to define forms using a JSON file which is read from the local file system, this JSON file is also used to create the schema for the form as the form is dynamic. So in my case I don't really have a backend.

Is there any other way I create a schema dynamically based on user input (if you want me to create a seperate issue let me know)?

@paradoxe
Copy link

paradoxe commented Nov 22, 2024

Superform is excellent for fullstack Typescript Sveltkit apps. However, when it comes to SPA with OpenAPI schema, like in my case with a Python backend. I ended up using HeyApi for generating Typescript types and schema objects, that I use apply browser builtin validations on the client. The form submissions are handled with Pydantic on the backend. I hope this helps...

@ciscoheat
Copy link
Owner

If one of you can reproduce it locally with one of the Sveltelab environments referenced earlier, I'm happy to take a look at it.

@LickABrick
Copy link

From https://www.sveltelab.dev/x2esljhbjk8tb7k I've done: Project > Download > Unzip > Open in VSCode > npm install > npm run dev > open in browser > press Submit > Get error:
image

When I open the sveltelabs in the browser I also get the error without changing anything. I use nodejs 23.2

@ciscoheat
Copy link
Owner

Try to tell Vite to pre-bundle the validator library when building, something like:

vite.config.ts

import { sveltekit } from "@sveltejs/kit/vite";
import { defineConfig } from "vite";

export default defineConfig({
  plugins: [sveltekit()],
  optimizeDeps: {
    include: ["@exodus/schemasafe"],
  },
});

@LickABrick
Copy link

@ciscoheat thanks this seems to fix it!

@ciscoheat
Copy link
Owner

Great! I'll add it to the documentation for the schemasafe adapter.

@ciscoheat ciscoheat removed bug Something isn't working help wanted Extra attention is needed labels Dec 2, 2024
@ciscoheat ciscoheat added documentation Improvements or additions to documentation and removed confirmed Confirmed bug, will be worked upon in a near release. labels Dec 2, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

5 participants