@hikae/jev-algorithms 0.1.0-rc.0

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 (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +161 -0
  3. package/dist/adapters/memory.d.ts +10 -0
  4. package/dist/adapters/memory.d.ts.map +1 -0
  5. package/dist/adapters/memory.js +12 -0
  6. package/dist/adapters/memory.js.map +1 -0
  7. package/dist/adapters/typesafe.d.ts +15 -0
  8. package/dist/adapters/typesafe.d.ts.map +1 -0
  9. package/dist/adapters/typesafe.js +27 -0
  10. package/dist/adapters/typesafe.js.map +1 -0
  11. package/dist/adapters/workers-ai.d.ts +8 -0
  12. package/dist/adapters/workers-ai.d.ts.map +1 -0
  13. package/dist/adapters/workers-ai.js +11 -0
  14. package/dist/adapters/workers-ai.js.map +1 -0
  15. package/dist/algorithms/aggregate.d.ts +39 -0
  16. package/dist/algorithms/aggregate.d.ts.map +1 -0
  17. package/dist/algorithms/aggregate.js +100 -0
  18. package/dist/algorithms/aggregate.js.map +1 -0
  19. package/dist/algorithms/classify.d.ts +59 -0
  20. package/dist/algorithms/classify.d.ts.map +1 -0
  21. package/dist/algorithms/classify.js +65 -0
  22. package/dist/algorithms/classify.js.map +1 -0
  23. package/dist/algorithms/cluster.d.ts +30 -0
  24. package/dist/algorithms/cluster.d.ts.map +1 -0
  25. package/dist/algorithms/cluster.js +87 -0
  26. package/dist/algorithms/cluster.js.map +1 -0
  27. package/dist/algorithms/match.d.ts +16 -0
  28. package/dist/algorithms/match.d.ts.map +1 -0
  29. package/dist/algorithms/match.js +63 -0
  30. package/dist/algorithms/match.js.map +1 -0
  31. package/dist/algorithms/pairwise.d.ts +45 -0
  32. package/dist/algorithms/pairwise.d.ts.map +1 -0
  33. package/dist/algorithms/pairwise.js +165 -0
  34. package/dist/algorithms/pairwise.js.map +1 -0
  35. package/dist/algorithms/search.d.ts +25 -0
  36. package/dist/algorithms/search.d.ts.map +1 -0
  37. package/dist/algorithms/search.js +32 -0
  38. package/dist/algorithms/search.js.map +1 -0
  39. package/dist/client.d.ts +75 -0
  40. package/dist/client.d.ts.map +1 -0
  41. package/dist/client.js +35 -0
  42. package/dist/client.js.map +1 -0
  43. package/dist/index.d.ts +13 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +13 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/lib/chunk.d.ts +3 -0
  48. package/dist/lib/chunk.d.ts.map +1 -0
  49. package/dist/lib/chunk.js +12 -0
  50. package/dist/lib/chunk.js.map +1 -0
  51. package/dist/lib/unionFind.d.ts +12 -0
  52. package/dist/lib/unionFind.d.ts.map +1 -0
  53. package/dist/lib/unionFind.js +58 -0
  54. package/dist/lib/unionFind.js.map +1 -0
  55. package/docs/animations/cluster-by-relation.gif +0 -0
  56. package/docs/animations/find-first-true.gif +0 -0
  57. package/docs/animations/select-top-k.gif +0 -0
  58. package/docs/animations/sort-by-pairwise.gif +0 -0
  59. package/package.json +53 -0
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ export * from "./client.js";
2
+ export * from "./adapters/typesafe.js";
3
+ export * from "./adapters/workers-ai.js";
4
+ export * from "./adapters/memory.js";
5
+ export * from "./algorithms/pairwise.js";
6
+ export * from "./algorithms/search.js";
7
+ export * from "./algorithms/aggregate.js";
8
+ export * from "./algorithms/cluster.js";
9
+ export * from "./algorithms/classify.js";
10
+ export * from "./algorithms/match.js";
11
+ export * from "./lib/chunk.js";
12
+ export * from "./lib/unionFind.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAE5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AAErC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AAEtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Split `items` into consecutive groups of at most `size`. */
2
+ export declare function chunk<T>(items: readonly T[], size: number): T[][];
3
+ //# sourceMappingURL=chunk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk.d.ts","sourceRoot":"","sources":["../../src/lib/chunk.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CASjE"}
@@ -0,0 +1,12 @@
1
+ /** Split `items` into consecutive groups of at most `size`. */
2
+ export function chunk(items, size) {
3
+ if (!Number.isInteger(size) || size < 1) {
4
+ throw new Error(`chunk size must be a positive integer, got ${size}`);
5
+ }
6
+ const out = [];
7
+ for (let i = 0; i < items.length; i += size) {
8
+ out.push(items.slice(i, i + size));
9
+ }
10
+ return out;
11
+ }
12
+ //# sourceMappingURL=chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk.js","sourceRoot":"","sources":["../../src/lib/chunk.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,UAAU,KAAK,CAAI,KAAmB,EAAE,IAAY;IACzD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,GAAG,GAAU,EAAE,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /** Disjoint-set forest with path compression and union by size. */
2
+ export declare class UnionFind<T> {
3
+ #private;
4
+ constructor(items?: Iterable<T>);
5
+ add(item: T): void;
6
+ find(item: T): T;
7
+ union(a: T, b: T): void;
8
+ connected(a: T, b: T): boolean;
9
+ /** Group all items into clusters keyed by their representative. */
10
+ groups(): T[][];
11
+ }
12
+ //# sourceMappingURL=unionFind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unionFind.d.ts","sourceRoot":"","sources":["../../src/lib/unionFind.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,qBAAa,SAAS,CAAC,CAAC;;gBAIX,KAAK,GAAE,QAAQ,CAAC,CAAC,CAAM;IAInC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAOlB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC;IAgBhB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI;IAWvB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO;IAI9B,mEAAmE;IACnE,MAAM,IAAI,CAAC,EAAE,EAAE;CAUf"}
@@ -0,0 +1,58 @@
1
+ /** Disjoint-set forest with path compression and union by size. */
2
+ export class UnionFind {
3
+ #parent = new Map();
4
+ #size = new Map();
5
+ constructor(items = []) {
6
+ for (const item of items)
7
+ this.add(item);
8
+ }
9
+ add(item) {
10
+ if (!this.#parent.has(item)) {
11
+ this.#parent.set(item, item);
12
+ this.#size.set(item, 1);
13
+ }
14
+ }
15
+ find(item) {
16
+ this.add(item);
17
+ let root = item;
18
+ while (this.#parent.get(root) !== root) {
19
+ root = this.#parent.get(root);
20
+ }
21
+ // Path compression.
22
+ let cursor = item;
23
+ while (cursor !== root) {
24
+ const next = this.#parent.get(cursor);
25
+ this.#parent.set(cursor, root);
26
+ cursor = next;
27
+ }
28
+ return root;
29
+ }
30
+ union(a, b) {
31
+ const rootA = this.find(a);
32
+ const rootB = this.find(b);
33
+ if (rootA === rootB)
34
+ return;
35
+ const sizeA = this.#size.get(rootA);
36
+ const sizeB = this.#size.get(rootB);
37
+ const [small, large] = sizeA < sizeB ? [rootA, rootB] : [rootB, rootA];
38
+ this.#parent.set(small, large);
39
+ this.#size.set(large, sizeA + sizeB);
40
+ }
41
+ connected(a, b) {
42
+ return this.find(a) === this.find(b);
43
+ }
44
+ /** Group all items into clusters keyed by their representative. */
45
+ groups() {
46
+ const out = new Map();
47
+ for (const item of this.#parent.keys()) {
48
+ const root = this.find(item);
49
+ const group = out.get(root);
50
+ if (group)
51
+ group.push(item);
52
+ else
53
+ out.set(root, [item]);
54
+ }
55
+ return [...out.values()];
56
+ }
57
+ }
58
+ //# sourceMappingURL=unionFind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unionFind.js","sourceRoot":"","sources":["../../src/lib/unionFind.ts"],"names":[],"mappings":"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"}
Binary file
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@hikae/jev-algorithms",
3
+ "version": "0.1.0-rc.0",
4
+ "description": "Runtime-agnostic algorithms built on TypeSafe's Jev structured-evaluation model.",
5
+ "keywords": [
6
+ "jev",
7
+ "typesafe",
8
+ "evaluation",
9
+ "algorithms",
10
+ "sorting",
11
+ "ranking",
12
+ "clustering",
13
+ "matching"
14
+ ],
15
+ "license": "MIT",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/HikaruEgashira/jev-algorithms.git"
19
+ },
20
+ "publishConfig": {
21
+ "access": "public",
22
+ "registry": "https://registry.npmjs.org"
23
+ },
24
+ "type": "module",
25
+ "sideEffects": false,
26
+ "engines": {
27
+ "node": ">=20"
28
+ },
29
+ "exports": {
30
+ ".": {
31
+ "types": "./dist/index.d.ts",
32
+ "import": "./dist/index.js"
33
+ }
34
+ },
35
+ "types": "./dist/index.d.ts",
36
+ "files": [
37
+ "dist",
38
+ "docs/animations/*.gif"
39
+ ],
40
+ "scripts": {
41
+ "build": "tsc -p tsconfig.build.json",
42
+ "typecheck": "tsc --noEmit",
43
+ "test": "npm run build && node --test",
44
+ "mutation": "npm run build && stryker run",
45
+ "animations": "npm run build && node scripts/render-animations.mjs",
46
+ "prepublishOnly": "npm test"
47
+ },
48
+ "devDependencies": {
49
+ "@stryker-mutator/core": "^10.0.0",
50
+ "typescript": "^5.6.0"
51
+ },
52
+ "packageManager": "pnpm@11.26.0"
53
+ }