faros-airbyte-common 0.19.21 → 0.19.22
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.
|
@@ -11,10 +11,89 @@ export interface RoundRobinConfig {
|
|
|
11
11
|
bucket_total?: number;
|
|
12
12
|
[key: string]: any;
|
|
13
13
|
}
|
|
14
|
-
export declare function bucket(key: string, data: string, bucketTotal
|
|
14
|
+
export declare function bucket(key: string, data: string, bucketTotal?: number): number;
|
|
15
15
|
export declare function validateBucketingConfig(config: RoundRobinConfig, logger?: (message: string) => void): void;
|
|
16
16
|
export declare function nextBucketId(config: RoundRobinConfig, state?: BucketExecutionState): number;
|
|
17
17
|
export declare function applyRoundRobinBucketing(config: RoundRobinConfig, state?: BucketExecutionState, logger?: (message: string) => void): {
|
|
18
18
|
config: RoundRobinConfig;
|
|
19
19
|
state: BucketExecutionState;
|
|
20
20
|
};
|
|
21
|
+
export interface BucketingCreateOptions {
|
|
22
|
+
partitionKey: string;
|
|
23
|
+
config: RoundRobinConfig;
|
|
24
|
+
state?: BucketExecutionState;
|
|
25
|
+
logger?: (message: string) => void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Unified bucketing manager that handles validation, round-robin, and filtering.
|
|
29
|
+
*
|
|
30
|
+
* This class encapsulates all bucketing concerns in one place:
|
|
31
|
+
* - Validates bucketing configuration
|
|
32
|
+
* - Applies round-robin bucket execution if enabled
|
|
33
|
+
* - Provides simple filtering methods
|
|
34
|
+
* - Manages state for persistence
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* // Create manager (validates and applies round-robin automatically)
|
|
39
|
+
* const bucketing = Bucketing.create({
|
|
40
|
+
* partitionKey: 'farosai/airbyte-gitlab-source',
|
|
41
|
+
* config,
|
|
42
|
+
* state,
|
|
43
|
+
* logger
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* // Filter items
|
|
47
|
+
* const filtered = bucketing.filter(items, item => item.key);
|
|
48
|
+
*
|
|
49
|
+
* // Get state for persistence
|
|
50
|
+
* const newState = bucketing.getState();
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare class Bucketing {
|
|
54
|
+
private readonly partitionKey;
|
|
55
|
+
private readonly bucketId;
|
|
56
|
+
private readonly bucketTotal;
|
|
57
|
+
private readonly state;
|
|
58
|
+
private constructor();
|
|
59
|
+
/**
|
|
60
|
+
* Create and initialize bucketing manager.
|
|
61
|
+
* Automatically validates config and applies round-robin if enabled.
|
|
62
|
+
*
|
|
63
|
+
* @param options - Creation options
|
|
64
|
+
* @param options.partitionKey - Unique key for this connector (e.g., 'farosai/airbyte-gitlab-source')
|
|
65
|
+
* @param options.config - Configuration with bucketing parameters
|
|
66
|
+
* @param options.state - Previous state for round-robin execution
|
|
67
|
+
* @param options.logger - Optional logger function
|
|
68
|
+
* @returns Initialized Bucketing instance
|
|
69
|
+
*/
|
|
70
|
+
static create(options: BucketingCreateOptions): Bucketing;
|
|
71
|
+
private static isInBucket;
|
|
72
|
+
/**
|
|
73
|
+
* Filter an array of items based on bucketing.
|
|
74
|
+
*
|
|
75
|
+
* @param items - Array of items to filter
|
|
76
|
+
* @param getKey - Function to extract the partition key from each item
|
|
77
|
+
* @returns Filtered array containing only items in this bucket
|
|
78
|
+
*/
|
|
79
|
+
filter<T>(items: ReadonlyArray<T>, getKey: (item: T) => string): ReadonlyArray<T>;
|
|
80
|
+
/**
|
|
81
|
+
* Get updated state for persistence.
|
|
82
|
+
* This state should be saved and passed to the next sync run.
|
|
83
|
+
*
|
|
84
|
+
* @returns State object with bucket execution information
|
|
85
|
+
*/
|
|
86
|
+
getState(): BucketExecutionState;
|
|
87
|
+
/**
|
|
88
|
+
* Get current bucket ID being processed.
|
|
89
|
+
*
|
|
90
|
+
* @returns The bucket ID (1-indexed)
|
|
91
|
+
*/
|
|
92
|
+
getBucketId(): number;
|
|
93
|
+
/**
|
|
94
|
+
* Get total number of buckets.
|
|
95
|
+
*
|
|
96
|
+
* @returns The total bucket count
|
|
97
|
+
*/
|
|
98
|
+
getBucketTotal(): number;
|
|
99
|
+
}
|
package/lib/common/bucketing.js
CHANGED
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Bucketing = void 0;
|
|
6
7
|
exports.bucket = bucket;
|
|
7
8
|
exports.validateBucketingConfig = validateBucketingConfig;
|
|
8
9
|
exports.nextBucketId = nextBucketId;
|
|
@@ -10,7 +11,7 @@ exports.applyRoundRobinBucketing = applyRoundRobinBucketing;
|
|
|
10
11
|
const crypto_1 = require("crypto");
|
|
11
12
|
const verror_1 = __importDefault(require("verror"));
|
|
12
13
|
const bucket_set_1 = require("./bucket-set");
|
|
13
|
-
function bucket(key, data, bucketTotal) {
|
|
14
|
+
function bucket(key, data, bucketTotal = 1) {
|
|
14
15
|
const md5 = (0, crypto_1.createHmac)('md5', key);
|
|
15
16
|
md5.update(data);
|
|
16
17
|
const hex = md5.digest('hex').substring(0, 8);
|
|
@@ -64,4 +65,97 @@ function applyRoundRobinBucketing(config, state, logger) {
|
|
|
64
65
|
},
|
|
65
66
|
};
|
|
66
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Unified bucketing manager that handles validation, round-robin, and filtering.
|
|
70
|
+
*
|
|
71
|
+
* This class encapsulates all bucketing concerns in one place:
|
|
72
|
+
* - Validates bucketing configuration
|
|
73
|
+
* - Applies round-robin bucket execution if enabled
|
|
74
|
+
* - Provides simple filtering methods
|
|
75
|
+
* - Manages state for persistence
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* // Create manager (validates and applies round-robin automatically)
|
|
80
|
+
* const bucketing = Bucketing.create({
|
|
81
|
+
* partitionKey: 'farosai/airbyte-gitlab-source',
|
|
82
|
+
* config,
|
|
83
|
+
* state,
|
|
84
|
+
* logger
|
|
85
|
+
* });
|
|
86
|
+
*
|
|
87
|
+
* // Filter items
|
|
88
|
+
* const filtered = bucketing.filter(items, item => item.key);
|
|
89
|
+
*
|
|
90
|
+
* // Get state for persistence
|
|
91
|
+
* const newState = bucketing.getState();
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
class Bucketing {
|
|
95
|
+
constructor(partitionKey, bucketId, bucketTotal, state) {
|
|
96
|
+
this.partitionKey = partitionKey;
|
|
97
|
+
this.bucketId = bucketId;
|
|
98
|
+
this.bucketTotal = bucketTotal;
|
|
99
|
+
this.state = state !== null && state !== void 0 ? state : {};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Create and initialize bucketing manager.
|
|
103
|
+
* Automatically validates config and applies round-robin if enabled.
|
|
104
|
+
*
|
|
105
|
+
* @param options - Creation options
|
|
106
|
+
* @param options.partitionKey - Unique key for this connector (e.g., 'farosai/airbyte-gitlab-source')
|
|
107
|
+
* @param options.config - Configuration with bucketing parameters
|
|
108
|
+
* @param options.state - Previous state for round-robin execution
|
|
109
|
+
* @param options.logger - Optional logger function
|
|
110
|
+
* @returns Initialized Bucketing instance
|
|
111
|
+
*/
|
|
112
|
+
static create(options) {
|
|
113
|
+
var _a, _b;
|
|
114
|
+
const { partitionKey, config, state, logger } = options;
|
|
115
|
+
// Validate configuration
|
|
116
|
+
validateBucketingConfig(config, logger);
|
|
117
|
+
// Apply round-robin bucketing if enabled
|
|
118
|
+
const { config: newConfig, state: newState } = applyRoundRobinBucketing(config, state, logger);
|
|
119
|
+
return new Bucketing(partitionKey, (_a = newConfig.bucket_id) !== null && _a !== void 0 ? _a : 1, (_b = newConfig.bucket_total) !== null && _b !== void 0 ? _b : 1, newState);
|
|
120
|
+
}
|
|
121
|
+
static isInBucket(key, data, bucketId, bucketTotal) {
|
|
122
|
+
return bucket(key, data, bucketTotal) === bucketId;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Filter an array of items based on bucketing.
|
|
126
|
+
*
|
|
127
|
+
* @param items - Array of items to filter
|
|
128
|
+
* @param getKey - Function to extract the partition key from each item
|
|
129
|
+
* @returns Filtered array containing only items in this bucket
|
|
130
|
+
*/
|
|
131
|
+
filter(items, getKey) {
|
|
132
|
+
return items.filter((item) => Bucketing.isInBucket(this.partitionKey, getKey(item), this.bucketId, this.bucketTotal));
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get updated state for persistence.
|
|
136
|
+
* This state should be saved and passed to the next sync run.
|
|
137
|
+
*
|
|
138
|
+
* @returns State object with bucket execution information
|
|
139
|
+
*/
|
|
140
|
+
getState() {
|
|
141
|
+
return this.state;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get current bucket ID being processed.
|
|
145
|
+
*
|
|
146
|
+
* @returns The bucket ID (1-indexed)
|
|
147
|
+
*/
|
|
148
|
+
getBucketId() {
|
|
149
|
+
return this.bucketId;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Get total number of buckets.
|
|
153
|
+
*
|
|
154
|
+
* @returns The total bucket count
|
|
155
|
+
*/
|
|
156
|
+
getBucketTotal() {
|
|
157
|
+
return this.bucketTotal;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
exports.Bucketing = Bucketing;
|
|
67
161
|
//# sourceMappingURL=bucketing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bucketing.js","sourceRoot":"","sources":["../../src/common/bucketing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bucketing.js","sourceRoot":"","sources":["../../src/common/bucketing.ts"],"names":[],"mappings":"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"}
|
package/lib/common/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FarosClient } from 'faros-js-client';
|
|
2
|
-
export { bucket, validateBucketingConfig, nextBucketId, applyRoundRobinBucketing, RoundRobinConfig, } from './bucketing';
|
|
2
|
+
export { bucket, validateBucketingConfig, nextBucketId, applyRoundRobinBucketing, RoundRobinConfig, Bucketing, BucketExecutionState, } from './bucketing';
|
|
3
3
|
export { VCSFilter, VCSFilterConfig, VCSConfigFields, VCSEntityNames, VCSAdapter, RepoInclusion, } from './vcs-filter';
|
|
4
4
|
export interface FileDiff {
|
|
5
5
|
deletions: number;
|
package/lib/common/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.VCSFilter = exports.applyRoundRobinBucketing = exports.nextBucketId = exports.validateBucketingConfig = exports.bucket = void 0;
|
|
6
|
+
exports.VCSFilter = exports.Bucketing = exports.applyRoundRobinBucketing = exports.nextBucketId = exports.validateBucketingConfig = exports.bucket = void 0;
|
|
7
7
|
exports.normalizeString = normalizeString;
|
|
8
8
|
exports.calculateDateRange = calculateDateRange;
|
|
9
9
|
exports.collectReposByOrg = collectReposByOrg;
|
|
@@ -21,6 +21,7 @@ Object.defineProperty(exports, "bucket", { enumerable: true, get: function () {
|
|
|
21
21
|
Object.defineProperty(exports, "validateBucketingConfig", { enumerable: true, get: function () { return bucketing_1.validateBucketingConfig; } });
|
|
22
22
|
Object.defineProperty(exports, "nextBucketId", { enumerable: true, get: function () { return bucketing_1.nextBucketId; } });
|
|
23
23
|
Object.defineProperty(exports, "applyRoundRobinBucketing", { enumerable: true, get: function () { return bucketing_1.applyRoundRobinBucketing; } });
|
|
24
|
+
Object.defineProperty(exports, "Bucketing", { enumerable: true, get: function () { return bucketing_1.Bucketing; } });
|
|
24
25
|
var vcs_filter_1 = require("./vcs-filter");
|
|
25
26
|
Object.defineProperty(exports, "VCSFilter", { enumerable: true, get: function () { return vcs_filter_1.VCSFilter; } });
|
|
26
27
|
function normalizeString(str) {
|
package/lib/common/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"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"}
|