From ab181b43b20a3ef5f4101c6184bcf6b42b7da579 Mon Sep 17 00:00:00 2001 From: Andrew Jarrett Date: Tue, 30 Jan 2024 17:10:19 -0600 Subject: [PATCH] feat: `assoc` should be feature-complete now --- src/associative/associative.ts | 261 ++++++++++++++++++++++++--------- src/cache/cache.ts | 232 +++++++++++++++++++++++++++++ src/cache/exports.ts | 1 + src/universal/universal.ts | 8 + 4 files changed, 434 insertions(+), 68 deletions(-) create mode 100644 src/cache/cache.ts create mode 100644 src/cache/exports.ts diff --git a/src/associative/associative.ts b/src/associative/associative.ts index 1a90599..3b082a6 100644 --- a/src/associative/associative.ts +++ b/src/associative/associative.ts @@ -3,29 +3,22 @@ export { } import * as any from "../any" -import { TypeError, assert, describe, empty, enforce, evaluate, expect, never, nonempty } from "../exports"; +import { TypeError, Universal, assert, describe, empty, enforce, evaluate, expect, never, nonempty } from "../exports" declare namespace impl { type parseNumeric = type extends `${infer x extends number}` ? x : never - type arrayIndex, type> - = Extract extends any.string - ? [ix] extends [never] ? acc - : arrayIndex<[...acc, parseNumeric], type> - : never.close.inline_var<"ix"> + type asArraylike = never | { [ix in "length" | Extract]: type[ix] } + type toEntries> = never | { [ix in keyof order]: [order[ix], type[order[ix]]] } + type range, type extends number> + = [type] extends [acc["length"]] ? acc + : range<[...acc, acc["length"]], type> ; - - type is_ - = [order, []] extends [[], order] - ? [struct, {}] extends [{}, struct] - ? true - : false - : [struct, {}] extends [{}, struct] ? false - : order extends empty.array ? [keyof struct] extends [never] ? true : false - : order extends nonempty.array - ? [head] extends [keyof struct] - ? is_<[...ix, void], tail, Omit> + type is + = [separate] extends [[infer order, infer object_]] + ? [keyof order] extends [never] ? false + : [keyof object_] extends [never] ? false + : true : false - : never.close.inline_var<"head" | "tail"> ; } @@ -39,7 +32,6 @@ namespace impl { declare const is : (type: type) => Assoc.is - ; type of = never | [ { [e in type[number]as e[0]]: e[1] }, @@ -56,47 +48,71 @@ type make< ; declare const indices - : (type: type) => indices + : (type: type) => indices + +type range + = [type] extends [keyof cache.next.next] + ? cache.next.next[type] extends any.list + ? { [ix in keyof unknowns]: impl.parseNumeric } + : never.close.inline_var<"unknowns"> + : impl.range<[], type> ; -type indices = impl.arrayIndex<[], type> -declare const separate - : (type: type) => separate +type indices + = [type["length"]] extends [never] ? [] + : number extends type["length"] ? [] + : range ; -type separate - = indices extends any.list - ? { [ix in keyof index]: type[ix & keyof type] } extends any.list - ? { [ix in Exclude]: type[ix] } extends any.object - ? [order: order, object: struct] - : never.close.inline_var<"struct"> - : never.close.inline_var<"order"> + +type separate + = indices extends any.path + ? Universal.key< + index[number] extends infer ix + ? ix extends keyof type + ? type[ix] extends keyof type + ? ix : never : never : never + > extends infer ix + ? [ix] extends [never] ? [{}, {}] + : [ix] extends [Universal.keyof] + ? [ + order: { [k in ix]: type[k] }, + object: { [k in type[ix] & keyof type]: type[k] } + ] + : never.close.unmatched_expr + : never.close.inline_var<"ix"> : never.close.inline_var<"index"> ; +declare const separate + : (type: type) => separate + type is - = [type] extends [never] ? false - : [Readonly, empty.array] extends [empty.array, Readonly] ? false - : [type, []] extends [[], type] ? false - : [type, {}] extends [{}, type] ? false - : [any.array] extends [type] ? false - : separate extends [infer order, infer struct] - ? impl.is_<[], order, struct> - : never.close.inline_var<"order" | "struct"> + = [type] extends [{ length: number }] + ? Exclude extends infer nonArray + ? [nonArray] extends [never] ? false + : impl.is + : false + : false ; /* @ts-expect-error - internal use only */ class assoc extends impl.base { } type associative = make>> -type Assoc]> = never | assoc +type Assoc = never | assoc> declare function Assoc >(...type: type): associative +declare function Assoc + >(type: type, order: order): associative> + +const __test__ = Assoc({ abc: 123, def: 456 }, ["abc", "def"]) declare namespace Assoc { export { is, separate, indices, + range, } } @@ -106,24 +122,6 @@ namespace assoc { Assoc.indices = indices } -type __is__ = [ - // ^? - expect>>, - expect>>, - expect>>, - expect>>, - expect>>, - expect>>, - expect>>, - expect>>, - expect>>, - expect>>, - // correct - expect>>, - expect>>, - expect>>, -] - namespace __Spec__ { declare const failureCases: [ never, @@ -136,30 +134,78 @@ namespace __Spec__ { any.array, any.object, any.array & any.object, + { abc: 123 } & { 0: "xyz", length: 1 }, { abc: 123 } & ["xyz"], - { abc: 1230 }, + { abc: 1230 } & { 0: "abc", length: 1 }, { 0: 123, 1: 456 } & [0, 1], ] + + type __ = ({ 0: 123, 1: 456 } & [0, 1]) extends [any.array] ? true : false + declare const happyPath: [ - { abc: 123 } & ["abc"], - { abc: 123, def: 456 } & ["abc", "def"], + { abc: 123 } & { 0: "abc", length: 1 }, + { abc: 123, def: 456 } & { 0: "abc", 1: "def", length: 2 }, ] - declare const assoc1: assoc<{ abc: 123; def: 456; } & ["abc", "def"]> + declare const assoc1: assoc<{ abc: 123; def: 456; } & { 0: "abc", 1: "def" }> declare const err1: TypeError<[π—Ίπ˜€π—΄: "Expected keys to be unique, but encountered 1 or more duplicate keys", π—΄π—Όπ˜: ["abc"]]> - describe("Assoc", () => { + type __indices__ = [ + // ^? + expect, []>>, + expect, []>>, + expect, []>>, + expect, [0]>>, + expect, [0, 1, 2]>>, + // all that matters is the "length" property (excess properties are ignored) + expect, [0, 1, 2]>>, + // all that matters is the "length" property (excess properties are ignored) + expect, [0, 1, 2, 3]>>, + ] + + type __toEntries__ = [ + // ^? + expect, []>>, + expect, []>>, + expect, [["abc", 123], ["def", 456]]>>, + expect, [["def", 456], ["abc", 123]]>>, + ] + + describe("assoc", () => { // ^? return [ - describe("assoc", t => [ + describe("Assoc", t => [ + // ^? expect(t.assert.equal(Assoc(["abc", 123], ["def", 456]), assoc1)), /* @ts-expect-error: this directive makes sure passing invalid input raises a TypeError */ - expect(t.assert.equal(assoc(["abc", 123], ["abc", 456]), err1)), + expect(t.assert.equal(Assoc(["abc", 123], ["abc", 456]), err1)), ]), - describe("is", t => [ + describe("is", t => { // ^? - expect(t.assert.isTrue(is(happyPath[0]))), - expect(t.assert.isTrue(is(happyPath[1]))), - ]), + type __is__ = [ + // ^? + expect>>, + expect>>, + expect>>, + expect>>, + expect>>, + expect>>, + expect>>, + expect>>, + expect>>, + expect>>, + expect>>, + // correct + expect>>, + expect>>, + ] + + return [ + // ^? + expect(t.assert.isTrue(is(happyPath[0]))), + expect(t.assert.isTrue(is(happyPath[1]))), + ] + }), + describe("is (not)", t => [ // ^? expect(t.assert.isFalse(is(failureCases[0]))), @@ -176,5 +222,84 @@ namespace __Spec__ { ]), ] }) + + describe("separate", t => { + // ^? + type __separate__ = [ + // ^? + expect, [{}, {}]>>, + expect, [{}, {}]>>, + expect, [{}, {}]>>, + expect, [{}, {}]>>, + expect, [{}, {}]>>, + expect, + [order: { 0: "abc", 1: "def" }, object: { abc: 123, def: 456 }] + >>, + /** (TODO) CASE: too many members in `order` (handled gracefully by taking the greatest common denominator of length, order and object) */ + expect, + // πŸ‘‘πŸ‘‘πŸ‘‘πŸ‘‘πŸ‘‘ + [order: { 0: "abc", 1: "def", }, object: { abc: 123, def: 456, }] + >>, + /** CASE: length is too high (handled gracefully by taking the greatest common denominator of length, order and object) */ + expect, + // πŸ‘‘πŸ‘‘πŸ‘‘πŸ‘‘πŸ‘‘πŸ‘‘ + [order: { 0: "abc", 1: "def", }, object: { abc: 123, def: 456, }] + >>, + /** CASE: too many members in `object` (handled gracefully by taking the greatest common denominator of length, order and object) */ + expect, + // πŸ‘‘πŸ‘‘πŸ‘‘πŸ‘‘πŸ‘‘ + [order: { 0: "abc", 1: "def", }, object: { abc: 123, def: 456, }] + >>, + ] + + return [ + expect(t.assert.equals<[order: {}, object: {}]>()(separate(void 0 as never))), + expect(t.assert.equals<[order: {}, object: {}]>()(separate(void 0 as any))), + expect(t.assert.equals<[order: {}, object: {}]>()(separate({ length: Math.random() }))), + expect(t.assert.equals<[order: {}, object: {}]>()(separate({ length: 0 }))), + expect(t.assert.equals<[order: {}, object: {}]>()(separate({ length: 1 }))), + expect( + t.assert.equals< + [order: { 0: "abc", 1: "def" }, object: { abc: 123, def: 456 }] + >()(separate( + { 0: "abc", 1: "def", abc: 123, def: 456, length: 2 } + )) + ), + expect( + t.assert.equals< + [order: { 0: "abc", 1: "def" }, object: { abc: 123, def: 456 }] + >()(separate( + { length: 3, 0: "abc", 1: "def", abc: 123, def: 456 } + //πŸ‘‘πŸ‘‘πŸ‘‘πŸ‘‘πŸ‘‘πŸ‘‘ + )) + ), + expect( + t.assert.equals< + [order: { 0: "abc", 1: "def" }, object: { abc: 123, def: 456 }] + >()(separate( + { length: 2, 0: "abc", 1: "def", 2: "ghi", abc: 123, def: 456 } + // πŸ‘‘πŸ‘‘πŸ‘‘πŸ‘‘πŸ‘‘ + )) + ), + expect( + t.assert.equals< + [order: { 0: "abc", 1: "def" }, object: { abc: 123, def: 456 }] + >()(separate( + { length: 2, 0: "abc", 1: "def", abc: 123, def: 456, ghi: 789 } + // πŸ‘‘πŸ‘‘πŸ‘‘πŸ‘‘πŸ‘‘ + )) + ), + ] + }) + + type __range__ = [ + // ^? + expect, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>, + expect["length"], 70>>, + ] } diff --git a/src/cache/cache.ts b/src/cache/cache.ts new file mode 100644 index 0000000..f013cb8 --- /dev/null +++ b/src/cache/cache.ts @@ -0,0 +1,232 @@ + +declare namespace cache { + type _ = unknown + + type next = next.next[keyof next.next & ix]["length"] + namespace next { + interface next extends + _00, _01, _02, _03, _04, _05, _06, _07, _08, _09, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, + _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, + _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, + _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, + _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, + _60, _61, _62, _63 { } + interface _00 { [0]: [_] } + interface _01 { [1]: [_, _] } + interface _02 { [2]: [_, _, _] } + interface _03 { [3]: [_, _, _, _] } + interface _04 { [4]: [_, _, _, _, _] } + interface _05 { [5]: [_, _, _, _, _, _] } + interface _06 { [6]: [_, _, _, _, _, _, _] } + interface _07 { [7]: [_, _, _, _, _, _, _, _] } + interface _08 { [8]: [_, _, _, _, _, _, _, _, _] } + interface _09 { [9]: [_, _, _, _, _, _, _, _, _, _] } + interface _10 { [10]: [_, _, _, _, _, _, _, _, _, _, _] } + interface _11 { [11]: [_, _, _, _, _, _, _, _, _, _, _, _] } + interface _12 { [12]: [_, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _13 { [13]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _14 { [14]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _15 { [15]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _16 { [16]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _17 { [17]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _18 { [18]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _19 { [19]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _20 { [20]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _21 { [21]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _22 { [22]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _23 { [23]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _24 { [24]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _25 { [25]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _26 { [26]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _27 { [27]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _28 { [28]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _29 { [29]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _30 { [30]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _31 { [31]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _32 { [32]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _33 { [33]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _34 { [34]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _35 { [35]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _36 { [36]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _37 { [37]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _38 { [38]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _39 { [39]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _40 { [40]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _41 { [41]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _42 { [42]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _43 { [43]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _44 { [44]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _45 { [45]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _46 { [46]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _47 { [47]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _48 { [48]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _49 { [49]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _50 { [50]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _51 { [51]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _52 { [52]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _53 { [53]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _54 { [54]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _55 { [55]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _56 { [56]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _57 { [57]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _58 { [58]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _59 { [59]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _60 { [60]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _61 { [61]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _62 { [62]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _63 { [63]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + } + + type curr = curr.curr[keyof curr.curr & ix]["length"] + namespace curr { + interface curr extends + _00, _01, _02, _03, _04, _05, _06, _07, _08, _09, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, + _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, + _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, + _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, + _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, + _60, _61, _62, _63 { } + interface _00 { [0]: [] } + interface _01 { [1]: [_] } + interface _02 { [2]: [_, _] } + interface _03 { [3]: [_, _, _] } + interface _04 { [4]: [_, _, _, _] } + interface _05 { [5]: [_, _, _, _, _] } + interface _06 { [6]: [_, _, _, _, _, _] } + interface _07 { [7]: [_, _, _, _, _, _, _] } + interface _08 { [8]: [_, _, _, _, _, _, _, _] } + interface _09 { [9]: [_, _, _, _, _, _, _, _, _] } + interface _10 { [10]: [_, _, _, _, _, _, _, _, _, _] } + interface _11 { [11]: [_, _, _, _, _, _, _, _, _, _, _] } + interface _12 { [12]: [_, _, _, _, _, _, _, _, _, _, _, _] } + interface _13 { [13]: [_, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _14 { [14]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _15 { [15]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _16 { [16]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _17 { [17]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _18 { [18]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _19 { [19]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _20 { [20]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _21 { [21]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _22 { [22]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _23 { [23]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _24 { [24]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _25 { [25]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _26 { [26]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _27 { [27]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _28 { [28]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _29 { [29]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _30 { [30]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _31 { [31]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _32 { [32]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _33 { [33]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _34 { [34]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _35 { [35]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _36 { [36]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _37 { [37]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _38 { [38]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _39 { [39]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _40 { [40]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _41 { [41]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _42 { [42]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _43 { [43]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _44 { [44]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _45 { [45]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _46 { [46]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _47 { [47]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _48 { [48]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _49 { [49]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _50 { [50]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _51 { [51]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _52 { [52]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _53 { [53]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _54 { [54]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _55 { [55]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _56 { [56]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _57 { [57]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _58 { [58]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _59 { [59]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _60 { [60]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _61 { [61]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _62 { [62]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _63 { [63]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + } + + type prev = prev.prev[keyof prev.prev & ix]["length"] + namespace prev { + interface prev extends + _01, _02, _03, _04, _05, _06, _07, _08, _09, _10, + _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, + _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, + _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, + _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, + _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, + _61, _62, _63, _64 { } + interface _01 { [1]: [] } + interface _02 { [2]: [_] } + interface _03 { [3]: [_, _] } + interface _04 { [4]: [_, _, _] } + interface _05 { [5]: [_, _, _, _] } + interface _06 { [6]: [_, _, _, _, _] } + interface _07 { [7]: [_, _, _, _, _, _] } + interface _08 { [8]: [_, _, _, _, _, _, _] } + interface _09 { [9]: [_, _, _, _, _, _, _, _] } + interface _10 { [10]: [_, _, _, _, _, _, _, _, _] } + interface _11 { [11]: [_, _, _, _, _, _, _, _, _, _] } + interface _12 { [12]: [_, _, _, _, _, _, _, _, _, _, _] } + interface _13 { [13]: [_, _, _, _, _, _, _, _, _, _, _, _] } + interface _14 { [14]: [_, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _15 { [15]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _16 { [16]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _17 { [17]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _18 { [18]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _19 { [19]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _20 { [20]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _21 { [21]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _22 { [22]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _23 { [23]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _24 { [24]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _25 { [25]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _26 { [26]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _27 { [27]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _28 { [28]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _29 { [29]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _30 { [30]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _31 { [31]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _32 { [32]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _33 { [33]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _34 { [34]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _35 { [35]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _36 { [36]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _37 { [37]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _38 { [38]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _39 { [39]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _40 { [40]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _41 { [41]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _42 { [42]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _43 { [43]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _44 { [44]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _45 { [45]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _46 { [46]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _47 { [47]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _48 { [48]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _49 { [49]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _50 { [50]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _51 { [51]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _52 { [52]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _53 { [53]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _54 { [54]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _55 { [55]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _56 { [56]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _57 { [57]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _58 { [58]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _59 { [59]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _60 { [60]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _61 { [61]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _62 { [62]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _63 { [63]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + interface _64 { [64]: [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] } + } +} diff --git a/src/cache/exports.ts b/src/cache/exports.ts new file mode 100644 index 0000000..f45a97e --- /dev/null +++ b/src/cache/exports.ts @@ -0,0 +1 @@ +export { cache } from "./cache" diff --git a/src/universal/universal.ts b/src/universal/universal.ts index 8cfc247..9ee82fd 100644 --- a/src/universal/universal.ts +++ b/src/universal/universal.ts @@ -34,4 +34,12 @@ declare namespace Universal { ? Universal.key> : Universal.key ; + + type values + = type extends any.array + ? type[number] + : type extends any.object + ? type[keyof type] + : type + ; }