@uns-kit/database 3.0.16 → 3.0.18

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.
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAkBxB,CAAC;AAEZ,eAAO,MAAM,oBAAoB;;;;;;;kBAStB,CAAC;AAqBZ,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAgB/B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAAgF,CAAC;AAEtH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAAwD,CAAC;AAE3F,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAEtC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC5E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACxE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACxE,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAChF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA+BxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAkBxB,CAAC;AAEZ,eAAO,MAAM,oBAAoB;;;;;;;kBAStB,CAAC;AAqBZ,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAgB/B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAAgF,CAAC;AAEtH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAAwD,CAAC;AAE3F,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAEtC,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnF;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC5E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACxE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACxE,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAChF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC"}
package/dist/schema.js CHANGED
@@ -1,29 +1,34 @@
1
1
  import { z } from "zod";
2
- import { hostValueSchema, secretValueSchema } from "./placeholders.js";
2
+ import { hostPlaceholderSchema, secretValueSchema } from "./placeholders.js";
3
3
  // Preserve the Zod 3 contract, where .int() accepted finite integers outside
4
4
  // Number's safe-integer range as well.
5
5
  const integerSchema = () => z.number().multipleOf(1);
6
6
  const positiveInt = integerSchema().positive();
7
7
  const sqlDirSchema = z.string().min(1).optional();
8
+ const nonEmptySecretValueSchema = secretValueSchema.refine((value) => typeof value !== "string" || value.trim().length > 0, "Value must not be empty");
9
+ // Database endpoints are often stored alongside credentials in Infisical. Keep
10
+ // host-specific placeholders (inline/external/system) while allowing the same
11
+ // env/Infisical references accepted for other resolved string values.
12
+ const databaseHostSchema = z.union([hostPlaceholderSchema, secretValueSchema]);
8
13
  const sslModeSchema = z.union([
9
14
  z.boolean(),
10
15
  z
11
16
  .object({
12
17
  rejectUnauthorized: z.boolean().default(true),
13
- ca: z.string().optional(),
14
- cert: z.string().optional(),
15
- key: z.string().optional(),
16
- servername: z.string().optional(),
18
+ ca: secretValueSchema.optional(),
19
+ cert: secretValueSchema.optional(),
20
+ key: secretValueSchema.optional(),
21
+ servername: secretValueSchema.optional(),
17
22
  })
18
23
  .strict(),
19
24
  ]);
20
25
  export const postgresDatabaseSchema = z
21
26
  .object({
22
27
  dialect: z.literal("pg"),
23
- host: hostValueSchema,
28
+ host: databaseHostSchema,
24
29
  port: positiveInt.default(5432),
25
- database: z.string().min(1),
26
- user: z.string().min(1),
30
+ database: nonEmptySecretValueSchema,
31
+ user: nonEmptySecretValueSchema,
27
32
  password: secretValueSchema.optional(),
28
33
  usePool: z.boolean().default(true),
29
34
  ssl: sslModeSchema.optional(),
@@ -49,14 +54,14 @@ export const sqliteDatabaseSchema = z
49
54
  const oracleDatabaseBaseSchema = z
50
55
  .object({
51
56
  dialect: z.literal("oracle"),
52
- user: z.string().min(1),
57
+ user: nonEmptySecretValueSchema,
53
58
  password: secretValueSchema.optional(),
54
59
  usePool: z.boolean().default(true),
55
- connectString: z.string().min(1).optional(),
56
- host: hostValueSchema.optional(),
60
+ connectString: nonEmptySecretValueSchema.optional(),
61
+ host: databaseHostSchema.optional(),
57
62
  port: positiveInt.default(1521),
58
- serviceName: z.string().min(1).optional(),
59
- sid: z.string().min(1).optional(),
63
+ serviceName: nonEmptySecretValueSchema.optional(),
64
+ sid: nonEmptySecretValueSchema.optional(),
60
65
  sqlDir: sqlDirSchema,
61
66
  poolMin: integerSchema().nonnegative().optional(),
62
67
  poolMax: positiveInt.optional(),
@@ -85,4 +90,14 @@ export const databasesConfigSchema = z.record(z.string().min(1), databaseConnect
85
90
  export const databaseProjectExtrasSchema = z.object({
86
91
  databases: databasesConfigSchema,
87
92
  });
93
+ /**
94
+ * Database adapters run after ConfigFile.loadConfig() resolves env/Infisical and
95
+ * host placeholders. Rejecting an unresolved placeholder here avoids sending a
96
+ * configuration object to a database driver when a caller bypasses that flow.
97
+ */
98
+ export function requireResolvedDatabaseString(value, field) {
99
+ if (typeof value === "string" && value.trim().length > 0)
100
+ return value;
101
+ throw new Error(`Database configuration '${field}' must be resolved to a non-empty string before connecting.`);
102
+ }
88
103
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\n\nimport { hostValueSchema, secretValueSchema } from \"./placeholders.js\";\n\n// Preserve the Zod 3 contract, where .int() accepted finite integers outside\n// Number's safe-integer range as well.\nconst integerSchema = () => z.number().multipleOf(1);\nconst positiveInt = integerSchema().positive();\nconst sqlDirSchema = z.string().min(1).optional();\n\nconst sslModeSchema = z.union([\n z.boolean(),\n z\n .object({\n rejectUnauthorized: z.boolean().default(true),\n ca: z.string().optional(),\n cert: z.string().optional(),\n key: z.string().optional(),\n servername: z.string().optional(),\n })\n .strict(),\n]);\n\nexport const postgresDatabaseSchema = z\n .object({\n dialect: z.literal(\"pg\"),\n host: hostValueSchema,\n port: positiveInt.default(5432),\n database: z.string().min(1),\n user: z.string().min(1),\n password: secretValueSchema.optional(),\n usePool: z.boolean().default(true),\n ssl: sslModeSchema.optional(),\n sqlDir: sqlDirSchema,\n applicationName: z.string().min(1).optional(),\n statementTimeoutMs: integerSchema().nonnegative().optional(),\n connectionTimeoutMs: integerSchema().nonnegative().optional(),\n idleTimeoutMs: integerSchema().nonnegative().optional(),\n maxPoolSize: positiveInt.optional(),\n minPoolSize: integerSchema().nonnegative().optional(),\n })\n .strict();\n\nexport const sqliteDatabaseSchema = z\n .object({\n dialect: z.literal(\"sqlite\"),\n filename: z.string().min(1),\n sqlDir: sqlDirSchema,\n readonly: z.boolean().optional(),\n fileMustExist: z.boolean().optional(),\n timeoutMs: integerSchema().nonnegative().optional(),\n })\n .strict();\n\nconst oracleDatabaseBaseSchema = z\n .object({\n dialect: z.literal(\"oracle\"),\n user: z.string().min(1),\n password: secretValueSchema.optional(),\n usePool: z.boolean().default(true),\n connectString: z.string().min(1).optional(),\n host: hostValueSchema.optional(),\n port: positiveInt.default(1521),\n serviceName: z.string().min(1).optional(),\n sid: z.string().min(1).optional(),\n sqlDir: sqlDirSchema,\n poolMin: integerSchema().nonnegative().optional(),\n poolMax: positiveInt.optional(),\n poolIncrement: positiveInt.optional(),\n stmtCacheSize: positiveInt.optional(),\n })\n .strict();\n\nexport const oracleDatabaseSchema = oracleDatabaseBaseSchema.superRefine((value: z.infer<typeof oracleDatabaseBaseSchema>, ctx) => {\n if (!value.connectString && !value.host) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"oracle connection requires either connectString or host\",\n path: [\"connectString\"],\n });\n }\n\n if (!value.connectString && !value.serviceName && !value.sid) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"oracle connection requires serviceName or sid when connectString is omitted\",\n path: [\"serviceName\"],\n });\n }\n});\n\nexport const databaseConnectionSchema = z.union([postgresDatabaseSchema, sqliteDatabaseSchema, oracleDatabaseSchema]);\n\nexport const databasesConfigSchema = z.record(z.string().min(1), databaseConnectionSchema);\n\nexport const databaseProjectExtrasSchema = z.object({\n databases: databasesConfigSchema,\n});\n\nexport type PostgresDatabaseConfig = z.infer<typeof postgresDatabaseSchema>;\nexport type SqliteDatabaseConfig = z.infer<typeof sqliteDatabaseSchema>;\nexport type OracleDatabaseConfig = z.infer<typeof oracleDatabaseSchema>;\nexport type DatabaseConnectionConfig = z.infer<typeof databaseConnectionSchema>;\nexport type DatabasesConfig = z.infer<typeof databasesConfigSchema>;\nexport type DatabaseProjectExtras = z.infer<typeof databaseProjectExtrasSchema>;\n"]}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\n\nimport { hostPlaceholderSchema, secretValueSchema } from \"./placeholders.js\";\n\n// Preserve the Zod 3 contract, where .int() accepted finite integers outside\n// Number's safe-integer range as well.\nconst integerSchema = () => z.number().multipleOf(1);\nconst positiveInt = integerSchema().positive();\nconst sqlDirSchema = z.string().min(1).optional();\nconst nonEmptySecretValueSchema = secretValueSchema.refine(\n (value) => typeof value !== \"string\" || value.trim().length > 0,\n \"Value must not be empty\",\n);\n// Database endpoints are often stored alongside credentials in Infisical. Keep\n// host-specific placeholders (inline/external/system) while allowing the same\n// env/Infisical references accepted for other resolved string values.\nconst databaseHostSchema = z.union([hostPlaceholderSchema, secretValueSchema]);\n\nconst sslModeSchema = z.union([\n z.boolean(),\n z\n .object({\n rejectUnauthorized: z.boolean().default(true),\n ca: secretValueSchema.optional(),\n cert: secretValueSchema.optional(),\n key: secretValueSchema.optional(),\n servername: secretValueSchema.optional(),\n })\n .strict(),\n]);\n\nexport const postgresDatabaseSchema = z\n .object({\n dialect: z.literal(\"pg\"),\n host: databaseHostSchema,\n port: positiveInt.default(5432),\n database: nonEmptySecretValueSchema,\n user: nonEmptySecretValueSchema,\n password: secretValueSchema.optional(),\n usePool: z.boolean().default(true),\n ssl: sslModeSchema.optional(),\n sqlDir: sqlDirSchema,\n applicationName: z.string().min(1).optional(),\n statementTimeoutMs: integerSchema().nonnegative().optional(),\n connectionTimeoutMs: integerSchema().nonnegative().optional(),\n idleTimeoutMs: integerSchema().nonnegative().optional(),\n maxPoolSize: positiveInt.optional(),\n minPoolSize: integerSchema().nonnegative().optional(),\n })\n .strict();\n\nexport const sqliteDatabaseSchema = z\n .object({\n dialect: z.literal(\"sqlite\"),\n filename: z.string().min(1),\n sqlDir: sqlDirSchema,\n readonly: z.boolean().optional(),\n fileMustExist: z.boolean().optional(),\n timeoutMs: integerSchema().nonnegative().optional(),\n })\n .strict();\n\nconst oracleDatabaseBaseSchema = z\n .object({\n dialect: z.literal(\"oracle\"),\n user: nonEmptySecretValueSchema,\n password: secretValueSchema.optional(),\n usePool: z.boolean().default(true),\n connectString: nonEmptySecretValueSchema.optional(),\n host: databaseHostSchema.optional(),\n port: positiveInt.default(1521),\n serviceName: nonEmptySecretValueSchema.optional(),\n sid: nonEmptySecretValueSchema.optional(),\n sqlDir: sqlDirSchema,\n poolMin: integerSchema().nonnegative().optional(),\n poolMax: positiveInt.optional(),\n poolIncrement: positiveInt.optional(),\n stmtCacheSize: positiveInt.optional(),\n })\n .strict();\n\nexport const oracleDatabaseSchema = oracleDatabaseBaseSchema.superRefine((value: z.infer<typeof oracleDatabaseBaseSchema>, ctx) => {\n if (!value.connectString && !value.host) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"oracle connection requires either connectString or host\",\n path: [\"connectString\"],\n });\n }\n\n if (!value.connectString && !value.serviceName && !value.sid) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"oracle connection requires serviceName or sid when connectString is omitted\",\n path: [\"serviceName\"],\n });\n }\n});\n\nexport const databaseConnectionSchema = z.union([postgresDatabaseSchema, sqliteDatabaseSchema, oracleDatabaseSchema]);\n\nexport const databasesConfigSchema = z.record(z.string().min(1), databaseConnectionSchema);\n\nexport const databaseProjectExtrasSchema = z.object({\n databases: databasesConfigSchema,\n});\n\n/**\n * Database adapters run after ConfigFile.loadConfig() resolves env/Infisical and\n * host placeholders. Rejecting an unresolved placeholder here avoids sending a\n * configuration object to a database driver when a caller bypasses that flow.\n */\nexport function requireResolvedDatabaseString(value: unknown, field: string): string {\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n throw new Error(`Database configuration '${field}' must be resolved to a non-empty string before connecting.`);\n}\n\nexport type PostgresDatabaseConfig = z.infer<typeof postgresDatabaseSchema>;\nexport type SqliteDatabaseConfig = z.infer<typeof sqliteDatabaseSchema>;\nexport type OracleDatabaseConfig = z.infer<typeof oracleDatabaseSchema>;\nexport type DatabaseConnectionConfig = z.infer<typeof databaseConnectionSchema>;\nexport type DatabasesConfig = z.infer<typeof databasesConfigSchema>;\nexport type DatabaseProjectExtras = z.infer<typeof databaseProjectExtrasSchema>;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uns-kit/database",
3
- "version": "3.0.16",
3
+ "version": "3.0.18",
4
4
  "description": "Database helpers for UNS services with config-driven connections, SQL file loading, and portable named-parameter compilation.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -32,7 +32,7 @@
32
32
  "types": "dist/index.d.ts",
33
33
  "dependencies": {
34
34
  "zod": "^4.4.3",
35
- "@uns-kit/core": "3.0.16"
35
+ "@uns-kit/core": "3.0.18"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "better-sqlite3": "^11.0.0",