@hazeljs/data 0.2.0-beta.37

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 (71) hide show
  1. package/LICENSE +192 -0
  2. package/dist/data.module.d.ts +30 -0
  3. package/dist/data.module.d.ts.map +1 -0
  4. package/dist/data.module.js +120 -0
  5. package/dist/data.types.d.ts +51 -0
  6. package/dist/data.types.d.ts.map +1 -0
  7. package/dist/data.types.js +5 -0
  8. package/dist/decorators/index.d.ts +5 -0
  9. package/dist/decorators/index.d.ts.map +1 -0
  10. package/dist/decorators/index.js +17 -0
  11. package/dist/decorators/pipeline.decorator.d.ts +22 -0
  12. package/dist/decorators/pipeline.decorator.d.ts.map +1 -0
  13. package/dist/decorators/pipeline.decorator.js +42 -0
  14. package/dist/decorators/stream.decorator.d.ts +31 -0
  15. package/dist/decorators/stream.decorator.d.ts.map +1 -0
  16. package/dist/decorators/stream.decorator.js +48 -0
  17. package/dist/decorators/transform.decorator.d.ts +21 -0
  18. package/dist/decorators/transform.decorator.d.ts.map +1 -0
  19. package/dist/decorators/transform.decorator.js +37 -0
  20. package/dist/decorators/validate.decorator.d.ts +30 -0
  21. package/dist/decorators/validate.decorator.d.ts.map +1 -0
  22. package/dist/decorators/validate.decorator.js +45 -0
  23. package/dist/flink.service.d.ts +50 -0
  24. package/dist/flink.service.d.ts.map +1 -0
  25. package/dist/flink.service.js +86 -0
  26. package/dist/index.d.ts +26 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +68 -0
  29. package/dist/pipelines/etl.service.d.ts +20 -0
  30. package/dist/pipelines/etl.service.d.ts.map +1 -0
  31. package/dist/pipelines/etl.service.js +86 -0
  32. package/dist/pipelines/pipeline.base.d.ts +24 -0
  33. package/dist/pipelines/pipeline.base.d.ts.map +1 -0
  34. package/dist/pipelines/pipeline.base.js +29 -0
  35. package/dist/pipelines/pipeline.builder.d.ts +22 -0
  36. package/dist/pipelines/pipeline.builder.d.ts.map +1 -0
  37. package/dist/pipelines/pipeline.builder.js +62 -0
  38. package/dist/pipelines/stream.service.d.ts +12 -0
  39. package/dist/pipelines/stream.service.d.ts.map +1 -0
  40. package/dist/pipelines/stream.service.js +58 -0
  41. package/dist/quality/quality.service.d.ts +25 -0
  42. package/dist/quality/quality.service.d.ts.map +1 -0
  43. package/dist/quality/quality.service.js +87 -0
  44. package/dist/schema/schema.d.ts +47 -0
  45. package/dist/schema/schema.d.ts.map +1 -0
  46. package/dist/schema/schema.js +175 -0
  47. package/dist/streaming/flink/flink.client.d.ts +58 -0
  48. package/dist/streaming/flink/flink.client.d.ts.map +1 -0
  49. package/dist/streaming/flink/flink.client.js +104 -0
  50. package/dist/streaming/flink/flink.job.d.ts +28 -0
  51. package/dist/streaming/flink/flink.job.d.ts.map +1 -0
  52. package/dist/streaming/flink/flink.job.js +27 -0
  53. package/dist/streaming/flink/flink.operators.d.ts +35 -0
  54. package/dist/streaming/flink/flink.operators.d.ts.map +1 -0
  55. package/dist/streaming/flink/flink.operators.js +43 -0
  56. package/dist/streaming/stream.builder.d.ts +22 -0
  57. package/dist/streaming/stream.builder.d.ts.map +1 -0
  58. package/dist/streaming/stream.builder.js +50 -0
  59. package/dist/streaming/stream.processor.d.ts +12 -0
  60. package/dist/streaming/stream.processor.d.ts.map +1 -0
  61. package/dist/streaming/stream.processor.js +31 -0
  62. package/dist/transformers/built-in.transformers.d.ts +12 -0
  63. package/dist/transformers/built-in.transformers.d.ts.map +1 -0
  64. package/dist/transformers/built-in.transformers.js +75 -0
  65. package/dist/transformers/transformer.service.d.ts +14 -0
  66. package/dist/transformers/transformer.service.d.ts.map +1 -0
  67. package/dist/transformers/transformer.service.js +65 -0
  68. package/dist/validators/schema.validator.d.ts +21 -0
  69. package/dist/validators/schema.validator.d.ts.map +1 -0
  70. package/dist/validators/schema.validator.js +40 -0
  71. package/package.json +53 -0
@@ -0,0 +1,30 @@
1
+ import 'reflect-metadata';
2
+ import type { PipelineStepMetadata } from '../data.types';
3
+ import type { BaseSchema } from '../schema/schema';
4
+ export interface ValidateOptions {
5
+ step: number;
6
+ name: string;
7
+ schema: BaseSchema;
8
+ }
9
+ /**
10
+ * @Validate decorator - Schema validation with step ordering
11
+ * Validates data before passing to next step
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * @Validate({
16
+ * step: 2,
17
+ * name: 'validate',
18
+ * schema: Schema.object({
19
+ * email: Schema.string().email(),
20
+ * age: Schema.number().min(0).max(120),
21
+ * })
22
+ * })
23
+ * async validate(data: any) {
24
+ * return data; // Validation happens automatically
25
+ * }
26
+ * ```
27
+ */
28
+ export declare function Validate(options: ValidateOptions): MethodDecorator;
29
+ export declare function getValidateMetadata(target: object, propertyKey: string | symbol): PipelineStepMetadata | undefined;
30
+ //# sourceMappingURL=validate.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/validate.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe,CAclE;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,MAAM,GAC3B,oBAAoB,GAAG,SAAS,CAElC"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Validate = Validate;
7
+ exports.getValidateMetadata = getValidateMetadata;
8
+ require("reflect-metadata");
9
+ const core_1 = __importDefault(require("@hazeljs/core"));
10
+ const VALIDATE_METADATA_KEY = 'hazel:data:validate';
11
+ /**
12
+ * @Validate decorator - Schema validation with step ordering
13
+ * Validates data before passing to next step
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * @Validate({
18
+ * step: 2,
19
+ * name: 'validate',
20
+ * schema: Schema.object({
21
+ * email: Schema.string().email(),
22
+ * age: Schema.number().min(0).max(120),
23
+ * })
24
+ * })
25
+ * async validate(data: any) {
26
+ * return data; // Validation happens automatically
27
+ * }
28
+ * ```
29
+ */
30
+ function Validate(options) {
31
+ return (target, propertyKey, descriptor) => {
32
+ const metadata = {
33
+ step: options.step,
34
+ name: options.name,
35
+ type: 'validate',
36
+ schema: options.schema,
37
+ };
38
+ Reflect.defineMetadata(VALIDATE_METADATA_KEY, metadata, target, propertyKey);
39
+ core_1.default.debug(`Validate decorator applied: ${target.constructor.name}.${String(propertyKey)} step=${options.step}`);
40
+ return descriptor;
41
+ };
42
+ }
43
+ function getValidateMetadata(target, propertyKey) {
44
+ return Reflect.getMetadata(VALIDATE_METADATA_KEY, target, propertyKey);
45
+ }
@@ -0,0 +1,50 @@
1
+ import { FlinkClient } from './streaming/flink/flink.client';
2
+ import { StreamBuilder } from './streaming/stream.builder';
3
+ import { ETLService } from './pipelines/etl.service';
4
+ import type { FlinkJobConfig } from './data.types';
5
+ import type { FlinkClientConfig } from './streaming/flink/flink.client';
6
+ export interface DeployStreamResult {
7
+ jobId?: string;
8
+ status: string;
9
+ webUI?: string;
10
+ jobConfig: FlinkJobConfig;
11
+ jobGraph: unknown;
12
+ }
13
+ /**
14
+ * Flink Service - Deploy stream pipelines to Flink cluster
15
+ * Wraps FlinkClient and StreamBuilder for pipeline deployment
16
+ */
17
+ export declare class FlinkService {
18
+ private readonly etlService;
19
+ private readonly streamBuilder;
20
+ private flinkClient;
21
+ constructor(etlService: ETLService, streamBuilder: StreamBuilder);
22
+ configure(config: FlinkClientConfig): void;
23
+ getClient(): FlinkClient;
24
+ deployStream(pipeline: object, config?: Partial<FlinkJobConfig>): Promise<DeployStreamResult>;
25
+ getJobStatus(jobId: string): Promise<{
26
+ state: string;
27
+ startTime?: number;
28
+ duration?: number;
29
+ }>;
30
+ cancelJob(jobId: string): Promise<void>;
31
+ createSavepoint(jobId: string, savepointPath?: string): Promise<{
32
+ 'request-id': string;
33
+ }>;
34
+ stopJob(jobId: string, savepointPath?: string): Promise<{
35
+ 'request-id': string;
36
+ }>;
37
+ getClusterInfo(): Promise<{
38
+ taskmanagers?: number;
39
+ 'slots-total'?: number;
40
+ }>;
41
+ getTaskManagers(): Promise<unknown[]>;
42
+ listJobs(): Promise<{
43
+ id: string;
44
+ status: string;
45
+ startTime?: number;
46
+ endTime?: number;
47
+ duration?: number;
48
+ }[]>;
49
+ }
50
+ //# sourceMappingURL=flink.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flink.service.d.ts","sourceRoot":"","sources":["../src/flink.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,cAAc,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,qBACa,YAAY;IAIrB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAJhC,OAAO,CAAC,WAAW,CAA4B;gBAG5B,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa;IAG/C,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAI1C,SAAS,IAAI,WAAW;IASlB,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,kBAAkB,CAAC;IAyBxB,YAAY,CAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAI9D,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAIzF,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAIjF,cAAc,IAAI,OAAO,CAAC;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAI5E,eAAe,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAIrC,QAAQ,IAAI,OAAO,CACvB;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAC1F;CAGF"}
@@ -0,0 +1,86 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.FlinkService = void 0;
13
+ const core_1 = require("@hazeljs/core");
14
+ const flink_client_1 = require("./streaming/flink/flink.client");
15
+ const stream_builder_1 = require("./streaming/stream.builder");
16
+ const etl_service_1 = require("./pipelines/etl.service");
17
+ /**
18
+ * Flink Service - Deploy stream pipelines to Flink cluster
19
+ * Wraps FlinkClient and StreamBuilder for pipeline deployment
20
+ */
21
+ let FlinkService = class FlinkService {
22
+ constructor(etlService, streamBuilder) {
23
+ this.etlService = etlService;
24
+ this.streamBuilder = streamBuilder;
25
+ this.flinkClient = null;
26
+ }
27
+ configure(config) {
28
+ this.flinkClient = new flink_client_1.FlinkClient(config);
29
+ }
30
+ getClient() {
31
+ if (!this.flinkClient) {
32
+ throw new Error('FlinkService not configured. Call configure() or use DataModule.forRoot() with flink options.');
33
+ }
34
+ return this.flinkClient;
35
+ }
36
+ async deployStream(pipeline, config) {
37
+ const { jobConfig, jobGraph } = this.streamBuilder.buildConfig(pipeline, config);
38
+ const client = this.getClient();
39
+ try {
40
+ const jobId = await client.submitJob(jobConfig, jobGraph);
41
+ return {
42
+ jobId,
43
+ status: 'submitted',
44
+ webUI: `${client.url}/#/job/${jobId}`,
45
+ jobConfig,
46
+ jobGraph,
47
+ };
48
+ }
49
+ catch {
50
+ // submitJob throws - return config for manual deployment
51
+ return {
52
+ status: 'config_generated',
53
+ jobConfig,
54
+ jobGraph,
55
+ webUI: client.url,
56
+ };
57
+ }
58
+ }
59
+ async getJobStatus(jobId) {
60
+ return this.getClient().getJobStatus(jobId);
61
+ }
62
+ async cancelJob(jobId) {
63
+ return this.getClient().cancelJob(jobId);
64
+ }
65
+ async createSavepoint(jobId, savepointPath) {
66
+ return this.getClient().createSavepoint(jobId, savepointPath);
67
+ }
68
+ async stopJob(jobId, savepointPath) {
69
+ return this.getClient().stopJob(jobId, savepointPath);
70
+ }
71
+ async getClusterInfo() {
72
+ return this.getClient().getClusterInfo();
73
+ }
74
+ async getTaskManagers() {
75
+ return this.getClient().getTaskManagers();
76
+ }
77
+ async listJobs() {
78
+ return this.getClient().listJobs();
79
+ }
80
+ };
81
+ exports.FlinkService = FlinkService;
82
+ exports.FlinkService = FlinkService = __decorate([
83
+ (0, core_1.Injectable)(),
84
+ __metadata("design:paramtypes", [etl_service_1.ETLService,
85
+ stream_builder_1.StreamBuilder])
86
+ ], FlinkService);
@@ -0,0 +1,26 @@
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, ObjectSchema, SchemaValidationError, } from './schema/schema';
8
+ export { Pipeline, Transform, Validate, Stream, getPipelineMetadata, hasPipelineMetadata, getTransformMetadata, getValidateMetadata, getStreamMetadata, hasStreamMetadata, type PipelineOptions, type TransformOptions, type ValidateOptions, type StreamOptions, } from './decorators';
9
+ export { ETLService, type PipelineStep } from './pipelines/etl.service';
10
+ export { PipelineBase } from './pipelines/pipeline.base';
11
+ export { PipelineBuilder, type PipelineStepConfig } 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 } 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, } from './quality/quality.service';
23
+ export { Injectable } from '@hazeljs/core';
24
+ export type { PipelineStepMetadata, StreamMetadata, FlinkJobConfig, FlinkAuthConfig, } from './data.types';
25
+ export type { FlinkClientConfig, FlinkJobInfo } from './streaming/flink/flink.client';
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,kBAAkB,CAAC;AAG1B,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGnE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,YAAY,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,KAAK,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,aAAa,EACb,IAAI,EACJ,IAAI,EACJ,UAAU,GACX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ /**
3
+ * @hazeljs/data - Data Processing & ETL for HazelJS
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Injectable = 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.hasStreamMetadata = exports.getStreamMetadata = exports.getValidateMetadata = exports.getTransformMetadata = exports.hasPipelineMetadata = exports.getPipelineMetadata = exports.Stream = exports.Validate = exports.Transform = exports.Pipeline = exports.Schema = exports.DataModule = void 0;
7
+ require("reflect-metadata");
8
+ // Module
9
+ var data_module_1 = require("./data.module");
10
+ Object.defineProperty(exports, "DataModule", { enumerable: true, get: function () { return data_module_1.DataModule; } });
11
+ // Schema
12
+ var schema_1 = require("./schema/schema");
13
+ Object.defineProperty(exports, "Schema", { enumerable: true, get: function () { return schema_1.Schema; } });
14
+ // Decorators
15
+ var decorators_1 = require("./decorators");
16
+ Object.defineProperty(exports, "Pipeline", { enumerable: true, get: function () { return decorators_1.Pipeline; } });
17
+ Object.defineProperty(exports, "Transform", { enumerable: true, get: function () { return decorators_1.Transform; } });
18
+ Object.defineProperty(exports, "Validate", { enumerable: true, get: function () { return decorators_1.Validate; } });
19
+ Object.defineProperty(exports, "Stream", { enumerable: true, get: function () { return decorators_1.Stream; } });
20
+ Object.defineProperty(exports, "getPipelineMetadata", { enumerable: true, get: function () { return decorators_1.getPipelineMetadata; } });
21
+ Object.defineProperty(exports, "hasPipelineMetadata", { enumerable: true, get: function () { return decorators_1.hasPipelineMetadata; } });
22
+ Object.defineProperty(exports, "getTransformMetadata", { enumerable: true, get: function () { return decorators_1.getTransformMetadata; } });
23
+ Object.defineProperty(exports, "getValidateMetadata", { enumerable: true, get: function () { return decorators_1.getValidateMetadata; } });
24
+ Object.defineProperty(exports, "getStreamMetadata", { enumerable: true, get: function () { return decorators_1.getStreamMetadata; } });
25
+ Object.defineProperty(exports, "hasStreamMetadata", { enumerable: true, get: function () { return decorators_1.hasStreamMetadata; } });
26
+ // Pipelines
27
+ var etl_service_1 = require("./pipelines/etl.service");
28
+ Object.defineProperty(exports, "ETLService", { enumerable: true, get: function () { return etl_service_1.ETLService; } });
29
+ var pipeline_base_1 = require("./pipelines/pipeline.base");
30
+ Object.defineProperty(exports, "PipelineBase", { enumerable: true, get: function () { return pipeline_base_1.PipelineBase; } });
31
+ var pipeline_builder_1 = require("./pipelines/pipeline.builder");
32
+ Object.defineProperty(exports, "PipelineBuilder", { enumerable: true, get: function () { return pipeline_builder_1.PipelineBuilder; } });
33
+ var stream_service_1 = require("./pipelines/stream.service");
34
+ Object.defineProperty(exports, "StreamService", { enumerable: true, get: function () { return stream_service_1.StreamService; } });
35
+ // Streaming
36
+ var flink_client_1 = require("./streaming/flink/flink.client");
37
+ Object.defineProperty(exports, "FlinkClient", { enumerable: true, get: function () { return flink_client_1.FlinkClient; } });
38
+ var flink_job_1 = require("./streaming/flink/flink.job");
39
+ Object.defineProperty(exports, "FlinkJob", { enumerable: true, get: function () { return flink_job_1.FlinkJob; } });
40
+ var flink_operators_1 = require("./streaming/flink/flink.operators");
41
+ Object.defineProperty(exports, "mapToFlinkOperator", { enumerable: true, get: function () { return flink_operators_1.mapToFlinkOperator; } });
42
+ Object.defineProperty(exports, "createFlinkJobGraph", { enumerable: true, get: function () { return flink_operators_1.createFlinkJobGraph; } });
43
+ var stream_builder_1 = require("./streaming/stream.builder");
44
+ Object.defineProperty(exports, "StreamBuilder", { enumerable: true, get: function () { return stream_builder_1.StreamBuilder; } });
45
+ var stream_processor_1 = require("./streaming/stream.processor");
46
+ Object.defineProperty(exports, "StreamProcessor", { enumerable: true, get: function () { return stream_processor_1.StreamProcessor; } });
47
+ // Services
48
+ var flink_service_1 = require("./flink.service");
49
+ Object.defineProperty(exports, "FlinkService", { enumerable: true, get: function () { return flink_service_1.FlinkService; } });
50
+ var schema_validator_1 = require("./validators/schema.validator");
51
+ Object.defineProperty(exports, "SchemaValidator", { enumerable: true, get: function () { return schema_validator_1.SchemaValidator; } });
52
+ Object.defineProperty(exports, "SchemaValidationException", { enumerable: true, get: function () { return schema_validator_1.SchemaValidationException; } });
53
+ var transformer_service_1 = require("./transformers/transformer.service");
54
+ Object.defineProperty(exports, "TransformerService", { enumerable: true, get: function () { return transformer_service_1.TransformerService; } });
55
+ var built_in_transformers_1 = require("./transformers/built-in.transformers");
56
+ Object.defineProperty(exports, "trimString", { enumerable: true, get: function () { return built_in_transformers_1.trimString; } });
57
+ Object.defineProperty(exports, "toLowerCase", { enumerable: true, get: function () { return built_in_transformers_1.toLowerCase; } });
58
+ Object.defineProperty(exports, "toUpperCase", { enumerable: true, get: function () { return built_in_transformers_1.toUpperCase; } });
59
+ Object.defineProperty(exports, "parseJson", { enumerable: true, get: function () { return built_in_transformers_1.parseJson; } });
60
+ Object.defineProperty(exports, "stringifyJson", { enumerable: true, get: function () { return built_in_transformers_1.stringifyJson; } });
61
+ Object.defineProperty(exports, "pick", { enumerable: true, get: function () { return built_in_transformers_1.pick; } });
62
+ Object.defineProperty(exports, "omit", { enumerable: true, get: function () { return built_in_transformers_1.omit; } });
63
+ Object.defineProperty(exports, "renameKeys", { enumerable: true, get: function () { return built_in_transformers_1.renameKeys; } });
64
+ var quality_service_1 = require("./quality/quality.service");
65
+ Object.defineProperty(exports, "QualityService", { enumerable: true, get: function () { return quality_service_1.QualityService; } });
66
+ // Re-export Injectable
67
+ var core_1 = require("@hazeljs/core");
68
+ Object.defineProperty(exports, "Injectable", { enumerable: true, get: function () { return core_1.Injectable; } });
@@ -0,0 +1,20 @@
1
+ import { SchemaValidator } from '../validators/schema.validator';
2
+ import type { BaseSchema } from '../schema/schema';
3
+ export interface PipelineStep {
4
+ step: number;
5
+ name: string;
6
+ type: 'transform' | 'validate';
7
+ method: string;
8
+ schema?: BaseSchema;
9
+ }
10
+ /**
11
+ * ETL Service - Orchestrates pipeline execution
12
+ * Executes steps sequentially: output from step N → input to step N+1
13
+ */
14
+ export declare class ETLService {
15
+ private readonly schemaValidator;
16
+ constructor(schemaValidator: SchemaValidator);
17
+ extractSteps(instance: object): PipelineStep[];
18
+ execute<T = unknown>(pipelineInstance: object, input: unknown): Promise<T>;
19
+ }
20
+ //# 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;AAGnD,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;CACrB;AAED;;;GAGG;AACH,qBACa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,eAAe;IAE7D,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE;IAiCxC,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CA6BjF"}
@@ -0,0 +1,86 @@
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
+ /**
21
+ * ETL Service - Orchestrates pipeline execution
22
+ * Executes steps sequentially: output from step N → input to step N+1
23
+ */
24
+ let ETLService = class ETLService {
25
+ constructor(schemaValidator) {
26
+ this.schemaValidator = schemaValidator;
27
+ }
28
+ extractSteps(instance) {
29
+ const steps = [];
30
+ const proto = Object.getPrototypeOf(instance);
31
+ for (const key of Object.getOwnPropertyNames(proto)) {
32
+ if (key === 'constructor')
33
+ continue;
34
+ const descriptor = Object.getOwnPropertyDescriptor(proto, key);
35
+ if (descriptor?.value && typeof descriptor.value === 'function') {
36
+ const transformMeta = (0, decorators_1.getTransformMetadata)(proto, key);
37
+ const validateMeta = (0, decorators_1.getValidateMetadata)(proto, key);
38
+ if (transformMeta) {
39
+ steps.push({
40
+ step: transformMeta.step,
41
+ name: transformMeta.name,
42
+ type: 'transform',
43
+ method: key,
44
+ });
45
+ }
46
+ else if (validateMeta) {
47
+ steps.push({
48
+ step: validateMeta.step,
49
+ name: validateMeta.name,
50
+ type: 'validate',
51
+ method: key,
52
+ schema: validateMeta.schema,
53
+ });
54
+ }
55
+ }
56
+ }
57
+ return steps.sort((a, b) => a.step - b.step);
58
+ }
59
+ async execute(pipelineInstance, input) {
60
+ const metadata = (0, decorators_1.getPipelineMetadata)(pipelineInstance.constructor);
61
+ const steps = this.extractSteps(pipelineInstance);
62
+ if (steps.length === 0) {
63
+ throw new Error(`Pipeline ${metadata?.name ?? 'unknown'} has no steps`);
64
+ }
65
+ core_2.default.debug(`Executing pipeline ${metadata?.name} with ${steps.length} steps`);
66
+ let data = input;
67
+ const instance = pipelineInstance;
68
+ for (const step of steps) {
69
+ const fn = instance[step.method];
70
+ if (typeof fn !== 'function') {
71
+ throw new Error(`Step ${step.name} method ${step.method} not found`);
72
+ }
73
+ if (step.type === 'validate' && step.schema) {
74
+ data = this.schemaValidator.validate(step.schema, data);
75
+ }
76
+ const result = fn.call(pipelineInstance, data);
77
+ data = result instanceof Promise ? await result : result;
78
+ }
79
+ return data;
80
+ }
81
+ };
82
+ exports.ETLService = ETLService;
83
+ exports.ETLService = ETLService = __decorate([
84
+ (0, core_1.Injectable)(),
85
+ __metadata("design:paramtypes", [schema_validator_1.SchemaValidator])
86
+ ], ETLService);
@@ -0,0 +1,24 @@
1
+ import { ETLService } from './etl.service';
2
+ /**
3
+ * Base class for pipelines - provides execute() method
4
+ * Extend this when using @Pipeline decorator for convenient execution
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * @Pipeline('user-enrichment')
9
+ * @Injectable()
10
+ * export class UserEnrichmentPipeline extends PipelineBase {
11
+ * constructor(etlService: ETLService) {
12
+ * super(etlService);
13
+ * }
14
+ * @Transform({ step: 1, name: 'normalize' }) async normalize(data) { ... }
15
+ * }
16
+ * // Usage: await pipeline.execute(rawUserData);
17
+ * ```
18
+ */
19
+ export declare abstract class PipelineBase {
20
+ protected readonly etlService: ETLService;
21
+ constructor(etlService: ETLService);
22
+ execute<T = unknown>(input: unknown): Promise<T>;
23
+ }
24
+ //# sourceMappingURL=pipeline.base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.base.d.ts","sourceRoot":"","sources":["../../src/pipelines/pipeline.base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;;;;;;;;;;;;;;GAgBG;AACH,8BAAsB,YAAY;IACpB,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU;gBAAtB,UAAU,EAAE,UAAU;IAE/C,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CAGvD"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PipelineBase = void 0;
4
+ /**
5
+ * Base class for pipelines - provides execute() method
6
+ * Extend this when using @Pipeline decorator for convenient execution
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * @Pipeline('user-enrichment')
11
+ * @Injectable()
12
+ * export class UserEnrichmentPipeline extends PipelineBase {
13
+ * constructor(etlService: ETLService) {
14
+ * super(etlService);
15
+ * }
16
+ * @Transform({ step: 1, name: 'normalize' }) async normalize(data) { ... }
17
+ * }
18
+ * // Usage: await pipeline.execute(rawUserData);
19
+ * ```
20
+ */
21
+ class PipelineBase {
22
+ constructor(etlService) {
23
+ this.etlService = etlService;
24
+ }
25
+ async execute(input) {
26
+ return this.etlService.execute(this, input);
27
+ }
28
+ }
29
+ exports.PipelineBase = PipelineBase;
@@ -0,0 +1,22 @@
1
+ export interface PipelineStepConfig {
2
+ name: string;
3
+ transform?: (data: unknown) => unknown | Promise<unknown>;
4
+ validate?: (data: unknown) => unknown;
5
+ }
6
+ /**
7
+ * Pipeline Builder - DSL for building pipelines programmatically
8
+ */
9
+ export declare class PipelineBuilder {
10
+ private steps;
11
+ private name;
12
+ setName(name: string): this;
13
+ addTransform(name: string, transform: (data: unknown) => unknown | Promise<unknown>): this;
14
+ addValidate(name: string, validate: (data: unknown) => unknown): this;
15
+ execute<T = unknown>(input: unknown): Promise<T>;
16
+ build(): {
17
+ name: string;
18
+ steps: PipelineStepConfig[];
19
+ };
20
+ reset(): this;
21
+ }
22
+ //# sourceMappingURL=pipeline.builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.builder.d.ts","sourceRoot":"","sources":["../../src/pipelines/pipeline.builder.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;CACvC;AAED;;GAEG;AACH,qBACa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,IAAI,CAAsB;IAElC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IAK1F,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GAAG,IAAI;IAK/D,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAkBtD,KAAK,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,kBAAkB,EAAE,CAAA;KAAE;IAItD,KAAK,IAAI,IAAI;CAKd"}
@@ -0,0 +1,62 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PipelineBuilder = void 0;
13
+ const core_1 = require("@hazeljs/core");
14
+ const core_2 = __importDefault(require("@hazeljs/core"));
15
+ /**
16
+ * Pipeline Builder - DSL for building pipelines programmatically
17
+ */
18
+ let PipelineBuilder = class PipelineBuilder {
19
+ constructor() {
20
+ this.steps = [];
21
+ this.name = 'unnamed-pipeline';
22
+ }
23
+ setName(name) {
24
+ this.name = name;
25
+ return this;
26
+ }
27
+ addTransform(name, transform) {
28
+ this.steps.push({ name, transform });
29
+ return this;
30
+ }
31
+ addValidate(name, validate) {
32
+ this.steps.push({ name, validate });
33
+ return this;
34
+ }
35
+ async execute(input) {
36
+ let data = input;
37
+ for (let i = 0; i < this.steps.length; i++) {
38
+ const step = this.steps[i];
39
+ core_2.default.debug(`Pipeline ${this.name}: step ${i + 1} - ${step.name}`);
40
+ if (step.transform) {
41
+ const result = step.transform(data);
42
+ data = result instanceof Promise ? await result : result;
43
+ }
44
+ else if (step.validate) {
45
+ data = step.validate(data);
46
+ }
47
+ }
48
+ return data;
49
+ }
50
+ build() {
51
+ return { name: this.name, steps: [...this.steps] };
52
+ }
53
+ reset() {
54
+ this.steps = [];
55
+ this.name = 'unnamed-pipeline';
56
+ return this;
57
+ }
58
+ };
59
+ exports.PipelineBuilder = PipelineBuilder;
60
+ exports.PipelineBuilder = PipelineBuilder = __decorate([
61
+ (0, core_1.Injectable)()
62
+ ], PipelineBuilder);
@@ -0,0 +1,12 @@
1
+ import { ETLService } from './etl.service';
2
+ /**
3
+ * Stream Service - Streaming pipeline execution
4
+ * Processes data through pipeline steps (for in-process streaming, not Flink deployment)
5
+ */
6
+ export declare class StreamService {
7
+ private readonly etlService;
8
+ constructor(etlService: ETLService);
9
+ processStream<T = unknown>(pipelineInstance: object, source: AsyncIterable<unknown>): AsyncGenerator<T>;
10
+ processBatch<T = unknown>(pipelineInstance: object, items: unknown[]): Promise<T[]>;
11
+ }
12
+ //# sourceMappingURL=stream.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.service.d.ts","sourceRoot":"","sources":["../../src/pipelines/stream.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C;;;GAGG;AACH,qBACa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAE5C,aAAa,CAAC,CAAC,GAAG,OAAO,EAC9B,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,GAC7B,cAAc,CAAC,CAAC,CAAC;IAmBd,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;CAQ1F"}