@intlayer/config
Version:
Retrieve Intlayer configurations and manage environment variables for both server-side and client-side environments.
212 lines (210 loc) • 7 kB
JavaScript
import { AiProviders } from "@intlayer/types/config";
import z from "zod";
//#region src/configFile/configurationSchema.ts
const internationalizationSchema = z.object({
locales: z.array(z.string()).min(1),
requiredLocales: z.array(z.string()).optional(),
strictMode: z.enum([
"strict",
"inclusive",
"loose"
]).optional(),
defaultLocale: z.string().optional()
});
/**
* Cross-realm-safe `Date` check.
*
* Configuration files are executed inside a `node:vm` sandbox, so a `Date`
* created there is an instance of the sandbox realm's `Date`, not the host
* realm's. `instanceof Date` (used by `z.date()`) therefore returns `false`
* for those values, which would reject a perfectly valid `Date`.
*/
const isDateLike = (value) => value instanceof Date || Object.prototype.toString.call(value) === "[object Date]";
/**
* Cookie expiry: a number of days, an absolute `Date`, or an ISO date string
* (the form a `Date` takes once the configuration is serialized).
*/
const cookieExpiresSchema = z.union([
z.custom(isDateLike, { message: "Expected a Date" }),
z.number(),
z.string().refine((value) => !Number.isNaN(Date.parse(value)), { message: "Expected a valid date string" })
]);
const cookiesAttributesSchema = z.object({
type: z.literal("cookie"),
name: z.string().optional(),
domain: z.string().optional(),
path: z.string().optional(),
secure: z.boolean().optional(),
httpOnly: z.boolean().optional(),
sameSite: z.enum([
"strict",
"lax",
"none"
]).optional(),
expires: cookieExpiresSchema.optional(),
maxAge: z.number().optional()
});
const storageAttributesSchema = z.object({
type: z.enum([
"localStorage",
"sessionStorage",
"header"
]),
name: z.string().optional()
});
const storageSchema = z.union([
z.literal(false),
z.enum([
"cookie",
"localStorage",
"sessionStorage",
"header"
]),
cookiesAttributesSchema,
storageAttributesSchema,
z.array(z.union([
z.enum([
"cookie",
"localStorage",
"sessionStorage",
"header"
]),
cookiesAttributesSchema,
storageAttributesSchema
]))
]);
const rewriteRuleSchema = z.object({
canonical: z.string(),
localized: z.record(z.string(), z.string())
});
const rewriteRulesSchema = z.object({ rules: z.array(rewriteRuleSchema) });
const rewriteObjectSchema = z.object({
url: rewriteRulesSchema,
nextjs: rewriteRulesSchema.optional(),
vite: rewriteRulesSchema.optional()
});
const routingSchema = z.object({
rewrite: z.union([z.record(z.string(), z.record(z.string(), z.string())), rewriteObjectSchema]).optional(),
mode: z.enum([
"prefix-no-default",
"prefix-all",
"no-prefix",
"search-params"
]).optional(),
storage: storageSchema.optional(),
basePath: z.string().optional(),
domains: z.record(z.string(), z.string()).optional()
});
const systemSchema = z.object({
baseDir: z.string().optional(),
moduleAugmentationDir: z.string().optional(),
unmergedDictionariesDir: z.string().optional(),
remoteDictionariesDir: z.string().optional(),
dictionariesDir: z.string().optional(),
dynamicDictionariesDir: z.string().optional(),
fetchDictionariesDir: z.string().optional(),
typesDir: z.string().optional(),
mainDir: z.string().optional(),
configDir: z.string().optional(),
cacheDir: z.string().optional(),
tempDir: z.string().optional()
});
const contentSchema = z.object({
fileExtensions: z.array(z.string()).optional(),
contentDir: z.array(z.string()).optional(),
codeDir: z.array(z.string()).optional(),
excludedPath: z.array(z.string()).optional(),
watch: z.boolean().optional(),
formatCommand: z.string().optional()
});
const editorSchema = z.object({
applicationURL: z.union([z.url(), z.literal("")]).optional(),
editorURL: z.union([z.url(), z.literal("")]).optional(),
cmsURL: z.union([z.url(), z.literal("")]).optional(),
backendURL: z.union([z.url(), z.literal("")]).optional(),
port: z.number().int().positive().max(65535).optional(),
enabled: z.boolean().optional(),
clientId: z.string().optional(),
clientSecret: z.string().optional(),
dictionaryPriorityStrategy: z.enum(["local_first", "distant_first"]).optional(),
liveSync: z.boolean().optional(),
liveSyncPort: z.number().int().positive().max(65535).optional(),
liveSyncURL: z.union([z.url(), z.literal("")]).optional()
});
const logSchema = z.object({
mode: z.enum([
"default",
"verbose",
"disabled"
]).optional(),
prefix: z.string().optional(),
error: z.function().optional(),
log: z.function().optional(),
info: z.function().optional(),
warn: z.function().optional()
});
const aiSchema = z.object({
provider: z.enum(AiProviders).optional(),
apiKey: z.string().optional(),
model: z.string().optional(),
temperature: z.number().min(0).max(2).optional(),
applicationContext: z.string().optional(),
baseURL: z.url().optional(),
dataSerialization: z.enum(["json", "toon"]).optional()
});
const buildSchema = z.object({
mode: z.enum(["auto", "manual"]).optional(),
optimize: z.boolean().optional(),
importMode: z.enum([
"static",
"dynamic",
"fetch"
]).optional(),
traversePattern: z.array(z.string()).optional(),
outputFormat: z.array(z.enum(["cjs", "esm"])).optional(),
cache: z.boolean().optional(),
require: z.unknown().optional(),
checkTypes: z.boolean().optional()
});
const compilerSchema = z.object({
enabled: z.union([z.boolean(), z.literal("build-only")]).optional(),
dictionaryKeyPrefix: z.string().optional(),
transformPattern: z.union([z.string(), z.array(z.string())]).optional(),
excludePattern: z.union([z.string(), z.array(z.string())]).optional(),
output: z.unknown().optional(),
noMetadata: z.boolean().optional(),
saveComponents: z.boolean().optional()
});
const dictionarySchema = z.object({
fill: z.unknown().optional(),
contentAutoTransformation: z.union([z.boolean(), z.object({
markdown: z.boolean().optional(),
html: z.boolean().optional(),
insertion: z.boolean().optional()
})]).optional(),
location: z.string().optional(),
locale: z.string().optional(),
title: z.string().optional()
});
const intlayerConfigSchema = z.object({
internationalization: internationalizationSchema.optional(),
routing: routingSchema.optional(),
content: contentSchema.optional(),
system: systemSchema.optional(),
editor: editorSchema.optional(),
log: logSchema.optional(),
ai: aiSchema.optional(),
build: buildSchema.optional(),
compiler: compilerSchema.optional(),
dictionary: dictionarySchema.optional(),
plugins: z.array(z.unknown()).optional(),
schemas: z.record(z.string(), z.unknown()).optional(),
metadata: z.object({
name: z.string().optional(),
version: z.string().optional(),
doc: z.string().optional()
}).optional()
});
//#endregion
export { aiSchema, buildSchema, compilerSchema, contentSchema, cookiesAttributesSchema, dictionarySchema, editorSchema, internationalizationSchema, intlayerConfigSchema, logSchema, rewriteObjectSchema, rewriteRuleSchema, rewriteRulesSchema, routingSchema, storageAttributesSchema, storageSchema, systemSchema };
//# sourceMappingURL=configurationSchema.mjs.map