Skip to content

Commit 5d59561

Browse files
authored
Add types for mediawiki-title (DefinitelyTyped#73189)
1 parent 84a5776 commit 5d59561

File tree

5 files changed

+180
-0
lines changed

5 files changed

+180
-0
lines changed

types/mediawiki-title/.npmignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
*
2+
!**/*.d.ts
3+
!**/*.d.cts
4+
!**/*.d.mts
5+
!**/*.d.*.ts

types/mediawiki-title/index.d.ts

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
export interface SiteInfo {
2+
readonly general: {
3+
readonly lang: string;
4+
readonly legaltitlechars: string;
5+
};
6+
readonly namespaces: {
7+
readonly [id: number]: {
8+
readonly case: string;
9+
readonly name?: string;
10+
readonly subpages?: boolean;
11+
readonly canonical?: string;
12+
readonly "*"?: string;
13+
};
14+
};
15+
readonly namespacealiases: readonly {
16+
readonly id: number;
17+
readonly alias?: string;
18+
readonly "*"?: string;
19+
}[];
20+
readonly specialpagealiases?: readonly {
21+
readonly aliases: readonly string[];
22+
}[];
23+
}
24+
25+
export class Namespace {
26+
constructor(id: number, siteInfo: SiteInfo);
27+
getId(): number;
28+
equals(other: Namespace): boolean;
29+
isMedia(): boolean;
30+
isSpecial(): boolean;
31+
isMain(): boolean;
32+
isTalk(): boolean;
33+
isUser(): boolean;
34+
isUserTalk(): boolean;
35+
isProject(): boolean;
36+
isProjectTalk(): boolean;
37+
isFile(): boolean;
38+
isFileTalk(): boolean;
39+
isImage(): boolean;
40+
isImageTalk(): boolean;
41+
isMediawiki(): boolean;
42+
isMediawikiTalk(): boolean;
43+
isTemplate(): boolean;
44+
isTemplateTalk(): boolean;
45+
isHelp(): boolean;
46+
isHelpTalk(): boolean;
47+
isCategory(): boolean;
48+
isCategoryTalk(): boolean;
49+
isATalkNamespace(): boolean;
50+
getNormalizedText(): string;
51+
getCanonicalText(): string;
52+
subpagesAllowed(): boolean;
53+
static fromText(text: string, siteInfo: SiteInfo): Namespace | undefined;
54+
static main(siteInfo: SiteInfo): Namespace;
55+
}
56+
57+
export class Title {
58+
constructor(
59+
key: string,
60+
namespace: Namespace | number,
61+
siteInfo: SiteInfo,
62+
fragment?: string,
63+
);
64+
getKey(): string;
65+
getPrefixedDBKey(): string;
66+
getPrefixedText(): string;
67+
getFragment(): string | undefined;
68+
getNamespace(): Namespace;
69+
equals(other: Title): boolean;
70+
static newFromText(
71+
title: string,
72+
siteInfo: SiteInfo,
73+
defaultNs?: Namespace | number,
74+
): Title;
75+
}
76+
77+
export class TitleError extends Error {
78+
[key: string]: unknown;
79+
constructor(options: { type: string; [key: string]: unknown });
80+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import { Namespace, type SiteInfo, Title, TitleError } from "mediawiki-title";
2+
3+
const siteInfo: SiteInfo = {
4+
general: {
5+
lang: "en",
6+
legaltitlechars: " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF+",
7+
},
8+
namespaces: {
9+
0: {
10+
case: "first-letter",
11+
name: "",
12+
subpages: true,
13+
},
14+
},
15+
namespacealiases: [],
16+
};
17+
18+
const namespace = new Namespace(0, siteInfo);
19+
namespace.getId(); // $ExpectType number
20+
namespace.equals(namespace); // $ExpectType boolean
21+
namespace.isMedia(); // $ExpectType boolean
22+
namespace.isSpecial(); // $ExpectType boolean
23+
namespace.isMain(); // $ExpectType boolean
24+
namespace.isTalk(); // $ExpectType boolean
25+
namespace.isUser(); // $ExpectType boolean
26+
namespace.isUserTalk(); // $ExpectType boolean
27+
namespace.isProject(); // $ExpectType boolean
28+
namespace.isProjectTalk(); // $ExpectType boolean
29+
namespace.isFile(); // $ExpectType boolean
30+
namespace.isFileTalk(); // $ExpectType boolean
31+
namespace.isImage(); // $ExpectType boolean
32+
namespace.isImageTalk(); // $ExpectType boolean
33+
namespace.isMediawiki(); // $ExpectType boolean
34+
namespace.isMediawikiTalk(); // $ExpectType boolean
35+
namespace.isTemplate(); // $ExpectType boolean
36+
namespace.isTemplateTalk(); // $ExpectType boolean
37+
namespace.isHelp(); // $ExpectType boolean
38+
namespace.isHelpTalk(); // $ExpectType boolean
39+
namespace.isCategory(); // $ExpectType boolean
40+
namespace.isCategoryTalk(); // $ExpectType boolean
41+
namespace.isATalkNamespace(); // $ExpectType boolean
42+
namespace.getNormalizedText(); // $ExpectType string
43+
namespace.getCanonicalText(); // $ExpectType string
44+
namespace.subpagesAllowed(); // $ExpectType boolean
45+
Namespace.fromText("", siteInfo); // $ExpectType Namespace | undefined
46+
Namespace.main(siteInfo); // $ExpectType Namespace
47+
48+
const title = new Title("", 0, siteInfo);
49+
title.getKey(); // $ExpectType string
50+
title.getPrefixedDBKey(); // $ExpectType string
51+
title.getPrefixedText(); // $ExpectType string
52+
title.getFragment(); // $ExpectType string | undefined
53+
title.getNamespace(); // $ExpectType Namespace
54+
title.equals(title); // $ExpectType boolean
55+
Title.newFromText("some title", siteInfo); // $ExpectType Title
56+
57+
const titleError = new TitleError({ type: "title-invalid-empty", title: "" });
58+
titleError.message; // $ExpectType string
59+
titleError.title; // $ExpectType unknown

types/mediawiki-title/package.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"private": true,
3+
"name": "@types/mediawiki-title",
4+
"version": "0.7.9999",
5+
"projects": [
6+
"https://github.com/wikimedia/mediawiki-title#readme"
7+
],
8+
"devDependencies": {
9+
"@types/mediawiki-title": "workspace:."
10+
},
11+
"owners": [
12+
{
13+
"name": "ud2",
14+
"githubUsername": "0f-0b"
15+
}
16+
]
17+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"compilerOptions": {
3+
"module": "node16",
4+
"lib": [
5+
"es6"
6+
],
7+
"noImplicitAny": true,
8+
"noImplicitThis": true,
9+
"strictFunctionTypes": true,
10+
"strictNullChecks": true,
11+
"types": [],
12+
"noEmit": true,
13+
"forceConsistentCasingInFileNames": true
14+
},
15+
"files": [
16+
"index.d.ts",
17+
"mediawiki-title-tests.ts"
18+
]
19+
}

0 commit comments

Comments
 (0)