@quatrain/core 1.2.6 → 1.2.7
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;
|
|
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
|
-
|
|
68
|
-
|
|
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":";;;AAoDA,MAAa,YAAY;IAEtB,MAAM,CAAC,IAAI,GAAG,KAAK,CAAA;IAEnB,MAAM,CAAC,cAAc,GAAG,UAAU,CAAA;IAElC,MAAM,CAAC,cAAc,GAAG,UAAU,CAAA;IAExB,OAAO,CAAkC;IACzC,GAAG,CAAQ;IACX,KAAK,CAAQ;IACb,MAAM,GAAQ,SAAS,CAAA;IACvB,UAAU,GAAY,KAAK,CAAA;IAC3B,UAAU,GAAY,KAAK,CAAA;IAC3B,OAAO,GAAa,EAAE,CAAA;IACtB,SAAS,GAAqB,KAAK,CAAA;IACnC,aAAa,CAAK;IAClB,WAAW,CAAS;IACpB,OAAO,GAEb,EAAE,CAAA;IAEN,YAAY,MAAwB;QACjC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAA;QAC5B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;QACjD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAA;QACxB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAA;QAC3C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAA;QAC3C,IAAI,CAAC,aAAa;YACf,OAAO,MAAM,CAAC,YAAY,KAAK,UAAU;gBACtC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE;gBACvB,CAAC,CAAC,MAAM,CAAC,YAAY,CAAA;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAA;QAChC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QACxB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAA;QACzC,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC1C,CAAC;IACJ,CAAC;IAED,IAAI,IAAI;QACL,OAAO,IAAI,CAAC,KAAK,CAAA;IACpB,CAAC;IAED,IAAI,SAAS;QACV,OAAO,IAAI,CAAC,UAAU,CAAA;IACzB,CAAC;IAED,IAAI,SAAS;QACV,OAAO,IAAI,CAAC,UAAU,CAAA;IACzB,CAAC;IAED,IAAI,MAAM;QACP,OAAO,IAAI,CAAC,OAAO,CAAA;IACtB,CAAC;IAED,IAAI,QAAQ,CAAC,IAAsB;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACxB,CAAC;IAED,IAAI,QAAQ;QACT,OAAO,IAAI,CAAC,SAAS,CAAA;IACxB,CAAC;IAED,IAAI,UAAU;QACX,OAAO,IAAI,CAAC,WAAW,CAAA;IAC1B,CAAC;IAED,IAAI,UAAU,CAAC,GAAY;QACxB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAA;IACzB,CAAC;IAUD,GAAG,CAAC,KAAU,EAAE,aAAsB,IAAI;QACvC,IACG,IAAI,CAAC,MAAM,KAAK,SAAS;YACzB,IAAI,CAAC,MAAM,KAAK,IAAI;YACpB,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa;YAClC,IAAI,CAAC,UAAU,KAAK,IAAI,EACzB,CAAC;YACA,MAAM,IAAI,KAAK,CACZ,UAAU,IAAI,CAAC,KAAK,yBAAyB,IAAI,CAAC,MAAM,6BAA6B,CACvF,CAAA;QACJ,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"BaseProperty.js","sourceRoot":"","sources":["../../src/properties/BaseProperty.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quatrain/core",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.7",
|
|
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.
|
|
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.
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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
|
}
|