@memberjunction/integration-schema-builder 5.29.0 → 5.30.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"TypeMapper.d.ts","sourceRoot":"","sources":["../src/TypeMapper.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAiB3F;;GAEG;AACH,qBAAa,UAAU;IACnB;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM;IAa7F;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAM1C;;OAEG;IACH,cAAc,IAAI,aAAa,CAAC,gBAAgB,CAAC;IAIjD,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,qBAAqB;CAKhC"}
1
+ {"version":3,"file":"TypeMapper.d.ts","sourceRoot":"","sources":["../src/TypeMapper.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAiB3F;;GAEG;AACH,qBAAa,UAAU;IACnB;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM;IAa7F;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAM1C;;OAEG;IACH,cAAc,IAAI,aAAa,CAAC,gBAAgB,CAAC;IAIjD,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,iBAAiB;IA8BzB,OAAO,CAAC,qBAAqB;CA0BhC"}
@@ -53,19 +53,58 @@ export class TypeMapper {
53
53
  return baseType;
54
54
  }
55
55
  ApplyStringLength(baseType, field, platform) {
56
- if (field.MaxLength != null && field.MaxLength > 0) {
57
- // SQL Server NVARCHAR max is 4000 before switching to MAX; PG VARCHAR has no practical limit
58
- if (platform === 'sqlserver' && field.MaxLength > 4000) {
59
- return 'NVARCHAR(MAX)';
60
- }
61
- return `${baseType}(${field.MaxLength})`;
56
+ // Sources like Salesforce under-report string lengths in their describe
57
+ // output — we've seen real data exceed the declared MaxLength (e.g.
58
+ // EmailTemplate.Name declared 80, actual value 83). Since MJ is a
59
+ // read-mirror and data loss is worse than a slightly larger column,
60
+ // apply a conservative floor and headroom:
61
+ // - min NVARCHAR(255) for anything declared < 255
62
+ // - 1.25× headroom on declared lengths 255..1000
63
+ // - switch to NVARCHAR(MAX) for anything over ~4000 (SQL Server limit)
64
+ const MIN_LENGTH = 255;
65
+ const HEADROOM_THRESHOLD = 1000;
66
+ const SQL_SERVER_MAX_FIXED_LENGTH = 4000;
67
+ const declared = field.MaxLength != null && field.MaxLength > 0 ? field.MaxLength : MIN_LENGTH;
68
+ let effective;
69
+ if (declared <= MIN_LENGTH) {
70
+ effective = MIN_LENGTH;
62
71
  }
63
- // Default string length
64
- return `${baseType}(255)`;
72
+ else if (declared <= HEADROOM_THRESHOLD) {
73
+ effective = Math.ceil(declared * 1.25);
74
+ }
75
+ else {
76
+ effective = declared;
77
+ }
78
+ if (platform === 'sqlserver' && effective > SQL_SERVER_MAX_FIXED_LENGTH) {
79
+ return 'NVARCHAR(MAX)';
80
+ }
81
+ return `${baseType}(${effective})`;
65
82
  }
66
83
  ApplyDecimalPrecision(baseType, field) {
67
- const precision = field.Precision ?? 18;
68
- const scale = field.Scale ?? 2;
84
+ // Defensive bounds: SF's describe output for formula fields and some
85
+ // system columns reports narrow precision (e.g. 5,0) that overflows
86
+ // when real values land. Observed in the wild on Opportunity.Amount:
87
+ // "Arithmetic overflow error converting int to data type numeric."
88
+ // Also seen on currency/formula fields that report DECIMAL(18,2) but
89
+ // carry values > 10^16 (e.g. aggregated lifetime value across large
90
+ // orgs). Philosophy: this is a read-mirror — we'd rather over-allocate
91
+ // a few bytes per column than drop a sync with an arithmetic overflow.
92
+ //
93
+ // So we floor precision at 28 (allows values up to 10^26, comfortable
94
+ // for any real-world currency or count) and cap at SQL Server's hard
95
+ // limit of 38. Scale is bounded to precision and normalized to >= 0.
96
+ const MIN_PRECISION = 28;
97
+ const MAX_PRECISION = 38;
98
+ let precision = field.Precision ?? MIN_PRECISION;
99
+ let scale = field.Scale ?? 2;
100
+ if (scale < 0)
101
+ scale = 0;
102
+ if (precision < MIN_PRECISION)
103
+ precision = MIN_PRECISION;
104
+ if (precision > MAX_PRECISION)
105
+ precision = MAX_PRECISION;
106
+ if (scale > precision)
107
+ scale = precision;
69
108
  return `${baseType}(${precision},${scale})`;
70
109
  }
71
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TypeMapper.js","sourceRoot":"","sources":["../src/TypeMapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TypeMapper.js","sourceRoot":"","sources":["../src/TypeMapper.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/integration-schema-builder",
3
3
  "type": "module",
4
- "version": "5.29.0",
4
+ "version": "5.30.0",
5
5
  "description": "MemberJunction Integration Schema Builder - file-emission-only DDL generation for integration tables",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -14,10 +14,10 @@
14
14
  "test:watch": "vitest"
15
15
  },
16
16
  "dependencies": {
17
- "@memberjunction/core": "5.29.0",
18
- "@memberjunction/global": "5.29.0",
19
- "@memberjunction/integration-engine": "5.29.0",
20
- "@memberjunction/schema-engine": "5.29.0"
17
+ "@memberjunction/core": "5.30.0",
18
+ "@memberjunction/global": "5.30.0",
19
+ "@memberjunction/integration-engine": "5.30.0",
20
+ "@memberjunction/schema-engine": "5.30.0"
21
21
  },
22
22
  "devDependencies": {
23
23
  "typescript": "^5.9.3",