-
Notifications
You must be signed in to change notification settings - Fork 10
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% 72.15% +0.64%
==========================================
Files 117 131 +14
Lines 9721 10969 +1248
Branches 590 676 +86
==========================================
+ Hits 6952 7915 +963
- Misses 2766 3047 +281
- Partials 3 7 +4 ☔ 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 |
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):
|
Let's prioritze the publishing of ui-components; Is @Harkunwar working on it? Regarding Terser, let's see what we can move to ESBuild or Rollup. |
Terser is specifically for HTML minification, everything else (CSS/JS) is minified by ESBuild. I wonder if we can configure preact to minify during generation 🤔? |
EDIT:
|
Hm? How? |
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