mirror of
https://github.com/gosticks/DefinitelyTyped.git
synced 2026-07-07 02:30:12 +00:00
Merge pull request #31106 from mutech/master
add types for caniuse-lite
This commit is contained in:
48
types/caniuse-lite/caniuse-lite-tests.ts
Normal file
48
types/caniuse-lite/caniuse-lite-tests.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import {
|
||||
agents, features, feature, Agent, Feature, PackedFeature, StatsByAgentID, SupportStatusByVersion, SupportStatus
|
||||
} from "caniuse-lite";
|
||||
|
||||
const chrome: Agent | undefined = agents.chrome;
|
||||
if (chrome !== undefined) {
|
||||
const browser: string = chrome.browser;
|
||||
const prefix: string = chrome.prefix;
|
||||
const prefixExceptions: any = chrome.prefix_exceptions;
|
||||
const usageGlobal: { [version: string]: number | undefined } = chrome.usage_global;
|
||||
const releaseDate: { [version: string]: number | undefined } = chrome.release_date;
|
||||
const versions: Array<string | null> = chrome.versions;
|
||||
consume(browser, prefix, prefixExceptions, usageGlobal, releaseDate, versions);
|
||||
}
|
||||
|
||||
const unpackedFeatures = Object.keys(features).map((id: string) => {
|
||||
const packed: PackedFeature = features[id];
|
||||
const unpacked: Feature = feature(packed);
|
||||
|
||||
const status: string = unpacked.status;
|
||||
const title: string = unpacked.title;
|
||||
const stats: StatsByAgentID = unpacked.stats;
|
||||
Object.keys(stats).forEach((agentID: string) => {
|
||||
const byVersion: SupportStatusByVersion = stats[agentID];
|
||||
Object.keys(byVersion).forEach(version => {
|
||||
const supportStatus: SupportStatus = byVersion[version];
|
||||
consume(supportStatus);
|
||||
});
|
||||
|
||||
const supportStatusByVersion: SupportStatusByVersion = stats[agentID];
|
||||
const agent: Agent = agents[agentID]!;
|
||||
return {
|
||||
feature: unpacked,
|
||||
agent,
|
||||
versions: Object.keys(supportStatusByVersion).map(version => {
|
||||
return {
|
||||
version,
|
||||
releaseDate: agent.release_date[version],
|
||||
[`feature_${id}`]: supportStatusByVersion[version]
|
||||
};
|
||||
})
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
function consume(...anything: any[]): void {
|
||||
// ...
|
||||
}
|
||||
159
types/caniuse-lite/index.d.ts
vendored
Normal file
159
types/caniuse-lite/index.d.ts
vendored
Normal file
@@ -0,0 +1,159 @@
|
||||
// Type definitions for caniuse-lite 1.0
|
||||
// Project: https://github.com/ben-eb/caniuse-lite#readme
|
||||
// Definitions by: Michael Utech <https://github.com/mutech>
|
||||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||
// TypeScript Version: 2.2
|
||||
|
||||
/**
|
||||
* Information about user agents (browsers, platforms) indexed by their ID.
|
||||
*/
|
||||
export const agents: AgentsByID;
|
||||
|
||||
/**
|
||||
* Features index by their ID. The feature ID is a human readable identifier. The
|
||||
* associated value is a packed version of information about the feature that
|
||||
* can be unpacked using the function `feature(packed)`
|
||||
*/
|
||||
export const features: { [featureID: string]: PackedFeature; };
|
||||
|
||||
/**
|
||||
* @param packedFeature a packed feature obtained from `features[key]` for some valid key.
|
||||
* @return the unpacked information as `Feature`.
|
||||
*/
|
||||
export function feature(packedFeature: PackedFeature): Feature;
|
||||
|
||||
/**
|
||||
* @param packedRegion a packed version of regional usage data by agent OD.
|
||||
* @return the unpacked usage data indexed by agent ID and then version.
|
||||
*/
|
||||
export function region(packedRegion: PackedRegion): { [agentID: string]: UsageByVersion };
|
||||
|
||||
/**
|
||||
* Agents indexed by their ID. .
|
||||
*/
|
||||
export type AgentsByID = Readonly<{ [id: string]: Readonly<Agent> | undefined }>;
|
||||
|
||||
/**
|
||||
* Feature support status by version indexed by agent ID.
|
||||
*/
|
||||
export type StatsByAgentID = Readonly<{ [agentID: string]: SupportStatusByVersion }>;
|
||||
|
||||
/**
|
||||
* Feature support status indexed by an agent's versions.
|
||||
*/
|
||||
export type SupportStatusByVersion = Readonly<{ [version: string]: SupportStatus }>;
|
||||
|
||||
/**
|
||||
* Usage (percentage/market share) indexed by an agent's versions.
|
||||
*/
|
||||
export type UsageByVersion = Readonly<{ [version: string]: number | undefined }>;
|
||||
|
||||
/**
|
||||
* The standardization status of a feature:
|
||||
* * ls - WHATWG living standard
|
||||
* * rec - W3C recommendation
|
||||
* * pr - W3C proposed recommendation
|
||||
* * cr - W3C candidate recommendation
|
||||
* * wd - W3C working draft
|
||||
* * other - Non-W3C, but reputable
|
||||
* * unoff - Unofficial
|
||||
*/
|
||||
export type FeatureStatus = "ls" | "rec" | "pr" | "cr" | "wd" | "other" | "unoff" | string;
|
||||
|
||||
/**
|
||||
* Encoded support status:
|
||||
* * `n` - not supported
|
||||
* * `p` - not supported, polyfill available
|
||||
* * `u` - unknown
|
||||
* * `a x` - partially supported, vendor prefix
|
||||
* * `a` - partially supported
|
||||
* * `y x` - fully supported, vendor prefix
|
||||
* * `y` - fully supported
|
||||
*
|
||||
* The support status can additionally have one or more footnote references as `#<n>`, f.e.
|
||||
* `a x #1 #3`.
|
||||
*/
|
||||
export type SupportStatus = 'n' | 'p' | 'u' | "a x" | 'a' | "y x" | 'y' | string;
|
||||
|
||||
/**
|
||||
* Provides information about the Agent.
|
||||
*/
|
||||
export interface Agent {
|
||||
/**
|
||||
* Global agent usage by version
|
||||
*/
|
||||
usage_global: UsageByVersion;
|
||||
|
||||
/**
|
||||
* The agents vendor prefix
|
||||
*/
|
||||
prefix: string;
|
||||
|
||||
/**
|
||||
* Version matrix. See [caniuse](https://caniuse.com)
|
||||
*/
|
||||
versions: [ // Tuple of 70 version slots:
|
||||
string|null, string|null, string|null, string|null, string|null,
|
||||
string|null, string|null, string|null, string|null, string|null,
|
||||
string|null, string|null, string|null, string|null, string|null,
|
||||
string|null, string|null, string|null, string|null, string|null,
|
||||
string|null, string|null, string|null, string|null, string|null,
|
||||
string|null, string|null, string|null, string|null, string|null,
|
||||
string|null, string|null, string|null, string|null, string|null,
|
||||
string|null, string|null, string|null, string|null, string|null,
|
||||
string|null, string|null, string|null, string|null, string|null,
|
||||
string|null, string|null, string|null, string|null, string|null,
|
||||
string|null, string|null, string|null, string|null, string|null,
|
||||
string|null, string|null, string|null, string|null, string|null,
|
||||
string|null, string|null, string|null, string|null, string|null,
|
||||
string|null, string|null, string|null, string|null, string|null ];
|
||||
|
||||
/**
|
||||
* The agent's name
|
||||
*/
|
||||
browser: string;
|
||||
|
||||
/**
|
||||
* Release dates as seconds since epoch by version.
|
||||
*/
|
||||
release_date: { [version: string]: number | undefined };
|
||||
|
||||
/**
|
||||
* Exceptions to vendor prefix use.
|
||||
*/
|
||||
prefix_exceptions?: { [version: string]: string | undefined };
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies a feature and its support status in all known agent versions.
|
||||
*/
|
||||
export interface Feature {
|
||||
/**
|
||||
* Specification status of the feature.
|
||||
*/
|
||||
status: FeatureStatus;
|
||||
|
||||
/**
|
||||
* Descriptive title of the feature.
|
||||
*/
|
||||
title: string;
|
||||
|
||||
/**
|
||||
* Agent support matrix for this feature.
|
||||
*/
|
||||
stats: StatsByAgentID;
|
||||
}
|
||||
|
||||
/**
|
||||
* A space optimized version of Feature that can be unpacked using `feature(PackedFeature)`.
|
||||
*/
|
||||
export interface PackedFeature {
|
||||
[encodedKey: string]: any;
|
||||
}
|
||||
|
||||
/**
|
||||
* A space optimized version of Region that can be unpacked using `region(PackedFeature)`.
|
||||
*/
|
||||
export interface PackedRegion {
|
||||
[encodedKey: string]: any;
|
||||
}
|
||||
23
types/caniuse-lite/tsconfig.json
Normal file
23
types/caniuse-lite/tsconfig.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"lib": [
|
||||
"es6"
|
||||
],
|
||||
"noImplicitAny": true,
|
||||
"noImplicitThis": true,
|
||||
"strictNullChecks": true,
|
||||
"strictFunctionTypes": true,
|
||||
"baseUrl": "../",
|
||||
"typeRoots": [
|
||||
"../"
|
||||
],
|
||||
"types": [],
|
||||
"noEmit": true,
|
||||
"forceConsistentCasingInFileNames": true
|
||||
},
|
||||
"files": [
|
||||
"index.d.ts",
|
||||
"caniuse-lite-tests.ts"
|
||||
]
|
||||
}
|
||||
1
types/caniuse-lite/tslint.json
Normal file
1
types/caniuse-lite/tslint.json
Normal file
@@ -0,0 +1 @@
|
||||
{ "extends": "dtslint/dt.json" }
|
||||
Reference in New Issue
Block a user