@servicetitan/dte-pdf-editor 1.39.0 → 1.40.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,4 +1,5 @@
1
1
  export declare const CALCULATED_OPERATIONS: string[];
2
2
  export declare const DEFAULT_DATE_FORMAT = "MM/DD/YYYY";
3
3
  export declare const MAX_DATE_CALC_DAYS = 365;
4
+ export declare const MAX_DATE_DISPLAY_RANGE_YEARS = 2;
4
5
  //# sourceMappingURL=calculated.constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"calculated.constants.d.ts","sourceRoot":"","sources":["../../src/constants/calculated.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,UAAiC,CAAC;AAEpE,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAEhD,eAAO,MAAM,kBAAkB,MAAM,CAAC"}
1
+ {"version":3,"file":"calculated.constants.d.ts","sourceRoot":"","sources":["../../src/constants/calculated.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,UAAiC,CAAC;AAEpE,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAEhD,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,eAAO,MAAM,4BAA4B,IAAI,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export const CALCULATED_OPERATIONS = ['+', '-', '*', '/', '(', ')'];
2
2
  export const DEFAULT_DATE_FORMAT = 'MM/DD/YYYY';
3
3
  export const MAX_DATE_CALC_DAYS = 365;
4
+ export const MAX_DATE_DISPLAY_RANGE_YEARS = 2;
4
5
  //# sourceMappingURL=calculated.constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"calculated.constants.js","sourceRoot":"","sources":["../../src/constants/calculated.constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAEhD,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"calculated.constants.js","sourceRoot":"","sources":["../../src/constants/calculated.constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAEhD,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAEtC,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC"}
@@ -3,5 +3,5 @@ import { CalculatedFieldFormat } from '../../interface/types';
3
3
  * Format a calculated formula result for display using advanced settings.
4
4
  * Applies rounding, decimal places, thousands/decimal separators, result type (number/currency/percent/date), and prefix/postfix.
5
5
  */
6
- export declare function formatCalculatedResult(value: number, format: CalculatedFieldFormat | undefined): string;
6
+ export declare const formatCalculatedResult: (value: number, format: CalculatedFieldFormat | undefined) => string;
7
7
  //# sourceMappingURL=format-calculated-result.utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format-calculated-result.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/format-calculated-result.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAA6B,MAAM,uBAAuB,CAAC;AA8DzF;;;GAGG;AACH,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,qBAAqB,GAAG,SAAS,GAC1C,MAAM,CA8BR"}
1
+ {"version":3,"file":"format-calculated-result.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/format-calculated-result.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAA6B,MAAM,uBAAuB,CAAC;AA2EzF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAC/B,OAAO,MAAM,EACb,QAAQ,qBAAqB,GAAG,SAAS,KAC1C,MAiCF,CAAC"}
@@ -1,5 +1,5 @@
1
- import { DEFAULT_DATE_FORMAT } from '../../constants';
2
- function roundValue(value, decimals, mode) {
1
+ import { DEFAULT_DATE_FORMAT, MAX_DATE_DISPLAY_RANGE_YEARS } from '../../constants';
2
+ const roundValue = (value, decimals, mode) => {
3
3
  const factor = 10 ** decimals;
4
4
  const scaled = value * factor;
5
5
  switch (mode) {
@@ -10,8 +10,8 @@ function roundValue(value, decimals, mode) {
10
10
  default:
11
11
  return Math.round(scaled) / factor;
12
12
  }
13
- }
14
- function formatIntegerPart(s, thousandsSeparator, decimalSeparator) {
13
+ };
14
+ const formatIntegerPart = (s, thousandsSeparator, decimalSeparator) => {
15
15
  if (!thousandsSeparator) {
16
16
  return s;
17
17
  }
@@ -24,7 +24,7 @@ function formatIntegerPart(s, thousandsSeparator, decimalSeparator) {
24
24
  i = start;
25
25
  }
26
26
  return parts.join(sep);
27
- }
27
+ };
28
28
  const DATE_FORMAT_TOKENS = {
29
29
  YYYY: d => String(d.getFullYear()),
30
30
  YY: d => String(d.getFullYear()).slice(-2),
@@ -36,7 +36,7 @@ const DATE_FORMAT_TOKENS = {
36
36
  D: d => String(d.getDate()),
37
37
  };
38
38
  const DATE_TOKEN_PATTERN = new RegExp(Object.keys(DATE_FORMAT_TOKENS).join('|'), 'g');
39
- function formatDateValue(epochMs, dateFormat) {
39
+ const formatDateValue = (epochMs, dateFormat) => {
40
40
  const date = new Date(epochMs);
41
41
  if (isNaN(date.getTime())) {
42
42
  return '';
@@ -45,17 +45,32 @@ function formatDateValue(epochMs, dateFormat) {
45
45
  const fn = DATE_FORMAT_TOKENS[match];
46
46
  return fn ? fn(date) : match;
47
47
  });
48
- }
48
+ };
49
+ const isDateWithinDisplayRange = (epochMs, referenceMs = Date.now()) => {
50
+ const date = new Date(epochMs);
51
+ if (isNaN(date.getTime())) {
52
+ return false;
53
+ }
54
+ const ref = new Date(referenceMs);
55
+ const min = new Date(ref);
56
+ min.setFullYear(min.getFullYear() - MAX_DATE_DISPLAY_RANGE_YEARS);
57
+ const max = new Date(ref);
58
+ max.setFullYear(max.getFullYear() + MAX_DATE_DISPLAY_RANGE_YEARS);
59
+ return date >= min && date <= max;
60
+ };
49
61
  /**
50
62
  * Format a calculated formula result for display using advanced settings.
51
63
  * Applies rounding, decimal places, thousands/decimal separators, result type (number/currency/percent/date), and prefix/postfix.
52
64
  */
53
- export function formatCalculatedResult(value, format) {
65
+ export const formatCalculatedResult = (value, format) => {
54
66
  var _a;
55
67
  if (format == null) {
56
68
  return String(value);
57
69
  }
58
70
  if (format.resultType === 'date') {
71
+ if (!isDateWithinDisplayRange(value)) {
72
+ return '';
73
+ }
59
74
  return formatDateValue(value, (_a = format.dateFormat) !== null && _a !== void 0 ? _a : DEFAULT_DATE_FORMAT);
60
75
  }
61
76
  const { decimalSeparator, decimalSeparatorEnabled, decimals, postfixText, prefixText, roundingMode, thousandsSeparator, } = format;
@@ -67,5 +82,5 @@ export function formatCalculatedResult(value, format) {
67
82
  const decSuffix = decimals > 0 ? decimalSep + (decPart !== null && decPart !== void 0 ? decPart : '') : '';
68
83
  const numberStr = intFormatted + decSuffix;
69
84
  return `${prefixText}${numberStr}${postfixText}`;
70
- }
85
+ };
71
86
  //# sourceMappingURL=format-calculated-result.utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format-calculated-result.utils.js","sourceRoot":"","sources":["../../../src/utils/formula/format-calculated-result.utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"format-calculated-result.utils.js","sourceRoot":"","sources":["../../../src/utils/formula/format-calculated-result.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAGpF,MAAM,UAAU,GAAG,CACf,KAAa,EACb,QAAgB,EAChB,IAA+C,EACzC,EAAE;IACR,MAAM,MAAM,GAAG,EAAE,IAAI,QAAQ,CAAC;IAC9B,MAAM,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC9B,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,OAAO;YACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;QACvC,KAAK,MAAM;YACP,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;QACtC;YACI,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC3C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACtB,CAAS,EACT,kBAA2B,EAC3B,gBAA2B,EACrB,EAAE;IACR,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC;IACb,CAAC;IACD,MAAM,GAAG,GAAG,gBAAgB,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,yBAAyB;IAC3E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACjB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC,GAAG,KAAK,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAwC;IAC5D,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACvD,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACvD,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IAClD,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAChC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IAC7C,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAEtF,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,UAAkB,EAAU,EAAE;IACpE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACd,CAAC;IACD,OAAO,UAAU,CAAC,OAAO,CAAC,kBAAkB,EAAE,KAAK,CAAC,EAAE;QAClD,MAAM,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACjC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,OAAe,EAAE,cAAsB,IAAI,CAAC,GAAG,EAAE,EAAW,EAAE;IAC5F,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,4BAA4B,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,4BAA4B,CAAC,CAAC;IAClE,OAAO,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC;AACtC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAClC,KAAa,EACb,MAAyC,EACnC,EAAE;;IACR,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QAC/B,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,EAAE,CAAC;QACd,CAAC;QACD,OAAO,eAAe,CAAC,KAAK,EAAE,MAAA,MAAM,CAAC,UAAU,mCAAI,mBAAmB,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,EACF,gBAAgB,EAChB,uBAAuB,EACvB,QAAQ,EACR,WAAW,EACX,UAAU,EACV,YAAY,EACZ,kBAAkB,GACrB,GAAG,MAAM,CAAC;IAEX,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,uBAAuB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;IACpE,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,EAAE,UAAU,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnE,MAAM,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;IAE3C,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,EAAE,CAAC;AACrD,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/dte-pdf-editor",
3
- "version": "1.39.0",
3
+ "version": "1.40.0",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "typings": "./dist/index.d.ts",
@@ -3,3 +3,5 @@ export const CALCULATED_OPERATIONS = ['+', '-', '*', '/', '(', ')'];
3
3
  export const DEFAULT_DATE_FORMAT = 'MM/DD/YYYY';
4
4
 
5
5
  export const MAX_DATE_CALC_DAYS = 365;
6
+
7
+ export const MAX_DATE_DISPLAY_RANGE_YEARS = 2;
@@ -1,11 +1,11 @@
1
- import { DEFAULT_DATE_FORMAT } from '../../constants';
1
+ import { DEFAULT_DATE_FORMAT, MAX_DATE_DISPLAY_RANGE_YEARS } from '../../constants';
2
2
  import { CalculatedFieldFormat, CalculatedFormatForNumber } from '../../interface/types';
3
3
 
4
- function roundValue(
4
+ const roundValue = (
5
5
  value: number,
6
6
  decimals: number,
7
7
  mode: CalculatedFormatForNumber['roundingMode'],
8
- ): number {
8
+ ): number => {
9
9
  const factor = 10 ** decimals;
10
10
  const scaled = value * factor;
11
11
  switch (mode) {
@@ -16,13 +16,13 @@ function roundValue(
16
16
  default:
17
17
  return Math.round(scaled) / factor;
18
18
  }
19
- }
19
+ };
20
20
 
21
- function formatIntegerPart(
21
+ const formatIntegerPart = (
22
22
  s: string,
23
23
  thousandsSeparator: boolean,
24
24
  decimalSeparator: '.' | ',',
25
- ): string {
25
+ ): string => {
26
26
  if (!thousandsSeparator) {
27
27
  return s;
28
28
  }
@@ -35,7 +35,7 @@ function formatIntegerPart(
35
35
  i = start;
36
36
  }
37
37
  return parts.join(sep);
38
- }
38
+ };
39
39
 
40
40
  const DATE_FORMAT_TOKENS: Record<string, (d: Date) => string> = {
41
41
  YYYY: d => String(d.getFullYear()),
@@ -50,7 +50,7 @@ const DATE_FORMAT_TOKENS: Record<string, (d: Date) => string> = {
50
50
 
51
51
  const DATE_TOKEN_PATTERN = new RegExp(Object.keys(DATE_FORMAT_TOKENS).join('|'), 'g');
52
52
 
53
- function formatDateValue(epochMs: number, dateFormat: string): string {
53
+ const formatDateValue = (epochMs: number, dateFormat: string): string => {
54
54
  const date = new Date(epochMs);
55
55
  if (isNaN(date.getTime())) {
56
56
  return '';
@@ -59,21 +59,37 @@ function formatDateValue(epochMs: number, dateFormat: string): string {
59
59
  const fn = DATE_FORMAT_TOKENS[match];
60
60
  return fn ? fn(date) : match;
61
61
  });
62
- }
62
+ };
63
+
64
+ const isDateWithinDisplayRange = (epochMs: number, referenceMs: number = Date.now()): boolean => {
65
+ const date = new Date(epochMs);
66
+ if (isNaN(date.getTime())) {
67
+ return false;
68
+ }
69
+ const ref = new Date(referenceMs);
70
+ const min = new Date(ref);
71
+ min.setFullYear(min.getFullYear() - MAX_DATE_DISPLAY_RANGE_YEARS);
72
+ const max = new Date(ref);
73
+ max.setFullYear(max.getFullYear() + MAX_DATE_DISPLAY_RANGE_YEARS);
74
+ return date >= min && date <= max;
75
+ };
63
76
 
64
77
  /**
65
78
  * Format a calculated formula result for display using advanced settings.
66
79
  * Applies rounding, decimal places, thousands/decimal separators, result type (number/currency/percent/date), and prefix/postfix.
67
80
  */
68
- export function formatCalculatedResult(
81
+ export const formatCalculatedResult = (
69
82
  value: number,
70
83
  format: CalculatedFieldFormat | undefined,
71
- ): string {
84
+ ): string => {
72
85
  if (format == null) {
73
86
  return String(value);
74
87
  }
75
88
 
76
89
  if (format.resultType === 'date') {
90
+ if (!isDateWithinDisplayRange(value)) {
91
+ return '';
92
+ }
77
93
  return formatDateValue(value, format.dateFormat ?? DEFAULT_DATE_FORMAT);
78
94
  }
79
95
 
@@ -98,4 +114,4 @@ export function formatCalculatedResult(
98
114
  const numberStr = intFormatted + decSuffix;
99
115
 
100
116
  return `${prefixText}${numberStr}${postfixText}`;
101
- }
117
+ };