tuple-ts 0.8.2 → 0.8.4

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.
package/dist/index.d.ts CHANGED
@@ -1,12 +1,14 @@
1
1
  import InternCache from "./intern-cache.js";
2
2
  type BaseTuple = readonly unknown[];
3
3
  type BaseLabels = readonly string[];
4
+ type NumericKeyOf<T> = keyof T & (number | `${number}`);
5
+ type ToNumber<K> = K extends `${infer N extends number}` ? N : never;
4
6
  export type TupleFactory<T extends BaseTuple = BaseTuple> = {
5
7
  <const T_ extends T>(...args: T_): T_;
6
- typed<T_ extends T>(...exemplar: T_ | []): TupleFactory<T_>;
8
+ typed<T_ extends T>(...exemplar: T_ | []): TupleFactory<Readonly<T_>>;
7
9
  };
8
10
  type ObjectOf<T extends BaseTuple, L extends BaseLabels> = {
9
- [I in Extract<keyof L, `${number}`> as L[I]]: T[I extends `${infer N extends number}` ? N : never];
11
+ [I in NumericKeyOf<L> as L[I]]: T[ToNumber<I>];
10
12
  };
11
13
  type TupleFromObject<T extends BaseTuple, L extends BaseLabels, O extends ObjectOf<T, L>> = T & {
12
14
  [I in keyof L]: O[L[I]];
@@ -14,7 +16,7 @@ type TupleFromObject<T extends BaseTuple, L extends BaseLabels, O extends Object
14
16
  export type StructFactory<T extends BaseTuple, L extends BaseLabels> = {
15
17
  <const T_ extends T>(...args: T_): Readonly<T_ & ObjectOf<T_, L>>;
16
18
  from<const O extends ObjectOf<T, L>, const T_ extends TupleFromObject<T, L, O>>(arg: O): Readonly<ObjectOf<T_, L> & T_>;
17
- typed<T_ extends T>(...exemplar: T_ | []): StructFactory<T_, L>;
19
+ typed<T_ extends T>(...exemplar: T_ | []): StructFactory<Readonly<T_>, L>;
18
20
  typedFrom<O extends ObjectOf<T, L>>(...args: [exemplar: O] | []): StructFactory<{
19
21
  [I in keyof L]: O[L[I]];
20
22
  }, L>;
package/dist/index.js CHANGED
@@ -33,11 +33,10 @@ export const _tupleCache = new InternCache(hash.valuesHash, arrayEquivalent, Obj
33
33
  export const tuple = defineTuple();
34
34
  export const struct = (labels) => {
35
35
  const cacheInjestFn = (tuple) => {
36
- const labeledTuple = tuple;
37
36
  labels.forEach((label, index) => {
38
- labeledTuple[label] = tuple[index];
37
+ tuple[label] = tuple[index];
39
38
  });
40
- return Object.freeze(labeledTuple);
39
+ return Object.freeze(tuple);
41
40
  };
42
41
  const cache = new InternCache(hash.valuesHash, arrayEquivalent, cacheInjestFn);
43
42
  return defineStruct(cache, labels);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "tuple-ts",
4
- "version": "0.8.2",
4
+ "version": "0.8.4",
5
5
  "description": "Tuples and structs for TypeScript and JavaScript with equality and identity semantics.",
6
6
  "keywords": [
7
7
  "tuple",
@@ -35,7 +35,7 @@
35
35
  },
36
36
  "scripts": {
37
37
  "build": "tsc",
38
- "test": "vitest run src/",
38
+ "test": "tsc --noEmit && vitest run src/",
39
39
  "prepare": "npm run build",
40
40
  "prepublishOnly": "npm test"
41
41
  },