Skip to content

Commit 8e3a3ca

Browse files
🤖 Merge PR DefinitelyTyped#70460 [levn] [type-check] create levn, fix up type-check by @JoshuaKGoldberg
1 parent 0555f50 commit 8e3a3ca

File tree

8 files changed

+137
-33
lines changed

8 files changed

+137
-33
lines changed

‎types/levn/.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/levn/index.d.ts‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { CustomType, ParsedType, ParsedTypeData } from "type-check";
2+
3+
export interface CastableCustomType extends CustomType {
4+
cast: (input: unknown) => ParsedTypeData;
5+
}
6+
7+
export interface ParseOptions {
8+
customTypes?: Record<string, CastableCustomType> | undefined;
9+
explicit?: boolean | undefined;
10+
}
11+
12+
export function parse(
13+
type: string,
14+
string: string,
15+
options?: ParseOptions,
16+
): unknown;
17+
18+
export function parsedTypeParse(
19+
parsedType: ParsedType,
20+
input: string,
21+
options?: ParseOptions,
22+
): unknown;
23+
24+
export const VERSION: string;

‎types/levn/levn-tests.ts‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import * as levn from "levn";
2+
import { parseType } from "type-check";
3+
4+
levn.VERSION;
5+
6+
levn.parse("Number", "2");
7+
8+
levn.parse("RegExp", "re");
9+
10+
levn.parse("RegExp", "re", {});
11+
levn.parse("RegExp", "re", { customTypes: {} });
12+
levn.parse("RegExp", "re", {
13+
customTypes: {
14+
Even: {
15+
cast: input => ({
16+
type: "Just",
17+
value: input,
18+
}),
19+
typeOf: "Boolean",
20+
validate: input => !!input,
21+
},
22+
},
23+
});
24+
levn.parse("RegExp", "re", { explicit: true });
25+
levn.parse("RegExp", "re", {
26+
customTypes: {
27+
Even: {
28+
cast: input => ({
29+
type: "Just",
30+
value: input,
31+
}),
32+
typeOf: "Boolean",
33+
validate: input => !!input,
34+
},
35+
},
36+
explicit: true,
37+
});
38+
levn.parse("RegExp", "re", { explicit: true });
39+
40+
const parsedType = parseType("[Number]");
41+
42+
levn.parsedTypeParse(parsedType, "1,2,3");

‎types/levn/package.json‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"private": true,
3+
"name": "@types/levn",
4+
"version": "0.4.9999",
5+
"projects": [
6+
"https://github.com/gkz/levn"
7+
],
8+
"dependencies": {
9+
"@types/type-check": "*"
10+
},
11+
"devDependencies": {
12+
"@types/levn": "workspace:."
13+
},
14+
"owners": [
15+
{
16+
"name": "Josh Goldberg",
17+
"githubUsername": "JoshuaKGoldberg"
18+
}
19+
]
20+
}

‎types/levn/tsconfig.json‎

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+
"levn-tests.ts"
18+
]
19+
}

‎types/type-check/.eslintrc.json‎

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,28 @@
1-
declare namespace TypeCheck {
2-
export interface CustomType {
3-
[typeName: string]: {
4-
typeOf: string;
5-
validate: (x: any) => any;
6-
};
7-
}
8-
9-
export interface Options {
10-
customTypes: CustomType;
11-
}
12-
13-
export interface TC {
14-
VERSION: string;
15-
typeCheck: (typeDescription: string, inst: any, options?: Options) => boolean;
16-
parseType: (typeDescription: string) => Object;
17-
parsedTypeCheck: (parsedType: any, obj: any) => boolean;
18-
}
1+
export const VERSION: string;
2+
3+
export interface CustomType {
4+
typeOf: string;
5+
validate: (input: unknown) => boolean;
6+
}
7+
8+
export interface CustomTypes {
9+
[typeName: string]: CustomType;
10+
}
11+
12+
export interface Options {
13+
customTypes?: CustomTypes;
1914
}
2015

21-
declare var typecheck: TypeCheck.TC;
16+
export function typeCheck(type: string, input: unknown, options?: Options): boolean;
17+
18+
// This is, in fact, a single element tuple.
19+
// eslint-disable-next-line @definitelytyped/no-single-element-tuple-type
20+
export type ParsedType = [ParsedTypeData];
2221

23-
declare module "type-check" {
24-
export = typecheck;
22+
export interface ParsedTypeData {
23+
type: string;
2524
}
25+
26+
export function parseType(type: string): ParsedType;
27+
28+
export function parsedTypeCheck(parsedType: ParsedType, input: string, options?: Options): boolean;

‎types/type-check/type-check-tests.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import tchecker = require("type-check");
44

5-
var typeCheck = (i1: string, i2: any, i3?: TypeCheck.Options) => {
5+
var typeCheck = (i1: string, i2: any, i3?: tchecker.Options) => {
66
console.log(tchecker.typeCheck(i1, i2, i3));
77
};
88
var parseType = (i1: string) => {
@@ -62,7 +62,7 @@ typeCheck("RegExp{source: String, ...}", { source: "re" }); // false
6262

6363
console.log("===>testing custom types");
6464
// Custom types:
65-
var opt = <TypeCheck.Options> {
65+
var opt = <tchecker.Options> {
6666
customTypes: {
6767
Even: {
6868
typeOf: "Number",
@@ -75,7 +75,7 @@ var opt = <TypeCheck.Options> {
7575
};
7676
typeCheck("Even", 2, opt); // true
7777

78-
opt = <TypeCheck.Options> {
78+
opt = <tchecker.Options> {
7979
customTypes: {
8080
Odd: {
8181
typeOf: "Number",

0 commit comments

Comments
 (0)