Files
quartz-website/.turbo/turbo-test.log
T

1313 lines
35 KiB
Plaintext

> @jackyzha0/quartz@5.0.0 test /home/saberzero1/Repos/dev-mode/repos/quartz
> tsx --test
TAP version 13
# Subtest: symlinkOrCopySync
# Subtest: creates a symlink on success
ok 1 - creates a symlink on success
---
duration_ms: 10.347298
type: 'test'
...
# Subtest: silently succeeds when link already exists (EEXIST)
ok 2 - silently succeeds when link already exists (EEXIST)
---
duration_ms: 1.222197
type: 'test'
...
# Subtest: re-throws non-EPERM errors
ok 3 - re-throws non-EPERM errors
---
duration_ms: 1.180418
type: 'test'
...
# Subtest: falls back to junction on Windows EPERM
ok 4 - falls back to junction on Windows EPERM
---
duration_ms: 1.189624
type: 'test'
...
# Subtest: falls back to copy when both symlink and junction fail on Windows
ok 5 - falls back to copy when both symlink and junction fail on Windows
---
duration_ms: 1.322496
type: 'test'
...
# Subtest: does not fall back on EPERM when not on Windows
ok 6 - does not fall back on EPERM when not on Windows
---
duration_ms: 0.863018
type: 'test'
...
1..6
ok 1 - symlinkOrCopySync
---
duration_ms: 17.312714
type: 'suite'
...
# Subtest: symlinkOrCopy
# Subtest: creates a symlink on success
ok 1 - creates a symlink on success
---
duration_ms: 7.81563
type: 'test'
...
# Subtest: silently succeeds when link already exists (EEXIST)
ok 2 - silently succeeds when link already exists (EEXIST)
---
duration_ms: 3.541694
type: 'test'
...
# Subtest: falls back to copy when both symlink and junction fail on Windows
ok 3 - falls back to copy when both symlink and junction fail on Windows
---
duration_ms: 3.69308
type: 'test'
...
# Subtest: does not fall back on EPERM when not on Windows
ok 4 - does not fall back on EPERM when not on Windows
---
duration_ms: 1.121286
type: 'test'
...
1..4
ok 2 - symlinkOrCopy
---
duration_ms: 16.678677
type: 'suite'
...
# Unknown page frame "nonexistent", falling back to "default". Available frames: default, full-width, minimal
# Unknown page frame "totally-unknown", falling back to "default". Available frames: default, full-width, minimal, custom-test-frame
# Subtest: resolveFrame
# Subtest: returns DefaultFrame for undefined
ok 1 - returns DefaultFrame for undefined
---
duration_ms: 0.809538
type: 'test'
...
# Subtest: returns DefaultFrame for 'default'
ok 2 - returns DefaultFrame for 'default'
---
duration_ms: 0.152167
type: 'test'
...
# Subtest: returns named built-in frame
ok 3 - returns named built-in frame
---
duration_ms: 0.199626
type: 'test'
...
# Subtest: returns DefaultFrame for unknown frame name
ok 4 - returns DefaultFrame for unknown frame name
---
duration_ms: 0.701093
type: 'test'
...
# Subtest: plugin-registered frame takes priority
ok 5 - plugin-registered frame takes priority
---
duration_ms: 0.167897
type: 'test'
...
# Subtest: returns DefaultFrame for unknown name even with plugin frames registered
ok 6 - returns DefaultFrame for unknown name even with plugin frames registered
---
duration_ms: 0.244692
type: 'test'
...
1..6
ok 3 - resolveFrame
---
duration_ms: 3.307502
type: 'suite'
...
# Component "foo" is being overwritten by src2
# Subtest: register and get
# Subtest: registers a component and retrieves it by name
ok 1 - registers a component and retrieves it by name
---
duration_ms: 0.64098
type: 'test'
...
# Subtest: returns undefined for unregistered names
ok 2 - returns undefined for unregistered names
---
duration_ms: 0.279297
type: 'test'
...
# Subtest: overwrites component from different source
ok 3 - overwrites component from different source
---
duration_ms: 0.72562
type: 'test'
...
1..3
ok 4 - register and get
---
duration_ms: 2.346599
type: 'suite'
...
# Subtest: instantiate
# Subtest: returns a component instance from a constructor
ok 1 - returns a component instance from a constructor
---
duration_ms: 1.233718
type: 'test'
...
# Subtest: caches instances by constructor + options
ok 2 - caches instances by constructor + options
---
duration_ms: 0.33407
type: 'test'
...
# Subtest: different options produce different instances
ok 3 - different options produce different instances
---
duration_ms: 0.175021
type: 'test'
...
# Subtest: undefined options and no-arg call produce same cache key
ok 4 - undefined options and no-arg call produce same cache key
---
duration_ms: 0.108114
type: 'test'
...
1..4
ok 5 - instantiate
---
duration_ms: 2.19369
type: 'suite'
...
# Subtest: getAllComponents
# Subtest: deduplicates components registered under multiple names
ok 1 - deduplicates components registered under multiple names
---
duration_ms: 0.246746
type: 'test'
...
# Subtest: reuses cached instance from prior instantiate call
ok 2 - reuses cached instance from prior instantiate call
---
duration_ms: 0.212641
type: 'test'
...
# Subtest: skips components that fail to instantiate
ok 3 - skips components that fail to instantiate
---
duration_ms: 0.557683
type: 'test'
...
1..3
ok 6 - getAllComponents
---
duration_ms: 1.152325
type: 'suite'
...
# Subtest: setOptionOverrides and cache invalidation
# Subtest: stores and retrieves option overrides
ok 1 - stores and retrieves option overrides
---
duration_ms: 0.211429
type: 'test'
...
# Subtest: merges with existing overrides
ok 2 - merges with existing overrides
---
duration_ms: 0.111962
type: 'test'
...
# Subtest: clears instance cache when overrides change
ok 3 - clears instance cache when overrides change
---
duration_ms: 0.111701
type: 'test'
...
# Subtest: ignores empty or undefined overrides
ok 4 - ignores empty or undefined overrides
---
duration_ms: 0.084078
type: 'test'
...
1..4
ok 7 - setOptionOverrides and cache invalidation
---
duration_ms: 0.623196
type: 'suite'
...
# Warning: Skipping circular transclusion: pageA -> pageA
# Warning: Skipping circular transclusion: self -> self
# Subtest: renderTranscludes
# Subtest: resolves a single page transclusion
ok 1 - resolves a single page transclusion
---
duration_ms: 0.949652
type: 'test'
...
# Subtest: allows the same page to be embedded twice as siblings
ok 2 - allows the same page to be embedded twice as siblings
---
duration_ms: 0.176373
type: 'test'
...
# Subtest: allows different sections of the same page to be embedded
ok 3 - allows different sections of the same page to be embedded
---
duration_ms: 0.341846
type: 'test'
...
# Subtest: detects actual circular transclusion (A -> B -> A)
ok 4 - detects actual circular transclusion (A -> B -> A)
---
duration_ms: 0.754284
type: 'test'
...
# Subtest: self-referencing transclusion is blocked
ok 5 - self-referencing transclusion is blocked
---
duration_ms: 0.192293
type: 'test'
...
1..5
ok 8 - renderTranscludes
---
duration_ms: 3.161576
type: 'suite'
...
# Subtest: pageResources
# Subtest: uses baseDir prefix for resource paths in production mode
ok 1 - uses baseDir prefix for resource paths in production mode
---
duration_ms: 0.349429
type: 'test'
...
# Subtest: omits subpath prefix when baseDir is empty (serve mode)
ok 2 - omits subpath prefix when baseDir is empty (serve mode)
---
duration_ms: 0.203203
type: 'test'
...
# Subtest: contentIndex path reflects baseDir
ok 3 - contentIndex path reflects baseDir
---
duration_ms: 0.315976
type: 'test'
...
1..3
ok 9 - pageResources
---
duration_ms: 1.111928
type: 'suite'
...
# Subtest: showPopover on cache-hit with hash
# Subtest: does not reference any lexical popoverInner from an outer scope
ok 1 - does not reference any lexical popoverInner from an outer scope
---
duration_ms: 1.210334
type: 'test'
...
# Subtest: skips scroll when hash is empty
ok 2 - skips scroll when hash is empty
---
duration_ms: 0.225175
type: 'test'
...
# Subtest: skips scroll when heading is not found
ok 3 - skips scroll when heading is not found
---
duration_ms: 0.168037
type: 'test'
...
# Subtest: decodes percent-encoded fragments when building the selector
ok 4 - decodes percent-encoded fragments when building the selector
---
duration_ms: 0.220486
type: 'test'
...
1..4
ok 10 - showPopover on cache-hit with hash
---
duration_ms: 2.739089
type: 'suite'
...
# Subtest: buggy showPopover (lexical-capture pattern) regression guard
# Subtest: accessing a capture-before-declaration variable throws ReferenceError (TDZ simulation)
ok 1 - accessing a capture-before-declaration variable throws ReferenceError (TDZ simulation)
---
duration_ms: 0.52448
type: 'test'
...
# Subtest: same pattern does NOT throw when hash is empty (explains why first link without fragment works)
ok 2 - same pattern does NOT throw when hash is empty (explains why first link without fragment works)
---
duration_ms: 0.239422
type: 'test'
...
1..2
ok 11 - buggy showPopover (lexical-capture pattern) regression guard
---
duration_ms: 0.975251
type: 'suite'
...
# Subtest: search encoder
# Subtest: English text
# Subtest: should tokenize simple English words
ok 1 - should tokenize simple English words
---
duration_ms: 1.227527
type: 'test'
...
# Subtest: should handle multiple spaces
ok 2 - should handle multiple spaces
---
duration_ms: 0.198414
type: 'test'
...
# Subtest: should handle tabs and newlines
ok 3 - should handle tabs and newlines
---
duration_ms: 0.196671
type: 'test'
...
# Subtest: should lowercase all text
ok 4 - should lowercase all text
---
duration_ms: 0.119034
type: 'test'
...
1..4
ok 1 - English text
---
duration_ms: 2.452649
type: 'suite'
...
# Subtest: CJK text
# Subtest: should tokenize Japanese Hiragana character by character
ok 1 - should tokenize Japanese Hiragana character by character
---
duration_ms: 0.30194
type: 'test'
...
# Subtest: should tokenize Japanese Katakana character by character
ok 2 - should tokenize Japanese Katakana character by character
---
duration_ms: 0.20158
type: 'test'
...
# Subtest: should tokenize Japanese Kanji character by character
ok 3 - should tokenize Japanese Kanji character by character
---
duration_ms: 0.120377
type: 'test'
...
# Subtest: should tokenize Korean Hangul character by character
ok 4 - should tokenize Korean Hangul character by character
---
duration_ms: 0.315275
type: 'test'
...
# Subtest: should tokenize Chinese characters character by character
ok 5 - should tokenize Chinese characters character by character
---
duration_ms: 0.253038
type: 'test'
...
# Subtest: should handle mixed Hiragana/Katakana/Kanji
ok 6 - should handle mixed Hiragana/Katakana/Kanji
---
duration_ms: 0.240715
type: 'test'
...
1..6
ok 2 - CJK text
---
duration_ms: 1.813713
type: 'suite'
...
# Subtest: Mixed CJK and English
# Subtest: should handle Japanese with English words
ok 1 - should handle Japanese with English words
---
duration_ms: 0.1858
type: 'test'
...
# Subtest: should handle English with Japanese words
ok 2 - should handle English with Japanese words
---
duration_ms: 0.115117
type: 'test'
...
# Subtest: should handle complex mixed content
ok 3 - should handle complex mixed content
---
duration_ms: 0.087656
type: 'test'
...
# Subtest: should handle mixed Korean and English
ok 4 - should handle mixed Korean and English
---
duration_ms: 0.083588
type: 'test'
...
# Subtest: should handle mixed Chinese and English
ok 5 - should handle mixed Chinese and English
---
duration_ms: 0.183396
type: 'test'
...
1..5
ok 3 - Mixed CJK and English
---
duration_ms: 0.831119
type: 'suite'
...
# Subtest: Edge cases
# Subtest: should handle empty string
ok 1 - should handle empty string
---
duration_ms: 0.232679
type: 'test'
...
# Subtest: should handle only whitespace
ok 2 - should handle only whitespace
---
duration_ms: 0.077075
type: 'test'
...
# Subtest: should handle single character
ok 3 - should handle single character
---
duration_ms: 0.084369
type: 'test'
...
# Subtest: should handle single CJK character
ok 4 - should handle single CJK character
---
duration_ms: 0.086433
type: 'test'
...
# Subtest: should handle CJK with trailing whitespace
ok 5 - should handle CJK with trailing whitespace
---
duration_ms: 0.085973
type: 'test'
...
# Subtest: should handle English with trailing whitespace
ok 6 - should handle English with trailing whitespace
---
duration_ms: 0.083127
type: 'test'
...
1..6
ok 4 - Edge cases
---
duration_ms: 0.888507
type: 'suite'
...
1..4
ok 12 - search encoder
---
duration_ms: 6.569308
type: 'suite'
...
# Subtest: position assignment
# Subtest: places component in correct position from layout.position
ok 1 - places component in correct position from layout.position
---
duration_ms: 1.209152
type: 'test'
...
# Subtest: places component in footer position
ok 2 - places component in footer position
---
duration_ms: 0.282163
type: 'test'
...
# Subtest: places component in header position
ok 3 - places component in header position
---
duration_ms: 0.228391
type: 'test'
...
# Subtest: returns empty arrays when no entries have layout
ok 4 - returns empty arrays when no entries have layout
---
duration_ms: 0.271863
type: 'test'
...
1..4
ok 13 - position assignment
---
duration_ms: 2.671401
type: 'suite'
...
# Subtest: defaultPosition fallback
# Subtest: uses manifest defaultPosition when no explicit layout
ok 1 - uses manifest defaultPosition when no explicit layout
---
duration_ms: 0.320575
type: 'test'
...
# Subtest: explicit layout takes precedence over defaultPosition
ok 2 - explicit layout takes precedence over defaultPosition
---
duration_ms: 0.178777
type: 'test'
...
# Subtest: silently skips invalid defaultPosition
ok 3 - silently skips invalid defaultPosition
---
duration_ms: 0.133051
type: 'test'
...
1..3
ok 14 - defaultPosition fallback
---
duration_ms: 0.865834
type: 'suite'
...
# Subtest: priority sorting
# Subtest: sorts components within a position by priority
ok 1 - sorts components within a position by priority
---
duration_ms: 0.268567
type: 'test'
...
# Subtest: defaults to priority 50 for defaultPosition without defaultPriority
ok 2 - defaults to priority 50 for defaultPosition without defaultPriority
---
duration_ms: 0.245263
type: 'test'
...
1..2
ok 15 - priority sorting
---
duration_ms: 0.651219
type: 'suite'
...
# Subtest: resolveGroups
# Subtest: returns ungrouped items in priority order
ok 1 - returns ungrouped items in priority order
---
duration_ms: 0.207081
type: 'test'
...
# Subtest: returns ungrouped items unchanged
ok 2 - returns ungrouped items unchanged
---
duration_ms: 0.097744
type: 'test'
...
# Subtest: returns empty array for empty input
ok 3 - returns empty array for empty input
---
duration_ms: 0.082496
type: 'test'
...
# Subtest: wraps grouped items in a Flex component
ok 4 - wraps grouped items in a Flex component
---
duration_ms: 0.221578
type: 'test'
...
# Subtest: uses explicit group priority from config
ok 5 - uses explicit group priority from config
---
duration_ms: 0.131869
type: 'test'
...
# Subtest: falls back to first member priority when no group config
ok 6 - falls back to first member priority when no group config
---
duration_ms: 0.109707
type: 'test'
...
# Subtest: single-member group still wraps in Flex
ok 7 - single-member group still wraps in Flex
---
duration_ms: 0.094528
type: 'test'
...
1..7
ok 16 - resolveGroups
---
duration_ms: 1.08611
type: 'suite'
...
# Subtest: buildLayoutForEntries with display wrappers
# Subtest: applies display wrapper for mobile-only
ok 1 - applies display wrapper for mobile-only
---
duration_ms: 0.155694
type: 'test'
...
1..1
ok 17 - buildLayoutForEntries with display wrappers
---
duration_ms: 0.194417
type: 'suite'
...
# Subtest: buildLayoutForEntries with constructors
# Subtest: instantiates constructor components via registry
ok 1 - instantiates constructor components via registry
---
duration_ms: 0.162096
type: 'test'
...
# Subtest: merges entry options with TS overrides for constructors
ok 2 - merges entry options with TS overrides for constructors
---
duration_ms: 0.141928
type: 'test'
...
1..2
ok 18 - buildLayoutForEntries with constructors
---
duration_ms: 0.358567
type: 'suite'
...
# Subtest: resolveLayout
# Subtest: footer defaults to [] when sharedDefaults omits footer
ok 1 - footer defaults to [] when sharedDefaults omits footer
---
duration_ms: 0.909126
type: 'test'
...
# Subtest: header defaults to [] when sharedDefaults omits header
ok 2 - header defaults to [] when sharedDefaults omits header
---
duration_ms: 0.105359
type: 'test'
...
# Subtest: footer from sharedDefaults is used when no override
ok 3 - footer from sharedDefaults is used when no override
---
duration_ms: 0.147659
type: 'test'
...
# Subtest: byPageType override replaces footer
ok 4 - byPageType override replaces footer
---
duration_ms: 0.160012
type: 'test'
...
# Subtest: byPageType override clears footer with []
ok 5 - byPageType override clears footer with []
---
duration_ms: 0.099648
type: 'test'
...
# Subtest: byPageType override clears header with []
ok 6 - byPageType override clears header with []
---
duration_ms: 0.079129
type: 'test'
...
# Subtest: all array slots default to [] when sharedDefaults only has head
ok 7 - all array slots default to [] when sharedDefaults only has head
---
duration_ms: 0.144553
type: 'test'
...
# Subtest: preserves component references through override
ok 8 - preserves component references through override
---
duration_ms: 0.197553
type: 'test'
...
1..8
ok 19 - resolveLayout
---
duration_ms: 2.590449
type: 'suite'
...
# Subtest: resolveLayout frame resolution
# Subtest: config override frame wins over page type frame
ok 1 - config override frame wins over page type frame
---
duration_ms: 0.234171
type: 'test'
...
# Subtest: page type frame wins when no config override
ok 2 - page type frame wins when no config override
---
duration_ms: 0.177174
type: 'test'
...
# Subtest: defaults to 'default' when no frame specified
ok 3 - defaults to 'default' when no frame specified
---
duration_ms: 0.078077
type: 'test'
...
# Subtest: defaults to 'default' when byPageType entry exists but has no frame
ok 4 - defaults to 'default' when byPageType entry exists but has no frame
---
duration_ms: 0.067788
type: 'test'
...
1..4
ok 20 - resolveLayout frame resolution
---
duration_ms: 0.68885
type: 'suite'
...
# Subtest: collectComponents
# Subtest: collects all unique components across page types
ok 1 - collects all unique components across page types
---
duration_ms: 0.184549
type: 'test'
...
# Subtest: deduplicates shared components
ok 2 - deduplicates shared components
---
duration_ms: 0.103365
type: 'test'
...
# Subtest: handles empty footer and header arrays
ok 3 - handles empty footer and header arrays
---
duration_ms: 0.208233
type: 'test'
...
1..3
ok 21 - collectComponents
---
duration_ms: 0.581508
type: 'suite'
...
# Subtest: FileTrie
# Subtest: constructor
# Subtest: should create an empty trie
ok 1 - should create an empty trie
---
duration_ms: 0.905829
type: 'test'
...
# Subtest: should set displayName from data title
ok 2 - should set displayName from data title
---
duration_ms: 0.228841
type: 'test'
...
# Subtest: should be able to set displayName
ok 3 - should be able to set displayName
---
duration_ms: 0.190479
type: 'test'
...
1..3
ok 1 - constructor
---
duration_ms: 1.931294
type: 'suite'
...
# Subtest: add
# Subtest: should add a file at root level
ok 1 - should add a file at root level
---
duration_ms: 0.476289
type: 'test'
...
# Subtest: should handle index files
ok 2 - should handle index files
---
duration_ms: 0.227038
type: 'test'
...
# Subtest: should add nested files
ok 3 - should add nested files
---
duration_ms: 0.234392
type: 'test'
...
# Subtest: last-insert-wins on folder-note collision (matches emitter semantics)
ok 4 - last-insert-wins on folder-note collision (matches emitter semantics)
---
duration_ms: 0.173768
type: 'test'
...
# Subtest: last-insert-wins on root-level index collision
ok 5 - last-insert-wins on root-level index collision
---
duration_ms: 0.187674
type: 'test'
...
# Subtest: collision does not affect sibling files in the same folder
ok 6 - collision does not affect sibling files in the same folder
---
duration_ms: 0.293253
type: 'test'
...
1..6
ok 2 - add
---
duration_ms: 2.106896
type: 'suite'
...
# Subtest: filter
# Subtest: should filter nodes based on condition
ok 1 - should filter nodes based on condition
---
duration_ms: 0.236667
type: 'test'
...
1..1
ok 3 - filter
---
duration_ms: 0.298734
type: 'suite'
...
# Subtest: map
# Subtest: should apply function to all nodes
ok 1 - should apply function to all nodes
---
duration_ms: 0.200378
type: 'test'
...
# Subtest: map over folders should work
ok 2 - map over folders should work
---
duration_ms: 0.222289
type: 'test'
...
1..2
ok 4 - map
---
duration_ms: 0.507598
type: 'suite'
...
# Subtest: entries
# Subtest: should return all entries
ok 1 - should return all entries
---
duration_ms: 0.345122
type: 'test'
...
1..1
ok 5 - entries
---
duration_ms: 0.401127
type: 'suite'
...
# Subtest: fromEntries
# Subtest: nested
ok 1 - nested
---
duration_ms: 0.201771
type: 'test'
...
1..1
ok 6 - fromEntries
---
duration_ms: 0.257887
type: 'suite'
...
# Subtest: findNode
# Subtest: should find root node with empty path
ok 1 - should find root node with empty path
---
duration_ms: 0.162717
type: 'test'
...
# Subtest: should find node at first level
ok 2 - should find node at first level
---
duration_ms: 0.108686
type: 'test'
...
# Subtest: should find nested node
ok 3 - should find nested node
---
duration_ms: 0.130115
type: 'test'
...
# Subtest: should return undefined for non-existent path
ok 4 - should return undefined for non-existent path
---
duration_ms: 0.282844
type: 'test'
...
# Subtest: should return undefined for partial path
ok 5 - should return undefined for partial path
---
duration_ms: 0.142459
type: 'test'
...
1..5
ok 7 - findNode
---
duration_ms: 0.958178
type: 'suite'
...
# Subtest: getFolderPaths
# Subtest: should return all folder paths
ok 1 - should return all folder paths
---
duration_ms: 0.301038
type: 'test'
...
1..1
ok 8 - getFolderPaths
---
duration_ms: 0.369187
type: 'suite'
...
# Subtest: sort
# Subtest: should sort nodes according to sort function
ok 1 - should sort nodes according to sort function
---
duration_ms: 5.928509
type: 'test'
...
1..1
ok 9 - sort
---
duration_ms: 6.028056
type: 'suite'
...
# Subtest: pathToNode
# Subtest: should return root node for empty path
ok 1 - should return root node for empty path
---
duration_ms: 0.335423
type: 'test'
...
# Subtest: should return root node for index path
ok 2 - should return root node for index path
---
duration_ms: 0.163468
type: 'test'
...
# Subtest: should return path to first level node
ok 3 - should return path to first level node
---
duration_ms: 0.166875
type: 'test'
...
# Subtest: should return path to nested node
ok 4 - should return path to nested node
---
duration_ms: 0.16442
type: 'test'
...
# Subtest: should return undefined for non-existent path
ok 5 - should return undefined for non-existent path
---
duration_ms: 0.147658
type: 'test'
...
# Subtest: should return file data for intermediate folders
ok 6 - should return file data for intermediate folders
---
duration_ms: 0.179549
type: 'test'
...
# Subtest: should return path for partial path
ok 7 - should return path for partial path
---
duration_ms: 0.152077
type: 'test'
...
1..7
ok 10 - pathToNode
---
duration_ms: 1.565454
type: 'suite'
...
1..10
ok 22 - FileTrie
---
duration_ms: 15.228581
type: 'suite'
...
# Subtest: typeguards
# Subtest: isSimpleSlug
ok 1 - isSimpleSlug
---
duration_ms: 0.97492
type: 'test'
...
# Subtest: isRelativeURL
ok 2 - isRelativeURL
---
duration_ms: 0.195779
type: 'test'
...
# Subtest: isAbsoluteURL
ok 3 - isAbsoluteURL
---
duration_ms: 0.19604
type: 'test'
...
# Subtest: isFullSlug
ok 4 - isFullSlug
---
duration_ms: 0.214975
type: 'test'
...
# Subtest: isFilePath
ok 5 - isFilePath
---
duration_ms: 0.136919
type: 'test'
...
1..5
ok 23 - typeguards
---
duration_ms: 2.576863
type: 'suite'
...
# Subtest: transforms
# Subtest: simplifySlug
ok 1 - simplifySlug
---
duration_ms: 0.356002
type: 'test'
...
# Subtest: slugifyFilePath
ok 2 - slugifyFilePath
---
duration_ms: 0.669042
type: 'test'
...
# Subtest: slugifyFilePath + simplifySlug end-to-end canonicalization
ok 3 - slugifyFilePath + simplifySlug end-to-end canonicalization
---
duration_ms: 0.293133
type: 'test'
...
# Subtest: transformInternalLink
ok 4 - transformInternalLink
---
duration_ms: 1.162725
type: 'test'
...
# Subtest: pathToRoot
ok 5 - pathToRoot
---
duration_ms: 0.351684
type: 'test'
...
# Subtest: joinSegments
ok 6 - joinSegments
---
duration_ms: 0.183346
type: 'test'
...
1..6
ok 24 - transforms
---
duration_ms: 3.370802
type: 'suite'
...
# Subtest: link strategies
# Subtest: absolute
# Subtest: from a/b/c
ok 1 - from a/b/c
---
duration_ms: 0.621303
type: 'test'
...
# Subtest: from a/b/index
ok 2 - from a/b/index
---
duration_ms: 0.164641
type: 'test'
...
# Subtest: from index
ok 3 - from index
---
duration_ms: 0.150684
type: 'test'
...
1..3
ok 1 - absolute
---
duration_ms: 1.103632
type: 'suite'
...
# Subtest: shortest
# Subtest: from a/b/c
ok 1 - from a/b/c
---
duration_ms: 0.415023
type: 'test'
...
# Subtest: from a/b/index
ok 2 - from a/b/index
---
duration_ms: 0.189498
type: 'test'
...
# Subtest: from index
ok 3 - from index
---
duration_ms: 0.189237
type: 'test'
...
1..3
ok 2 - shortest
---
duration_ms: 0.92683
type: 'suite'
...
# Subtest: relative
# Subtest: from a/b/c
ok 1 - from a/b/c
---
duration_ms: 0.252567
type: 'test'
...
# Subtest: from a/b/index
ok 2 - from a/b/index
---
duration_ms: 0.132881
type: 'test'
...
# Subtest: from index
ok 3 - from index
---
duration_ms: 0.110048
type: 'test'
...
1..3
ok 3 - relative
---
duration_ms: 0.612807
type: 'suite'
...
1..3
ok 25 - link strategies
---
duration_ms: 2.857253
type: 'suite'
...
# Subtest: resolveRelative
# Subtest: from index
ok 1 - from index
---
duration_ms: 0.156054
type: 'test'
...
# Subtest: from nested page
ok 2 - from nested page
---
duration_ms: 0.109888
type: 'test'
...
# Subtest: with index paths
ok 3 - with index paths
---
duration_ms: 0.112602
type: 'test'
...
# Subtest: with simple slugs
ok 4 - with simple slugs
---
duration_ms: 0.10637
type: 'test'
...
1..4
ok 26 - resolveRelative
---
duration_ms: 0.634959
type: 'suite'
...
# Subtest: detectSlugCollisions
# Subtest: returns empty array when there are no collisions
ok 1 - returns empty array when there are no collisions
---
duration_ms: 1.175829
type: 'test'
...
# Subtest: returns empty array for empty input
ok 2 - returns empty array for empty input
---
duration_ms: 0.135776
type: 'test'
...
# Subtest: detects a two-file collision with winner = last file
ok 3 - detects a two-file collision with winner = last file
---
duration_ms: 0.133882
type: 'test'
...
# Subtest: detects a three-file collision with all files listed, winner = last
ok 4 - detects a three-file collision with all files listed, winner = last
---
duration_ms: 0.141608
type: 'test'
...
# Subtest: detects multiple separate collisions
ok 5 - detects multiple separate collisions
---
duration_ms: 0.198494
type: 'test'
...
# Subtest: ignores entries without a slug
ok 6 - ignores entries without a slug
---
duration_ms: 0.10039
type: 'test'
...
# Subtest: winner annotation matches fileTrie last-insert-wins semantics
ok 7 - winner annotation matches fileTrie last-insert-wins semantics
---
duration_ms: 0.092425
type: 'test'
...
1..7
ok 27 - detectSlugCollisions
---
duration_ms: 3.218564
type: 'suite'
...
# Subtest: formatCollisionWarning
# Subtest: returns empty string for empty input
ok 1 - returns empty string for empty input
---
duration_ms: 0.236537
type: 'test'
...
# Subtest: formats single collision with winner and shadowed markers
ok 2 - formats single collision with winner and shadowed markers
---
duration_ms: 0.416075
type: 'test'
...
# Subtest: formats multiple collisions with count in header
ok 3 - formats multiple collisions with count in header
---
duration_ms: 0.426344
type: 'test'
...
# Subtest: output mentions Folder Notes convention as a common cause
ok 4 - output mentions Folder Notes convention as a common cause
---
duration_ms: 0.155453
type: 'test'
...
# Subtest: falls back to filePath when relativePath is missing
ok 5 - falls back to filePath when relativePath is missing
---
duration_ms: 0.180831
type: 'test'
...
1..5
ok 28 - formatCollisionWarning
---
duration_ms: 1.754481
type: 'suite'
...
1..28
# tests 163
# suites 45
# pass 163
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 334.058263