@mlightcad/common 1.0.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.
- package/LICENSE +21 -0
- package/dist/common.js +1226 -0
- package/dist/common.umd.cjs +1 -0
- package/lib/AcCmColor.d.ts +42 -0
- package/lib/AcCmColor.d.ts.map +1 -0
- package/lib/AcCmColor.js +456 -0
- package/lib/AcCmColor.js.map +1 -0
- package/lib/AcCmColorUtil.d.ts +9 -0
- package/lib/AcCmColorUtil.d.ts.map +1 -0
- package/lib/AcCmColorUtil.js +54 -0
- package/lib/AcCmColorUtil.js.map +1 -0
- package/lib/AcCmErrors.d.ts +23 -0
- package/lib/AcCmErrors.d.ts.map +1 -0
- package/lib/AcCmErrors.js +37 -0
- package/lib/AcCmErrors.js.map +1 -0
- package/lib/AcCmEventDispatcher.d.ts +48 -0
- package/lib/AcCmEventDispatcher.d.ts.map +1 -0
- package/lib/AcCmEventDispatcher.js +60 -0
- package/lib/AcCmEventDispatcher.js.map +1 -0
- package/lib/AcCmEventManager.d.ts +27 -0
- package/lib/AcCmEventManager.d.ts.map +1 -0
- package/lib/AcCmEventManager.js +94 -0
- package/lib/AcCmEventManager.js.map +1 -0
- package/lib/AcCmLogUtil.d.ts +31 -0
- package/lib/AcCmLogUtil.d.ts.map +1 -0
- package/lib/AcCmLogUtil.js +23 -0
- package/lib/AcCmLogUtil.js.map +1 -0
- package/lib/AcCmObject.d.ts +96 -0
- package/lib/AcCmObject.d.ts.map +1 -0
- package/lib/AcCmObject.js +175 -0
- package/lib/AcCmObject.js.map +1 -0
- package/lib/AcCmPerformanceCollector.d.ts +68 -0
- package/lib/AcCmPerformanceCollector.d.ts.map +1 -0
- package/lib/AcCmPerformanceCollector.js +110 -0
- package/lib/AcCmPerformanceCollector.js.map +1 -0
- package/lib/AcCmStringUtil.d.ts +11 -0
- package/lib/AcCmStringUtil.d.ts.map +1 -0
- package/lib/AcCmStringUtil.js +25 -0
- package/lib/AcCmStringUtil.js.map +1 -0
- package/lib/AcCmTaskScheduler.d.ts +70 -0
- package/lib/AcCmTaskScheduler.d.ts.map +1 -0
- package/lib/AcCmTaskScheduler.js +173 -0
- package/lib/AcCmTaskScheduler.js.map +1 -0
- package/lib/index.d.ts +11 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +11 -0
- package/lib/index.js.map +1 -0
- package/lib/loader/AcCmFileLoader.d.ts +58 -0
- package/lib/loader/AcCmFileLoader.d.ts.map +1 -0
- package/lib/loader/AcCmFileLoader.js +225 -0
- package/lib/loader/AcCmFileLoader.js.map +1 -0
- package/lib/loader/AcCmLoader.d.ts +92 -0
- package/lib/loader/AcCmLoader.d.ts.map +1 -0
- package/lib/loader/AcCmLoader.js +88 -0
- package/lib/loader/AcCmLoader.js.map +1 -0
- package/lib/loader/AcCmLoadingManager.d.ts +119 -0
- package/lib/loader/AcCmLoadingManager.d.ts.map +1 -0
- package/lib/loader/AcCmLoadingManager.js +133 -0
- package/lib/loader/AcCmLoadingManager.js.map +1 -0
- package/lib/loader/index.d.ts +3 -0
- package/lib/loader/index.d.ts.map +1 -0
- package/lib/loader/index.js +3 -0
- package/lib/loader/index.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcCmErrors.d.ts","sourceRoot":"","sources":["../src/AcCmErrors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;IACrB;;OAEG;;IAKH;;OAEG;;IAKH;;OAEG;;IAKH;;;OAGG;;;;;CAgBJ,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export var AcCmErrors = {
|
|
2
|
+
/**
|
|
3
|
+
* Throw error ILLEGAL_PARAMETERS when cannot instantiate from given parameter
|
|
4
|
+
*/
|
|
5
|
+
get ILLEGAL_PARAMETERS() {
|
|
6
|
+
return new ReferenceError('Illegal Parameters');
|
|
7
|
+
},
|
|
8
|
+
/**
|
|
9
|
+
* Throw error ZERO_DIVISION to catch situation of zero division
|
|
10
|
+
*/
|
|
11
|
+
get ZERO_DIVISION() {
|
|
12
|
+
return new Error('Zero division');
|
|
13
|
+
},
|
|
14
|
+
/**
|
|
15
|
+
* Error to throw from BooleanOperations module in case when fixBoundaryConflicts not capable to fix it
|
|
16
|
+
*/
|
|
17
|
+
get UNRESOLVED_BOUNDARY_CONFLICT() {
|
|
18
|
+
return new Error('Unresolved boundary conflict in boolean operation');
|
|
19
|
+
},
|
|
20
|
+
/**
|
|
21
|
+
* Error to throw from LinkedList:testInfiniteLoop static method
|
|
22
|
+
* in case when circular loop detected in linked list
|
|
23
|
+
*/
|
|
24
|
+
get INFINITE_LOOP() {
|
|
25
|
+
return new Error('Infinite loop');
|
|
26
|
+
},
|
|
27
|
+
get CANNOT_INVOKE_ABSTRACT_METHOD() {
|
|
28
|
+
return new Error('Abstract method cannot be invoked');
|
|
29
|
+
},
|
|
30
|
+
get OPERATION_IS_NOT_SUPPORTED() {
|
|
31
|
+
return new Error('Operation is not supported');
|
|
32
|
+
},
|
|
33
|
+
get NOT_IMPLEMENTED() {
|
|
34
|
+
return new Error('Not implemented yet');
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=AcCmErrors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcCmErrors.js","sourceRoot":"","sources":["../src/AcCmErrors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,UAAU,GAAG;IACxB;;OAEG;IACH,IAAI,kBAAkB;QACpB,OAAO,IAAI,cAAc,CAAC,oBAAoB,CAAC,CAAA;IACjD,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;IACnC,CAAC;IAED;;OAEG;IACH,IAAI,4BAA4B;QAC9B,OAAO,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;IACvE,CAAC;IAED;;;OAGG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;IACnC,CAAC;IAED,IAAI,6BAA6B;QAC/B,OAAO,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACvD,CAAC;IAED,IAAI,0BAA0B;QAC5B,OAAO,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;IAChD,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACzC,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The minimal basic Event that can be dispatched by a {@link AcCmEventDispatcher<>}.
|
|
3
|
+
*/
|
|
4
|
+
export interface AcCmBaseEvent<TEventType extends string = string> {
|
|
5
|
+
readonly type: TEventType;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The minimal expected contract of a fired Event that was dispatched by a {@link AcCmEventDispatcher<>}.
|
|
9
|
+
*/
|
|
10
|
+
export interface AcCmEvent<TEventType extends string = string, TTarget = unknown> {
|
|
11
|
+
readonly type: TEventType;
|
|
12
|
+
readonly target: TTarget;
|
|
13
|
+
}
|
|
14
|
+
export type AcCmEventListener<TEventData, TEventType extends string, TTarget> = (event: TEventData & AcCmEvent<TEventType, TTarget>) => void;
|
|
15
|
+
export declare class AcCmEventDispatcher<TEventMap extends {} = {}> {
|
|
16
|
+
/**
|
|
17
|
+
* Index a record of all callback functions
|
|
18
|
+
*/
|
|
19
|
+
private _listeners;
|
|
20
|
+
/**
|
|
21
|
+
* Creates {@link AcCmEventDispatcher} object.
|
|
22
|
+
*/
|
|
23
|
+
constructor();
|
|
24
|
+
/**
|
|
25
|
+
* Add a listener to an event type.
|
|
26
|
+
* @param type The type of event to listen to.
|
|
27
|
+
* @param listener The function that gets called when the event is fired.
|
|
28
|
+
*/
|
|
29
|
+
addEventListener<T extends Extract<keyof TEventMap, string>>(type: T, listener: AcCmEventListener<TEventMap[T], T, this>): void;
|
|
30
|
+
/**
|
|
31
|
+
* Check if listener is added to an event type.
|
|
32
|
+
* @param type The type of event to listen to.
|
|
33
|
+
* @param listener The function that gets called when the event is fired.
|
|
34
|
+
*/
|
|
35
|
+
hasEventListener<T extends Extract<keyof TEventMap, string>>(type: T, listener: AcCmEventListener<TEventMap[T], T, this>): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Remove a listener from an event type.
|
|
38
|
+
* @param type The type of the listener that gets removed.
|
|
39
|
+
* @param listener The listener function that gets removed.
|
|
40
|
+
*/
|
|
41
|
+
removeEventListener<T extends Extract<keyof TEventMap, string>>(type: T, listener: AcCmEventListener<TEventMap[T], T, this>): void;
|
|
42
|
+
/**
|
|
43
|
+
* Fire an event type.
|
|
44
|
+
* @param event The event that gets fired.
|
|
45
|
+
*/
|
|
46
|
+
dispatchEvent<T extends Extract<keyof TEventMap, string>>(event: AcCmBaseEvent<T> & TEventMap[T]): void;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=AcCmEventDispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcCmEventDispatcher.d.ts","sourceRoot":"","sources":["../src/AcCmEventDispatcher.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,UAAU,SAAS,MAAM,GAAG,MAAM;IAC/D,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS,CACxB,UAAU,SAAS,MAAM,GAAG,MAAM,EAClC,OAAO,GAAG,OAAO;IAEjB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,MAAM,iBAAiB,CAC3B,UAAU,EACV,UAAU,SAAS,MAAM,EACzB,OAAO,IACL,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;AAGhE,qBAAa,mBAAmB,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE;IACxD;;OAEG;IACH,OAAO,CAAC,UAAU,CAGjB;IAED;;OAEG;;IAKH;;;;OAIG;IACH,gBAAgB,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,SAAS,EAAE,MAAM,CAAC,EACzD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GACjD,IAAI;IAkBP;;;;OAIG;IACH,gBAAgB,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,SAAS,EAAE,MAAM,CAAC,EACzD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GACjD,OAAO;IAcV;;;;OAIG;IACH,mBAAmB,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,SAAS,EAAE,MAAM,CAAC,EAC5D,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GACjD,IAAI;IAmBP;;;OAGG;IACH,aAAa,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,SAAS,EAAE,MAAM,CAAC,EACtD,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GACrC,IAAI;CAkBR"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// eslint-disable-next-line
|
|
2
|
+
var AcCmEventDispatcher = /** @class */ (function () {
|
|
3
|
+
/**
|
|
4
|
+
* Creates {@link AcCmEventDispatcher} object.
|
|
5
|
+
*/
|
|
6
|
+
function AcCmEventDispatcher() {
|
|
7
|
+
this._listeners = {};
|
|
8
|
+
}
|
|
9
|
+
AcCmEventDispatcher.prototype.addEventListener = function (type, listener) {
|
|
10
|
+
if (this._listeners === undefined)
|
|
11
|
+
this._listeners = {};
|
|
12
|
+
var listeners = this._listeners;
|
|
13
|
+
if (listeners[type] === undefined) {
|
|
14
|
+
listeners[type] = [];
|
|
15
|
+
}
|
|
16
|
+
if (listeners[type].indexOf(listener) === -1) {
|
|
17
|
+
listeners[type].push(listener);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
AcCmEventDispatcher.prototype.hasEventListener = function (type, listener) {
|
|
21
|
+
if (this._listeners === undefined)
|
|
22
|
+
return false;
|
|
23
|
+
var listeners = this._listeners;
|
|
24
|
+
return (listeners[type] !== undefined && listeners[type].indexOf(listener) !== -1);
|
|
25
|
+
};
|
|
26
|
+
AcCmEventDispatcher.prototype.removeEventListener = function (type, listener) {
|
|
27
|
+
if (this._listeners === undefined)
|
|
28
|
+
return;
|
|
29
|
+
var listeners = this._listeners;
|
|
30
|
+
var listenerArray = listeners[type];
|
|
31
|
+
if (listenerArray !== undefined) {
|
|
32
|
+
var index = listenerArray.indexOf(listener);
|
|
33
|
+
if (index !== -1) {
|
|
34
|
+
listenerArray.splice(index, 1);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Fire an event type.
|
|
40
|
+
* @param event The event that gets fired.
|
|
41
|
+
*/
|
|
42
|
+
AcCmEventDispatcher.prototype.dispatchEvent = function (event) {
|
|
43
|
+
if (this._listeners === undefined)
|
|
44
|
+
return;
|
|
45
|
+
var listeners = this._listeners;
|
|
46
|
+
var listenerArray = listeners[event.type];
|
|
47
|
+
if (listenerArray !== undefined) {
|
|
48
|
+
// @ts-expect-error add target property
|
|
49
|
+
event.target = this;
|
|
50
|
+
// Make a copy, in case listeners are removed while iterating.
|
|
51
|
+
var array = listenerArray.slice(0);
|
|
52
|
+
for (var i = 0, l = array.length; i < l; i++) {
|
|
53
|
+
array[i].call(this, event);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
return AcCmEventDispatcher;
|
|
58
|
+
}());
|
|
59
|
+
export { AcCmEventDispatcher };
|
|
60
|
+
//# sourceMappingURL=AcCmEventDispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcCmEventDispatcher.js","sourceRoot":"","sources":["../src/AcCmEventDispatcher.ts"],"names":[],"mappings":"AAwBA,2BAA2B;AAC3B;IASE;;OAEG;IACH;QACE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;IACtB,CAAC;IAWD,8CAAgB,GAAhB,UACE,IAAO,EACP,QAA4C;QAE5C,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;QAEvD,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAA;QAEjC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YAClC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC7C,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IAWD,8CAAgB,GAAhB,UACE,IAAO,EACP,QAA4C;QAE5C,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,OAAO,KAAK,CAAA;QAE/C,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAA;QAEjC,OAAO,CACL,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAC1E,CAAA;IACH,CAAC;IAWD,iDAAmB,GAAnB,UACE,IAAO,EACP,QAA4C;QAE5C,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,OAAM;QAEzC,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAA;QACjC,IAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAErC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,IAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAE7C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,2CAAa,GAAb,UACE,KAAsC;QAEtC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,OAAM;QAEzC,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAA;QACjC,IAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAE3C,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,uCAAuC;YACvC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;YAEnB,8DAA8D;YAC9D,IAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IACH,0BAAC;AAAD,CAAC,AAnHD,IAmHC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The class representing one event manager
|
|
3
|
+
*/
|
|
4
|
+
export declare class AcCmEventManager<T = unknown> {
|
|
5
|
+
private listeners;
|
|
6
|
+
/**
|
|
7
|
+
* Add the event listener
|
|
8
|
+
* @param listener Input listener to be added
|
|
9
|
+
*/
|
|
10
|
+
addEventListener(listener: (payload: T) => void): void;
|
|
11
|
+
/**
|
|
12
|
+
* Remove the listener
|
|
13
|
+
* @param listener Input listener to be removed
|
|
14
|
+
*/
|
|
15
|
+
removeEventListener(listener: (payload: T) => void): void;
|
|
16
|
+
/**
|
|
17
|
+
* Remove all listeners bound to the target and add one new listener
|
|
18
|
+
* @param listener Input listener to be added
|
|
19
|
+
*/
|
|
20
|
+
replaceEventListener(listener: (payload: T) => void): void;
|
|
21
|
+
/**
|
|
22
|
+
* Notify all listeners
|
|
23
|
+
* @param payload Input payload passed to listener
|
|
24
|
+
*/
|
|
25
|
+
dispatch(payload?: T, ...args: unknown[]): void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=AcCmEventManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcCmEventManager.d.ts","sourceRoot":"","sources":["../src/AcCmEventManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,gBAAgB,CAAC,CAAC,GAAG,OAAO;IACvC,OAAO,CAAC,SAAS,CAA+B;IAEhD;;;OAGG;IACI,gBAAgB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI;IAItD;;;OAGG;IACI,mBAAmB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI;IAIzD;;;OAGG;IACI,oBAAoB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI;IAK1D;;;OAGG;IACI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE;CAMhD"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
var __values = (this && this.__values) || function(o) {
|
|
2
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
3
|
+
if (m) return m.call(o);
|
|
4
|
+
if (o && typeof o.length === "number") return {
|
|
5
|
+
next: function () {
|
|
6
|
+
if (o && i >= o.length) o = void 0;
|
|
7
|
+
return { value: o && o[i++], done: !o };
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
11
|
+
};
|
|
12
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
13
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
14
|
+
if (!m) return o;
|
|
15
|
+
var i = m.call(o), r, ar = [], e;
|
|
16
|
+
try {
|
|
17
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
18
|
+
}
|
|
19
|
+
catch (error) { e = { error: error }; }
|
|
20
|
+
finally {
|
|
21
|
+
try {
|
|
22
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
23
|
+
}
|
|
24
|
+
finally { if (e) throw e.error; }
|
|
25
|
+
}
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
29
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
30
|
+
if (ar || !(i in from)) {
|
|
31
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
32
|
+
ar[i] = from[i];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* The class representing one event manager
|
|
39
|
+
*/
|
|
40
|
+
var AcCmEventManager = /** @class */ (function () {
|
|
41
|
+
function AcCmEventManager() {
|
|
42
|
+
this.listeners = [];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Add the event listener
|
|
46
|
+
* @param listener Input listener to be added
|
|
47
|
+
*/
|
|
48
|
+
AcCmEventManager.prototype.addEventListener = function (listener) {
|
|
49
|
+
this.listeners.push(listener);
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Remove the listener
|
|
53
|
+
* @param listener Input listener to be removed
|
|
54
|
+
*/
|
|
55
|
+
AcCmEventManager.prototype.removeEventListener = function (listener) {
|
|
56
|
+
this.listeners = this.listeners.filter(function (s) { return s !== listener; });
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Remove all listeners bound to the target and add one new listener
|
|
60
|
+
* @param listener Input listener to be added
|
|
61
|
+
*/
|
|
62
|
+
AcCmEventManager.prototype.replaceEventListener = function (listener) {
|
|
63
|
+
this.removeEventListener(listener);
|
|
64
|
+
this.addEventListener(listener);
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Notify all listeners
|
|
68
|
+
* @param payload Input payload passed to listener
|
|
69
|
+
*/
|
|
70
|
+
AcCmEventManager.prototype.dispatch = function (payload) {
|
|
71
|
+
var e_1, _a;
|
|
72
|
+
var args = [];
|
|
73
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
74
|
+
args[_i - 1] = arguments[_i];
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
for (var _b = __values(this.listeners), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
78
|
+
var item = _c.value;
|
|
79
|
+
var listener = item;
|
|
80
|
+
listener.call.apply(listener, __spreadArray([null, payload], __read(args), false));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
84
|
+
finally {
|
|
85
|
+
try {
|
|
86
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
87
|
+
}
|
|
88
|
+
finally { if (e_1) throw e_1.error; }
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
return AcCmEventManager;
|
|
92
|
+
}());
|
|
93
|
+
export { AcCmEventManager };
|
|
94
|
+
//# sourceMappingURL=AcCmEventManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcCmEventManager.js","sourceRoot":"","sources":["../src/AcCmEventManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;GAEG;AACH;IAAA;QACU,cAAS,GAA6B,EAAE,CAAA;IAqClD,CAAC;IAnCC;;;OAGG;IACI,2CAAgB,GAAvB,UAAwB,QAA8B;QACpD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC/B,CAAC;IAED;;;OAGG;IACI,8CAAmB,GAA1B,UAA2B,QAA8B;QACvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,KAAK,QAAQ,EAAd,CAAc,CAAC,CAAA;IAC7D,CAAC;IAED;;;OAGG;IACI,+CAAoB,GAA3B,UAA4B,QAA8B;QACxD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAA;QAClC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IACjC,CAAC;IAED;;;OAGG;IACI,mCAAQ,GAAf,UAAgB,OAAW;;QAAE,cAAkB;aAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;YAAlB,6BAAkB;;;YAC7C,KAAmB,IAAA,KAAA,SAAA,IAAI,CAAC,SAAS,CAAA,gBAAA,4BAAE,CAAC;gBAA/B,IAAM,IAAI,WAAA;gBACb,IAAM,QAAQ,GAAG,IAAoC,CAAA;gBACrD,QAAQ,CAAC,IAAI,OAAb,QAAQ,iBAAM,IAAI,EAAE,OAAO,UAAK,IAAI,WAAC;YACvC,CAAC;;;;;;;;;IACH,CAAC;IACH,uBAAC;AAAD,CAAC,AAtCD,IAsCC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as loglevel from 'loglevel';
|
|
2
|
+
export declare const DEBUG_MODE = true;
|
|
3
|
+
export declare const log: {
|
|
4
|
+
default: loglevel.RootLogger;
|
|
5
|
+
noConflict(): any;
|
|
6
|
+
getLogger(name: string | symbol): loglevel.Logger;
|
|
7
|
+
getLoggers(): {
|
|
8
|
+
[name: string]: loglevel.Logger;
|
|
9
|
+
};
|
|
10
|
+
levels: loglevel.LogLevel;
|
|
11
|
+
methodFactory: loglevel.MethodFactory;
|
|
12
|
+
trace(...msg: any[]): void;
|
|
13
|
+
debug(...msg: any[]): void;
|
|
14
|
+
log(...msg: any[]): void;
|
|
15
|
+
info(...msg: any[]): void;
|
|
16
|
+
warn(...msg: any[]): void;
|
|
17
|
+
error(...msg: any[]): void;
|
|
18
|
+
setLevel(level: loglevel.LogLevelDesc, persist?: boolean): void;
|
|
19
|
+
getLevel(): loglevel.LogLevel[keyof loglevel.LogLevel];
|
|
20
|
+
setDefaultLevel(level: loglevel.LogLevelDesc): void;
|
|
21
|
+
resetLevel(): void;
|
|
22
|
+
enableAll(persist?: boolean): void;
|
|
23
|
+
disableAll(persist?: boolean): void;
|
|
24
|
+
rebuild(): void;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Sets log level.
|
|
28
|
+
* Note that, we limit user to set only some of the levels.
|
|
29
|
+
*/
|
|
30
|
+
export declare const setLogLevel: (level: string) => void;
|
|
31
|
+
//# sourceMappingURL=AcCmLogUtil.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcCmLogUtil.d.ts","sourceRoot":"","sources":["../src/AcCmLogUtil.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAA;AAEpC,eAAO,MAAM,UAAU,OAAO,CAAA;AAC9B,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;CAAW,CAAA;AAQ3B;;;GAGG;AACH,eAAO,MAAM,WAAW,UAAW,MAAM,SAOxC,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as loglevel from 'loglevel';
|
|
2
|
+
export var DEBUG_MODE = true;
|
|
3
|
+
export var log = loglevel;
|
|
4
|
+
if (DEBUG_MODE) {
|
|
5
|
+
log.setLevel('debug');
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
log.setLevel('warn');
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Sets log level.
|
|
12
|
+
* Note that, we limit user to set only some of the levels.
|
|
13
|
+
*/
|
|
14
|
+
export var setLogLevel = function (level) {
|
|
15
|
+
try {
|
|
16
|
+
log.setLevel(level);
|
|
17
|
+
}
|
|
18
|
+
catch (ex) {
|
|
19
|
+
log.setLevel('error');
|
|
20
|
+
log.error(ex);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=AcCmLogUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcCmLogUtil.js","sourceRoot":"","sources":["../src/AcCmLogUtil.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAA;AAEpC,MAAM,CAAC,IAAM,UAAU,GAAG,IAAI,CAAA;AAC9B,MAAM,CAAC,IAAM,GAAG,GAAG,QAAQ,CAAA;AAE3B,IAAI,UAAU,EAAE,CAAC;IACf,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AACvB,CAAC;KAAM,CAAC;IACN,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,IAAM,WAAW,GAAG,UAAC,KAAa;IACvC,IAAI,CAAC;QACH,GAAG,CAAC,QAAQ,CAAC,KAA8B,CAAC,CAAA;IAC9C,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACrB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACf,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { AcCmEventManager } from './AcCmEventManager';
|
|
2
|
+
export type AcCmAttributes = Record<string, any>;
|
|
3
|
+
/**
|
|
4
|
+
* Options to set attributes of one `AcCmObject` instance
|
|
5
|
+
*/
|
|
6
|
+
export interface AcCmObjectOptions {
|
|
7
|
+
silent?: boolean | undefined;
|
|
8
|
+
unset?: boolean | undefined;
|
|
9
|
+
}
|
|
10
|
+
export type AcCmStringKey<T> = keyof T & string;
|
|
11
|
+
/**
|
|
12
|
+
* Interface to define arguments of changed event of one `AcCmObject` instance
|
|
13
|
+
*/
|
|
14
|
+
export interface AcCmObjectChangedEventArgs<T extends AcCmAttributes> {
|
|
15
|
+
object: AcCmObject<T>;
|
|
16
|
+
options?: AcCmObjectOptions;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Interface to define arguments of attribute changed event of one `AcCmObject` instance
|
|
20
|
+
*/
|
|
21
|
+
export interface AcCmObjectAttributeChangedEventArgs<T extends AcCmAttributes> extends AcCmObjectChangedEventArgs<T> {
|
|
22
|
+
attrName?: string;
|
|
23
|
+
attrValue?: any;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* This class is used to store attributes of one data model. It has the following benifits.
|
|
27
|
+
* - Get notification when value of one attributes is changed
|
|
28
|
+
* - Have one `changed` property to store all of changed values
|
|
29
|
+
* - Store all of states of one model in one key/value object and make it is easy to serialize/deserialize model and model changes
|
|
30
|
+
*
|
|
31
|
+
* Actually implementation of this class is based on class Model in Backbone.js. However, Model class in Backbone
|
|
32
|
+
* is too heavy. So we implement it again based on source code of class Model in Backbone.js. Morever, we want to
|
|
33
|
+
* keep our library with less external dependencies and don't want to introduce depenedency on Backbone.js.
|
|
34
|
+
*/
|
|
35
|
+
export declare class AcCmObject<T extends AcCmAttributes = any> {
|
|
36
|
+
attributes: Partial<T>;
|
|
37
|
+
changed: Partial<T>;
|
|
38
|
+
readonly events: {
|
|
39
|
+
attrChanged: AcCmEventManager<AcCmObjectAttributeChangedEventArgs<T>>;
|
|
40
|
+
modelChanged: AcCmEventManager<AcCmObjectChangedEventArgs<T>>;
|
|
41
|
+
};
|
|
42
|
+
private _changing;
|
|
43
|
+
private _previousAttributes;
|
|
44
|
+
private _pending;
|
|
45
|
+
/**
|
|
46
|
+
* Create one object to store attributes. For performance reason, values of attributes passed to constructor
|
|
47
|
+
* will not be cloned to `attributes` property. So it means that value of `attributes` property in this object
|
|
48
|
+
* is just a reference to arguments `attributes` passed to constructor.
|
|
49
|
+
* @param attributes Input attributes to store in this object
|
|
50
|
+
*/
|
|
51
|
+
constructor(attributes?: Partial<T>, defaultAttrs?: Partial<T>);
|
|
52
|
+
/**
|
|
53
|
+
* For strongly-typed access to attributes, use the `get` method only privately in public getter properties.
|
|
54
|
+
* @example
|
|
55
|
+
* get name(): string {
|
|
56
|
+
* return super.get("name")
|
|
57
|
+
* }
|
|
58
|
+
*/
|
|
59
|
+
get<A extends AcCmStringKey<T>>(key: A): T[A] | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* For strongly-typed assignment of attributes, use the `set` method only privately in public setter properties.
|
|
62
|
+
* @example
|
|
63
|
+
* set name(value: string) {
|
|
64
|
+
* super.set("name", value)
|
|
65
|
+
* }
|
|
66
|
+
*/
|
|
67
|
+
set<A extends AcCmStringKey<T>>(key: A, val?: T[A], options?: AcCmObjectOptions): this;
|
|
68
|
+
set(key: Partial<T>, options?: AcCmObjectOptions): this;
|
|
69
|
+
has(key: AcCmStringKey<T>): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Determine if the model has changed since the last `"change"` event.
|
|
72
|
+
* If you specify an attribute name, determine if that attribute has changed.
|
|
73
|
+
*/
|
|
74
|
+
hasChanged(key?: AcCmStringKey<T>): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Return an object containing all the attributes that have changed. Useful for determining what parts
|
|
77
|
+
* of a view need to be updated and/or what attributes need to be persisted to the server.
|
|
78
|
+
*
|
|
79
|
+
* Unset attributes will be set to undefined. You can also pass an attributes object to diff against
|
|
80
|
+
* the model, determining if there *would be* a change.
|
|
81
|
+
*/
|
|
82
|
+
changedAttributes(diff?: Partial<T>): Partial<T>;
|
|
83
|
+
/**
|
|
84
|
+
* Get the previous value of an attribute, recorded at the time the last `"change"` event was fired.
|
|
85
|
+
*/
|
|
86
|
+
previous<A extends AcCmStringKey<T>>(key: A): T[A] | null | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* Get all of the attributes of the model at the time of the previous `"change"` event.
|
|
89
|
+
*/
|
|
90
|
+
previousAttributes(): Partial<T>;
|
|
91
|
+
/**
|
|
92
|
+
* Create a new model with identical attributes to this one.
|
|
93
|
+
*/
|
|
94
|
+
clone(): AcCmObject<T>;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=AcCmObject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcCmObject.d.ts","sourceRoot":"","sources":["../src/AcCmObject.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAEhD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC5B,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC5B;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAA;AAE/C;;GAEG;AACH,MAAM,WAAW,0BAA0B,CAAC,CAAC,SAAS,cAAc;IAClE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;IACrB,OAAO,CAAC,EAAE,iBAAiB,CAAA;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,mCAAmC,CAAC,CAAC,SAAS,cAAc,CAC3E,SAAQ,0BAA0B,CAAC,CAAC,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,SAAS,CAAC,EAAE,GAAG,CAAA;CAChB;AAED;;;;;;;;;GASG;AAEH,qBAAa,UAAU,CAAC,CAAC,SAAS,cAAc,GAAG,GAAG;IACpD,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACtB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IAEnB,SAAgB,MAAM;;;MAGrB;IAED,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,mBAAmB,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAiB;IAEjC;;;;;OAKG;gBACS,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAS9D;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;IAIzD;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,EAC5B,GAAG,EAAE,CAAC,EACN,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EACV,OAAO,CAAC,EAAE,iBAAiB,GAC1B,IAAI;IACP,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI;IAiFvD,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO;IAInC;;;OAGG;IACH,UAAU,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;IAKjC;;;;;;OAMG;IACH,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAYhD;;OAEG;IACH,QAAQ,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS;IAKrE;;OAEG;IACH,kBAAkB,IAAI,OAAO,CAAC,CAAC,CAAC;IAIhC;;OAEG;IACH,KAAK;CAIN"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { clone, defaults, has, isEmpty, isEqual } from 'lodash-es';
|
|
2
|
+
import { AcCmEventManager } from './AcCmEventManager';
|
|
3
|
+
/**
|
|
4
|
+
* This class is used to store attributes of one data model. It has the following benifits.
|
|
5
|
+
* - Get notification when value of one attributes is changed
|
|
6
|
+
* - Have one `changed` property to store all of changed values
|
|
7
|
+
* - Store all of states of one model in one key/value object and make it is easy to serialize/deserialize model and model changes
|
|
8
|
+
*
|
|
9
|
+
* Actually implementation of this class is based on class Model in Backbone.js. However, Model class in Backbone
|
|
10
|
+
* is too heavy. So we implement it again based on source code of class Model in Backbone.js. Morever, we want to
|
|
11
|
+
* keep our library with less external dependencies and don't want to introduce depenedency on Backbone.js.
|
|
12
|
+
*/
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
|
+
var AcCmObject = /** @class */ (function () {
|
|
15
|
+
/**
|
|
16
|
+
* Create one object to store attributes. For performance reason, values of attributes passed to constructor
|
|
17
|
+
* will not be cloned to `attributes` property. So it means that value of `attributes` property in this object
|
|
18
|
+
* is just a reference to arguments `attributes` passed to constructor.
|
|
19
|
+
* @param attributes Input attributes to store in this object
|
|
20
|
+
*/
|
|
21
|
+
function AcCmObject(attributes, defaultAttrs) {
|
|
22
|
+
this.events = {
|
|
23
|
+
attrChanged: new AcCmEventManager(),
|
|
24
|
+
modelChanged: new AcCmEventManager()
|
|
25
|
+
};
|
|
26
|
+
this._changing = false;
|
|
27
|
+
this._previousAttributes = {};
|
|
28
|
+
this._pending = false;
|
|
29
|
+
var attrs = attributes || {};
|
|
30
|
+
if (defaultAttrs) {
|
|
31
|
+
defaults(attrs, defaultAttrs);
|
|
32
|
+
}
|
|
33
|
+
this.attributes = attrs;
|
|
34
|
+
this.changed = {};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* For strongly-typed access to attributes, use the `get` method only privately in public getter properties.
|
|
38
|
+
* @example
|
|
39
|
+
* get name(): string {
|
|
40
|
+
* return super.get("name")
|
|
41
|
+
* }
|
|
42
|
+
*/
|
|
43
|
+
AcCmObject.prototype.get = function (key) {
|
|
44
|
+
return this.attributes[key];
|
|
45
|
+
};
|
|
46
|
+
AcCmObject.prototype.set = function (key, val, options) {
|
|
47
|
+
if (key == null)
|
|
48
|
+
return this;
|
|
49
|
+
// Handle both `"key", value` and `{key: value}` -style arguments.
|
|
50
|
+
var attrs;
|
|
51
|
+
if (typeof key === 'object') {
|
|
52
|
+
attrs = key;
|
|
53
|
+
options = val;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
attrs = {};
|
|
57
|
+
attrs[key] = val;
|
|
58
|
+
}
|
|
59
|
+
options || (options = {});
|
|
60
|
+
// Extract attributes and options.
|
|
61
|
+
var unset = options.unset;
|
|
62
|
+
var silent = options.silent;
|
|
63
|
+
var changes = [];
|
|
64
|
+
var changing = this._changing;
|
|
65
|
+
this._changing = true;
|
|
66
|
+
if (!changing) {
|
|
67
|
+
this._previousAttributes = clone(this.attributes);
|
|
68
|
+
this.changed = {};
|
|
69
|
+
}
|
|
70
|
+
var current = this.attributes;
|
|
71
|
+
var changed = this.changed;
|
|
72
|
+
var prev = this._previousAttributes;
|
|
73
|
+
// For each `set` attribute, update or delete the current value.
|
|
74
|
+
for (var attr in attrs) {
|
|
75
|
+
val = attrs[attr];
|
|
76
|
+
if (!isEqual(current[attr], val))
|
|
77
|
+
changes.push(attr);
|
|
78
|
+
if (!isEqual(prev[attr], val)) {
|
|
79
|
+
changed[attr] = val;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
delete changed[attr];
|
|
83
|
+
}
|
|
84
|
+
unset ? delete current[attr] : (current[attr] = val);
|
|
85
|
+
}
|
|
86
|
+
// Trigger all relevant attribute changes.
|
|
87
|
+
if (!silent) {
|
|
88
|
+
// @ts-expect-error just keep backbone implementation as is
|
|
89
|
+
if (changes.length)
|
|
90
|
+
this._pending = options;
|
|
91
|
+
for (var i = 0; i < changes.length; i++) {
|
|
92
|
+
this.events.attrChanged.dispatch({
|
|
93
|
+
object: this,
|
|
94
|
+
attrName: changes[i],
|
|
95
|
+
attrValue: current[changes[i]],
|
|
96
|
+
options: options
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// You might be wondering why there's a `while` loop here. Changes can
|
|
101
|
+
// be recursively nested within `"change"` events.
|
|
102
|
+
if (changing)
|
|
103
|
+
return this;
|
|
104
|
+
if (!silent) {
|
|
105
|
+
while (this._pending) {
|
|
106
|
+
// @ts-expect-error just keep backbone implementation as is
|
|
107
|
+
options = this._pending;
|
|
108
|
+
this._pending = false;
|
|
109
|
+
this.events.modelChanged.dispatch({
|
|
110
|
+
object: this,
|
|
111
|
+
options: options
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
this._pending = false;
|
|
116
|
+
this._changing = false;
|
|
117
|
+
return this;
|
|
118
|
+
};
|
|
119
|
+
AcCmObject.prototype.has = function (key) {
|
|
120
|
+
return this.get(key) != null;
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* Determine if the model has changed since the last `"change"` event.
|
|
124
|
+
* If you specify an attribute name, determine if that attribute has changed.
|
|
125
|
+
*/
|
|
126
|
+
AcCmObject.prototype.hasChanged = function (key) {
|
|
127
|
+
if (key == null)
|
|
128
|
+
return !isEmpty(this.changed);
|
|
129
|
+
return has(this.changed, key);
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Return an object containing all the attributes that have changed. Useful for determining what parts
|
|
133
|
+
* of a view need to be updated and/or what attributes need to be persisted to the server.
|
|
134
|
+
*
|
|
135
|
+
* Unset attributes will be set to undefined. You can also pass an attributes object to diff against
|
|
136
|
+
* the model, determining if there *would be* a change.
|
|
137
|
+
*/
|
|
138
|
+
AcCmObject.prototype.changedAttributes = function (diff) {
|
|
139
|
+
if (!diff)
|
|
140
|
+
return this.hasChanged() ? clone(this.changed) : {};
|
|
141
|
+
var old = this._changing ? this._previousAttributes : this.attributes;
|
|
142
|
+
var changed = {};
|
|
143
|
+
for (var attr in diff) {
|
|
144
|
+
var val = diff[attr];
|
|
145
|
+
if (isEqual(old[attr], val))
|
|
146
|
+
continue;
|
|
147
|
+
changed[attr] = val;
|
|
148
|
+
}
|
|
149
|
+
return changed;
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* Get the previous value of an attribute, recorded at the time the last `"change"` event was fired.
|
|
153
|
+
*/
|
|
154
|
+
AcCmObject.prototype.previous = function (key) {
|
|
155
|
+
if (key == null || !this._previousAttributes)
|
|
156
|
+
return null;
|
|
157
|
+
return this._previousAttributes[key];
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Get all of the attributes of the model at the time of the previous `"change"` event.
|
|
161
|
+
*/
|
|
162
|
+
AcCmObject.prototype.previousAttributes = function () {
|
|
163
|
+
return clone(this._previousAttributes);
|
|
164
|
+
};
|
|
165
|
+
/**
|
|
166
|
+
* Create a new model with identical attributes to this one.
|
|
167
|
+
*/
|
|
168
|
+
AcCmObject.prototype.clone = function () {
|
|
169
|
+
var attrs = clone(this.attributes);
|
|
170
|
+
return new AcCmObject(attrs);
|
|
171
|
+
};
|
|
172
|
+
return AcCmObject;
|
|
173
|
+
}());
|
|
174
|
+
export { AcCmObject };
|
|
175
|
+
//# sourceMappingURL=AcCmObject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcCmObject.js","sourceRoot":"","sources":["../src/AcCmObject.ts"],"names":[],"mappings":"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"}
|