@uns-kit/database 2.0.46

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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +91 -0
  3. package/dist/client.d.ts +19 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +120 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/drivers/oracle.d.ts +4 -0
  8. package/dist/drivers/oracle.d.ts.map +1 -0
  9. package/dist/drivers/oracle.js +96 -0
  10. package/dist/drivers/oracle.js.map +1 -0
  11. package/dist/drivers/pg.d.ts +4 -0
  12. package/dist/drivers/pg.d.ts.map +1 -0
  13. package/dist/drivers/pg.js +84 -0
  14. package/dist/drivers/pg.js.map +1 -0
  15. package/dist/drivers/sqlite.d.ts +4 -0
  16. package/dist/drivers/sqlite.d.ts.map +1 -0
  17. package/dist/drivers/sqlite.js +38 -0
  18. package/dist/drivers/sqlite.js.map +1 -0
  19. package/dist/index.d.ts +7 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +7 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/params.d.ts +4 -0
  24. package/dist/params.d.ts.map +1 -0
  25. package/dist/params.js +193 -0
  26. package/dist/params.js.map +1 -0
  27. package/dist/placeholders.d.ts +168 -0
  28. package/dist/placeholders.d.ts.map +1 -0
  29. package/dist/placeholders.js +51 -0
  30. package/dist/placeholders.js.map +1 -0
  31. package/dist/schema.d.ts +2208 -0
  32. package/dist/schema.d.ts.map +1 -0
  33. package/dist/schema.js +81 -0
  34. package/dist/schema.js.map +1 -0
  35. package/dist/sql-modes.d.ts +3 -0
  36. package/dist/sql-modes.d.ts.map +1 -0
  37. package/dist/sql-modes.js +10 -0
  38. package/dist/sql-modes.js.map +1 -0
  39. package/dist/sql.d.ts +6 -0
  40. package/dist/sql.d.ts.map +1 -0
  41. package/dist/sql.js +14 -0
  42. package/dist/sql.js.map +1 -0
  43. package/dist/types.d.ts +31 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +2 -0
  46. package/dist/types.js.map +1 -0
  47. package/package.json +58 -0
package/dist/params.js ADDED
@@ -0,0 +1,193 @@
1
+ export const ORACLE_IN_LIST_LIMIT = 1000;
2
+ const isIdentifierStart = (char) => !!char && /[A-Za-z_]/.test(char);
3
+ const isIdentifierPart = (char) => !!char && /[A-Za-z0-9_]/.test(char);
4
+ function readParameterName(sqlText, startIndex) {
5
+ let index = startIndex;
6
+ let name = "";
7
+ while (index < sqlText.length && isIdentifierPart(sqlText[index])) {
8
+ name += sqlText[index];
9
+ index += 1;
10
+ }
11
+ return { name, endIndex: index - 1 };
12
+ }
13
+ export function compileNamedParams(dialect, sqlText, params = {}) {
14
+ const output = [];
15
+ const values = [];
16
+ const bindValues = {};
17
+ const parameterOrder = [];
18
+ const pgIndexes = new Map();
19
+ let inSingleQuote = false;
20
+ let inDoubleQuote = false;
21
+ let inLineComment = false;
22
+ let inBlockComment = false;
23
+ for (let index = 0; index < sqlText.length; index += 1) {
24
+ const char = sqlText[index];
25
+ const next = sqlText[index + 1];
26
+ const previous = sqlText[index - 1];
27
+ if (inLineComment) {
28
+ output.push(char);
29
+ if (char === "\n") {
30
+ inLineComment = false;
31
+ }
32
+ continue;
33
+ }
34
+ if (inBlockComment) {
35
+ output.push(char);
36
+ if (char === "*" && next === "/") {
37
+ output.push(next);
38
+ inBlockComment = false;
39
+ index += 1;
40
+ }
41
+ continue;
42
+ }
43
+ if (!inDoubleQuote && char === "'" && previous !== "\\") {
44
+ inSingleQuote = !inSingleQuote;
45
+ output.push(char);
46
+ continue;
47
+ }
48
+ if (!inSingleQuote && char === "\"" && previous !== "\\") {
49
+ inDoubleQuote = !inDoubleQuote;
50
+ output.push(char);
51
+ continue;
52
+ }
53
+ if (inSingleQuote || inDoubleQuote) {
54
+ output.push(char);
55
+ continue;
56
+ }
57
+ if (char === "-" && next === "-") {
58
+ output.push(char, next);
59
+ inLineComment = true;
60
+ index += 1;
61
+ continue;
62
+ }
63
+ if (char === "/" && next === "*") {
64
+ output.push(char, next);
65
+ inBlockComment = true;
66
+ index += 1;
67
+ continue;
68
+ }
69
+ if (char === ":" && previous !== ":" && isIdentifierStart(next)) {
70
+ const { name, endIndex } = readParameterName(sqlText, index + 1);
71
+ if (!(name in params)) {
72
+ throw new Error(`Missing SQL parameter ':${name}'.`);
73
+ }
74
+ const value = params[name];
75
+ if (Array.isArray(value)) {
76
+ const inListContext = dialect === "oracle"
77
+ ? getInListContext(output, sqlText, endIndex + 1)
78
+ : null;
79
+ if (value.length === 0) {
80
+ if (inListContext) {
81
+ output.splice(inListContext.startIndex);
82
+ output.push("1 = 0");
83
+ index = inListContext.closingParenIndex;
84
+ }
85
+ else {
86
+ output.push("(select 1 where 1 = 0)");
87
+ index = endIndex;
88
+ }
89
+ continue;
90
+ }
91
+ const placeholders = buildArrayPlaceholders(dialect, name, value, values, bindValues, parameterOrder, inListContext?.leftSideExpression);
92
+ if (inListContext) {
93
+ output.splice(inListContext.startIndex);
94
+ }
95
+ output.push(placeholders);
96
+ if (inListContext) {
97
+ index = inListContext.closingParenIndex;
98
+ }
99
+ else {
100
+ index = endIndex;
101
+ }
102
+ continue;
103
+ }
104
+ parameterOrder.push(name);
105
+ if (dialect === "oracle") {
106
+ bindValues[name] = value;
107
+ output.push(`:${name}`);
108
+ }
109
+ else if (dialect === "pg") {
110
+ let paramIndex = pgIndexes.get(name);
111
+ if (!paramIndex) {
112
+ values.push(value);
113
+ paramIndex = values.length;
114
+ pgIndexes.set(name, paramIndex);
115
+ }
116
+ output.push(`$${paramIndex}`);
117
+ }
118
+ else {
119
+ values.push(value);
120
+ output.push("?");
121
+ }
122
+ index = endIndex;
123
+ continue;
124
+ }
125
+ output.push(char);
126
+ }
127
+ return {
128
+ text: output.join(""),
129
+ values: dialect === "oracle" ? bindValues : values,
130
+ parameterOrder,
131
+ };
132
+ }
133
+ function buildArrayPlaceholders(dialect, name, arrayValue, values, bindValues, parameterOrder, leftSideExpression) {
134
+ if (dialect === "oracle") {
135
+ const chunks = chunkArray(arrayValue, ORACLE_IN_LIST_LIMIT);
136
+ const inColumn = leftSideExpression?.trim();
137
+ const chunkSql = chunks.map((chunk, chunkIndex) => {
138
+ const placeholders = chunk.map((item, itemIndex) => {
139
+ const bindName = `${name}_${chunkIndex}_${itemIndex}`;
140
+ bindValues[bindName] = item;
141
+ parameterOrder.push(bindName);
142
+ return `:${bindName}`;
143
+ });
144
+ return inColumn
145
+ ? `${inColumn} IN (${placeholders.join(", ")})`
146
+ : placeholders.join(", ");
147
+ });
148
+ return inColumn
149
+ ? `(${chunkSql.join(" OR ")})`
150
+ : chunkSql.join(", ");
151
+ }
152
+ if (dialect === "pg") {
153
+ const placeholders = arrayValue.map(item => {
154
+ values.push(item);
155
+ parameterOrder.push(name);
156
+ return `$${values.length}`;
157
+ });
158
+ return placeholders.join(", ");
159
+ }
160
+ const placeholders = arrayValue.map(item => {
161
+ values.push(item);
162
+ parameterOrder.push(name);
163
+ return "?";
164
+ });
165
+ return placeholders.join(", ");
166
+ }
167
+ function chunkArray(values, size) {
168
+ const chunks = [];
169
+ for (let index = 0; index < values.length; index += size) {
170
+ chunks.push(values.slice(index, index + size));
171
+ }
172
+ return chunks;
173
+ }
174
+ function getInListContext(output, sqlText, searchStartIndex) {
175
+ const outputText = output.join("");
176
+ const match = /([A-Za-z0-9_."$]+)\s+IN\s*\($/i.exec(outputText);
177
+ if (!match) {
178
+ return null;
179
+ }
180
+ let cursor = searchStartIndex;
181
+ while (cursor < sqlText.length && /\s/.test(sqlText[cursor])) {
182
+ cursor += 1;
183
+ }
184
+ if (sqlText[cursor] !== ")") {
185
+ return null;
186
+ }
187
+ return {
188
+ startIndex: match.index,
189
+ leftSideExpression: match[1],
190
+ closingParenIndex: cursor,
191
+ };
192
+ }
193
+ //# sourceMappingURL=params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"params.js","sourceRoot":"","sources":["../src/params.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CompiledSqlStatement,\n DatabaseDialect,\n SqlParams,\n} from \"./types.js\";\n\nexport const ORACLE_IN_LIST_LIMIT = 1000;\n\nconst isIdentifierStart = (char: string | undefined): boolean =>\n !!char && /[A-Za-z_]/.test(char);\n\nconst isIdentifierPart = (char: string | undefined): boolean =>\n !!char && /[A-Za-z0-9_]/.test(char);\n\nfunction readParameterName(sqlText: string, startIndex: number): { name: string; endIndex: number } {\n let index = startIndex;\n let name = \"\";\n\n while (index < sqlText.length && isIdentifierPart(sqlText[index])) {\n name += sqlText[index];\n index += 1;\n }\n\n return { name, endIndex: index - 1 };\n}\n\nexport function compileNamedParams(\n dialect: DatabaseDialect,\n sqlText: string,\n params: SqlParams = {}\n): CompiledSqlStatement {\n const output: string[] = [];\n const values: unknown[] = [];\n const bindValues: Record<string, unknown> = {};\n const parameterOrder: string[] = [];\n const pgIndexes = new Map<string, number>();\n\n let inSingleQuote = false;\n let inDoubleQuote = false;\n let inLineComment = false;\n let inBlockComment = false;\n\n for (let index = 0; index < sqlText.length; index += 1) {\n const char = sqlText[index];\n const next = sqlText[index + 1];\n const previous = sqlText[index - 1];\n\n if (inLineComment) {\n output.push(char);\n if (char === \"\\n\") {\n inLineComment = false;\n }\n continue;\n }\n\n if (inBlockComment) {\n output.push(char);\n if (char === \"*\" && next === \"/\") {\n output.push(next);\n inBlockComment = false;\n index += 1;\n }\n continue;\n }\n\n if (!inDoubleQuote && char === \"'\" && previous !== \"\\\\\") {\n inSingleQuote = !inSingleQuote;\n output.push(char);\n continue;\n }\n\n if (!inSingleQuote && char === \"\\\"\" && previous !== \"\\\\\") {\n inDoubleQuote = !inDoubleQuote;\n output.push(char);\n continue;\n }\n\n if (inSingleQuote || inDoubleQuote) {\n output.push(char);\n continue;\n }\n\n if (char === \"-\" && next === \"-\") {\n output.push(char, next);\n inLineComment = true;\n index += 1;\n continue;\n }\n\n if (char === \"/\" && next === \"*\") {\n output.push(char, next);\n inBlockComment = true;\n index += 1;\n continue;\n }\n\n if (char === \":\" && previous !== \":\" && isIdentifierStart(next)) {\n const { name, endIndex } = readParameterName(sqlText, index + 1);\n\n if (!(name in params)) {\n throw new Error(`Missing SQL parameter ':${name}'.`);\n }\n\n const value = params[name];\n\n if (Array.isArray(value)) {\n const inListContext = dialect === \"oracle\"\n ? getInListContext(output, sqlText, endIndex + 1)\n : null;\n\n if (value.length === 0) {\n if (inListContext) {\n output.splice(inListContext.startIndex);\n output.push(\"1 = 0\");\n index = inListContext.closingParenIndex;\n } else {\n output.push(\"(select 1 where 1 = 0)\");\n index = endIndex;\n }\n continue;\n }\n\n const placeholders = buildArrayPlaceholders(\n dialect,\n name,\n value,\n values,\n bindValues,\n parameterOrder,\n inListContext?.leftSideExpression\n );\n\n if (inListContext) {\n output.splice(inListContext.startIndex);\n }\n\n output.push(placeholders);\n if (inListContext) {\n index = inListContext.closingParenIndex;\n } else {\n index = endIndex;\n }\n continue;\n }\n\n parameterOrder.push(name);\n\n if (dialect === \"oracle\") {\n bindValues[name] = value;\n output.push(`:${name}`);\n } else if (dialect === \"pg\") {\n let paramIndex = pgIndexes.get(name);\n if (!paramIndex) {\n values.push(value);\n paramIndex = values.length;\n pgIndexes.set(name, paramIndex);\n }\n output.push(`$${paramIndex}`);\n } else {\n values.push(value);\n output.push(\"?\");\n }\n\n index = endIndex;\n continue;\n }\n\n output.push(char);\n }\n\n return {\n text: output.join(\"\"),\n values: dialect === \"oracle\" ? bindValues : values,\n parameterOrder,\n };\n}\n\nfunction buildArrayPlaceholders(\n dialect: DatabaseDialect,\n name: string,\n arrayValue: unknown[],\n values: unknown[],\n bindValues: Record<string, unknown>,\n parameterOrder: string[],\n leftSideExpression?: string\n): string {\n if (dialect === \"oracle\") {\n const chunks = chunkArray(arrayValue, ORACLE_IN_LIST_LIMIT);\n const inColumn = leftSideExpression?.trim();\n\n const chunkSql = chunks.map((chunk, chunkIndex) => {\n const placeholders = chunk.map((item, itemIndex) => {\n const bindName = `${name}_${chunkIndex}_${itemIndex}`;\n bindValues[bindName] = item;\n parameterOrder.push(bindName);\n return `:${bindName}`;\n });\n\n return inColumn\n ? `${inColumn} IN (${placeholders.join(\", \")})`\n : placeholders.join(\", \");\n });\n\n return inColumn\n ? `(${chunkSql.join(\" OR \")})`\n : chunkSql.join(\", \");\n }\n\n if (dialect === \"pg\") {\n const placeholders = arrayValue.map(item => {\n values.push(item);\n parameterOrder.push(name);\n return `$${values.length}`;\n });\n return placeholders.join(\", \");\n }\n\n const placeholders = arrayValue.map(item => {\n values.push(item);\n parameterOrder.push(name);\n return \"?\";\n });\n return placeholders.join(\", \");\n}\n\nfunction chunkArray<T>(values: T[], size: number): T[][] {\n const chunks: T[][] = [];\n\n for (let index = 0; index < values.length; index += size) {\n chunks.push(values.slice(index, index + size));\n }\n\n return chunks;\n}\n\nfunction getInListContext(\n output: string[],\n sqlText: string,\n searchStartIndex: number\n): {\n startIndex: number;\n leftSideExpression: string;\n closingParenIndex: number;\n} | null {\n const outputText = output.join(\"\");\n const match = /([A-Za-z0-9_.\"$]+)\\s+IN\\s*\\($/i.exec(outputText);\n\n if (!match) {\n return null;\n }\n\n let cursor = searchStartIndex;\n while (cursor < sqlText.length && /\\s/.test(sqlText[cursor])) {\n cursor += 1;\n }\n\n if (sqlText[cursor] !== \")\") {\n return null;\n }\n\n return {\n startIndex: match.index,\n leftSideExpression: match[1],\n closingParenIndex: cursor,\n };\n}\n"]}
@@ -0,0 +1,168 @@
1
+ import { z } from "zod";
2
+ export declare const secretPlaceholderSchema: z.ZodDiscriminatedUnion<"provider", [z.ZodObject<{
3
+ provider: z.ZodLiteral<"env">;
4
+ key: z.ZodString;
5
+ optional: z.ZodOptional<z.ZodBoolean>;
6
+ default: z.ZodOptional<z.ZodString>;
7
+ }, "strict", z.ZodTypeAny, {
8
+ provider?: "env";
9
+ key?: string;
10
+ optional?: boolean;
11
+ default?: string;
12
+ }, {
13
+ provider?: "env";
14
+ key?: string;
15
+ optional?: boolean;
16
+ default?: string;
17
+ }>, z.ZodObject<{
18
+ provider: z.ZodLiteral<"infisical">;
19
+ path: z.ZodString;
20
+ key: z.ZodString;
21
+ optional: z.ZodOptional<z.ZodBoolean>;
22
+ environment: z.ZodOptional<z.ZodString>;
23
+ projectId: z.ZodOptional<z.ZodString>;
24
+ default: z.ZodOptional<z.ZodString>;
25
+ }, "strict", z.ZodTypeAny, {
26
+ provider?: "infisical";
27
+ path?: string;
28
+ key?: string;
29
+ optional?: boolean;
30
+ default?: string;
31
+ environment?: string;
32
+ projectId?: string;
33
+ }, {
34
+ provider?: "infisical";
35
+ path?: string;
36
+ key?: string;
37
+ optional?: boolean;
38
+ default?: string;
39
+ environment?: string;
40
+ projectId?: string;
41
+ }>]>;
42
+ export declare const secretValueSchema: z.ZodUnion<[z.ZodString, z.ZodDiscriminatedUnion<"provider", [z.ZodObject<{
43
+ provider: z.ZodLiteral<"env">;
44
+ key: z.ZodString;
45
+ optional: z.ZodOptional<z.ZodBoolean>;
46
+ default: z.ZodOptional<z.ZodString>;
47
+ }, "strict", z.ZodTypeAny, {
48
+ provider?: "env";
49
+ key?: string;
50
+ optional?: boolean;
51
+ default?: string;
52
+ }, {
53
+ provider?: "env";
54
+ key?: string;
55
+ optional?: boolean;
56
+ default?: string;
57
+ }>, z.ZodObject<{
58
+ provider: z.ZodLiteral<"infisical">;
59
+ path: z.ZodString;
60
+ key: z.ZodString;
61
+ optional: z.ZodOptional<z.ZodBoolean>;
62
+ environment: z.ZodOptional<z.ZodString>;
63
+ projectId: z.ZodOptional<z.ZodString>;
64
+ default: z.ZodOptional<z.ZodString>;
65
+ }, "strict", z.ZodTypeAny, {
66
+ provider?: "infisical";
67
+ path?: string;
68
+ key?: string;
69
+ optional?: boolean;
70
+ default?: string;
71
+ environment?: string;
72
+ projectId?: string;
73
+ }, {
74
+ provider?: "infisical";
75
+ path?: string;
76
+ key?: string;
77
+ optional?: boolean;
78
+ default?: string;
79
+ environment?: string;
80
+ projectId?: string;
81
+ }>]>]>;
82
+ export declare const hostPlaceholderSchema: z.ZodDiscriminatedUnion<"provider", [z.ZodObject<{
83
+ provider: z.ZodLiteral<"inline">;
84
+ value: z.ZodString;
85
+ }, "strict", z.ZodTypeAny, {
86
+ provider?: "inline";
87
+ value?: string;
88
+ }, {
89
+ provider?: "inline";
90
+ value?: string;
91
+ }>, z.ZodObject<{
92
+ provider: z.ZodLiteral<"external">;
93
+ key: z.ZodString;
94
+ optional: z.ZodOptional<z.ZodBoolean>;
95
+ default: z.ZodOptional<z.ZodString>;
96
+ }, "strict", z.ZodTypeAny, {
97
+ provider?: "external";
98
+ key?: string;
99
+ optional?: boolean;
100
+ default?: string;
101
+ }, {
102
+ provider?: "external";
103
+ key?: string;
104
+ optional?: boolean;
105
+ default?: string;
106
+ }>, z.ZodObject<{
107
+ provider: z.ZodLiteral<"system">;
108
+ family: z.ZodDefault<z.ZodEnum<["IPv4", "IPv6"]>>;
109
+ interfaceName: z.ZodOptional<z.ZodString>;
110
+ optional: z.ZodOptional<z.ZodBoolean>;
111
+ default: z.ZodOptional<z.ZodString>;
112
+ }, "strict", z.ZodTypeAny, {
113
+ provider?: "system";
114
+ optional?: boolean;
115
+ default?: string;
116
+ family?: "IPv4" | "IPv6";
117
+ interfaceName?: string;
118
+ }, {
119
+ provider?: "system";
120
+ optional?: boolean;
121
+ default?: string;
122
+ family?: "IPv4" | "IPv6";
123
+ interfaceName?: string;
124
+ }>]>;
125
+ export declare const hostValueSchema: z.ZodUnion<[z.ZodString, z.ZodDiscriminatedUnion<"provider", [z.ZodObject<{
126
+ provider: z.ZodLiteral<"inline">;
127
+ value: z.ZodString;
128
+ }, "strict", z.ZodTypeAny, {
129
+ provider?: "inline";
130
+ value?: string;
131
+ }, {
132
+ provider?: "inline";
133
+ value?: string;
134
+ }>, z.ZodObject<{
135
+ provider: z.ZodLiteral<"external">;
136
+ key: z.ZodString;
137
+ optional: z.ZodOptional<z.ZodBoolean>;
138
+ default: z.ZodOptional<z.ZodString>;
139
+ }, "strict", z.ZodTypeAny, {
140
+ provider?: "external";
141
+ key?: string;
142
+ optional?: boolean;
143
+ default?: string;
144
+ }, {
145
+ provider?: "external";
146
+ key?: string;
147
+ optional?: boolean;
148
+ default?: string;
149
+ }>, z.ZodObject<{
150
+ provider: z.ZodLiteral<"system">;
151
+ family: z.ZodDefault<z.ZodEnum<["IPv4", "IPv6"]>>;
152
+ interfaceName: z.ZodOptional<z.ZodString>;
153
+ optional: z.ZodOptional<z.ZodBoolean>;
154
+ default: z.ZodOptional<z.ZodString>;
155
+ }, "strict", z.ZodTypeAny, {
156
+ provider?: "system";
157
+ optional?: boolean;
158
+ default?: string;
159
+ family?: "IPv4" | "IPv6";
160
+ interfaceName?: string;
161
+ }, {
162
+ provider?: "system";
163
+ optional?: boolean;
164
+ default?: string;
165
+ family?: "IPv4" | "IPv6";
166
+ interfaceName?: string;
167
+ }>]>]>;
168
+ //# sourceMappingURL=placeholders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholders.d.ts","sourceRoot":"","sources":["../src/placeholders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuCxB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAGlC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAG5B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIhC,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAG1B,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { z } from "zod";
2
+ const envSecretSchema = z.object({
3
+ provider: z.literal("env"),
4
+ key: z.string().min(1),
5
+ optional: z.boolean().optional(),
6
+ default: z.string().optional(),
7
+ }).strict();
8
+ const infisicalSecretSchema = z.object({
9
+ provider: z.literal("infisical"),
10
+ path: z.string().min(1),
11
+ key: z.string().min(1),
12
+ optional: z.boolean().optional(),
13
+ environment: z.string().optional(),
14
+ projectId: z.string().optional(),
15
+ default: z.string().optional(),
16
+ }).strict();
17
+ const inlineHostSchema = z.object({
18
+ provider: z.literal("inline"),
19
+ value: z.string().min(1),
20
+ }).strict();
21
+ const externalHostSchema = z.object({
22
+ provider: z.literal("external"),
23
+ key: z.string().min(1),
24
+ optional: z.boolean().optional(),
25
+ default: z.string().optional(),
26
+ }).strict();
27
+ const systemHostSchema = z.object({
28
+ provider: z.literal("system"),
29
+ family: z.enum(["IPv4", "IPv6"]).default("IPv4"),
30
+ interfaceName: z.string().optional(),
31
+ optional: z.boolean().optional(),
32
+ default: z.string().optional(),
33
+ }).strict();
34
+ export const secretPlaceholderSchema = z.discriminatedUnion("provider", [
35
+ envSecretSchema,
36
+ infisicalSecretSchema,
37
+ ]);
38
+ export const secretValueSchema = z.union([
39
+ z.string(),
40
+ secretPlaceholderSchema,
41
+ ]);
42
+ export const hostPlaceholderSchema = z.discriminatedUnion("provider", [
43
+ inlineHostSchema,
44
+ externalHostSchema,
45
+ systemHostSchema,
46
+ ]);
47
+ export const hostValueSchema = z.union([
48
+ z.string(),
49
+ hostPlaceholderSchema,
50
+ ]);
51
+ //# sourceMappingURL=placeholders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholders.js","sourceRoot":"","sources":["../src/placeholders.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\n\nconst envSecretSchema = z.object({\n provider: z.literal(\"env\"),\n key: z.string().min(1),\n optional: z.boolean().optional(),\n default: z.string().optional(),\n}).strict();\n\nconst infisicalSecretSchema = z.object({\n provider: z.literal(\"infisical\"),\n path: z.string().min(1),\n key: z.string().min(1),\n optional: z.boolean().optional(),\n environment: z.string().optional(),\n projectId: z.string().optional(),\n default: z.string().optional(),\n}).strict();\n\nconst inlineHostSchema = z.object({\n provider: z.literal(\"inline\"),\n value: z.string().min(1),\n}).strict();\n\nconst externalHostSchema = z.object({\n provider: z.literal(\"external\"),\n key: z.string().min(1),\n optional: z.boolean().optional(),\n default: z.string().optional(),\n}).strict();\n\nconst systemHostSchema = z.object({\n provider: z.literal(\"system\"),\n family: z.enum([\"IPv4\", \"IPv6\"]).default(\"IPv4\"),\n interfaceName: z.string().optional(),\n optional: z.boolean().optional(),\n default: z.string().optional(),\n}).strict();\n\nexport const secretPlaceholderSchema = z.discriminatedUnion(\"provider\", [\n envSecretSchema,\n infisicalSecretSchema,\n]);\n\nexport const secretValueSchema = z.union([\n z.string(),\n secretPlaceholderSchema,\n]);\n\nexport const hostPlaceholderSchema = z.discriminatedUnion(\"provider\", [\n inlineHostSchema,\n externalHostSchema,\n systemHostSchema,\n]);\n\nexport const hostValueSchema = z.union([\n z.string(),\n hostPlaceholderSchema,\n]);\n"]}