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
}
}