@quatrain/core 1.2.6 → 1.2.8

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":"BaseProperty.d.ts","sourceRoot":"","sources":["../../src/properties/BaseProperty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE3D,MAAM,MAAM,UAAU,GACjB,OAAO,YAAY,CAAC,cAAc,GAClC,OAAO,YAAY,CAAC,cAAc,CAAA;AAiBvC,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB;IAC3D,MAAM,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAA;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,GAAG,CAAA;IAClB,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,KAAK,eAAe,CAAC,GAAG,CAAC,CAAA;CAChE;AAqBD,qBAAa,YAAa,YAAW,iBAAiB;IAEnD,MAAM,CAAC,IAAI,SAAQ;IAEnB,MAAM,CAAC,cAAc,SAAa;IAElC,MAAM,CAAC,cAAc,SAAa;IAElC,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;IACnD,SAAS,CAAC,GAAG,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,KAAK,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,MAAM,EAAE,GAAG,CAAY;IACjC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAQ;IACrC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAQ;IACrC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAK;IAChC,SAAS,CAAC,SAAS,EAAE,gBAAgB,CAAQ;IAC7C,SAAS,CAAC,aAAa,EAAE,GAAG,CAAA;IAC5B,SAAS,CAAC,WAAW,EAAE,OAAO,CAAA;IAC9B,SAAS,CAAC,OAAO,EAAE;QAChB,CAAC,GAAG,EAAE,UAAU,GAAG,QAAQ,CAAA;KAC7B,CAAK;gBAEM,MAAM,EAAE,gBAAgB;IAkBpC,IAAI,IAAI,WAEP;IAED,IAAI,SAAS,YAEZ;IAED,IAAI,SAAS,YAEZ;IAED,IAAI,MAAM,aAET;IAED,IAAI,QAAQ,CAAC,IAAI,EAAE,gBAAgB,EAElC;IAED,IAAI,QAAQ,IAJO,gBAAgB,CAMlC;IAED,IAAI,UAAU,IAIM,OAAO,CAF1B;IAED,IAAI,UAAU,CAAC,GAAG,EAAE,OAAO,EAE1B;IAUD,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,GAAE,OAAc;IAiC1C,GAAG,CAAC,SAAS,GAAE,GAAe,GAAG,GAAG;IASpC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS;IAS5C,MAAM;IASN,KAAK;CAQP"}
1
+ {"version":3,"file":"BaseProperty.d.ts","sourceRoot":"","sources":["../../src/properties/BaseProperty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE3D,MAAM,MAAM,UAAU,GACjB,OAAO,YAAY,CAAC,cAAc,GAClC,OAAO,YAAY,CAAC,cAAc,CAAA;AAiBvC,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB;IAC3D,MAAM,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAA;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,GAAG,CAAA;IAClB,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,KAAK,eAAe,CAAC,GAAG,CAAC,CAAA;CAChE;AAqBD,qBAAa,YAAa,YAAW,iBAAiB;IAEnD,MAAM,CAAC,IAAI,SAAQ;IAEnB,MAAM,CAAC,cAAc,SAAa;IAElC,MAAM,CAAC,cAAc,SAAa;IAElC,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;IACnD,SAAS,CAAC,GAAG,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,KAAK,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,MAAM,EAAE,GAAG,CAAY;IACjC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAQ;IACrC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAQ;IACrC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAK;IAChC,SAAS,CAAC,SAAS,EAAE,gBAAgB,CAAQ;IAC7C,SAAS,CAAC,aAAa,EAAE,GAAG,CAAA;IAC5B,SAAS,CAAC,WAAW,EAAE,OAAO,CAAA;IAC9B,SAAS,CAAC,OAAO,EAAE;QAChB,CAAC,GAAG,EAAE,UAAU,GAAG,QAAQ,CAAA;KAC7B,CAAK;gBAEM,MAAM,EAAE,gBAAgB;IAkBpC,IAAI,IAAI,WAEP;IAED,IAAI,SAAS,YAEZ;IAED,IAAI,SAAS,YAEZ;IAED,IAAI,MAAM,aAET;IAED,IAAI,QAAQ,CAAC,IAAI,EAAE,gBAAgB,EAElC;IAED,IAAI,QAAQ,IAJO,gBAAgB,CAMlC;IAED,IAAI,UAAU,IAIM,OAAO,CAF1B;IAED,IAAI,UAAU,CAAC,GAAG,EAAE,OAAO,EAE1B;IAUD,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,GAAE,OAAc;IAkD1C,GAAG,CAAC,SAAS,GAAE,GAAe,GAAG,GAAG;IASpC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS;IAS5C,MAAM;IASN,KAAK;CAQP"}
@@ -64,8 +64,26 @@ class BaseProperty {
64
64
  this._protected === true) {
65
65
  throw new Error(`Value '${this._name}' already defined as '${this._value}' and protected from change`);
66
66
  }
67
- if (JSON.stringify({ value: value }) !==
68
- JSON.stringify({ value: this._value })) {
67
+ let isDifferent = false;
68
+ if (typeof value === 'object' && value !== null) {
69
+ if (value === this._value) {
70
+ isDifferent = true;
71
+ }
72
+ else {
73
+ try {
74
+ isDifferent =
75
+ JSON.stringify({ value: value }) !==
76
+ JSON.stringify({ value: this._value });
77
+ }
78
+ catch (e) {
79
+ isDifferent = true;
80
+ }
81
+ }
82
+ }
83
+ else {
84
+ isDifferent = value !== this._value;
85
+ }
86
+ if (isDifferent) {
69
87
  this._value = value;
70
88
  this._hasChanged = setChanged;
71
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BaseProperty.js","sourceRoot":"","sources":["../../src/properties/BaseProperty.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseProperty.js","sourceRoot":"","sources":["../../src/properties/BaseProperty.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ class DateTimeProperty extends BaseProperty_1.BaseProperty {
17
17
  if (typeof value === 'string') {
18
18
  let utcString = value.trim();
19
19
  if (!utcString.endsWith('Z') &&
20
- !/[+-]\d{2}:\d{2}$/.test(utcString)) {
20
+ !/[+-]\d{2}(:?\d{2})?$/.test(utcString)) {
21
21
  utcString = utcString.replace(' ', 'T') + 'Z';
22
22
  }
23
23
  value = Date.parse(utcString);
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimeProperty.js","sourceRoot":"","sources":["../../src/properties/DateTimeProperty.ts"],"names":[],"mappings":";;;AAAA,iDAA+D;AA6B/D,MAAa,gBAAiB,SAAQ,2BAAY;IAE/C,MAAM,CAAC,KAAK,GAAG,MAAM,CAAA;IAErB,MAAM,CAAC,cAAc,GAAG,gBAAgB,CAAA;IAGxC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAA;IAGxB,MAAM,CAAC,SAAS,GAAW,gBAAgB,CAAC,KAAK,CAAA;IAEvC,SAAS,CAAQ;IAE3B,YAAY,MAA4B;QACrC,KAAK,CAAC,MAAM,CAAC,CAAA;QACb,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAA;IAC1C,CAAC;IAUD,GAAG,CAAC,KAA6B,EAAE,UAAU,GAAG,IAAI;QACjD,IAAI,KAAK,IAAI,gBAAgB,CAAC,SAAS,KAAK,gBAAgB,EAAE,CAAC;YAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAI7B,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;gBAC5B,IACG,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACxB,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EACpC,CAAC;oBAEA,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAA;gBAChD,CAAC;gBACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAChC,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACpC,KAAK,GAAI,KAAc,CAAC,OAAO,EAAE,CAAA;YACpC,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IACtC,CAAC;IAED,IAAI,QAAQ;QACT,OAAO,IAAI,CAAC,SAAS,CAAA;IACxB,CAAC;;AAnDJ,4CAoDC"}
1
+ {"version":3,"file":"DateTimeProperty.js","sourceRoot":"","sources":["../../src/properties/DateTimeProperty.ts"],"names":[],"mappings":";;;AAAA,iDAA+D;AA6B/D,MAAa,gBAAiB,SAAQ,2BAAY;IAE/C,MAAM,CAAC,KAAK,GAAG,MAAM,CAAA;IAErB,MAAM,CAAC,cAAc,GAAG,gBAAgB,CAAA;IAGxC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAA;IAGxB,MAAM,CAAC,SAAS,GAAW,gBAAgB,CAAC,KAAK,CAAA;IAEvC,SAAS,CAAQ;IAE3B,YAAY,MAA4B;QACrC,KAAK,CAAC,MAAM,CAAC,CAAA;QACb,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAA;IAC1C,CAAC;IAUD,GAAG,CAAC,KAA6B,EAAE,UAAU,GAAG,IAAI;QACjD,IAAI,KAAK,IAAI,gBAAgB,CAAC,SAAS,KAAK,gBAAgB,EAAE,CAAC;YAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAI7B,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;gBAC5B,IACG,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACxB,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,EACxC,CAAC;oBAEA,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAA;gBAChD,CAAC;gBACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAChC,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACpC,KAAK,GAAI,KAAc,CAAC,OAAO,EAAE,CAAA;YACpC,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IACtC,CAAC;IAED,IAAI,QAAQ;QACT,OAAO,IAAI,CAAC,SAAS,CAAA;IACxB,CAAC;;AAnDJ,4CAoDC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quatrain/core",
3
- "version": "1.2.6",
3
+ "version": "1.2.8",
4
4
  "description": "Core objects for business apps",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -20,7 +20,7 @@
20
20
  "author": "Quatrain Développement SAS <developers@quatrain.com>",
21
21
  "license": "AGPL-3.0-only",
22
22
  "devDependencies": {
23
- "@quatrain/testing": "^1.1.3",
23
+ "@quatrain/testing": "^1.1.4",
24
24
  "@tsconfig/recommended": "^1.0.1",
25
25
  "@types/jest": "^29.5.12",
26
26
  "@types/node": "^22.10.1",
@@ -33,7 +33,7 @@
33
33
  "typescript": "^5.2.2"
34
34
  },
35
35
  "dependencies": {
36
- "@quatrain/log": "^1.2.1",
36
+ "@quatrain/log": "^1.2.2",
37
37
  "node-persist": "^4.0.4",
38
38
  "which": "^5.0.0"
39
39
  },
@@ -76,4 +76,35 @@ describe('BaseProperty', () => {
76
76
  propStr.set('')
77
77
  expect(propStr.val()).toBe('')
78
78
  })
79
+
80
+ it('should set hasChanged to true when mutating an object by reference and setting it again', () => {
81
+ const prop = new BaseProperty({ name: 'obj' })
82
+ const arr = [1, 2]
83
+ prop.set(arr)
84
+ expect(prop.hasChanged).toBe(true)
85
+
86
+ prop.hasChanged = false
87
+ arr.push(3)
88
+ prop.set(arr)
89
+ expect(prop.hasChanged).toBe(true)
90
+ })
91
+
92
+ it('should set hasChanged to false when setting a different object reference with identical contents', () => {
93
+ const prop = new BaseProperty({ name: 'obj' })
94
+ prop.set([1, 2])
95
+ expect(prop.hasChanged).toBe(true)
96
+
97
+ prop.hasChanged = false
98
+ prop.set([1, 2])
99
+ expect(prop.hasChanged).toBe(false)
100
+ })
101
+
102
+ it('should handle circular references safely without throwing and mark as changed', () => {
103
+ const prop = new BaseProperty({ name: 'circular' })
104
+ const obj: any = { a: 1 }
105
+ obj.self = obj
106
+
107
+ expect(() => prop.set(obj)).not.toThrow()
108
+ expect(prop.hasChanged).toBe(true)
109
+ })
79
110
  })
@@ -142,10 +142,27 @@ export class BaseProperty implements PropertyClassType {
142
142
  )
143
143
  }
144
144
 
145
- if (
146
- JSON.stringify({ value: value }) !==
147
- JSON.stringify({ value: this._value })
148
- ) {
145
+ let isDifferent = false
146
+
147
+ if (typeof value === 'object' && value !== null) {
148
+ if (value === this._value) {
149
+ // Same reference implies it was mutated in place, force change
150
+ isDifferent = true
151
+ } else {
152
+ try {
153
+ isDifferent =
154
+ JSON.stringify({ value: value }) !==
155
+ JSON.stringify({ value: this._value })
156
+ } catch (e) {
157
+ // Fallback for circular references or other stringify errors
158
+ isDifferent = true
159
+ }
160
+ }
161
+ } else {
162
+ isDifferent = value !== this._value
163
+ }
164
+
165
+ if (isDifferent) {
149
166
  this._value = value
150
167
  this._hasChanged = setChanged
151
168
  }
@@ -63,7 +63,7 @@ export class DateTimeProperty extends BaseProperty {
63
63
  let utcString = value.trim()
64
64
  if (
65
65
  !utcString.endsWith('Z') &&
66
- !/[+-]\d{2}:\d{2}$/.test(utcString)
66
+ !/[+-]\d{2}(:?\d{2})?$/.test(utcString)
67
67
  ) {
68
68
  // Replace space with T for ISO format and append Z for UTC
69
69
  utcString = utcString.replace(' ', 'T') + 'Z'