diff --git a/Frontend/package-lock.json b/Frontend/package-lock.json index e875441..535d983 100644 --- a/Frontend/package-lock.json +++ b/Frontend/package-lock.json @@ -27,6 +27,7 @@ "rxjs": "~7.8.0", "smol-toml": "^1.3.1", "tslib": "^2.3.0", + "uuid": "^11.0.5", "yamljs": "^0.3.0", "zone.js": "~0.14.10" }, @@ -37,6 +38,7 @@ "@types/express": "^4.17.17", "@types/jasmine": "~5.1.0", "@types/node": "^18.18.0", + "@types/uuid": "^10.0.0", "@types/yamljs": "^0.2.34", "jasmine-core": "~5.2.0", "karma": "~6.4.0", @@ -4662,6 +4664,13 @@ "@types/node": "*" } }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/wrap-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", @@ -12482,6 +12491,16 @@ "websocket-driver": "^0.7.4" } }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/socks": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", @@ -13423,13 +13442,16 @@ } }, "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.5.tgz", + "integrity": "sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/validate-npm-package-license": { diff --git a/Frontend/package.json b/Frontend/package.json index fdaf257..d849f6f 100644 --- a/Frontend/package.json +++ b/Frontend/package.json @@ -31,6 +31,7 @@ "rxjs": "~7.8.0", "smol-toml": "^1.3.1", "tslib": "^2.3.0", + "uuid": "^11.0.5", "yamljs": "^0.3.0", "zone.js": "~0.14.10" }, @@ -41,6 +42,7 @@ "@types/express": "^4.17.17", "@types/jasmine": "~5.1.0", "@types/node": "^18.18.0", + "@types/uuid": "^10.0.0", "@types/yamljs": "^0.2.34", "jasmine-core": "~5.2.0", "karma": "~6.4.0", diff --git a/Frontend/src/app/app.routes.ts b/Frontend/src/app/app.routes.ts index f43a5e2..d842e71 100644 --- a/Frontend/src/app/app.routes.ts +++ b/Frontend/src/app/app.routes.ts @@ -6,6 +6,7 @@ import { Md2htmlComponent } from './md2html/md2html.component'; import { SerializedToolComponent } from './serialized-tool/serialized-tool.component'; import { MssqlScaffolderComponent } from './mssql-scaffolder/mssql-scaffolder.component'; import { DownloadsComponent } from './downloads/downloads.component'; +import { IdGeneratorComponent } from './id-generator/id-generator.component'; export const routes: Routes = [ { path: '', title: "CodeChef", component: HomeComponent, data: { header: false } }, @@ -13,6 +14,7 @@ export const routes: Routes = [ { path: 'md2html', title: "MD to HTML • CodeChef", component: Md2htmlComponent }, { path: 'serialized', title: "Serialized Tool • CodeChef", component: SerializedToolComponent }, { path: 'mssqlscaffold', title: "MSSQL Scaffolder • CodeChef", component: MssqlScaffolderComponent }, + { path: 'id', title: "ID Generator • CodeChef", component: IdGeneratorComponent }, { path: 'downloads', title: "Downloads • CodeChef", component: DownloadsComponent }, { path: '**', title: "Not Found • CodeChef", component: NotFoundComponent }, diff --git a/Frontend/src/app/header/header.component.html b/Frontend/src/app/header/header.component.html index 18bb897..60b0dab 100644 --- a/Frontend/src/app/header/header.component.html +++ b/Frontend/src/app/header/header.component.html @@ -30,11 +30,10 @@

CodeChef

diff --git a/Frontend/src/app/home/home.component.html b/Frontend/src/app/home/home.component.html index fccfdd8..a12b181 100644 --- a/Frontend/src/app/home/home.component.html +++ b/Frontend/src/app/home/home.component.html @@ -30,6 +30,7 @@

CodeChef

Markdown to HTML Converter Serialized Tool MSSQL Scaffolder + ID Generator
diff --git a/Frontend/src/app/id-generator/id-generator.component.html b/Frontend/src/app/id-generator/id-generator.component.html new file mode 100644 index 0000000..5edb3f5 --- /dev/null +++ b/Frontend/src/app/id-generator/id-generator.component.html @@ -0,0 +1,105 @@ +
+
+

ID Generator

+

You can easily generate GUID/UUID or NanoID using this tool.
+ Just configure the tool and keep generating as many valid IDs as you like!

+
+ +
+
+
+ + +
+
+ + +
+
+
+ +
+ + +
+
+ + +
+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ +
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ +
+ +
+
+
+
+ +
+
+ +
+
+ +
+ +
+
+

GUID & UUID
GUID (Globally Unique Identifier) and UUID (Universally Unique + Identifier) are 128-bit unique IDs widely used in databases, distributed systems, and APIs. These + alphanumeric strings (like 550e8400-e29b-41d4-a716-446655440000) ensure uniqueness across + systems. UUIDs follow the RFC 4122 standard and come in versions like v1 + (time-based) or v4 (random), making them perfect for decentralized setups + where collisions must be avoided.

+

NanoID
NanoID is the sleek, modern alternative to UUIDs. It’s + faster, customizable, and shorter—ideal for use cases + like short URLs, user sessions, or SPAs. With adjustable lengths and character sets, NanoID gives + developers full control while staying efficient and secure. Need a compact, unique ID that’s easy to + work with? NanoID has you covered.

+
+
+
\ No newline at end of file diff --git a/Frontend/src/app/id-generator/id-generator.component.spec.ts b/Frontend/src/app/id-generator/id-generator.component.spec.ts new file mode 100644 index 0000000..28e1bdc --- /dev/null +++ b/Frontend/src/app/id-generator/id-generator.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { IdGeneratorComponent } from './id-generator.component'; +import { provideAnimations } from '@angular/platform-browser/animations'; + +describe('IdGeneratorComponent', () => { + let component: IdGeneratorComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [IdGeneratorComponent], + providers: [ + provideAnimations(), + ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(IdGeneratorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/Frontend/src/app/id-generator/id-generator.component.ts b/Frontend/src/app/id-generator/id-generator.component.ts new file mode 100644 index 0000000..1cce6ba --- /dev/null +++ b/Frontend/src/app/id-generator/id-generator.component.ts @@ -0,0 +1,52 @@ +import { Component } from '@angular/core'; +import { CodeAreaComponent } from "../code-area/code-area.component"; +import { valueChangeAnim } from '../../animations/common-animations'; +import { Meta } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; +import { v4 as uuidv4 } from 'uuid'; +import { nanoid } from 'nanoid'; + +@Component({ + selector: 'app-id-generator', + standalone: true, + imports: [FormsModule, CodeAreaComponent], + templateUrl: './id-generator.component.html', + animations: [valueChangeAnim] +}) +export class IdGeneratorComponent { + protected status: boolean = false; + protected idsCode: string = ""; + protected isGuid: boolean = true; + protected uppercase: boolean = false; + protected hyphen: boolean = true; + protected base64: boolean = false; + protected rfc7515: boolean = false; + protected urlEncode: boolean = false; + protected count: number = 7; + protected prepend: string = "{\""; + protected append: string = "\"},"; + + constructor(meta: Meta) { + meta.addTags([ + { name: "description", content: "Generates GUID/UUID or NanoIDs with advanced settings." }, + { name: "keywords", content: "generate, generator, ID, GUID, UUID, nanoID, free, online, advanced, setting, code, encode, encoder, encoding, base64, base, 64, url, url encode, RFC7515, RFC, 7515" }, + ]); + + this.generate(); + } + + protected generate() { + this.idsCode = ""; + for (let i = 0; i < this.count; i++) { + let id = this.isGuid ? uuidv4().toString() : nanoid().toString(); + if (this.uppercase) id = id.toUpperCase(); + if (this.isGuid) if (!this.hyphen) id = id.replaceAll("-", ""); + if (this.base64) id = btoa(id); + if (this.base64) if (this.rfc7515) id = id.replaceAll("+", "-").replaceAll("/", "_").replaceAll("=", ""); + if (this.base64) if (this.urlEncode) id = encodeURIComponent(id); + this.idsCode += this.prepend + id + this.append + "\n"; + } + + this.status = !this.status; + } +} diff --git a/README.md b/README.md index 4382420..c177b38 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ CodeChef is an online developer tool that aims to eliminate repetitive developer - **Markdown to HTML converter**
Converts Markdown code to HTML code. - **Serialized tool**
Converts serialized objects between different formats(JSON, XML, YAML, TOML). - **MSSQL Scaffolder**
Scaffolds C# Models from MSSQL Tables and Stored Procedures. +- **ID Generator**
Generates GUID/UUID and NanoIDs with code formating and encoding. - **Need more tools?**
Open issue/pull request, Everyone is welcome for contribution. You can [**Go to Live Website**](https://codechef.ipdotsetaf.ir) or Run the website locally.