@gershy/clearing 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/cmp/types/global.d.ts +78 -214
  2. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  declare global {
2
2
 
3
3
  // Util
4
- type Fn<A=any[], T=any> = (...args: A) => T;
5
- type Obj<V = any> = { [typeof iden]: 'obj' } & { [k: string]: V };
4
+ type Fn<A extends any[] = any[], T = any> = (...args: A) => T;
5
+ type Obj<V = any> = { [k: string]: V };
6
6
 
7
7
  // Differentiate between "map" and "rec" ("record") - maps have arbitrary keys; recs have fixed keys
8
8
  type ObjMode<O extends { [K: string]: any }> = O extends { [K in infer KK]: any } ? (string extends KK ? 'map' : 'rec') : never;
@@ -12,15 +12,15 @@ declare global {
12
12
  type Itr<O extends Obj> = Iterable<[ ObjKeys<O>, ObjVals<O> ]>;
13
13
  type Json = null | boolean | number | string | Json[] | { [K: string]: Json };
14
14
  type Skip = undefined;
15
- type SkipNever<V> = V extends Skip ? Skip extends V ? never : V : V; // 0 extends (1 & T) ? any : V extends Skip ? Skip extends V ? never : V : V; // Only thing that doesn't work is `SkipNever<any>`
15
+ type SkipNever<V> = V extends Skip ? Skip extends V ? never : V : V;
16
16
  type UGH = any; // Use when necessary to escape typing because typescript has failed us
17
17
 
18
18
  type Dive<O extends Obj, K extends readonly string[], D = undefined> =
19
- K extends [ infer K0, ...infer KM ]
19
+ K extends [ infer K0 extends string, ...infer KM extends string[] ]
20
20
  ? K0 extends keyof O
21
21
  ? (ObjMode<O> extends 'map' ? D : never) | Dive<O[K0], KM, D>
22
22
  : D
23
- : O; // If `K` doesn't extend an array with a single item, it's an empty array - so use the current value
23
+ : O;
24
24
 
25
25
  type CharSet = {
26
26
  str: string,
@@ -41,7 +41,7 @@ declare global {
41
41
  (i: unknown, fn: FunctionConstructor): i is Fn,
42
42
  (i: unknown, fn: SymbolConstructor): i is symbol,
43
43
  <T>(i: unknown, prm: PromiseConstructor): i is Promise<T>,
44
- <C>(i: unknown, cls: C): i is InstanceType<C>
44
+ <C extends abstract new (...args: any) => any>(i: unknown, cls: C): i is InstanceType<C>
45
45
  };
46
46
  const clearing: {
47
47
 
@@ -114,264 +114,128 @@ declare global {
114
114
  const upper: unique symbol;
115
115
  // </SYMBOLS>
116
116
 
117
- // Typing only
118
- const iden: unique symbol; // associate types with their *direct* constructor
119
-
120
- interface JSON { parse: (val: Buffer) => any };
121
-
122
- interface ProtoWithSymbols {
123
- [add]: undefined
124
- [at]: undefined
125
- [assert]: undefined
126
- [bind]: undefined
127
- [count]: undefined
128
- [cut]: undefined
129
- [dive]: undefined
130
- [empty]: undefined
131
- [fire]: undefined
132
- [group]: undefined
133
- [has]: undefined
134
- [hasHead]: undefined
135
- [hasTail]: undefined
136
- [indent]: undefined
137
- [limn]: undefined
138
- [lower]: undefined
139
- [mod]: undefined
140
- [map]: undefined
141
- [mapk]: undefined
142
- [merge]: undefined
143
- [padHead]: undefined
144
- [padTail]: undefined
145
- [rem]: undefined
146
- [find]: undefined
147
- [slash]: undefined
148
- [slice]: undefined
149
- [suppress]: undefined
150
- [toArr]: undefined
151
- [toNum]: undefined
152
- [toObj]: undefined
153
- [toStr]: undefined
154
- [upper]: undefined
155
- };
156
-
157
117
  interface ErrorConstructor {
158
118
  [assert]: <V = any>(args: V, fn: (args: V) => boolean) => void
159
- };
160
- interface Error extends ProtoWithSymbols {
119
+ }
120
+ interface Error {
161
121
  [mod]: (props: { [K: string]: any }) => Error,
162
122
  [fire]: (props?: { [K: string]: any }) => never,
163
123
  [suppress]: () => Error,
164
-
165
- [limn]: (seen?: Map) => (Obj<Json> & {
124
+ [limn]: (seen?: Map<any, any>) => (Obj<Json> & {
166
125
  form: string,
167
126
  msg: string,
168
127
  trace: string[],
169
128
  cause: null | ReturnType<Error[typeof limn]>
170
129
  })
171
- };
130
+ }
172
131
 
173
- interface ArrayConstructor {};
174
- interface Array<T> extends ProtoWithSymbols {
175
- [iden]: 'arr',
132
+ interface ArrayConstructor {}
133
+ interface Array<T> {
176
134
  [has]: (val: unknown) => boolean,
177
- [map]: {
178
- <
179
- Fn extends (v: T, i: number) => any
180
- >(
181
- fn: Fn
182
- ): Exclude<ReturnType<Fn>, Skip>[]
183
- },
184
- [add]: <TT extends T>(val: TT) => TT,
185
- [rem]: <TT extends T>(val: TT) => void,
135
+ [map]: <Fn extends (v: T, i: number) => any>(fn: Fn) => Exclude<ReturnType<Fn>, Skip>[],
136
+ [add]: <TT extends T>(val: TT) => TT,
137
+ [rem]: <TT extends T>(val: TT) => void,
186
138
  [count]: () => number,
187
- [empty]: (this: any[]) => this is never[],
188
- [toObj]: <Fn extends (v: T, n: number) => Skip | readonly [string, any], R = Exclude<ReturnType<Fn>, Skip>>(fn: Fn) => { [K in R[0]]: R[1] },
189
- [find]: (fn: (val: T, n: number) => any) => ({ found: true, val: T, ind: number } | { found: false, val: null, ind: null }),
139
+ [empty]: () => boolean,
140
+ [toObj]: <R extends readonly [string, any]>(fn: (v: T, n: number) => Skip | R) => { [K: string]: any },
141
+ [find]: (fn: (val: T, n: number) => any) => ({ found: true, val: T, ind: number } | { found: false, val: null, ind: null }),
190
142
  [group]: <G extends string>(fn: (v: T) => Skip | G) => { [K in G]?: T[] }
191
- };
143
+ }
192
144
 
193
- interface FunctionConstructor {};
194
- interface Function extends ProtoWithSymbols {
195
- [iden]: 'fnc',
196
- [bind]: {
197
- <
198
- Fn extends (...args: any[]) => any,
199
- To
200
- >(
201
- this: Fn,
202
- to: To
203
- ): ((...args: Parameters<Fn> extends [ infer A0, ...infer AM ] ? AM : never) => ReturnType<Fn>)
204
- }
205
- };
145
+ interface FunctionConstructor {}
146
+ interface Function {
147
+ [bind]: <Fn extends (...args: any[]) => any, To>(this: Fn, to: To) => ((...args: Parameters<Fn> extends [ infer A0, ...infer AM ] ? AM : never) => ReturnType<Fn>)
148
+ }
206
149
 
207
150
  interface NumberConstructor {
208
151
  [int32]: number,
209
152
  [int64]: number
210
- };
211
- interface Number extends ProtoWithSymbols {
212
- [iden]: 'num',
153
+ }
154
+ interface Number {
213
155
  [char]: () => string,
214
156
  [isInt]: () => boolean,
215
157
  [toStr]: (str: string | CharSet, len?: number) => string,
216
158
  [toArr]: <T>(fn: (n: number) => T) => T[],
217
- [toObj]: <Fn extends (n: number) => Skip | readonly [string, any], R = Exclude<ReturnType<Fn>, Skip>>(fn: Fn) => { [K in R[0]]: R[1] },
159
+ [toObj]: <R extends readonly [string, any]>(fn: (n: number) => Skip | R) => { [K: string]: any },
218
160
  [bits]: () => Generator<number>,
219
- [Symbol.iterator]: () => Generator<number>,
220
- [map]: undefined // Prevent calling `map` on `Number` - use `toStr` instead!
221
- };
161
+ [Symbol.iterator]: () => Generator<number>
162
+ }
222
163
 
223
- interface BigIntConstructor {};
224
- interface BigInt extends ProtoWithSymbols {
164
+ interface BigIntConstructor {}
165
+ interface BigInt {
225
166
  [toStr]: (str: string | CharSet, len?: number) => string
226
- };
167
+ }
227
168
 
228
- interface ObjectConstructor {};
229
- interface Object extends ProtoWithSymbols {
230
- [iden]: 'obj',
231
- [empty]: {
232
- <
233
- O extends Obj
234
- >(
235
- this: O
236
- ): ObjMode<O> extends 'rec'
237
- ? never & '<rec>.empty is invalid'
238
- : this is Obj<never>,
239
- },
240
-
241
- [at]: {
242
- <
243
- O extends Obj,
244
- K extends string | string[],
245
- D extends any = undefined
246
- >(
247
- this: O,
248
- k: K,
249
- def?: D
250
- ): Dive<O, K extends string[] ? K : [ K ], D>,
251
- },
252
- [has]: {
253
- // <O extends Obj>(this: O, k: string): boolean,
254
- // <O extends Obj>(this: O, k: string): k is (ObjMode<O> extends 'rec' ? keyof O : any),
255
- // <O extends Obj>(this: O, k: string): k is (ObjMode<O> extends 'rec' ? keyof O : any),
256
-
257
- // <O extends Obj, K extends keyof any>(this: O, k: K): this is { [K]: O[keyof O] }
258
-
259
- <O extends Obj>(this: O, k: unknown): k is keyof O
260
-
261
- },
262
- [map]: {
263
- <
264
- O extends Obj,
265
- Fn extends (v: ObjVals<O>, k: ObjKeys<O>) => any
266
- >(
267
- this: O,
268
- fn: Fn
269
- ): { [K in keyof O]: Exclude<ReturnType<Fn>, Skip> },
270
- },
271
- [mapk]: {
272
- <
273
- O extends Obj,
274
- Fn extends (v: O[keyof O], k: ObjKeys<O>) => undefined | [ string, any ]
275
- >(
276
- this: O,
277
- fn: Fn
278
- ): { [K in Exclude<ReturnType<Fn>, Skip>[0]]: Exclude<ReturnType<Fn>, Skip>[1] },
279
- },
280
- [merge]: {
281
- <
282
- O1 extends Obj,
283
- O2 extends Obj
284
- >(
285
- this: readonly O1,
286
- val: readonly O2
287
- ): O1 & O2,
288
- },
289
- [slice]: {
290
- <O extends Obj, K extends readonly (keyof O)[]>(this: O, keys: K): { [P in K[number]]: SkipNever<O[P]> }
291
- },
292
- [slash]: {
293
- <
294
- O extends Obj,
295
- T extends readonly (keyof O)[]
296
- >(
297
- this: O,
298
- keys: T
299
- ): { [K in keyof O as Exclude<keyof O, T[number]>]: O[K] }
300
- },
301
- [toArr]: {
302
- <
303
- O extends Obj,
304
- Fn extends (v: O[keyof O], k: ObjKeys<O>) => any
305
- >(
306
- this: O,
307
- fn: Fn
308
- ): Exclude<ReturnType<Fn>, Skip>[],
309
- },
310
- [count]: {
311
- <O extends Obj>(this: O): number,
312
- },
313
- [group]: {
314
- <O extends Obj, G extends string>(fn: (v: T) => Skip | G): { [K in G]?: Optional<O> }
315
- },
316
- [Symbol.iterator]: {
317
- <O extends Obj>(this: O): Iterator<[ ObjKeys<O>, ObjVals<O> ]>
318
- },
319
- $$inspect: <V>(this: V) => { v: V }
320
- };
169
+ interface ObjectConstructor {}
170
+ interface Object {
171
+ [empty]: () => boolean,
172
+ [at]: <O extends Obj, K extends string | string[], D extends any = undefined>(this: O, k: K, def?: D) => Dive<O, K extends string[] ? K : [ K ], D>,
173
+ [has]: <O extends Obj>(this: O, k: unknown) => k is keyof O,
174
+ [map]: <O extends Obj, Fn extends (v: ObjVals<O>, k: ObjKeys<O>) => any>(this: O, fn: Fn) => { [K in keyof O]: Exclude<ReturnType<Fn>, Skip> },
175
+ [mapk]: <O extends Obj, Fn extends (v: O[keyof O], k: ObjKeys<O>) => undefined | [ string, any ]>(this: O, fn: Fn) => { [K: string]: any },
176
+ [merge]: <O1 extends Obj, O2 extends Obj>(this: O1, val: O2) => O1 & O2,
177
+ [slice]: <O extends Obj, K extends readonly (keyof O)[]>(this: O, keys: K) => { [P in K[number]]: SkipNever<O[P]> },
178
+ [slash]: <O extends Obj, T extends readonly (keyof O)[]>(this: O, keys: T) => { [K in keyof O as Exclude<keyof O, T[number]>]: O[K] },
179
+ [toArr]: <O extends Obj, Fn extends (v: O[keyof O], k: ObjKeys<O>) => any>(this: O, fn: Fn) => Exclude<ReturnType<Fn>, Skip>[],
180
+ [count]: () => number,
181
+ [group]: <O extends Obj, G extends string>(this: O, fn: (v: O[keyof O]) => Skip | G) => { [K in G]?: Partial<O> },
182
+ [Symbol.iterator]: <O extends Obj>(this: O) => Iterator<[ ObjKeys<O>, ObjVals<O> ]>
183
+ }
321
184
 
322
185
  interface PromiseConstructor {
323
186
  [allArr]: PromiseConstructor['all'],
324
- [allObj]: <O extends { [K: keyof any]: Promise<any> }>(obj: O) => { [K in keyof O]: Awaited<O[K]> },
187
+ [allObj]: <O extends { [K: string]: Promise<any> }>(obj: O) => Promise<{ [K in keyof O]: Awaited<O[K]> }>,
325
188
  [later]: <T=void>() => PromiseLater<T>
326
- };
327
- interface Promise<T> {};
328
- interface PromiseLater<T=void> extends Promise<T>, ProtoWithSymbols {
189
+ }
190
+ interface Promise<T> {}
191
+ interface PromiseLater<T=void> extends Promise<T> {
329
192
  resolve: T extends void ? () => void : (v: T) => void,
330
193
  reject: (err: any) => void
331
- };
194
+ }
332
195
 
333
- interface SetConstructor {};
334
- interface Set<T> extends ProtoWithSymbols {
196
+ interface SetConstructor {}
197
+ interface Set<T> {
335
198
  [count]: () => number,
336
199
  [empty]: () => boolean,
337
- [find]: (fn: (val: T) => any) => ({ found: true, val: T } | { found: false, val: null }),
338
- [map]: <V>(fn: (val: T, ind: number) => V) => Exclude<V, Skip>[],
200
+ [find]: (fn: (val: T) => any) => ({ found: true, val: T } | { found: false, val: null }),
201
+ [map]: <V>(fn: (val: T, ind: number) => V) => Exclude<V, Skip>[],
339
202
  [toArr]: <V>(fn: (val: T, ind: number) => V) => Exclude<V, Skip>[],
340
- [toObj]: <Fn extends (val: T) => Skip | readonly [string, any], R = Exclude<ReturnType<Fn>, Skip>>(fn: Fn) => { [K in R[0]]: R[1] },
341
- [rem]: (val: T) => void
342
- };
203
+ [toObj]: <R extends readonly [string, any]>(fn: (val: T) => Skip | R) => { [K: string]: any },
204
+ [rem]: (val: T) => void
205
+ }
343
206
 
344
- interface MapConstructor {};
345
- interface Map<K, V> extends ProtoWithSymbols {
346
- [add]: (k: K, v: V) => void,
207
+ interface MapConstructor {}
208
+ interface Map<K, V> {
209
+ [add]: (k: K, v: V) => void,
347
210
  [count]: () => number,
348
211
  [empty]: () => boolean,
349
- [find]: (fn: (val: V, key: K) => any) => ({ found: true, val: V, key: K } | { found: false, val: null, key: null }),
350
- [map]: <T>(fn: (val: V, key: K) => Skip | readonly [string, any]) => { [Key: string]: any },
212
+ [find]: (fn: (val: V, key: K) => any) => ({ found: true, val: V, key: K } | { found: false, val: null, key: null }),
213
+ [map]: <T>(fn: (val: V, key: K) => Skip | readonly [string, any]) => { [Key: string]: any },
351
214
  [toArr]: <T>(fn: (val: V, key: K) => T) => Exclude<T, Skip>[],
352
215
  [toObj]: <T>(fn: (val: V, key: K) => Skip | readonly [string, any]) => { [Key: string]: any },
353
- [rem]: (key: K) => void
354
- };
216
+ [rem]: (key: K) => void
217
+ }
355
218
 
356
219
  interface StringConstructor {
357
220
  [base32]: string,
358
221
  [base36]: string,
359
222
  [base62]: string,
360
- [base64]: string,
223
+ [base64Url]: string,
361
224
  [base64Std]: string,
362
225
  [baseline]: (str: string) => string,
363
226
  [charset]: (str: string) => CharSet,
364
- };
365
- interface String extends ProtoWithSymbols {
366
- [count](): number,
367
- [has](s: string): boolean,
368
- [padHead](n: number, s?: string): string,
369
- [padTail](n: number, s?: string): string,
227
+ }
228
+ interface String {
229
+ [code]: (ind?: number) => number,
230
+ [count]: () => number,
231
+ [has]: (s: string) => boolean,
232
+ [padHead]: (n: number, s?: string) => string,
233
+ [padTail]: (n: number, s?: string) => string,
370
234
  [toNum]: (chrs: string | CharSet) => bigint,
371
- [hasHead]<H extends string>(this: string, head: H): this is `${H}${string}`,
372
- [hasTail]<T extends string>(this: string, tail: T): this is `${string}${T}`,
373
- [upper]<S extends string>(this: S): Uppercase<S>,
374
- [lower]<S extends string>(this: S): Lowercase<S>,
235
+ [hasHead]: <H extends string>(this: string, head: H) => this is `${H}${string}`,
236
+ [hasTail]: <T extends string>(this: string, tail: T) => this is `${string}${T}`,
237
+ [upper]: <S extends string>(this: S) => Uppercase<S>,
238
+ [lower]: <S extends string>(this: S) => Lowercase<S>,
375
239
  [cut]: {
376
240
  (str: string, cuts: 1): [ string, string ],
377
241
  (str: string, cuts: 2): [ string, string, string ],
@@ -383,7 +247,7 @@ declare global {
383
247
  (amount: number, char?: string): string,
384
248
  (str: string): string
385
249
  }
386
- };
250
+ }
387
251
 
388
252
  }
389
253
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gershy/clearing",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "description": "Adds the features you always wish javascript had!",
5
5
  "keywords": [
6
6
  "clearing",