khotan-data 0.0.1
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 +196 -0
- package/dist/chunk-42CNRMAQ.js +99 -0
- package/dist/chunk-42CNRMAQ.js.map +1 -0
- package/dist/chunk-6PDC7DFX.cjs +215 -0
- package/dist/chunk-6PDC7DFX.cjs.map +1 -0
- package/dist/chunk-6R4QVX2Q.cjs +80 -0
- package/dist/chunk-6R4QVX2Q.cjs.map +1 -0
- package/dist/chunk-FRRSW3TN.cjs +105 -0
- package/dist/chunk-FRRSW3TN.cjs.map +1 -0
- package/dist/chunk-NVPI7OV3.js +71 -0
- package/dist/chunk-NVPI7OV3.js.map +1 -0
- package/dist/chunk-TK4HD4XA.js +213 -0
- package/dist/chunk-TK4HD4XA.js.map +1 -0
- package/dist/drizzle.cjs +28 -0
- package/dist/drizzle.cjs.map +1 -0
- package/dist/drizzle.d.cts +120 -0
- package/dist/drizzle.d.ts +120 -0
- package/dist/drizzle.js +3 -0
- package/dist/drizzle.js.map +1 -0
- package/dist/index.cjs +107 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +35 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/pipeline.cjs +12 -0
- package/dist/pipeline.cjs.map +1 -0
- package/dist/pipeline.d.cts +43 -0
- package/dist/pipeline.d.ts +43 -0
- package/dist/pipeline.js +3 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/transform.cjs +40 -0
- package/dist/transform.cjs.map +1 -0
- package/dist/transform.d.cts +38 -0
- package/dist/transform.d.ts +38 -0
- package/dist/transform.js +3 -0
- package/dist/transform.js.map +1 -0
- package/dist/types-EpLTQcN2.d.cts +54 -0
- package/dist/types-EpLTQcN2.d.ts +54 -0
- package/package.json +110 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** A single record flowing through a pipeline. */
|
|
2
|
+
type DataRecord = Record<string, unknown>;
|
|
3
|
+
/** Extracts data from a source, yielding records lazily. */
|
|
4
|
+
interface Extractor<T extends DataRecord = DataRecord> {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
extract(): AsyncIterable<T>;
|
|
7
|
+
}
|
|
8
|
+
/** Transforms a record into zero or more output records. */
|
|
9
|
+
interface Transformer<TInput extends DataRecord = DataRecord, TOutput extends DataRecord = DataRecord> {
|
|
10
|
+
readonly name: string;
|
|
11
|
+
transform(record: TInput): TOutput | TOutput[] | Promise<TOutput | TOutput[]>;
|
|
12
|
+
}
|
|
13
|
+
/** Loads a batch of records into a destination. */
|
|
14
|
+
interface Loader<T extends DataRecord = DataRecord> {
|
|
15
|
+
readonly name: string;
|
|
16
|
+
load(records: T[]): Promise<LoadResult>;
|
|
17
|
+
}
|
|
18
|
+
interface LoadResult {
|
|
19
|
+
readonly recordsLoaded: number;
|
|
20
|
+
readonly errors: LoadError[];
|
|
21
|
+
}
|
|
22
|
+
interface LoadError {
|
|
23
|
+
readonly record: DataRecord;
|
|
24
|
+
readonly error: Error;
|
|
25
|
+
}
|
|
26
|
+
/** Events emitted during pipeline execution. */
|
|
27
|
+
interface PipelineEvent {
|
|
28
|
+
readonly type: "pipeline:start" | "pipeline:end" | "step:start" | "step:end" | "record:extracted" | "record:transformed" | "record:loaded" | "error";
|
|
29
|
+
readonly timestamp: Date;
|
|
30
|
+
readonly stepName?: string;
|
|
31
|
+
readonly data?: unknown;
|
|
32
|
+
}
|
|
33
|
+
type PipelineEventListener = (event: PipelineEvent) => void;
|
|
34
|
+
interface PipelineOptions {
|
|
35
|
+
/** Records per load batch. Defaults to 1000. */
|
|
36
|
+
readonly batchSize?: number;
|
|
37
|
+
/** Keep processing after errors instead of throwing. */
|
|
38
|
+
readonly continueOnError?: boolean;
|
|
39
|
+
/** Cancel the pipeline. */
|
|
40
|
+
readonly signal?: AbortSignal;
|
|
41
|
+
}
|
|
42
|
+
interface PipelineResult {
|
|
43
|
+
readonly recordsProcessed: number;
|
|
44
|
+
readonly recordsLoaded: number;
|
|
45
|
+
readonly errors: PipelineStepError[];
|
|
46
|
+
readonly duration: number;
|
|
47
|
+
}
|
|
48
|
+
interface PipelineStepError {
|
|
49
|
+
readonly stepName: string;
|
|
50
|
+
readonly error: Error;
|
|
51
|
+
readonly record?: DataRecord;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export type { DataRecord as D, Extractor as E, LoadError as L, PipelineEvent as P, Transformer as T, LoadResult as a, Loader as b, PipelineEventListener as c, PipelineOptions as d, PipelineResult as e, PipelineStepError as f };
|
package/package.json
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "khotan-data",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Data primitives for TypeScript — ETL pipelines, transforms, and Drizzle Postgres integration.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"default": "./dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"require": {
|
|
16
|
+
"types": "./dist/index.d.cts",
|
|
17
|
+
"default": "./dist/index.cjs"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"./pipeline": {
|
|
21
|
+
"import": {
|
|
22
|
+
"types": "./dist/pipeline.d.ts",
|
|
23
|
+
"default": "./dist/pipeline.js"
|
|
24
|
+
},
|
|
25
|
+
"require": {
|
|
26
|
+
"types": "./dist/pipeline.d.cts",
|
|
27
|
+
"default": "./dist/pipeline.cjs"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"./transform": {
|
|
31
|
+
"import": {
|
|
32
|
+
"types": "./dist/transform.d.ts",
|
|
33
|
+
"default": "./dist/transform.js"
|
|
34
|
+
},
|
|
35
|
+
"require": {
|
|
36
|
+
"types": "./dist/transform.d.cts",
|
|
37
|
+
"default": "./dist/transform.cjs"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"./drizzle": {
|
|
41
|
+
"import": {
|
|
42
|
+
"types": "./dist/drizzle.d.ts",
|
|
43
|
+
"default": "./dist/drizzle.js"
|
|
44
|
+
},
|
|
45
|
+
"require": {
|
|
46
|
+
"types": "./dist/drizzle.d.cts",
|
|
47
|
+
"default": "./dist/drizzle.cjs"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"files": [
|
|
52
|
+
"dist",
|
|
53
|
+
"README.md",
|
|
54
|
+
"LICENSE"
|
|
55
|
+
],
|
|
56
|
+
"sideEffects": false,
|
|
57
|
+
"scripts": {
|
|
58
|
+
"build": "tsup",
|
|
59
|
+
"dev": "tsup --watch",
|
|
60
|
+
"test": "vitest run",
|
|
61
|
+
"test:watch": "vitest",
|
|
62
|
+
"test:coverage": "vitest run --coverage",
|
|
63
|
+
"lint": "eslint . --max-warnings 0",
|
|
64
|
+
"lint:fix": "eslint . --fix",
|
|
65
|
+
"format": "prettier --write .",
|
|
66
|
+
"format:check": "prettier --check .",
|
|
67
|
+
"typecheck": "tsc --noEmit",
|
|
68
|
+
"check": "npm run typecheck && npm run lint && npm run format:check && npm run test",
|
|
69
|
+
"prepublishOnly": "npm run check && npm run build",
|
|
70
|
+
"changeset": "changeset",
|
|
71
|
+
"release": "npm run build && changeset publish"
|
|
72
|
+
},
|
|
73
|
+
"keywords": [
|
|
74
|
+
"data",
|
|
75
|
+
"etl",
|
|
76
|
+
"pipeline",
|
|
77
|
+
"drizzle",
|
|
78
|
+
"drizzle-orm",
|
|
79
|
+
"postgres",
|
|
80
|
+
"nextjs",
|
|
81
|
+
"typescript",
|
|
82
|
+
"transform",
|
|
83
|
+
"data-management"
|
|
84
|
+
],
|
|
85
|
+
"author": "",
|
|
86
|
+
"license": "MIT",
|
|
87
|
+
"repository": {
|
|
88
|
+
"type": "git",
|
|
89
|
+
"url": ""
|
|
90
|
+
},
|
|
91
|
+
"engines": {
|
|
92
|
+
"node": ">=18"
|
|
93
|
+
},
|
|
94
|
+
"peerDependencies": {
|
|
95
|
+
"drizzle-orm": ">=0.35.0"
|
|
96
|
+
},
|
|
97
|
+
"devDependencies": {
|
|
98
|
+
"@changesets/cli": "^2.29.4",
|
|
99
|
+
"@eslint/js": "^9.28.0",
|
|
100
|
+
"@vitest/coverage-v8": "^4.1.7",
|
|
101
|
+
"drizzle-orm": "^0.45.2",
|
|
102
|
+
"eslint": "^9.28.0",
|
|
103
|
+
"prettier": "^3.5.3",
|
|
104
|
+
"tsup": "^8.5.1",
|
|
105
|
+
"typescript": "^6.0.3",
|
|
106
|
+
"typescript-eslint": "^8.34.0",
|
|
107
|
+
"vitest": "^4.1.7"
|
|
108
|
+
},
|
|
109
|
+
"packageManager": "npm@11.12.1"
|
|
110
|
+
}
|