faj-cli
Version:
FAJ - A powerful CLI resume builder with AI enhancement and multi-format export
120 lines • 5.15 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConfigSchema = exports.AIConfigSchema = exports.JobRequirementSchema = exports.SkillSchema = exports.RecruiterProfileSchema = exports.DeveloperProfileSchema = exports.UserProfileSchema = exports.AIProviderSchema = exports.UserRoleSchema = void 0;
const zod_1 = require("zod");
// Base schemas
exports.UserRoleSchema = zod_1.z.enum(['developer', 'recruiter']);
exports.AIProviderSchema = zod_1.z.enum(['openai', 'gemini', 'anthropic', 'azure', 'custom']);
exports.UserProfileSchema = zod_1.z.object({
id: zod_1.z.string(),
role: exports.UserRoleSchema,
name: zod_1.z.string().min(1),
email: zod_1.z.string().email(),
createdAt: zod_1.z.date(),
updatedAt: zod_1.z.date(),
});
exports.DeveloperProfileSchema = exports.UserProfileSchema.extend({
role: zod_1.z.literal('developer'),
skills: zod_1.z.array(zod_1.z.string()),
experience: zod_1.z.number().min(0),
location: zod_1.z.string().optional(),
resumeHash: zod_1.z.string().optional(),
githubUsername: zod_1.z.string().optional(),
linkedinUrl: zod_1.z.string().url().optional().or(zod_1.z.string()),
portfolioUrl: zod_1.z.string().url().optional().or(zod_1.z.string()),
phone: zod_1.z.string().optional(),
birthDate: zod_1.z.string().optional(),
nationality: zod_1.z.string().optional(),
languages: zod_1.z.array(zod_1.z.string()).optional(),
education: zod_1.z.array(zod_1.z.object({
degree: zod_1.z.string(),
field: zod_1.z.string(),
institution: zod_1.z.string(),
location: zod_1.z.string().optional(),
startDate: zod_1.z.string(),
endDate: zod_1.z.string().optional(),
current: zod_1.z.boolean().default(false),
gpa: zod_1.z.number().optional(),
highlights: zod_1.z.array(zod_1.z.string()).optional(),
})).optional(),
careerObjective: zod_1.z.string().optional(),
personalSummary: zod_1.z.string().optional(),
});
exports.RecruiterProfileSchema = exports.UserProfileSchema.extend({
role: zod_1.z.literal('recruiter'),
company: zod_1.z.string().min(1),
position: zod_1.z.string().optional(),
companyUrl: zod_1.z.string().url().optional(),
});
// Skill schema
exports.SkillSchema = zod_1.z.object({
name: zod_1.z.string(),
level: zod_1.z.enum(['beginner', 'intermediate', 'advanced', 'expert']),
yearsOfExperience: zod_1.z.number().optional(),
category: zod_1.z.enum(['language', 'framework', 'tool', 'database', 'other']),
});
// Job requirement schema
exports.JobRequirementSchema = zod_1.z.object({
id: zod_1.z.string(),
recruiterId: zod_1.z.string(),
title: zod_1.z.string().min(1),
company: zod_1.z.string().min(1),
location: zod_1.z.string().optional(),
remote: zod_1.z.boolean(),
type: zod_1.z.enum(['full-time', 'part-time', 'contract', 'internship']),
description: zod_1.z.string().min(10),
requirements: zod_1.z.object({
skills: zod_1.z.array(zod_1.z.string()),
experience: zod_1.z.number().min(0),
education: zod_1.z.string().optional(),
certifications: zod_1.z.array(zod_1.z.string()).optional(),
}),
preferences: zod_1.z.object({
skills: zod_1.z.array(zod_1.z.string()).optional(),
experience: zod_1.z.number().optional(),
}).optional(),
salary: zod_1.z.object({
min: zod_1.z.number().optional(),
max: zod_1.z.number().optional(),
currency: zod_1.z.string().default('USD'),
period: zod_1.z.enum(['hourly', 'monthly', 'yearly']),
}).optional(),
benefits: zod_1.z.array(zod_1.z.string()).optional(),
postedAt: zod_1.z.date(),
expiresAt: zod_1.z.date().optional(),
status: zod_1.z.enum(['active', 'closed', 'draft']),
});
// AI configuration schema
exports.AIConfigSchema = zod_1.z.object({
provider: exports.AIProviderSchema,
apiKey: zod_1.z.string().optional(),
endpoint: zod_1.z.string().url().optional(),
model: zod_1.z.string().optional(),
maxTokens: zod_1.z.number().positive().optional(),
temperature: zod_1.z.number().min(0).max(2).optional(),
fallbacks: zod_1.z.array(exports.AIProviderSchema).optional(),
});
// Main configuration schema
exports.ConfigSchema = zod_1.z.object({
version: zod_1.z.string(),
profile: zod_1.z.union([exports.UserProfileSchema, exports.DeveloperProfileSchema, exports.RecruiterProfileSchema]).optional(),
ai: exports.AIConfigSchema.optional(),
storage: zod_1.z.object({
ipfs: zod_1.z.object({
gateway: zod_1.z.string().url(),
apiEndpoint: zod_1.z.string().optional(),
}).optional(),
local: zod_1.z.object({
path: zod_1.z.string(),
}).optional(),
}).optional(),
network: zod_1.z.object({
peers: zod_1.z.array(zod_1.z.string()).optional(),
bootstrap: zod_1.z.boolean().optional(),
}).optional(),
notifications: zod_1.z.object({
email: zod_1.z.boolean().optional(),
webhook: zod_1.z.string().url().optional(),
}).optional(),
});
//# sourceMappingURL=schemas.js.map