@hazeljs/data 0.2.0-alpha.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.
Files changed (171) hide show
  1. package/LICENSE +192 -0
  2. package/README.md +308 -0
  3. package/dist/connectors/connector.interface.d.ts +29 -0
  4. package/dist/connectors/connector.interface.d.ts.map +1 -0
  5. package/dist/connectors/connector.interface.js +6 -0
  6. package/dist/connectors/csv.connector.d.ts +63 -0
  7. package/dist/connectors/csv.connector.d.ts.map +1 -0
  8. package/dist/connectors/csv.connector.js +147 -0
  9. package/dist/connectors/http.connector.d.ts +68 -0
  10. package/dist/connectors/http.connector.d.ts.map +1 -0
  11. package/dist/connectors/http.connector.js +131 -0
  12. package/dist/connectors/index.d.ts +7 -0
  13. package/dist/connectors/index.d.ts.map +1 -0
  14. package/dist/connectors/index.js +12 -0
  15. package/dist/connectors/memory.connector.d.ts +38 -0
  16. package/dist/connectors/memory.connector.d.ts.map +1 -0
  17. package/dist/connectors/memory.connector.js +56 -0
  18. package/dist/connectors/memory.connector.test.d.ts +2 -0
  19. package/dist/connectors/memory.connector.test.d.ts.map +1 -0
  20. package/dist/connectors/memory.connector.test.js +43 -0
  21. package/dist/data.module.d.ts +30 -0
  22. package/dist/data.module.d.ts.map +1 -0
  23. package/dist/data.module.js +120 -0
  24. package/dist/data.module.test.d.ts +2 -0
  25. package/dist/data.module.test.d.ts.map +1 -0
  26. package/dist/data.module.test.js +28 -0
  27. package/dist/data.types.d.ts +67 -0
  28. package/dist/data.types.d.ts.map +1 -0
  29. package/dist/data.types.js +5 -0
  30. package/dist/decorators/index.d.ts +6 -0
  31. package/dist/decorators/index.d.ts.map +1 -0
  32. package/dist/decorators/index.js +24 -0
  33. package/dist/decorators/pii.decorator.d.ts +59 -0
  34. package/dist/decorators/pii.decorator.d.ts.map +1 -0
  35. package/dist/decorators/pii.decorator.js +197 -0
  36. package/dist/decorators/pii.decorator.test.d.ts +2 -0
  37. package/dist/decorators/pii.decorator.test.d.ts.map +1 -0
  38. package/dist/decorators/pii.decorator.test.js +150 -0
  39. package/dist/decorators/pipeline.decorator.d.ts +22 -0
  40. package/dist/decorators/pipeline.decorator.d.ts.map +1 -0
  41. package/dist/decorators/pipeline.decorator.js +42 -0
  42. package/dist/decorators/pipeline.decorator.test.d.ts +2 -0
  43. package/dist/decorators/pipeline.decorator.test.d.ts.map +1 -0
  44. package/dist/decorators/pipeline.decorator.test.js +104 -0
  45. package/dist/decorators/stream.decorator.d.ts +31 -0
  46. package/dist/decorators/stream.decorator.d.ts.map +1 -0
  47. package/dist/decorators/stream.decorator.js +48 -0
  48. package/dist/decorators/transform.decorator.d.ts +29 -0
  49. package/dist/decorators/transform.decorator.d.ts.map +1 -0
  50. package/dist/decorators/transform.decorator.js +41 -0
  51. package/dist/decorators/validate.decorator.d.ts +34 -0
  52. package/dist/decorators/validate.decorator.d.ts.map +1 -0
  53. package/dist/decorators/validate.decorator.js +49 -0
  54. package/dist/flink.service.d.ts +80 -0
  55. package/dist/flink.service.d.ts.map +1 -0
  56. package/dist/flink.service.js +134 -0
  57. package/dist/flink.service.test.d.ts +2 -0
  58. package/dist/flink.service.test.d.ts.map +1 -0
  59. package/dist/flink.service.test.js +60 -0
  60. package/dist/index.d.ts +32 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +96 -0
  63. package/dist/pipelines/etl.service.d.ts +59 -0
  64. package/dist/pipelines/etl.service.d.ts.map +1 -0
  65. package/dist/pipelines/etl.service.js +223 -0
  66. package/dist/pipelines/etl.service.test.d.ts +2 -0
  67. package/dist/pipelines/etl.service.test.d.ts.map +1 -0
  68. package/dist/pipelines/etl.service.test.js +319 -0
  69. package/dist/pipelines/pipeline.base.d.ts +24 -0
  70. package/dist/pipelines/pipeline.base.d.ts.map +1 -0
  71. package/dist/pipelines/pipeline.base.js +29 -0
  72. package/dist/pipelines/pipeline.base.test.d.ts +2 -0
  73. package/dist/pipelines/pipeline.base.test.d.ts.map +1 -0
  74. package/dist/pipelines/pipeline.base.test.js +38 -0
  75. package/dist/pipelines/pipeline.builder.d.ts +95 -0
  76. package/dist/pipelines/pipeline.builder.d.ts.map +1 -0
  77. package/dist/pipelines/pipeline.builder.js +212 -0
  78. package/dist/pipelines/pipeline.builder.test.d.ts +2 -0
  79. package/dist/pipelines/pipeline.builder.test.d.ts.map +1 -0
  80. package/dist/pipelines/pipeline.builder.test.js +185 -0
  81. package/dist/pipelines/stream.service.d.ts +12 -0
  82. package/dist/pipelines/stream.service.d.ts.map +1 -0
  83. package/dist/pipelines/stream.service.js +58 -0
  84. package/dist/pipelines/stream.service.test.d.ts +2 -0
  85. package/dist/pipelines/stream.service.test.d.ts.map +1 -0
  86. package/dist/pipelines/stream.service.test.js +103 -0
  87. package/dist/quality/quality.service.d.ts +87 -0
  88. package/dist/quality/quality.service.d.ts.map +1 -0
  89. package/dist/quality/quality.service.js +326 -0
  90. package/dist/quality/quality.service.test.d.ts +2 -0
  91. package/dist/quality/quality.service.test.d.ts.map +1 -0
  92. package/dist/quality/quality.service.test.js +128 -0
  93. package/dist/schema/schema.d.ts +127 -0
  94. package/dist/schema/schema.d.ts.map +1 -0
  95. package/dist/schema/schema.js +487 -0
  96. package/dist/schema/schema.test.d.ts +2 -0
  97. package/dist/schema/schema.test.d.ts.map +1 -0
  98. package/dist/schema/schema.test.js +411 -0
  99. package/dist/streaming/flink/flink.client.d.ts +96 -0
  100. package/dist/streaming/flink/flink.client.d.ts.map +1 -0
  101. package/dist/streaming/flink/flink.client.js +267 -0
  102. package/dist/streaming/flink/flink.client.test.d.ts +2 -0
  103. package/dist/streaming/flink/flink.client.test.d.ts.map +1 -0
  104. package/dist/streaming/flink/flink.client.test.js +59 -0
  105. package/dist/streaming/flink/flink.job.d.ts +29 -0
  106. package/dist/streaming/flink/flink.job.d.ts.map +1 -0
  107. package/dist/streaming/flink/flink.job.js +27 -0
  108. package/dist/streaming/flink/flink.job.test.d.ts +2 -0
  109. package/dist/streaming/flink/flink.job.test.d.ts.map +1 -0
  110. package/dist/streaming/flink/flink.job.test.js +37 -0
  111. package/dist/streaming/flink/flink.operators.d.ts +35 -0
  112. package/dist/streaming/flink/flink.operators.d.ts.map +1 -0
  113. package/dist/streaming/flink/flink.operators.js +43 -0
  114. package/dist/streaming/flink/flink.operators.test.d.ts +2 -0
  115. package/dist/streaming/flink/flink.operators.test.d.ts.map +1 -0
  116. package/dist/streaming/flink/flink.operators.test.js +38 -0
  117. package/dist/streaming/stream.builder.d.ts +22 -0
  118. package/dist/streaming/stream.builder.d.ts.map +1 -0
  119. package/dist/streaming/stream.builder.js +50 -0
  120. package/dist/streaming/stream.builder.test.d.ts +2 -0
  121. package/dist/streaming/stream.builder.test.d.ts.map +1 -0
  122. package/dist/streaming/stream.builder.test.js +59 -0
  123. package/dist/streaming/stream.processor.d.ts +66 -0
  124. package/dist/streaming/stream.processor.d.ts.map +1 -0
  125. package/dist/streaming/stream.processor.js +178 -0
  126. package/dist/streaming/stream.processor.test.d.ts +2 -0
  127. package/dist/streaming/stream.processor.test.d.ts.map +1 -0
  128. package/dist/streaming/stream.processor.test.js +151 -0
  129. package/dist/streaming/stream.processor.windowing.test.d.ts +2 -0
  130. package/dist/streaming/stream.processor.windowing.test.d.ts.map +1 -0
  131. package/dist/streaming/stream.processor.windowing.test.js +69 -0
  132. package/dist/telemetry/telemetry.d.ts +124 -0
  133. package/dist/telemetry/telemetry.d.ts.map +1 -0
  134. package/dist/telemetry/telemetry.js +259 -0
  135. package/dist/telemetry/telemetry.test.d.ts +2 -0
  136. package/dist/telemetry/telemetry.test.d.ts.map +1 -0
  137. package/dist/telemetry/telemetry.test.js +51 -0
  138. package/dist/testing/index.d.ts +12 -0
  139. package/dist/testing/index.d.ts.map +1 -0
  140. package/dist/testing/index.js +18 -0
  141. package/dist/testing/pipeline-test-harness.d.ts +40 -0
  142. package/dist/testing/pipeline-test-harness.d.ts.map +1 -0
  143. package/dist/testing/pipeline-test-harness.js +55 -0
  144. package/dist/testing/pipeline-test-harness.test.d.ts +2 -0
  145. package/dist/testing/pipeline-test-harness.test.d.ts.map +1 -0
  146. package/dist/testing/pipeline-test-harness.test.js +102 -0
  147. package/dist/testing/schema-faker.d.ts +32 -0
  148. package/dist/testing/schema-faker.d.ts.map +1 -0
  149. package/dist/testing/schema-faker.js +91 -0
  150. package/dist/testing/schema-faker.test.d.ts +2 -0
  151. package/dist/testing/schema-faker.test.d.ts.map +1 -0
  152. package/dist/testing/schema-faker.test.js +66 -0
  153. package/dist/transformers/built-in.transformers.d.ts +12 -0
  154. package/dist/transformers/built-in.transformers.d.ts.map +1 -0
  155. package/dist/transformers/built-in.transformers.js +75 -0
  156. package/dist/transformers/built-in.transformers.test.d.ts +2 -0
  157. package/dist/transformers/built-in.transformers.test.d.ts.map +1 -0
  158. package/dist/transformers/built-in.transformers.test.js +85 -0
  159. package/dist/transformers/transformer.service.d.ts +14 -0
  160. package/dist/transformers/transformer.service.d.ts.map +1 -0
  161. package/dist/transformers/transformer.service.js +65 -0
  162. package/dist/transformers/transformer.service.test.d.ts +2 -0
  163. package/dist/transformers/transformer.service.test.d.ts.map +1 -0
  164. package/dist/transformers/transformer.service.test.js +42 -0
  165. package/dist/validators/schema.validator.d.ts +21 -0
  166. package/dist/validators/schema.validator.d.ts.map +1 -0
  167. package/dist/validators/schema.validator.js +40 -0
  168. package/dist/validators/schema.validator.test.d.ts +2 -0
  169. package/dist/validators/schema.validator.test.d.ts.map +1 -0
  170. package/dist/validators/schema.validator.test.js +42 -0
  171. package/package.json +53 -0
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @hazeljs/data - Data Processing & ETL for HazelJS
3
+ */
4
+ import 'reflect-metadata';
5
+ export { DataModule, type DataModuleOptions } from './data.module';
6
+ export { Schema } from './schema/schema';
7
+ export type { BaseSchema, StringSchema, NumberSchema, BooleanSchema, DateSchema, ObjectSchema, ArraySchema, LiteralSchema, UnionSchema, SchemaValidationError, SchemaValidator as SchemaValidatorFn, Infer, } from './schema/schema';
8
+ export { Pipeline, Transform, Validate, Stream, Mask, Redact, Encrypt, Decrypt, getPipelineMetadata, hasPipelineMetadata, getTransformMetadata, getValidateMetadata, getStreamMetadata, hasStreamMetadata, getMaskMetadata, getRedactMetadata, type PipelineOptions, type TransformOptions, type ValidateOptions, type StreamOptions, type MaskOptions, type RedactOptions, type EncryptOptions, type DecryptOptions, } from './decorators';
9
+ export { ETLService, type PipelineStep, type PipelineExecutionEvent, type PipelineEventHandler, } from './pipelines/etl.service';
10
+ export { PipelineBase } from './pipelines/pipeline.base';
11
+ export { PipelineBuilder, type PipelineStepConfig, type PipelineDefinition, type SerializedStep, } from './pipelines/pipeline.builder';
12
+ export { StreamService } from './pipelines/stream.service';
13
+ export { FlinkClient } from './streaming/flink/flink.client';
14
+ export { FlinkJob } from './streaming/flink/flink.job';
15
+ export { mapToFlinkOperator, createFlinkJobGraph, type FlinkOperator, type FlinkOperatorType, } from './streaming/flink/flink.operators';
16
+ export { StreamBuilder } from './streaming/stream.builder';
17
+ export { StreamProcessor, type WindowedBatch } from './streaming/stream.processor';
18
+ export { FlinkService, type DeployStreamResult } from './flink.service';
19
+ export { SchemaValidator, SchemaValidationException } from './validators/schema.validator';
20
+ export { TransformerService } from './transformers/transformer.service';
21
+ export { trimString, toLowerCase, toUpperCase, parseJson, stringifyJson, pick, omit, renameKeys, } from './transformers/built-in.transformers';
22
+ export { QualityService, type QualityCheckResult, type DataQualityReport, type DataProfile, type FieldProfile, type AnomalyResult, } from './quality/quality.service';
23
+ export type { DataSource, DataSink, ConnectorOptions } from './connectors/connector.interface';
24
+ export { CsvSource, CsvSink, type CsvSourceOptions, type CsvSinkOptions, } from './connectors/csv.connector';
25
+ export { HttpSource, HttpSink, type HttpSourceOptions, type HttpSinkOptions, } from './connectors/http.connector';
26
+ export { MemorySource, MemorySink } from './connectors/memory.connector';
27
+ export { TelemetryService, createPrometheusExporter, type PipelineSpan, type MetricPoint, type LineageEntry, type SpanExporter, type MetricExporter, } from './telemetry/telemetry';
28
+ export { SchemaFaker, PipelineTestHarness, MockSource, MockSink, type StepSnapshot, type PipelineRunResult, } from './testing';
29
+ export { Injectable } from '@hazeljs/core';
30
+ export type { PipelineStepMetadata, StreamMetadata, FlinkJobConfig, FlinkAuthConfig, RetryConfig, DLQConfig, } from './data.types';
31
+ export type { FlinkClientConfig, FlinkJobInfo } from './streaming/flink/flink.client';
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ /**
3
+ * @hazeljs/data - Data Processing & ETL for HazelJS
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SchemaFaker = exports.createPrometheusExporter = exports.TelemetryService = exports.MemorySink = exports.MemorySource = exports.HttpSink = exports.HttpSource = exports.CsvSink = exports.CsvSource = exports.QualityService = exports.renameKeys = exports.omit = exports.pick = exports.stringifyJson = exports.parseJson = exports.toUpperCase = exports.toLowerCase = exports.trimString = exports.TransformerService = exports.SchemaValidationException = exports.SchemaValidator = exports.FlinkService = exports.StreamProcessor = exports.StreamBuilder = exports.createFlinkJobGraph = exports.mapToFlinkOperator = exports.FlinkJob = exports.FlinkClient = exports.StreamService = exports.PipelineBuilder = exports.PipelineBase = exports.ETLService = exports.getRedactMetadata = exports.getMaskMetadata = exports.hasStreamMetadata = exports.getStreamMetadata = exports.getValidateMetadata = exports.getTransformMetadata = exports.hasPipelineMetadata = exports.getPipelineMetadata = exports.Decrypt = exports.Encrypt = exports.Redact = exports.Mask = exports.Stream = exports.Validate = exports.Transform = exports.Pipeline = exports.Schema = exports.DataModule = void 0;
7
+ exports.Injectable = exports.MockSink = exports.MockSource = exports.PipelineTestHarness = void 0;
8
+ require("reflect-metadata");
9
+ // ─── Module ──────────────────────────────────────────────────────────────────
10
+ var data_module_1 = require("./data.module");
11
+ Object.defineProperty(exports, "DataModule", { enumerable: true, get: function () { return data_module_1.DataModule; } });
12
+ // ─── Schema ──────────────────────────────────────────────────────────────────
13
+ var schema_1 = require("./schema/schema");
14
+ Object.defineProperty(exports, "Schema", { enumerable: true, get: function () { return schema_1.Schema; } });
15
+ // ─── Decorators ───────────────────────────────────────────────────────────────
16
+ var decorators_1 = require("./decorators");
17
+ Object.defineProperty(exports, "Pipeline", { enumerable: true, get: function () { return decorators_1.Pipeline; } });
18
+ Object.defineProperty(exports, "Transform", { enumerable: true, get: function () { return decorators_1.Transform; } });
19
+ Object.defineProperty(exports, "Validate", { enumerable: true, get: function () { return decorators_1.Validate; } });
20
+ Object.defineProperty(exports, "Stream", { enumerable: true, get: function () { return decorators_1.Stream; } });
21
+ // PII decorators
22
+ Object.defineProperty(exports, "Mask", { enumerable: true, get: function () { return decorators_1.Mask; } });
23
+ Object.defineProperty(exports, "Redact", { enumerable: true, get: function () { return decorators_1.Redact; } });
24
+ Object.defineProperty(exports, "Encrypt", { enumerable: true, get: function () { return decorators_1.Encrypt; } });
25
+ Object.defineProperty(exports, "Decrypt", { enumerable: true, get: function () { return decorators_1.Decrypt; } });
26
+ // Metadata helpers
27
+ Object.defineProperty(exports, "getPipelineMetadata", { enumerable: true, get: function () { return decorators_1.getPipelineMetadata; } });
28
+ Object.defineProperty(exports, "hasPipelineMetadata", { enumerable: true, get: function () { return decorators_1.hasPipelineMetadata; } });
29
+ Object.defineProperty(exports, "getTransformMetadata", { enumerable: true, get: function () { return decorators_1.getTransformMetadata; } });
30
+ Object.defineProperty(exports, "getValidateMetadata", { enumerable: true, get: function () { return decorators_1.getValidateMetadata; } });
31
+ Object.defineProperty(exports, "getStreamMetadata", { enumerable: true, get: function () { return decorators_1.getStreamMetadata; } });
32
+ Object.defineProperty(exports, "hasStreamMetadata", { enumerable: true, get: function () { return decorators_1.hasStreamMetadata; } });
33
+ Object.defineProperty(exports, "getMaskMetadata", { enumerable: true, get: function () { return decorators_1.getMaskMetadata; } });
34
+ Object.defineProperty(exports, "getRedactMetadata", { enumerable: true, get: function () { return decorators_1.getRedactMetadata; } });
35
+ // ─── Pipelines ────────────────────────────────────────────────────────────────
36
+ var etl_service_1 = require("./pipelines/etl.service");
37
+ Object.defineProperty(exports, "ETLService", { enumerable: true, get: function () { return etl_service_1.ETLService; } });
38
+ var pipeline_base_1 = require("./pipelines/pipeline.base");
39
+ Object.defineProperty(exports, "PipelineBase", { enumerable: true, get: function () { return pipeline_base_1.PipelineBase; } });
40
+ var pipeline_builder_1 = require("./pipelines/pipeline.builder");
41
+ Object.defineProperty(exports, "PipelineBuilder", { enumerable: true, get: function () { return pipeline_builder_1.PipelineBuilder; } });
42
+ var stream_service_1 = require("./pipelines/stream.service");
43
+ Object.defineProperty(exports, "StreamService", { enumerable: true, get: function () { return stream_service_1.StreamService; } });
44
+ // ─── Streaming ────────────────────────────────────────────────────────────────
45
+ var flink_client_1 = require("./streaming/flink/flink.client");
46
+ Object.defineProperty(exports, "FlinkClient", { enumerable: true, get: function () { return flink_client_1.FlinkClient; } });
47
+ var flink_job_1 = require("./streaming/flink/flink.job");
48
+ Object.defineProperty(exports, "FlinkJob", { enumerable: true, get: function () { return flink_job_1.FlinkJob; } });
49
+ var flink_operators_1 = require("./streaming/flink/flink.operators");
50
+ Object.defineProperty(exports, "mapToFlinkOperator", { enumerable: true, get: function () { return flink_operators_1.mapToFlinkOperator; } });
51
+ Object.defineProperty(exports, "createFlinkJobGraph", { enumerable: true, get: function () { return flink_operators_1.createFlinkJobGraph; } });
52
+ var stream_builder_1 = require("./streaming/stream.builder");
53
+ Object.defineProperty(exports, "StreamBuilder", { enumerable: true, get: function () { return stream_builder_1.StreamBuilder; } });
54
+ var stream_processor_1 = require("./streaming/stream.processor");
55
+ Object.defineProperty(exports, "StreamProcessor", { enumerable: true, get: function () { return stream_processor_1.StreamProcessor; } });
56
+ // ─── Services ─────────────────────────────────────────────────────────────────
57
+ var flink_service_1 = require("./flink.service");
58
+ Object.defineProperty(exports, "FlinkService", { enumerable: true, get: function () { return flink_service_1.FlinkService; } });
59
+ var schema_validator_1 = require("./validators/schema.validator");
60
+ Object.defineProperty(exports, "SchemaValidator", { enumerable: true, get: function () { return schema_validator_1.SchemaValidator; } });
61
+ Object.defineProperty(exports, "SchemaValidationException", { enumerable: true, get: function () { return schema_validator_1.SchemaValidationException; } });
62
+ var transformer_service_1 = require("./transformers/transformer.service");
63
+ Object.defineProperty(exports, "TransformerService", { enumerable: true, get: function () { return transformer_service_1.TransformerService; } });
64
+ var built_in_transformers_1 = require("./transformers/built-in.transformers");
65
+ Object.defineProperty(exports, "trimString", { enumerable: true, get: function () { return built_in_transformers_1.trimString; } });
66
+ Object.defineProperty(exports, "toLowerCase", { enumerable: true, get: function () { return built_in_transformers_1.toLowerCase; } });
67
+ Object.defineProperty(exports, "toUpperCase", { enumerable: true, get: function () { return built_in_transformers_1.toUpperCase; } });
68
+ Object.defineProperty(exports, "parseJson", { enumerable: true, get: function () { return built_in_transformers_1.parseJson; } });
69
+ Object.defineProperty(exports, "stringifyJson", { enumerable: true, get: function () { return built_in_transformers_1.stringifyJson; } });
70
+ Object.defineProperty(exports, "pick", { enumerable: true, get: function () { return built_in_transformers_1.pick; } });
71
+ Object.defineProperty(exports, "omit", { enumerable: true, get: function () { return built_in_transformers_1.omit; } });
72
+ Object.defineProperty(exports, "renameKeys", { enumerable: true, get: function () { return built_in_transformers_1.renameKeys; } });
73
+ var quality_service_1 = require("./quality/quality.service");
74
+ Object.defineProperty(exports, "QualityService", { enumerable: true, get: function () { return quality_service_1.QualityService; } });
75
+ var csv_connector_1 = require("./connectors/csv.connector");
76
+ Object.defineProperty(exports, "CsvSource", { enumerable: true, get: function () { return csv_connector_1.CsvSource; } });
77
+ Object.defineProperty(exports, "CsvSink", { enumerable: true, get: function () { return csv_connector_1.CsvSink; } });
78
+ var http_connector_1 = require("./connectors/http.connector");
79
+ Object.defineProperty(exports, "HttpSource", { enumerable: true, get: function () { return http_connector_1.HttpSource; } });
80
+ Object.defineProperty(exports, "HttpSink", { enumerable: true, get: function () { return http_connector_1.HttpSink; } });
81
+ var memory_connector_1 = require("./connectors/memory.connector");
82
+ Object.defineProperty(exports, "MemorySource", { enumerable: true, get: function () { return memory_connector_1.MemorySource; } });
83
+ Object.defineProperty(exports, "MemorySink", { enumerable: true, get: function () { return memory_connector_1.MemorySink; } });
84
+ // ─── Telemetry ────────────────────────────────────────────────────────────────
85
+ var telemetry_1 = require("./telemetry/telemetry");
86
+ Object.defineProperty(exports, "TelemetryService", { enumerable: true, get: function () { return telemetry_1.TelemetryService; } });
87
+ Object.defineProperty(exports, "createPrometheusExporter", { enumerable: true, get: function () { return telemetry_1.createPrometheusExporter; } });
88
+ // ─── Testing Utilities ────────────────────────────────────────────────────────
89
+ var testing_1 = require("./testing");
90
+ Object.defineProperty(exports, "SchemaFaker", { enumerable: true, get: function () { return testing_1.SchemaFaker; } });
91
+ Object.defineProperty(exports, "PipelineTestHarness", { enumerable: true, get: function () { return testing_1.PipelineTestHarness; } });
92
+ Object.defineProperty(exports, "MockSource", { enumerable: true, get: function () { return testing_1.MockSource; } });
93
+ Object.defineProperty(exports, "MockSink", { enumerable: true, get: function () { return testing_1.MockSink; } });
94
+ // ─── Re-exports ───────────────────────────────────────────────────────────────
95
+ var core_1 = require("@hazeljs/core");
96
+ Object.defineProperty(exports, "Injectable", { enumerable: true, get: function () { return core_1.Injectable; } });
@@ -0,0 +1,59 @@
1
+ import { SchemaValidator } from '../validators/schema.validator';
2
+ import type { BaseSchema } from '../schema/schema';
3
+ import type { RetryConfig, DLQConfig } from '../data.types';
4
+ export interface PipelineStep {
5
+ step: number;
6
+ name: string;
7
+ type: 'transform' | 'validate';
8
+ method: string;
9
+ schema?: BaseSchema;
10
+ when?: (data: unknown) => boolean;
11
+ retry?: RetryConfig;
12
+ timeoutMs?: number;
13
+ dlq?: DLQConfig;
14
+ }
15
+ export interface PipelineExecutionEvent {
16
+ pipeline: string;
17
+ step: number;
18
+ stepName: string;
19
+ durationMs: number;
20
+ success: boolean;
21
+ skipped?: boolean;
22
+ error?: string;
23
+ }
24
+ export type PipelineEventHandler = (event: PipelineExecutionEvent) => void;
25
+ /**
26
+ * ETL Service — orchestrates pipeline execution.
27
+ *
28
+ * Features:
29
+ * - Sequential step execution (output N → input N+1)
30
+ * - Conditional steps via `when` predicate
31
+ * - Per-step retry with fixed/exponential backoff
32
+ * - Per-step execution timeout
33
+ * - Dead letter queue (DLQ) for graceful failure handling
34
+ * - Pipeline event hooks for observability
35
+ */
36
+ export declare class ETLService {
37
+ private readonly schemaValidator;
38
+ private eventHandlers;
39
+ constructor(schemaValidator: SchemaValidator);
40
+ /** Register a handler called after each step completes or fails. */
41
+ onStepComplete(handler: PipelineEventHandler): void;
42
+ private emit;
43
+ extractSteps(instance: object): PipelineStep[];
44
+ execute<T = unknown>(pipelineInstance: object, input: unknown): Promise<T>;
45
+ /**
46
+ * Execute multiple items through the pipeline in parallel.
47
+ * Items that fail are routed to the DLQ if configured, otherwise they propagate.
48
+ */
49
+ executeBatch<T = unknown>(pipelineInstance: object, items: unknown[], options?: {
50
+ concurrency?: number;
51
+ }): Promise<{
52
+ results: T[];
53
+ errors: Array<{
54
+ item: unknown;
55
+ error: Error;
56
+ }>;
57
+ }>;
58
+ }
59
+ //# sourceMappingURL=etl.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"etl.service.d.ts","sourceRoot":"","sources":["../../src/pipelines/etl.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG5D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;AAiD3E;;;;;;;;;;GAUG;AACH,qBACa,UAAU;IAGT,OAAO,CAAC,QAAQ,CAAC,eAAe;IAF5C,OAAO,CAAC,aAAa,CAA8B;gBAEtB,eAAe,EAAE,eAAe;IAE7D,oEAAoE;IACpE,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAInD,OAAO,CAAC,IAAI;IAUZ,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE;IAyCxC,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAkFhF;;;OAGG;IACG,YAAY,CAAC,CAAC,GAAG,OAAO,EAC5B,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,OAAO,EAAE,EAChB,OAAO,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GACrC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,OAAO,CAAC;YAAC,KAAK,EAAE,KAAK,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;CAyB7E"}
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ETLService = void 0;
16
+ const core_1 = require("@hazeljs/core");
17
+ const decorators_1 = require("../decorators");
18
+ const schema_validator_1 = require("../validators/schema.validator");
19
+ const core_2 = __importDefault(require("@hazeljs/core"));
20
+ /** Runs a promise with a per-call timeout. */
21
+ async function withTimeout(promise, timeoutMs, stepName) {
22
+ return new Promise((resolve, reject) => {
23
+ const id = setTimeout(() => reject(new Error(`Step "${stepName}" timed out after ${timeoutMs}ms`)), timeoutMs);
24
+ promise.then((v) => {
25
+ clearTimeout(id);
26
+ resolve(v);
27
+ }, (e) => {
28
+ clearTimeout(id);
29
+ reject(e);
30
+ });
31
+ });
32
+ }
33
+ /** Executes fn with retry + exponential/fixed backoff. */
34
+ async function withRetry(fn, retry, stepName) {
35
+ const { attempts, delay = 500, backoff = 'fixed' } = retry;
36
+ let lastError = new Error('Unknown error');
37
+ for (let attempt = 1; attempt <= attempts; attempt++) {
38
+ try {
39
+ return await fn();
40
+ }
41
+ catch (err) {
42
+ lastError = err instanceof Error ? err : new Error(String(err));
43
+ if (attempt < attempts) {
44
+ const wait = backoff === 'exponential' ? delay * Math.pow(2, attempt - 1) : delay;
45
+ core_2.default.debug(`Step "${stepName}" attempt ${attempt} failed. Retrying in ${wait}ms...`);
46
+ await new Promise((r) => setTimeout(r, wait));
47
+ }
48
+ }
49
+ }
50
+ throw lastError;
51
+ }
52
+ /**
53
+ * ETL Service — orchestrates pipeline execution.
54
+ *
55
+ * Features:
56
+ * - Sequential step execution (output N → input N+1)
57
+ * - Conditional steps via `when` predicate
58
+ * - Per-step retry with fixed/exponential backoff
59
+ * - Per-step execution timeout
60
+ * - Dead letter queue (DLQ) for graceful failure handling
61
+ * - Pipeline event hooks for observability
62
+ */
63
+ let ETLService = class ETLService {
64
+ constructor(schemaValidator) {
65
+ this.schemaValidator = schemaValidator;
66
+ this.eventHandlers = [];
67
+ }
68
+ /** Register a handler called after each step completes or fails. */
69
+ onStepComplete(handler) {
70
+ this.eventHandlers.push(handler);
71
+ }
72
+ emit(event) {
73
+ for (const h of this.eventHandlers) {
74
+ try {
75
+ h(event);
76
+ }
77
+ catch {
78
+ /* noop */
79
+ }
80
+ }
81
+ }
82
+ extractSteps(instance) {
83
+ const steps = [];
84
+ const proto = Object.getPrototypeOf(instance);
85
+ for (const key of Object.getOwnPropertyNames(proto)) {
86
+ if (key === 'constructor')
87
+ continue;
88
+ const descriptor = Object.getOwnPropertyDescriptor(proto, key);
89
+ if (descriptor?.value && typeof descriptor.value === 'function') {
90
+ const transformMeta = (0, decorators_1.getTransformMetadata)(proto, key);
91
+ const validateMeta = (0, decorators_1.getValidateMetadata)(proto, key);
92
+ if (transformMeta) {
93
+ steps.push({
94
+ step: transformMeta.step,
95
+ name: transformMeta.name,
96
+ type: 'transform',
97
+ method: key,
98
+ when: transformMeta.when,
99
+ retry: transformMeta.retry,
100
+ timeoutMs: transformMeta.timeoutMs,
101
+ dlq: transformMeta.dlq,
102
+ });
103
+ }
104
+ else if (validateMeta) {
105
+ steps.push({
106
+ step: validateMeta.step,
107
+ name: validateMeta.name,
108
+ type: 'validate',
109
+ method: key,
110
+ schema: validateMeta.schema,
111
+ when: validateMeta.when,
112
+ retry: validateMeta.retry,
113
+ timeoutMs: validateMeta.timeoutMs,
114
+ dlq: validateMeta.dlq,
115
+ });
116
+ }
117
+ }
118
+ }
119
+ return steps.sort((a, b) => a.step - b.step);
120
+ }
121
+ async execute(pipelineInstance, input) {
122
+ const metadata = (0, decorators_1.getPipelineMetadata)(pipelineInstance.constructor);
123
+ const steps = this.extractSteps(pipelineInstance);
124
+ if (steps.length === 0) {
125
+ throw new Error(`Pipeline ${metadata?.name ?? 'unknown'} has no steps`);
126
+ }
127
+ core_2.default.debug(`Executing pipeline ${metadata?.name} with ${steps.length} steps`);
128
+ let data = input;
129
+ const instance = pipelineInstance;
130
+ for (const step of steps) {
131
+ const fn = instance[step.method];
132
+ if (typeof fn !== 'function') {
133
+ throw new Error(`Step ${step.name} method ${step.method} not found`);
134
+ }
135
+ // Conditional skip
136
+ if (step.when && !step.when(data)) {
137
+ core_2.default.debug(`Step "${step.name}" skipped (when predicate returned false)`);
138
+ this.emit({
139
+ pipeline: metadata?.name ?? 'unknown',
140
+ step: step.step,
141
+ stepName: step.name,
142
+ durationMs: 0,
143
+ success: true,
144
+ skipped: true,
145
+ });
146
+ continue;
147
+ }
148
+ const t0 = Date.now();
149
+ const runStep = async () => {
150
+ if (step.type === 'validate' && step.schema) {
151
+ data = this.schemaValidator.validate(step.schema, data);
152
+ }
153
+ const result = fn.call(pipelineInstance, data);
154
+ return result instanceof Promise ? await result : result;
155
+ };
156
+ try {
157
+ let stepPromise = step.retry ? withRetry(runStep, step.retry, step.name) : runStep();
158
+ if (step.timeoutMs) {
159
+ stepPromise = withTimeout(stepPromise, step.timeoutMs, step.name);
160
+ }
161
+ data = await stepPromise;
162
+ this.emit({
163
+ pipeline: metadata?.name ?? 'unknown',
164
+ step: step.step,
165
+ stepName: step.name,
166
+ durationMs: Date.now() - t0,
167
+ success: true,
168
+ });
169
+ }
170
+ catch (err) {
171
+ const error = err instanceof Error ? err : new Error(String(err));
172
+ this.emit({
173
+ pipeline: metadata?.name ?? 'unknown',
174
+ step: step.step,
175
+ stepName: step.name,
176
+ durationMs: Date.now() - t0,
177
+ success: false,
178
+ error: error.message,
179
+ });
180
+ if (step.dlq) {
181
+ core_2.default.debug(`Step "${step.name}" failed — routing to DLQ`);
182
+ await Promise.resolve(step.dlq.handler(data, error, step.name));
183
+ // Continue with unchanged data when routed to DLQ
184
+ }
185
+ else {
186
+ throw error;
187
+ }
188
+ }
189
+ }
190
+ return data;
191
+ }
192
+ /**
193
+ * Execute multiple items through the pipeline in parallel.
194
+ * Items that fail are routed to the DLQ if configured, otherwise they propagate.
195
+ */
196
+ async executeBatch(pipelineInstance, items, options = {}) {
197
+ const { concurrency = 10 } = options;
198
+ const results = [];
199
+ const errors = [];
200
+ for (let i = 0; i < items.length; i += concurrency) {
201
+ const batch = items.slice(i, i + concurrency);
202
+ const settled = await Promise.allSettled(batch.map((item) => this.execute(pipelineInstance, item)));
203
+ for (let j = 0; j < settled.length; j++) {
204
+ const s = settled[j];
205
+ if (s.status === 'fulfilled') {
206
+ results.push(s.value);
207
+ }
208
+ else {
209
+ errors.push({
210
+ item: batch[j],
211
+ error: s.reason instanceof Error ? s.reason : new Error(String(s.reason)),
212
+ });
213
+ }
214
+ }
215
+ }
216
+ return { results, errors };
217
+ }
218
+ };
219
+ exports.ETLService = ETLService;
220
+ exports.ETLService = ETLService = __decorate([
221
+ (0, core_1.Service)(),
222
+ __metadata("design:paramtypes", [schema_validator_1.SchemaValidator])
223
+ ], ETLService);
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=etl.service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"etl.service.test.d.ts","sourceRoot":"","sources":["../../src/pipelines/etl.service.test.ts"],"names":[],"mappings":""}