-
Notifications
You must be signed in to change notification settings - Fork 9
feat(web): add web generator #285
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
base: main
Are you sure you want to change the base?
Conversation
Codecov ReportAttention: Patch coverage is
✅ All tests successful. No failed tests found. Additional details and impacted files@@ Coverage Diff @@
## main #285 +/- ##
==========================================
+ Coverage 71.51% 73.57% +2.06%
==========================================
Files 117 132 +15
Lines 9721 11134 +1413
Branches 590 718 +128
==========================================
+ Hits 6952 8192 +1240
- Misses 2766 2937 +171
- Partials 3 5 +2 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
const language = matches?.groups?.language ?? ''; | ||
const [copyText, setCopyText] = useState('Copy to clipboard'); | ||
|
||
const handleCopy = async text => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why not including useCopyToClipord in ui lib ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IIRC I didn't include it since it didn't fall under the "UI Component" category, it's a hook, however, if you disagree, I won't block.
"estree-util-value-to-estree": "^3.4.0", | ||
"estree-util-visit": "^2.0.0", | ||
"github-slugger": "^2.0.0", | ||
"glob": "^11.0.2", | ||
"hast-util-to-string": "^3.0.1", | ||
"hastscript": "^9.0.1", | ||
"html-minifier-terser": "^7.2.0", | ||
"mustache": "^4.2.0", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm, why?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I tried to use __<VARIABLE>__
like in the other generators, however, the JavaScript I was trying to add to the HTML broke the structure of the file. Using a library like Mustache properly escapes anything injected.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
export const TEMPLATE = ({...props}) => dedent`
<html>
${props.foo}
</html>
`;
this can work
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry if I wasn’t clear, the compiled JavaScript broke the HTML structure because it contained characters that need to be escaped to be in an HTML script.
For example, in your scenario, if props.foo
contains a </html>
, it’ll escape the sandbox.
Mustache performs all the needed escaping.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't like that we're using yet another layer of whatever freakery here. Mustache is great, but it feels like you're throing a nuke at an ant's sized problem. Not to mention adding yet another engine here will make things even more complex and costly-performance wise. Let's try to avoid throwing npm packages to any problem we encounter, shall we?
🎉 The code now dehydrates to the client so it can render without JavaScript! |
Wow 😵💫 and what about codetab |
It rehydrates and runs with JS, but if you don't have JS, you can still view the docs. I used React's SSRing |
@AugustinMauroy and I got search to finally work 🎉 |
024bbea
to
dbfe55d
Compare
@nodejs/nodejs-website @nodejs/web-infra |
I was more thinking of what I shared before. We can reconstruct what would be the method structure: methodName(arg1, arg1, arg3,...): ReturnType1 (Think the above as the method having overloads if any). These would be within a code snippet as if they were a type definition of sort (see the link to next.js docs I've attached); We do have the structure of the method which is generated by the JSON Generator (and I suppose also resides on the AST?) And then below this we would have a table with the argument names, description, etc... That IMO would look the cleanest. |
Ahh I didn't see the link reference, I understand now. Thanks! |
Yeah, I see 👀 , anyways I do feel that these are not alright, but I agree that then it is out of scope here 🙂👍
Looks great! Thanks! 😄
ok then again out of scope but ideally something to follow up on 🙂👍
The second one for sure for me! 😄
I can see that you've hidden the scrollbar... no that's not the right solution in my opinion, I think that the version picker should have a max-width so that it doesn't overflow its container (causing the horizontal scrollbar not to appear at all since it won't be needed)
Ok, sorry for all of these
Yes... I am not seeing that anymore... I 100% saw that though... I'll try to see if it happens only after certain conditions 😕
👍 |
@dario-piotrowicz for your |
Now there's an evident flickering on the search element (also on the theme toggle button) in dark mode when I refresh the page: simplescreenrecorder.mp4(PS: they flicker in light mode too but not as evidently) |
do you mind if I open self isolated issues? (as they might be easier to deal with?) or maybe an issue with sub-issues? |
Same difference, just figured catch all might be less work for you, but that's even better :-) |
Ok I'll open isolated issues there 🙂👍 |
It's actually the Orama component loading in (which moves the toggle). Once Orama fixes their components, it'll be partially statically dehydrated, filling in the space |
Sorry for not following the PR instructions earlier 🙂 Yes I did run the orama-db generation and that does enable search for me! 😃 |
I'm just concerned what happens when there is a lot of nesting, for example,
That's going to be quite a table, no? |
As a personal design preference, I quite like the expandable function signatures, I think it gives a really cool way of displaying the parameters. For events, I was thinking of it showing |
I mean sure, but any other design would also be quite the thing. I guess we could refine. For example if you have 2 variations we could have:
TABLE CONTAINING VARIATION ONE
TABLE CONTAINING VARIATION TWO? |
Okay, I'll program the table, and we'll see how it looks. |
@ovflowd (Note: This is a first draft to show what a table would look it more-or-less, i.e. |
Nice, I still think we need to add that snippet of method signature that I mentioned. This would allow us to rename the header section to be simply the method name or class name. It also helps on Search Indexing |
Yes, the draft was just for the table, but I plan to use |
With the speed improvements we've made, this generator takes roughly a minute and a half. It's not amazing, but it's better than the 2 minutes we were seeing earlier. The hottest code path is PostCSS, so once we preprocess the CSS/JSX on the ui-components side, it'll speed up more. All-in-all, the slowest code, in order of speed (slowest 1, fastest 4):
|
Fixes #7.
This PR adds the web generator.
Tasks / Issues
P1 – Must Complete Before Merge
P2 – Must complete before migration
ChangeHistory
component doesn’t render Markdown correctly. (Seeentry.changes
aren't converted to HTML #326)P3 – Can Be Done in a Follow-up
mustache
dependencyGet a preview
Footnotes
Add things as they appear, or leave review comments. ↩ ↩2 ↩3