name: core-type-mapping
description: Type mapping reference for OpenAPI formats to TypeScript core types
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
format field
- 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
}
}