@envind/ts-enum-utils 1.0.0 → 1.0.1

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/README.md CHANGED
@@ -1,10 +1,5 @@
1
1
  # ts-enum-utils
2
2
 
3
- [![npm version](https://img.shields.io/npm/v/ts-enum-utils.svg)](https://www.npmjs.com/package/ts-enum-utils)
4
- [![TypeScript](https://img.shields.io/badge/TypeScript-5.0%2B-blue)](https://www.typescriptlang.org/)
5
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
- [![Bundle Size](https://img.shields.io/bundlephobia/minzip/ts-enum-utils)](https://bundlephobia.com/package/ts-enum-utils)
7
-
8
3
  Type-safe runtime enums with built-in utilities for TypeScript.
9
4
 
10
5
  ## Why?
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["createEnum","values","valueSet","base","value","index","members","v"],"mappings":"aAiBO,IAAMA,CAAAA,CAAiDC,CAAAA,EAAuB,CACnF,GAAIA,CAAAA,CAAO,MAAA,GAAW,CAAA,CACpB,MAAM,IAAI,KAAA,CAAM,mCAAmC,CAAA,CAIrD,GADqB,IAAI,GAAA,CAAIA,CAAM,CAAA,CAClB,IAAA,GAASA,CAAAA,CAAO,MAAA,CAC/B,MAAM,IAAI,KAAA,CAAM,4BAA4B,CAAA,CAG9C,IAAMC,CAAAA,CAAW,IAAI,GAAA,CAAYD,CAAM,CAAA,CAEjCE,CAAAA,CAAoB,CACxB,MAAA,CAAAF,CAAAA,CAEA,EAAA,CAAKG,CAAAA,EAAuC,OAAOA,CAAAA,EAAU,QAAA,EAAYF,CAAAA,CAAS,GAAA,CAAIE,CAAK,CAAA,CAE3F,MAAA,CAASA,CAAAA,EAA8B,CACrC,GAAI,OAAOA,CAAAA,EAAU,QAAA,EAAYF,CAAAA,CAAS,GAAA,CAAIE,CAAK,CAAA,CACjD,OAAOA,CAAAA,CAET,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwBA,CAAK,CAAA,oBAAA,EAAuBH,CAAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CACzF,CAAA,CAEA,MAAA,CAAQ,IAAiB,CACvB,IAAMI,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,EAAO,CAAIJ,CAAAA,CAAO,MAAM,CAAA,CACtD,OAAOA,CAAAA,CAAOI,CAAK,CACrB,CAAA,CAEA,OAAA,CAAUD,CAAAA,EAA6BH,CAAAA,CAAO,OAAA,CAAQG,CAAK,CAAA,CAE3D,EAAA,CAAKC,CAAAA,EAAyCJ,CAAAA,CAAO,EAAA,CAAGI,CAAK,CAC/D,CAAA,CAEMC,CAAAA,CAAU,MAAA,CAAO,WAAA,CAAYL,CAAAA,CAAO,GAAA,CAAKM,CAAAA,EAAM,CAACA,CAAAA,CAAGA,CAAC,CAAC,CAAC,CAAA,CAE5D,OAAO,MAAA,CAAO,MAAA,CAAO,CAAE,GAAGJ,CAAAA,CAAM,GAAGG,CAAQ,CAAC,CAC9C","file":"index.cjs","sourcesContent":["type EnumBase<T extends readonly string[]> = {\n readonly values: T;\n is: (value: unknown) => value is T[number];\n assert: (value: unknown) => T[number];\n random: () => T[number];\n indexOf: (value: T[number]) => number;\n at: (index: number) => T[number] | undefined;\n};\n\ntype EnumMembers<T extends readonly string[]> = {\n readonly [K in T[number]]: K;\n};\n\nexport type Enum<T extends readonly string[]> = EnumBase<T> & EnumMembers<T>;\n\nexport type EnumValue<E extends { values: readonly string[] }> = E[\"values\"][number];\n\nexport const createEnum = <const T extends readonly string[]>(values: T): Enum<T> => {\n if (values.length === 0) {\n throw new Error(\"Enum must have at least one value\");\n }\n\n const uniqueValues = new Set(values);\n if (uniqueValues.size !== values.length) {\n throw new Error(\"Enum values must be unique\");\n }\n\n const valueSet = new Set<string>(values);\n\n const base: EnumBase<T> = {\n values,\n\n is: (value: unknown): value is T[number] => typeof value === \"string\" && valueSet.has(value),\n\n assert: (value: unknown): T[number] => {\n if (typeof value === \"string\" && valueSet.has(value)) {\n return value as T[number];\n }\n throw new Error(`Invalid enum value: \"${value}\". Expected one of: ${values.join(\", \")}`);\n },\n\n random: (): T[number] => {\n const index = Math.floor(Math.random() * values.length);\n return values[index] as T[number];\n },\n\n indexOf: (value: T[number]): number => values.indexOf(value),\n\n at: (index: number): T[number] | undefined => values.at(index) as T[number] | undefined,\n };\n\n const members = Object.fromEntries(values.map((v) => [v, v])) as EnumMembers<T>;\n\n return Object.freeze({ ...base, ...members }) as Enum<T>;\n};\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["createEnum","values","valueSet","base","value","index","members","v"],"mappings":"aAiBO,IAAMA,CAAAA,CAAiDC,CAAAA,EAAuB,CACnF,GAAIA,CAAAA,CAAO,MAAA,GAAW,CAAA,CACpB,MAAM,IAAI,KAAA,CAAM,mCAAmC,CAAA,CAIrD,GADqB,IAAI,GAAA,CAAIA,CAAM,CAAA,CAClB,IAAA,GAASA,CAAAA,CAAO,MAAA,CAC/B,MAAM,IAAI,KAAA,CAAM,4BAA4B,CAAA,CAG9C,IAAMC,CAAAA,CAAW,IAAI,GAAA,CAAYD,CAAM,CAAA,CAEjCE,CAAAA,CAAoB,CACxB,MAAA,CAAAF,CAAAA,CAEA,EAAA,CAAKG,CAAAA,EAAuC,OAAOA,CAAAA,EAAU,QAAA,EAAYF,CAAAA,CAAS,GAAA,CAAIE,CAAK,CAAA,CAE3F,MAAA,CAASA,CAAAA,EAA8B,CACrC,GAAI,OAAOA,CAAAA,EAAU,QAAA,EAAYF,CAAAA,CAAS,GAAA,CAAIE,CAAK,CAAA,CACjD,OAAOA,CAAAA,CAET,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwBA,CAAK,CAAA,oBAAA,EAAuBH,CAAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CACzF,CAAA,CAEA,MAAA,CAAQ,IAAiB,CACvB,IAAMI,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,EAAO,CAAIJ,CAAAA,CAAO,MAAM,CAAA,CACtD,OAAOA,CAAAA,CAAOI,CAAK,CACrB,CAAA,CAEA,OAAA,CAAUD,CAAAA,EAA6BH,CAAAA,CAAO,OAAA,CAAQG,CAAK,CAAA,CAE3D,EAAA,CAAKC,CAAAA,EAAyCJ,CAAAA,CAAO,EAAA,CAAGI,CAAK,CAC/D,CAAA,CAEMC,CAAAA,CAAU,MAAA,CAAO,WAAA,CAAYL,CAAAA,CAAO,GAAA,CAAKM,CAAAA,EAAM,CAACA,CAAAA,CAAGA,CAAC,CAAC,CAAC,CAAA,CAE5D,OAAO,MAAA,CAAO,MAAA,CAAO,CAAE,GAAGJ,CAAAA,CAAM,GAAGG,CAAQ,CAAC,CAC9C","file":"index.cjs","sourcesContent":["interface EnumBase<T extends readonly string[]> {\n readonly values: T;\n is: (value: unknown) => value is T[number];\n assert: (value: unknown) => T[number];\n random: () => T[number];\n indexOf: (value: T[number]) => number;\n at: (index: number) => T[number] | undefined;\n}\n\ntype EnumMembers<T extends readonly string[]> = {\n readonly [K in T[number]]: K;\n};\n\nexport type Enum<T extends readonly string[]> = EnumBase<T> & EnumMembers<T>;\n\nexport type EnumValue<E extends { values: readonly string[] }> = E[\"values\"][number];\n\nexport const createEnum = <const T extends readonly string[]>(values: T): Enum<T> => {\n if (values.length === 0) {\n throw new Error(\"Enum must have at least one value\");\n }\n\n const uniqueValues = new Set(values);\n if (uniqueValues.size !== values.length) {\n throw new Error(\"Enum values must be unique\");\n }\n\n const valueSet = new Set<string>(values);\n\n const base: EnumBase<T> = {\n values,\n\n is: (value: unknown): value is T[number] => typeof value === \"string\" && valueSet.has(value),\n\n assert: (value: unknown): T[number] => {\n if (typeof value === \"string\" && valueSet.has(value)) {\n return value as T[number];\n }\n throw new Error(`Invalid enum value: \"${value}\". Expected one of: ${values.join(\", \")}`);\n },\n\n random: (): T[number] => {\n const index = Math.floor(Math.random() * values.length);\n return values[index] as T[number];\n },\n\n indexOf: (value: T[number]): number => values.indexOf(value),\n\n at: (index: number): T[number] | undefined => values.at(index) as T[number] | undefined,\n };\n\n const members = Object.fromEntries(values.map((v) => [v, v])) as EnumMembers<T>;\n\n return Object.freeze({ ...base, ...members }) as Enum<T>;\n};\n"]}
package/dist/index.d.cts CHANGED
@@ -1,11 +1,11 @@
1
- type EnumBase<T extends readonly string[]> = {
1
+ interface EnumBase<T extends readonly string[]> {
2
2
  readonly values: T;
3
3
  is: (value: unknown) => value is T[number];
4
4
  assert: (value: unknown) => T[number];
5
5
  random: () => T[number];
6
6
  indexOf: (value: T[number]) => number;
7
7
  at: (index: number) => T[number] | undefined;
8
- };
8
+ }
9
9
  type EnumMembers<T extends readonly string[]> = {
10
10
  readonly [K in T[number]]: K;
11
11
  };
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- type EnumBase<T extends readonly string[]> = {
1
+ interface EnumBase<T extends readonly string[]> {
2
2
  readonly values: T;
3
3
  is: (value: unknown) => value is T[number];
4
4
  assert: (value: unknown) => T[number];
5
5
  random: () => T[number];
6
6
  indexOf: (value: T[number]) => number;
7
7
  at: (index: number) => T[number] | undefined;
8
- };
8
+ }
9
9
  type EnumMembers<T extends readonly string[]> = {
10
10
  readonly [K in T[number]]: K;
11
11
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["createEnum","values","valueSet","base","value","index","members","v"],"mappings":"AAiBO,IAAMA,CAAAA,CAAiDC,CAAAA,EAAuB,CACnF,GAAIA,CAAAA,CAAO,MAAA,GAAW,CAAA,CACpB,MAAM,IAAI,KAAA,CAAM,mCAAmC,CAAA,CAIrD,GADqB,IAAI,GAAA,CAAIA,CAAM,CAAA,CAClB,IAAA,GAASA,CAAAA,CAAO,MAAA,CAC/B,MAAM,IAAI,KAAA,CAAM,4BAA4B,CAAA,CAG9C,IAAMC,CAAAA,CAAW,IAAI,GAAA,CAAYD,CAAM,CAAA,CAEjCE,CAAAA,CAAoB,CACxB,MAAA,CAAAF,CAAAA,CAEA,EAAA,CAAKG,CAAAA,EAAuC,OAAOA,CAAAA,EAAU,QAAA,EAAYF,CAAAA,CAAS,GAAA,CAAIE,CAAK,CAAA,CAE3F,MAAA,CAASA,CAAAA,EAA8B,CACrC,GAAI,OAAOA,CAAAA,EAAU,QAAA,EAAYF,CAAAA,CAAS,GAAA,CAAIE,CAAK,CAAA,CACjD,OAAOA,CAAAA,CAET,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwBA,CAAK,CAAA,oBAAA,EAAuBH,CAAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CACzF,CAAA,CAEA,MAAA,CAAQ,IAAiB,CACvB,IAAMI,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,EAAO,CAAIJ,CAAAA,CAAO,MAAM,CAAA,CACtD,OAAOA,CAAAA,CAAOI,CAAK,CACrB,CAAA,CAEA,OAAA,CAAUD,CAAAA,EAA6BH,CAAAA,CAAO,OAAA,CAAQG,CAAK,CAAA,CAE3D,EAAA,CAAKC,CAAAA,EAAyCJ,CAAAA,CAAO,EAAA,CAAGI,CAAK,CAC/D,CAAA,CAEMC,CAAAA,CAAU,MAAA,CAAO,WAAA,CAAYL,CAAAA,CAAO,GAAA,CAAKM,CAAAA,EAAM,CAACA,CAAAA,CAAGA,CAAC,CAAC,CAAC,CAAA,CAE5D,OAAO,MAAA,CAAO,MAAA,CAAO,CAAE,GAAGJ,CAAAA,CAAM,GAAGG,CAAQ,CAAC,CAC9C","file":"index.js","sourcesContent":["type EnumBase<T extends readonly string[]> = {\n readonly values: T;\n is: (value: unknown) => value is T[number];\n assert: (value: unknown) => T[number];\n random: () => T[number];\n indexOf: (value: T[number]) => number;\n at: (index: number) => T[number] | undefined;\n};\n\ntype EnumMembers<T extends readonly string[]> = {\n readonly [K in T[number]]: K;\n};\n\nexport type Enum<T extends readonly string[]> = EnumBase<T> & EnumMembers<T>;\n\nexport type EnumValue<E extends { values: readonly string[] }> = E[\"values\"][number];\n\nexport const createEnum = <const T extends readonly string[]>(values: T): Enum<T> => {\n if (values.length === 0) {\n throw new Error(\"Enum must have at least one value\");\n }\n\n const uniqueValues = new Set(values);\n if (uniqueValues.size !== values.length) {\n throw new Error(\"Enum values must be unique\");\n }\n\n const valueSet = new Set<string>(values);\n\n const base: EnumBase<T> = {\n values,\n\n is: (value: unknown): value is T[number] => typeof value === \"string\" && valueSet.has(value),\n\n assert: (value: unknown): T[number] => {\n if (typeof value === \"string\" && valueSet.has(value)) {\n return value as T[number];\n }\n throw new Error(`Invalid enum value: \"${value}\". Expected one of: ${values.join(\", \")}`);\n },\n\n random: (): T[number] => {\n const index = Math.floor(Math.random() * values.length);\n return values[index] as T[number];\n },\n\n indexOf: (value: T[number]): number => values.indexOf(value),\n\n at: (index: number): T[number] | undefined => values.at(index) as T[number] | undefined,\n };\n\n const members = Object.fromEntries(values.map((v) => [v, v])) as EnumMembers<T>;\n\n return Object.freeze({ ...base, ...members }) as Enum<T>;\n};\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["createEnum","values","valueSet","base","value","index","members","v"],"mappings":"AAiBO,IAAMA,CAAAA,CAAiDC,CAAAA,EAAuB,CACnF,GAAIA,CAAAA,CAAO,MAAA,GAAW,CAAA,CACpB,MAAM,IAAI,KAAA,CAAM,mCAAmC,CAAA,CAIrD,GADqB,IAAI,GAAA,CAAIA,CAAM,CAAA,CAClB,IAAA,GAASA,CAAAA,CAAO,MAAA,CAC/B,MAAM,IAAI,KAAA,CAAM,4BAA4B,CAAA,CAG9C,IAAMC,CAAAA,CAAW,IAAI,GAAA,CAAYD,CAAM,CAAA,CAEjCE,CAAAA,CAAoB,CACxB,MAAA,CAAAF,CAAAA,CAEA,EAAA,CAAKG,CAAAA,EAAuC,OAAOA,CAAAA,EAAU,QAAA,EAAYF,CAAAA,CAAS,GAAA,CAAIE,CAAK,CAAA,CAE3F,MAAA,CAASA,CAAAA,EAA8B,CACrC,GAAI,OAAOA,CAAAA,EAAU,QAAA,EAAYF,CAAAA,CAAS,GAAA,CAAIE,CAAK,CAAA,CACjD,OAAOA,CAAAA,CAET,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwBA,CAAK,CAAA,oBAAA,EAAuBH,CAAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CACzF,CAAA,CAEA,MAAA,CAAQ,IAAiB,CACvB,IAAMI,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,EAAO,CAAIJ,CAAAA,CAAO,MAAM,CAAA,CACtD,OAAOA,CAAAA,CAAOI,CAAK,CACrB,CAAA,CAEA,OAAA,CAAUD,CAAAA,EAA6BH,CAAAA,CAAO,OAAA,CAAQG,CAAK,CAAA,CAE3D,EAAA,CAAKC,CAAAA,EAAyCJ,CAAAA,CAAO,EAAA,CAAGI,CAAK,CAC/D,CAAA,CAEMC,CAAAA,CAAU,MAAA,CAAO,WAAA,CAAYL,CAAAA,CAAO,GAAA,CAAKM,CAAAA,EAAM,CAACA,CAAAA,CAAGA,CAAC,CAAC,CAAC,CAAA,CAE5D,OAAO,MAAA,CAAO,MAAA,CAAO,CAAE,GAAGJ,CAAAA,CAAM,GAAGG,CAAQ,CAAC,CAC9C","file":"index.js","sourcesContent":["interface EnumBase<T extends readonly string[]> {\n readonly values: T;\n is: (value: unknown) => value is T[number];\n assert: (value: unknown) => T[number];\n random: () => T[number];\n indexOf: (value: T[number]) => number;\n at: (index: number) => T[number] | undefined;\n}\n\ntype EnumMembers<T extends readonly string[]> = {\n readonly [K in T[number]]: K;\n};\n\nexport type Enum<T extends readonly string[]> = EnumBase<T> & EnumMembers<T>;\n\nexport type EnumValue<E extends { values: readonly string[] }> = E[\"values\"][number];\n\nexport const createEnum = <const T extends readonly string[]>(values: T): Enum<T> => {\n if (values.length === 0) {\n throw new Error(\"Enum must have at least one value\");\n }\n\n const uniqueValues = new Set(values);\n if (uniqueValues.size !== values.length) {\n throw new Error(\"Enum values must be unique\");\n }\n\n const valueSet = new Set<string>(values);\n\n const base: EnumBase<T> = {\n values,\n\n is: (value: unknown): value is T[number] => typeof value === \"string\" && valueSet.has(value),\n\n assert: (value: unknown): T[number] => {\n if (typeof value === \"string\" && valueSet.has(value)) {\n return value as T[number];\n }\n throw new Error(`Invalid enum value: \"${value}\". Expected one of: ${values.join(\", \")}`);\n },\n\n random: (): T[number] => {\n const index = Math.floor(Math.random() * values.length);\n return values[index] as T[number];\n },\n\n indexOf: (value: T[number]): number => values.indexOf(value),\n\n at: (index: number): T[number] | undefined => values.at(index) as T[number] | undefined,\n };\n\n const members = Object.fromEntries(values.map((v) => [v, v])) as EnumMembers<T>;\n\n return Object.freeze({ ...base, ...members }) as Enum<T>;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@envind/ts-enum-utils",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Type-safe runtime enums with built-in utilities for TypeScript",
5
5
  "author": "Florin Cuzeac",
6
6
  "license": "MIT",
@@ -29,16 +29,19 @@
29
29
  "test": "vitest run",
30
30
  "test:watch": "vitest",
31
31
  "lint": "biome check .",
32
- "lint:fix": "biome check --write .",
32
+ "lint:fix": "biome check --fix --unsafe",
33
33
  "format": "biome format --write .",
34
- "prepublishOnly": "pnpm run lint && pnpm run test && pnpm run build"
34
+ "prepublishOnly": "pnpm run test && pnpm run build",
35
+ "check": "ultracite check",
36
+ "fix": "ultracite fix"
35
37
  },
36
38
  "devDependencies": {
37
- "@biomejs/biome": "^1.9.0",
38
- "@types/node": "^22.0.0",
39
- "tsup": "^8.3.0",
40
- "typescript": "^5.6.0",
41
- "vitest": "^2.1.0"
39
+ "@biomejs/biome": "2.3.12",
40
+ "@types/node": "^25.1.0",
41
+ "tsup": "^8.5.1",
42
+ "typescript": "^5.9.3",
43
+ "ultracite": "7.1.1",
44
+ "vitest": "^4.0.18"
42
45
  },
43
46
  "keywords": [
44
47
  "typescript",
@@ -59,5 +62,5 @@
59
62
  "engines": {
60
63
  "node": ">=18"
61
64
  },
62
- "packageManager": "pnpm@10.25.0"
63
- }
65
+ "packageManager": "pnpm@10.28.2"
66
+ }