diff --git a/CHANGELOG.md b/CHANGELOG.md index d6b0b3f9de..d273e9b417 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # arktype +## 1.0.26-alpha + +### Patch Changes + +- Fix an issue where optional paths could be used as discriminants + ## 1.0.25-alpha ### Patch Changes diff --git a/dev/arktype.io/docs/demos/stackblitzGenerators/createStackblitzDemo.ts b/dev/arktype.io/docs/demos/stackblitzGenerators/createStackblitzDemo.ts index 2a15a3729f..f36fa8e381 100644 --- a/dev/arktype.io/docs/demos/stackblitzGenerators/createStackblitzDemo.ts +++ b/dev/arktype.io/docs/demos/stackblitzGenerators/createStackblitzDemo.ts @@ -39,7 +39,7 @@ export const createStackblitzDemo = async ({ embedId }: DemoProps) => template: "typescript", dependencies: { // @lineFrom:package.json:version |> embed("arktype":,,) - arktype: "1.0.25-alpha" + arktype: "1.0.26-alpha" }, settings: { compile: { diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api.mdx b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api.mdx new file mode 100644 index 0000000000..855e980455 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api.mdx @@ -0,0 +1,15 @@ +--- +id: api +hide_table_of_contents: true +title: API +--- + +# API + + + +ArkType supports many of TypeScript's built-in types and operators, as well as some new ones dedicated exclusively to runtime validation. In fact, we got a little ahead of ourselves and built a ton of cool features, but we're still working on getting caught up syntax and API docs. Keep an eye out for more in the next couple weeks ⛵ + +In the meantime, check out the examples here and use the type hints you get to learn how you can customize your types and scopes. If you want to explore some of the more advanced features, take a look at [our unit tests](https://github.com/arktypeio/arktype/tree/main/dev/test) or ask us [on Discord](https://discord.gg/xEzdc3fJQC) if your functionality is supported. If not, [create a GitHub issue](https://github.com/arktypeio/arktype/issues/new) so we can prioritize it! + + diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/ark.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/ark.md new file mode 100644 index 0000000000..a2d25d196a --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/ark.md @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +--- + +# ark + +## text + +```ts +ark: Space +``` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/arkscope.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/arkscope.md new file mode 100644 index 0000000000..7a204d6191 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/arkscope.md @@ -0,0 +1,54 @@ +--- +hide_table_of_contents: true +--- + +# arkScope + +## text + +```ts +arkScope: import("./scope.js").Scope< + [ + { + any: any + bigint: bigint + boolean: boolean + false: false + never: never + null: null + number: number + object: object + string: string + symbol: symbol + true: true + unknown: unknown + void: void + undefined: undefined + Function: (...args: any[]) => unknown + Date: Date + Error: Error + Map: Map + RegExp: RegExp + Set: Set + WeakMap: WeakMap + WeakSet: WeakSet + Promise: Promise + alpha: string + alphanumeric: string + lowercase: string + uppercase: string + creditCard: string + email: string + uuid: string + parsedNumber: (In: string) => number + parsedInteger: (In: string) => number + parsedDate: (In: string) => Date + semver: string + json: (In: string) => unknown + integer: number + }, + {}, + false + ] +> +``` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/arrayof.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/arrayof.md new file mode 100644 index 0000000000..8a8bf0f25c --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/arrayof.md @@ -0,0 +1,24 @@ +--- +hide_table_of_contents: true +--- + +# arrayOf + +## operator + +- [arrayOf](./arrayof.md) + +## string + +- "T[]"
+- const numberArray = type("number[]")
+ +## tuple + +- [T, "[]"]
+- const tupleArray = type(["number", "[]"])
+ +## helper + +- arrayOf(T)
+- const helperArray = arrayOf("number")
diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/infer.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/infer.md new file mode 100644 index 0000000000..05f8e689d0 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/infer.md @@ -0,0 +1,13 @@ +--- +hide_table_of_contents: true +--- + +# Infer + +## text + +```ts +export type Infer = { + [as]?: t +} +``` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/inferdefinition.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/inferdefinition.md new file mode 100644 index 0000000000..faf59bc595 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/inferdefinition.md @@ -0,0 +1,23 @@ +--- +hide_table_of_contents: true +--- + +# inferDefinition + +## text + +```ts +export type inferDefinition = isAny extends true + ? never + : def extends Infer | InferredThunk + ? t + : def extends string + ? inferString + : def extends List + ? inferTuple + : def extends RegExp + ? string + : def extends Dict + ? inferRecord + : never +``` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/instanceof.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/instanceof.md new file mode 100644 index 0000000000..0ebd7546ec --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/instanceof.md @@ -0,0 +1,19 @@ +--- +hide_table_of_contents: true +--- + +# instanceOf + +## operator + +- [instanceOf](./instanceof.md) + +## tuple + +- ["instanceOf", T]
+- const tupleInstanceOf = type(["instanceOf", Date])
+ +## helper + +- instanceOf(T)
+- const helperInstanceOf = instanceOf(Date)
diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/intersection.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/intersection.md new file mode 100644 index 0000000000..53c7a5ba03 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/intersection.md @@ -0,0 +1,24 @@ +--- +hide_table_of_contents: true +--- + +# intersection + +## operator + +- [&](./intersection.md) + +## string + +- "L&R"
+- const intersection = type("/@arktype\.io$/ & email")
+ +## tuple + +- [L, "&", R]
+- const tupleIntersection = type(["/@arktype\.io$/", "&", "email"])
+ +## helper + +- intersection(L,R)
+- const helperIntersection = intersection("/@arktype\.io$/","email")
diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/jsobjectsscope.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/jsobjectsscope.md new file mode 100644 index 0000000000..222bb52910 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/jsobjectsscope.md @@ -0,0 +1,19 @@ +--- +hide_table_of_contents: true +--- + +# jsObjectsScope + +## text + +| Name | Type | Description | +| -------- | ------------------------------ | ----------- | +| Function | ` (...args: any[]) => unknown` | | +| Date | ` Date` | | +| Error | ` Error` | | +| Map | ` Map` | | +| RegExp | ` RegExp` | | +| Set | ` Set` | | +| WeakMap | ` WeakMap` | | +| WeakSet | ` WeakSet` | | +| Promise | ` Promise` | | diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/keyof.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/keyof.md new file mode 100644 index 0000000000..a8c7971157 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/keyof.md @@ -0,0 +1,19 @@ +--- +hide_table_of_contents: true +--- + +# keyOf + +## operator + +- [keyOf](./keyof.md) + +## tuple + +- "["keyOf", T]"
+- const tupleKeyOf = type(["keyOf", {a:"string"}])
+ +## helper + +- keyOf(T)
+- const helperKeyOf = keyOf({a:"string"})
diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/keywords.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/keywords.md new file mode 100644 index 0000000000..faccfb309d --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/keywords.md @@ -0,0 +1,56 @@ +--- +hide_table_of_contents: true +--- + +# Keywords + +## jsObjectsScope + +| Name | Type | Description | +| -------- | ------------------------------ | ----------- | +| Function | ` (...args: any[]) => unknown` | | +| Date | ` Date` | | +| Error | ` Error` | | +| Map | ` Map` | | +| RegExp | ` RegExp` | | +| Set | ` Set` | | +| WeakMap | ` WeakMap` | | +| WeakSet | ` WeakSet` | | +| Promise | ` Promise` | | + +## tsKeywordsScope + +| Name | Type | Description | +| --------- | ------------ | ----------- | +| any | ` any` | any | +| bigint | ` bigint` | a bigint | +| boolean | ` boolean` | a boolean | +| false | ` false` | false | +| never | ` never` | never | +| null | ` null` | null | +| number | ` number` | a number | +| object | ` object` | an object | +| string | ` string` | a string | +| symbol | ` symbol` | a symbol | +| true | ` true` | true | +| unknown | ` unknown` | unknown | +| void | ` void` | void | +| undefined | ` undefined` | undefined | + +## validationScope + +| Name | Type | Description | +| ------------- | -------------------------- | ---------------------------- | +| alpha | ` string` | only letters | +| alphanumeric | ` string` | only letters and digits | +| lowercase | ` string` | only lowercase letters | +| uppercase | ` string` | only uppercase letters | +| creditCard | ` string` | a valid credit card number | +| email | ` string` | a valid email | +| uuid | ` string` | a valid UUID | +| parsedNumber | ` (In: string) => number` | a well-formed numeric string | +| parsedInteger | ` (In: string) => number` | a well-formed integer string | +| parsedDate | ` (In: string) => Date` | a valid date | +| semver | ` string` | a valid semantic version | +| json | ` (In: string) => unknown` | a JSON-parsable string | +| integer | ` number` | an integer | diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/morph.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/morph.md new file mode 100644 index 0000000000..0471844646 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/morph.md @@ -0,0 +1,19 @@ +--- +hide_table_of_contents: true +--- + +# morph + +## operator + +- [|>](./morph.md) + +## tuple + +- [inputType, "|>", (data) => output]
+- const tupleMorph = type( ["string", "|>" , (data) => \`morphed ${data}\`])
+ +## helper + +- morph(inputType, (data) => output)
+- const helperMorph = morph("string", (data) => \`morphed ${data}\`)
diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/narrow.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/narrow.md new file mode 100644 index 0000000000..4f0e4b54ad --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/narrow.md @@ -0,0 +1,18 @@ +--- +hide_table_of_contents: true +--- + +# narrow + +## operator + +- [=>](./narrow.md) + +## tuple + +- ["type", "=>" , condition]
+- const narrow = type( ["number", "=>" , (n) => n % 2 === 0])
+ +## example + +- const isEven = (x: unknown): x is number => x % 2 === 0 diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/operators.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/operators.md new file mode 100644 index 0000000000..0bf51f2343 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/operators.md @@ -0,0 +1,22 @@ +--- +hide_table_of_contents: true +--- + +# Operators + +## Operating Table + +| operator | string | tuple | helper | +| ----------------------------- | ---------------------------------------------------------- | ---------------------------------------- | ---------------------------------- | +| [arrayOf](./arrayof.md) | "T[]" | [T, "[]"] | arrayOf(T) | +| [instanceOf](./instanceof.md) | | ["instanceOf", T] | instanceOf(T) | +| [&](./intersection.md) | "L&R" | [L, "&", R] | intersection(L,R) | +| [keyOf](./keyof.md) | | "["keyOf", T]" | keyOf(T) | +| [|>](./morph.md) | | [inputType, "|>", (data) => output] | morph(inputType, (data) => output) | +| [=>](./narrow.md) | | ["type", "=>" , condition] | | +| [|](./union.md) | "L|R" | [L, "|" , R] | union(L,R) | +| [===](./valueof.md) | | ["===", T] | valueOf(T) | +| [:](./parseconfigtuple.md) | | ["type", ":", config] | | +| [bound](./validatebound.md) | "N unknown + parsedNumber: (In: string) => number + parsedInteger: (In: string) => number + parsedDate: (In: string) => Date + Function: (...args: any[]) => unknown + Date: Date + Error: Error + Map: Map + RegExp: RegExp + Set: Set + WeakMap: WeakMap + WeakSet: WeakSet + Promise: Promise +} +``` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/problem.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/problem.md new file mode 100644 index 0000000000..78aa650866 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/problem.md @@ -0,0 +1,29 @@ +--- +hide_table_of_contents: true +--- + +# Problem + +## text + +```ts +export declare class Problem { + code: code + path: Path + private data + private source + private writers + parts?: Problem[] + constructor( + code: code, + path: Path, + data: ProblemData, + source: ProblemSource, + writers: ProblemWriters + ) + toString(): string + get message(): string + get reason(): string + get mustBe(): string +} +``` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/problems.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/problems.md new file mode 100644 index 0000000000..28ef35b95f --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/problems.md @@ -0,0 +1,12 @@ +--- +hide_table_of_contents: true +--- + +# Problems + +## text + +```ts +Problems: new (state: TraversalState) => Problems +export type Problems = arraySubclassToReadonly; +``` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/resolvednode.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/resolvednode.md new file mode 100644 index 0000000000..07a063a60c --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/resolvednode.md @@ -0,0 +1,17 @@ +--- +hide_table_of_contents: true +--- + +# ResolvedNode + +## operator + +- [node](./resolvednode.md) + +## tuple + +- ["node", nodeDefinition] + +## helper + +- type.from(nodeDefinition) diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/scope.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/scope.md new file mode 100644 index 0000000000..05b186a879 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/scope.md @@ -0,0 +1,76 @@ +--- +hide_table_of_contents: true +--- + +# scope + +## text + +```ts +scope: ScopeParser +``` + +--- + +## hide_table_of_contents: true + +# Scope + +## text + +```ts +export declare class Scope { + #private + aliases: Dict + name: string + config: ScopeConfig + parseCache: FreezingCache + constructor(aliases: Dict, opts?: ScopeOptions) + getAnonymousQualifiedName(base: AnonymousTypeName): QualifiedTypeName + addAnonymousTypeReference(referencedType: Type, ctx: ParseContext): Node + get infer(): exportsOf + compile(): Space> + addParsedReferenceIfResolvable( + name: name, + ctx: ParseContext + ): boolean + resolve(name: name): Type + resolveNode(node: Node): ResolvedNode + resolveTypeNode(node: Node): TypeNode + expressions: Expressions> + intersection: import("./expressions.js").BinaryExpressionParser< + resolutions, + "&" + > + union: import("./expressions.js").BinaryExpressionParser< + resolutions, + "|" + > + arrayOf: import("./expressions.js").UnaryExpressionParser< + resolutions, + "[]" + > + keyOf: import("./expressions.js").UnaryExpressionParser< + resolutions, + "keyof" + > + valueOf: import("./expressions.js").UnvalidatedExpressionParser< + resolutions, + "===" + > + instanceOf: import("./expressions.js").UnvalidatedExpressionParser< + resolutions, + "instanceof" + > + narrow: import("./expressions.js").FunctionalExpressionParser< + resolutions, + "=>" + > + morph: import("./expressions.js").FunctionalExpressionParser< + resolutions, + "|>" + > + type: TypeParser> + isResolvable(name: string): unknown +} +``` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/space.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/space.md new file mode 100644 index 0000000000..17a1086e24 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/space.md @@ -0,0 +1,13 @@ +--- +hide_table_of_contents: true +--- + +# Space + +## text + +```ts +export type Space = { + [k in keyof exports]: Type +} +``` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/tskeywordsscope.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/tskeywordsscope.md new file mode 100644 index 0000000000..7fd172932d --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/tskeywordsscope.md @@ -0,0 +1,28 @@ +--- +hide_table_of_contents: true +--- + +# tsKeywordsScope + +## keywords + +- keywords: {"any": "any", "bigint": "a bigint", "boolean": "a boolean", "false": "false", "never": "never", "null": "null", "number": "a number", "object": "an object", "string": "a string", "symbol": "a symbol", "true": "true", "unknown": "unknown", "void": "void", "undefined": "undefined"} + +## text + +| Name | Type | Description | +| --------- | ------------ | ----------- | +| any | ` any` | any | +| bigint | ` bigint` | a bigint | +| boolean | ` boolean` | a boolean | +| false | ` false` | false | +| never | ` never` | never | +| null | ` null` | null | +| number | ` number` | a number | +| object | ` object` | an object | +| string | ` string` | a string | +| symbol | ` symbol` | a symbol | +| true | ` true` | true | +| unknown | ` unknown` | unknown | +| void | ` void` | void | +| undefined | ` undefined` | undefined | diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/type.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/type.md new file mode 100644 index 0000000000..9819cba469 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/type.md @@ -0,0 +1,23 @@ +--- +hide_table_of_contents: true +--- + +# type + +## text + +```ts +type: TypeParser +``` + +--- + +## hide_table_of_contents: true + +# Type + +## text + +```ts +export type Type = defer & TypeRoot> +``` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/union.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/union.md new file mode 100644 index 0000000000..d6cac5b74f --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/union.md @@ -0,0 +1,24 @@ +--- +hide_table_of_contents: true +--- + +# union + +## operator + +- [|](./union.md) + +## string + +- "L|R"
+- const union = type("string|number")
+ +## tuple + +- [L, "|" , R]
+- const tupleUnion = type(["string", "|", "number"])
+ +## helper + +- union(L,R)
+- const helperUnion = union("string", "number")
diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/validatebound.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/validatebound.md new file mode 100644 index 0000000000..6b03cc084d --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/validatebound.md @@ -0,0 +1,27 @@ +--- +hide_table_of_contents: true +--- + +# validateBound + +## operator + +- [bound](./validatebound.md) + +## tableRow + +| Variable | Description | +| -------- | -------------------------------------- | +| N | number literal | +| S | sized data (a number, string or array) | +| < | Comparator (one of <, <=, ==, >=, >) | + +## description + +- Bound operators allow data to be bounded in the format "S +- const range = type("2<=number<5")
+- const bound = type("string[]==5")
diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/validatedefinition.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/validatedefinition.md new file mode 100644 index 0000000000..0667a0e893 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/validatedefinition.md @@ -0,0 +1,27 @@ +--- +hide_table_of_contents: true +--- + +# validateDefinition + +## text + +```ts +export type validateDefinition = [def] extends [(...args: any[]) => any] + ? def + : def extends Terminal + ? def + : def extends string + ? validateString + : def extends TupleExpression + ? validateTupleExpression + : def extends BadDefinitionType + ? writeBadDefinitionTypeMessage< + objectKindOf extends string ? objectKindOf : domainOf + > + : isUnknown extends true + ? stringKeyOf<$> + : evaluate<{ + [k in keyof def]: validateDefinition + }> +``` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/validatedivisor.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/validatedivisor.md new file mode 100644 index 0000000000..573ec1acae --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/validatedivisor.md @@ -0,0 +1,13 @@ +--- +hide_table_of_contents: true +--- + +# validateDivisor + +## operator + +- [%](./validatedivisor.md) + +## string + +- "N%D", where "N" is a number and "D" is a non-zero integer diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/validationscope.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/validationscope.md new file mode 100644 index 0000000000..99c748cd66 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/validationscope.md @@ -0,0 +1,27 @@ +--- +hide_table_of_contents: true +--- + +# validationScope + +## keywords + +- keywords: { "alpha": "only letters", "alphanumeric": "only letters and digits", "lowercase": "only lowercase letters", "uppercase": "only uppercase letters", "creditCard": "a valid credit card number", "email": "a valid email", "uuid": "a valid UUID", "parsedNumber": "a well-formed numeric string", "parsedInteger": "a well-formed integer string", "parsedDate": "a valid date", "semver": "a valid semantic version", "json": "a JSON-parsable string", "integer": "an integer"} + +## text + +| Name | Type | Description | +| ------------- | -------------------------- | ---------------------------- | +| alpha | ` string` | only letters | +| alphanumeric | ` string` | only letters and digits | +| lowercase | ` string` | only lowercase letters | +| uppercase | ` string` | only uppercase letters | +| creditCard | ` string` | a valid credit card number | +| email | ` string` | a valid email | +| uuid | ` string` | a valid UUID | +| parsedNumber | ` (In: string) => number` | a well-formed numeric string | +| parsedInteger | ` (In: string) => number` | a well-formed integer string | +| parsedDate | ` (In: string) => Date` | a valid date | +| semver | ` string` | a valid semantic version | +| json | ` (In: string) => unknown` | a JSON-parsable string | +| integer | ` number` | an integer | diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/valueof.md b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/valueof.md new file mode 100644 index 0000000000..c28e9ba7a7 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/api/valueof.md @@ -0,0 +1,19 @@ +--- +hide_table_of_contents: true +--- + +# valueOf + +## operator + +- [===](./valueof.md) + +## tuple + +- ["===", T]
+- const tupleValueOf = type(["valueOf", {a:"string"}])
+ +## helper + +- valueOf(T)
+- const helperValueOf = valueOf({a:"string"})
diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/StackBlitzDemo.tsx b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/StackBlitzDemo.tsx new file mode 100644 index 0000000000..2e90b904be --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/StackBlitzDemo.tsx @@ -0,0 +1,49 @@ +import { LinearProgress, Stack } from "@mui/material" +import React, { useEffect, useState } from "react" +import type { DemoProps } from "./stackblitzGenerators/createStackblitzDemo" +import { + createStackblitzDemo, + DEMO_ELEMENT_ID +} from "./stackblitzGenerators/createStackblitzDemo" + +export const StackBlitzDemo = (demoProps: DemoProps) => { + const [isLoading, setIsLoading] = useState(true) + useEffect(() => { + activateDemo(demoProps, setIsLoading) + }, []) + return ( + + {isLoading ? : null} +
+ + ) +} + +const activateDemo = async ( + props: DemoProps, + setIsLoading: (value: boolean) => void +) => { + const vm = await createStackblitzDemo(props) + // hack to workaround a caching issue where tsconfig is not applied until it is modified + setTimeout( + () => + vm.applyFsDiff({ + create: { + "tsconfig.json": JSON.stringify( + { + compilerOptions: { + module: "esnext", + target: "esnext", + strict: true + } + }, + null, + 4 + ) + }, + destroy: [] + }), + 5000 + ) + setIsLoading(false) +} diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/.docgenSources.json b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/.docgenSources.json new file mode 100644 index 0000000000..b7e7830181 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/.docgenSources.json @@ -0,0 +1,11 @@ +{ + "//": "This directory was generated from the following files (see dev/scripts/docgen/mapDir.ts for details)", + "concision.ts": "dev/test/examples/concision.ts", + "demo.ts": "dev/test/examples/demo.ts", + "optimized.ts": "dev/test/examples/optimized.ts", + "scope.ts": "dev/test/examples/scope.ts", + "type.ts": "dev/test/examples/type.ts", + "demo.css.ts": "dev/arktype.io/docs/demos/layout/demo.css", + "index.html.ts": "dev/arktype.io/docs/demos/layout/index.html", + "populateDemo.ts": "dev/arktype.io/docs/demos/layout/populateDemo.ts" +} diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/concision.ts b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/concision.ts new file mode 100644 index 0000000000..c0051799a7 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/concision.ts @@ -0,0 +1,30 @@ +export default `//@ts-nocheck +import { morph, type } from "arktype" +import type { Infer } from "arktype" +import z from "zod" + +{ + const arkUser = type({ + name: /^ark.*$/ as Infer<\`ark\${string}\`>, + birthday: ["string", "|>", (s) => new Date(s)], + "powerLevel?": "1<=number<9000" + }) +} + +const arkUser = type({ + name: /^ark.*$/ as Infer<\`ark\${string}\`>, + birthday: morph("string", (s) => new Date(s)), + "powerLevel?": "1<=number<9000" +}) + +const zodUser = z.object({ + name: z.custom<\`zod\${string}\`>( + (val) => typeof val === "string" && /^zod.*$/.test(val) + ), + birthday: z.preprocess( + (arg) => (typeof arg === "string" ? new Date(arg) : undefined), + z.date() + ), + powerLevel: z.number().gte(1).lt(9000).optional() +}) +` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/demo.css.ts b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/demo.css.ts new file mode 100644 index 0000000000..07e38b0d22 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/demo.css.ts @@ -0,0 +1,67 @@ +export default `body { + font-family: "Cascadia Code", sans-serif; + background-color: hsl(220 18% 10%); +} + +#demo { + display: flex; + flex-direction: column; + gap: 1rem; + margin: -0.5rem; + padding: 0.5rem; +} + +#input { + display: flex; + flex-direction: row; + flex-wrap: wrap; + gap: 0.5rem; +} + +.section { + display: flex; + flex-direction: column; + flex-grow: 1; + gap: 0.5rem; +} + +p { + white-space: pre-wrap; +} + +pre { + white-space: pre-wrap; +} + +h3 { + margin: 0px; + color: #fffff0; +} + +.key { + color: #80cff8; +} +.val { + color: #f5cf8f; +} +.operator { + color: #eb9f2e; +} +.bracket { + color: #009eff; +} +.card { + padding: 1rem; + background-color: rgb(18, 18, 18); + color: rgb(255, 255, 255); + /* transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; */ + border-radius: 1rem; + box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 1px -1px, + rgba(0, 0, 0, 0.14) 0px 1px 1px 0px, rgba(0, 0, 0, 0.12) 0px 1px 3px 0px; + background-image: linear-gradient( + rgba(255, 255, 255, 0.05), + rgba(255, 255, 255, 0.05) + ); + height: 100%; +} +` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/demo.ts b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/demo.ts new file mode 100644 index 0000000000..0070617a0f --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/demo.ts @@ -0,0 +1,22 @@ +export default `import { type } from "arktype" + +// Define your type... +export const pkg = type({ + name: "string", + version: "semver", + "contributors?": "1 + + +
+
+
+

Definition

+
+
+
+
+
+

Output

+
+
+
+
+` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/optimized.ts b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/optimized.ts new file mode 100644 index 0000000000..b208e5d366 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/optimized.ts @@ -0,0 +1,41 @@ +export default `import { type, union } from "arktype" + +export const deepLeftOrRight = union( + { + auto: { + discriminated: "'left'" + } + }, + { + auto: { + discriminated: "'right'" + } + } +) + +export const unionInternalRepresentation = [ + ["domain", "object"], + [ + "switch", + { + path: ["auto", "discriminated"], + kind: "value", + cases: { + "'left'": [["requiredProp", ["auto", [["domain", "object"]]]]], + "'right'": [["requiredProp", ["auto", [["domain", "object"]]]]] + } + } + ] +] as const + +export const numericIntersection = type( + "(1 <= number%2 < 100) & (0 < number%3 <= 99)" +) + +export const numericInternalRepresentation = [ + ["domain", "number"], + ["divisor", 6], + ["bound", { limit: 1, comparator: ">=" }], + ["bound", { comparator: "<=", limit: 99 }] +] as const +` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/populateDemo.ts b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/populateDemo.ts new file mode 100644 index 0000000000..18458b6575 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/populateDemo.ts @@ -0,0 +1,69 @@ +export default `import "./demo.css" +import type { Problems, Type } from "arktype" +import { stringify } from "arktype/internal/utils/serialize.js" + +type PopulateDemoArgs = { + type: Type + data: unknown + problems: Problems +} +export const populateDemo = ({ data, type, problems }: PopulateDemoArgs) => { + const defElement = document.querySelector("#definition")! + defElement.textContent = stringify(type.definition, 2) + defElement.innerHTML = recolor(defElement.innerHTML) + + const resultElement = document.querySelector("#output")! + if (problems) { + resultElement.textContent = \`❌ problems:\n\n\${problems}\` + } else { + resultElement.textContent = \`✅ data:\n\n\${stringify(data, 2)}\` + resultElement.innerHTML = recolor(resultElement.innerHTML) + } +} + +const recolor = (input: string) => { + const lines = input.split("\\n") + const fixedInput: string[] = [""] + for (const line of lines) { + if (line.includes(":")) { + const parts = line.split(":") + fixedInput.push(\`\${buildKey(parts[0])}: \${buildVal(parts[1])}\`) + } else { + fixedInput.push(addArkdarkStyles(line)) + } + } + fixedInput.push("") + return fixedInput.join("\\n") +} + +const buildKey = (key: string) => { + return \`\${key}\` +} +const buildVal = (val: string) => { + const formatted = addArkdarkStyles(val.trim()) + if (formatted[formatted.length - 1] === ",") { + return \`\${formatted.replace(",", "")},\` + } else if (formatted[formatted.length - 1] === "{") { + return "{" + } + return \`\${formatted}\` +} +const addArkdarkStyles = (line: string) => { + const brackets = ["[", "]", "(", ")"] + const operators = [">", "<", ">e;", "<e;", "|"] + let modifiedLine = line + for (const bracket of brackets) { + modifiedLine = modifiedLine.replaceAll( + bracket, + \`\${bracket}\` + ) + } + for (const operator of operators) { + modifiedLine = modifiedLine.replaceAll( + operator, + \`\${operator}\` + ) + } + return modifiedLine +} +` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/scope.ts b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/scope.ts new file mode 100644 index 0000000000..c9f710dd44 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/scope.ts @@ -0,0 +1,29 @@ +export default `import { scope } from "arktype" + +// Scopes are collections of types that can reference each other. +export const types = scope({ + package: { + name: "string", + "dependencies?": "package[]", + "contributors?": "contributor[]" + }, + contributor: { + // Subtypes like 'email' are inferred like 'string' but provide additional validation at runtime. + email: "email", + "packages?": "package[]" + } +}).compile() + +// Cyclic types are inferred to arbitrary depth... +export type Package = typeof types.package.infer + +// And can validate cyclic data. +const packageData: Package = { + name: "arktype", + dependencies: [{ name: "typescript" }], + contributors: [{ email: "david@sharktypeio" }] +} +packageData.dependencies![0].dependencies = [packageData] + +export const { data, problems } = types.package(packageData) +` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/type.ts b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/type.ts new file mode 100644 index 0000000000..14d3687b2b --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/generated/type.ts @@ -0,0 +1,20 @@ +export default `import { type } from "arktype" + +// Definitions are statically parsed and inferred as TS. +export const user = type({ + name: "string", + device: { + platform: "'android'|'ios'", + "version?": "number" + } +}) + +// Validators return typed data or clear, customizable errors. +export const { data, problems } = user({ + name: "Alan Turing", + device: { + // problems.summary: "device/platform must be 'android' or 'ios' (was 'enigma')" + platform: "enigma" + } +}) +` diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/layout/demo.css b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/layout/demo.css new file mode 100644 index 0000000000..48bdb93b2e --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/layout/demo.css @@ -0,0 +1,66 @@ +body { + font-family: "Cascadia Code", sans-serif; + background-color: hsl(220 18% 10%); +} + +#demo { + display: flex; + flex-direction: column; + gap: 1rem; + margin: -0.5rem; + padding: 0.5rem; +} + +#input { + display: flex; + flex-direction: row; + flex-wrap: wrap; + gap: 0.5rem; +} + +.section { + display: flex; + flex-direction: column; + flex-grow: 1; + gap: 0.5rem; +} + +p { + white-space: pre-wrap; +} + +pre { + white-space: pre-wrap; +} + +h3 { + margin: 0px; + color: #fffff0; +} + +.key { + color: #80cff8; +} +.val { + color: #f5cf8f; +} +.operator { + color: #eb9f2e; +} +.bracket { + color: #009eff; +} +.card { + padding: 1rem; + background-color: rgb(18, 18, 18); + color: rgb(255, 255, 255); + /* transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; */ + border-radius: 1rem; + box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 1px -1px, + rgba(0, 0, 0, 0.14) 0px 1px 1px 0px, rgba(0, 0, 0, 0.12) 0px 1px 3px 0px; + background-image: linear-gradient( + rgba(255, 255, 255, 0.05), + rgba(255, 255, 255, 0.05) + ); + height: 100%; +} diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/layout/index.html b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/layout/index.html new file mode 100644 index 0000000000..26a4be9c1b --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/layout/index.html @@ -0,0 +1,17 @@ + + + +
+
+
+

Definition

+
+
+
+
+
+

Output

+
+
+
+
diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/layout/populateDemo.ts b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/layout/populateDemo.ts new file mode 100644 index 0000000000..2711cd4b46 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/layout/populateDemo.ts @@ -0,0 +1,68 @@ +import "./demo.css" +import type { Problems, Type } from "arktype" +import { stringify } from "arktype/internal/utils/serialize.js" + +type PopulateDemoArgs = { + type: Type + data: unknown + problems: Problems +} +export const populateDemo = ({ data, type, problems }: PopulateDemoArgs) => { + const defElement = document.querySelector("#definition")! + defElement.textContent = stringify(type.definition, 2) + defElement.innerHTML = recolor(defElement.innerHTML) + + const resultElement = document.querySelector("#output")! + if (problems) { + resultElement.textContent = `❌ problems:\n\n${problems}` + } else { + resultElement.textContent = `✅ data:\n\n${stringify(data, 2)}` + resultElement.innerHTML = recolor(resultElement.innerHTML) + } +} + +const recolor = (input: string) => { + const lines = input.split("\\n") + const fixedInput: string[] = [""] + for (const line of lines) { + if (line.includes(":")) { + const parts = line.split(":") + fixedInput.push(`${buildKey(parts[0])}: ${buildVal(parts[1])}`) + } else { + fixedInput.push(addArkdarkStyles(line)) + } + } + fixedInput.push("") + return fixedInput.join("\\n") +} + +const buildKey = (key: string) => { + return `${key}` +} +const buildVal = (val: string) => { + const formatted = addArkdarkStyles(val.trim()) + if (formatted[formatted.length - 1] === ",") { + return `${formatted.replace(",", "")},` + } else if (formatted[formatted.length - 1] === "{") { + return "{" + } + return `${formatted}` +} +const addArkdarkStyles = (line: string) => { + const brackets = ["[", "]", "(", ")"] + const operators = [">", "<", ">e;", "<e;", "|"] + let modifiedLine = line + for (const bracket of brackets) { + modifiedLine = modifiedLine.replaceAll( + bracket, + `${bracket}` + ) + } + for (const operator of operators) { + modifiedLine = modifiedLine.replaceAll( + operator, + `${operator}` + ) + } + return modifiedLine +} diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/stackblitzGenerators/buildStackblitzIndexText.ts b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/stackblitzGenerators/buildStackblitzIndexText.ts new file mode 100644 index 0000000000..5ed88071b1 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/stackblitzGenerators/buildStackblitzIndexText.ts @@ -0,0 +1,40 @@ +import type { EmbedId } from "./createStackblitzDemo" + +export const buildStackblitzIndexText = (embedId: EmbedId) => { + const demoInfo = demoAdapters[embedId] + const fileImports = demoInfo[0] + const dataObject = demoInfo[1] + + return `import {populateDemo} from "./populateDemo" +(async () => { + try { + ${fileImports} + populateDemo(${dataObject}) + } catch(e) { + populateDemo({ + type: { + definition: "" + }, + data: "", + problems: "ParseError: " + e.originalErr.message + } as any) + } +})()` +} + +type DemoAdapter = [importFromDemo: string, dataFromImports: string] + +const demoAdapters: Record = { + type: [ + `const { user, data, problems } = await import("./type")`, + `{ type: user, data, problems }` + ], + scope: [ + `const { types, data, problems } = await import("./scope")`, + "{ type: types.package, data, problems }" + ], + demo: [ + `const { pkg, data, problems } = await import("./demo")`, + `{ type: pkg, data, problems }` + ] +} diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/stackblitzGenerators/createStackblitzDemo.ts b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/stackblitzGenerators/createStackblitzDemo.ts new file mode 100644 index 0000000000..f36fa8e381 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/stackblitzGenerators/createStackblitzDemo.ts @@ -0,0 +1,55 @@ +import sdk from "@stackblitz/sdk" +import demoContents from "../generated/demo" +import scopeContents from "../generated/scope" +import typeContents from "../generated/type" +import { buildStackblitzIndexText } from "./buildStackblitzIndexText" +import { defaultStaticFiles } from "./defaultFiles" + +export const embedIds = { type: 1, scope: 1, demo: 1 } +export type EmbedId = keyof typeof embedIds + +export type DemoProps = { + embedId: EmbedId +} + +export const contentsByEmbedId: Record = { + type: typeContents, + scope: scopeContents, + demo: demoContents +} + +export const DEMO_ELEMENT_ID = "arktype-demo" + +export const createStackblitzDemo = async ({ embedId }: DemoProps) => + sdk.embedProject( + DEMO_ELEMENT_ID, + { + files: { + [`${embedId}.ts`]: contentsByEmbedId[embedId], + "index.ts": buildStackblitzIndexText(embedId), + ".prettierrc": JSON.stringify({ + tabWidth: 4, + semi: false, + trailingComma: "none" + }), + ...defaultStaticFiles + }, + title: embedId, + description: `ArkType ${embedId} demo`, + template: "typescript", + dependencies: { + // @lineFrom:package.json:version |> embed("arktype":,,) + arktype: "1.0.26-alpha" + }, + settings: { + compile: { + clearConsole: false, + trigger: "keystroke" + } + } + }, + { + height: "100%", + openFile: `${embedId}.ts` + } + ) diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/stackblitzGenerators/defaultFiles.ts b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/stackblitzGenerators/defaultFiles.ts new file mode 100644 index 0000000000..7c788de0d3 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/demos/stackblitzGenerators/defaultFiles.ts @@ -0,0 +1,18 @@ +import demoCssText from "../generated/demo.css" +import indexHtmlText from "../generated/index.html" +import populateDemoTsText from "../generated/populateDemo" + +const tsConfig = { + compilerOptions: { + module: "esnext", + target: "esnext", + strict: true + } +} + +export const defaultStaticFiles = { + "index.html": indexHtmlText, + "demo.css": demoCssText, + "populateDemo.ts": populateDemoTsText, + "tsconfig.json": JSON.stringify(tsConfig, null, 4) +} diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/index.mdx b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/index.mdx new file mode 100644 index 0000000000..79fa7a2fc9 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/index.mdx @@ -0,0 +1,29 @@ +--- +id: intro +hide_table_of_contents: true +title: Intro +--- + +# Getting Started + +import { StackBlitzDemo } from "./demos/StackBlitzDemo.tsx" + + + +## Install 📦`12KB` gzipped, `0` dependencies + +Npm Icon + npm install arktype + +(or whatever package manager you prefer) +
+ +Our types are tested in [strict-mode](https://www.typescriptlang.org/tsconfig#strict) with TypeScript versions `4.8`, `4.9`, and `5.0`. + +_Our APIs have mostly stabilized, but details may still change during the alpha/beta stages of our 1.0 release. If you have suggestions that may require a breaking change, now is the time to let us know!_ ⛵ + + + +## Your first type + + diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/scopes.mdx b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/scopes.mdx new file mode 100644 index 0000000000..a3b7fb4635 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/scopes.mdx @@ -0,0 +1,9 @@ +--- +hide_table_of_contents: true +--- + +import { StackBlitzDemo } from "./demos/StackBlitzDemo.tsx" + +# Scopes + + diff --git a/dev/arktype.io/versioned_docs/version-1.0.26-alpha/sidebar.js b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/sidebar.js new file mode 100644 index 0000000000..7e2ddc02d6 --- /dev/null +++ b/dev/arktype.io/versioned_docs/version-1.0.26-alpha/sidebar.js @@ -0,0 +1,19 @@ +module.exports = { + sidebar: [ + { + type: "category", + label: "Getting Started", + items: [ + { type: "doc", label: "Types", id: "intro" }, + { type: "doc", label: "Scopes", id: "scopes" }, + { type: "doc", label: "Keywords", id: "api/keywords" }, + { type: "doc", label: "Operators", id: "api/operators" } + ] + }, + { + type: "doc", + label: "API", + id: "api" + } + ] +} diff --git a/dev/arktype.io/versioned_sidebars/version-1.0.26-alpha-sidebars.json b/dev/arktype.io/versioned_sidebars/version-1.0.26-alpha-sidebars.json new file mode 100644 index 0000000000..e4546c630d --- /dev/null +++ b/dev/arktype.io/versioned_sidebars/version-1.0.26-alpha-sidebars.json @@ -0,0 +1,35 @@ +{ + "sidebar": [ + { + "type": "category", + "label": "Getting Started", + "items": [ + { + "type": "doc", + "label": "Types", + "id": "intro" + }, + { + "type": "doc", + "label": "Scopes", + "id": "scopes" + }, + { + "type": "doc", + "label": "Keywords", + "id": "api/keywords" + }, + { + "type": "doc", + "label": "Operators", + "id": "api/operators" + } + ] + }, + { + "type": "doc", + "label": "API", + "id": "api" + } + ] +} diff --git a/dev/arktype.io/versions.json b/dev/arktype.io/versions.json index 6d85011e38..5b4ab1ec49 100644 --- a/dev/arktype.io/versions.json +++ b/dev/arktype.io/versions.json @@ -1,4 +1,5 @@ [ + "1.0.26-alpha", "1.0.25-alpha", "1.0.24-alpha", "1.0.23-alpha", diff --git a/dev/configs/.changeset/unlucky-kangaroos-divide.md b/dev/configs/.changeset/unlucky-kangaroos-divide.md deleted file mode 100644 index 42f5816ac3..0000000000 --- a/dev/configs/.changeset/unlucky-kangaroos-divide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"arktype": patch ---- - -Fix an issue where optional paths could be used as discriminants diff --git a/package.json b/package.json index 3b59152500..ae385af87e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "arktype", "description": "TypeScript's 1:1 validator, optimized from editor to runtime", - "version": "1.0.25-alpha", + "version": "1.0.26-alpha", "license": "MIT", "author": { "name": "David Blass",