@ordis-dev/ordis 0.1.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 +192 -0
- package/dist/__tests__/api.test.d.ts +5 -0
- package/dist/__tests__/api.test.d.ts.map +1 -0
- package/dist/__tests__/api.test.js +95 -0
- package/dist/__tests__/api.test.js.map +1 -0
- package/dist/__tests__/cli.test.d.ts +6 -0
- package/dist/__tests__/cli.test.d.ts.map +1 -0
- package/dist/__tests__/cli.test.js +103 -0
- package/dist/__tests__/cli.test.js.map +1 -0
- package/dist/cli/__tests__/cli.test.d.ts +5 -0
- package/dist/cli/__tests__/cli.test.d.ts.map +1 -0
- package/dist/cli/__tests__/cli.test.js +13 -0
- package/dist/cli/__tests__/cli.test.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +225 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/__tests__/pipeline.test.d.ts +5 -0
- package/dist/core/__tests__/pipeline.test.d.ts.map +1 -0
- package/dist/core/__tests__/pipeline.test.js +334 -0
- package/dist/core/__tests__/pipeline.test.js.map +1 -0
- package/dist/core/__tests__/validator.test.d.ts +5 -0
- package/dist/core/__tests__/validator.test.d.ts.map +1 -0
- package/dist/core/__tests__/validator.test.js +124 -0
- package/dist/core/__tests__/validator.test.js.map +1 -0
- package/dist/core/errors.d.ts +27 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +35 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/pipeline.d.ts +28 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +212 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/types.d.ts +55 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/validator.d.ts +19 -0
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/core/validator.js +147 -0
- package/dist/core/validator.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/__tests__/client.test.d.ts +5 -0
- package/dist/llm/__tests__/client.test.d.ts.map +1 -0
- package/dist/llm/__tests__/client.test.js +350 -0
- package/dist/llm/__tests__/client.test.js.map +1 -0
- package/dist/llm/__tests__/prompt-builder.test.d.ts +5 -0
- package/dist/llm/__tests__/prompt-builder.test.d.ts.map +1 -0
- package/dist/llm/__tests__/prompt-builder.test.js +171 -0
- package/dist/llm/__tests__/prompt-builder.test.js.map +1 -0
- package/dist/llm/__tests__/retry.test.d.ts +5 -0
- package/dist/llm/__tests__/retry.test.d.ts.map +1 -0
- package/dist/llm/__tests__/retry.test.js +350 -0
- package/dist/llm/__tests__/retry.test.js.map +1 -0
- package/dist/llm/__tests__/token-counter.test.d.ts +5 -0
- package/dist/llm/__tests__/token-counter.test.d.ts.map +1 -0
- package/dist/llm/__tests__/token-counter.test.js +166 -0
- package/dist/llm/__tests__/token-counter.test.js.map +1 -0
- package/dist/llm/client.d.ts +56 -0
- package/dist/llm/client.d.ts.map +1 -0
- package/dist/llm/client.js +266 -0
- package/dist/llm/client.js.map +1 -0
- package/dist/llm/errors.d.ts +27 -0
- package/dist/llm/errors.d.ts.map +1 -0
- package/dist/llm/errors.js +35 -0
- package/dist/llm/errors.js.map +1 -0
- package/dist/llm/index.d.ts +10 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +8 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/prompt-builder.d.ts +13 -0
- package/dist/llm/prompt-builder.d.ts.map +1 -0
- package/dist/llm/prompt-builder.js +107 -0
- package/dist/llm/prompt-builder.js.map +1 -0
- package/dist/llm/token-counter.d.ts +82 -0
- package/dist/llm/token-counter.d.ts.map +1 -0
- package/dist/llm/token-counter.js +109 -0
- package/dist/llm/token-counter.js.map +1 -0
- package/dist/llm/types.d.ts +96 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +5 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/schemas/__tests__/integration.test.d.ts +5 -0
- package/dist/schemas/__tests__/integration.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/integration.test.js +366 -0
- package/dist/schemas/__tests__/integration.test.js.map +1 -0
- package/dist/schemas/__tests__/loader.test.d.ts +5 -0
- package/dist/schemas/__tests__/loader.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/loader.test.js +271 -0
- package/dist/schemas/__tests__/loader.test.js.map +1 -0
- package/dist/schemas/__tests__/validator.test.d.ts +5 -0
- package/dist/schemas/__tests__/validator.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/validator.test.js +592 -0
- package/dist/schemas/__tests__/validator.test.js.map +1 -0
- package/dist/schemas/errors.d.ts +38 -0
- package/dist/schemas/errors.d.ts.map +1 -0
- package/dist/schemas/errors.js +49 -0
- package/dist/schemas/errors.js.map +1 -0
- package/dist/schemas/index.d.ts +8 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +7 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/loader.d.ts +29 -0
- package/dist/schemas/loader.d.ts.map +1 -0
- package/dist/schemas/loader.js +71 -0
- package/dist/schemas/loader.js.map +1 -0
- package/dist/schemas/types.d.ts +75 -0
- package/dist/schemas/types.d.ts.map +1 -0
- package/dist/schemas/types.js +7 -0
- package/dist/schemas/types.js.map +1 -0
- package/dist/schemas/validator.d.ts +12 -0
- package/dist/schemas/validator.d.ts.map +1 -0
- package/dist/schemas/validator.js +211 -0
- package/dist/schemas/validator.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema validation errors and error codes
|
|
3
|
+
*/
|
|
4
|
+
export declare const ErrorCodes: {
|
|
5
|
+
readonly INVALID_JSON: "INVALID_JSON";
|
|
6
|
+
readonly MISSING_FIELDS: "MISSING_FIELDS";
|
|
7
|
+
readonly INVALID_FIELD_TYPE: "INVALID_FIELD_TYPE";
|
|
8
|
+
readonly INVALID_FIELD_NAME: "INVALID_FIELD_NAME";
|
|
9
|
+
readonly INVALID_ENUM_VALUE: "INVALID_ENUM_VALUE";
|
|
10
|
+
readonly INVALID_CONSTRAINT: "INVALID_CONSTRAINT";
|
|
11
|
+
readonly MISSING_ENUM_VALUES: "MISSING_ENUM_VALUES";
|
|
12
|
+
readonly EMPTY_ENUM_VALUES: "EMPTY_ENUM_VALUES";
|
|
13
|
+
readonly INVALID_PATTERN: "INVALID_PATTERN";
|
|
14
|
+
readonly CONSTRAINT_MISMATCH: "CONSTRAINT_MISMATCH";
|
|
15
|
+
readonly DUPLICATE_ENUM_VALUE: "DUPLICATE_ENUM_VALUE";
|
|
16
|
+
readonly CONFIDENCE_BELOW_THRESHOLD: "CONFIDENCE_BELOW_THRESHOLD";
|
|
17
|
+
readonly INVALID_CONFIDENCE_CONFIG: "INVALID_CONFIDENCE_CONFIG";
|
|
18
|
+
readonly MISSING_CONFIDENCE_SCORE: "MISSING_CONFIDENCE_SCORE";
|
|
19
|
+
readonly INVALID_CONFIDENCE_SCORE: "INVALID_CONFIDENCE_SCORE";
|
|
20
|
+
};
|
|
21
|
+
export type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];
|
|
22
|
+
/**
|
|
23
|
+
* Custom error class for schema validation errors
|
|
24
|
+
*/
|
|
25
|
+
export declare class SchemaValidationError extends Error {
|
|
26
|
+
code: ErrorCode;
|
|
27
|
+
field?: string | undefined;
|
|
28
|
+
details?: Record<string, unknown> | undefined;
|
|
29
|
+
constructor(message: string, code: ErrorCode, field?: string | undefined, details?: Record<string, unknown> | undefined);
|
|
30
|
+
toJSON(): {
|
|
31
|
+
name: string;
|
|
32
|
+
message: string;
|
|
33
|
+
code: ErrorCode;
|
|
34
|
+
field: string | undefined;
|
|
35
|
+
details: Record<string, unknown> | undefined;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/schemas/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;CAqBb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAErE;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAGrC,IAAI,EAAE,SAAS;IACf,KAAK,CAAC,EAAE,MAAM;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAHxC,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,SAAS,EACf,KAAK,CAAC,EAAE,MAAM,YAAA,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;IAO1C,MAAM;;;;;;;CASP"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema validation errors and error codes
|
|
3
|
+
*/
|
|
4
|
+
export const ErrorCodes = {
|
|
5
|
+
// Schema structure errors
|
|
6
|
+
INVALID_JSON: 'INVALID_JSON',
|
|
7
|
+
MISSING_FIELDS: 'MISSING_FIELDS',
|
|
8
|
+
INVALID_FIELD_TYPE: 'INVALID_FIELD_TYPE',
|
|
9
|
+
INVALID_FIELD_NAME: 'INVALID_FIELD_NAME',
|
|
10
|
+
// Field constraint errors
|
|
11
|
+
INVALID_ENUM_VALUE: 'INVALID_ENUM_VALUE',
|
|
12
|
+
INVALID_CONSTRAINT: 'INVALID_CONSTRAINT',
|
|
13
|
+
MISSING_ENUM_VALUES: 'MISSING_ENUM_VALUES',
|
|
14
|
+
EMPTY_ENUM_VALUES: 'EMPTY_ENUM_VALUES',
|
|
15
|
+
INVALID_PATTERN: 'INVALID_PATTERN',
|
|
16
|
+
CONSTRAINT_MISMATCH: 'CONSTRAINT_MISMATCH',
|
|
17
|
+
DUPLICATE_ENUM_VALUE: 'DUPLICATE_ENUM_VALUE',
|
|
18
|
+
// Confidence-related errors
|
|
19
|
+
CONFIDENCE_BELOW_THRESHOLD: 'CONFIDENCE_BELOW_THRESHOLD',
|
|
20
|
+
INVALID_CONFIDENCE_CONFIG: 'INVALID_CONFIDENCE_CONFIG',
|
|
21
|
+
MISSING_CONFIDENCE_SCORE: 'MISSING_CONFIDENCE_SCORE',
|
|
22
|
+
INVALID_CONFIDENCE_SCORE: 'INVALID_CONFIDENCE_SCORE',
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Custom error class for schema validation errors
|
|
26
|
+
*/
|
|
27
|
+
export class SchemaValidationError extends Error {
|
|
28
|
+
code;
|
|
29
|
+
field;
|
|
30
|
+
details;
|
|
31
|
+
constructor(message, code, field, details) {
|
|
32
|
+
super(message);
|
|
33
|
+
this.code = code;
|
|
34
|
+
this.field = field;
|
|
35
|
+
this.details = details;
|
|
36
|
+
this.name = 'SchemaValidationError';
|
|
37
|
+
Object.setPrototypeOf(this, SchemaValidationError.prototype);
|
|
38
|
+
}
|
|
39
|
+
toJSON() {
|
|
40
|
+
return {
|
|
41
|
+
name: this.name,
|
|
42
|
+
message: this.message,
|
|
43
|
+
code: this.code,
|
|
44
|
+
field: this.field,
|
|
45
|
+
details: this.details,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/schemas/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,0BAA0B;IAC1B,YAAY,EAAE,cAAc;IAC5B,cAAc,EAAE,gBAAgB;IAChC,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IAExC,0BAA0B;IAC1B,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,mBAAmB,EAAE,qBAAqB;IAC1C,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,mBAAmB,EAAE,qBAAqB;IAC1C,oBAAoB,EAAE,sBAAsB;IAE5C,4BAA4B;IAC5B,0BAA0B,EAAE,4BAA4B;IACxD,yBAAyB,EAAE,2BAA2B;IACtD,wBAAwB,EAAE,0BAA0B;IACpD,wBAAwB,EAAE,0BAA0B;CAC5C,CAAC;AAIX;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAGrC;IACA;IACA;IAJT,YACE,OAAe,EACR,IAAe,EACf,KAAc,EACd,OAAiC;QAExC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJR,SAAI,GAAJ,IAAI,CAAW;QACf,UAAK,GAAL,KAAK,CAAS;QACd,YAAO,GAAP,OAAO,CAA0B;QAGxC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema module exports
|
|
3
|
+
*/
|
|
4
|
+
export { loadSchema, parseSchema, loadSchemaFromObject } from './loader.js';
|
|
5
|
+
export { validateSchema } from './validator.js';
|
|
6
|
+
export { SchemaValidationError, ErrorCodes } from './errors.js';
|
|
7
|
+
export type { Schema, FieldDefinition, FieldType, ValidationError, ValidationResult } from './types.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema loader - loads and parses schema files
|
|
3
|
+
*/
|
|
4
|
+
import type { Schema } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Loads a schema from a file path
|
|
7
|
+
*
|
|
8
|
+
* @param filePath - Path to the schema JSON file
|
|
9
|
+
* @returns Validated schema object
|
|
10
|
+
* @throws {SchemaValidationError} If the file cannot be read or schema is invalid
|
|
11
|
+
*/
|
|
12
|
+
export declare function loadSchema(filePath: string): Promise<Schema>;
|
|
13
|
+
/**
|
|
14
|
+
* Parses a schema from a JSON string
|
|
15
|
+
*
|
|
16
|
+
* @param jsonString - JSON string containing the schema
|
|
17
|
+
* @returns Validated schema object
|
|
18
|
+
* @throws {SchemaValidationError} If the JSON is invalid or schema is malformed
|
|
19
|
+
*/
|
|
20
|
+
export declare function parseSchema(jsonString: string): Schema;
|
|
21
|
+
/**
|
|
22
|
+
* Loads a schema from an object (useful for testing or programmatic usage)
|
|
23
|
+
*
|
|
24
|
+
* @param obj - Schema object
|
|
25
|
+
* @returns Validated schema object
|
|
26
|
+
* @throws {SchemaValidationError} If the schema is invalid
|
|
27
|
+
*/
|
|
28
|
+
export declare function loadSchemaFromObject(obj: unknown): Schema;
|
|
29
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/schemas/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAIzC;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2ClE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CActD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAGzD"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema loader - loads and parses schema files
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from 'fs/promises';
|
|
5
|
+
import { validateSchema } from './validator.js';
|
|
6
|
+
import { SchemaValidationError, ErrorCodes } from './errors.js';
|
|
7
|
+
/**
|
|
8
|
+
* Loads a schema from a file path
|
|
9
|
+
*
|
|
10
|
+
* @param filePath - Path to the schema JSON file
|
|
11
|
+
* @returns Validated schema object
|
|
12
|
+
* @throws {SchemaValidationError} If the file cannot be read or schema is invalid
|
|
13
|
+
*/
|
|
14
|
+
export async function loadSchema(filePath) {
|
|
15
|
+
try {
|
|
16
|
+
// Check if file exists and is readable
|
|
17
|
+
await fs.access(filePath, fs.constants.R_OK);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
throw new SchemaValidationError(`Cannot read schema file: ${filePath}`, ErrorCodes.INVALID_JSON, undefined, { filePath, error: error.message });
|
|
21
|
+
}
|
|
22
|
+
// Read file content
|
|
23
|
+
let content;
|
|
24
|
+
try {
|
|
25
|
+
content = await fs.readFile(filePath, 'utf-8');
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
throw new SchemaValidationError(`Failed to read schema file: ${error.message}`, ErrorCodes.INVALID_JSON, undefined, { filePath });
|
|
29
|
+
}
|
|
30
|
+
// Parse JSON
|
|
31
|
+
let schema;
|
|
32
|
+
try {
|
|
33
|
+
schema = JSON.parse(content);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
throw new SchemaValidationError(`Invalid JSON in schema file: ${error.message}`, ErrorCodes.INVALID_JSON, undefined, { filePath });
|
|
37
|
+
}
|
|
38
|
+
// Validate schema structure
|
|
39
|
+
validateSchema(schema);
|
|
40
|
+
return schema;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Parses a schema from a JSON string
|
|
44
|
+
*
|
|
45
|
+
* @param jsonString - JSON string containing the schema
|
|
46
|
+
* @returns Validated schema object
|
|
47
|
+
* @throws {SchemaValidationError} If the JSON is invalid or schema is malformed
|
|
48
|
+
*/
|
|
49
|
+
export function parseSchema(jsonString) {
|
|
50
|
+
let schema;
|
|
51
|
+
try {
|
|
52
|
+
schema = JSON.parse(jsonString);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
throw new SchemaValidationError(`Invalid JSON: ${error.message}`, ErrorCodes.INVALID_JSON);
|
|
56
|
+
}
|
|
57
|
+
validateSchema(schema);
|
|
58
|
+
return schema;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Loads a schema from an object (useful for testing or programmatic usage)
|
|
62
|
+
*
|
|
63
|
+
* @param obj - Schema object
|
|
64
|
+
* @returns Validated schema object
|
|
65
|
+
* @throws {SchemaValidationError} If the schema is invalid
|
|
66
|
+
*/
|
|
67
|
+
export function loadSchemaFromObject(obj) {
|
|
68
|
+
validateSchema(obj);
|
|
69
|
+
return obj;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/schemas/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAGlC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEhE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC7C,IAAI,CAAC;QACD,uCAAuC;QACvC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,qBAAqB,CAC3B,4BAA4B,QAAQ,EAAE,EACtC,UAAU,CAAC,YAAY,EACvB,SAAS,EACT,EAAE,QAAQ,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAChD,CAAC;IACN,CAAC;IAED,oBAAoB;IACpB,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACD,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,qBAAqB,CAC3B,+BAAgC,KAAe,CAAC,OAAO,EAAE,EACzD,UAAU,CAAC,YAAY,EACvB,SAAS,EACT,EAAE,QAAQ,EAAE,CACf,CAAC;IACN,CAAC;IAED,aAAa;IACb,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,qBAAqB,CAC3B,gCAAiC,KAAe,CAAC,OAAO,EAAE,EAC1D,UAAU,CAAC,YAAY,EACvB,SAAS,EACT,EAAE,QAAQ,EAAE,CACf,CAAC;IACN,CAAC;IAED,4BAA4B;IAC5B,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,UAAkB;IAC1C,IAAI,MAAe,CAAC;IAEpB,IAAI,CAAC;QACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,qBAAqB,CAC3B,iBAAkB,KAAe,CAAC,OAAO,EAAE,EAC3C,UAAU,CAAC,YAAY,CAC1B,CAAC;IACN,CAAC;IAED,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC7C,cAAc,CAAC,GAAG,CAAC,CAAC;IACpB,OAAO,GAAG,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema type definitions for Ordis
|
|
3
|
+
*
|
|
4
|
+
* Defines the structure and types used for schema validation.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Supported field types in schema definitions
|
|
8
|
+
*/
|
|
9
|
+
export type FieldType = 'string' | 'number' | 'date' | 'enum' | 'boolean';
|
|
10
|
+
/**
|
|
11
|
+
* Field definition within a schema
|
|
12
|
+
*/
|
|
13
|
+
export interface FieldDefinition {
|
|
14
|
+
type: FieldType;
|
|
15
|
+
description?: string;
|
|
16
|
+
optional?: boolean;
|
|
17
|
+
enum?: string[];
|
|
18
|
+
min?: number;
|
|
19
|
+
max?: number;
|
|
20
|
+
pattern?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Complete schema definition
|
|
24
|
+
*/
|
|
25
|
+
export interface Schema {
|
|
26
|
+
fields: Record<string, FieldDefinition>;
|
|
27
|
+
metadata?: {
|
|
28
|
+
name?: string;
|
|
29
|
+
version?: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
};
|
|
32
|
+
confidence?: {
|
|
33
|
+
threshold: number;
|
|
34
|
+
failOnLowConfidence: boolean;
|
|
35
|
+
};
|
|
36
|
+
prompt?: {
|
|
37
|
+
includeFewShotExamples?: boolean;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Validation error for a specific field
|
|
42
|
+
*/
|
|
43
|
+
export interface ValidationError {
|
|
44
|
+
field: string;
|
|
45
|
+
message: string;
|
|
46
|
+
code: string;
|
|
47
|
+
value?: unknown;
|
|
48
|
+
confidence?: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Result of schema validation
|
|
52
|
+
*/
|
|
53
|
+
export interface ValidationResult {
|
|
54
|
+
valid: boolean;
|
|
55
|
+
errors: ValidationError[];
|
|
56
|
+
confidence?: number;
|
|
57
|
+
confidenceByField?: Record<string, number>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Result of data extraction
|
|
61
|
+
*/
|
|
62
|
+
export interface ExtractionResult {
|
|
63
|
+
success: boolean;
|
|
64
|
+
data?: Record<string, unknown>;
|
|
65
|
+
confidence: number;
|
|
66
|
+
confidenceByField: Record<string, number>;
|
|
67
|
+
errors: ValidationError[];
|
|
68
|
+
meetsThreshold: boolean;
|
|
69
|
+
metadata?: {
|
|
70
|
+
schemaName?: string;
|
|
71
|
+
extractionTimestamp?: string;
|
|
72
|
+
model?: string;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schemas/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,UAAU,CAAC,EAAE;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,OAAO,CAAC;KAChC,CAAC;IACF,MAAM,CAAC,EAAE;QACL,sBAAsB,CAAC,EAAE,OAAO,CAAC;KACpC,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE;QACP,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/schemas/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema validator - validates schema definitions
|
|
3
|
+
*/
|
|
4
|
+
import type { Schema } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Validates a schema definition
|
|
7
|
+
*
|
|
8
|
+
* @param schema - The schema object to validate
|
|
9
|
+
* @throws {SchemaValidationError} If the schema is invalid
|
|
10
|
+
*/
|
|
11
|
+
export declare function validateSchema(schema: unknown): asserts schema is Schema;
|
|
12
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/schemas/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAA8B,MAAM,YAAY,CAAC;AAKrE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAmDxE"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema validator - validates schema definitions
|
|
3
|
+
*/
|
|
4
|
+
import { SchemaValidationError, ErrorCodes } from './errors.js';
|
|
5
|
+
const VALID_FIELD_TYPES = ['string', 'number', 'date', 'enum', 'boolean'];
|
|
6
|
+
/**
|
|
7
|
+
* Validates a schema definition
|
|
8
|
+
*
|
|
9
|
+
* @param schema - The schema object to validate
|
|
10
|
+
* @throws {SchemaValidationError} If the schema is invalid
|
|
11
|
+
*/
|
|
12
|
+
export function validateSchema(schema) {
|
|
13
|
+
// Check if schema is an object
|
|
14
|
+
if (!schema || typeof schema !== 'object') {
|
|
15
|
+
throw new SchemaValidationError('Schema must be an object', ErrorCodes.INVALID_JSON);
|
|
16
|
+
}
|
|
17
|
+
const schemaObj = schema;
|
|
18
|
+
// Check for required 'fields' property
|
|
19
|
+
if (!schemaObj.fields) {
|
|
20
|
+
throw new SchemaValidationError("Schema must contain a 'fields' property", ErrorCodes.MISSING_FIELDS);
|
|
21
|
+
}
|
|
22
|
+
if (typeof schemaObj.fields !== 'object' || schemaObj.fields === null) {
|
|
23
|
+
throw new SchemaValidationError("'fields' must be an object", ErrorCodes.MISSING_FIELDS);
|
|
24
|
+
}
|
|
25
|
+
const fields = schemaObj.fields;
|
|
26
|
+
// Check if fields is empty
|
|
27
|
+
if (Object.keys(fields).length === 0) {
|
|
28
|
+
throw new SchemaValidationError('Schema must contain at least one field', ErrorCodes.MISSING_FIELDS);
|
|
29
|
+
}
|
|
30
|
+
// Validate each field definition
|
|
31
|
+
for (const [fieldName, fieldDef] of Object.entries(fields)) {
|
|
32
|
+
validateFieldName(fieldName);
|
|
33
|
+
validateFieldDefinition(fieldName, fieldDef);
|
|
34
|
+
}
|
|
35
|
+
// Validate metadata if present
|
|
36
|
+
if (schemaObj.metadata !== undefined) {
|
|
37
|
+
validateMetadata(schemaObj.metadata);
|
|
38
|
+
}
|
|
39
|
+
// Validate confidence configuration if present
|
|
40
|
+
if (schemaObj.confidence !== undefined) {
|
|
41
|
+
validateConfidenceConfig(schemaObj.confidence);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Validates a field name
|
|
46
|
+
*/
|
|
47
|
+
function validateFieldName(fieldName) {
|
|
48
|
+
if (!fieldName || fieldName.trim() === '') {
|
|
49
|
+
throw new SchemaValidationError('Field name cannot be empty', ErrorCodes.INVALID_FIELD_NAME);
|
|
50
|
+
}
|
|
51
|
+
// Field names should be valid identifiers (alphanumeric and underscore)
|
|
52
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(fieldName)) {
|
|
53
|
+
throw new SchemaValidationError(`Invalid field name '${fieldName}'. Field names must start with a letter or underscore and contain only alphanumeric characters and underscores`, ErrorCodes.INVALID_FIELD_NAME, fieldName);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Validates a field definition
|
|
58
|
+
*/
|
|
59
|
+
function validateFieldDefinition(fieldName, fieldDef) {
|
|
60
|
+
if (!fieldDef || typeof fieldDef !== 'object') {
|
|
61
|
+
throw new SchemaValidationError(`Field '${fieldName}' definition must be an object`, ErrorCodes.INVALID_FIELD_TYPE, fieldName);
|
|
62
|
+
}
|
|
63
|
+
const def = fieldDef;
|
|
64
|
+
// Check for required 'type' property
|
|
65
|
+
if (!def.type) {
|
|
66
|
+
throw new SchemaValidationError(`Field '${fieldName}' is missing required 'type' property`, ErrorCodes.INVALID_FIELD_TYPE, fieldName);
|
|
67
|
+
}
|
|
68
|
+
if (typeof def.type !== 'string') {
|
|
69
|
+
throw new SchemaValidationError(`Field '${fieldName}' type must be a string`, ErrorCodes.INVALID_FIELD_TYPE, fieldName);
|
|
70
|
+
}
|
|
71
|
+
// Validate field type
|
|
72
|
+
if (!VALID_FIELD_TYPES.includes(def.type)) {
|
|
73
|
+
throw new SchemaValidationError(`Field '${fieldName}' has invalid type '${def.type}'. Valid types are: ${VALID_FIELD_TYPES.join(', ')}`, ErrorCodes.INVALID_FIELD_TYPE, fieldName, { validTypes: VALID_FIELD_TYPES, receivedType: def.type });
|
|
74
|
+
}
|
|
75
|
+
// Validate optional property if present
|
|
76
|
+
if (def.optional !== undefined && typeof def.optional !== 'boolean') {
|
|
77
|
+
throw new SchemaValidationError(`Field '${fieldName}' optional property must be a boolean`, ErrorCodes.INVALID_CONSTRAINT, fieldName);
|
|
78
|
+
}
|
|
79
|
+
// Validate description if present
|
|
80
|
+
if (def.description !== undefined && typeof def.description !== 'string') {
|
|
81
|
+
throw new SchemaValidationError(`Field '${fieldName}' description must be a string`, ErrorCodes.INVALID_CONSTRAINT, fieldName);
|
|
82
|
+
}
|
|
83
|
+
// Type-specific validations
|
|
84
|
+
const fieldType = def.type;
|
|
85
|
+
if (fieldType === 'enum') {
|
|
86
|
+
validateEnumField(fieldName, def);
|
|
87
|
+
}
|
|
88
|
+
if (fieldType === 'number') {
|
|
89
|
+
validateNumberField(fieldName, def);
|
|
90
|
+
}
|
|
91
|
+
if (fieldType === 'string') {
|
|
92
|
+
validateStringField(fieldName, def);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Validates enum field constraints
|
|
97
|
+
*/
|
|
98
|
+
function validateEnumField(fieldName, def) {
|
|
99
|
+
if (!def.enum) {
|
|
100
|
+
throw new SchemaValidationError(`Field '${fieldName}' with type 'enum' must have an 'enum' property`, ErrorCodes.MISSING_ENUM_VALUES, fieldName);
|
|
101
|
+
}
|
|
102
|
+
if (!Array.isArray(def.enum)) {
|
|
103
|
+
throw new SchemaValidationError(`Field '${fieldName}' enum property must be an array`, ErrorCodes.INVALID_ENUM_VALUE, fieldName);
|
|
104
|
+
}
|
|
105
|
+
if (def.enum.length === 0) {
|
|
106
|
+
throw new SchemaValidationError(`Field '${fieldName}' enum array cannot be empty`, ErrorCodes.EMPTY_ENUM_VALUES, fieldName);
|
|
107
|
+
}
|
|
108
|
+
// Check all enum values are strings
|
|
109
|
+
for (let i = 0; i < def.enum.length; i++) {
|
|
110
|
+
const value = def.enum[i];
|
|
111
|
+
if (typeof value !== 'string') {
|
|
112
|
+
throw new SchemaValidationError(`Field '${fieldName}' enum value at index ${i} must be a string, got ${typeof value}`, ErrorCodes.INVALID_ENUM_VALUE, fieldName, { index: i, value });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Check for duplicate values
|
|
116
|
+
const uniqueValues = new Set(def.enum);
|
|
117
|
+
if (uniqueValues.size !== def.enum.length) {
|
|
118
|
+
throw new SchemaValidationError(`Field '${fieldName}' enum contains duplicate values`, ErrorCodes.DUPLICATE_ENUM_VALUE, fieldName);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Validates number field constraints
|
|
123
|
+
*/
|
|
124
|
+
function validateNumberField(fieldName, def) {
|
|
125
|
+
if (def.min !== undefined) {
|
|
126
|
+
if (typeof def.min !== 'number') {
|
|
127
|
+
throw new SchemaValidationError(`Field '${fieldName}' min constraint must be a number`, ErrorCodes.INVALID_CONSTRAINT, fieldName);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (def.max !== undefined) {
|
|
131
|
+
if (typeof def.max !== 'number') {
|
|
132
|
+
throw new SchemaValidationError(`Field '${fieldName}' max constraint must be a number`, ErrorCodes.INVALID_CONSTRAINT, fieldName);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (def.min !== undefined && def.max !== undefined) {
|
|
136
|
+
if (def.min > def.max) {
|
|
137
|
+
throw new SchemaValidationError(`Field '${fieldName}' min value (${def.min}) cannot be greater than max value (${def.max})`, ErrorCodes.CONSTRAINT_MISMATCH, fieldName, { min: def.min, max: def.max });
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Enum is not valid for number type
|
|
141
|
+
if (def.enum !== undefined) {
|
|
142
|
+
throw new SchemaValidationError(`Field '${fieldName}' with type 'number' cannot have 'enum' property`, ErrorCodes.INVALID_CONSTRAINT, fieldName);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Validates string field constraints
|
|
147
|
+
*/
|
|
148
|
+
function validateStringField(fieldName, def) {
|
|
149
|
+
if (def.pattern !== undefined) {
|
|
150
|
+
if (typeof def.pattern !== 'string') {
|
|
151
|
+
throw new SchemaValidationError(`Field '${fieldName}' pattern constraint must be a string`, ErrorCodes.INVALID_CONSTRAINT, fieldName);
|
|
152
|
+
}
|
|
153
|
+
// Validate regex pattern
|
|
154
|
+
try {
|
|
155
|
+
new RegExp(def.pattern);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
throw new SchemaValidationError(`Field '${fieldName}' has invalid regex pattern: ${error.message}`, ErrorCodes.INVALID_PATTERN, fieldName, { pattern: def.pattern });
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// min/max not valid for string type (could be added for length later)
|
|
162
|
+
if (def.min !== undefined || def.max !== undefined) {
|
|
163
|
+
throw new SchemaValidationError(`Field '${fieldName}' with type 'string' cannot have 'min' or 'max' properties`, ErrorCodes.INVALID_CONSTRAINT, fieldName);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Validates schema metadata
|
|
168
|
+
*/
|
|
169
|
+
function validateMetadata(metadata) {
|
|
170
|
+
if (typeof metadata !== 'object' || metadata === null) {
|
|
171
|
+
throw new SchemaValidationError('Schema metadata must be an object', ErrorCodes.INVALID_JSON);
|
|
172
|
+
}
|
|
173
|
+
const meta = metadata;
|
|
174
|
+
if (meta.name !== undefined && typeof meta.name !== 'string') {
|
|
175
|
+
throw new SchemaValidationError('Schema metadata name must be a string', ErrorCodes.INVALID_JSON);
|
|
176
|
+
}
|
|
177
|
+
if (meta.version !== undefined && typeof meta.version !== 'string') {
|
|
178
|
+
throw new SchemaValidationError('Schema metadata version must be a string', ErrorCodes.INVALID_JSON);
|
|
179
|
+
}
|
|
180
|
+
if (meta.description !== undefined && typeof meta.description !== 'string') {
|
|
181
|
+
throw new SchemaValidationError('Schema metadata description must be a string', ErrorCodes.INVALID_JSON);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Validates confidence configuration
|
|
186
|
+
*/
|
|
187
|
+
function validateConfidenceConfig(confidence) {
|
|
188
|
+
if (typeof confidence !== 'object' || confidence === null) {
|
|
189
|
+
throw new SchemaValidationError('Confidence configuration must be an object', ErrorCodes.INVALID_CONFIDENCE_CONFIG);
|
|
190
|
+
}
|
|
191
|
+
const config = confidence;
|
|
192
|
+
// Check for required 'threshold' property
|
|
193
|
+
if (config.threshold === undefined) {
|
|
194
|
+
throw new SchemaValidationError('Confidence configuration must include a threshold value', ErrorCodes.INVALID_CONFIDENCE_CONFIG);
|
|
195
|
+
}
|
|
196
|
+
if (typeof config.threshold !== 'number') {
|
|
197
|
+
throw new SchemaValidationError('Confidence threshold must be a number', ErrorCodes.INVALID_CONFIDENCE_CONFIG, undefined, { received: typeof config.threshold });
|
|
198
|
+
}
|
|
199
|
+
// Validate threshold range (0-100)
|
|
200
|
+
if (config.threshold < 0 || config.threshold > 100) {
|
|
201
|
+
throw new SchemaValidationError(`Confidence threshold must be between 0 and 100, got ${config.threshold}`, ErrorCodes.INVALID_CONFIDENCE_CONFIG, undefined, { threshold: config.threshold });
|
|
202
|
+
}
|
|
203
|
+
// Check for required 'failOnLowConfidence' property
|
|
204
|
+
if (config.failOnLowConfidence === undefined) {
|
|
205
|
+
throw new SchemaValidationError('Confidence configuration must include failOnLowConfidence boolean', ErrorCodes.INVALID_CONFIDENCE_CONFIG);
|
|
206
|
+
}
|
|
207
|
+
if (typeof config.failOnLowConfidence !== 'boolean') {
|
|
208
|
+
throw new SchemaValidationError('failOnLowConfidence must be a boolean', ErrorCodes.INVALID_CONFIDENCE_CONFIG, undefined, { received: typeof config.failOnLowConfidence });
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/schemas/validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ordis-dev/ordis",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Schema-first LLM extraction tool that turns unstructured text into validated structured data",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"ordis": "dist/cli.js"
|
|
10
|
+
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"dev": "tsx src/cli.ts",
|
|
20
|
+
"clean": "rm -rf dist",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"test:watch": "vitest",
|
|
23
|
+
"test:ui": "vitest --ui",
|
|
24
|
+
"benchmark": "tsx benchmarks/runner.ts"
|
|
25
|
+
},
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+https://github.com/ordis-dev/ordis.git"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"llm",
|
|
32
|
+
"extraction",
|
|
33
|
+
"schema",
|
|
34
|
+
"validation",
|
|
35
|
+
"cli",
|
|
36
|
+
"openai",
|
|
37
|
+
"ollama"
|
|
38
|
+
],
|
|
39
|
+
"author": "Ordis",
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"bugs": {
|
|
42
|
+
"url": "https://github.com/ordis-dev/ordis/issues"
|
|
43
|
+
},
|
|
44
|
+
"homepage": "https://github.com/ordis-dev/ordis#readme",
|
|
45
|
+
"engines": {
|
|
46
|
+
"node": ">=18.0.0"
|
|
47
|
+
},
|
|
48
|
+
"files": [
|
|
49
|
+
"dist",
|
|
50
|
+
"README.md",
|
|
51
|
+
"LICENSE"
|
|
52
|
+
],
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@types/node": "^24.10.2",
|
|
55
|
+
"@vitest/ui": "^4.0.15",
|
|
56
|
+
"tsx": "^4.21.0",
|
|
57
|
+
"typescript": "^5.9.3",
|
|
58
|
+
"vitest": "^4.0.15"
|
|
59
|
+
}
|
|
60
|
+
}
|