Commit Graph

3 Commits

Author SHA1 Message Date
Copilot
c3de4a8c11
refactor: complete BuildCtx immutability and update decoupling roadmap (#6)
* Initial plan

* refactor: remove BuildCtx mutation from FrontMatter plugin

- Remove temporary cast to mutable allSlugs array
- Move alias collection to build orchestration layer
- Update ctx.allSlugs immutably after parsing
- Apply same pattern to incremental rebuild
- Verified alias functionality works correctly

Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>

* fix: ensure alias collection happens before filtering in rebuild flow

Move alias collection before filterContent() in rebuild flow to match
initial build flow. This ensures consistent behavior where aliases from
all markdown files (including those that will be filtered out) are
included in ctx.allSlugs in both build scenarios.

Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>

* refactor: simplify collectAliases using functional array methods

Replace imperative for-loop with declarative filter/flatMap chain for
better readability and conciseness. Functionally equivalent but more
idiomatic TypeScript.

Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>

* docs: update roadmap with completion status for decoupling phases

Mark phases 1-5 as completed with detailed status notes:
- Phase 1 (Foundation): vfile-schema, plugin-context, test-helpers
- Phase 2 (Utility Abstraction): ctx.utils migration complete
- Phase 3 (Component Decoupling): component registry created
- Phase 4 (Immutability): BuildCtx readonly, alias collection refactored
- Phase 5 (Full Migration): all plugins migrated to new pattern

Add implementation status summary showing all objectives achieved.

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>
2025-11-16 23:44:20 +01:00
Copilot
06c8ff10f1
refactor: implement plugin decoupling foundation (Phases 1-5) (#3)
* Initial plan

* docs: format design document for decoupling strategy

Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>

* feat: implement Phase 1-4 of plugin decoupling strategy

- Created centralized vfile-schema.ts with all VFile data type definitions
- Created plugin-context.ts with PluginUtilities abstraction layer
- Created test-helpers.ts for plugin testing utilities
- Made BuildCtx readonly to prevent plugin mutations
- Added MutableBuildCtx for build orchestration layer
- Updated components to not mutate ctx.trie
- Updated FrontMatter plugin with temporary cast for backward compatibility
- Updated TransformOptions to accept ReadonlyArray

Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>

* feat: add plugin utilities to BuildCtx and document plugin decoupling

- Added utils property to BuildCtx with createPluginUtilities()
- Documented plugin data dependencies with JSDoc comments on transformers and filters
- Created comprehensive plugin migration guide in docs/PLUGIN_MIGRATION.md
- Updated plugin types.ts with guidance on using PluginContext
- All plugins now have access to ctx.utils for path, resource, and escape utilities

Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>

* docs: add implementation and security summaries

- Created IMPLEMENTATION_SUMMARY.md documenting all phases completed
- Created SECURITY_SUMMARY.md with CodeQL scan results
- All security checks passed with 0 vulnerabilities
- Complete documentation of changes, decisions, and impact

Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>

* docs: add guidance for custom plugins extending vfile data

- Added section "Adding Custom VFile Fields" to PLUGIN_MIGRATION.md
- Demonstrates TypeScript module augmentation for custom fields
- Shows best practices for extending vfile data in third-party plugins
- Clarifies that centralized schema doesn't prevent custom extensions

Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>

* refactor: address code review feedback

- Remove `any` type annotations from component map callbacks (Breadcrumbs, FolderContent)
- Fix test-helpers: change `config` to `cfg` to match BuildCtx interface
- Add `trie: undefined` to mock context for completeness
- Add missing vfile fields to schema: text, blocks, htmlAst, hasMermaidDiagram
- Make Argv properties truly readonly with ReadonlyArgv type
- Add documentation explaining module augmentation pattern is intentional
- Document FrontMatter mutation as known technical debt with timeline

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>
2025-11-16 16:16:52 +01:00
Copilot
ad55761811
docs: add plugin decoupling design document (#2)
* Initial plan

* Add comprehensive plugin decoupling design document

Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>

* Address code review feedback: fix incomplete types and missing files

- Add missing transformer files to Appendix A (gfm, linebreaks, oxhugofm, roam)
- Complete emit/partialEmit return types in QuartzEmitterPluginInstance
- Export TocEntry interface in vfile-schema to fix reference issue
- Add missing externalResources method to QuartzTransformerPluginInstance

Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>

* Address code review: add imports, fix component example, clarify interfaces, update file count

- Add missing import statements to all code examples (vfile-schema, plugin-context, registry, emitter types, test helpers)
- Fix component example to properly use QuartzComponentConstructor pattern
- Remove redundant externalResources from init() return type to avoid ambiguity
- Add placeholder implementations for helper functions in test example
- Update total file count from ~65 to ~71 to match breakdown (3+13+2+14+30+5+4)

Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>

* Address code review: fix type references, add missing properties, improve examples

- Fix JSResourceOptions/CSSResourceOptions to use actual JSResource/CSSResource types
- Add missing externalResources property to QuartzEmitterPluginInstance
- Clarify that requiredComponents is only for emitters, not transformers
- Fix TOC slug comment to indicate no "#" prefix (e.g., "some-heading")
- Expand frontmatter interface to include all fields from actual implementation
- Improve migration guide with complete example showing type import pattern
- Add skeleton implementations for test helper mock functions with realistic return types

Co-authored-by: saberzero1 <8161064+saberzero1@users.noreply.github.com>

* Address code review: fix imports, add required fields, simplify types

- Fix QuartzVFileData import from "./vfile-schema" instead of "./plugin-context"
- Add all missing import statements for types used in test helpers
- Add required config fields (enableSPA, enablePopovers, analytics, ignorePatterns, defaultDateType, theme)
- Import TocEntry type alongside QuartzVFileData in migration guide
- Simplify resource creation to separate createExternalJS/createInlineJS functions
- Remove circular import of ChangeEvent from "./types" (already defined in that file)
- Fix enableToc type to boolean | string for consistency with other frontmatter fields
- Update mock utilities to match new resource creation pattern

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>
2025-11-16 14:11:50 +01:00