This commit is contained in:
Carlos Valente
2023-02-20 18:28:54 +01:00
committed by GitHub
parent 63d763cbaf
commit d8a84ac88d
18 changed files with 79 additions and 20 deletions
+30
View File
@@ -0,0 +1,30 @@
{
"env": {
"browser": true,
"node": true
},
"parser": "@typescript-eslint/parser",
"plugins": [
"simple-import-sort",
"prettier"
],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"prettier"
],
"parserOptions": {
"ecmaVersion": 2020,
"sourceType": "module"
},
"rules": {
"prettier/prettier": [
"error",
{
"endOfLine": "auto"
}
],
"simple-import-sort/exports": "error",
"simple-import-sort/imports": "error"
}
}
+8
View File
@@ -0,0 +1,8 @@
{
"trailingComma": "all",
"tabWidth": 2,
"semi": true,
"singleQuote": true,
"jsxSingleQuote": true,
"printWidth": 120
}
+1
View File
@@ -0,0 +1 @@
export { generateId } from './src/generate-id/generateId.js';
+28
View File
@@ -0,0 +1,28 @@
{
"name": "ontime-utils",
"type": "module",
"exports": "./index.ts",
"version": "2.0.0",
"private": true,
"description": "shared logic for ontime",
"scripts": {
"lint": "eslint .",
"test": "vitest",
"test:pipeline": "vitest run",
"cleanup": "rm -rf .turbo && rm -rf node_modules"
},
"dependencies": {
"nanoid": "^4.0.0"
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^5.48.1",
"@typescript-eslint/parser": "^5.48.1",
"eslint": "^8.31.0",
"eslint-config-prettier": "^8.6.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-simple-import-sort": "^8.0.0",
"prettier": "^2.8.3",
"typescript": "^4.9.4",
"vitest": "^0.27.1"
}
}
@@ -0,0 +1,28 @@
import { generateId } from './generateId.js';
test('generate a valid 5 digit id', () => {
const id = generateId();
expect(id.length).toBe(5);
});
test('generate 100 with less than 110 attempts', () => {
const ids = new Set<string>();
let attempts = 1;
while (ids.size < 100) {
ids.add(generateId());
attempts++;
}
expect(attempts).toBeLessThan(105);
});
test('generate 1000 with less than 1020 attempts', () => {
const ids = new Set<string>();
let attempts = 1;
while (ids.size < 1000) {
ids.add(generateId());
attempts++;
}
expect(attempts).toBeLessThan(1020);
});
@@ -0,0 +1,8 @@
import { customAlphabet } from 'nanoid';
const nanoid = customAlphabet('1234567890abcdef', 5);
/**
* Generates a random id from the defined alphabet
*/
export const generateId = (): string => nanoid();
+34
View File
@@ -0,0 +1,34 @@
{
"compilerOptions": {
"target": "ESNext",
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"skipLibCheck": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noImplicitAny": true,
"noImplicitReturns": true,
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"noImplicitThis": true,
"strictNullChecks": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"removeComments": true,
"preserveConstEnums": true,
"allowJs": true,
"baseUrl": "src",
"types": ["vitest/globals"]
},
"include": [
"src",
"../node_modules/.pnpm/vitest@0.26.3/node_modules/vitest/globals.d.ts"
],
"exclude": [
"node_modules",
]
}
+7
View File
@@ -0,0 +1,7 @@
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
globals: true,
},
});