Skip to content

Commit

Permalink
feat(typedoc): Add support for Typedoc 0.21.3 to 0.21.9 (#28)
Browse files Browse the repository at this point in the history
BREAKING CHANGE: This only supports 0.21.3 to 0.21.9 due to URL changes.
  • Loading branch information
kamranayub committed Oct 4, 2021
1 parent 11e1534 commit 273712f
Show file tree
Hide file tree
Showing 12 changed files with 286,703 additions and 855,993 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@

A Remark plugin for transforming [TypeDoc](https://typedoc.org) symbol links, such as `[[symbol]]` to a Markdown link, with Rehype compatibility.

## Typedoc Compatibility

This version requires `>=0.21.3 && < 0.22.0`. Use earlier versions of the package for Typedoc versions below this range.

The `peerDependencies` is kept up-to-date with what version of TypeDoc is supported. Each minor version tends to contain some breaking changes that affect this parsing.

## Install

Install via `npm` or `yarn`:
Expand Down
2 changes: 1 addition & 1 deletion example/example.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const html = require('remark-html')
const typedocSymbolLinks = require('../dist')

// Load generated TypeDoc
const typedoc = JSON.parse(fs.readFileSync('../src/__tests__/typedoc-0.20.json'))
const typedoc = JSON.parse(fs.readFileSync('../src/__tests__/typedoc-0.21.json'))

const doc = unified()
.use(markdown)
Expand Down
14,173 changes: 0 additions & 14,173 deletions package-lock.json

This file was deleted.

6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@
"prettier": "2.2.1",
"semantic-release": "17.2.3",
"ts-jest": "26.5.3",
"typedoc": "^0.20.30",
"typescript": "4.2.3"
"typedoc": "0.21.9",
"typescript": "4.4.3"
},
"files": [
"dist/**/*"
Expand All @@ -65,6 +65,6 @@
"unist-util-modify-children": "^2.0.0"
},
"peerDependencies": {
"typedoc": ">=0.17"
"typedoc": ">=0.21.3 && < 0.22.0"
}
}
171 changes: 44 additions & 127 deletions src/__tests__/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
import { Root, Content } from 'ts-mdast'
import { ReflectionKind } from 'typedoc'
import typedoc20 from './typedoc-0.20.json'
import typedoc17 from './typedoc-0.17.json'
import typedoc21 from './typedoc-0.21.json'
import { buildSymbolLinkIndex, generateLinkFromSymbol, SymbolIndex, SymbolPathItem } from '../helpers'
// eslint-disable-next-line @typescript-eslint/no-var-requires
const remarkTransform = require('..')

;[
{ version: '0.20', typedoc: typedoc20 },
{ version: '0.17', typedoc: typedoc17 },
].forEach(({ version, typedoc }) => {
;[{ version: '0.21', typedoc: typedoc21 }].forEach(({ version, typedoc }) => {
describe(`remark-typedoc-symbol-links: ${version}`, () => {
test('should pass through with no options', () => {
const mockMdast: Root = {
Expand Down Expand Up @@ -70,11 +66,8 @@ const remarkTransform = require('..')
expect(rhs.value).toBe(' docs')

expect(link.type).toBe('link')
if (version === '0.17') {
expect(link.url).toBe('/classes/_engine_.engine.html')
} else {
expect(link.url).toBe('/classes/engine.engine.html')
}
expect(link.url).toBe('/classes/Engine.html')

expect((link.data?.hProperties as any)?.className).toBe('tsdoc-link')
expect(link.children).toHaveLength(1)
const [linkText] = link.children as Content[]
Expand Down Expand Up @@ -104,11 +97,7 @@ const remarkTransform = require('..')
expect(rhs.value).toBe(' docs')

expect(link.type).toBe('link')
if (version === '0.17') {
expect(link.url).toBe('/classes/_engine_.engine.html')
} else {
expect(link.url).toBe('/classes/engine.engine.html')
}
expect(link.url).toBe('/classes/Engine.html')

expect((link.data?.hProperties as any)?.className).toBe('tsdoc-link')
expect(link.children).toHaveLength(1)
Expand Down Expand Up @@ -142,13 +131,8 @@ const remarkTransform = require('..')
expect(link.type).toBe('link')
expect(link2.type).toBe('link')

if (version === '0.17') {
expect(link.url).toBe('/classes/_engine_.engine.html')
expect(link2.url).toBe('/classes/_engine_.engine.html#start')
} else {
expect(link.url).toBe('/classes/engine.engine.html')
expect(link2.url).toBe('/classes/engine.engine.html#start')
}
expect(link.url).toBe('/classes/Engine.html')
expect(link2.url).toBe('/classes/Engine.html#start')

expect((link.children as Content[])[0].value).toBe('Engine')
expect((link2.children as Content[])[0].value).toBe('Engine.start')
Expand Down Expand Up @@ -187,11 +171,8 @@ const remarkTransform = require('..')
expect(rhs.value).toBe(' docs')

expect(link.type).toBe('link')
if (version === '0.17') {
expect(link.url).toBe('/classes/_engine_.engine.html')
} else {
expect(link.url).toBe('/classes/engine.engine.html')
}
expect(link.url).toBe('/classes/Engine.html')

expect((link.data?.hProperties as any)?.className).toBe('tsdoc-link tsdoc-link--aliased')
expect(link.children).toHaveLength(1)
const [linkText] = link.children as Content[]
Expand Down Expand Up @@ -221,11 +202,7 @@ const remarkTransform = require('..')
expect(rhs.value).toBe(' docs')

expect(link.type).toBe('link')
if (version === '0.17') {
expect(link.url).toBe('/classes/_engine_.engine.html')
} else {
expect(link.url).toBe('/classes/engine.engine.html')
}
expect(link.url).toBe('/classes/Engine.html')

expect((link.data?.hProperties as any)?.className).toBe('tsdoc-link tsdoc-link--aliased')
expect(link.children).toHaveLength(1)
Expand Down Expand Up @@ -536,129 +513,67 @@ const remarkTransform = require('..')
})

test('should generate link for class symbol', () => {
if (version === '0.17') {
expect(generateLinkFromSymbol('Engine', '/', lookup)).toBe('/classes/_engine_.engine.html')
} else {
expect(generateLinkFromSymbol('Engine', '/', lookup)).toBe('/classes/engine.engine.html')
}
expect(generateLinkFromSymbol('Engine', '/', lookup)).toBe('/classes/Engine.html')
})

test('should generate link for class constructor symbol', () => {
if (version === '0.17') {
expect(generateLinkFromSymbol('Engine#ctor', '/', lookup)).toBe('/classes/_engine_.engine.html#constructor')
} else {
expect(generateLinkFromSymbol('Engine#ctor', '/', lookup)).toBe('/classes/engine.engine.html#constructor')
}
expect(generateLinkFromSymbol('Engine#ctor', '/', lookup)).toBe('/classes/Engine.html#constructor')
})

test('should generate link for class method symbol', () => {
if (version === '0.17') {
expect(generateLinkFromSymbol('Engine.start', '/', lookup)).toBe('/classes/_engine_.engine.html#start')
} else {
expect(generateLinkFromSymbol('Engine.start', '/', lookup)).toBe('/classes/engine.engine.html#start')
}
expect(generateLinkFromSymbol('Engine.start', '/', lookup)).toBe('/classes/Engine.html#start')
})

test('should generate link for class static method symbol', () => {
if (version === '0.17') {
expect(generateLinkFromSymbol('Engine.createMainLoop', '/', lookup)).toBe(
'/classes/_engine_.engine.html#createmainloop',
)
} else {
expect(generateLinkFromSymbol('Engine.createMainLoop', '/', lookup)).toBe(
'/classes/engine.engine.html#createmainloop',
)
}
expect(generateLinkFromSymbol('Engine.createMainLoop', '/', lookup)).toBe('/classes/Engine.html#createMainLoop')
})

test('should generate link for class property symbol', () => {
if (version === '0.17') {
expect(generateLinkFromSymbol('Engine.rootScene', '/', lookup)).toBe(
'/classes/_engine_.engine.html#rootscene',
)
} else {
expect(generateLinkFromSymbol('Engine.rootScene', '/', lookup)).toBe('/classes/engine.engine.html#rootscene')
}
expect(generateLinkFromSymbol('Engine.rootScene', '/', lookup)).toBe('/classes/Engine.html#rootScene')
})

test('should generate link for class accessor symbol', () => {
if (version === '0.17') {
expect(generateLinkFromSymbol('Engine.canvasHeight', '/', lookup)).toBe(
'/classes/_engine_.engine.html#canvasheight',
)
} else {
expect(generateLinkFromSymbol('Engine.canvasHeight', '/', lookup)).toBe(
'/classes/engine.engine.html#canvasheight',
)
}
expect(generateLinkFromSymbol('Engine.canvasHeight', '/', lookup)).toBe('/classes/Engine.html#canvasHeight')
})

test('should generate link for interface symbol', () => {
if (version === '0.17') {
expect(generateLinkFromSymbol('EngineOptions', '/', lookup)).toBe('/interfaces/_engine_.engineoptions.html')
} else {
expect(generateLinkFromSymbol('EngineOptions', '/', lookup)).toBe('/interfaces/engine.engineoptions.html')
}
expect(generateLinkFromSymbol('EngineOptions', '/', lookup)).toBe('/interfaces/EngineOptions.html')
})

test('should generate link for interface property symbol', () => {
if (version === '0.17') {
expect(generateLinkFromSymbol('EngineOptions.backgroundColor', '/', lookup)).toBe(
'/interfaces/_engine_.engineoptions.html#backgroundcolor',
)
} else {
expect(generateLinkFromSymbol('EngineOptions.backgroundColor', '/', lookup)).toBe(
'/interfaces/engine.engineoptions.html#backgroundcolor',
)
}
expect(generateLinkFromSymbol('EngineOptions.backgroundColor', '/', lookup)).toBe(
'/interfaces/EngineOptions.html#backgroundColor',
)
})

test('should generate link for module function symbol', () => {
if (version === '0.17') {
expect(generateLinkFromSymbol('clamp', '/', lookup)).toBe('/modules/_util_util_.html#clamp')
} else {
expect(generateLinkFromSymbol('clamp', '/', lookup)).toBe('/modules/util_index.html#clamp')
}
expect(generateLinkFromSymbol('roundRect', '/', lookup)).toBe('/modules/Util.DrawUtil.html#roundRect')
})

test('should generate link for module enum symbol', () => {
if (version === '0.17') {
expect(generateLinkFromSymbol('DisplayMode', '/', lookup)).toBe('/enums/_engine_.displaymode.html')
} else {
expect(generateLinkFromSymbol('DisplayMode', '/', lookup)).toBe('/enums/screen.displaymode.html')
}
expect(generateLinkFromSymbol('DisplayMode', '/', lookup)).toBe('/enums/DisplayMode.html')
})

test('should generate link for module enum member symbol', () => {
if (version === '0.17') {
expect(generateLinkFromSymbol('DisplayMode.Container', '/', lookup)).toBe(
'/enums/_engine_.displaymode.html#container',
)
} else {
expect(generateLinkFromSymbol('DisplayMode.Container', '/', lookup)).toBe(
'/enums/screen.displaymode.html#container',
)
}
expect(generateLinkFromSymbol('DisplayMode.FillContainer', '/', lookup)).toBe(
'/enums/DisplayMode.html#FillContainer',
)
})

test('should generate link for type alias symbol', () => {
if (version === '0.17') {
expect(generateLinkFromSymbol('activate', '/', lookup)).toBe('/modules/_events_.html#activate')
} else {
expect(generateLinkFromSymbol('activate', '/', lookup)).toBe('/modules/events.html#activate')
}
expect(generateLinkFromSymbol('activate', '/', lookup)).toBe('/modules.html#activate')
})

test('should generate link for type alias symbol in namespace', () => {
expect(generateLinkFromSymbol('Events.activate', '/', lookup)).toBe('/modules/Events.html#activate')
})

test('should generate link for object literals symbol', () => {
if (version === '0.17') {
expect(generateLinkFromSymbol('REPORTED_FEATURES', '/', lookup)).toBe(
'/modules/_util_detector_.html#reported_features',
)
} else {
expect(generateLinkFromSymbol('REPORTED_FEATURES', '/', lookup)).toBe(
'/modules/util_detector.html#reported_features',
)
}
test('should generate link for variables symbol', () => {
expect(generateLinkFromSymbol('CollisionJumpTable', '/', lookup)).toBe('/modules.html#CollisionJumpTable')
})

test('should generate link for module symbol', () => {
expect(generateLinkFromSymbol('clamp', '/', lookup)).toBe('/modules/Util.html#clamp')
})

test('should generate link for some module symbol', () => {
Expand All @@ -671,7 +586,7 @@ const remarkTransform = require('..')
],
],
])
expect(generateLinkFromSymbol('test', '/', someModuleIndex)).toBe('/modules/somemodule.html#test')
expect(generateLinkFromSymbol('test', '/', someModuleIndex)).toBe('/modules/someModule.html#test')
})

test('should pass through if invalid container kind', () => {
Expand Down Expand Up @@ -700,19 +615,21 @@ const remarkTransform = require('..')
// Interfaces
expect(lookup.has('EngineOptions')).toBe(true)

// Exported functions
// Exported module functions
expect(lookup.has('clamp')).toBe(true)
expect(lookup.has('canPlayFile')).toBe(true)

// Enums
expect(lookup.has('DisplayMode')).toBe(true)
expect(lookup.has('DisplayMode.Container')).toBe(true)
expect(lookup.has('DisplayMode.FillContainer')).toBe(true)

// Object literals / const
expect(lookup.has('REPORTED_FEATURES')).toBe(true)
// Variables
expect(lookup.has('CollisionJumpTable')).toBe(true)

// Type aliases
expect(lookup.has('activate')).toBe(true)

// Namespaces
expect(lookup.has('Events.activate')).toBe(true)
})
})
})
Expand Down
Loading

0 comments on commit 273712f

Please sign in to comment.