Skip to content

Commit 56766a0

Browse files
feat(app): progress towards linking types
1 parent 5b437f3 commit 56766a0

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

src/index.tsx

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,81 @@
11
import { Meta, MetaProvider, Title } from '@solidjs/meta';
22
import { Router } from '@solidjs/router';
33
import { render } from 'solid-js/web';
4+
import { ReferenceTypeParser } from 'typedoc-json-parser';
45
import { App } from './App';
56
import './assets/css/main.css';
67

8+
const references: Record<string, string> = {
9+
// MDN
10+
BigInt64Array: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt64Array',
11+
Blob: 'https://developer.mozilla.org/en-US/docs/Web/API/Blob',
12+
Date: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date',
13+
Error: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error',
14+
Float32Array: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array',
15+
Float64Array: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array',
16+
Function: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function',
17+
Int16Array: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array',
18+
Int32Array: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array',
19+
Int8Array: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array',
20+
Iterable: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#the_iterable_protocol',
21+
Iterator: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#the_iterator_protocol',
22+
Map: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map',
23+
Promise: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise',
24+
RegExp: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp',
25+
Response: 'https://developer.mozilla.org/en-US/docs/Web/API/Response',
26+
Set: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set',
27+
URL: 'https://developer.mozilla.org/en-US/docs/Web/API/URL',
28+
29+
// Node.js
30+
'global.Buffer': 'https://nodejs.org/api/buffer.html',
31+
EventEmitter: 'https://nodejs.org/api/events.html#events_class_eventemitter',
32+
'global.NodeJS.EventEmitter': 'https://nodejs.org/api/events.html#events_class_eventemitter',
33+
'EventEmitter.captureRejectionSymbol': 'https://nodejs.org/api/events.html#eventscapturerejectionsymbol',
34+
'EventEmitter.errorMonitor': 'https://nodejs.org/api/events.html#eventserrormonitor',
35+
NodeEventTarget: 'https://nodejs.org/api/events.html#class-nodeeventtarget',
36+
PathLike: 'https://nodejs.org/api/path.html#path_pathlike',
37+
'global.NodeJS.Timeout': 'https://nodejs.org/api/timers.html#timers_class_timeout',
38+
'global.NodeJS.Timer': 'https://nodejs.org/api/timers.html#timers_class_timeout',
39+
'internal.Stream': 'https://nodejs.org/api/stream.html#stream_class_stream',
40+
41+
// TypeScript
42+
Exclude: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#excludeuniontype-excludedmembers',
43+
InstanceType: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#instancetype',
44+
Omit: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys',
45+
Partial: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype',
46+
Readonly: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#readonlytype',
47+
Record: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type'
48+
};
49+
50+
const unknownReferences: Set<string> = new Set([
51+
// 'typescript'
52+
'ArrayLike',
53+
'AsyncIterableIterator',
54+
'ClassDecorator',
55+
'DOMEventTarget',
56+
'InspectOptionsStylized',
57+
'IterableIterator',
58+
'IteratorResult',
59+
'MapConstructor',
60+
'MethodDecorator',
61+
'PropertyKey',
62+
'ObjectConstructor',
63+
'ReadonlyMap'
64+
]);
65+
66+
ReferenceTypeParser.formatToString = (options): string => {
67+
const { parser, project } = options;
68+
const typeArguments = parser.typeArguments.length > 0 ? `<${parser.typeArguments.map((type) => type.toString()).join(', ')}>` : '';
69+
70+
for (const [ref, url] of Object.entries(references)) {
71+
if (ref === parser.name) return `<a href="${url}">${parser.name}</a>${typeArguments}`;
72+
}
73+
74+
if (!unknownReferences.has(parser.name)) console.warn(`'[WARN]' Unable to find parser for ${parser.name} (${parser.id ?? parser.packageName})`);
75+
76+
return `[${parser.name}](${parser.id ?? parser.packageName})${typeArguments}`;
77+
};
78+
779
const Main = () => (
880
<MetaProvider>
981
<Title>JOSH | Home</Title>

0 commit comments

Comments
 (0)