diff --git a/components.d.ts b/components.d.ts index 1a5ce1a9..349539f0 100644 --- a/components.d.ts +++ b/components.d.ts @@ -112,6 +112,7 @@ declare module '@vue/runtime-core' { KeycodeInfo: typeof import('./src/tools/keycode-info/keycode-info.vue')['default'] ListConverter: typeof import('./src/tools/list-converter/list-converter.vue')['default'] LoremIpsumGenerator: typeof import('./src/tools/lorem-ipsum-generator/lorem-ipsum-generator.vue')['default'] + MacAddressGenerator: typeof import('./src/tools/mac-address-generator/mac-address-generator.vue')['default'] MacAddressLookup: typeof import('./src/tools/mac-address-lookup/mac-address-lookup.vue')['default'] MathEvaluator: typeof import('./src/tools/math-evaluator/math-evaluator.vue')['default'] MenuBar: typeof import('./src/tools/html-wysiwyg-editor/editor/menu-bar.vue')['default'] diff --git a/src/tools/index.ts b/src/tools/index.ts index cc5f42ee..d4284960 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -1,6 +1,7 @@ import { tool as base64FileConverter } from './base64-file-converter'; import { tool as base64StringConverter } from './base64-string-converter'; import { tool as basicAuthGenerator } from './basic-auth-generator'; +import { tool as macAddressGenerator } from './mac-address-generator'; import { tool as ulidGenerator } from './ulid-generator'; import { tool as ibanValidatorAndParser } from './iban-validator-and-parser'; import { tool as stringObfuscator } from './string-obfuscator'; @@ -138,7 +139,7 @@ export const toolsByCategory: ToolCategory[] = [ }, { name: 'Network', - components: [ipv4SubnetCalculator, ipv4AddressConverter, ipv4RangeExpander, macAddressLookup, ipv6UlaGenerator], + components: [ipv4SubnetCalculator, ipv4AddressConverter, ipv4RangeExpander, macAddressLookup, macAddressGenerator, ipv6UlaGenerator], }, { name: 'Math', diff --git a/src/tools/mac-address-generator/index.ts b/src/tools/mac-address-generator/index.ts new file mode 100644 index 00000000..fcf811a6 --- /dev/null +++ b/src/tools/mac-address-generator/index.ts @@ -0,0 +1,12 @@ +import { Atom2 } from '@vicons/tabler'; +import { defineTool } from '../tool'; + +export const tool = defineTool({ + name: 'MAC address generator', + path: '/mac-address-generator', + description: 'Enter the quantity and prefix. MAC addresses will be generated in your chosen case (uppercase or lowercase)', + keywords: ['mac', 'address', 'generator'], + component: () => import('./mac-address-generator.vue'), + icon: Atom2, + createdAt: new Date('2023-10-11'), +}); diff --git a/src/tools/mac-address-generator/mac-address-generator.e2e.spec.ts b/src/tools/mac-address-generator/mac-address-generator.e2e.spec.ts new file mode 100644 index 00000000..1d99ccd7 --- /dev/null +++ b/src/tools/mac-address-generator/mac-address-generator.e2e.spec.ts @@ -0,0 +1,11 @@ +import { expect, test } from '@playwright/test'; + +test.describe('Tool - MAC address generator', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/mac-address-generator'); + }); + + test('Has correct title', async ({ page }) => { + await expect(page).toHaveTitle('MAC address generator - IT Tools'); + }); +}); diff --git a/src/tools/mac-address-generator/mac-address-generator.vue b/src/tools/mac-address-generator/mac-address-generator.vue new file mode 100644 index 00000000..33875572 --- /dev/null +++ b/src/tools/mac-address-generator/mac-address-generator.vue @@ -0,0 +1,73 @@ + + + + + + Quantity: + + + + + + + Uppercase + + + + {{ macAddresses }} + + + + + Refresh + + + Copy + + + + diff --git a/src/utils/macAddress.ts b/src/utils/macAddress.ts index 4488b329..2d1011c4 100644 --- a/src/utils/macAddress.ts +++ b/src/utils/macAddress.ts @@ -15,4 +15,18 @@ function macAddressValidation(value: Ref) { }); } -export { macAddressValidation, macAddressValidationRules }; +const partialMacAddressValidationRules = [ + { + message: 'Invalid partial MAC address', + validator: (value: string) => value.trim().match(/^([0-9A-Fa-f]{2}[:-]){0,5}([0-9A-Fa-f]{0,2})$/), + }, +]; + +function partialMacAddressValidation(value: Ref) { + return useValidation({ + source: value, + rules: partialMacAddressValidationRules, + }); +} + +export { macAddressValidation, macAddressValidationRules, partialMacAddressValidation, partialMacAddressValidationRules };
{{ macAddresses }}