Core Type Mapping Guide
Overview
This guide provides the mapping between OpenAPI string formats and their corresponding TypeScript type classes for use in Tasks 5, 7, 8, and 9.
🚨 Critical Usage Rules
- Task 5: Use these mappings when creating OpenAPI specifications - set the correct
formatfield - Task 7: Use these mappings in data transformation and validation
- Task 8 & 9: Use these mappings for type assertions in tests (e.g.,
instanceof Email,instanceof UUID) - String Conversion: All types support
.toString()method and template literal interpolation - Import Sources: Import types from the specified packages, not from Node.js built-ins
AWS Types (@zerobias-org/types-amazon-js)
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| arn | Arn | toEnum(Arn, value) or new Arn(value) |
| awsPartition | AwsPartition | toEnum(AwsPartition, value) |
| awsService | AwsService | toEnum(AwsService, value) |
| awsImageId | AwsImageId | toEnum(AwsImageId, value) |
| awsAccessPolicy | AwsAccessPolicy | new AwsAccessPolicy(value) |
| awsAccessPolicyStatement | AwsAccessPolicyStatement | new AwsAccessPolicyStatement(value) |
| awsAccessPolicyStatementCondition | AwsAccessPolicyStatementCondition | new AwsAccessPolicyStatementCondition(value) |
| awsAccessPolicyStatementEffect | AwsAccessPolicyStatementEffect | toEnum(AwsAccessPolicyStatementEffect, value) |
| awsAccessPolicyStatementOperator | AwsAccessPolicyStatementOperator | toEnum(AwsAccessPolicyStatementOperator, value) |
Microsoft Azure Types (@zerobias-org/types-microsoft-js)
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| azureVmSize | AzureVmSize | toEnum(AzureVmSize, value) |
| azureResourceProvider | AzureResourceProvider | toEnum(AzureResourceProvider, value) |
| azureResource | AzureResource | new AzureResource(value) |
| azureResourceInfo | AzureResourceInfo | new AzureResourceInfo(value) |
| azureResourceType | AzureResourceType | toEnum(AzureResourceType, value) |
| azureResourcePlan | AzureResourcePlan | new AzureResourcePlan(value) |
| azureResourceSku | AzureResourceSku | new AzureResourceSku(value) |
| azureResourceSkuTier | AzureResourceSkuTier | toEnum(AzureResourceSkuTier, value) |
| azureResourceIdentity | AzureResourceIdentity | new AzureResourceIdentity(value) |
| azureResourceIdentityType | AzureResourceIdentityType | toEnum(AzureResourceIdentityType, value) |
Google Cloud Types (@zerobias-org/types-google-js)
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| gcpAccessPolicy | GcpAccessPolicy | new GcpAccessPolicy(value) |
| gcpAccessPolicyAuditConfig | GcpAccessPolicyAuditConfig | new GcpAccessPolicyAuditConfig(value) |
| gcpAccessPolicyAuditLogConfig | GcpAccessPolicyAuditLogConfig | new GcpAccessPolicyAuditLogConfig(value) |
| gcpAccessPolicyAuditLogConfigType | GcpAccessPolicyAuditLogConfigType | toEnum(GcpAccessPolicyAuditLogConfigType, value) |
| gcpAccessPolicyBinding | GcpAccessPolicyBinding | new GcpAccessPolicyBinding(value) |
| gcpAccessPolicyBindingCondition | GcpAccessPolicyBindingCondition | new GcpAccessPolicyBindingCondition(value) |
| gcpAccessPolicyVersion | GcpAccessPolicyVersion | toEnum(GcpAccessPolicyVersion, value) |
Core Types (@zerobias-org/types-core-js)
Binary/Encoding
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| byte | Byte | new Byte(value) |
| b64 | Byte | new Byte(value) |
| base64 | Byte | new Byte(value) |
Networking
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| cidr | Cidr | new Cidr(value) |
| ipAddress | IpAddress | new IpAddress(value) |
| ip | IpAddress | new IpAddress(value) |
| ipv4 | IpAddress | new IpAddress(value) |
| ipv6 | IpAddress | new IpAddress(value) |
| mac | MacAddress | new MacAddress(value) |
| macaddr | MacAddress | new MacAddress(value) |
| macAddress | MacAddress | new MacAddress(value) |
| hostname | Hostname | new Hostname(value) |
Date/Time
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| date-time | Date | new Date(value) |
| time | Date | new Date(value) |
| timestamp | Date | new Date(value) |
| date | Date | new Date(value) |
| duration | Duration | new Duration(value) |
Numeric
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| double | number | Number(value) |
| float | number | Number(value) |
| int32 | number | Number(value) |
| int64 | number | Number(value) |
| integer | number | Number(value) |
Communication/Identity
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| email | Email | new Email(value) |
| phoneNumber | PhoneNumber | new PhoneNumber(value) |
| phone | PhoneNumber | new PhoneNumber(value) |
| url | URL | new URL(value) |
| uri | URL | new URL(value) |
Identifiers
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| uuid | UUID | new UUID(value) |
| guid | UUID | new UUID(value) |
| objectId | ObjectId | new ObjectId(value) |
Security
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| password | string | Direct string usage |
| secret | string | Direct string usage |
| token | string | Direct string usage |
| apiKey | string | Direct string usage |
Geographic
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| latitude | Latitude | new Latitude(value) |
| longitude | Longitude | new Longitude(value) |
| geoPoint | GeoPoint | new GeoPoint(lat, lon) |
| country | Country | toEnum(Country, value) |
| countryCode | Country | toEnum(Country, value) |
| language | Language | toEnum(Language, value) |
| languageCode | Language | toEnum(Language, value) |
| currency | Currency | toEnum(Currency, value) |
| currencyCode | Currency | toEnum(Currency, value) |
File/Media
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| mimeType | MimeType | toEnum(MimeType, value) |
| fileExtension | FileExtension | toEnum(FileExtension, value) |
| path | Path | new Path(value) |
| filePath | Path | new Path(value) |
Business/Domain
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| ssn | Ssn | new Ssn(value) |
| tin | Tin | new Tin(value) |
| iban | Iban | new Iban(value) |
| creditCard | CreditCard | new CreditCard(value) |
| postalCode | PostalCode | new PostalCode(value) |
| zipCode | PostalCode | new PostalCode(value) |
Complete Type Mapping Reference Table
Consolidated Quick Reference
| Format | Package | Type | Constructor Pattern |
|--------|---------|------|-------------------|
| uuid | @zerobias-org/types-core-js | UUID | map(UUID, value) |
| email | @zerobias-org/types-core-js | Email | map(Email, value) |
| url | @zerobias-org/types-core-js | URL | map(URL, value) |
| date-time | Native | Date | map(Date, value) |
| ipAddress | @zerobias-org/types-core-js | IpAddress | map(IpAddress, value) |
| phoneNumber | @zerobias-org/types-core-js | PhoneNumber | map(PhoneNumber, value) |
| arn | @zerobias-org/types-amazon-js | Arn | map(Arn, value) |
| cidr | @zerobias-org/types-core-js | Cidr | map(Cidr, value) |
| duration | @zerobias-org/types-core-js | Duration | map(Duration, value) |
| base64 | @zerobias-org/types-core-js | Byte | map(Byte, value) |
Usage Patterns by Task
Task 5: OpenAPI Specification
# Use format field to specify type
properties:
id:
type: string
format: uuid # → Will generate UUID type
email:
type: string
format: email # → Will generate Email type
createdAt:
type: string
format: date-time # → Will generate Date type
Task 7: Implementation (Mappers)
import { map, toEnum } from '@zerobias-org/util-hub-module-utils';
import { UUID, Email, URL } from '@zerobias-org/types-core-js'; // NEVER from Node.js!
export function toUserInfo(raw: any): UserInfo {
return {
id: map(UUID, raw.id),
email: map(Email, raw.email),
website: map(URL, raw.website_url),
createdAt: map(Date, raw.created_at),
status: toEnum(StatusEnum, raw.status)
};
}
Task 8 & 9: Testing
import { UUID, Email } from '@zerobias-org/types-core-js';
it('should return user with correct types', () => {
const user = await getUser('123');
expect(user.id).to.be.instanceof(UUID);
expect(user.email).to.be.instanceof(Email);
expect(user.createdAt).to.be.instanceof(Date);
});
String Conversion Support
All custom types support string conversion:
const email = new Email('user@example.com');
// Direct toString()
const emailString = email.toString(); // "user@example.com"
// Template literal (automatic conversion)
const message = `User email: ${email}`; // "User email: user@example.com"
// JSON serialization
JSON.stringify({ email }); // {"email":"user@example.com"}
Package Import Requirements
Required Dependencies
{
"dependencies": {
"@zerobias-org/types-core-js": "*",
"@zerobias-org/util-hub-module-utils": "*"
},
"devDependencies": {
"@zerobias-org/types-amazon-js": "*", // If using AWS
"@zerobias-org/types-microsoft-js": "*", // If using Azure
"@zerobias-org/types-google-js": "*" // If using GCP
}
}
Common Mistakes to Avoid
❌ WRONG - Using Node.js built-ins
import { URL } from 'url'; // WRONG!
import { URL } from 'node:url'; // WRONG!
✅ CORRECT - Using core types
import { URL } from '@zerobias-org/types-core-js'; // CORRECT!
❌ WRONG - Direct enum instantiation
const status = new StatusEnum('active'); // WRONG - constructor is private!
✅ CORRECT - Using toEnum
const status = toEnum(StatusEnum, 'active'); // CORRECT!
❌ WRONG - Manual type conversion
const uuid = raw.id as UUID; // WRONG - no validation!
✅ CORRECT - Using map function
const uuid = map(UUID, raw.id); // CORRECT - validates and converts!
Priority Rules
- Always use core types over native JavaScript types when available
- Import from correct package - never from Node.js built-ins
- Use map() for type conversion - provides validation
- Use toEnum() for enums - never instantiate directly
- All types support .toString() - use for string conversion
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| email | Email | new Email(value) |
| phoneNumber | PhoneNumber | new PhoneNumber(value) |
| phone | PhoneNumber | new PhoneNumber(value) |
Web/Protocol
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| url | URL | new URL(value) |
| uri | URL | new URL(value) |
| uuid | UUID | new UUID(value) |
| mimeType | MimeType | new MimeType(value) |
Versioning
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| semver | Semver | new Semver(value) |
| versionRange | VersionRange | new VersionRange(value) |
Misc
| String Format | TypeScript Type | Usage Example |
|---------------|------------------|---------------|
| nmtoken | Nmtoken | new Nmtoken(value) |
| password | string | String(value) |
Usage Patterns
Task 5: OpenAPI Specification
properties:
email_address:
type: string
format: email # Maps to Email type
website_url:
type: string
format: url # Maps to URL type
user_id:
type: string
format: uuid # Maps to UUID type
Task 7: Data Transformation
import { Email, URL, UUID } from '@zerobias-org/types-core-js';
import { map } from '@zerobias-org/util-hub-module-utils';
function mapUser(raw: any): User {
return {
id: map(UUID, raw.user_id),
email: map(Email, raw.email_address),
website: map(URL, raw.website_url)
};
}
Task 8 & 9: Test Assertions
import { Email, URL, UUID } from '@zerobias-org/types-core-js';
// Test assertions
expect(user.id).to.be.instanceof(UUID);
expect(user.email).to.be.instanceof(Email);
expect(user.website).to.be.instanceof(URL);
String Conversion Examples
// All types support toString() and template literals
const email = new Email('user@example.com');
const emailString = email.toString();
const message = `User email: ${email}`;
const uuid = new UUID('123e4567-e89b-12d3-a456-426614174000');
const uuidString = uuid.toString();
const log = `Processing user ${uuid}`;
Package Import Requirements
🚨 CRITICAL: Always import from the specified packages:
// Core types - ALWAYS import from @zerobias-org/types-core-js
import { URL, UUID, Email, IpAddress } from '@zerobias-org/types-core-js';
// AWS types
import { Arn, AwsService } from '@zerobias-org/types-amazon-js';
// Azure types
import { AzureVmSize, AzureResource } from '@zerobias-org/types-microsoft-js';
// Google Cloud types
import { GcpAccessPolicy } from '@zerobias-org/types-google-js';
// NEVER import URL from Node.js built-ins
// ❌ import { URL } from 'url'; // WRONG
// ✅ import { URL } from '@zerobias-org/types-core-js'; // CORRECT
Validation and Error Handling
All typed values can be validated and will throw appropriate errors for invalid formats:
try {
const email = new Email('invalid-email'); // Throws validation error
} catch (error) {
// Handle validation error
}
// Safe validation with try-catch in mappers
function safeMapEmail(raw: string): Email | null {
try {
return new Email(raw);
} catch {
return null; // Or handle as appropriate for your use case
}
}
Scan to join WeChat group