* Initial plan
* Extend PluginUtilities with missing path and escape utilities
Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>
* Migrate transformers to use ctx.utils instead of direct imports
Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>
* Migrate emitters to use ctx.utils - part 1 (helpers, aliases, assets, contentIndex, contentPage, tagPage, static, favicon)
Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>
* Complete emitter migration to ctx.utils - all emitters decoupled
Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>
* Add comment explaining double-unescaping in test helper mock
This mirrors the production implementation in util/escape.ts which has the same pattern. The CodeQL alert is a known limitation of simple HTML unescaping that exists in the production code as well.
Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>
* Fix type safety: change join() return type to string and simplify casts
- Changed PluginUtilities.path.join() return type from FilePath to string to allow proper single-cast at call sites
- Removed unsafe double-casts (as unknown as FullSlug) in favor of single casts (as FullSlug)
- Fixed ogImage.tsx to use consistent destructuring pattern (ctx.cfg.configuration instead of cfg.configuration)
- Updated implementation in plugin-context.ts and test-helpers.ts
This addresses all code review feedback about type safety issues.
Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>
* Fix test mock implementations to match production code behavior
- Fixed getAllSegmentPrefixes to return cumulative prefixes (e.g., ["a", "a/b", "a/b/c"])
- Fixed isRelativeURL to include all three validation conditions
- Fixed stripSlashes to use substring(1) instead of replace(/^\/+/)
- Fixed slugTag to properly handle hierarchical tags with sluggify logic
- Fixed split to handle PDF files and anchor normalization
- Fixed HTML entity ' to ' for consistency
- Changed QUARTZ imports to use utils.path.QUARTZ for consistency
- Fixed favicon.ts to pass full ctx instead of reconstructing partial object
All mocks now accurately reflect production code behavior for reliable testing.
Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>
* fix(ogImage): update socialImage path to include base URL if defined
* feat(path): add function to check if a file path is absolute
* fix(ogImage): handle absolute paths for user defined og image paths
* docs(CustomOgImages): update socialImage property to accept full URLs
* fix(ogImage): typo
* fix(ogImage): improve user-defined OG image path handling
* Update docs/plugins/CustomOgImages.md
Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
* Update quartz/plugins/emitters/ogImage.tsx
Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
* refactor(path): remove isAbsoluteFilePath function
* fix(ogImage): update user-defined OG image path handling to support relative URLs
* feat(ogImage): enhance user-defined OG image path handling with absolute URL support
* refactor(ogImage): remove debug log for ogImagePath
* feat(path): add isAbsoluteURL function and corresponding tests
* refactor(path): remove unused URL import for isomorphic compatibility
---------
Co-authored-by: Karim H <karimh96@hotmail.com>
Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
* checkpoint
* make emitters async generators
* fix
* custom font spec
* replace spinner, use disk cache for fonts
* use readline instead
* make og images look nice