@whaly/connector-sdk 0.3.2 → 0.3.3
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/dist/index.d.mts +5 -6
- package/dist/index.d.ts +5 -6
- package/dist/index.js +15 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +14 -17
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1550,6 +1550,9 @@ var MissingSchemaError = class extends Error {
|
|
|
1550
1550
|
}
|
|
1551
1551
|
};
|
|
1552
1552
|
|
|
1553
|
+
// src/sdk/models/target/models.ts
|
|
1554
|
+
var DEFAULT_SYNCED_AT_COLUMN = "_wly_synced_at";
|
|
1555
|
+
|
|
1553
1556
|
// src/sdk/models/target/record.ts
|
|
1554
1557
|
var removeParasiteProperties = (record, schema) => {
|
|
1555
1558
|
const schemaKeys = Object.keys(schema);
|
|
@@ -1560,10 +1563,10 @@ var removeParasiteProperties = (record, schema) => {
|
|
|
1560
1563
|
});
|
|
1561
1564
|
return record;
|
|
1562
1565
|
};
|
|
1563
|
-
var addWhalyFields = (record, batchDate) => {
|
|
1566
|
+
var addWhalyFields = (record, batchDate, columnName = DEFAULT_SYNCED_AT_COLUMN) => {
|
|
1564
1567
|
return {
|
|
1565
1568
|
...record,
|
|
1566
|
-
|
|
1569
|
+
[columnName]: batchDate
|
|
1567
1570
|
};
|
|
1568
1571
|
};
|
|
1569
1572
|
|
|
@@ -1832,6 +1835,7 @@ import Bluebird3 from "bluebird";
|
|
|
1832
1835
|
var semaphore = new Semaphore(1);
|
|
1833
1836
|
var ITarget = class _ITarget {
|
|
1834
1837
|
config;
|
|
1838
|
+
syncedAtColumnName;
|
|
1835
1839
|
schemaHooks;
|
|
1836
1840
|
syncTime;
|
|
1837
1841
|
stateProvider;
|
|
@@ -1847,6 +1851,7 @@ var ITarget = class _ITarget {
|
|
|
1847
1851
|
ajv;
|
|
1848
1852
|
constructor(config, stateProvider) {
|
|
1849
1853
|
this.config = config;
|
|
1854
|
+
this.syncedAtColumnName = config.syncedAtColumnName ?? DEFAULT_SYNCED_AT_COLUMN;
|
|
1850
1855
|
this.stateProvider = stateProvider;
|
|
1851
1856
|
this.schemaHooks = [];
|
|
1852
1857
|
this.streams = {};
|
|
@@ -1867,8 +1872,8 @@ var ITarget = class _ITarget {
|
|
|
1867
1872
|
analyzeSchemaChanges = (previousSchema, newSchema, streamId) => {
|
|
1868
1873
|
const changes = [];
|
|
1869
1874
|
let hasBreakingChanges = false;
|
|
1870
|
-
const prevColumns = new Set(Object.keys(previousSchema).filter((col) =>
|
|
1871
|
-
const newColumns = new Set(Object.keys(newSchema).filter((col) =>
|
|
1875
|
+
const prevColumns = new Set(Object.keys(previousSchema).filter((col) => col !== this.syncedAtColumnName));
|
|
1876
|
+
const newColumns = new Set(Object.keys(newSchema).filter((col) => col !== this.syncedAtColumnName));
|
|
1872
1877
|
for (const columnName of newColumns) {
|
|
1873
1878
|
if (!prevColumns.has(columnName)) {
|
|
1874
1879
|
changes.push(`Added column '${columnName}'`);
|
|
@@ -1926,7 +1931,7 @@ var ITarget = class _ITarget {
|
|
|
1926
1931
|
return;
|
|
1927
1932
|
}
|
|
1928
1933
|
const recordWithoutParasiteProperties = removeParasiteProperties(record, schema);
|
|
1929
|
-
const recordWithWhalyFields = addWhalyFields(recordWithoutParasiteProperties, stream.getBatchDate());
|
|
1934
|
+
const recordWithWhalyFields = addWhalyFields(recordWithoutParasiteProperties, stream.getBatchDate(), this.syncedAtColumnName);
|
|
1930
1935
|
const validateFn = stream.getCompiledValidateFn();
|
|
1931
1936
|
if (validateFn && !validateFn(recordWithWhalyFields)) {
|
|
1932
1937
|
throw new SchemaValidationError(`Stream: ${streamId} - Record is not valid according to schema.
|
|
@@ -2009,7 +2014,7 @@ var ITarget = class _ITarget {
|
|
|
2009
2014
|
throw new MissingSchemaError(`Stream: ${streamId} - Received SCHEMA message before stream state was initialized.`, streamId);
|
|
2010
2015
|
}
|
|
2011
2016
|
const schema = flattenSchema(streamId, message.schema);
|
|
2012
|
-
schema[
|
|
2017
|
+
schema[this.syncedAtColumnName] = {
|
|
2013
2018
|
format: "date-time",
|
|
2014
2019
|
type: ["null", "string"]
|
|
2015
2020
|
};
|
|
@@ -2514,7 +2519,6 @@ async function* rowGeneratorFromCsv(path2, fileConfig) {
|
|
|
2514
2519
|
csvOptions.headers = false;
|
|
2515
2520
|
}
|
|
2516
2521
|
const csvStream = csv(csvOptions);
|
|
2517
|
-
const syncedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
2518
2522
|
let initialReadStream;
|
|
2519
2523
|
let finalInputStream;
|
|
2520
2524
|
const encodingToUse = fileConfig.encoding ? fileConfig.encoding.toLowerCase() : null;
|
|
@@ -2529,7 +2533,7 @@ async function* rowGeneratorFromCsv(path2, fileConfig) {
|
|
|
2529
2533
|
try {
|
|
2530
2534
|
for await (const row of Readable.from(csvStream)) {
|
|
2531
2535
|
if (!isGeneratorConfigArray) {
|
|
2532
|
-
const rowData =
|
|
2536
|
+
const rowData = {};
|
|
2533
2537
|
for (const key of configKeys) {
|
|
2534
2538
|
const keyGenerator = fileConfig.fields[key.trim()];
|
|
2535
2539
|
if (!keyGenerator) continue;
|
|
@@ -2539,7 +2543,7 @@ async function* rowGeneratorFromCsv(path2, fileConfig) {
|
|
|
2539
2543
|
yield rowData;
|
|
2540
2544
|
} else {
|
|
2541
2545
|
const rowKeys = Object.keys(row);
|
|
2542
|
-
const rowData =
|
|
2546
|
+
const rowData = {};
|
|
2543
2547
|
for (let i = 0; i < rowKeys.length; i++) {
|
|
2544
2548
|
const keyGenerator = fileConfig.fields[i];
|
|
2545
2549
|
if (!keyGenerator) continue;
|
|
@@ -2842,7 +2846,6 @@ async function processFileStreams(entries, tapState, target) {
|
|
|
2842
2846
|
var CsvExtractionConfigBuilder = class _CsvExtractionConfigBuilder {
|
|
2843
2847
|
_separator = ",";
|
|
2844
2848
|
_encoding;
|
|
2845
|
-
_addSyncedAtColumn;
|
|
2846
2849
|
_fields;
|
|
2847
2850
|
_fieldsMode;
|
|
2848
2851
|
_replicationMethod;
|
|
@@ -2858,10 +2861,6 @@ var CsvExtractionConfigBuilder = class _CsvExtractionConfigBuilder {
|
|
|
2858
2861
|
this._encoding = enc;
|
|
2859
2862
|
return this;
|
|
2860
2863
|
}
|
|
2861
|
-
addSyncedAtColumn(enabled = true) {
|
|
2862
|
-
this._addSyncedAtColumn = enabled;
|
|
2863
|
-
return this;
|
|
2864
|
-
}
|
|
2865
2864
|
fieldsFromDict(mapping) {
|
|
2866
2865
|
if (this._fieldsMode === "array") {
|
|
2867
2866
|
throw new Error("Cannot use fieldsFromDict after fieldsFromArray");
|
|
@@ -2903,9 +2902,6 @@ var CsvExtractionConfigBuilder = class _CsvExtractionConfigBuilder {
|
|
|
2903
2902
|
if (this._encoding !== void 0) {
|
|
2904
2903
|
config.encoding = this._encoding;
|
|
2905
2904
|
}
|
|
2906
|
-
if (this._addSyncedAtColumn !== void 0) {
|
|
2907
|
-
config.addSyncedAtColumn = this._addSyncedAtColumn;
|
|
2908
|
-
}
|
|
2909
2905
|
return config;
|
|
2910
2906
|
}
|
|
2911
2907
|
buildStreamConfig(streamId) {
|
|
@@ -3791,6 +3787,7 @@ export {
|
|
|
3791
3787
|
CounterMetric,
|
|
3792
3788
|
CsvExtractionConfigBuilder,
|
|
3793
3789
|
DEFAULT_MAX_CONCURRENT_STREAMS,
|
|
3790
|
+
DEFAULT_SYNCED_AT_COLUMN,
|
|
3794
3791
|
EXECUTION_TIME_METRIC_NAME,
|
|
3795
3792
|
ExcelExtractionConfigBuilder,
|
|
3796
3793
|
FileFormat,
|