c6eae1bcUpdate Roadmap version numbers
No breaking changes since v0.1.0.
Shota FUJI
authored at
Shota FUJI
comitted at
d61de598Client-side JavaScript to mark current ToC entry
It's useful, actually.
While some people call it eye-candy or something, I personally find it
an essential for text-heavy documents.
Shota FUJI
authored at
Shota FUJI
comitted at
8a6b9a37Minify and Highlight client-side JavaScript code
The size of JSONCanvas related code became unexpectedly big.
The overall minification shrinks around 4kB (28.17kB -> 24.47kB).
This `javascript` tagged template literal function also enables
my Neovim tree-sitter to highlight the template string as a JavaScript
code.
Shota FUJI
authored at
Shota FUJI
comitted at
415efba0Delete unused views (embeds)
Since I have changed document embeds to directly embed the HTML,
these embeds HTML are no longer used.
Shota FUJI
authored at
Shota FUJI
comitted at
85264c80Render JSONCanvas in HTML
While SVG renderer works well on sane browsers, it does not on Safari.
It's looong ignored `<foreignObject>` overflow bug ruins even fairly
straightforward usages.
Shota FUJI
authored at
Shota FUJI
comitted at
a935aa6bUpdate Roadmap
"Resolve document internal wikilink" was duplicated entry.
Shota FUJI
authored at
Shota FUJI
comitted at
f39cd4b4Client-side script to close menu on navigation (back/forward)
On menu-layout, navigating back/forward is confusing due to menu appears after
the navigation.
Shota FUJI
authored at
Shota FUJI
comitted at
76923e83Minify CSS
Before: raw=16kB, gzip=3.63kB
After: raw=12.44kB, gzip=3.27kB
Added build time (Mac mini M1): 15ms~25ms
To be honest, I don't think this compression result is not worth the
added build time. However, the reduced 3.5kB could reduce consuming memory
and CPU times... few micro seconds?
I commit this since the journey to find a CSS minify library that was compatible
with Deno is extremely tiresome...
* `cssnano` imports `caniuse` even though related optimizations are disabled.
It statically loads the module hence the access to `<CWD>` (and probably more
places like `~/.config` idk), which requires completely unnecessary broad permissions.
* `esbuild` is simple and great tool, but WASM is second-class citizen in Deno:
requires `--allow-net=deno.land` (or `esm.sh`) or `--allow-read=<vendored path>`.
One can embed WASM binary as a base64 or `JSON.parse("Uint8Array")`, but WASM
binary of ESBuild weighs 30MB. I tried to open the generated file using the latter
method and my nvim froze for minutes, which I had to `kill`.
* `lightningcss` looks great, but this is WASM too and weighs 10MB.
Better than ESBuild though.
* `clean-css` declares itself as in maintenance mode. I tested it but it loads
environment variables at init time and access to `cwd`.
In the end, CSSO is the only ESM compatible library that works on web platform.
Shota FUJI
authored at
Shota FUJI
comitted at
c6e88fe1Fix build fails when document contains lowercase link references
For unknown reasons, mdast-util-to-hast holds its reference ID in uppercase.
Shota FUJI
authored at
Shota FUJI
comitted at
a801fbb7Fix document tree UI shows every documents with same name being current
Shota FUJI
authored at
Shota FUJI
comitted at
c8f5fb26Hoist block identifer to the parent's ID
If a paragraph is more than one line, UA scrolls to the bottommost line.
This hides the rest of lines: which is not a user intended.
Shota FUJI
authored at
Shota FUJI
comitted at
242529dcAdd logging options for docs build script
Sometime I need full debug log, sometime I only need build time stats.
Or I could just want to know whether the build succeeds.
Shota FUJI
authored at
Shota FUJI
comitted at
b29abcb1Disable log color based on whether stdout is tty
It was mostly for jq. But "disabling colors because output is JSON"
is completely incorrect: it's assumption based on author's usage, not
technical constraints. I myself too sometime want to see colored JSON
output for debugging.
Shota FUJI
authored at
Shota FUJI
comitted at
3edb4ba7Align directory and document (tree UI)
Due to documents not having padding at left, I sometime confuse that
the document is at the same level to the parent directory, like this:
```
# actual
+ dir1
+ dir2
+ file1
+ file2
# confused
+ dir1
+ dir2
+ file1
+ file2
```
Shota FUJI
authored at
Shota FUJI
comitted at
1cc8ae3aReplace "Writing Samples" with "Features"
"Features" is more approachable and more common.
Shota FUJI
authored at
Shota FUJI
comitted at
1c5f9c6dPlace `<img>` as block element
This is as same as Obsidian renders.
Also, from my private testing, inline images work horribly.
This would work "okay" in most cases.
Shota FUJI
authored at
Shota FUJI
comitted at
bf4a2248Fix document tree uses actual directory name, not metadata name
The `currentPath` is from `Document.path`, which consists of metadata names.
Shota FUJI
authored at
Shota FUJI
comitted at
8bc70dc6Highlight current page in document tree
I myself sometimes confused like "wait, where am I?".
I could have add more eye-candy, but this is enough.
Shota FUJI
authored at
Shota FUJI
comitted at
47b29d02Remove unnecessary line-height from inline elements
I'm not sure the intent for those (yes, I'm the who wrote those).
`<sup>` (superscript) and `<sub>` (subscript) still have `line-height`.
Without this, they somehow dramatically expand the line and break the
vertical rhythm.
Shota FUJI
authored at
Shota FUJI
comitted at
632084fdDelete unused style
Probably related to my old blog styles.
Macana does not contain `<button>`, and even if it does, styling should
be done via class.
Shota FUJI
authored at
Shota FUJI
comitted at
04687860Do not set vertical rhythm on body
This has been causing a lot of problems.
The most important thing here is vertical rhythm is for (usually long)
textual content. In the context of documentation/blog website, contents
inside `<main>`. Other parts, such as navigation and table of contents,
are not suitable for vertical rhythm. Aesthetics and/or space effeciency
is more important than the rhythm.
Shota FUJI
authored at
Shota FUJI
comitted at
69036d6fDev docs for profiling
I tried to optimize build process so the docs can be built under 150ms.
Currently, on my M1 Mac mini, it takes 180ms~210ms. I think it's too
much for just 16 documents.
I'm not good at profiling or optimization or whatever. I suck at looking at
profiling result. What the fuck is bottom-up? But I have to profile in order
to optimize further more. Luckily, Deno/V8's profiler is easy to use and
call tree representation is intuitive even for beginers like me.
Unfortunately, most of the process time is from third-party libraries.
The most time consuming one was refractor (syntax highlighting) and the
second was hast-util-to-html or mdast-from-markdown (or inner micromark).
All of those are reasonable: refractor's "all" entrypoint (I willingfully
choose this) contains every language syntax, thus it takes a lot of time
loading and registering syntaxes. Seriealizing HTML and parsing Markdown
are, well, time-consuming considering they are written in JavaScript, which
is difficult to write performant string ops (esp. spatial efficiency).
In its current form, the most impactful performance optimization I can
think of is not emitting embed page until required. In order to do that, I
have to make significant changes to how page builder handles build queue
(or make one).
While I found out there are no low-haning fruit for temporal optimization,
I believe an experience and knowledge I gained from this should be noted and
shared anyhow. So here it is.
Shota FUJI
authored at
Shota FUJI
comitted at
8243be61Layout properly
The whole styles are copy and pasted from my old blog.
This patch tidies things up.
There still needs some maintenance, such as color tokens and line-height,
I think this is okay-ish to commit.
Shota FUJI
authored at
Shota FUJI
comitted at
fbdbe5a0Use helper for HTML class generation instead of simple `const enum`
Manual naming using `const enum` works fine. It's definitely better than using
bare string literals. However it's error-prone and difficult to maintain short class
names: even if I take care on unique prefix constraint, class names would collide inside
a namespace if the file have many class names. This problem became noticable when I
authored the `from_mdast/code.tsx`, which defines every class names for Prism tokens.
This patch frees mental overhead of carefully defining actuall class names, and
(hopefully) helps compression algorithms (e.g. gzip) to work better because of repeated
patterns after prefixes.
Shota FUJI
authored at
Shota FUJI
comitted at
48b04db3Delete unused imports
I thought it errors on `check` command since LS shows warning on unused imports.
Shota FUJI
authored at
Shota FUJI
comitted at
f81aeb55Do not fade-out document-tree and toc on non-hover environment
This effect only works when a user's primary input device is hover-capable device
(e.g. mouse, pen) or focus-navigatable device (e.g. keyboard). If a user is using
neither of those, the document-tree and toc UI is always dimmed. Or worse, a user
may think it as some kind of broken CSS.
In order to maintain legibility for non-hover environments (mostly touch-only
environments), I restricted the rule to when the primary input device is hover-capable.
This prevents the effect from running on non-hover but keyboard navigatable environemts,
such as using keyboard on touch-only device. However, as the effect is just to help
users for focusing a main content, legibility wins over it.
Shota FUJI
authored at
Shota FUJI
comitted at
49519dadImprove create/update datetime formatting, more concise and consistent
This patch reduces clutters in a datetime string and make the string more consistent
to other parts of the document.
The first and most significant problem was the datetime string is formatted using
UA's locale. The UA's locale could be different to a document's locale. This results
in inconsistent text formatting: for example, when a user viewing the page with `lang="ja"`
but UA uses "en-US", chunk of "en-US" text appears in "ja" document as a result.
The second problem is the datetime string is verbose. I can't imagine any usecase where
seconds part benefits a user (viewer).
The final problem is ugliness of the datetime string in noscript env. It's ISO-8601 string
because of timezone. I remembered that `toLocaleString` (`Intl.DateTimeFormat`) can display
timezone string, so here it is.
Even though the metadata is not properly styled and is still ugly, I'm satisfied how the
result looks good without compromising semantic markup and/or build process.
Shota FUJI
authored at
Shota FUJI
comitted at
35ce077dUse page title as a label text for Obsidian's formatting pages
With external link icons, they are no longer confusing.
This form also looks far better than bare URL.
Shota FUJI
authored at
Shota FUJI
comitted at
8526d465Style anchors using class selector, rather than type selector
Type selector, which selects all tags/elements that matches,
often causes unexpected side-effect. For example, if an internal
component includes anchor element, the default style for contents
also applys to the internal anchor, which is not desirable.
Shota FUJI
authored at
Shota FUJI
comitted at
bd077317Style syntax highlighted code block
This patch also removes annoying semi-global style for main contents.
Shota FUJI
authored at
Shota FUJI
comitted at
94b55a12Use hastscript instead of nano_jsx
The first reason for this change is tedious conversion from Markdown to components.
Since Hast does not have a concept of "Component", those needs to be converted to
custom elements first, then restored by carefully mapping the custom element nodes.
During that process, properties are transformed to HTML attributes (e.g. true -> "").
This is very error-prone and exhausting thing to write.
The second one is the quality of nano-jsx. The library is, honestly, toy-level.
Even though they promote it as "SSR First", HTML seriealization is joke: empty children
appears as `children=""`, cannot handle falsy attribute values, renders `true` attribute
value as `"true"`, etc...
Also, it's TypeScript typing is almost non-existent. Most of the exposed things are
typed as `any`. I would not call that a typed library.
While hastscript is not perfect either, it's good enough for my HTML generation usecase.
It also eliminates Mdast -> Hast -> (JSX runtime) confusing data conversion.
I choose not to write wrapper for `<Component/>` usage. It's nice, but not necessary.
In fact, normal function call is **far better** than JSX's loose and cryptic typings.
The only output changes I observed was "Module" and "Program" in "Architecture.canvas"
now overflows (thus broken in Safari). However, it's due to the new more strict CSS.
I believe it's improvement, not regression (needs to be fixed the overall JSONCanvas
stylings at some point, though).
Shota FUJI
authored at
Shota FUJI
comitted at
e635bd88Style GFM task list extension's output
The default output, which mimics GitHub's markup and styles, is horrible.
It sets `disabled` attribute that makes the element screen reader unfriendly.
Also it does not associate the text to checkbox, which is also screen reader unfriendly.
I may revisit styles in the future as the current one is not that pretty...
Shota FUJI
authored at
Shota FUJI
comitted at
49403feeFix content style having higher priority than component styles
I noticed this by seeing non-foldable callout's title being weirdly wrapped.
Shota FUJI
authored at
Shota FUJI
comitted at
9ee3d742Limit content styles only to body elements
Global styles have been a pain point.
Shota FUJI
authored at
Shota FUJI
comitted at
110d8d4eMove Hast related function inside page builder to one place
I have been felt those logics are disconnected.
Shota FUJI
authored at
Shota FUJI
comitted at
9626d6f3Fix Canvas having no color other than red and gray
Simple typo.
Shota FUJI
authored at
Shota FUJI
comitted at
d14df0a6Proper styles for callout
This work is foundation for later styling works.
Shota FUJI
authored at
Shota FUJI
comitted at
5aad74eaFix callout icon is not visible
hast-util-raw seems to lowercases every tagnames.
Shota FUJI
authored at
Shota FUJI
comitted at
432427c4Fix default opened callout is collapsed
hast-util-raw seems to have a bug on attribute handling: it mistake
an empty string as an absence of value.
Shota FUJI
authored at
Shota FUJI
comitted at
eac79b36Do not perform actual file write more than once on same file
Shota FUJI
authored at
Shota FUJI
comitted at
a9bf5e66File embed for JSONCanvas
Refactor for HTML rendering is to reduce unnecessary Mdast->Hast conversion.
Shota FUJI
authored at
Shota FUJI
comitted at
a1bcc49aAggregate mdast fromMarkdown extensions into one
Same as micromark's one.
Shota FUJI
authored at
Shota FUJI
comitted at
cbb403ecMake OFM image size parser to Mdast extension
I noticed an extension can be just a transform function when implementing OFM callout extension.
This is good.
Shota FUJI
authored at
Shota FUJI
comitted at
195452c5Aggregate micromark extensions into one
For usability. It's good abstraction IMO.
Inclusion of gfm is actually valid, as OFM includes subset of GFM.
Shota FUJI
authored at
Shota FUJI
comitted at
627b53c5Add comments on Safari's SVG rendering bug
I tried to apply workaround. It surely fixed position problem; however, it completely
ruined the rendering of non-overflowing elements. Safari is the new IE, yes.
If I could solve scroll (layout) problem on the canvas rendering, I'll switch to
SVG + HTML approach. It's ridiculous to abandon the most correct and semantic document
due to one problematic broken browser, but this is what we got. Cult made of normies and
fanboys encouraging unhealthy and uncompetetive web. At least Chrome does not have
this lot of rendering/compositing bugs.
Shota FUJI
authored at
Shota FUJI
comitted at
78f20ea9Implement complete JSONCanvas renderer
Even though files are 404 and Safari goes wild, basic rendering feature is done.
Shota FUJI
authored at
Shota FUJI
comitted at
4be26f81Move JSONCanvas layout related functions out to separate file
I wanted to add sub-components, but the file was large.
Shota FUJI
authored at
Shota FUJI
comitted at
772a7246Text node rendering for JSONCanvas
It's easier than I thought.
Shota FUJI
authored at
Shota FUJI
comitted at
984c50deOFM Comment extension (parser/Hast converter)
This is not much useful, though.
Shota FUJI
authored at
Shota FUJI
comitted at
a10dc8fcSyntax highlighting feature
Though styles are almost nothing. It's too early to add styles.
I considered - actually researched almost a day - tree-sitter for highlighting.
However, the state of the ecosystem is not ready to use for web/WASM environment.
* Some parsers use unexported C-API, which causes runtime panic.
* Markdown parser requires block parsing -> inline parsing per blocks.
* Generated parsers are large in general (e.g. TSX = ~3MB in WASM,
~5MB in `Uint8Array(JSON.parse("[0,...]"))` form).
* Parser alone is barely usable: query, especially tailor made highlight query is
needed for **each parsers**. (most of the parser I saw have "highlight.scm" but
it seems to be for reference)
While refractor requires additional tree-traversal for removing too generic
classes, I believe this is way too efficient and reliable compare to tree-sitter
(and its ecosystem) in its current state.
Shota FUJI
authored at
Shota FUJI
comitted at
b1d1fb2eDo not use filesystem timestamp for docs build
Git discards timestamps.
Shota FUJI
authored at
Shota FUJI
comitted at
10320234Fix build fails on frontmatter on but some documents have no frontmatter
Shota FUJI
authored at
Shota FUJI
comitted at
bff3e60cCreation and update timestamp in metadata
This is essential for me. This also enables user to sort documents based on
update or creation date.
Shota FUJI
authored at
Shota FUJI
comitted at
549a169cRendering callouts
Renders ugly. Styles are global. No colors. Links inside are not resolved.
However, this satisfies minimum required functionality and semantically
correct (except the broken links).
This still needs work so title part will be represented as a Mdast children
and later Mdast utility can work on that (I mean, link resolver).
I'll add appropriate styles at final styling process.
Shota FUJI
authored at
Shota FUJI
comitted at
be56e8d4OFM Callout extension Mdast utility
This is implemented as a transformer. I tried to implemented from syntax parser
but micromark's documentation on document parser (or, say, architecture as a whole)
is not great and unable to do that. Majority of the time I wasted was battling against
default parsers and undocumented APIs.
Surprisingly, this transformer approach is pretty robust. Phrasing parsing is already
done at the blockquote parser so I just needed split & replace. Easy.
Shota FUJI
authored at
Shota FUJI
comitted at
2eff673bFix TreeBuilder can't resolve assets without file extension
Shota FUJI
authored at
Shota FUJI
comitted at
55489dccMove ignore functionality to independent one
The problem is, "shortest path when possible" resolution
looks up for the ignored directories and files even if
it was ignored at the scan phase.
Shota FUJI
authored at
Shota FUJI
comitted at
4ad002ffUse separate GitHub Actions cache for each workflow
Deno does not download every modules listed in the lockfile.
Instead, it lazily downloads imported file: thus, the contents of
`$DENO_DIR` depends on "what module Deno loaded". Since workflows
run different entrypoints (deploy=docs/build.ts, test=test files),
only one of workflow benefit from cache and others could face a
lot of cache misses.
Shota FUJI
authored at
Shota FUJI
comitted at
4892e170Ignore CI cache directory from Deno checks
Otherwise a bunch of errors appears.
Shota FUJI
authored at
Shota FUJI
comitted at
13fc4272GitHub Actions for code validity
In case when I forgot to run these command on my machine.
Shota FUJI
authored at
Shota FUJI
comitted at
4ea55fd1Cache Deno intermediate files on GitHub Actions
In order to reduce build time.
Shota FUJI
authored at
Shota FUJI
comitted at
d33714c6"Shortest path when possible" link resolution
This is essential as Obsidian made it default (really, wtf?)
Shota FUJI
authored at
Shota FUJI
comitted at
87f677a9Remove garbage file
I guess Obsidian does not have proper file system access restriction / validation.
Shota FUJI
authored at
Shota FUJI
comitted at
5fa6adc7Support for absolute path resolution and extensions-less path
Even though Obsidian docs says it's not for Markdown link, it uses
the non-relative / extension-less path such as when it auto-update
paths on file move/rename.
Shota FUJI
authored at
Shota FUJI
comitted at
70fda17cFix document path ignores metadata name returned by Content Parser
Shota FUJI
authored at
Shota FUJI
comitted at
2356b4e7Add license information on docs copyright footer
Without the license attribution, strictly speaking, anyone clicked "Fork" on GitHub
and pushed their own patch to master branch, they violates the CC-BY-4.0 license.
Shota FUJI
authored at
Shota FUJI
comitted at
e4631a60Fix asset paths are one depth higher
This path resolution things need to be reworked fundamentally.
Shota FUJI
authored at
Shota FUJI
comitted at
0a64c599Add image size attribute sample on docs
It's not a big syntax extension, but it definitely is different to CommonMark (and GFM).
Shota FUJI
authored at
Shota FUJI
comitted at
41e7b19fMake Markdown samples page more user friendly
The pages have been test cases. User don't have an idea just by telling
"here is GFM samples."
Shota FUJI
authored at
Shota FUJI
comitted at
202533b0Add source code for the GFM samples
Without Markdown source code, people not familier GFM have no clue what those are.
Shota FUJI
authored at
Shota FUJI
comitted at
a2d7266aDo not save user provided assets to fixed location
User may use those assets in other places. In that case, the build directory
ends up containing duplicated asset files.
Shota FUJI
authored at
Shota FUJI
comitted at
fa19d6f4Use ".assets" instead of "assets"
The latter would conflict with "Assets". Risk is low, but it would be difficult
for user to debug this.
Shota FUJI
authored at
Shota FUJI
comitted at
06de59f1Resolve image asset file path
This mechanism is essential as Macana have separate file I/O.
Shota FUJI
authored at
Shota FUJI
comitted at
aa174285Add "Default Document" feature
The primary motivation is to set the link destination for header logo.
IMO, websites putting logo on the sticky header or appbar without making it a link
to the top/home page is EVIL.
This also improved usability by enabling generation of topmost `index.html`, where
user would land when they directly put domain name on browser address bar.
This can be polished more, such as "specify default document under this directory",
but I'm satisfied with the current implementation. It's enough.
Shota FUJI
authored at
Shota FUJI
comitted at
4ada2b92Image size annotation Markdown extension from Obsidian Flavored Markdown
Shota FUJI
authored at
Shota FUJI
comitted at
44036205Website logo on header
This isn't just an eye candy: similar looking websites need each logos, otherwise
visitor would confuse.
Shota FUJI
authored at
Shota FUJI
comitted at
e2335bfaDocument sorting
This is crucial, as the order of file / directories are not
guranteed. Escpecially working on cross-platform.
Shota FUJI
authored at
Shota FUJI
comitted at
0394d2d4Highlight Markdown extension from Obsidian Flavored Markdown
This patch also works as foundation / reference code for other internal Markdown extensions.
Shota FUJI
authored at
Shota FUJI
comitted at
66b67ed0Simplify content parsing / metadata generation
- Remove Metadata Parser
- Tree Builder now is also responsible for generating document metadata
- Content Parser now can return document metadata
The major factor motivating this refactor is the last bullet point.
I wrote Metadata Parser with YAML frontmatter parsing...but that is definetely
out of scope. What if one want to use HTML as a document and use `<title>`
element? What if one want to use JPEG as a document and use EXIF for title and
name? At all, metadata derived by content requires content parsing, thus Content
Parser returns document metadata.
Behaviors and options existed in VaultParser (Metadata Parser) and Tree Parser
are re-implemented as a more flexible plugin, TreeBuildStrategy. I noticed
those options are, in the end, `map` and `filter`. This design maintains both
customizability and ease-of-use.
Maybe the TreeBuildStrategy should be more generic so it's defined in the generic
Tree Builder interface side (`tree_builder/interface.ts`). But I kept this form
as I don't feel necessity for now. Maybe change later.
Shota FUJI
authored at
Shota FUJI
comitted at
8766e56aMove all data type definition into single place
Due to each modules owning data models, refactoring and sharing was difficult.
Shota FUJI
authored at
Shota FUJI
comitted at
140c1af0JSONCanvas support
This is not complete. Before supporting Markdown parsing inside Node, I have to
redesign metadata parsing flow. Messing Content Parser first would make the redesign
more difficult. Also, I believe this state of implementation is good enough to commit.
The scope is HUGE.
Shota FUJI
authored at
Shota FUJI
comitted at
c91ff476Move Markdown parsing out of page builder
This makes Page Builder more lightweight.
Shota FUJI
authored at
Shota FUJI
comitted at
862b4694Remove restriction on document name and use them as much as possible
Due to the restriction, URI (path) construction has been mess.
This change makes document names as a Single Source of Truth for URI.
Shota FUJI
authored at
Shota FUJI
comitted at
be6f89e1Human friendly docs directory names
It's ugly. Changing directory names directly was worse due to
URL becoming ugly also.
Shota FUJI
authored at
Shota FUJI
comitted at
cf7e93b6Removed locale assumptions
This is better than assuming top-level directories as a locale or entire Vault consists of
single locale. Large part is flexibility: one can choose between `<lang>/<..contents..>` structure
and `<..contents..>/<lang>` structure. In addition to the flexibility, directory name can be more
human friendly, such as "English" rather than "en".
This change eliminates the complexity of handling default language not having path prefix.
Thanks to this simplification, I can focus on path/name handling more.
The last notable change is replace of "locale" to "lang". I initially thought locale would be
appropriate as it also covers formatting. However, as the output of this program is (mostly)
public viewable website, the content SHOULD NOT specify which locale to use. Instead, UA is
responsible for deciding which locale to use for formatting.
Shota FUJI
authored at
Shota FUJI
comitted at
3acf36e6Display every locales' content on navigation tree
As this page layout uses tree for site navigation, I thought this presentation has
the best discoverability and usablity. Although the `en/` links does not work at the
moment, I'll change path construction strategy so it's kept as-is.
Shota FUJI
authored at
Shota FUJI
comitted at
6411ac4bBasic page builder
Although fundamental data models need improvements. Especially path related data.
Shota FUJI
authored at
Shota FUJI
comitted at
c3d0fbb7Simplify architecture further
The "Asset" thing existed because initially both Tree Builder and Page Builder
produced assets. However, because of architecture changes I did earlier, Tree
Builder no longer produces assets. That change and this change increase the scope
of Page Builder massively, but I believe this is far better abstract compared to
the previous ones.
For instance, if I were to create an Asset Plugin for CSS postprocessing, what
I/F needed for that? Even with this simple case, the I/F would be messy because
a number of the resulting artifacts could be larger than the input, such as when
the source CSS file imports other files. And, more (probably) important plugin,
is image optimisation. However, that task requires caller (= Page Builder) to
know the result in advance: e.g. a plugin generates WebP and Avif from JPEG file
and optimises the JPEG file but Page Builder can't use the former two because
it needs to know the plugin produces those files and modify `<img>` tag to
`<picture>` tag with corresponding `<source>` tags and `<img>` tag. Considering
these, I concluded the "Asset Manager" and "Asset Plugin" system are useless at most.
Again, this make Page Builder more fat. But what kind of website assets are needed
and how to generate those are differs by websites, at all. Page Builder need to be fat.
Shota FUJI
authored at
Shota FUJI
comitted at
28fa1e76Unexpected overwrite guard for FileSystem Writer
This is better as a middleware, because otherwise every writer implementation
needs to write their own guard.
Shota FUJI
authored at
Shota FUJI
comitted at
6e191af6Disable require-await lint rule
The bloat and stupidity of the current JS/TS "recommended" lint ecosystem is astonishing.
Shota FUJI
authored at
Shota FUJI
comitted at
d7629394Simplify architecture data flow
"Who own the control?" was not clear.
Shota FUJI
authored at
Shota FUJI
comitted at
8ade6613Validate generated document tree
If Tree Builder does not check its output, then Page Builder has to verify the document tree
and abort, which is not only messing responsibility but error-prone.
Shota FUJI
authored at
Shota FUJI
comitted at
0ff591a1Move filesystem_reader to project root
To reflect the architecture change.
Shota FUJI
authored at
Shota FUJI
comitted at
3e52c72fChange architecture and Create glossary
The previous archtecture too focused on flexibility and that makes grapsing the whole
picture hard and designing interfaces very difficult. It also suffers from the absense
of control/data owner: one can't determine which module has the ownership of whole
generation process.
Shota FUJI
authored at
Shota FUJI
comitted at