Skip to content

Commit a5f6bac

Browse files
authored
feat(generateId): encode a UUID as base58 for the generateId method (#20)
* feat(generateId): encode a UUID as base58 for the generateId method * feat(generateId): update ci/cd * feat(generateId): remove encoded padding * feat(generateId): bump uuid version * feat(generateId): externalize deps
1 parent 50c67bf commit a5f6bac

File tree

21 files changed

+786
-137
lines changed

21 files changed

+786
-137
lines changed

.github/workflows/tests-and-checks.yml

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ name: Tests and Checks
33
on: [push]
44

55
jobs:
6-
typecheck:
6+
build-test-check:
7+
name: Install deps, build required package, typecheck, lint and test
78
runs-on: ubuntu-latest
89
steps:
910
- uses: actions/checkout@v3
@@ -12,29 +13,13 @@ jobs:
1213
version: 9
1314
- name: Install dependencies
1415
run: pnpm install --frozen-lockfile
16+
- name: Build
17+
run: pnpm build
1518
- name: Generate Prisma Types
1619
run: cd apps/server && pnpm prisma generate
1720
- name: Typecheck
1821
run: pnpm ts:check
19-
lint:
20-
runs-on: ubuntu-latest
21-
steps:
22-
- uses: actions/checkout@v3
23-
- uses: pnpm/action-setup@v3
24-
with:
25-
version: 9
26-
- name: Install dependencies
27-
run: pnpm install --frozen-lockfile
2822
- name: Linting
2923
run: pnpm lint
30-
test:
31-
runs-on: ubuntu-latest
32-
steps:
33-
- uses: actions/checkout@v3
34-
- uses: pnpm/action-setup@v3
35-
with:
36-
version: 9
37-
- name: Install dependencies
38-
run: pnpm install --frozen-lockfile
3924
- name: Test
4025
run: pnpm test

apps/events/package.json

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
"react-dom": "^18.3.1",
3333
"tailwind-merge": "^2.5.3",
3434
"tailwindcss-animate": "^1.0.7",
35-
"uuid": "^10.0.0",
35+
"uuid": "^11.0.2",
3636
"vite-plugin-node-polyfills": "^0.22.0"
3737
},
3838
"devDependencies": {
@@ -53,9 +53,7 @@
5353
"tailwindcss": "^3.4.13",
5454
"typescript": "^5.5.3",
5555
"typescript-eslint": "^8.8.0",
56-
"vite": "^5.4.8",
5756
"vite-plugin-top-level-await": "^1.4.4",
58-
"vite-plugin-wasm": "^3.3.0",
59-
"vitest": "^2.1.2"
57+
"vite-plugin-wasm": "^3.3.0"
6058
}
6159
}

package.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
{
22
"name": "graph-framework-monorepo",
33
"private": true,
4+
"type": "module",
45
"workspaces": [
56
"apps/*",
67
"packages/*"
78
],
89
"devDependencies": {
9-
"typescript": "^5.6.2"
10+
"escape-string-regexp": "^5.0.0",
11+
"typescript": "^5.6.3",
12+
"vite": "^5.4.10",
13+
"vitest": "^2.1.4"
1014
},
1115
"scripts": {
16+
"build": "pnpm --filter graph-framework-utils build",
1217
"ts:check": "pnpm -r ts:check",
1318
"test": "pnpm -r test",
1419
"lint": "pnpm -r lint"

packages/graph-framework-identity/package.json

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,10 @@
1717
"effect": "^3.10.12"
1818
},
1919
"devDependencies": {
20-
"effect": "^3.10.12",
21-
"vite": "^5.4.8",
22-
"vitest": "^2.1.1"
20+
"effect": "^3.10.12"
2321
},
2422
"dependencies": {
25-
"uuid": "^10.0.0",
23+
"uuid": "^11.0.2",
2624
"graph-framework-utils": "workspace:*"
2725
}
2826
}

packages/graph-framework-schema/package.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,7 @@
3030
"@types/react": "^18.3.7",
3131
"@types/uuid": "^10.0.0",
3232
"@vitejs/plugin-react": "^4.3.2",
33-
"jsdom": "^25.0.1",
34-
"vite": "^5.4.8",
35-
"vitest": "^2.1.1"
33+
"jsdom": "^25.0.1"
3634
},
3735
"dependencies": {
3836
"fast-deep-equal": "^3.1.3",

packages/graph-framework-space-events/package.json

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,10 @@
1717
"effect": "^3.10.12"
1818
},
1919
"devDependencies": {
20-
"effect": "^3.10.12",
21-
"vite": "^5.4.8",
22-
"vitest": "^2.1.1"
20+
"effect": "^3.10.12"
2321
},
2422
"dependencies": {
25-
"uuid": "^10.0.0",
23+
"uuid": "^11.0.2",
2624
"graph-framework-utils": "workspace:*"
2725
}
2826
}

packages/graph-framework-space-events/src/create-space.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { generateId } from "graph-framework-utils";
2-
import { Author, SpaceEvent } from "./types.js";
2+
import type { Author, SpaceEvent } from "./types.js";
33

44
type Params = {
55
author: Author;
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Graph Framework Utils
2+
3+
Provides common utilities for the Graph Framework.
4+
5+
_All utilities must be runnable on: Browser, NodeJS server, ReactNative._
6+
7+
## API
8+
9+
- `generateId()` - generates a base58 encoded ID from a generated v4 UUID.
10+
11+
```ts
12+
import { generateId } from "graph-framework-utils";
13+
14+
const id = generateId();
15+
console.log(id); // Gw9uTVTnJdhtczyuzBkL3X
16+
```
17+
18+
### Base58 utils
19+
20+
- `encodeBase58` - encodes a given string (like the hyphen-stripped UUID) to base 58
21+
22+
```ts
23+
import { v4 } from "uuid";
24+
import { encodeBase58 } from "graph-framework-utils/base58";
25+
26+
const uuid = v4(); // 92539817-7989-4083-ab80-e9c2b2b66669
27+
const stripped = uuid.replaceAll(/-/g, ""); // 9253981779894083ab80e9c2b2b66669
28+
const encoded = encodeBase58(dashesRemoved);
29+
console.log(encoded); // K51CbDqxW35osbjPo5ZF77
30+
```
31+
32+
- `decodeBase58ToUUID` - decodes the given base58 encoded UUID back to its original UUID value
33+
34+
```ts
35+
import { v4 } from "uuid";
36+
import { decodeBase58ToUUID, encodeBase58 } from "graph-framework-utils/base58";
37+
38+
const uuid = v4(); // 92539817-7989-4083-ab80-e9c2b2b66669
39+
const stripped = uuid.replaceAll(/-/g, ""); // 9253981779894083ab80e9c2b2b66669
40+
const encoded = encodeBase58(dashesRemoved); // K51CbDqxW35osbjPo5ZF77
41+
const decoded = decodeBase58ToUUID(encoded);
42+
43+
expect(encoded).toHaveLength(22);
44+
expect(decoded).toEqual(uuid);
45+
```
Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,42 @@
11
{
22
"name": "graph-framework-utils",
33
"version": "0.0.1",
4-
"description": "",
4+
"description": "Provides common utilities for the Graph Framework",
55
"type": "module",
6+
"main": "./dist/index.mjs",
7+
"module": "./dist/index.mjs",
8+
"types": "./dist/index.d.ts",
9+
"exports": {
10+
".": {
11+
"types": "./dist/index.d.ts",
12+
"require": "./dist/index.cjs",
13+
"import": "./dist/index.mjs",
14+
"default": "./dist/index.mjs"
15+
},
16+
"./base58": {
17+
"types": "./dist/base58.d.ts",
18+
"require": "./dist/base58.cjs",
19+
"import": "./dist/base58.mjs",
20+
"default": "./dist/base58.mjs"
21+
}
22+
},
23+
"files": [
24+
"dist",
25+
"package.json"
26+
],
27+
"sideEffects": false,
628
"scripts": {
29+
"build": "vite build",
730
"test": "vitest run --typecheck",
831
"ts:check": "tsc --noEmit",
932
"lint": "echo 'No linting configured'"
1033
},
11-
"exports": {
12-
".": {
13-
"default": "./src/index.js"
14-
}
15-
},
1634
"devDependencies": {
17-
"@types/react": "^18.3.7",
1835
"@types/uuid": "^10.0.0",
19-
"vite": "^5.4.8",
20-
"vitest": "^2.1.1"
36+
"uuid": "^11.0.2",
37+
"vite-plugin-dts": "^4.3.0"
2138
},
22-
"dependencies": {
23-
"uuid": "^10.0.0"
39+
"peerDependencies": {
40+
"uuid": "^11"
2441
}
2542
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { describe, expect, it } from "vitest";
2+
import { v4 } from "uuid";
3+
4+
import { decodeBase58ToUUID, encodeBase58 } from "./base58.js";
5+
6+
describe("base58", () => {
7+
it("should be able to encoded a UUID to base58 and then decode it back to its original UUID", () => {
8+
const expected = v4();
9+
const given = expected.replaceAll(/-/g, "");
10+
11+
const encoded = encodeBase58(given);
12+
expect(encoded).toHaveLength(22);
13+
14+
const decoded = decodeBase58ToUUID(encoded);
15+
expect(decoded).toHaveLength(expected.length);
16+
expect(decoded).toEqual(expected);
17+
});
18+
});

0 commit comments

Comments
 (0)