@lowerdeck/id 1.0.4 → 1.0.6

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/package.json CHANGED
@@ -1,9 +1,15 @@
1
1
  {
2
2
  "name": "@lowerdeck/id",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
+ "files": [
8
+ "src/**",
9
+ "dist/**",
10
+ "README.md",
11
+ "package.json"
12
+ ],
7
13
  "author": "Tobias Herber",
8
14
  "license": "Apache 2",
9
15
  "type": "module",
@@ -21,18 +27,18 @@
21
27
  "scripts": {
22
28
  "test": "vitest run --passWithNoTests",
23
29
  "lint": "prettier src/**/*.ts --check",
24
- "build": "microbundle"
30
+ "build": "rm -rf ./dist && microbundle"
25
31
  },
26
32
  "dependencies": {
27
- "@lowerdeck/hash": "^1.0.3",
28
- "@lowerdeck/error": "^1.0.7",
33
+ "@lowerdeck/hash": "^1.0.4",
34
+ "@lowerdeck/error": "^1.0.10",
29
35
  "nanoid": "^5.0.7",
30
36
  "short-uuid": "^5.2.0",
31
37
  "snowflake-uuid": "^1.0.0"
32
38
  },
33
39
  "devDependencies": {
34
40
  "microbundle": "^0.15.1",
35
- "@lowerdeck/tsconfig": "^1.0.0",
41
+ "@lowerdeck/tsconfig": "^1.0.1",
36
42
  "typescript": "^5.8.3",
37
43
  "vitest": "^3.1.2"
38
44
  }
@@ -1,13 +0,0 @@
1
-
2
- $ microbundle
3
- No name was provided for external module '@lowerdeck/error' in output.globals – guessing 'error'
4
- No name was provided for external module '@lowerdeck/hash' in output.globals – guessing 'hash'
5
- Build "@lowerdeck/id" to dist:
6
- 1164 B: index.cjs.gz
7
- 1029 B: index.cjs.br
8
- 1057 B: index.module.js.gz
9
- 938 B: index.module.js.br
10
- 1130 B: index.module.js.gz
11
- 1010 B: index.module.js.br
12
- 1247 B: index.umd.js.gz
13
- 1109 B: index.umd.js.br
@@ -1,21 +0,0 @@
1
-
2
- $ vitest run --passWithNoTests
3
- [?25l
4
-  RUN  v3.2.4 /Users/tobias/code/metorial/metorial-enterprise/oss/src/packages/shared/id
5
-
6
- [?2026h
7
-  ❯ src/id.test.ts [queued]
8
-
9
-  Test Files 0 passed (1)
10
-  Tests 0 passed (0)
11
-  Start at 10:23:46
12
-  Duration 101ms
13
- [?2026l ✓ src/id.test.ts (1 test) 2ms
14
- ✓ id > generateId 1ms
15
-
16
-  Test Files  1 passed (1)
17
-  Tests  1 passed (1)
18
-  Start at  10:23:46
19
-  Duration  270ms (transform 65ms, setup 0ms, collect 83ms, tests 2ms, environment 0ms, prepare 41ms)
20
-
21
- [?25h
package/CHANGELOG.md DELETED
@@ -1,36 +0,0 @@
1
- # @lowerdeck/id
2
-
3
- ## 1.0.4
4
-
5
- ### Patch Changes
6
-
7
- - Fix default entry point
8
- - Updated dependencies
9
- - @lowerdeck/error@1.0.7
10
- - @lowerdeck/hash@1.0.3
11
-
12
- ## 1.0.3
13
-
14
- ### Patch Changes
15
-
16
- - update versions
17
- - Updated dependencies
18
- - @lowerdeck/error@1.0.6
19
- - @lowerdeck/hash@1.0.2
20
-
21
- ## 1.0.2
22
-
23
- ### Patch Changes
24
-
25
- - sync
26
- - Updated dependencies
27
- - @lowerdeck/error@1.0.5
28
-
29
- ## 1.0.1
30
-
31
- ### Patch Changes
32
-
33
- - Fix exports
34
- - Updated dependencies
35
- - @lowerdeck/error@1.0.1
36
- - @lowerdeck/hash@1.0.1
@@ -1,2 +0,0 @@
1
- import{ServiceError as e,badRequestError as r}from"@lowerdeck/error";import{Hash as t}from"@lowerdeck/hash";import{customAlphabet as i}from"nanoid";import n from"short-uuid";import{Worker as o}from"snowflake-uuid";let s=n("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"),f=i("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",20),d=i("0123456789",6),l=()=>(new Date).getTime().toString(36).padStart(9,"0"),$=new o(0,0,{workerIdBits:12,sequenceBits:12}),a=new Set,h=e=>{if(e.endsWith("_")&&(e=e.slice(0,-1)),a.has(e))throw new Error(`Prefix ${e} already exists`)},p={sorted:(e,r=22)=>(h(e),{prefix:e,length:r,type:"sorted"}),unsorted:(e,r=22)=>(h(e),{prefix:e,length:r,type:"unsorted"}),key:(e,r=50)=>(h(e),{prefix:e,length:r,type:"key"})},x=e=>{for(let r in e)e[r].prefix.endsWith("_")||(e[r].prefix=`${e[r].prefix}_`);let r=new Set;for(let t in e){let i=e[t].prefix;if(r.has(i))throw new Error(`Prefix ${i} already exists`);r.add(i)}let i=r=>{let t=e[r];if(!t)throw new Error(`Invalid prefix: ${r}`);return t};return{generateId:async e=>{let r=i(e),n=r.length;if("sorted"==r.type){let e=l(),t=n-e.length;return t<10&&(t=10),`${r.prefix}${e}${f(t)}`}if("unsorted"==r.type)return`${r.prefix}${f(n)}`;{let e=`${r.prefix}${f(n)}`;return`${e}${(await t.sha512(e)).slice(0,6)}`}},generateIdSync:e=>{let r=i(e),t=r.length;if("sorted"==r.type){let e=l(),i=t-e.length;return i<10&&(i=10),`${r.prefix}${e}${f(i)}`}if("unsorted"==r.type)return`${r.prefix}${f(t)}`;throw new Error("Cannot generate key id synchronously")},idPrefixes:Object.entries(e).reduce((e,[r,t])=>(e[r]=t.prefix,e),{}),normalizeUUID:(e,r)=>`${i(e).prefix}${s.fromUUID(r)}`}},w=t=>{if(t.endsWith("_")||(t=`${t}_`),a.has(t))throw new Error(`Prefix ${t} already exists`);return a.add(t),{fromUUID:e=>`${t}${s.fromUUID(e)}`,toUUID:i=>{if(!i.startsWith(t))throw new e(r({message:`ID ${i} does not start with prefix ${t}`}));return s.toUUID(i.slice(t.length))}}},u=(e,r=20)=>(e&&!e.endsWith("_")&&(e=`${e}_`),`${e}${f(r)}`),y=(e=20)=>f(e),g=(e,r=20)=>{let t=l(),i=r-t.length;return i<10&&(i=10),`${e}${t}${f(i)}`},m=(e=6)=>d(e),I=e=>(e&&!e.endsWith("_")&&(e=`${e}_`),`${e}${$.nextId().toString(36)}`);export{x as createIdGenerator,w as createUuidTranslator,m as generateCode,u as generateCustomId,g as generateId,y as generatePlainId,I as generateSnowflakeId,l as idTime,p as idType};
2
- //# sourceMappingURL=index.modern.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/id.ts"],"sourcesContent":["import { ServiceError, badRequestError } from '@lowerdeck/error';\nimport { Hash } from '@lowerdeck/hash';\nimport { customAlphabet } from 'nanoid';\nimport short from 'short-uuid';\nimport { Worker } from 'snowflake-uuid';\n\nlet translator = short('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');\n\nlet _defaultId = customAlphabet(\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n 20\n);\n\nlet _code = customAlphabet('0123456789', 6);\n\nexport let idTime = () => new Date().getTime().toString(36).padStart(9, '0');\n\nlet snowflakeIdGenerator = new Worker(0, 0, {\n workerIdBits: 12,\n sequenceBits: 12\n});\n\nlet seenPrefixes = new Set<string>();\nlet checkPrefix = (prefix: string) => {\n if (prefix.endsWith('_')) prefix = prefix.slice(0, -1);\n\n if (seenPrefixes.has(prefix)) {\n throw new Error(`Prefix ${prefix} already exists`);\n }\n};\n\nexport let idType = {\n sorted: (prefix: string, length: number = 22) => {\n checkPrefix(prefix);\n\n return {\n prefix,\n length,\n type: 'sorted' as const\n };\n },\n unsorted: (prefix: string, length: number = 22) => {\n checkPrefix(prefix);\n\n return {\n prefix,\n length,\n type: 'unsorted' as const\n };\n },\n key: (prefix: string, length: number = 50) => {\n checkPrefix(prefix);\n\n return { prefix, length, type: 'key' as const };\n }\n};\n\nexport let createIdGenerator = <\n T extends {\n [key: string]: {\n prefix: string;\n length: number;\n type: 'sorted' | 'key' | 'unsorted';\n };\n }\n>(\n idPrefixes: T\n) => {\n for (let key in idPrefixes) {\n if (!idPrefixes[key].prefix.endsWith('_')) {\n idPrefixes[key].prefix = `${idPrefixes[key].prefix}_`;\n }\n }\n\n let seenPrefixes = new Set<string>();\n for (let key in idPrefixes) {\n let prefix = idPrefixes[key].prefix;\n if (seenPrefixes.has(prefix)) {\n throw new Error(`Prefix ${prefix} already exists`);\n }\n seenPrefixes.add(prefix);\n }\n\n let getIdDescription = (prefix: keyof T) => {\n let pf = idPrefixes[prefix];\n if (!pf) throw new Error(`Invalid prefix: ${prefix as string}`);\n\n return pf;\n };\n\n return {\n generateId: async (prefix: keyof T) => {\n let desc = getIdDescription(prefix);\n let length = desc.length;\n\n if (desc.type == 'sorted') {\n let date = idTime();\n\n let remainingLength = length - date.length;\n if (remainingLength < 10) remainingLength = 10;\n\n return `${desc.prefix}${date}${_defaultId(remainingLength)}`;\n } else if (desc.type == 'unsorted') {\n return `${desc.prefix}${_defaultId(length)}`;\n } else {\n let main = `${desc.prefix}${_defaultId(length)}`;\n return `${main}${(await Hash.sha512(main)).slice(0, 6)}`;\n }\n },\n generateIdSync: (prefix: keyof T) => {\n let desc = getIdDescription(prefix);\n let length = desc.length;\n\n if (desc.type == 'sorted') {\n let date = idTime();\n\n let remainingLength = length - date.length;\n if (remainingLength < 10) remainingLength = 10;\n\n return `${desc.prefix}${date}${_defaultId(remainingLength)}`;\n } else if (desc.type == 'unsorted') {\n return `${desc.prefix}${_defaultId(length)}`;\n } else {\n throw new Error('Cannot generate key id synchronously');\n }\n },\n idPrefixes: Object.entries(idPrefixes).reduce(\n (acc, [key, value]) => {\n // @ts-ignore\n acc[key] = value.prefix;\n return acc;\n },\n {} as { [key in keyof T]: string }\n ),\n\n normalizeUUID: (prefix: keyof T, uuid: string) => {\n let desc = getIdDescription(prefix);\n\n return `${desc.prefix}${translator.fromUUID(uuid)}`;\n }\n\n // toUUID: (prefix: keyof T, id: string) => {\n // let desc = getIdDescription(prefix);\n\n // if (!id.startsWith(desc.prefix)) {\n // throw new ServiceError(\n // badRequestError({\n // message: `ID ${id} does not start with prefix ${desc.prefix}`\n // })\n // );\n // }\n\n // return translator.toUUID(id.slice(desc.prefix.length));\n // }\n };\n};\n\nexport let createUuidTranslator = (prefix: string) => {\n if (!prefix.endsWith('_')) prefix = `${prefix}_`;\n\n if (seenPrefixes.has(prefix)) {\n throw new Error(`Prefix ${prefix} already exists`);\n }\n seenPrefixes.add(prefix);\n\n return {\n fromUUID: (uuid: string) => `${prefix}${translator.fromUUID(uuid)}`,\n toUUID: (id: string) => {\n if (!id.startsWith(prefix)) {\n throw new ServiceError(\n badRequestError({\n message: `ID ${id} does not start with prefix ${prefix}`\n })\n );\n }\n\n return translator.toUUID(id.slice(prefix.length));\n }\n };\n};\n\nexport let generateCustomId = (prefix?: string, length: number = 20) => {\n if (prefix && !prefix.endsWith('_')) prefix = `${prefix}_`;\n\n return `${prefix}${_defaultId(length)}`;\n};\n\nexport let generatePlainId = (length: number = 20) => {\n return _defaultId(length);\n};\n\nexport let generateId = (prefix: string, length: number = 20) => {\n let date = idTime();\n\n let remainingLength = length - date.length;\n if (remainingLength < 10) remainingLength = 10;\n\n return `${prefix}${date}${_defaultId(remainingLength)}`;\n};\n\nexport let generateCode = (length: number = 6) => {\n return _code(length);\n};\n\nexport let generateSnowflakeId = (prefix?: string) => {\n if (prefix && !prefix.endsWith('_')) prefix = `${prefix}_`;\n\n return `${prefix}${snowflakeIdGenerator.nextId().toString(36)}`;\n};\n"],"names":["translator","short","_defaultId","customAlphabet","_code","idTime","Date","getTime","toString","padStart","snowflakeIdGenerator","Worker","workerIdBits","sequenceBits","seenPrefixes","Set","checkPrefix","prefix","endsWith","slice","has","Error","idType","sorted","length","type","unsorted","key","createIdGenerator","idPrefixes","add","getIdDescription","pf","generateId","async","desc","date","remainingLength","main","Hash","sha512","generateIdSync","Object","entries","reduce","acc","value","normalizeUUID","uuid","fromUUID","createUuidTranslator","toUUID","id","startsWith","ServiceError","badRequestError","message","generateCustomId","generatePlainId","generateCode","generateSnowflakeId","nextId"],"mappings":"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"}
package/tsconfig.json DELETED
@@ -1,13 +0,0 @@
1
- {
2
- "$schema": "https://json.schemastore.org/tsconfig",
3
- "extends": "@lowerdeck/tsconfig/base.json",
4
- "exclude": [
5
- "dist"
6
- ],
7
- "include": [
8
- "src"
9
- ],
10
- "compilerOptions": {
11
- "outDir": "dist"
12
- }
13
- }