@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.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
- _whaly_synced: batchDate
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) => !col.startsWith("_whaly")));
1871
- const newColumns = new Set(Object.keys(newSchema).filter((col) => !col.startsWith("_whaly")));
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["_whaly_synced"] = {
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 = fileConfig.addSyncedAtColumn ? { _wly_synced_at: syncedAt } : {};
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 = fileConfig.addSyncedAtColumn ? { _wly_synced_at: syncedAt } : {};
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,