@smooai/config 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +430 -0
- package/dist/chunk-3SU3SMKN.mjs +73 -0
- package/dist/chunk-3SU3SMKN.mjs.map +1 -0
- package/dist/chunk-CASNDTCH.mjs +12 -0
- package/dist/chunk-CASNDTCH.mjs.map +1 -0
- package/dist/chunk-GLLYQ6FK.mjs +173 -0
- package/dist/chunk-GLLYQ6FK.mjs.map +1 -0
- package/dist/chunk-HPSOF46N.mjs +71 -0
- package/dist/chunk-HPSOF46N.mjs.map +1 -0
- package/dist/chunk-HPXCKD6M.mjs +118 -0
- package/dist/chunk-HPXCKD6M.mjs.map +1 -0
- package/dist/chunk-J5LGTIGS.mjs +10 -0
- package/dist/chunk-J5LGTIGS.mjs.map +1 -0
- package/dist/chunk-LKV73SD2.mjs +25 -0
- package/dist/chunk-LKV73SD2.mjs.map +1 -0
- package/dist/chunk-MJ52ZIWV.mjs +98 -0
- package/dist/chunk-MJ52ZIWV.mjs.map +1 -0
- package/dist/chunk-O7BSFCCY.mjs +89 -0
- package/dist/chunk-O7BSFCCY.mjs.map +1 -0
- package/dist/chunk-QBM74JB5.mjs +47 -0
- package/dist/chunk-QBM74JB5.mjs.map +1 -0
- package/dist/chunk-QGMLTMB5.mjs +37 -0
- package/dist/chunk-QGMLTMB5.mjs.map +1 -0
- package/dist/chunk-SKX7CPGS.mjs +73 -0
- package/dist/chunk-SKX7CPGS.mjs.map +1 -0
- package/dist/chunk-VPKO6D4W.mjs +33 -0
- package/dist/chunk-VPKO6D4W.mjs.map +1 -0
- package/dist/chunk-YQWYYS7P.mjs +12194 -0
- package/dist/chunk-YQWYYS7P.mjs.map +1 -0
- package/dist/chunk-Z3CZGNU5.mjs +99 -0
- package/dist/chunk-Z3CZGNU5.mjs.map +1 -0
- package/dist/chunk-ZOKHXR5I.mjs +33 -0
- package/dist/chunk-ZOKHXR5I.mjs.map +1 -0
- package/dist/cli.mjs +1562 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/config/FeatureFlagKey.d.mts +24 -0
- package/dist/config/FeatureFlagKey.d.ts +24 -0
- package/dist/config/FeatureFlagKey.js +31 -0
- package/dist/config/FeatureFlagKey.js.map +1 -0
- package/dist/config/FeatureFlagKey.mjs +8 -0
- package/dist/config/FeatureFlagKey.mjs.map +1 -0
- package/dist/config/PublicConfigKey.d.mts +22 -0
- package/dist/config/PublicConfigKey.d.ts +22 -0
- package/dist/config/PublicConfigKey.js +36 -0
- package/dist/config/PublicConfigKey.js.map +1 -0
- package/dist/config/PublicConfigKey.mjs +8 -0
- package/dist/config/PublicConfigKey.mjs.map +1 -0
- package/dist/config/SecretConfigKey.d.mts +22 -0
- package/dist/config/SecretConfigKey.d.ts +22 -0
- package/dist/config/SecretConfigKey.js +31 -0
- package/dist/config/SecretConfigKey.js.map +1 -0
- package/dist/config/SecretConfigKey.mjs +8 -0
- package/dist/config/SecretConfigKey.mjs.map +1 -0
- package/dist/config/config.d.mts +178 -0
- package/dist/config/config.d.ts +178 -0
- package/dist/config/config.js +12364 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/config.mjs +23 -0
- package/dist/config/config.mjs.map +1 -0
- package/dist/config/findAndProcessEnvConfig.d.mts +17 -0
- package/dist/config/findAndProcessEnvConfig.d.ts +17 -0
- package/dist/config/findAndProcessEnvConfig.js +12290 -0
- package/dist/config/findAndProcessEnvConfig.js.map +1 -0
- package/dist/config/findAndProcessEnvConfig.mjs +14 -0
- package/dist/config/findAndProcessEnvConfig.mjs.map +1 -0
- package/dist/config/findAndProcessFileConfig.d.mts +38 -0
- package/dist/config/findAndProcessFileConfig.d.ts +38 -0
- package/dist/config/findAndProcessFileConfig.js +12431 -0
- package/dist/config/findAndProcessFileConfig.js.map +1 -0
- package/dist/config/findAndProcessFileConfig.mjs +18 -0
- package/dist/config/findAndProcessFileConfig.mjs.map +1 -0
- package/dist/config/getCloudRegion.d.mts +8 -0
- package/dist/config/getCloudRegion.d.ts +8 -0
- package/dist/config/getCloudRegion.js +92 -0
- package/dist/config/getCloudRegion.js.map +1 -0
- package/dist/config/getCloudRegion.mjs +9 -0
- package/dist/config/getCloudRegion.mjs.map +1 -0
- package/dist/config/index.d.mts +5 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.js +12638 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/index.mjs +33 -0
- package/dist/config/index.mjs.map +1 -0
- package/dist/config/parseConfigSchema.d.mts +13 -0
- package/dist/config/parseConfigSchema.d.ts +13 -0
- package/dist/config/parseConfigSchema.js +12177 -0
- package/dist/config/parseConfigSchema.js.map +1 -0
- package/dist/config/parseConfigSchema.mjs +16 -0
- package/dist/config/parseConfigSchema.mjs.map +1 -0
- package/dist/config/standardSchemaToJson.d.mts +6 -0
- package/dist/config/standardSchemaToJson.d.ts +6 -0
- package/dist/config/standardSchemaToJson.js +138 -0
- package/dist/config/standardSchemaToJson.js.map +1 -0
- package/dist/config/standardSchemaToJson.mjs +9 -0
- package/dist/config/standardSchemaToJson.mjs.map +1 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -0
- package/dist/integration-tests/1/smooai-config/config.d.mts +4108 -0
- package/dist/integration-tests/1/smooai-config/config.d.ts +4108 -0
- package/dist/integration-tests/1/smooai-config/config.js +12353 -0
- package/dist/integration-tests/1/smooai-config/config.js.map +1 -0
- package/dist/integration-tests/1/smooai-config/config.mjs +12 -0
- package/dist/integration-tests/1/smooai-config/config.mjs.map +1 -0
- package/dist/integration-tests/1/smooai-config/default.d.mts +55 -0
- package/dist/integration-tests/1/smooai-config/default.d.ts +55 -0
- package/dist/integration-tests/1/smooai-config/default.js +12419 -0
- package/dist/integration-tests/1/smooai-config/default.js.map +1 -0
- package/dist/integration-tests/1/smooai-config/default.mjs +78 -0
- package/dist/integration-tests/1/smooai-config/default.mjs.map +1 -0
- package/dist/integration-tests/1/smooai-config/development.d.mts +41 -0
- package/dist/integration-tests/1/smooai-config/development.d.ts +41 -0
- package/dist/integration-tests/1/smooai-config/development.js +12403 -0
- package/dist/integration-tests/1/smooai-config/development.js.map +1 -0
- package/dist/integration-tests/1/smooai-config/development.mjs +62 -0
- package/dist/integration-tests/1/smooai-config/development.mjs.map +1 -0
- package/dist/integration-tests/1/smooai-config/production.aws.d.mts +128 -0
- package/dist/integration-tests/1/smooai-config/production.aws.d.ts +128 -0
- package/dist/integration-tests/1/smooai-config/production.aws.js +12371 -0
- package/dist/integration-tests/1/smooai-config/production.aws.js.map +1 -0
- package/dist/integration-tests/1/smooai-config/production.aws.mjs +30 -0
- package/dist/integration-tests/1/smooai-config/production.aws.mjs.map +1 -0
- package/dist/integration-tests/1/smooai-config/production.aws.us-east-1.d.mts +64 -0
- package/dist/integration-tests/1/smooai-config/production.aws.us-east-1.d.ts +64 -0
- package/dist/integration-tests/1/smooai-config/production.aws.us-east-1.js +12364 -0
- package/dist/integration-tests/1/smooai-config/production.aws.us-east-1.js.map +1 -0
- package/dist/integration-tests/1/smooai-config/production.aws.us-east-1.mjs +23 -0
- package/dist/integration-tests/1/smooai-config/production.aws.us-east-1.mjs.map +1 -0
- package/dist/integration-tests/1/smooai-config/production.aws.us-east-2.d.mts +64 -0
- package/dist/integration-tests/1/smooai-config/production.aws.us-east-2.d.ts +64 -0
- package/dist/integration-tests/1/smooai-config/production.aws.us-east-2.js +12364 -0
- package/dist/integration-tests/1/smooai-config/production.aws.us-east-2.js.map +1 -0
- package/dist/integration-tests/1/smooai-config/production.aws.us-east-2.mjs +23 -0
- package/dist/integration-tests/1/smooai-config/production.aws.us-east-2.mjs.map +1 -0
- package/dist/integration-tests/1/smooai-config/production.d.mts +42 -0
- package/dist/integration-tests/1/smooai-config/production.d.ts +42 -0
- package/dist/integration-tests/1/smooai-config/production.js +12399 -0
- package/dist/integration-tests/1/smooai-config/production.js.map +1 -0
- package/dist/integration-tests/1/smooai-config/production.mjs +58 -0
- package/dist/integration-tests/1/smooai-config/production.mjs.map +1 -0
- package/dist/integration-tests/1/smooai-config/staging.d.mts +129 -0
- package/dist/integration-tests/1/smooai-config/staging.d.ts +129 -0
- package/dist/integration-tests/1/smooai-config/staging.js +12377 -0
- package/dist/integration-tests/1/smooai-config/staging.js.map +1 -0
- package/dist/integration-tests/1/smooai-config/staging.mjs +36 -0
- package/dist/integration-tests/1/smooai-config/staging.mjs.map +1 -0
- package/dist/integration-tests/2/smooai-config/config.d.mts +1262 -0
- package/dist/integration-tests/2/smooai-config/config.d.ts +1262 -0
- package/dist/integration-tests/2/smooai-config/config.js +12301 -0
- package/dist/integration-tests/2/smooai-config/config.js.map +1 -0
- package/dist/integration-tests/2/smooai-config/config.mjs +12 -0
- package/dist/integration-tests/2/smooai-config/config.mjs.map +1 -0
- package/dist/integration-tests/2/smooai-config/default.d.mts +19 -0
- package/dist/integration-tests/2/smooai-config/default.d.ts +19 -0
- package/dist/integration-tests/2/smooai-config/default.js +12321 -0
- package/dist/integration-tests/2/smooai-config/default.js.map +1 -0
- package/dist/integration-tests/2/smooai-config/default.mjs +32 -0
- package/dist/integration-tests/2/smooai-config/default.mjs.map +1 -0
- package/dist/integration-tests/2/smooai-config/development.d.mts +9 -0
- package/dist/integration-tests/2/smooai-config/development.d.ts +9 -0
- package/dist/integration-tests/2/smooai-config/development.js +12311 -0
- package/dist/integration-tests/2/smooai-config/development.js.map +1 -0
- package/dist/integration-tests/2/smooai-config/development.mjs +22 -0
- package/dist/integration-tests/2/smooai-config/development.mjs.map +1 -0
- package/dist/integration-tests/2/smooai-config/production.aws.d.mts +26 -0
- package/dist/integration-tests/2/smooai-config/production.aws.d.ts +26 -0
- package/dist/integration-tests/2/smooai-config/production.aws.js +12311 -0
- package/dist/integration-tests/2/smooai-config/production.aws.js.map +1 -0
- package/dist/integration-tests/2/smooai-config/production.aws.mjs +22 -0
- package/dist/integration-tests/2/smooai-config/production.aws.mjs.map +1 -0
- package/dist/integration-tests/2/smooai-config/production.aws.us-east-1.d.mts +25 -0
- package/dist/integration-tests/2/smooai-config/production.aws.us-east-1.d.ts +25 -0
- package/dist/integration-tests/2/smooai-config/production.aws.us-east-1.js +12310 -0
- package/dist/integration-tests/2/smooai-config/production.aws.us-east-1.js.map +1 -0
- package/dist/integration-tests/2/smooai-config/production.aws.us-east-1.mjs +21 -0
- package/dist/integration-tests/2/smooai-config/production.aws.us-east-1.mjs.map +1 -0
- package/dist/integration-tests/2/smooai-config/production.d.mts +19 -0
- package/dist/integration-tests/2/smooai-config/production.d.ts +19 -0
- package/dist/integration-tests/2/smooai-config/production.js +12321 -0
- package/dist/integration-tests/2/smooai-config/production.js.map +1 -0
- package/dist/integration-tests/2/smooai-config/production.mjs +32 -0
- package/dist/integration-tests/2/smooai-config/production.mjs.map +1 -0
- package/dist/platform/client.d.mts +49 -0
- package/dist/platform/client.d.ts +49 -0
- package/dist/platform/client.js +123 -0
- package/dist/platform/client.js.map +1 -0
- package/dist/platform/client.mjs +8 -0
- package/dist/platform/client.mjs.map +1 -0
- package/dist/platform/server/server.async.d.mts +12 -0
- package/dist/platform/server/server.async.d.ts +12 -0
- package/dist/platform/server/server.async.js +12586 -0
- package/dist/platform/server/server.async.js.map +1 -0
- package/dist/platform/server/server.async.mjs +18 -0
- package/dist/platform/server/server.async.mjs.map +1 -0
- package/dist/platform/server/server.featureFlag.sync.d.mts +2 -0
- package/dist/platform/server/server.featureFlag.sync.d.ts +2 -0
- package/dist/platform/server/server.featureFlag.sync.js +12589 -0
- package/dist/platform/server/server.featureFlag.sync.js.map +1 -0
- package/dist/platform/server/server.featureFlag.sync.mjs +24 -0
- package/dist/platform/server/server.featureFlag.sync.mjs.map +1 -0
- package/dist/platform/server/server.publicConfig.sync.d.mts +2 -0
- package/dist/platform/server/server.publicConfig.sync.d.ts +2 -0
- package/dist/platform/server/server.publicConfig.sync.js +12589 -0
- package/dist/platform/server/server.publicConfig.sync.js.map +1 -0
- package/dist/platform/server/server.publicConfig.sync.mjs +24 -0
- package/dist/platform/server/server.publicConfig.sync.mjs.map +1 -0
- package/dist/platform/server/server.secretConfig.sync.d.mts +2 -0
- package/dist/platform/server/server.secretConfig.sync.d.ts +2 -0
- package/dist/platform/server/server.secretConfig.sync.js +12589 -0
- package/dist/platform/server/server.secretConfig.sync.js.map +1 -0
- package/dist/platform/server/server.secretConfig.sync.mjs +24 -0
- package/dist/platform/server/server.secretConfig.sync.mjs.map +1 -0
- package/dist/platform/server.d.mts +21 -0
- package/dist/platform/server.d.ts +21 -0
- package/dist/platform/server.js +12626 -0
- package/dist/platform/server.js.map +1 -0
- package/dist/platform/server.mjs +58 -0
- package/dist/platform/server.mjs.map +1 -0
- package/dist/react/hooks.d.mts +36 -0
- package/dist/react/hooks.d.ts +36 -0
- package/dist/react/hooks.js +90 -0
- package/dist/react/hooks.js.map +1 -0
- package/dist/react/hooks.mjs +14 -0
- package/dist/react/hooks.mjs.map +1 -0
- package/dist/react/index.d.mts +28 -0
- package/dist/react/index.d.ts +28 -0
- package/dist/react/index.js +194 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/index.mjs +17 -0
- package/dist/react/index.mjs.map +1 -0
- package/dist/schema-spec/smooai-config-schema-spec.d.mts +25 -0
- package/dist/schema-spec/smooai-config-schema-spec.d.ts +25 -0
- package/dist/schema-spec/smooai-config-schema-spec.js +177 -0
- package/dist/schema-spec/smooai-config-schema-spec.js.map +1 -0
- package/dist/schema-spec/smooai-config-schema-spec.mjs +154 -0
- package/dist/schema-spec/smooai-config-schema-spec.mjs.map +1 -0
- package/dist/utils/fs.d.mts +10 -0
- package/dist/utils/fs.d.ts +10 -0
- package/dist/utils/fs.js +74 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/fs.mjs +11 -0
- package/dist/utils/fs.mjs.map +1 -0
- package/dist/utils/index.d.mts +29 -0
- package/dist/utils/index.d.ts +29 -0
- package/dist/utils/index.js +113 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +18 -0
- package/dist/utils/index.mjs.map +1 -0
- package/dist/utils/mergeReplaceArrays.d.mts +9 -0
- package/dist/utils/mergeReplaceArrays.d.ts +9 -0
- package/dist/utils/mergeReplaceArrays.js +63 -0
- package/dist/utils/mergeReplaceArrays.js.map +1 -0
- package/dist/utils/mergeReplaceArrays.mjs +9 -0
- package/dist/utils/mergeReplaceArrays.mjs.map +1 -0
- package/package.json +133 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import {
|
|
2
|
+
directoryExists,
|
|
3
|
+
importFile
|
|
4
|
+
} from "./chunk-ZOKHXR5I.mjs";
|
|
5
|
+
import {
|
|
6
|
+
mergeReplaceArrays
|
|
7
|
+
} from "./chunk-LKV73SD2.mjs";
|
|
8
|
+
import {
|
|
9
|
+
generateZodSchemas,
|
|
10
|
+
parseConfig,
|
|
11
|
+
parseConfigKey
|
|
12
|
+
} from "./chunk-VPKO6D4W.mjs";
|
|
13
|
+
import {
|
|
14
|
+
PublicConfigKey
|
|
15
|
+
} from "./chunk-CASNDTCH.mjs";
|
|
16
|
+
import {
|
|
17
|
+
getCloudRegion
|
|
18
|
+
} from "./chunk-QBM74JB5.mjs";
|
|
19
|
+
import {
|
|
20
|
+
SmooaiConfigError,
|
|
21
|
+
envToUse,
|
|
22
|
+
initEsmUtils
|
|
23
|
+
} from "./chunk-3SU3SMKN.mjs";
|
|
24
|
+
|
|
25
|
+
// src/config/findAndProcessFileConfig.ts
|
|
26
|
+
import { join } from "path";
|
|
27
|
+
import TTLCache from "@isaacs/ttlcache";
|
|
28
|
+
import { any as findAny } from "empathic/find";
|
|
29
|
+
import { glob } from "tinyglobby";
|
|
30
|
+
import Logger from "@smooai/logger/Logger";
|
|
31
|
+
initEsmUtils();
|
|
32
|
+
var logger = new Logger({
|
|
33
|
+
name: global.__filename
|
|
34
|
+
});
|
|
35
|
+
var ENV_CONFIG_DIR_CACHE = new TTLCache({ max: 1, ttl: 1e3 * 60 * 60 });
|
|
36
|
+
async function findConfigDirectory({
|
|
37
|
+
ignoreCache
|
|
38
|
+
} = {
|
|
39
|
+
ignoreCache: false
|
|
40
|
+
}) {
|
|
41
|
+
ignoreCache = ignoreCache ?? false;
|
|
42
|
+
const configDir = envToUse().SMOOAI_ENV_CONFIG_DIR;
|
|
43
|
+
if (configDir) {
|
|
44
|
+
if (await directoryExists(configDir)) {
|
|
45
|
+
return configDir;
|
|
46
|
+
} else {
|
|
47
|
+
throw new SmooaiConfigError(`The directory specified in the "SMOOAI_ENV_CONFIG_DIR" environment variable does not exist: ${configDir}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (!ignoreCache) {
|
|
51
|
+
const cachedConfigDir = ENV_CONFIG_DIR_CACHE.get("smooai-config");
|
|
52
|
+
if (cachedConfigDir) {
|
|
53
|
+
if (await directoryExists(cachedConfigDir)) {
|
|
54
|
+
return cachedConfigDir;
|
|
55
|
+
} else {
|
|
56
|
+
ENV_CONFIG_DIR_CACHE.delete("smooai-config");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const configDirCandidates = [".smooai-config", "smooai-config"];
|
|
61
|
+
const cwd = process.cwd();
|
|
62
|
+
const configDirCandidatePaths = configDirCandidates.map((dir) => join(cwd, dir));
|
|
63
|
+
const candidateResults = await Promise.allSettled(
|
|
64
|
+
configDirCandidatePaths.map(async (dirPath) => [await directoryExists(dirPath), dirPath])
|
|
65
|
+
);
|
|
66
|
+
for (const candidate of candidateResults) {
|
|
67
|
+
if (candidate.status === "fulfilled" && candidate.value[0]) {
|
|
68
|
+
ENV_CONFIG_DIR_CACHE.set("smooai-config", candidate.value[1]);
|
|
69
|
+
return candidate.value[1];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const levelsUpLimit = parseInt(envToUse().SMOOAI_CONFIG_LEVELS_UP_LIMIT ?? "5", 10) || 5;
|
|
73
|
+
const upDirFound = await findAny(configDirCandidates, {
|
|
74
|
+
cwd,
|
|
75
|
+
stop: join(cwd, ...Array(levelsUpLimit).fill(".."))
|
|
76
|
+
});
|
|
77
|
+
if (upDirFound) {
|
|
78
|
+
if (!await directoryExists(upDirFound)) {
|
|
79
|
+
throw new SmooaiConfigError(`The directory specified in the "SMOOAI_ENV_CONFIG_DIR" environment variable is not a directory: ${configDir}`);
|
|
80
|
+
}
|
|
81
|
+
ENV_CONFIG_DIR_CACHE.set("smooai-config", upDirFound);
|
|
82
|
+
return upDirFound;
|
|
83
|
+
}
|
|
84
|
+
throw new SmooaiConfigError(`Could not find the directory where the config files are located. Tried ${levelsUpLimit} levels up from ${cwd}.`);
|
|
85
|
+
}
|
|
86
|
+
async function processConfigFileFeatures(zodSchema, currentConfig, config) {
|
|
87
|
+
const finalConfig = {};
|
|
88
|
+
for (const key in config) {
|
|
89
|
+
const value = config[key];
|
|
90
|
+
if (typeof value === "function") {
|
|
91
|
+
config[key] = parseConfigKey(zodSchema, key, value(currentConfig));
|
|
92
|
+
finalConfig[key] = config[key];
|
|
93
|
+
} else {
|
|
94
|
+
config[key] = value;
|
|
95
|
+
finalConfig[key] = value;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return finalConfig;
|
|
99
|
+
}
|
|
100
|
+
function setBuiltInConfig(config, {
|
|
101
|
+
env,
|
|
102
|
+
region,
|
|
103
|
+
provider,
|
|
104
|
+
isLocal
|
|
105
|
+
}) {
|
|
106
|
+
config[PublicConfigKey.ENV] = env;
|
|
107
|
+
config[PublicConfigKey.REGION] = region;
|
|
108
|
+
config[PublicConfigKey.CLOUD_PROVIDER] = provider;
|
|
109
|
+
config[PublicConfigKey.IS_LOCAL] = isLocal;
|
|
110
|
+
return config;
|
|
111
|
+
}
|
|
112
|
+
async function findAndProcessFileConfig(configSchema) {
|
|
113
|
+
let finalConfig = {};
|
|
114
|
+
try {
|
|
115
|
+
const configDir = await findConfigDirectory();
|
|
116
|
+
const isLocal = Boolean(envToUse().IS_LOCAL);
|
|
117
|
+
const env = envToUse().SMOOAI_CONFIG_ENV ?? "development";
|
|
118
|
+
const { provider, region } = getCloudRegion();
|
|
119
|
+
const configFiles = ["default.ts"];
|
|
120
|
+
if (isLocal) {
|
|
121
|
+
configFiles.push("local.ts");
|
|
122
|
+
}
|
|
123
|
+
if (env) {
|
|
124
|
+
configFiles.push(`${env}.ts`);
|
|
125
|
+
if (provider) {
|
|
126
|
+
configFiles.push(`${env}.${provider}.ts`);
|
|
127
|
+
if (region) {
|
|
128
|
+
configFiles.push(`${env}.${provider}.${region}.ts`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const { allConfigZodSchemaWithDeferFunctions, allConfigZodSchema } = generateZodSchemas(configSchema);
|
|
133
|
+
for (const fileName of configFiles) {
|
|
134
|
+
const matchedPaths = await glob(fileName, {
|
|
135
|
+
cwd: configDir,
|
|
136
|
+
absolute: true
|
|
137
|
+
});
|
|
138
|
+
if (fileName === "default.ts" && matchedPaths.length === 0) {
|
|
139
|
+
const error = new Error(`Could not find required default config file in ${configDir}: "${fileName}"`);
|
|
140
|
+
logger.error(error, `Could not find required default config file in ${configDir}: "${fileName}"`);
|
|
141
|
+
throw error;
|
|
142
|
+
}
|
|
143
|
+
for (const filePath of matchedPaths) {
|
|
144
|
+
try {
|
|
145
|
+
const configModule = parseConfig(allConfigZodSchemaWithDeferFunctions, await importFile(filePath));
|
|
146
|
+
const processedConfig = await processConfigFileFeatures(allConfigZodSchema, finalConfig, configModule);
|
|
147
|
+
finalConfig = mergeReplaceArrays(finalConfig, processedConfig);
|
|
148
|
+
} catch (err) {
|
|
149
|
+
logger.error(`Error importing config file "${filePath}":`, err);
|
|
150
|
+
throw err;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
finalConfig = setBuiltInConfig(finalConfig, {
|
|
155
|
+
env,
|
|
156
|
+
region,
|
|
157
|
+
provider,
|
|
158
|
+
isLocal
|
|
159
|
+
});
|
|
160
|
+
} catch (err) {
|
|
161
|
+
logger.error("Error finding and processing config:", err);
|
|
162
|
+
throw err;
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
config: finalConfig
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export {
|
|
170
|
+
findConfigDirectory,
|
|
171
|
+
findAndProcessFileConfig
|
|
172
|
+
};
|
|
173
|
+
//# sourceMappingURL=chunk-GLLYQ6FK.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/findAndProcessFileConfig.ts"],"sourcesContent":["import { join } from 'path';\nimport { PublicConfigKey } from '@/config/PublicConfigKey';\nimport { initEsmUtils, SmooaiConfigError, envToUse } from '@/utils';\nimport { directoryExists, importFile } from '@/utils/fs';\nimport { mergeReplaceArrays } from '@/utils/mergeReplaceArrays';\nimport TTLCache from '@isaacs/ttlcache';\n/* eslint-disable @typescript-eslint/no-explicit-any -- ok */\nimport { any as findAny } from 'empathic/find';\nimport { glob } from 'tinyglobby';\nimport Logger from '@smooai/logger/Logger';\nimport { defineConfig, ParsedConfigGeneric, InferConfigTypes } from './config';\nimport { getCloudRegion } from './getCloudRegion';\nimport { parseConfig, parseConfigKey, generateZodSchemas } from './parseConfigSchema';\ninitEsmUtils();\n\nconst logger = new Logger({\n name: global.__filename,\n});\n\nconst ENV_CONFIG_DIR_CACHE = new TTLCache<string, string>({ max: 1, ttl: 1000 * 60 * 60 });\n\n/**\n * Find the directory where the config files are located.\n *\n * Config files are located depending on the following logic:\n * 1. If the \"SMOOAI_ENV_CONFIG_DIR\" environment variable is set, the directory is the value of the variable.\n * 2. If the \"SMOOAI_ENV_CONFIG_DIR\" environment variable is not set, the directory is the first directory in the following list that exists <CWD> = Current Working Directory:\n * a. <CWD>/.smooai-config\n * b. <CWD>/smooai-config\n * 3. If these directories are not found, search up directory tree a maximum of 5 levels for the directories in step 2.\n *\n * @returns The directory where the config files are located.\n */\nexport async function findConfigDirectory(\n {\n ignoreCache,\n }: {\n ignoreCache?: boolean;\n } = {\n ignoreCache: false,\n },\n): Promise<string> {\n ignoreCache = ignoreCache ?? false;\n\n const configDir = envToUse().SMOOAI_ENV_CONFIG_DIR;\n if (configDir) {\n if (await directoryExists(configDir)) {\n return configDir;\n } else {\n throw new SmooaiConfigError(`The directory specified in the \"SMOOAI_ENV_CONFIG_DIR\" environment variable does not exist: ${configDir}`);\n }\n }\n\n if (!ignoreCache) {\n const cachedConfigDir = ENV_CONFIG_DIR_CACHE.get('smooai-config');\n if (cachedConfigDir) {\n if (await directoryExists(cachedConfigDir)) {\n return cachedConfigDir;\n } else {\n ENV_CONFIG_DIR_CACHE.delete('smooai-config');\n }\n }\n }\n\n const configDirCandidates = ['.smooai-config', 'smooai-config'];\n\n const cwd = process.cwd();\n const configDirCandidatePaths = configDirCandidates.map((dir) => join(cwd, dir));\n\n const candidateResults = await Promise.allSettled(\n configDirCandidatePaths.map(async (dirPath) => [await directoryExists(dirPath), dirPath] as [boolean, string]),\n );\n\n for (const candidate of candidateResults) {\n if (candidate.status === 'fulfilled' && candidate.value[0]) {\n ENV_CONFIG_DIR_CACHE.set('smooai-config', candidate.value[1]);\n return candidate.value[1];\n }\n }\n\n const levelsUpLimit = parseInt(envToUse().SMOOAI_CONFIG_LEVELS_UP_LIMIT ?? '5', 10) || 5;\n\n const upDirFound = await findAny(configDirCandidates, {\n cwd,\n stop: join(cwd, ...Array(levelsUpLimit).fill('..')),\n });\n\n if (upDirFound) {\n if (!(await directoryExists(upDirFound))) {\n throw new SmooaiConfigError(`The directory specified in the \"SMOOAI_ENV_CONFIG_DIR\" environment variable is not a directory: ${configDir}`);\n }\n ENV_CONFIG_DIR_CACHE.set('smooai-config', upDirFound);\n return upDirFound;\n }\n\n throw new SmooaiConfigError(`Could not find the directory where the config files are located. Tried ${levelsUpLimit} levels up from ${cwd}.`);\n}\n\nasync function processConfigFileFeatures(\n zodSchema: InferConfigTypes<ReturnType<typeof defineConfig>>['ZodOutputType'],\n currentConfig: any,\n config: ParsedConfigGeneric,\n) {\n const finalConfig: Record<string, any> = {};\n\n for (const key in config) {\n const value = config[key];\n if (typeof value === 'function') {\n // We need to parse the value because it might be a function that returns a value that is not valid.\n config[key] = parseConfigKey(zodSchema, key, value(currentConfig));\n finalConfig[key] = config[key];\n } else {\n config[key] = value;\n finalConfig[key] = value;\n }\n }\n\n return finalConfig;\n}\nfunction setBuiltInConfig(\n config: Record<string, any>,\n {\n env,\n region,\n provider,\n isLocal,\n }: {\n env: string;\n region: string;\n provider: string;\n isLocal: boolean;\n },\n) {\n config[PublicConfigKey.ENV] = env;\n config[PublicConfigKey.REGION] = region;\n config[PublicConfigKey.CLOUD_PROVIDER] = provider;\n config[PublicConfigKey.IS_LOCAL] = isLocal;\n\n return config;\n}\n\n/**\n * Find and process the config files in the found directory.\n *\n * Order of merges:\n * 1. Load `default.ts` (required).\n * 2. Load `local.ts` if `IS_LOCAL === \"true\"`.\n * 3. If `SMOOAI_CONFIG_ENV` is set to e.g. \"development\":\n * a) `development.ts`\n * b) `development.{provider}.ts`\n * c) `development.{provider}.{region}.ts`\n *\n * Returns the merged config object.\n */\nexport async function findAndProcessFileConfig<Schema extends ReturnType<typeof defineConfig>>(\n configSchema: Schema,\n): Promise<{\n config: InferConfigTypes<Schema>['ConfigType'];\n}> {\n let finalConfig: Record<string, any> = {};\n try {\n const configDir = await findConfigDirectory();\n\n const isLocal = Boolean(envToUse().IS_LOCAL);\n const env = envToUse().SMOOAI_CONFIG_ENV ?? 'development';\n const { provider, region } = getCloudRegion();\n\n // We define the possible config files in the order to load them.\n const configFiles: string[] = ['default.ts']; // required\n if (isLocal) {\n configFiles.push('local.ts');\n }\n if (env) {\n configFiles.push(`${env}.ts`);\n if (provider) {\n configFiles.push(`${env}.${provider}.ts`);\n if (region) {\n configFiles.push(`${env}.${provider}.${region}.ts`);\n }\n }\n }\n\n const { allConfigZodSchemaWithDeferFunctions, allConfigZodSchema } = generateZodSchemas(configSchema);\n\n // The final merged config\n\n // Go through each possible file in order, see if it exists, merge\n for (const fileName of configFiles) {\n const matchedPaths = await glob(fileName, {\n cwd: configDir,\n absolute: true,\n });\n\n // If default.ts not found, throw an error\n if (fileName === 'default.ts' && matchedPaths.length === 0) {\n const error = new Error(`Could not find required default config file in ${configDir}: \"${fileName}\"`);\n logger.error(error, `Could not find required default config file in ${configDir}: \"${fileName}\"`);\n throw error;\n }\n\n for (const filePath of matchedPaths) {\n try {\n // Attempt to import. If `export default` is used, use that, else use entire import.\n const configModule = parseConfig(allConfigZodSchemaWithDeferFunctions, await importFile(filePath));\n const processedConfig = await processConfigFileFeatures(allConfigZodSchema, finalConfig, configModule);\n finalConfig = mergeReplaceArrays(finalConfig, processedConfig);\n } catch (err) {\n logger.error(`Error importing config file \"${filePath}\":`, err);\n throw err;\n }\n }\n }\n\n finalConfig = setBuiltInConfig(finalConfig, {\n env,\n region,\n provider,\n isLocal,\n });\n } catch (err) {\n logger.error('Error finding and processing config:', err);\n throw err;\n }\n\n return {\n config: finalConfig,\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import {
|
|
2
|
+
generateZodSchemas,
|
|
3
|
+
parseConfigKey
|
|
4
|
+
} from "./chunk-VPKO6D4W.mjs";
|
|
5
|
+
import {
|
|
6
|
+
PublicConfigKey
|
|
7
|
+
} from "./chunk-CASNDTCH.mjs";
|
|
8
|
+
import {
|
|
9
|
+
getCloudRegion
|
|
10
|
+
} from "./chunk-QBM74JB5.mjs";
|
|
11
|
+
import {
|
|
12
|
+
envToUse,
|
|
13
|
+
initEsmUtils
|
|
14
|
+
} from "./chunk-3SU3SMKN.mjs";
|
|
15
|
+
|
|
16
|
+
// src/config/findAndProcessEnvConfig.ts
|
|
17
|
+
import Logger from "@smooai/logger/Logger";
|
|
18
|
+
initEsmUtils();
|
|
19
|
+
var logger = new Logger({
|
|
20
|
+
name: global.__filename
|
|
21
|
+
});
|
|
22
|
+
function findAndProcessEnvConfig(configSchema, prefix = "") {
|
|
23
|
+
let finalConfig = {};
|
|
24
|
+
try {
|
|
25
|
+
const env = envToUse();
|
|
26
|
+
const isLocal = Boolean(env.IS_LOCAL);
|
|
27
|
+
const { provider, region } = getCloudRegion();
|
|
28
|
+
const allConfigKeysValuesSet = new Set(Object.values(configSchema.AllConfigKeys));
|
|
29
|
+
const { allConfigZodSchema } = generateZodSchemas(configSchema);
|
|
30
|
+
for (const [key, value] of Object.entries(env)) {
|
|
31
|
+
const keyToUse = prefix && key.startsWith(prefix) ? key.slice(prefix.length) : key;
|
|
32
|
+
if (!allConfigKeysValuesSet.has(keyToUse)) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
finalConfig[keyToUse] = parseConfigKey(allConfigZodSchema, keyToUse, value);
|
|
37
|
+
} catch (err) {
|
|
38
|
+
logger.warn(`Failed to parse environment variable ${key}:`, err);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
finalConfig = setBuiltInConfig(finalConfig, {
|
|
42
|
+
env: env.SMOOAI_CONFIG_ENV ?? "development",
|
|
43
|
+
region,
|
|
44
|
+
provider,
|
|
45
|
+
isLocal
|
|
46
|
+
});
|
|
47
|
+
} catch (err) {
|
|
48
|
+
logger.error("Error processing environment variables:", err);
|
|
49
|
+
throw err;
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
config: finalConfig
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function setBuiltInConfig(config, {
|
|
56
|
+
env,
|
|
57
|
+
region,
|
|
58
|
+
provider,
|
|
59
|
+
isLocal
|
|
60
|
+
}) {
|
|
61
|
+
config[PublicConfigKey.ENV] = env;
|
|
62
|
+
config[PublicConfigKey.REGION] = region;
|
|
63
|
+
config[PublicConfigKey.CLOUD_PROVIDER] = provider;
|
|
64
|
+
config[PublicConfigKey.IS_LOCAL] = isLocal;
|
|
65
|
+
return config;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export {
|
|
69
|
+
findAndProcessEnvConfig
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=chunk-HPSOF46N.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/findAndProcessEnvConfig.ts"],"sourcesContent":["import { PublicConfigKey } from '@/config/PublicConfigKey';\n/* eslint-disable @typescript-eslint/no-explicit-any -- ok */\nimport { initEsmUtils } from '@/utils';\nimport { envToUse } from '@/utils';\nimport Logger from '@smooai/logger/Logger';\nimport { defineConfig, InferConfigTypes } from './config';\nimport { getCloudRegion } from './getCloudRegion';\nimport { parseConfigKey, generateZodSchemas } from './parseConfigSchema';\ninitEsmUtils();\n\nconst logger = new Logger({\n name: global.__filename,\n});\n\n/**\n * Process environment variables into a configuration object.\n *\n * @param configSchema - The configuration schema to validate against\n * @param prefix - Optional prefix for public config keys (e.g. 'NEXT_PUBLIC_' or 'VITE_')\n * @returns The processed configuration object\n */\nexport function findAndProcessEnvConfig<Schema extends ReturnType<typeof defineConfig>>(\n configSchema: Schema,\n prefix: string = '',\n): {\n config: InferConfigTypes<Schema>['ConfigType'];\n} {\n let finalConfig: Record<string, any> = {};\n try {\n const env = envToUse();\n const isLocal = Boolean(env.IS_LOCAL);\n const { provider, region } = getCloudRegion();\n\n const allConfigKeysValuesSet = new Set(Object.values(configSchema.AllConfigKeys));\n\n const { allConfigZodSchema } = generateZodSchemas(configSchema);\n\n // Process all environment variables\n for (const [key, value] of Object.entries(env)) {\n const keyToUse = prefix && key.startsWith(prefix) ? key.slice(prefix.length) : key;\n\n if (!allConfigKeysValuesSet.has(keyToUse)) {\n continue;\n }\n\n try {\n // Try to parse the value according to the schema\n finalConfig[keyToUse] = parseConfigKey(allConfigZodSchema, keyToUse, value);\n } catch (err) {\n logger.warn(`Failed to parse environment variable ${key}:`, err);\n }\n }\n\n // Set built-in configuration values\n finalConfig = setBuiltInConfig(finalConfig, {\n env: env.SMOOAI_CONFIG_ENV ?? 'development',\n region,\n provider,\n isLocal,\n });\n } catch (err) {\n logger.error('Error processing environment variables:', err);\n throw err;\n }\n\n return {\n config: finalConfig,\n };\n}\n\nfunction setBuiltInConfig(\n config: Record<string, any>,\n {\n env,\n region,\n provider,\n isLocal,\n }: {\n env: string;\n region: string;\n provider: string;\n isLocal: boolean;\n },\n) {\n config[PublicConfigKey.ENV] = env;\n config[PublicConfigKey.REGION] = region;\n config[PublicConfigKey.CLOUD_PROVIDER] = provider;\n config[PublicConfigKey.IS_LOCAL] = isLocal;\n\n return config;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAIA,OAAO,YAAY;AAInB,aAAa;AAEb,IAAM,SAAS,IAAI,OAAO;AAAA,EACtB,MAAM,OAAO;AACjB,CAAC;AASM,SAAS,wBACZ,cACA,SAAiB,IAGnB;AACE,MAAI,cAAmC,CAAC;AACxC,MAAI;AACA,UAAM,MAAM,SAAS;AACrB,UAAM,UAAU,QAAQ,IAAI,QAAQ;AACpC,UAAM,EAAE,UAAU,OAAO,IAAI,eAAe;AAE5C,UAAM,yBAAyB,IAAI,IAAI,OAAO,OAAO,aAAa,aAAa,CAAC;AAEhF,UAAM,EAAE,mBAAmB,IAAI,mBAAmB,YAAY;AAG9D,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC5C,YAAM,WAAW,UAAU,IAAI,WAAW,MAAM,IAAI,IAAI,MAAM,OAAO,MAAM,IAAI;AAE/E,UAAI,CAAC,uBAAuB,IAAI,QAAQ,GAAG;AACvC;AAAA,MACJ;AAEA,UAAI;AAEA,oBAAY,QAAQ,IAAI,eAAe,oBAAoB,UAAU,KAAK;AAAA,MAC9E,SAAS,KAAK;AACV,eAAO,KAAK,wCAAwC,GAAG,KAAK,GAAG;AAAA,MACnE;AAAA,IACJ;AAGA,kBAAc,iBAAiB,aAAa;AAAA,MACxC,KAAK,IAAI,qBAAqB;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL,SAAS,KAAK;AACV,WAAO,MAAM,2CAA2C,GAAG;AAC3D,UAAM;AAAA,EACV;AAEA,SAAO;AAAA,IACH,QAAQ;AAAA,EACZ;AACJ;AAEA,SAAS,iBACL,QACA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAMF;AACE,SAAO,gBAAgB,GAAG,IAAI;AAC9B,SAAO,gBAAgB,MAAM,IAAI;AACjC,SAAO,gBAAgB,cAAc,IAAI;AACzC,SAAO,gBAAgB,QAAQ,IAAI;AAEnC,SAAO;AACX;","names":[]}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import {
|
|
2
|
+
findAndProcessEnvConfig
|
|
3
|
+
} from "./chunk-HPSOF46N.mjs";
|
|
4
|
+
import {
|
|
5
|
+
findAndProcessFileConfig
|
|
6
|
+
} from "./chunk-GLLYQ6FK.mjs";
|
|
7
|
+
|
|
8
|
+
// src/platform/server/server.async.ts
|
|
9
|
+
import TTLCache from "@isaacs/ttlcache";
|
|
10
|
+
import { LRUCache } from "lru-cache";
|
|
11
|
+
var FILE_CONFIG_CACHE = new LRUCache({
|
|
12
|
+
max: 1
|
|
13
|
+
});
|
|
14
|
+
var FILE_CONFIG_CACHE_KEY = "fileConfig";
|
|
15
|
+
var ENV_CONFIG_CACHE = new LRUCache({
|
|
16
|
+
max: 1
|
|
17
|
+
});
|
|
18
|
+
var ENV_CONFIG_CACHE_KEY = "envConfig";
|
|
19
|
+
var IS_INITIALIZED_CACHE = new LRUCache({
|
|
20
|
+
max: 1
|
|
21
|
+
});
|
|
22
|
+
var IS_INITIALIZED_CACHE_KEY = "isInitialized";
|
|
23
|
+
var PUBLIC_CONFIG_CACHE = new TTLCache({
|
|
24
|
+
ttl: 1e3 * 60 * 60 * 24
|
|
25
|
+
});
|
|
26
|
+
var SECRET_CONFIG_CACHE = new TTLCache({
|
|
27
|
+
ttl: 1e3 * 60 * 60 * 24
|
|
28
|
+
});
|
|
29
|
+
var FEATURE_FLAG_CACHE = new TTLCache({
|
|
30
|
+
ttl: 1e3 * 60 * 60 * 24
|
|
31
|
+
});
|
|
32
|
+
async function loadFileConfig(configSchema) {
|
|
33
|
+
let fileConfig = FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY);
|
|
34
|
+
if (fileConfig) {
|
|
35
|
+
return fileConfig;
|
|
36
|
+
}
|
|
37
|
+
fileConfig = await findAndProcessFileConfig(configSchema);
|
|
38
|
+
FILE_CONFIG_CACHE.set(FILE_CONFIG_CACHE_KEY, fileConfig.config);
|
|
39
|
+
return fileConfig.config;
|
|
40
|
+
}
|
|
41
|
+
function loadEnvConfig(configSchema) {
|
|
42
|
+
let envConfig = ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY);
|
|
43
|
+
if (envConfig) {
|
|
44
|
+
return envConfig;
|
|
45
|
+
}
|
|
46
|
+
envConfig = findAndProcessEnvConfig(configSchema);
|
|
47
|
+
ENV_CONFIG_CACHE.set(ENV_CONFIG_CACHE_KEY, envConfig.config);
|
|
48
|
+
return envConfig.config;
|
|
49
|
+
}
|
|
50
|
+
async function initialize(configSchema) {
|
|
51
|
+
const isInitialized = IS_INITIALIZED_CACHE.get(IS_INITIALIZED_CACHE_KEY);
|
|
52
|
+
if (isInitialized) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
await loadFileConfig(configSchema);
|
|
56
|
+
await loadEnvConfig(configSchema);
|
|
57
|
+
}
|
|
58
|
+
function buildConfigObject(configSchema) {
|
|
59
|
+
const PublicConfigKeys = configSchema.PublicConfigKeys;
|
|
60
|
+
async function getPublicConfig(key) {
|
|
61
|
+
const cachedValue = PUBLIC_CONFIG_CACHE.get(key);
|
|
62
|
+
if (cachedValue) {
|
|
63
|
+
return cachedValue;
|
|
64
|
+
}
|
|
65
|
+
await initialize(configSchema);
|
|
66
|
+
if (FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key] !== void 0) {
|
|
67
|
+
PUBLIC_CONFIG_CACHE.set(key, FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key]);
|
|
68
|
+
return FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key];
|
|
69
|
+
}
|
|
70
|
+
if (ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key] !== void 0) {
|
|
71
|
+
PUBLIC_CONFIG_CACHE.set(key, ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key]);
|
|
72
|
+
return ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key];
|
|
73
|
+
}
|
|
74
|
+
return void 0;
|
|
75
|
+
}
|
|
76
|
+
async function getSecretConfig(key) {
|
|
77
|
+
const cachedValue = SECRET_CONFIG_CACHE.get(key);
|
|
78
|
+
if (cachedValue) {
|
|
79
|
+
return cachedValue;
|
|
80
|
+
}
|
|
81
|
+
await initialize(configSchema);
|
|
82
|
+
if (FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key] !== void 0) {
|
|
83
|
+
SECRET_CONFIG_CACHE.set(key, FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key]);
|
|
84
|
+
return FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key];
|
|
85
|
+
}
|
|
86
|
+
if (ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key] !== void 0) {
|
|
87
|
+
SECRET_CONFIG_CACHE.set(key, ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key]);
|
|
88
|
+
return ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key];
|
|
89
|
+
}
|
|
90
|
+
return void 0;
|
|
91
|
+
}
|
|
92
|
+
async function getFeatureFlag(key) {
|
|
93
|
+
const cachedValue = FEATURE_FLAG_CACHE.get(key);
|
|
94
|
+
if (cachedValue) {
|
|
95
|
+
return cachedValue;
|
|
96
|
+
}
|
|
97
|
+
await initialize(configSchema);
|
|
98
|
+
if (FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key] !== void 0) {
|
|
99
|
+
FEATURE_FLAG_CACHE.set(key, FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key]);
|
|
100
|
+
return FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key];
|
|
101
|
+
}
|
|
102
|
+
if (ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key] !== void 0) {
|
|
103
|
+
FEATURE_FLAG_CACHE.set(key, ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key]);
|
|
104
|
+
return ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key];
|
|
105
|
+
}
|
|
106
|
+
return void 0;
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
getPublicConfig,
|
|
110
|
+
getSecretConfig,
|
|
111
|
+
getFeatureFlag
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export {
|
|
116
|
+
buildConfigObject
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=chunk-HPXCKD6M.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/platform/server/server.async.ts"],"sourcesContent":["import { InferConfigTypes, defineConfig } from '@/config/config';\nimport { findAndProcessEnvConfig } from '@/config/findAndProcessEnvConfig';\n/* eslint-disable @typescript-eslint/no-explicit-any -- ok */\nimport { findAndProcessFileConfig } from '@/config/findAndProcessFileConfig';\nimport TTLCache from '@isaacs/ttlcache';\nimport { LRUCache } from 'lru-cache';\n\nconst FILE_CONFIG_CACHE = new LRUCache<string, Awaited<ReturnType<typeof findAndProcessFileConfig>>>({\n max: 1,\n});\nconst FILE_CONFIG_CACHE_KEY = 'fileConfig';\n\nconst ENV_CONFIG_CACHE = new LRUCache<string, Awaited<ReturnType<typeof findAndProcessEnvConfig>>>({\n max: 1,\n});\nconst ENV_CONFIG_CACHE_KEY = 'envConfig';\n\nconst IS_INITIALIZED_CACHE = new LRUCache<string, boolean>({\n max: 1,\n});\nconst IS_INITIALIZED_CACHE_KEY = 'isInitialized';\n\nconst PUBLIC_CONFIG_CACHE = new TTLCache<string, any>({\n ttl: 1000 * 60 * 60 * 24,\n});\n\nconst SECRET_CONFIG_CACHE = new TTLCache<string, any>({\n ttl: 1000 * 60 * 60 * 24,\n});\n\nconst FEATURE_FLAG_CACHE = new TTLCache<string, any>({\n ttl: 1000 * 60 * 60 * 24,\n});\n\nasync function loadFileConfig<Schema extends ReturnType<typeof defineConfig>>(configSchema: Schema) {\n let fileConfig = FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY);\n if (fileConfig) {\n return fileConfig;\n }\n fileConfig = await findAndProcessFileConfig(configSchema);\n FILE_CONFIG_CACHE.set(FILE_CONFIG_CACHE_KEY, fileConfig.config);\n return fileConfig.config;\n}\n\nfunction loadEnvConfig<Schema extends ReturnType<typeof defineConfig>>(configSchema: Schema) {\n let envConfig = ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY);\n if (envConfig) {\n return envConfig;\n }\n envConfig = findAndProcessEnvConfig(configSchema);\n ENV_CONFIG_CACHE.set(ENV_CONFIG_CACHE_KEY, envConfig.config);\n return envConfig.config;\n}\n\nasync function initialize<Schema extends ReturnType<typeof defineConfig>>(configSchema: Schema) {\n const isInitialized = IS_INITIALIZED_CACHE.get(IS_INITIALIZED_CACHE_KEY);\n if (isInitialized) {\n return;\n }\n await loadFileConfig(configSchema);\n await loadEnvConfig(configSchema);\n}\n\nexport default function buildConfigObject<Schema extends ReturnType<typeof defineConfig>>(configSchema: Schema) {\n type ConfigType = InferConfigTypes<Schema>['ConfigType'];\n const PublicConfigKeys = configSchema.PublicConfigKeys;\n type PublicConfigKeys = InferConfigTypes<Schema>['PublicConfigKeys'];\n type SecretConfigKeys = InferConfigTypes<Schema>['SecretConfigKeys'];\n type FeatureFlagKeys = InferConfigTypes<Schema>['FeatureFlagKeys'];\n\n type PublicConfigKey = Extract<PublicConfigKeys[keyof PublicConfigKeys], keyof ConfigType>;\n type SecretConfigKey = Extract<SecretConfigKeys[keyof SecretConfigKeys], keyof ConfigType>;\n type FeatureFlagKey = Extract<FeatureFlagKeys[keyof FeatureFlagKeys], keyof ConfigType>;\n\n async function getPublicConfig<K extends PublicConfigKey>(key: K): Promise<ConfigType[K] | undefined> {\n const cachedValue = PUBLIC_CONFIG_CACHE.get(key as string);\n if (cachedValue) {\n return cachedValue;\n }\n\n await initialize(configSchema);\n\n if (FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key] !== undefined) {\n PUBLIC_CONFIG_CACHE.set(key as string, FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key]);\n return FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key];\n }\n if (ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key] !== undefined) {\n PUBLIC_CONFIG_CACHE.set(key as string, ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key]);\n return ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key];\n }\n return undefined;\n }\n\n async function getSecretConfig<K extends SecretConfigKey>(key: K): Promise<ConfigType[K] | undefined> {\n const cachedValue = SECRET_CONFIG_CACHE.get(key as string);\n if (cachedValue) {\n return cachedValue;\n }\n\n await initialize(configSchema);\n\n if (FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key] !== undefined) {\n SECRET_CONFIG_CACHE.set(key as string, FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key]);\n return FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key];\n }\n if (ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key] !== undefined) {\n SECRET_CONFIG_CACHE.set(key as string, ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key]);\n return ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key];\n }\n return undefined;\n }\n\n async function getFeatureFlag<K extends FeatureFlagKey>(key: K): Promise<ConfigType[K] | undefined> {\n const cachedValue = FEATURE_FLAG_CACHE.get(key as string);\n if (cachedValue) {\n return cachedValue;\n }\n\n await initialize(configSchema);\n\n if (FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key] !== undefined) {\n FEATURE_FLAG_CACHE.set(key as string, FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key]);\n return FILE_CONFIG_CACHE.get(FILE_CONFIG_CACHE_KEY)?.[key];\n }\n if (ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key] !== undefined) {\n FEATURE_FLAG_CACHE.set(key as string, ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key]);\n return ENV_CONFIG_CACHE.get(ENV_CONFIG_CACHE_KEY)?.[key];\n }\n return undefined;\n }\n\n return {\n getPublicConfig,\n getSecretConfig,\n getFeatureFlag,\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isPlainObject
|
|
3
|
+
} from "./chunk-3SU3SMKN.mjs";
|
|
4
|
+
|
|
5
|
+
// src/utils/mergeReplaceArrays.ts
|
|
6
|
+
function mergeReplaceArrays(target, source) {
|
|
7
|
+
if (Array.isArray(source)) {
|
|
8
|
+
return source.slice();
|
|
9
|
+
}
|
|
10
|
+
if (isPlainObject(source)) {
|
|
11
|
+
if (!isPlainObject(target)) {
|
|
12
|
+
target = {};
|
|
13
|
+
}
|
|
14
|
+
for (const key of Object.keys(source)) {
|
|
15
|
+
target[key] = mergeReplaceArrays(target[key], source[key]);
|
|
16
|
+
}
|
|
17
|
+
return target;
|
|
18
|
+
}
|
|
19
|
+
return source;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export {
|
|
23
|
+
mergeReplaceArrays
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=chunk-LKV73SD2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/mergeReplaceArrays.ts"],"sourcesContent":["import { isPlainObject } from './index';\n\n/**\n * A custom merge that:\n * - Recursively merges child objects.\n * - **Replaces** arrays instead of concatenating.\n * - Overwrites scalars directly.\n */\nexport function mergeReplaceArrays(target: any, source: any): any {\n // If source is an array, replace entirely.\n if (Array.isArray(source)) {\n return source.slice(); // new copy\n }\n\n // If source is an object, merge deeply.\n if (isPlainObject(source)) {\n // If target isn't an object, overwrite with a new object.\n if (!isPlainObject(target)) {\n target = {};\n }\n for (const key of Object.keys(source)) {\n target[key] = mergeReplaceArrays(target[key], source[key]);\n }\n return target;\n }\n\n // For primitives (string, number, etc.) or other data, overwrite.\n return source;\n}\n"],"mappings":";;;;;AAQO,SAAS,mBAAmB,QAAa,QAAkB;AAE9D,MAAI,MAAM,QAAQ,MAAM,GAAG;AACvB,WAAO,OAAO,MAAM;AAAA,EACxB;AAGA,MAAI,cAAc,MAAM,GAAG;AAEvB,QAAI,CAAC,cAAc,MAAM,GAAG;AACxB,eAAS,CAAC;AAAA,IACd;AACA,eAAW,OAAO,OAAO,KAAK,MAAM,GAAG;AACnC,aAAO,GAAG,IAAI,mBAAmB,OAAO,GAAG,GAAG,OAAO,GAAG,CAAC;AAAA,IAC7D;AACA,WAAO;AAAA,EACX;AAGA,SAAO;AACX;","names":[]}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SmooaiConfigError
|
|
3
|
+
} from "./chunk-3SU3SMKN.mjs";
|
|
4
|
+
|
|
5
|
+
// src/config/standardSchemaToJson.ts
|
|
6
|
+
import { toJsonSchema as valibotToJsonSchema } from "@valibot/to-json-schema";
|
|
7
|
+
import { Schema as EffectSchema } from "effect";
|
|
8
|
+
import * as EffectJSONSchema from "effect/JSONSchema";
|
|
9
|
+
import zodToJsonSchema from "zod-to-json-schema";
|
|
10
|
+
var UNSUPPORTED_ZOD_TYPES = {
|
|
11
|
+
ZodFunction: "z.function() cannot be serialized to JSON Schema for config. Use a plain value type instead.",
|
|
12
|
+
ZodPromise: "z.promise() cannot be serialized to JSON Schema for config. Use a plain value type instead.",
|
|
13
|
+
ZodVoid: "z.void() cannot be serialized to JSON Schema for config. Use a plain value type instead.",
|
|
14
|
+
ZodNever: "z.never() cannot be serialized to JSON Schema for config. Use a plain value type instead.",
|
|
15
|
+
ZodSymbol: "z.symbol() cannot be serialized to JSON Schema for config. Use a plain value type instead.",
|
|
16
|
+
ZodUndefined: "z.undefined() cannot be serialized to JSON Schema for config. Use a plain value type instead.",
|
|
17
|
+
ZodLazy: "Recursive schemas (z.lazy()) are not supported in config. Flatten your schema structure.",
|
|
18
|
+
ZodMap: "z.map() is not representable in JSON Schema across all SDK languages. Use a Record or object type instead.",
|
|
19
|
+
ZodSet: "z.set() is not representable in JSON Schema across all SDK languages. Use an array type instead.",
|
|
20
|
+
ZodBigInt: "z.bigint() is not representable in JSON Schema across all SDK languages. Use a number or string type instead.",
|
|
21
|
+
ZodDate: 'z.date() is not representable in JSON Schema across all SDK languages. Use a string with format "date-time" instead.'
|
|
22
|
+
};
|
|
23
|
+
var UNSUPPORTED_ZOD_TRANSFORMS = {
|
|
24
|
+
ZodEffects: "z.transform()/z.refine()/z.preprocess() performs runtime transformations lost in JSON Schema. Define config as plain types.",
|
|
25
|
+
ZodPipeline: "z.pipe() performs runtime transformations lost in JSON Schema. Define config as plain types."
|
|
26
|
+
};
|
|
27
|
+
function checkZodSchema(schema, path = "") {
|
|
28
|
+
const def = schema?._def;
|
|
29
|
+
if (!def) return;
|
|
30
|
+
const typeName = def.typeName;
|
|
31
|
+
if (typeName) {
|
|
32
|
+
if (typeName in UNSUPPORTED_ZOD_TYPES) {
|
|
33
|
+
throw new SmooaiConfigError(`${path ? `At ${path}: ` : ""}${UNSUPPORTED_ZOD_TYPES[typeName]}`);
|
|
34
|
+
}
|
|
35
|
+
if (typeName in UNSUPPORTED_ZOD_TRANSFORMS) {
|
|
36
|
+
throw new SmooaiConfigError(`${path ? `At ${path}: ` : ""}${UNSUPPORTED_ZOD_TRANSFORMS[typeName]}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (def.innerType) checkZodSchema(def.innerType, path);
|
|
40
|
+
if (def.schema) checkZodSchema(def.schema, path);
|
|
41
|
+
if (def.left) checkZodSchema(def.left, path);
|
|
42
|
+
if (def.right) checkZodSchema(def.right, path);
|
|
43
|
+
if (def.options) {
|
|
44
|
+
for (const opt of def.options) {
|
|
45
|
+
if (opt && typeof opt === "object" && "_def" in opt) {
|
|
46
|
+
checkZodSchema(opt, path);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (def.items) {
|
|
51
|
+
for (const item of def.items) {
|
|
52
|
+
if (item && typeof item === "object" && "_def" in item) {
|
|
53
|
+
checkZodSchema(item, path);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (def.type) {
|
|
58
|
+
if (typeof def.type === "object" && "_def" in def.type) {
|
|
59
|
+
checkZodSchema(def.type, path);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (def.shape) {
|
|
63
|
+
const shape = typeof def.shape === "function" ? def.shape() : def.shape;
|
|
64
|
+
if (shape && typeof shape === "object") {
|
|
65
|
+
for (const [key, value] of Object.entries(shape)) {
|
|
66
|
+
if (value && typeof value === "object" && "_def" in value) {
|
|
67
|
+
checkZodSchema(value, `${path ? path + "." : ""}${key}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function standardSchemaToJson(schema) {
|
|
74
|
+
if ("~standard" in schema) {
|
|
75
|
+
const { vendor } = schema["~standard"];
|
|
76
|
+
switch (vendor) {
|
|
77
|
+
case "zod":
|
|
78
|
+
checkZodSchema(schema);
|
|
79
|
+
return zodToJsonSchema(schema);
|
|
80
|
+
case "valibot":
|
|
81
|
+
return valibotToJsonSchema(schema);
|
|
82
|
+
case "arktype":
|
|
83
|
+
return schema.toJsonSchema();
|
|
84
|
+
default:
|
|
85
|
+
throw new SmooaiConfigError(`Cannot serialize validation schema for vendor: ${vendor}`);
|
|
86
|
+
}
|
|
87
|
+
} else {
|
|
88
|
+
if (EffectSchema.isSchema(schema)) {
|
|
89
|
+
return EffectJSONSchema.make(schema);
|
|
90
|
+
}
|
|
91
|
+
throw new SmooaiConfigError(`Cannot serialize validation schema of unknown type: ${schema}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export {
|
|
96
|
+
standardSchemaToJson
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=chunk-MJ52ZIWV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/standardSchemaToJson.ts"],"sourcesContent":["import { SmooaiConfigError } from '@/utils';\nimport { StandardSchemaV1 } from '@standard-schema/spec';\nimport { toJsonSchema as valibotToJsonSchema } from '@valibot/to-json-schema';\nimport type { Type as ArkType } from 'arktype';\nimport { Schema as EffectSchema } from 'effect';\nimport * as EffectJSONSchema from 'effect/JSONSchema';\nimport type { BaseIssue, BaseSchema } from 'valibot';\nimport type { ZodType } from 'zod';\nimport zodToJsonSchema from 'zod-to-json-schema';\n\n/**\n * Zod type names that cannot be serialized to JSON Schema for config.\n * Maps typeName to an actionable error message.\n */\nconst UNSUPPORTED_ZOD_TYPES: Record<string, string> = {\n ZodFunction: 'z.function() cannot be serialized to JSON Schema for config. Use a plain value type instead.',\n ZodPromise: 'z.promise() cannot be serialized to JSON Schema for config. Use a plain value type instead.',\n ZodVoid: 'z.void() cannot be serialized to JSON Schema for config. Use a plain value type instead.',\n ZodNever: 'z.never() cannot be serialized to JSON Schema for config. Use a plain value type instead.',\n ZodSymbol: 'z.symbol() cannot be serialized to JSON Schema for config. Use a plain value type instead.',\n ZodUndefined: 'z.undefined() cannot be serialized to JSON Schema for config. Use a plain value type instead.',\n ZodLazy: 'Recursive schemas (z.lazy()) are not supported in config. Flatten your schema structure.',\n ZodMap: 'z.map() is not representable in JSON Schema across all SDK languages. Use a Record or object type instead.',\n ZodSet: 'z.set() is not representable in JSON Schema across all SDK languages. Use an array type instead.',\n ZodBigInt: 'z.bigint() is not representable in JSON Schema across all SDK languages. Use a number or string type instead.',\n ZodDate: 'z.date() is not representable in JSON Schema across all SDK languages. Use a string with format \"date-time\" instead.',\n};\n\nconst UNSUPPORTED_ZOD_TRANSFORMS: Record<string, string> = {\n ZodEffects: 'z.transform()/z.refine()/z.preprocess() performs runtime transformations lost in JSON Schema. Define config as plain types.',\n ZodPipeline: 'z.pipe() performs runtime transformations lost in JSON Schema. Define config as plain types.',\n};\n\n/**\n * Check a Zod schema for unsupported type names before conversion.\n * Recursively walks the schema tree to catch issues in nested schemas.\n */\nfunction checkZodSchema(schema: ZodType, path: string = ''): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- accessing internal Zod structure\n const def = (schema as any)?._def;\n if (!def) return;\n\n const typeName = def.typeName as string | undefined;\n if (typeName) {\n if (typeName in UNSUPPORTED_ZOD_TYPES) {\n throw new SmooaiConfigError(`${path ? `At ${path}: ` : ''}${UNSUPPORTED_ZOD_TYPES[typeName]}`);\n }\n if (typeName in UNSUPPORTED_ZOD_TRANSFORMS) {\n throw new SmooaiConfigError(`${path ? `At ${path}: ` : ''}${UNSUPPORTED_ZOD_TRANSFORMS[typeName]}`);\n }\n }\n\n // Recurse into common Zod internal structures\n if (def.innerType) checkZodSchema(def.innerType, path);\n if (def.schema) checkZodSchema(def.schema, path);\n if (def.left) checkZodSchema(def.left, path);\n if (def.right) checkZodSchema(def.right, path);\n if (def.options) {\n for (const opt of def.options) {\n if (opt && typeof opt === 'object' && '_def' in opt) {\n checkZodSchema(opt, path);\n }\n }\n }\n if (def.items) {\n for (const item of def.items) {\n if (item && typeof item === 'object' && '_def' in item) {\n checkZodSchema(item, path);\n }\n }\n }\n if (def.type) {\n if (typeof def.type === 'object' && '_def' in def.type) {\n checkZodSchema(def.type, path);\n }\n }\n // ZodObject shape\n if (def.shape) {\n const shape = typeof def.shape === 'function' ? def.shape() : def.shape;\n if (shape && typeof shape === 'object') {\n for (const [key, value] of Object.entries(shape)) {\n if (value && typeof value === 'object' && '_def' in (value as object)) {\n checkZodSchema(value as ZodType, `${path ? path + '.' : ''}${key}`);\n }\n }\n }\n }\n}\n\nexport function standardSchemaToJson<I, O>(schema: StandardSchemaV1<I, O> | EffectSchema.Schema<O, I>) {\n if ('~standard' in schema) {\n const { vendor } = schema['~standard'];\n switch (vendor) {\n case 'zod':\n checkZodSchema(schema as ZodType);\n return zodToJsonSchema(schema as ZodType);\n case 'valibot':\n return valibotToJsonSchema(schema as BaseSchema<unknown, unknown, BaseIssue<unknown>>);\n case 'arktype':\n return (schema as ArkType).toJsonSchema();\n default:\n throw new SmooaiConfigError(`Cannot serialize validation schema for vendor: ${vendor}`);\n }\n } else {\n if (EffectSchema.isSchema(schema)) {\n return EffectJSONSchema.make(schema);\n }\n throw new SmooaiConfigError(`Cannot serialize validation schema of unknown type: ${schema}`);\n }\n}\n"],"mappings":";;;;;AAEA,SAAS,gBAAgB,2BAA2B;AAEpD,SAAS,UAAU,oBAAoB;AACvC,YAAY,sBAAsB;AAGlC,OAAO,qBAAqB;AAM5B,IAAM,wBAAgD;AAAA,EAClD,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,UAAU;AAAA,EACV,WAAW;AAAA,EACX,cAAc;AAAA,EACd,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,SAAS;AACb;AAEA,IAAM,6BAAqD;AAAA,EACvD,YAAY;AAAA,EACZ,aAAa;AACjB;AAMA,SAAS,eAAe,QAAiB,OAAe,IAAU;AAE9D,QAAM,MAAO,QAAgB;AAC7B,MAAI,CAAC,IAAK;AAEV,QAAM,WAAW,IAAI;AACrB,MAAI,UAAU;AACV,QAAI,YAAY,uBAAuB;AACnC,YAAM,IAAI,kBAAkB,GAAG,OAAO,MAAM,IAAI,OAAO,EAAE,GAAG,sBAAsB,QAAQ,CAAC,EAAE;AAAA,IACjG;AACA,QAAI,YAAY,4BAA4B;AACxC,YAAM,IAAI,kBAAkB,GAAG,OAAO,MAAM,IAAI,OAAO,EAAE,GAAG,2BAA2B,QAAQ,CAAC,EAAE;AAAA,IACtG;AAAA,EACJ;AAGA,MAAI,IAAI,UAAW,gBAAe,IAAI,WAAW,IAAI;AACrD,MAAI,IAAI,OAAQ,gBAAe,IAAI,QAAQ,IAAI;AAC/C,MAAI,IAAI,KAAM,gBAAe,IAAI,MAAM,IAAI;AAC3C,MAAI,IAAI,MAAO,gBAAe,IAAI,OAAO,IAAI;AAC7C,MAAI,IAAI,SAAS;AACb,eAAW,OAAO,IAAI,SAAS;AAC3B,UAAI,OAAO,OAAO,QAAQ,YAAY,UAAU,KAAK;AACjD,uBAAe,KAAK,IAAI;AAAA,MAC5B;AAAA,IACJ;AAAA,EACJ;AACA,MAAI,IAAI,OAAO;AACX,eAAW,QAAQ,IAAI,OAAO;AAC1B,UAAI,QAAQ,OAAO,SAAS,YAAY,UAAU,MAAM;AACpD,uBAAe,MAAM,IAAI;AAAA,MAC7B;AAAA,IACJ;AAAA,EACJ;AACA,MAAI,IAAI,MAAM;AACV,QAAI,OAAO,IAAI,SAAS,YAAY,UAAU,IAAI,MAAM;AACpD,qBAAe,IAAI,MAAM,IAAI;AAAA,IACjC;AAAA,EACJ;AAEA,MAAI,IAAI,OAAO;AACX,UAAM,QAAQ,OAAO,IAAI,UAAU,aAAa,IAAI,MAAM,IAAI,IAAI;AAClE,QAAI,SAAS,OAAO,UAAU,UAAU;AACpC,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC9C,YAAI,SAAS,OAAO,UAAU,YAAY,UAAW,OAAkB;AACnE,yBAAe,OAAkB,GAAG,OAAO,OAAO,MAAM,EAAE,GAAG,GAAG,EAAE;AAAA,QACtE;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;AAEO,SAAS,qBAA2B,QAA4D;AACnG,MAAI,eAAe,QAAQ;AACvB,UAAM,EAAE,OAAO,IAAI,OAAO,WAAW;AACrC,YAAQ,QAAQ;AAAA,MACZ,KAAK;AACD,uBAAe,MAAiB;AAChC,eAAO,gBAAgB,MAAiB;AAAA,MAC5C,KAAK;AACD,eAAO,oBAAoB,MAA0D;AAAA,MACzF,KAAK;AACD,eAAQ,OAAmB,aAAa;AAAA,MAC5C;AACI,cAAM,IAAI,kBAAkB,kDAAkD,MAAM,EAAE;AAAA,IAC9F;AAAA,EACJ,OAAO;AACH,QAAI,aAAa,SAAS,MAAM,GAAG;AAC/B,aAAwB,sBAAK,MAAM;AAAA,IACvC;AACA,UAAM,IAAI,kBAAkB,uDAAuD,MAAM,EAAE;AAAA,EAC/F;AACJ;","names":[]}
|