Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
70bb27f
expanded the types
wvanderp Nov 14, 2020
e6c685f
removed white space and fixed capitalization
wvanderp Nov 15, 2020
3e4dd65
made the snak generic type more generic
wvanderp Nov 15, 2020
e3c3c27
added a Novalue test
wvanderp Nov 18, 2020
166384c
made my suggested changes
wvanderp Dec 6, 2020
fcb4734
fixed spelling errors
wvanderp Dec 6, 2020
58979fa
syntax cleanup
wvanderp Dec 14, 2020
9e597e6
found a difference in the api response and the Concept URI response
wvanderp Dec 14, 2020
5945c02
added a list of languages
wvanderp Dec 28, 2020
e729fe4
added the WikibasePropertySnak and tests
wvanderp Dec 28, 2020
b05bcae
made site link url optional and added tests
wvanderp Dec 30, 2020
8f1d281
added more precise types
wvanderp Jan 22, 2021
ca4ff11
the hash is optional when setting the hash
wvanderp Feb 7, 2021
ec2d131
keeping with the times
wvanderp Aug 31, 2021
72c4bb8
also including necessary files
wvanderp Aug 31, 2021
61bf4e0
added necessary exports
wvanderp Aug 31, 2021
434b8a2
export a needed interface
wvanderp Aug 31, 2021
3825ad7
made a type explicit
wvanderp Nov 2, 2021
d4caf3f
added some flexibility into the model
wvanderp Nov 21, 2021
1b2a497
added wiki commons entities
wvanderp Feb 9, 2022
410c7b8
Add new Snaks
wvanderp Nov 29, 2024
b52ce8a
Update project infrastructure and add new language codes
wvanderp Aug 27, 2026
37184d7
Add Property interface and GeoLineSnak type
wvanderp Aug 27, 2026
d7c7a78
Update dependencies, test configuration, and package settings
wvanderp Sep 5, 2026
ec05950
Update project structure and add language type definitions
wvanderp Sep 5, 2026
b7ad20e
Clarify package description and update version to 1.0.0
wvanderp Sep 5, 2026
7778040
Remove outdated first-publication instructions from PUBLISHING.md and…
wvanderp Sep 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
266 changes: 226 additions & 40 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -1,71 +1,257 @@
export type DataType = 'string';
export interface WikidataResponse {
entities: {
[id: string]: Item;
};
}

export interface Item {
pageid: number;
ns: number;
title: string;
lastrevid: number;
modified: string;
type: string;
Comment thread
wvanderp marked this conversation as resolved.
Outdated
id: string;
labels: Labels;
descriptions: Descriptions;
aliases: Aliases;
claims: StatementMap;
sitelinks: Sitelinks;
}

export interface Labels {
[language: string]: LabelAndDiscription;
}

export interface Descriptions {
[language: string]: LabelAndDiscription;
}

export type DataValueType = 'string';
export interface Aliases {
[language: string]: LabelAndDiscription[] | null;
Comment thread
wvanderp marked this conversation as resolved.
Outdated
}

export interface DataValue {
type: DataValueType;
export interface LabelAndDiscription {
language: string;
value: string;
}

export interface StatementMap {
[propery: string]: (Statement)[] | null;
Comment thread
wvanderp marked this conversation as resolved.
Outdated
}

export type Snaks = CommonsMediaSnak
| GlobeCoordinateSnak
| MonolingualTextSnak
| QuantitySnak
| StringSnak
| TimeSnak
| URLSnak
| WikibaseItemSnak
| ExternalIdentifierSnak
| GeoShapeSnak
| MathSnak
| TabularDataSnak
| MusicalNotationSnak;

export interface Statement {
mainsnak: Snaks;
type: "statement",
id?: string;
rank: "normal" | "deprecated" | "preferred";
qualifiers?: Qualifiers;
"qualifiers-order"?: (string)[] | null;
Comment thread
wvanderp marked this conversation as resolved.
Outdated
references?: (Reference)[] | null;
Comment thread
wvanderp marked this conversation as resolved.
Outdated
}

export type Qualifier<T> = T & {hash: string};

export type QualifierSnaks = Qualifier<CommonsMediaSnak>
| Qualifier<GlobeCoordinateSnak>
| Qualifier<MonolingualTextSnak>
| Qualifier<QuantitySnak>
| Qualifier<StringSnak>
| Qualifier<TimeSnak>
| Qualifier<URLSnak>
| Qualifier<WikibaseItemSnak>
| Qualifier<ExternalIdentifierSnak>
| Qualifier<GeoShapeSnak>
| Qualifier<MathSnak>
| Qualifier<TabularDataSnak>
| Qualifier<MusicalNotationSnak>;

export interface Qualifiers {
[property: string]: QualifierSnaks[] | null
Comment thread
wvanderp marked this conversation as resolved.
Outdated
}

export interface Reference {
hash: string;
snaks: ReferenceSnaks;
"snaks-order"?: (string)[] | null;
}

export interface ReferenceSnaks {
[properyId: string]: (Snaks)[] | null;
Comment thread
wvanderp marked this conversation as resolved.
Outdated
}

export interface Sitelinks {
[wiki: string]: SiteLink;
}

export interface SiteLink {
site: string;
title: string;
badges?: (string)[] | null;
Comment thread
wvanderp marked this conversation as resolved.
Outdated
url: string;
}


/*
_
| |
___ _ __ __ _ | | __ ___
/ __| | '_ \ / _` | | |/ / / __|
\__ \ | | | | | (_| | | < \__ \
|___/ |_| |_| \__,_| |_|\_\ |___/


*/

export type SnakType = 'value' | 'somevalue' | 'novalue';

export interface Snak {
interface Snak {
snaktype: SnakType;
property: string;
datatype: DataType;
datavalue?: DataValue; // absent for snaktype != 'value'
hash?: string;
datavalue?: Record<string, unknown>;
datatype: string;
}

export interface Qualifier extends Snak {
hash: string;
export interface StringSnak extends Snak {
datavalue?: {
value: string;
type: string;
};
datatype: "string";
}

export interface QualifierMap {
[ propertyId: string ]: Qualifier[];
export interface URLSnak extends Snak {
datavalue?: {
value: string;
type: string;
};
datatype: "url";
}

export interface SnakMap {
[ propertyId: string ]: Snak[];
export interface WikibaseItemSnak extends Snak {
datavalue?: {
value: {
"entity-type": string;
"numeric-id": number;
id: string;
};
type: string;
}
datatype: "wikibase-item";
}

export interface Reference {
hash: string;
snaks: SnakMap;
'snaks-order': string[];

export interface TimeSnak extends Snak {
datavalue?: {
value: {
time: string;
timezone: number;
before: number;
after: number;
precision: number;
calendarmodel: string;
};
type: "time";
};
datatype: "time";
}

export type Rank = 'preferred' | 'normal' | 'deprecated';
export interface MonolingualTextSnak extends Snak {
datavalue?: {
value: {
text: string;
language: string;
};
type: "monolingualtext";
};
datatype: "monolingualtext";
}

export interface Statement {
id?: string; // absent in newly created statements (fresh ID assigned server-side on save)
mainsnak: Snak;
rank: Rank;
qualifiers?: QualifierMap; // may be absent if empty, to save space
'qualifiers-order'?: string[]; // may be absent if empty
references?: Reference[]; // may be absent if empty
type: 'statement';
export interface ExternalIdentifierSnak extends Snak {
datavalue?: {
value: string;
type: string;
};
datatype: "external-id";
}

export interface StatementMap {
[ propertyId: string ]: Statement[];
export interface QuantitySnak extends Snak {
datavalue?: {
value: {
amount: string
unit: string
upperBound?: string;
lowerBound?: string
};
type: "quantity"
};
datatype: "quantity";
}

export interface Term {
language: string;
value: string;
export interface GlobeCoordinateSnak extends Snak {
datavalue?: {
value: {
latitude: number;
longitude: number;
altitude?: null;
precision: number;
globe: string;
};
type: "globecoordinate";
};
datatype: "globe-coordinate";
}

export interface CommonsMediaSnak extends Snak {
datavalue?: {
value: string
type: string
};
datatype: "commonsMedia";
}

export interface GeoShapeSnak extends Snak {
datavalue?: {
value: string,
type: string
};
datatype: "geo-shape";
}

export interface TermList {
[language: string]: Term;
export interface MathSnak extends Snak {
datavalue?: {
value: string,
type: string
};
datatype: "math";
}

export interface AliasesList {
[language: string]: Term[];
export interface TabularDataSnak extends Snak {
datavalue?: {
value: string,
type: string
};
datatype: "tabular-data";
}

export interface Fingerprintable {
labels: TermList;
descriptions: TermList;
aliases: AliasesList;
export interface MusicalNotationSnak extends Snak {
datavalue?: {
value: string,
type: string
};
datatype: "musical-notation";
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
],
"scripts": {
"test": "npm run lint && tsc",
"lint": "eslint index.d.ts wikibase-datamodel-tests.ts",
"lint": "eslint index.d.ts tests/**/*",
"fix": "npm run lint -- --fix"
},
"repository": {
Expand Down
Loading